pil library instalar dirtysprite convert collide_rect python python-2.7 python-imaging-library pygame

python - library - ¿Cómo convertir una superficie de pygame a una imagen PIL?



pygame image editing (1)

Estoy usando PIL para transformar una parte de la pantalla en perspectiva. La imagen de datos original es una superficie de pygame que debe convertirse en una imagen PIL.

Por lo tanto, encontré la función tostring de pygame que existe para ese propósito.

Sin embargo, el resultado parece bastante extraño (ver la captura de pantalla adjunta). ¿Qué está mal con este código?

rImage = pygame.Surface((1024,768)) #draw something to the Surface sprite = pygame.sprite.RenderPlain((playboard,)) sprite.draw(rImage) pil_string_image = pygame.image.tostring(rImage, "RGBA",False) pil_image = Image.fromstring("RGBA",(660,660),pil_string_image)

¿Qué estoy haciendo mal?


Como noté en un comentario, la documentación de pygame para pygame.image.fromstring(string, size, format, flipped=False) dice "El tamaño y la imagen de formato deben calcular el mismo tamaño exacto que el búfer de cadena pasado. De lo contrario, se generará una excepción ". Por lo tanto, usar (1024,768) en lugar de (660,660), o viceversa - en general, las mismas dimensiones para las dos llamadas - es más probable que funcione. (Digo "más probabilidades de que funcione" en lugar de "funcionará" porque no hice ninguna prueba).

La razón para sospechar un problema como este: el aspecto extraño de parte de la imagen se asemeja a una pantalla de visualización que está configurada en una velocidad de trama que no se puede sincronizar; es decir, las líneas de la imagen comienzan a mostrarse en puntos distintos al margen izquierdo; en este caso debido a que las longitudes de línea de la imagen son más largas que las longitudes de línea de la pantalla. Supongo que los copos de nieve son sprites, generados por separado de la imagen distorsionada.