如何在没有PIL的图像文件上交换红色和绿色通道

时间:2016-05-21 21:10:56

标签: python pygame

我试图使用pygame拍摄截图,但它会交换绿色和红色。(仅当我使用png时)有没有人知道如何在没有PIL的情况下解决这个问题? 我特别需要该文件为.png。

2 个答案:

答案 0 :(得分:1)

你可以使用surfarray类,3个维度是红色#green / blue,所以这样的东西应该有效:

img = pygame.surfarray.array3d(*your image here*)
img_copy = pygame.surfarray.array3d(*your image name here*)

for y in range(0, *image height*):
    for x in range(0, *img width*):
       img_copy[x][y][0] = img[x][y][1]
       img_copy[x][y][1] = img[x][y][0]

然后你可以这样做:

surf = pygame.surfarray.make_surface(img_copy)

答案 1 :(得分:0)

pg导出似乎是pygame中的一个错误, 如此链接中所述: http://www.mzan.com/article/19296253-pygame-image-save-colors-distorted.shtml

所以,如果你绝对需要PNG,你可以用这种方式使用PIL(即使它是PIL,你将有一个PNG文件;)

首先,导出到BPM,然后执行:

from PIL import 
Image im = Image.open("screenshot.bmp") 
im.save("screenshot.png") 

你不能避免使用第三方库,因为它是一个pygame bug:s