|
|
@@ -5,7 +5,6 @@ sys.path.insert(0, join(dirname(__file__), 'python-xlib'))
|
|
|
import time
|
|
|
from random import randint
|
|
|
from Xlib import display, X, XK, ext
|
|
|
-from PIL import Image
|
|
|
|
|
|
|
|
|
WINDOW_WIDTH = 1600
|
|
|
@@ -49,11 +48,9 @@ def focus_window(window):
|
|
|
|
|
|
|
|
|
def screenshot_board(window):
|
|
|
- raw = window.get_image(BOARD_X, BOARD_Y, BOARD_WIDTH, BOARD_HEIGHT,
|
|
|
- X.ZPixmap, 0xffffffff)
|
|
|
- dim = BOARD_WIDTH, BOARD_HEIGHT
|
|
|
- im = Image.frombytes('RGB', dim, raw.data, 'raw', 'BGRX')
|
|
|
- return im.convert('HSV')
|
|
|
+ im = window.get_image(BOARD_X, BOARD_Y, BOARD_WIDTH, BOARD_HEIGHT,
|
|
|
+ X.ZPixmap, 0xffffffff)
|
|
|
+ return BoardImage(im.data)
|
|
|
|
|
|
|
|
|
def press_keys(window, keys):
|
|
|
@@ -71,8 +68,39 @@ def press_keys(window, keys):
|
|
|
time.sleep(KEY_DELAY / 1000)
|
|
|
|
|
|
|
|
|
+def rgb2hsv(r, g, b):
|
|
|
+ r /= 255
|
|
|
+ g /= 255
|
|
|
+ b /= 255
|
|
|
+ cmax = max(r, g, b)
|
|
|
+ cmin = min(r, g, b)
|
|
|
+ diff = cmax - cmin
|
|
|
|
|
|
+ if cmax == cmin:
|
|
|
+ h = 0
|
|
|
+ elif cmax == r:
|
|
|
+ h = (60 * ((g - b) / diff) + 360) % 360
|
|
|
+ elif cmax == g:
|
|
|
+ h = (60 * ((b - r) / diff) + 120) % 360
|
|
|
+ elif cmax == b:
|
|
|
+ h = (60 * ((r - g) / diff) + 240) % 360
|
|
|
|
|
|
+ h = int(h * 256 / 360)
|
|
|
+ s = 0 if cmax == 0 else int(diff * 256 / cmax)
|
|
|
+ v = int(cmax * 256)
|
|
|
+
|
|
|
+ return h, s, v
|
|
|
+
|
|
|
+
|
|
|
+class BoardImage:
|
|
|
+ def __init__(self, data):
|
|
|
+ self.data = data
|
|
|
+
|
|
|
+ def getpixel(self, xy):
|
|
|
+ x, y = xy
|
|
|
+ i = (y * BOARD_WIDTH + x) * 4
|
|
|
+ b, g, r = self.data[i:i + 3]
|
|
|
+ return rgb2hsv(r, g, b)
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|