我正在尝试使用python的pygame库逐个像素地编辑png文件。这是基本过程:我加载png并循环遍历所有像素。循环将当前像素的rgb值传递给函数,该函数查找与预定义的rgb值集合最近的欧氏距离匹配(如果愿意,可以使用调色板)。然后我使用surface.set_at()函数将像素颜色更改为匹配函数返回的颜色。
我一直在努力确定为什么结果根本不符合我的预期。最后我注意到了这一点。
>>> image.set_at((0,0),(160, 130, 95, 255))
>>> image.get_at((0,0))
(152, 128, 96, 255)
很明显,set_at()函数对传递的颜色进行了某种类型的舍入。这对我来说是一个问题所以我有两个问题。
1)为什么set_at()函数会进行此更改?
2)我如何解决这个问题并将rgb值显式设置为我想要的值?
谢谢大家。
答案 0 :(得分:1)
免责声明,这是基于阅读文档而非实际经验。
来自http://www.pygame.org/docs/ref/image.html#pygame.image.load
返回的Surface将包含与其来源相同的颜色格式,颜色键和Alpha透明度。您经常需要调用Surface.convert - 更改不带参数的图像的像素格式,以创建将在屏幕上更快绘制的副本。
也许在你的代码之前尝试这样的事情......
converted_image = image.convert_alpha()