ESTRUCTURA DE UN ARCHIVO BMP


Te envío la estructura de un archivo .bmp.Esta estructura está contenida al principio del archivo.
struct header{
char type[2];
unsigned long size;
char reserved[4];
unsigned long offset;
};
type es un 'número mágico' que se usa para comprobar que el archivo es .bmp.Reserved no se usa normalmente (por lo menos hasta el año pasado no se usaba).Offset es el desplazamiento de los datos con respecto al inicio del archivo.Naturalmente,suele ser igual al tamaño de las estructuras de cabecera.
struct bmp_info{
unsigned long bytes_in_header;
unsigned long widht;
unsigned long height;
int planes;
int bits_per_pixel;
unsigned long compression;
unsigned long size_image;
unsigned long h_resolution;
unsigned long v_resolution;
unsigned long n_indexes;
unsigned long n_i_indexes;
};
Bytes_in_header es exactamente eso y a mí me parece un dato inútil.Planes es un campo que nunca he utilizado.Bits_per_pixel es importante;ya lo explicaré en detalle.Compression... no tengo idea.Si me topo con un archivo con un valor anómalo en este campo,lo descarto.

Los colores se generan en la pantalla usando una combinación de rojo,verde y azul.
Al conjunto de combinaciones se le llama la paleta de colores.
Un color es referenciado como un número.El rango del número depende de los bits usados para referenciarlo.Si es 1 bit,se permiten 2 colores.Si son 4,16,etc.
Para cada pixel se especifica su color.Entonces,el campo bits_per_pixel indica cuántos bits representan un pixel en la pantalla.Si vas leyendo pixel a pixel...
Inmediatamente después de ambas cabeceras comienza la especificación de qué componentes de rojo,verde y azul se usarán para cada color.El tamaño de esta sección se calcula sabiendo el número de colores y que se utilizan 4 bytes para especificar cada color;uno para el rojo,otro para el verde y otro para el azul;el otro no se utiliza, no sé por qué. Debes usar setpalette para especificar la paleta a usar.
Dos datos.Los colores están invertidos en la paleta;primero el azul y al final el rojo. Los pixels están en orden inverso;comienzan en la última línea.


Fabián Sierra C.