Juanxo escribió:Esto no tiene demasiado que ver con lo anterior, pero veo tonteria abrir nuevo tema para ello.
Yo creo que es mejor crear un nuevo tema porque así, a la hora de buscar información en el foro, es más fácil.
Juanxo escribió:Si yo hago una imagen con colorkey para solo ver al muñeco, si hago un image.get_rect()de esa imagen,toma como referencia todo(incluido sobre lo que he hecho colorkey), o solo toma los pixels con color??
En caso de que tome todo, ai alguna manera de conseguir que tome solo lo que yo kiero??
Bueno... la respuesta es bien sencilla, solo tienes dibujar varias imágenes y hacer un print rect.
Con el colorkey, simplemente le dices a pygame que color no quieres que se copie a la hora de hacer un blit, pero lo que es el mapa de bits, sigue intacto.
Juanxo escribió:En caso de que tome todo, ai alguna manera de conseguir que tome solo lo que yo kiero??
Pues sinceramente, no se me ocurre ningún caso en el que sea necesario. ¿A ti sí?¿En qué consiste?
Igualmente he creado una función ya que me resultaba interesante el tema (nunca lo había tratado). Utilizo un algoritmo bastante lento aunque lo he conseguido optimizar un poco a base de escribir líneas.
- Código: Seleccionar todo
import pygame
from pygame import *
def diferentes(color1, color2):
for i in range(3):
if color1[i] != color2[i]:
return True
return False
def minrect(surface):
colork = surface.get_colorkey()
array = pygame.surfarray.pixels3d(surface)
encontrado = False
i1 = 0
while not encontrado and i1 < len(array):
j1 = 0
while not encontrado and j1 < len(array[0]):
if (diferentes(array[i1][j1], colork)):
encontrado = True
else:
j1 += 1
if not encontrado:
i1 += 1
if not encontrado:
return pygame.Rect((0,0,0,0))
encontrado = False
i2 = len(array)-1
while not encontrado and i2 > 0:
j2 = 0
while not encontrado and j2 < len(array[0]):
if (diferentes(array[i2][j2], colork)):
encontrado = True
else:
j2 += 1
if (not encontrado):
i2 -= 1
encontrado = False
j3 = 0
while not encontrado and j3 < len(array[0]):
i3 = i1
while not encontrado and i3 <= i2:
if (diferentes(array[i3][j3], colork)):
encontrado = True
else:
i3 += 1
if (not encontrado):
j3 += 1
encontrado = False
j4 = len(array[0])-1
while not encontrado and j4 > 0:
i4 = i1
while not encontrado and i4 <= i2:
if (diferentes(array[i4][j4], colork)):
encontrado = True
else:
i4 += 1
if (not encontrado):
j4 -= 1
return pygame.Rect(i1, j3, i2-i1+1, j4-j3+1)
def main():
image = pygame.Surface((30,30))
image.fill((255,255,0))
image.fill((255,0,0), (10,11,12,13))
#image.fill((255,0,0), (10,11,1,2))
image.set_colorkey((255,255,0))
rect = minrect(image)
print rect
if __name__ == '__main__':
main()
Al ser un tema que no había tratado, y que me he complicado un poco con el algoritmo, es probable que haya errores. Avisar si notáis algo raro.
Saludos.