1. pygame
  2. pygame
  3. pygame

Source

pygame / examples / arraydemo.py

Diff from to

File examples/arraydemo.py

  • Ignore whitespace
 #!/usr/bin/env python
 
+import sys
 import os
 try:
     import pygame
-    # Use numeric, not numpy here (otherwise, follow the NUMPY comments)
-    # NUMPY: import numpy as N
-    import Numeric as N
+    from pygame import surfarray
     from pygame.locals import *
-    surfarray = pygame.surfarray
-    if not surfarray: raise ImportError
 except ImportError:
-    raise ImportError, 'Error Importing Pygame/surfarray or Numeric'
+    raise ImportError, 'Error Importing Pygame/surfarray'
 
+main_dir = os.path.split(os.path.abspath(__file__))[0]
 
-pygame.init()
-print 'Press the mouse button to advance image.'
-print 'Press the "s" key to save the current image.'
+def main(arraytype=None):
+    """show various surfarray effects
 
-# Guarantee the usage of Numeric
-pygame.surfarray.use_arraytype ("numeric")
-# NUMPY: pygame.surfarray.use_arraytype ("numpy")
+    If arraytype is provided then use that array package. Valid
+    values are 'numeric' or 'numpy'. Otherwise default to NumPy,
+    or fall back on Numeric if NumPy is not installed.
 
-def surfdemo_show(array_img, name):
-    "displays a surface, waits for user to continue"
-    screen = pygame.display.set_mode(array_img.shape[:2], 0, 32)
-    surfarray.blit_array(screen, array_img)
-    pygame.display.flip()
-    pygame.display.set_caption(name)
-    while 1:
-        e = pygame.event.wait()
-        if e.type == MOUSEBUTTONDOWN: break
-        elif e.type == KEYDOWN and e.key == K_s:
-            #pygame.image.save(screen, name+'.bmp')
-            #s = pygame.Surface(screen.get_size(), 0, 32)
-            #s = s.convert_alpha()
-            #s.fill((0,0,0,255))
-            #s.blit(screen, (0,0))
-            #s.fill((222,0,0,50), (0,0,40,40))
-            #pygame.image.save_extended(s, name+'.png')
-            #pygame.image.save(s, name+'.png')
-            #pygame.image.save(screen, name+'_screen.png')
-            #pygame.image.save(s, name+'.tga')
-            pygame.image.save(screen, name+'.png')
-        elif e.type == QUIT:
-            raise SystemExit
+    """
 
-#allblack
-allblack = N.zeros((128, 128))
-surfdemo_show(allblack, 'allblack')
+    if arraytype is None:
+        if 'numpy' in surfarray.get_arraytypes():
+            surfarray.use_arraytype('numpy')
+        elif 'numeric' in surfarray.get_arraytype():
+            surfarray.use_arraytype('numeric')
+        else:
+            raise ImportError, 'No array package is installed'
+    else:
+        surfarray.use_arraytype(arraytype)
 
+    if surfarray.get_arraytype() == 'numpy':
+        import numpy as N
+        from numpy import int32
+    else:
+        import Numeric as N
+        from Numeric import Int32 as int32
 
-#striped
-striped = N.zeros((128, 128, 3))
-striped[:] = (255, 0, 0)
-striped[:,::3] = (0, 255, 255)
-surfdemo_show(striped, 'striped')
+    pygame.init()
+    print 'Using', surfarray.get_arraytype().capitalize()
+    print 'Press the mouse button to advance image.'
+    print 'Press the "s" key to save the current image.'
 
+    def surfdemo_show(array_img, name):
+        "displays a surface, waits for user to continue"
+        screen = pygame.display.set_mode(array_img.shape[:2], 0, 32)
+        surfarray.blit_array(screen, array_img)
+        pygame.display.flip()
+        pygame.display.set_caption(name)
+        while 1:
+            e = pygame.event.wait()
+            if e.type == MOUSEBUTTONDOWN: break
+            elif e.type == KEYDOWN and e.key == K_s:
+                #pygame.image.save(screen, name+'.bmp')
+                #s = pygame.Surface(screen.get_size(), 0, 32)
+                #s = s.convert_alpha()
+                #s.fill((0,0,0,255))
+                #s.blit(screen, (0,0))
+                #s.fill((222,0,0,50), (0,0,40,40))
+                #pygame.image.save_extended(s, name+'.png')
+                #pygame.image.save(s, name+'.png')
+                #pygame.image.save(screen, name+'_screen.png')
+                #pygame.image.save(s, name+'.tga')
+                pygame.image.save(screen, name+'.png')
+            elif e.type == QUIT:
+                raise SystemExit
 
