如何使用Python的PIL在特定区域中查找屏幕上的某种像素颜色?

时间:2014-04-13 14:21:21

标签: python python-2.7 python-imaging-library

如何使用Python的PIL在特定区域中查找屏幕上的某种像素颜色?

如果某个像素颜色出现在预先指定的区域中,我需要一个在Python 2.7中启动命令的函数。我尝试了以下代码,但无济于事:

def game_one():
box = (x_pad+1, y_pad+1, x_pad+1179, y_pad+474)
im = ImageGrab.grab(box)
return im
rgb_im = im.convert('RGB')
for x in range(1055, 1120, 1):
    for y in range(20, 464, 1):
        pix = rgb_im.getpixel((x, y))
        if pix != (255,0,255):
            startPlaying()
            time.sleep(.2)
            clickbuttonone()
            print "Pixel Found!"
        else:
            print "Waiting for pixel to appear"

(x_pad和y_pad是预定义的屏幕变量 - 与问题无关,但有助于捕获整个屏幕)

已导入ImageOps和Image,win32api和win32con也是如此。

非常感谢!

1 个答案:

答案 0 :(得分:0)

要搜索直到找到像素,您可以使用循环。然而,从本质上讲,它将是一个无限循环,这是不好的做法。我添加了120秒(2分钟)的超时,您可以根据需要进行调整。

import time
pf = False   #check if pixel was found
start_time = time.time()

def game_one():
    box = (x_pad+1, y_pad+1, x_pad+1179, y_pad+474)
    im = ImageGrab.grab(box)
    # return im
    rgb_im = im.convert('RGB')
    while (pf == False) and ((time.time()-start_time) < 120):
        for x in range(1055, 1120, 1):
            if pf == True:
                break
            for y in range(20, 464, 1):
                pix = rgb_im.getpixel((x, y))
                if pix != (255,0,255):
                    startPlaying()
                    time.sleep(.2)
                    clickbuttonone()
                    print "Pixel Found!"
                    pf = True
                    break
                else:
                    print "Waiting for pixel to appear"

另外,请确保检查缩进 - 它可能仅用于在此网站上发布,但功能定义不应与功能的其余部分位于同一行。

编辑:好的我认为我找到了主要问题。你看到我评论return im的位置了吗?返回语句结束您的功能并且在处理之后没有任何内容。您的代码甚至无法进入for循环。试试这个。这就是为什么打印这种奇怪类型的东西,因为那是你要归还的东西!