Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,如何直接在屏幕上绘制像素?_Python_Pixel - Fatal编程技术网

在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