• Jueves 14 de Noviembre de 2024, 04:38

Autor Tema:  de imagen a array  (Leído 2340 veces)

Alfonsos1

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
de imagen a array
« en: Miércoles 23 de Febrero de 2011, 17:29 »
0
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
  • [0], de lo contrario que contenga un 1.


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

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: de imagen a array
« Respuesta #1 en: Miércoles 23 de Febrero de 2011, 18:17 »
0
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:

Alfonsos1

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Re: de imagen a array
« Respuesta #2 en: Miércoles 23 de Febrero de 2011, 18:22 »
0
y como leer los pixeles 1 a 1?

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: de imagen a array
« Respuesta #3 en: Jueves 24 de Febrero de 2011, 09:30 »
0
Depende del formato de la imagen y de la librería que uses.

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: de imagen a array
« Respuesta #4 en: Jueves 24 de Febrero de 2011, 19:14 »
0
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.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: de imagen a array
« Respuesta #5 en: Jueves 24 de Febrero de 2011, 19:39 »
0
Totalmente de acuerdo Amilius, pero a lo mejor es una práctica, quién sabe  ^_^

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: de imagen a array
« Respuesta #6 en: Viernes 25 de Febrero de 2011, 06:19 »
0
Primero, la imagen, ¿ya conseguiste cargarla a memoria? O solamente tienes un archivo y tu duda es precisamente cómo cargarla a memoria.
La imaginación es el límite.
Hardware & Software | Mexchip