我的GetPixel函数非常慢,我使用正确的方法来执行此操作吗?

时间:2020-01-15 02:08:55

标签: python windows getpixel

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)

这基本上是我所拥有的,但是是其他人写的。

我知道this approach,并且我已经使用PIL编写了自己的代码版本,效果很好。

但是,我正在尝试提高代码的性能。 有没有办法做到这一点

但是以不同的方式?我正在尝试避免使用PIL或

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

功能。

有没有一种叫做“ BitBlt”的方法?

1 个答案:

答案 0 :(得分:2)

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

  • 如果您在一个紧凑的循环中调用get_pixel_colour函数(例如,每个像素调用一次),那么您将为每个像素调用GetDesktopWindow和GetWindowDC产生多余的开销。对于每帧而不是每个像素,只需提取一次DC。

  • 此外,仅函数调用开销本身可能会使结果偏斜。不确定Python如何优化代码,但是图像中每个像素的函数调用也是一个杀手er。因此,通常最好直接插入直接调用GetPixel的内联代码,而不要使用函数包装它。

  • 最后,GetPixel本身可能是重量级的调用。更好的方法是一次将整个桌面转移到内存缓冲区。然后遍历内存缓冲区中的RGB字节。在这里查看此答案:How to get a screen image into a memory buffer?