我想要做类似以下的事情:
...
pixel[0,0] = [ 254, 0, 0 ] # Draw R at pixel x0y0
pixel[2,1] = [ 0, 254, 0 ] # Draw G at pixel x2y1
pixel[4,2] = [ 0, 0, 254 ] # Draw B at pixel x4y2
...
我希望在短时间内展示许多不同的像素和颜色配置,将其写入中间文件会太昂贵。
在Python中,我应该如何最好地实现这个目标?
直接回答:
这只能通过特定于操作系统的API完成。有些操作系统不允许直接更改屏幕上的像素。
在Windows上,您可以使用pywin32库调用dc = GetDC(0)
获取屏幕的设备上下文,然后使用SetPixel(dc, x, y, color)
来绘制像素。
import win32gui
import win32api
dc = win32gui.GetDC(0)
red = win32api.RGB(255, 0, 0)
win32gui.SetPixel(dc, 0, 0, red) # draw red at 0,0
当然,你用这种方式绘制的内容可以随时被擦除。
正确答案:
以像素为单位逐个绘制图像是最慢的绘画方式。例如,在Windows平台上,创建一个内存中的图像,然后通过一次操作将其绘制出来比使用SetPixel逐个绘制要快得多。
如果你需要速度,可以使用Python的一些用户界面库,例如Tkinter模块或PyQt。在内存中创建一个窗口和图像,然后将图像绘制在窗口上。如果你需要操作像素,就在图像上进行操作,并在每次操作后重新绘制。
win32gui.GetPixel(dc, 0, 0)
保存像素的值,以便稍后恢复。 - martineau我不确定我是否理解了你的问题,但我相信你应该调查一些框架或中间件,让你可以访问屏幕。我建议使用PyGame、Pyglet甚至是Panda。这可能有点过度,因为Pygame和Panda是让你开发游戏的框架,而Pyglet是Python中Opengl的封装,但它将让你轻松地控制像素、窗口和类似的东西。
cStringIO
将其写入内存,尽管我认为这不是这种情况。 - heltonbiker