python - Pygame跨平台颜色不一致

标签 python pygame

我正在尝试使用 get_atset_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/

相关文章:

python - 用字符串在字典中找到最近的键?

python - 如何使用键盘快捷键向上/向下移动 Jupyter 笔记本单元格?

python - 如何以与原始 NetCDF 浮点值相同的精度和比例将 NetCDF 变量 float 据读入 Numpy 数组?

python-3.x - 在 python 中从 zip 加载音频文件时出错

python - PyQt 中程序退出后不会关闭

python - FFMPEG 帧精确视频裁剪

python - 如何使用变量作为字段名称以便在 Django 中动态更新对象

python - 如何在 Windows 上使用 Python 和 Pygame 的网络摄像头? vidcap.错误: Cannot set capture resolution

Python没有在pygame中进入for循环

Python 游戏神经网络。如何设置输入