SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Alfonsos1 en Miércoles 23 de Febrero de 2011, 17:29

Título: de imagen a array
Publicado por: Alfonsos1 en Miércoles 23 de Febrero de 2011, 17:29
quiero hacer un array llamado mapa:

bool mapa[1000][1000]

si una poscion del array contiene un 0 significa blanco, si una poscion del array contiene un 1 significa negro.

y tengo una imagen bmp de 1000*1000 pixeles que es toda blanca, con algunas partes en negro.

lo que quiero hacer es checar si el pixel (0,0) es blanco, en ese caso que el array mapa tenga un 0 en la posicion

y asi para todas las posiciones del array.

en otras palabras quiero trasladoar una imagen bmp que tiene solo 2 colores a un array

---------------------------

supongo que ba a depender mucho de que libreria balla a usar para leer las imagenes, yo uso allegro, pero si hace falta otra libreria diganme cual
Título: Re: de imagen a array
Publicado por: m0skit0 en Miércoles 23 de Febrero de 2011, 18:17
Primero, si es bool, no contiene ni 0 ni 1, sino true y false. No hay nada en el estándar de C++ que diga que true es 1 y false 0 o viceversa.

No tienes más que leer los píxeles de la imagen en orden y uno a uno, compararlos con el color y asignar el valor al array.

De todas formas usar un array estático me parece erróneo a menos que las imágenes SIEMPRE vayan a ser de exactamente 1000x1000. Aún en este caso nunca sabes lo que te puede deparar el futuro...  :lol:
Título: Re: de imagen a array
Publicado por: Alfonsos1 en Miércoles 23 de Febrero de 2011, 18:22
y como leer los pixeles 1 a 1?
Título: Re: de imagen a array
Publicado por: m0skit0 en Jueves 24 de Febrero de 2011, 09:30
Depende del formato de la imagen y de la librería que uses.
Título: Re: de imagen a array
Publicado por: Amilius en Jueves 24 de Febrero de 2011, 19:14
Una biblioteca gráfica debería permitirte acceder directamente a los datos con un puntero a cada fila. En DirectX puedes tener "superficies" donde la imagen entera está reservada en un bloque contiguo de memoria. Esto es más eficiente que acceder un pixel a la vez.
En lugar de usar bool para cada pixel en tu arreglo sería mejor que uses un entero de 32 bits para almacenar 32 pixeles a la vez (o 64 bits para AMD64). Luego es posible acceder a un pixel específico usando desplazamientos y máscaras. Esto reduciría el consumo de memoria del actual cercano a 1 MB a menos de 32 KB.
Título: Re: de imagen a array
Publicado por: m0skit0 en Jueves 24 de Febrero de 2011, 19:39
Totalmente de acuerdo Amilius, pero a lo mejor es una práctica, quién sabe  ^_^
Título: Re: de imagen a array
Publicado por: Geo en Viernes 25 de Febrero de 2011, 06:19
Primero, la imagen, ¿ya conseguiste cargarla a memoria? O solamente tienes un archivo y tu duda es precisamente cómo cargarla a memoria.