Te indico el formato de un fichero .BMP para que puedas empezar a trastear.
Puedes crear imágenes BMP desde la aplicación Paint de Windows, por ejemplo.
Esta es la estructura:
1. Cabecera (14 bytes):
Firma: 2 bytes Siempre "BM"
Tamaño archivo: 4 bytes
Reservado: 4 bytes Siempre 0
Offset a datos: 4 bytes Indica donde empieza la matriz de datos
2. Cabecera de informacion (40 bytes):
Tamaño de la cabecera de información 4 bytes
Anchura del bitmap en pixels 4 bytes
Altura del bitmap en pixels 4 bytes
Numero de planos 2 bytes Siempre 1 (1)
Numero de bits por pixel 2 bytes Válido 1,2,4,8,24,32
Tipo de compresion 4 bytes 0 = No compresion
Tamaño de la imagen 4 bytes Tamaño de la imagen
Resolucion horizontal 4 bytes
Resolucion vertical 4 bytes
Colores utilizados 4 bytes 0 = Todos (2)
Colores importantes 4 bytes 0 = Todos (2)
3. Tabla de colores (4 * Numero_de_colores bytes)
(Solo aparece si Bits por Pixel es <= 8, si no no hay tabla de colores)
Rojo (R) 1 byte
Verde (G) 1 byte
Azul (B) 1 byte
Reservado 1 byte (siempre cero)
(Repetido Numero_de_colores veces)
4. Aqui empieza la matriz de datos.
Por numero de colores, los modos de 24 y 32 bits son iguales. La diferencia es que el modo de 24 bits ocupa menos espacio (3 bytes por pixel), mientras que el de 32 bits desperdicia 1 byte a cambio de estar mejor optimizado de cara al hardware.
Los datos estan organizados de este modo (byte por byte):
Para 24 bits:
RR GG BB RR GG BB ... (cada conjunto RR GG BB representa 1 pixel)
y así hasta completar Ancho * Alto conjuntos RR GG BB.
Para 32 bits:
BB GG RR 00 BB GG RR 00 ... (cada conjunto BB GG RR 00 representa 1 pixel)
y así hasta completar Ancho * Alto conjuntos BB GG RR 00.
Debes abrir el fichero de imagen en formato binario. Los elementos de 2 bytes debes leerlos como enteros de 16 bits, los de 4 bytes como enteros de 32 bits.
Al leer los colores, en 32 bits, leelos directamente como numeros enteros de 32 bits. Si están en 24 bits, deberás leerlos byte por byte y hacer un color de 32 bits del siguiente modo:
Color(32 bits) = BB + 256*GG + 65536*RR
Los datos los leerás, por ejemplo, en una matriz de enteros de 32 bits de dimensines Altura_bitmap filas X Anchura_bitmap columnas.
En el formato de 32 bits, el orden de los colores aparece invertido respecto del de 24 bits porque, al utilizarlo como entero, los procesadores INTEL guardan en primer lugar los bytes menos significativos.
Nota (1):
En las antiguas tarjetas gráficas EGA y para algunos modos VGA, los colores se obtenían mediante la combinación de varios planos de imagen, cada uno con un color.
Nota (2):
Cuando se utilizan 8 bits o menos para color, lo que se hace es mapear el valor correspondiente a un color de 32 bits. Creo que también se hacía para modos de video con 15 y 16 bits (prácticamente desaparecidos con las modernas tarjetas de video).
Como ya te dije en la primera respuesta, busca en Internet, hay muchísima información. También un par de consejillos finales:
1. Busca un editor hexadecimal (hexedit o algún programa parecido), te permitirá ver directamente los bytes de tu archivo de imagen.
2. Quizá sería más adecuado emplear un lenguaje de programación que soporte estructuras de datos, como C o PASCAL.
Que lo disfrutes,
PACO.