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.