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”的方法?
答案 0 :(得分:2)
您可以做三件事来提高性能:
如果您在一个紧凑的循环中调用get_pixel_colour
函数(例如,每个像素调用一次),那么您将为每个像素调用GetDesktopWindow和GetWindowDC产生多余的开销。对于每帧而不是每个像素,只需提取一次DC。
此外,仅函数调用开销本身可能会使结果偏斜。不确定Python如何优化代码,但是图像中每个像素的函数调用也是一个杀手er。因此,通常最好直接插入直接调用GetPixel
的内联代码,而不要使用函数包装它。
最后,GetPixel本身可能是重量级的调用。更好的方法是一次将整个桌面转移到内存缓冲区。然后遍历内存缓冲区中的RGB字节。在这里查看此答案:How to get a screen image into a memory buffer?