我正在编写一个python函数,用于检查Windows桌面环境的某个区域是否有某种像素颜色,如果这种颜色符合某个条件,则python返回true。
问题是,最理想的是我需要在100ms或更短的定时频率下进行像素检查。我已经做了一种非常粗略的测量时序性能的方法,看来我得到的“刷新率”不超过~250毫秒。
是否有任何可能的方法来改善此脚本的性能和/或更准确地测量时序?
下面的代码:
import win32gui
import time
def get_pixel_colour(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)
def main():
for x in range(20):
t1 = time.time()
x = get_pixel_colour(25, 1024)
y = str(x)
if y == "(255, 255, 255)":
print "True"
else:
print "Not True"
t2 = time.time()
print t2 - t1 #To calculate time
main()
答案 0 :(得分:1)
无需拆分RGB组件。这需要一些时间。然后,从int到string的那些组件的3转换需要更多的时间。只需按原样返回像素值
def get_pixel_colour(i_x, i_y):
i_desktop_window_id = win32gui.GetDesktopWindow()
i_desktop_window_dc = win32gui.GetWindowDC(i_desktop_window_id)
return win32gui.GetPixel(i_desktop_window_dc, i_x, i_y)
然后在main中直接比较RGB值
for x in range(20):
t1 = time.time()
if get_pixel_colour(25, 1024) == 0xFFFFFF
print "True"
else:
print "Not True"
t2 = time.time()
print t2 - t1 #To calculate time