如何将pygame Surface转换为PIL图像?

时间:2013-01-05 21:40:29

标签: python python-2.7 python-imaging-library pygame

我正在使用PIL透视地转换部分屏幕。 原始图像数据是一个pygame Surface,需要转换为PIL图像。

因此我找到了为此目的而存在的pygame的tostring-function。

然而结果看起来很奇怪(见附件截图)。这段代码出了什么问题:

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)

我做错了什么?

pygame surface to pil image conversion

1 个答案:

答案 0 :(得分:5)

正如我在评论中所指出的,pygame documentation for pygame.image.fromstring(string, size, format, flipped=False)表示“大小和格式图像必须计算与传递的字符串缓冲区完全相同的大小。否则将引发异常“。因此,使用(1024,768)代替(660,660),反之亦然 - 通常,两个调用的相同维度 - 更有可能起作用。 (我说“更有可能工作”而不是“会工作”,因为我没有测试任何案例。)

怀疑这样的问题的原因:部分图像的奇怪外观类似于显示屏幕,其设置为无法同步的光栅速率;即,图像的线条开始显示在左边缘以外的点;在这种情况下,因为图像线长度比显示线长度长。我假设雪花是精灵,与扭曲的图像分开生成。