Color, imatges i transparència¶
Color¶
Imatges¶
Tipus d’imatges digitals: mapa de bits (raster o pixmap) i vectorials.
Les imatges digitals es poden representar utilitzant una paleta de colors.
Els mapes de bits solen estar en el format RGBA, que inclou informació sobre la transparència (canal alfa).
Formats de fitxers d’imatges. Els més usats en internet són:
JPEG: escala de grisos (8 bits) o bé truecolor (24 bits). No admet transparència. Compressió amb pèrdues.
PNG: paleta de 256 colors o bé truecolor (24/48 bits). Admet transparència. Compressió sense pèrdues.
GIF: paleta de 256 colors. Admet transparència i animacions (no suportades per pygame; vegeu però, [1]).
Les imatges en Pygame¶
Les imatges són objectes de classe Surface.
L’operació més habitual és blit: enganxar una imatge damunt d’una altra.
El mòdul transform proporciona operacions sobre la imatge completa: mirall, rotació, escalat, …
El mòdul draw proporciona funcions per dibuixar damunt d’una imatge: línies, polígons, cercles, el·lipses, …
El mòdul surfarray permet treballar a nivell de píxel accedint-hi com a les matrius de la biblioteca numpy.
La instanciació d’objectes de classe
Surfaceté els paràmetres opcionalsflagsidepthque permeten controlar algunes característiques de la imatge com ara el tipus de transparència o l’ús de paleta.
Altres biblioteques de Python per treballar amb imatges: Pyhton Image Library (PIL), scikit-image.
Gestió de la transparència en pygame¶
La transparència és un valor, que sovint s’anomena alfa (alpha), que pot variar des de 0 (totalment transparent) fins a 255 (totalment opac). Així, un valor alfa=127 correspon a una transparència del 50%.
En pygame hi ha tres maneres d’aconseguir imatges transparents/translúcides:
Per-image transparency. Les surfaces [sense píxels transparents] poden tenir un valor (global) de transparència. Vegeu [2].
Utilitzant un color clau (color-key transparency). D’això se’n diu «tintar». Tots els píxels d’un cert color d’una surface [sense píxels transparents] són transparents. Vegeu [3].
Per-pixel transparency. Cada píxel d’una surface de tipus RGBA té un valor alpha (A) de transparència. el «quart canal», també anomenat canal alfa, correspon al nivell de transparència. Vegeu el flag
pygame.SRCALPHAa [4].
Les imatges RGBA només són suportades per segons quins formats de fitxer
d’imatges (per exemple PNG, però no JPG). Per tant, si la imatge es
carrega de fitxer, potser s’haurà de convertir a RGBA, si es vol
transparència. En qualsevol cas, si volem mantenir la transparència en
llegir de fitxer, caldrà utilitzar el mètode convert_alpha. Per
exemple, si disposem de la imatge de més avall desada en el fitxer
exemple_colors.png, podem provar de fer
>>> import pygame
>>> pygame.init()
(6, 0)
>>> finestra = pygame.display.set_mode((600, 400))
>>> surf = pygame.image.load('exemple_colors.png').convert_alpha()
I després la visualitzem en diversos llocs:
>>> finestra.fill((255,255,255))
<rect(0, 0, 600, 400)>
>>> finestra.blit(surf, (0,0))
<rect(0, 0, 256, 256)>
>>> finestra.blit(surf, (250,0))
<rect(250, 0, 256, 256)>
>>> finestra.blit(surf, (280,40))
<rect(280, 40, 256, 256)>
>>> pygame.display.flip()
Tingueu en compte que encara que la imatge tingui píxels transparents, el rectangle de la surface sempre serà el de la tota la imatge; això és important a l’hora de calcular col·lisions.