0

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

谢谢大家。

4

1 回答 1

1

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

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

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

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

converted_image = image.convert_alpha()
于 2012-12-09T20:57:20.610 回答