1

所以我在我的游戏中实现了以下截图功能,只是为了记录进度和类似的东西。这是我的代码:

pygame.image.save(screen, save_file)

很基本。我最近升级到了 python 3.3,并且一直在使用此功能时遇到颜色失真的问题。这就是我的意思:

扭曲的颜色: 扭曲的屏幕截图

所以它看起来很不错,但它不是应该的样子。这是实际图像:

实际图像

这是一个已知问题还是只是我?是否有任何修复或目前只是一个损坏的功能。我正在使用 pygame 1.9.2pre,我假设这只是预发布的一个错误,但我在使用任何其他版本的 pygame 和 python 3.3 时遇到了问题。

4

2 回答 2

3

一些用户报告了将图像保存为 png 的困难:

即使我指定 .png,我也只会获得 .tga 文件。非常令人沮丧。

如果您使用 .PNG(大写),它将导致文件无效(至少在我的 win32 上)。请改用 .png(小写)。

PNG 似乎不起作用,我可以在 Thunar 中预览它,但在其他任何地方它都说它不是有效的 PNG。

以不同的格式保存可能会有所帮助。例如,BMP 是一种简单的格式,因此 Pygame 的实现不太可能出现错误。

如果您真的想保存为 PNG,可以通过将红色通道与绿色通道交换来反转失真。这相当容易。例如,使用 PIL:

from PIL import Image
im = Image.open("screenshot.png")
width, height = im.size

pix = im.load()
for i in range(width):
    for j in range(height):
        r,g,b = pix[i,j]
        pix[i,j] = (g,r,b)

im.save("output.png")

或者您可以保存为 BMP 并在事后转换为 PNG:

from PIL import Image
im = Image.open("screenshot.bmp")
im.save("screenshot.png")
于 2013-10-10T13:18:21.057 回答
0

为了将来参考,这个技巧对我有用:

from PIL import Image
imgdata = pygame.surfarray.array3d(screen).transpose([1,0,2])[:,:,::-1]
Image.fromarray(imgdata).save('output.png')
于 2020-09-15T19:38:09.827 回答