【问题标题】:The pygame set_at function doesn't seem to work correctly. Can somebody explain it's behavior and help me work around it?pygame set_at 函数似乎无法正常工作。有人可以解释它的行为并帮助我解决它吗?
【发布时间】: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 位。这是你要找的吗?

标签: python pygame


【解决方案1】:

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

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

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

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

converted_image = image.convert_alpha()

【讨论】:

  • 哇!虽然我不小心使用了 image.convert() 而不是 image.convert_alpha(),但我只是尝试过这个。无论如何,这完美地解决了我的问题。感谢您的帮助!
猜你喜欢
  • 2022-09-28
  • 2021-09-18
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 2023-01-20
  • 2021-07-24
  • 2021-10-23
  • 2021-05-30
相关资源
最近更新 更多