在Python中,如何直接在屏幕上绘制像素?

时间:2011-09-28 15:15:27

标签: python pixel

我想做类似以下的事情:

...
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中实现这一目标?

4 个答案:

答案 0 :(得分:21)

直接回答:

这只能通过特定于操作系统的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。在内存中创建一个窗口和图像,然后在窗口上绘制图像。如果您需要操纵像素,请在图像中操作它们并每次重新绘制。

答案 1 :(得分:3)

我不确定我的问题是否正确,但我相信您应该调查一些可以访问屏幕的框架或中间件。我会说PyGame或Pyglet甚至可能是Panda。它可能有点过分,因为Pygame和Panda是一个允许你开发游戏的框架,而Pyglet是python中的Opengl包装器,但它可以让你轻松控制像素,窗口和类似物。

答案 2 :(得分:2)

虽然它并不像你说的那样(按像素绘制),但我喜欢使用Python,GTK和Cairo。

在这种情况下,您可以创建GTK窗口,添加DrawingArea,创建Cairo上下文以及执行绘制操作。

不同之处在于您有一个具有浮点坐标的连续画布,而不是像素,您可以使用笔触和填充绘制几何形状。您甚至可以绘制一个像素大小的矩形,并填充它们,但这不会那么快。

此外,您可以拍摄任何光栅对象(图像,像素缓冲区)并立即渲染它。然后,您可以快速生成图像,并一次渲染其像素,类似于电影。

在此处的前一个答案(第二个片段)中可以看到一个工作示例: quickest way to get started with cairo

答案 3 :(得分:1)

我推荐你的Pygame库。它是一个跨平台的库,非常适合通用计算机图形和游戏开发。 Check here一些Pygame的实例。

图书馆非常简单但功能强大。您可以在窗口中绘图,也可以全屏绘制。