如何用 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])
而且该解决方案非常有效!
我正在使用 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' 来检索或设置像素。
我试过 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])
而且该解决方案非常有效!