在Windows 7上用Python快速获取屏幕上某些像素的颜色

2024-09-28 20:50:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要获取屏幕上或活动窗口中某些像素的颜色,并且需要快速获取。我试过使用win32gui和ctypes/windl,但它们太慢了。每个程序的颜色都是100像素:

import win32gui
import time
time.clock()
for y in range(0, 100, 10):
    for x in range(0, 100, 10):
        color = win32gui.GetPixel(win32gui.GetDC(win32gui.GetActiveWindow()), x , y)
print(time.clock())

以及

from ctypes import windll
import time
time.clock()
hdc = windll.user32.GetDC(0)
for y in range(0, 100, 10):
    for x in range(0, 100, 10):
        color = windll.gdi32.GetPixel(hdc, x, y)
print(time.clock())

每一个都需要1.75秒。我需要一个这样的程序不到0.1秒。怎么这么慢?

我正在使用Python3.x和Windows7。如果您的解决方案要求我使用Python2.x,请链接到一篇文章,介绍如何安装Python3.x和2.x。我看了看,但不知道怎么做。

谢谢!


Tags: inimport程序fortime颜色range像素
3条回答

多亏了马格斯的指导,我在提取像素信息之前集中精力获取图像。这里有一个使用Python Imaging Library (PIL)的可行解决方案,它需要Python 2.x

import ImageGrab
import time
time.clock()
image = ImageGrab.grab()
for y in range(0, 100, 10):
    for x in range(0, 100, 10):
        color = image.getpixel((x, y))
print(time.clock())

我觉得没有比这更简单的了。这(平均)需要0.1秒,比我想要的慢一点,但足够快。

至于同时安装了Python 3.x和2.x,我将其分成了一个new question。我还是有一些问题,但它通常是有效的。

我有同样的问题,并且解决了它(in Javain C#)。解决方案背后的主要思想是从screen获取pixel速度很慢,您无法修复它。但是当你需要一些像素时,你可以同时得到一堆像素。

获得64像素所需的时间是98倍。

这比一直使用getpixel要好,而且工作速度更快。

import ImageGrab

px=ImageGrab.grab().load()
for y in range(0,100,10):
    for x in range(0,100,10):
        color=px[x,y]

引用:Image.load

相关问题 更多 >