在Python中,如何直接在屏幕上绘制像素?
我想做如下事情:在Python中,如何直接在屏幕上绘制像素?,python,pixel,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实现这一目标?我不确定你的问题是否正确,但我相信你应该研究一些可以访
...
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实现这一目标?我不确定你的问题是否正确,但我相信你应该研究一些可以访问屏幕的框架或中间件。我会说PyGame或Pyglet,甚至熊猫。这可能有点过分了,因为Pygame和Panda是一个框架,可以让您开发游戏,而Pyglet是python中Opengl的包装器,但它可以让您轻松地控制像素、窗口和类似内容。尽管它并没有严格按照您所说的(按像素绘制),但我喜欢使用python、GTK和Cairo 在本例中,将创建GTK窗口、添加DrawingArea、创建Cairo上下文并执行绘制操作 不同之处在于,您有一个带有浮点坐标的连续画布,而不是像素,您使用笔划和填充绘制几何图形。您甚至可以绘制一个像素大小的矩形,然后填充它们,但这不会太快 此外,您还可以获取任何光栅对象(图像、pixbuffer)并立即进行渲染。然后,您可以快速生成图像序列,并一次性渲染其所有像素,类似于电影 在前面的回答中可以看到一个工作示例(第二个片段):
直接回答: 这只能通过特定于操作系统的API来实现。某些操作系统不允许直接更改屏幕上的像素 在Windows上,您可以使用库通过调用
dc=GetDC(0)
获取屏幕的设备上下文,然后使用SetPixel(dc,x,y,color)
绘制像素
当然,你用这种方式画的东西随时都可以被擦除
正确答案:
逐像素绘制是绘制某物最慢的方法。例如,在Windows上,在内存中创建一个图像,然后在一次操作中绘制它比使用SetPixel绘制要快一个数量级
如果需要速度,可以使用一些python用户界面库,例如Tkinter模块或PyQt。在内存中创建窗口和图像,然后在窗口上绘制图像。如果您需要操纵像素,请在图像中操纵像素,然后每次重新绘制。您通常不希望写入“屏幕”,而是希望写入窗口。Python不包含任何用于与窗口交互的内置软件包,您需要选择并安装一些东西。@markransem-对。无边界窗口也是可以接受的。如果您知道如何写入文件,您可以使用
cStringIO
写入内存,尽管我认为不是这样的。@Mark Ransom:使用tkinter,您可以创建和显示窗口。内置的。相关的:你知道如何在ubuntu上做同样的事情吗?我如何撤销使用win32gui.SetPixel绘制的像素?有些人也喜欢玩弄东西,不在乎是否已经有一个库可以让它快100倍。
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