pygame set_at函数似乎无法正常工作。有人可以解释它的行为并帮助我解决它吗?

时间:2012-12-09 20:17:38

标签: python pygame

我正在尝试使用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值显式设置为我想要的值?

谢谢大家。

1 个答案:

答案 0 :(得分:1)

免责声明,这是基于阅读文档而非实际经验。

来自http://www.pygame.org/docs/ref/image.html#pygame.image.load

  

返回的Surface将包含与其来源相同的颜色格式,颜色键和Alpha透明度。您经常需要调用Surface.convert - 更改不带参数的图像的像素格式,以创建将在屏幕上更快绘制的副本。

也许在你的代码之前尝试这样的事情......

converted_image = image.convert_alpha()