124 lines
3.2 KiB
Python
124 lines
3.2 KiB
Python
#!/usr/bin/env python
|
|
import os, pygame
|
|
from pygame.compat import xrange_
|
|
|
|
main_dir = os.path.split(os.path.abspath(__file__))[0]
|
|
data_dir = os.path.join(main_dir, 'data')
|
|
|
|
def show (image):
|
|
screen = pygame.display.get_surface()
|
|
screen.fill ((255, 255, 255))
|
|
screen.blit (image, (0, 0))
|
|
pygame.display.flip ()
|
|
while 1:
|
|
event = pygame.event.wait ()
|
|
if event.type == pygame.QUIT:
|
|
raise SystemExit
|
|
if event.type == pygame.MOUSEBUTTONDOWN:
|
|
break
|
|
|
|
def main():
|
|
pygame.init ()
|
|
|
|
pygame.display.set_mode ((255, 255))
|
|
surface = pygame.Surface ((255, 255))
|
|
|
|
pygame.display.flip ()
|
|
|
|
# Create the PixelArray.
|
|
ar = pygame.PixelArray (surface)
|
|
r, g, b = 0, 0, 0
|
|
# Do some easy gradient effect.
|
|
for y in xrange_ (255):
|
|
r, g, b = y, y, y
|
|
ar[:,y] = (r, g, b)
|
|
del ar
|
|
show (surface)
|
|
|
|
# We have made some gradient effect, now flip it.
|
|
ar = pygame.PixelArray (surface)
|
|
ar[:] = ar[:,::-1]
|
|
del ar
|
|
show (surface)
|
|
|
|
# Every second column will be made blue
|
|
ar = pygame.PixelArray (surface)
|
|
ar[::2] = (0, 0, 255)
|
|
del ar
|
|
show (surface)
|
|
|
|
# Every second row will be made green
|
|
ar = pygame.PixelArray (surface)
|
|
ar[:,::2] = (0, 255, 0)
|
|
del ar
|
|
show (surface)
|
|
|
|
# Manipulate the image. Flip it around the y axis.
|
|
surface = pygame.image.load (os.path.join (data_dir, 'arraydemo.bmp'))
|
|
ar = pygame.PixelArray (surface)
|
|
ar[:] = ar[:,::-1]
|
|
del ar
|
|
show (surface)
|
|
|
|
# Flip the image around the x axis.
|
|
ar = pygame.PixelArray (surface)
|
|
ar[:] = ar[::-1,:]
|
|
del ar
|
|
show (surface)
|
|
|
|
# Every second column will be made white.
|
|
ar = pygame.PixelArray (surface)
|
|
ar[::2] = (255, 255, 255)
|
|
del ar
|
|
show (surface)
|
|
|
|
# Flip the image around both axes, restoring it's original layout.
|
|
ar = pygame.PixelArray (surface)
|
|
ar[:] = ar[::-1,::-1]
|
|
del ar
|
|
show (surface)
|
|
|
|
# Rotate 90 degrees clockwise.
|
|
w, h = surface.get_size ()
|
|
surface2 = pygame.Surface ((h, w), surface.get_flags (), surface)
|
|
ar = pygame.PixelArray (surface)
|
|
ar2 = pygame.PixelArray (surface2)
|
|
ar2[...] = ar.transpose ()[::-1,:]
|
|
del ar, ar2
|
|
show (surface2)
|
|
|
|
# Scale it by throwing each second pixel away.
|
|
surface = pygame.image.load (os.path.join (data_dir, 'arraydemo.bmp'))
|
|
ar = pygame.PixelArray (surface)
|
|
sf2 = ar[::2,::2].make_surface ()
|
|
del ar
|
|
show (sf2)
|
|
|
|
# Replace anything looking like the blue color from the text.
|
|
ar = pygame.PixelArray (surface)
|
|
ar.replace ((60, 60, 255), (0, 255, 0), 0.06)
|
|
del ar
|
|
show (surface)
|
|
|
|
# Extract anything which might be somewhat black.
|
|
surface = pygame.image.load (os.path.join (data_dir, 'arraydemo.bmp'))
|
|
ar = pygame.PixelArray (surface)
|
|
ar2 = ar.extract ((0, 0, 0), 0.07)
|
|
sf2 = ar2.surface
|
|
del ar, ar2
|
|
show (sf2)
|
|
|
|
# Compare two images.
|
|
surface = pygame.image.load (os.path.join (data_dir, 'alien1.gif'))
|
|
surface2 = pygame.image.load (os.path.join (data_dir, 'alien2.gif'))
|
|
ar1 = pygame.PixelArray (surface)
|
|
ar2 = pygame.PixelArray (surface2)
|
|
ar3 = ar1.compare (ar2, 0.07)
|
|
sf3 = ar3.surface
|
|
del ar1, ar2, ar3
|
|
show (sf3)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|
|
|