Python 我的GetPixel函数非常慢,我使用的方法正确吗?

Python 我的GetPixel函数非常慢,我使用的方法正确吗?,python,windows,getpixel,Python,Windows,Getpixel,这基本上就是我所拥有的,但这是别人写的 我知道,并且我已经使用PIL编写了一个版本的代码,它工作得很好 但是,我正在努力提高代码的性能。 有办法做到这一点吗 但以另一种方式?我正在努力避免PIL,或者 def get_pixel_colour(self, i_x, i_y): i_desktop_window_id = win32gui.GetDesktopWindow() i_desktop_window_dc = win32gui.GetWindowDC(i_desktop_

这基本上就是我所拥有的,但这是别人写的

我知道,并且我已经使用PIL编写了一个版本的代码,它工作得很好

但是,我正在努力提高代码的性能。 有办法做到这一点吗

但以另一种方式?我正在努力避免PIL,或者

def get_pixel_colour(self, i_x, i_y):
    i_desktop_window_id = win32gui.GetDesktopWindow()
    i_desktop_window_dc = win32gui.GetWindowDC(i_desktop_window_id)
    long_colour = win32gui.GetPixel(i_desktop_window_dc, i_x, i_y)
    i_colour = int(long_colour)
    return (i_colour & 0xff), ((i_colour >> 8) & 0xff), ((i_colour >> 16) & 0xff)
功能


是否有一种称为“BitBlt”的方法?

您可以做三件事来提高性能:

  • 如果在紧密循环中调用
    get\u pixel\u color
    函数(例如,每个像素一次),则为每个像素调用GetDesktopWindow和GetWindowDC会产生冗余开销。为每个帧而不是每个像素提取DC一次

  • 此外,仅仅函数调用开销本身就可能导致结果倾斜。不确定Python如何优化代码,但图像中每个像素的函数调用也是一个杀手锏。因此,通常最好是直接调用
    GetPixel
    的内联代码,而不是让函数对其进行包装

  • 最后,GetPixel本身可能是一个重量级调用本身。更好的方法是将整个桌面一次性放入内存缓冲区。然后在内存缓冲区中迭代RGB字节。请看下面的答案:


要提高性能,您可以做三件事:

  • 如果在紧密循环中调用
    get\u pixel\u color
    函数(例如,每个像素一次),则为每个像素调用GetDesktopWindow和GetWindowDC会产生冗余开销。为每个帧而不是每个像素提取DC一次

  • 此外,仅仅函数调用开销本身就可能导致结果倾斜。不确定Python如何优化代码,但图像中每个像素的函数调用也是一个杀手锏。因此,通常最好是直接调用
    GetPixel
    的内联代码,而不是让函数对其进行包装

  • 最后,GetPixel本身可能是一个重量级调用本身。更好的方法是将整个桌面一次性放入内存缓冲区。然后在内存缓冲区中迭代RGB字节。请看下面的答案:

color = GetPixel(hDC, p.x, p.y)