我正在尝试使用 get_at
和 set_at
通过查找非透明像素并将它们更改为所需颜色来更改 GIF 图像的颜色。
在 OSX 机器上它工作正常,透明颜色被读取为 (0, 0, 0, 0)
并且被重新着色为我选择的任何颜色。但是当我在 Windows 7 机器上运行时,透明像素被读取为 (255, 255, 255, 0)
,导致整个图像被着色。
我使用的代码如下:
player_border_w, player_border_h = thisGame.ready_border.get_size()
for y in range(player_border_h): # run for each image pixel
for x in range(player_border_w):
if thisGame.ready_border.get_at((x, y)) != TRANSPARENT: # (0, 0, 0, 0)
thisGame.ready_border.set_at((x, y), thisGame.ghost_colors[idx - 1]) # replace with desired color
任何人都可能知道是什么导致了这种情况以及任何解决方案?
谢谢!
最佳答案
颜色符号 RGBA 应该给你一个线索——(红、蓝、绿、Alpha)。因此,alpha channel 表示不透明度 - 如果将其设置为 0,则其他颜色设置为什么都没有关系。
所以你应该使用类似的方法
def is_transparent(colour):
red, green, blue, alpha = colour
if alpha == 0:
return True
return False
或者,更简洁地说:
def is_transparent(colour):
return colour[3] == 0
至于为什么这在 OSX 和 Windows 上不同,我猜测要么是底层图像读取库完全不同,要么是两个操作系统之间用于该库的编译器存在差异导致差异。
关于python - Pygame跨平台颜色不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34268536/