Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Extraer sprites de imagen en C

Estas en el tema de Extraer sprites de imagen en C en el foro de C/C++ en Foros del Web. Bueno, mi duda es un poco complicada. Supongamos que tenemos una imagen bmp, que tiene colo de fondo negro(0) y que tiene varios sprites con ...
  #1 (permalink)  
Antiguo 26/02/2006, 13:18
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Extraer sprites de imagen en C

Bueno, mi duda es un poco complicada.
Supongamos que tenemos una imagen bmp, que tiene colo de fondo negro(0) y que tiene varios sprites con sus diferentes movimientos.

Lo que intento hacer es un pequeño programa que me extraiga el cuadro minimo del sprite, es decir, que me corte cada dibujo que hay dentro de la imagen en los cuadrados mas chicos que se pueda sin cortar el sprite.

Lo que intente fue, recorrer toda la imagen con 2 fors y que al encontrarse con un pixel que no fuera negro, entonces que desde ahi empezra a cortar hasta volverse a encontrar un pixel negro. Pero esto solo funciona horizontalmente o verticalmente, no de las 2 maneras juntas.

El sprite no contiene ningun pixel negro. Asi que no hay problema de encontrarse con pixeles negros dentro de los sprites.

Me pueden dar la idea de algun algoritmo que pueda usar para poder cortar estos sprites automaticamente?

Saludos
  #2 (permalink)  
Antiguo 26/02/2006, 15:12
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
¿?

Es más fácil de como lo has planteado. Recorre el bitmap por arriba línea a línea, hasta que encuentres un píxel. Guardas la línea donde empieza. Después lo repites por cada lado: abajo, izquierda y derecha. Ahí tendrás los bordes.
  #3 (permalink)  
Antiguo 26/02/2006, 18:05
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
El problema es que hay varios sprites regados por toda la imagen asi que no puedo hacer lo que tu dices.

Necesito sacar los cuadrados minimos de cada sprite, sabiendo que cada sprite esta en una posision desconocida y con un tamaño desconocido.

Saludos
  #4 (permalink)  
Antiguo 26/02/2006, 22:34
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
que tal instru?
Cual es el fin de hacer eso?, vas a hacer un videojuego en 2D y quieres que solo se vean los personajes y no el fondo?
si es asi, usa transparencia, con allegro es en color rosado fosforecente.

O que es exactamente lo que quieres hacer?

saludos,
  #5 (permalink)  
Antiguo 27/02/2006, 06:04
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
blackwind, ha preguntado lo que quiere hacer, da igual allegro o donde esté.

A ver Instru, si tienes una imagen compuesta, "córtala" primero en las diferentes imágenes y despues haz lo que te he dicho.

Evidentemente aunque los sprites sean de tamaño desconocido deberán seguir un patrón. Es como que están "encasillados" de alguna manera.
  #6 (permalink)  
Antiguo 27/02/2006, 16:13
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
MM. Creo que no me he explicado bien a pesar de mis esfuerzos.
Mi objetivo es: Agarrar una imagen con sprites. Hay un numero x de sprites, es decir, no se sabe cuantos. Y de esa imagen con sprites, quiro separarlos, agarrar cada sprite y ponerlo en una imagen nueva, eso es todo. Cada uno de los sprites en un bmp. No necesito transparencias ni nada. Como si estuvieras en paint y usaras la herramienta cortar e hicieras un pequeño rectangulo que abarcara el area exacta rectangular de un sprite, y luego ese cuadrito guardarlo en otro bmp.

Ahora, como datos extra.
Digamos que tengo ya un puntero que apunta a los pixeles de la imagen *pixel;
y ese puntero me va a dar el colo de cada pixel.

En realidad no tiene que depender de ninguna libreria. Yo solo uso, SDL para tener el nivel de acceso a los pixeles, pero igual pudiera hacerlo con allegro,como con DX.

Alguna idea para el algoritmo? Porque a mi aun no se me ocurre una manera que haga exactamente lo que quiero.

SAludos
  #7 (permalink)  
Antiguo 28/02/2006, 12:38
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
y que restricciones planeas poner?
algun numero maximo de sprites por columna/fila?
algun tamaño maximo por cada sprite?
o ninguna?

si tiene alguna restriccion seria mucho mas facil...... pero sin restricciones............
  #8 (permalink)  
Antiguo 28/02/2006, 15:41
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52

Sin restricciones. El chiste es que el programa agarre y me sepa decir, cuantos sprites hay y sacarlos. Sin importar tamaño, forma, posision. Digamos que el unico dato que le voy a dar es el colo de fondo, asi podra distinguir los sprites del fondo.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:42.