Tu estás aquí: ¡Bienvenido! » Traducciones » pygame » PixelArray
Usuario
Buscar páginas
Esta Pagina
General

PixelArray

Objeto de pygame para obtener acceso directo a los pixels de las superficies.

PixelArray

pygame.PixelArray(Surface): return PixelArray

La clase PixelArray envuelve una superficie y provee acceso directo a sus pixels, usando una matriz de dos dimensiones. Soporta operaciones como slicing (tajadas o rebanadas), manipulación de pixel o fila y asignaciones aunque no se permiten las operaciones de suma, resta, multiplicación o división…

Si bien es posible asignar tanto colores en valor entero como tuplas RGB(A), la clase PixelArray utilizará internamente enteros para la representación de elementos. Por ello, la consulta de ciertos colores se debe realizar usando el método Surface.map_rgb() de la superficie.

pxarray = pygame.PixelArray (surface)
# Check, if the first pixel at the topleft corner is blue
if pxarray[0][0] == surface.map_rgb ((0, 0, 255)):
    ...

Los pixels se pueden manipular usando valores enteros o tuplas con las componentes de color.

pxarray[x][y] = 0xFF00FF
pxarray[x][y] = (255, 0, 255)

Si está trabajando sobre una rebanada (o slice) puede usar secuencias arbitrarias u otros objetos PixelArray para modificar los pixels. De todas formas tienen que coincidir con el tamaño del objeto.

pxarray[a:b] = 0xFF00FF                   # define todos los pixels a 0xFF00FF.  
pxarray[a:b] = (0xFF00FF, 0xAACCEE, ... ) # El primer pixel a 0xFF00FF, 
                                          # el segundo a 0xAACCEE.
pxarray[a:b] = ( (255, 0, 255), (170, 204, 238), ...) # igual que arriba.
pxarray[a:b] = ( (255, 0, 255), 0xAACCEE, ...)        # igual que arriba.
 
pxarray[a:b] = otherarray[x:y]            # note que el tamaño de las rebanadas debe coincidir.

Tenga en cuenta que algo como:

  pxarray[2:4][3:5] = ...

No causará una manipulación rectangular. En lugar de ello primero se reducirá a una matriz de dos columnas, que luego se reducirá en columnas una vez mas, lo que ocasionará una falla de tipo IndexError. Esto se debe al mecanismo de rebanadas (slicing) de python y es un comportamiento absolutamente correcto. En cambio, lo que puede hacer es crear una rebanada de una sola columna primero y luego manipularla de la siguiente forma

pxarray[2][3:5] = ...
pxarray[3][3:5] = ...

También puede usar las habilidades de sub-indices, para realizar una manipulación rectangular o crear una vista de una parte del objeto PixelArray. Puede crear una vista diferente de manera simple creando “sub-arrays” mediante los sub-indices.

# Genera un nuevo objeto PixelArray otorgando una vista diferente
# de la superficie o matriz original.
 
newarray = pxarray[2:4,3:5]
otherarray = pxarray[::2,::2]

Los sub-indices también se puede usar para realizar manipulaciones de pixel rectangulares en lugar de recorrer los ejes x e y como se hacía mas arriba.

pxarray[::2,:] = (0, 0, 0)            # Convierte a negro cada segunda columna.

El objeto PixelArray bloquea la superficie mientras existe, por eso tiene que eliminarlo de manera explícita cuando ya no lo use y la superficie debería realizar las operaciones en el mismo momento.

Esta funcionalidad es nueva en pygame 1.8, y los sub-indices son nuevos en pygame 1.8.1

surface

Obtiene la superficie que utiliza el objeto PixelArray.

PixelArray.surface: Return Surface

Retorna la superficie para la que se creó el objeto PixelArray.

make_surface

Genera una nueva superficie a partir del objeto PixelArray actual.

PixelArray.make_surface (): Return Surface

Genera una nueva superficie a partir del objeto PixelArray. Esta superficie puede ser diferente de la original dependiendo del tamaño del objeto, el orden de pixel etc.

# Genera una nueva superficie invertida sobre el eje vertical.
sf = pxarray[:,::-1].make_surface ()

Esta función es nueva en pygame 1.8.1

replace

Replaces the passed color in the PixelArray with another one.

PixelArray.replace (color, repcolor, distance=0, weights=(0.299, 0.587, 0.114)): Return None

Reemplaza los pixels que tienen el color repcolor por el color color.

Usa una formula de distancia euclidea simple para calcular la distancia entre los colores. Los espacios de distancia van desde 0.0 a 1.0 y se usan como umbral para detectar el color. Esto causa que la operación de reemplazo tome pixels con un color similar, pero no exactamente el mismo.

Esta es una operación in place, lo que significa que afecta directamente a los pixels del objeto PixelArray.

Esta función es nueva en pygame 1.8.1

extract

Extrae el color indicado del objeto PixelArray.

PixelArray.extract (color, distance=0, weights=(0.299, 0.587, 0.114)): Return PixelArray

Extrae el color indicado cambiando todos los pixels que coinciden a blanco, mientras que los pixels que no coinciden se cambian a color negro. Esta función retorna un nuevo objeto PixelArray con la máscara de color blanco y negro.

Usa una formula de distancia euclidea simple para calcular la distancia entre los colores. Los espacios de distancia van desde 0.0 a 1.0 y se usan como umbral para detectar el color. Esto causa que la operación de reemplazo tome pixels con un color similar, pero no exactamente el mismo.

Esta función es nueva en pygame 1.8.1

compare

Compara el objeto PixelArray con otro.

PixelArray.compare (array, distance=0, weights=(0.299, 0.587, 0.114)): Return PixelArray

Compara el contenido del objeto PixelArray con otro objecto PixelArray. Retorna un nuevo objeto PixelArray con la máscara de color blanco y negro que indica las diferencias (en blanco) y similitudes (en negro). Los dos objetos PixelArray deben tener dimensiones y cantidad de colores idénticas.

Usa una formula de distancia euclidea simple para calcular la distancia entre los colores. Los espacios de distancia van desde 0.0 a 1.0 y se usan como umbral para detectar el color. Esto causa que la operación de reemplazo tome pixels con un color similar, pero no exactamente el mismo.

Esta función es nueva en pygame 1.8.1.

 
traducciones/pygame/pixelarray.txt · Última modificación: 28/01/2009 a las 17:12 por hugoruscitti
Este sitio funciona sobre el motor wiki de DokuWiki.
© 2003-2008 Hugo Ruscitti