-#imgarray
-imagename = os.path.join('data', 'arraydemo.bmp')
-imgsurface = pygame.image.load(imagename)
-imgarray = surfarray.array2d(imgsurface)
-surfdemo_show(imgarray, 'imgarray')
+    #allblack
+    allblack = N.zeros((128, 128), int32)
+    surfdemo_show(allblack, 'allblack')
 
 
-#flipped
-flipped = imgarray[:,::-1]
-surfdemo_show(flipped, 'flipped')
+    #striped
+    #the element type is required for N.zeros in  NumPy else
+    #an array of float is returned.
+    striped = N.zeros((128, 128, 3), int32)
+    striped[:] = (255, 0, 0)
+    striped[:,::3] = (0, 255, 255)
+    surfdemo_show(striped, 'striped')
 
 
-#scaledown
-scaledown = imgarray[::2,::2]
-surfdemo_show(scaledown, 'scaledown')
+    #imgarray
+    imagename = os.path.join(main_dir, 'data', 'arraydemo.bmp')
+    imgsurface = pygame.image.load(imagename)
+    imgarray = surfarray.array2d(imgsurface)
+    surfdemo_show(imgarray, 'imgarray')
 
 
-#scaleup
-size = N.array(imgarray.shape)*2
-scaleup = N.zeros(size)
-scaleup[::2,::2] = imgarray
-scaleup[1::2,::2] = imgarray
-scaleup[:,1::2] = scaleup[:,::2]
-surfdemo_show(scaleup, 'scaleup')
+    #flipped
+    flipped = imgarray[:,::-1]
+    surfdemo_show(flipped, 'flipped')
 
 
-#redimg
-rgbarray = surfarray.array3d(imgsurface)
-redimg = N.array(rgbarray)
-redimg[:,:,1:] = 0
-surfdemo_show(redimg, 'redimg')
+    #scaledown
+    scaledown = imgarray[::2,::2]
+    surfdemo_show(scaledown, 'scaledown')
 
 
-#soften
-soften = N.array(rgbarray)*1
-soften[1:,:]  += rgbarray[:-1,:]*8
-soften[:-1,:] += rgbarray[1:,:]*8
-soften[:,1:]  += rgbarray[:,:-1]*8
-soften[:,:-1] += rgbarray[:,1:]*8
-soften /= 33
-surfdemo_show(soften, 'soften')
+    #scaleup
+    #the element type is required for N.zeros in NumPy else
+    #an #array of floats is returned.
+    size = N.array(imgarray.shape)*2
+    scaleup = N.zeros(size, int32)
+    scaleup[::2,::2] = imgarray
+    scaleup[1::2,::2] = imgarray
+    scaleup[:,1::2] = scaleup[:,::2]
+    surfdemo_show(scaleup, 'scaleup')
 
 
-#crossfade (50%)
-src = N.array(rgbarray)
-dest = N.zeros(rgbarray.shape)
-dest[:] = 20, 50, 100
-diff = (dest - src) * 0.50
-# NUMPY: xfade = src + diff.astype(N.uint)
-xfade = src + diff.astype(N.Int)
-surfdemo_show(xfade, 'xfade')
+    #redimg
+    rgbarray = surfarray.array3d(imgsurface)
+    redimg = N.array(rgbarray)
+    redimg[:,:,1:] = 0
+    surfdemo_show(redimg, 'redimg')
 
 
+    #soften
+    soften = N.array(rgbarray)*1
+    soften[1:,:]  += rgbarray[:-1,:]*8
+    soften[:-1,:] += rgbarray[1:,:]*8
+    soften[:,1:]  += rgbarray[:,:-1]*8
+    soften[:,:-1] += rgbarray[:,1:]*8
+    soften /= 33
+    surfdemo_show(soften, 'soften')
 
-#alldone
+
+    #crossfade (50%)
+    src = N.array(rgbarray)
+    dest = N.zeros(rgbarray.shape)
+    dest[:] = 20, 50, 100
+    diff = (dest - src) * 0.50
+    if surfarray.get_arraytype() == 'numpy':
+        xfade = src + diff.astype(N.uint)
+    else:
+        xfade = src + diff.astype(N.Int)
+    surfdemo_show(xfade, 'xfade')
+
+
+
+
+    #alldone
+    pygame.quit()
+
+def usage():
+    print "Usage: command line option [--numpy|--numeric]"
+    print "  The default is to use NumPy if installed,"
+    print "  otherwise Numeric"
+
+if __name__ == '__main__':
+    if len(sys.argv) == 2:
+        if '--numpy' in sys.argv:
+            main('numpy')
+        elif '--numeric' in sys.argv:
+            main('numeric')
+        else:
+            usage()
+    elif len(sys.argv) == 1:
+        main()
+    else:
+        usage()
+
+        
+