better capture on windows
[imago.git] / capture.py
1 #!/usr/bin/env python
2
3 """Go image capture."""
4
5 import sys
6 import argparse
7
8 import pygame
9 from pygame.locals import QUIT, KEYDOWN
10 import Image
11
12 from camera import Camera
13
14 class Screen:
15     def __init__(self):
16         pygame.init()
17         pygame.display.set_mode((640,480))
18         pygame.display.set_caption("Go image capture")
19         self._screen = pygame.display.get_surface()
20
21     def display_picture(self, im):
22         pg_img = pygame.image.frombuffer(im.tostring(), im.size, im.mode)
23         self._screen.blit(pg_img, (0,0))
24         pygame.display.flip()
25
26
27 def main():
28     parser = argparse.ArgumentParser(description=__doc__)
29     #parser.add_argument('file', metavar='file', nargs=1,
30     #                    help="image to analyse")
31     #parser.add_argument('-w', type=int, default=640,
32     #                    help="scale image to the specified width before analysis")
33     parser.add_argument('-d', '--device', type=int, default=0,
34                         help="number of video device to use")
35     #parser.add_argument('-s', '--save', dest='do_something', action='store_const',
36     #                    const=image_save, default=im_debug.show,
37     #                    help="save images instead of displaying them")
38     args = parser.parse_args()
39
40     cam = Camera(device=args.device)
41     screen = Screen()
42
43     im = cam.get_image()
44     screen.display_picture(im)
45
46     im_number = 0
47
48     while True:
49         event = pygame.event.wait()
50         if event.type == QUIT:
51             break
52         elif event.type == KEYDOWN:
53             im = cam.get_image()
54             screen.display_picture(im)
55             im.save("./captured/{0:0>3}.jpg".format(im_number), 'JPEG')
56             im_number += 1
57     
58 if __name__ == '__main__':
59     try:
60         main()
61     finally:
62         pygame.quit()