1

我是 pyglet 的新手。我想在每次on_draw迭代时将像素从黑色更改为白色。所以在 1000 次迭代之后,窗口中应该正好有 1000 个白色像素。但是,我想避免为此调用 1000 次绘制操作on_draw。所以我想创建一个图像,在图像上做一个 RGB putpixel,然后将图像blit到屏幕上。我怎样才能做到这一点?pyglet 文档、示例和源代码对此没有太大帮助。

4

3 回答 3

2

因为没有人对此给出一个很好的答案。
我在这里放一个:

import pyglet
from random import randint

width, height = 500, 500
window = pyglet.window.Window(width=width, height=height)
image = pyglet.image.SolidColorImagePattern((255,255,255,255)).create_image(width, height)

data = image.get_image_data().get_data('RGB', width*3)
new_image = b''

for i in range(0, len(data), 3):
    pixel = bytes([randint(0,255)]) + bytes([randint(0,255)]) + bytes([randint(0,255)])
    new_image += pixel

image.set_data('RGB', width*3, new_image)

@window.event
def on_draw():
    window.clear()
    image.blit(0, 0)

pyglet.app.run()

本质上,它的作用是创建一个白色图像,它本身可以在窗口中绘制。但是正如我们想要做的那样putpixel,我已经修改了白色图像中的每个像素作为演示。

可以结合使用:

可用于进一步优化图像处理。

于 2017-02-26T23:58:31.497 回答
1

为时已晚,无法帮助您,但有一些方法可以做到这一点。例如,blit_into,它修改加载的图像:

import pyglet
window = pyglet.window.Window(600, 600)
background = pyglet.resource.image('my600x600blackbackground.bmp')
pix = pyglet.resource.image('singlewhitepixel.bmp').get_image_data()

def update(dt):
    background.blit_into(pix, x, y, 0) #specify x and y however you want

@window.event
def on_draw():
    window.clear()
    background.blit(0,0)

pyglet.clock.schedule(update, 1.0/30) #30 frames per second
pyglet.app.run()
于 2013-12-15T02:39:35.487 回答
0

在 pyglet 中似乎没有简单的方法可以做到这一点。所以我放弃了使用pyglet。

于 2011-04-29T13:46:20.500 回答