Python 带pyglet的putpixel

Python 带pyglet的putpixel,python,image,pyglet,Python,Image,Pyglet,我是皮格莱特的新手。我想在每次绘图时将一个像素从黑色改为白色。因此,在1000次迭代之后,窗口中应该正好有1000个白色像素。但是,我不想为此在_draw中调用1000个draw操作。所以我想创建一个图像,在图像上加一个RGB像素,然后将图像blit到屏幕上。我该怎么做?pyglet文档、示例和源代码对此没有太大帮助。在pyglet中似乎没有简单的方法可以做到这一点。所以我放弃了使用pyglet。现在帮不了你,但是有办法做到这一点。例如,blit_into,用于修改加载的图像: import p

我是皮格莱特的新手。我想在每次绘图时将一个像素从黑色改为白色。因此,在1000次迭代之后,窗口中应该正好有1000个白色像素。但是,我不想为此在_draw中调用1000个draw操作。所以我想创建一个图像,在图像上加一个RGB像素,然后将图像blit到屏幕上。我该怎么做?pyglet文档、示例和源代码对此没有太大帮助。

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

现在帮不了你,但是有办法做到这一点。例如,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()

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

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()
从本质上说,它创建的是一个白色图像,它本身可以在窗口中绘制。但是,正如我们想做的那样,我修改了白色图像中的每个像素作为演示

可与以下设备结合使用:


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

这是非常低效的,因为您需要从磁盘加载整个.bmp像素。如果你的CPU比硬盘快,我建议你这样做:
pix=pyglet.image.SolidColorImagePattern((255255)).create_image(1,1)
其中
1,1
可以替换为你想要创建的“像素簇”。我想这取决于这个问题是否专门针对这个玩具示例,或者更一般的情况下,您希望动态更改图像。不管怎样,这都不是每帧操作。很难想象你会加载这么多单独的像素,这会以任何方式影响性能。谢谢你的代码指针!请在绘图上的
中添加代码,以更改
图像的1个像素的颜色
?应该是这样的吗<代码>pyglet.image.SolidColorImagePattern((200100,0255)).create‌e_image(1,1).将图像(x,y,0)导入到(image,x,y,0)
,或者是否有更有效的方法来执行
putpixel
?@pts我将在几个小时内回答您的问题。