Asuntos Oficiales > Retos
Formato Bmp
senzao18:
Hola anoche en un rato libre, se me ocurrio usar ese tiempo para sacar este programa, pero cuando leia sobre la estructura de los BMP 24 bits, me hice bolas con lo siguiente.
Los colores de la imagen estan a partir del 55° Byte.
Los pixels se leen de izquierda a derecha y luego de abajo a arriba
55, 56, 57 son B, G, R.
Entonces si yo tengo un dibujo de 5 x 5
Los byte 55, 56, y 57
Son el pixel (0, 0)
12345
12345
12345
12345
1<---Este---2345
en creo que en BitMap de VS.Net seria la posicion (0,4)
:blink:
JuanK:
--- Cita de: "senzao18" --- Los colores de la imagen estan a partir del 15° Byte.
--- Fin de la cita ---
No te fies de eso, mejor revisa el campo offset, este te dice en que posicion empieza la informacion del bmp.
Repecto al orden de los colores, asumiendo que cada numero representa un color, en el caso de un bmp de 5*5 serian:
--- Código: Text ---21,22,23,24,2516,17,18,19,2011,12,13,14,1506,07,08,09,1001,02,03,04,05
como cada color es de tres componentes, vienen si mal no recuerdo:
--- Código: Text ---(RGB), (RGB), (RGB), (RGB), (RGB)(RGB), (RGB), (RGB), (RGB), (RGB)(RGB), (RGB), (RGB), (RGB), (RGB)(RGB), (RGB), (RGB), (RGB), (RGB)(RGB), (RGB), (RGB), (RGB), (RGB)
Geo:
Tiene razón Juank, aunque hasta ahora todos los bitmap de 24 bits que he encontrado empiezan en ese byte (las cabeceras son siempre de 54 bytes).
Sólo algunos detalles que recordar:
* Las componentes están en orden BGR (azul, verde, rojo).</li>
* La imagen normalmente está "de cabeza", es decir, la última fila de información en el archivo es en realidad la línea superior de la imagen. Según la documentación que leí, esto lo determina el signo de la altura de imagen (dato leído del archivo), si la altura es negativa, la info de imagen está "bien", si la altura es positiva, la imagen está "de cabeza" y hay que invertirla. Aquí, comento que tampoco he encontrado una imagen en la que la altura sea negativa, y cuando yo intenté guardar una imagen así, no la pude ver en algunos programas :P.</li>
* Cuando una línea no tiene un número de bytes divisible entre 4, tiene bytes "de relleno", en el caso de la imagen 5x5 que mencionas, la info de imagen en el archivo estaría así:
--- Citar ---BGRBGRBGRBGRBGRU
BGRBGRBGRBGRBGRU
BGRBGRBGRBGRBGRU
BGRBGRBGRBGRBGRU
BGRBGRBGRBGRBGRU
--- Fin de la cita ---
Cada letra es un byte, B, G y R representan componentes de color, y U es un byte de relleno para que la línea tenga un número de bytes múltiplo de 4 (16, en este caso).</li>Saludos,
JJ (Geo).
Nagisa:
--- Cita de: "inforsystem" ---
--- Cita de: "Nagisa" --- A mi me parecio mucho mas facil leer byte a byte, aunque que el alineado sea a 32 bits te inita a que leas por palabras...
--- Fin de la cita ---
Hola.
Si utilizas la funcion fread, no creo que leer byte a byte sea lo mas optimo.
La estructura de un archivo bmp(puede que lo sepas) es asi:
----BITMAPINFOHEADER---
----BITMAPINFO-------------
----MAPA DE BITS----------
Para cuando el "cursor" de posicion este en el final de la estructura BITMAPINFO ya tienes suficientes datos para leer el contenido completo del mapa de bits.
VOID *bits;
...
bits = (VOID*) malloc(bitsize);
fread(bits,1,bitsize,fp); //Se lee de una vez
...
No crees que es más optimo cargar a memoria y luego leer los datos de ahi, que hacer sucesibas peticiones de lectura al disco?
Saludos
--- Fin de la cita ---
Hola:
De hecho al final lo lei todo de una vez... A mi tambien me parecio mas optima una sola peticion de lectura :D
Saludos!
senzao18:
Pues no me sale :(....
Yo estoy leyendo Byte por Byte... en la posicion que el offset e inicio a pintarlo pero me sale la imagen rara,,
ahi se las adjunto :D.
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa