【发布时间】:2012-12-10 04:57:20
【问题描述】:
我正在尝试使用 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 值明确设置为我想要的值?
谢谢大家。
【问题讨论】:
-
版主注意事项:我想添加 set_at 标签但无法添加。它被自动更改为“set”和“at-command”标签。
-
我不认为'set_at'标签会有用。顺便说一句:你的表面颜色深度是多少?你在用调色板吗?
-
诚然,我对所有这些(python、pygame 和颜色处理)都很陌生,所以我不完全确定如何回答您的问题。我没有明确设置调色板。也许正在使用默认调色板?至于颜色深度,每个 rgba 值是 8 位。这是你要找的吗?