diff options
Diffstat (limited to 'data/en/graphics/camera')
-rw-r--r-- | data/en/graphics/camera | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/data/en/graphics/camera b/data/en/graphics/camera new file mode 100644 index 0000000..66d3d50 --- /dev/null +++ b/data/en/graphics/camera @@ -0,0 +1,66 @@ +# camera: take a picture, animate it on screen + +import gst +import pippy +import pygame +import sys +import time + +# grey background +bgcolor = (128, 128, 128) + +# start using pygame +pygame.init() + +# turn off cursor +pygame.mouse.set_visible(False) + +# create the pygame window and return a Surface object for +# drawing in that window. +screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN) + +# grab a frame from camera to file +pipeline = gst.parse_launch('v4l2src ! ffmpegcolorspace ! jpegenc ! filesink location=/tmp/pippypic.jpg') +pipeline.set_state(gst.STATE_PLAYING) + +# keep trying to load in the grabbed camera frame until it works +while True: + try: + image = pygame.image.load('/tmp/pippypic.jpg') + break + except pygame.error: + time.sleep(1) + +# stop the camera frame grabbing +pipeline.set_state(gst.STATE_NULL) + +# set initial rotation angle and scale +angle = 0.0 +scale = 2.0 + +while pippy.pygame.next_frame(): + # every time we animate, check for quit or keydown events and exit + for event in pygame.event.get(): + if event.type == pygame.QUIT: + sys.exit() + elif event.type == pygame.KEYDOWN: + sys.exit() + + # rotate and scale the image + newImage = pygame.transform.rotozoom(image, angle, scale) + newImageRect = newImage.get_rect() + newImageRect.centerx = screen.get_rect().centerx + newImageRect.centery = screen.get_rect().centery + + # display the rotated and scaled image + screen.fill(bgcolor) + screen.blit(newImage, newImageRect) + pygame.display.flip() + + # choose a new rotation angle and scale + angle = angle + 5.0 + scale = scale * 0.95 + + # finish once the scale becomes very very small + if scale < 0.001: + break |