如何用 Pyglet 检查像素颜色?

How to check pixel color with Pyglet?

我正在使用 Pyglet 并尝试打印鼠标当前位置的背景颜色。启动应用程序的脚本如下:

import pyglet

from pyglet.window import Window
from background import Background


window = Window(fullscreen=True)

game_batch = pyglet.graphics.Batch()

r = Background(batch=game_batch)

@window.event
def on_mouse_motion(x,y, dx, dy):
    print(x,y) # print current position
    #### ... but how to print pixel color (RGB) here? ####

@window.event
def on_draw():
    window.clear()
    game_batch.draw()


if __name__ == '__main__':
    pyglet.app.run()

classBackground.py是:

import pyglet

from physical_object import PhysicalObject

pyglet.resource.path = ['./resources']
pyglet.resource.reindex()

my_img = pyglet.resource.image('background.png')


class Background(PhysicalObject):
    def __init__(self, *args, **kwargs):
        super().__init__(img=my_img, *args, **kwargs)


查看文档,我发现 OpenGL 可用于提取此颜色信息,但我对如何提取感到困惑。我应该使用 OpenGL 吗?或者有更简单的方法来访问像素颜色?

提前致谢。

也许你可以看看这个: Setting individual pixels in Pyglet

但一般来说,img.get_image_data() 总是 returns 所有像素。 这是相关文档:https://pyglet.readthedocs.io/en/latest/modules/image/#pyglet.image.AbstractImage.get_image_data

有了 ImageData 对象,您就可以使用 'set_data' 或 'get_data' 来检索或设置像素。

我试过 只是将以下方法添加到 class Background,在每个鼠标移动事件中都会调用该方法:

def check_position(self, x, y):
    img_data = road_img.get_region(x, y, 1, 1).get_image_data()
    width = img_data.width
    data = img_data.get_data('RGB', 3 * width)
    print(data[0] + ', ' + data[1] + ', ' + data[2])

而且该解决方案非常有效!