manual mode user interface
[imago.git] / manual.py
1 """Manual grid selection module"""
2
3 import pygame
4 import Image, ImageDraw
5
6 class UserQuitError(Exception):
7     pass
8
9 class Screen:
10     def __init__(self, res):
11         pygame.init()
12         pygame.display.set_mode(res)
13         pygame.display.set_caption("Go image capture")
14         self._screen = pygame.display.get_surface()
15
16     def display_picture(self, im):
17         pg_img = pygame.image.frombuffer(im.tostring(), im.size, im.mode)
18         self._screen.blit(pg_img, (0,0))
19         pygame.display.flip()
20
21 def find_lines(im_orig):
22
23     im = im_orig.copy()
24
25     screen = Screen(im.size)
26
27     done = False
28     clock = pygame.time.Clock()
29     draw = ImageDraw.Draw(im)
30     corners = []
31     color=(64, 64, 255)
32     line_width = 2
33     while not done:
34         for event in pygame.event.get():
35             if event.type == pygame.QUIT:
36                 pygame.quit()
37                 raise UserQuitError 
38             if event.type == pygame.MOUSEBUTTONDOWN:
39                if len(corners) >= 4:
40                     corners = []
41                     im = im_orig.copy()
42                     draw = ImageDraw.Draw(im)
43
44                if len(corners) < 4:
45                     corners.append(pygame.mouse.get_pos())
46                     draw.point(corners[:-1], fill=color)
47                     if len(corners) == 4:
48                         draw.line((corners[0], corners[1]), fill=color,
49                                   width=line_width)
50                         draw.line((corners[1], corners[2]), fill=color,
51                                   width=line_width)
52                         draw.line((corners[2], corners[3]), fill=color,
53                                   width=line_width)
54                         draw.line((corners[3], corners[0]), fill=color,
55                                   width=line_width)
56         screen.display_picture(im)
57         clock.tick(15)