如何将 pygame Surface 转换为 PIL 图像?
Posted
技术标签:
【中文标题】如何将 pygame Surface 转换为 PIL 图像?【英文标题】:How to convert a pygame Surface to a PIL Image? 【发布时间】:2012-12-20 01:05:22 【问题描述】:我正在使用 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)
我做错了什么?
【问题讨论】:
如果用 (1024,768) 代替 (660,660) 会是什么样子,反之亦然? pygame docs about pygame.image.fromstring(string, size, format, flipped=False) 说“大小和格式图像必须计算与传递的字符串缓冲区完全相同的大小。否则会引发异常”,但除此之外我不知道它是如何工作的。 请添加您的猜测作为答案,以便我将问题标记为已解决! 【参考方案1】:正如我在评论中指出的,pygame documentation
pygame.image.fromstring(string, size, format, flipped=False)
表示“大小和格式图像必须计算与传递的字符串缓冲区完全相同的大小。否则将引发异常”。因此,使用 (1024,768) 代替 (660,660),反之亦然——通常,两个调用的维度相同——更有可能起作用。 (我说“更有可能奏效”而不是“会奏效”,因为我没有测试任何案例。)
怀疑此类问题的原因:图像的一部分看起来很奇怪,就像一个设置为无法同步的光栅速率的显示屏;即,图像的线条从左边距以外的点开始显示;在这种情况下,因为图像行长度比显示行长度长。我假设雪花是精灵,与扭曲的图像分开生成。
【讨论】:
以上是关于如何将 pygame Surface 转换为 PIL 图像?的主要内容,如果未能解决你的问题,请参考以下文章
pygame.surface.blit()方法4个参数的使用方法