[英]How to create a pySDL2 image from a memory buffer
I have a pySimpleGUI program that create an image from a memory buffer containing a JPEG image.我有一个 pySimpleGUI 程序,它从包含 JPEG 图像的内存缓冲区创建图像。
from PIL import ImageTk
image = ImageTk.PhotoImage( data=buf) # PhotoImage will detect a JPEG format
self.win["-IMAGE-'].update( data=image)
I want to convert my application to pySDL2.我想将我的应用程序转换为 pySDL2。
Since pySimpleGUI and pySDL are both based on PIL, I was expecting an easy conversion but I can't find a way to create a SDL image from a buffer.由于 pySimpleGUI 和 pySDL 都基于 PIL,我期待一个简单的转换,但我找不到从缓冲区创建 SDL 图像的方法。
Is there a way?有办法吗?
Not sure this works and is untested but might bring you down the right track.不确定这是否有效并且未经测试,但可能会让您走上正确的道路。 If you want more of the nitty-gritty behind this visit https://rubato.app/ .
如果您想了解本次访问背后的更多细节,请访问https://rubato.app/ 。 The full source code of the Image class is there.
Image 类的完整源代码在那里。
@staticmethod
def from_surface(surface: sdl2.surface.SDL_Surface) -> "Image":
"""
Creates an image from an SDL surface.
Args:
surface: the surface to create the image from.
Returns:
The created image.
"""
# untested
image = Image()
image.image = surface
return image
@staticmethod
def from_buffer(buffer: bytes) -> "Image":
"""
Creates an image from a buffer.
Args:
buffer: bytes containing the image data.
Returns:
The image created from the buffer.
"""
# untested
rw = sdl2.SDL_RWFromMem(buffer, len(buffer))
surface_temp = sdl2.sdlimage.IMG_Load_RW(rw, 1)
if surface_temp is None:
raise Exception(sdl2.sdlimage.IMG_GetError())
surface = sdl2.SDL_ConvertSurfaceFormat(surface_temp, sdl2.SDL_PIXELFORMAT_RGBA8888, 0).contents
sdl2.SDL_FreeSurface(surface_temp)
return Image.from_SDL_Surface(surface)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.