有没有办法在 Pyglet 中为图像数据设置单独的像素值?
我想这也可以通过将 OpenGL 渲染模式设置为点来完成,所以如果有人对此有见解,请也分享一下。
请您参考如下方法:
最终对我来说最合适的解决方案是使用 ImageData 类,它随每个 AbstractImage 一起提供。子类。
ImageData 数组检索
ImageData类将图像表示为字节数组,或者更准确地说是一个字符串,其中每个字符表示所需颜色空间中的一个坐标。
要获得给定图像的字节表示,您可以调用
image_data = image.get_image_data()
width = image_data.width
data = image_data.get_data('RGB', 3*width)
我们传递给 get_data 的第二个参数是我们期望为图像的每一行获取的字节数。因为我们希望每个像素都有 R、G 和 B 的所有分量,所以我们希望有 3 倍的图像宽度。如果我们只对每个像素的强度感兴趣,我们将传递参数 ('I', image.width)。 Here's some official documentation .
仅获取您感兴趣的像素的值,例如(x,y) 处的那个,你可能想这样做:
pos = (width*y + x) * 3
rgb = map(ord, data[pos:pos+3])
您也可以为某个 region 调用 get_image_data(),而不是为整个图像检索 ImageData 并在之后选择所需的像素值。 ,即所需位置的 1x1 像素:
image_data = image.get_region(x,y,1,1).get_image_data()
这就是它的完成方式 this google groups post ,您还可以在其中找到有用的信息,将图像数据作为 RGBA 而不是 RGB 似乎更有效。
设置单个像素
现在终于回答问题了,ImageData的图片字节数据也有setter方法,set_data , 正好相反。
image_data.set_data('RGB', image.width*3, data)
这可能也适用于区域,但我还没有尝试过。如果您想设置存储在整数数组中的字节数据,请传递 ''.join(map(chr, data))。不知道有没有设置数值的方法。
希望这可以帮助任何人绊倒这个相当古老的问题,但恰好是某些搜索词的突出谷歌结果。
