Hola a todos:
Necesito vuestra ayuda porque me estoy volviendo loco con un tema para leer la cabecera de un archivo BMP.
Tengo que leer un archivo BMP 54 bytes de cabecera y el resto de datos.
Debo hacerlo inexcusablemete con la sentencia fscanf.
Los dos primeros caracteres los leo perfectamente.
El problema es cuando trato de leer el resto que segun he leido son:
Primero una cabecera de 14 bytes con la información del fichero. Sus campos son:• char magic_number1; //Tiene que valer 'B'
• char magic_number2; //Tiene que valer 'M'
• int file_size; //El tamaño del fichero que será 54 + el tamaño de la imagen
• short int reserved1; //No nos importa su contenido
• short int reserved2; //No nos importa su contenido
• int bitmap_start; //Tiene que valer 54
• A continuación una cabecera de 40 bytes con la información de la imagen. Sus campos son:• int cabecera_size; //Tiene que valer 40
• int width; //Ancho de la imagen
• int height; //Alto de la imagen
• short int color_planes; //No nos importa su contenido
• short int bits_per_pixel; //Tiene que valer 24
• int compression; //Tiene que valer 0
• int image_size; //El tamaño de la imagen que será alto * ancho * 3
• int h_res; //No nos importa su contenido
• int v_res; //No nos importa su contenido
• int n_colors; //Tiene que valer 0
• int n_important_colors; //Tiene que valer 0
• Finalmente, los datos de la imagen dispuestos de la siguiente forma. Cada píxel de la imagen
tiene un color que se representa por sus componentes rojo, verde y azul.
Lo que tengo que hacer es introducir los datos de los pixels en una matriz de [ancho , alto*3( Bytes de cada color RGB)]
modificar esos bytes y grabarlos de nuevo en el fichero, con idéntica cabecera.
Me he quedado encajado en la lectura con el fscanf.
Adjunto el código donde me clavo.
#include <stdio.h>
#include <stdlib.h>
#define MAXTEXT 50
int main ()
{
char nombre[MAXTEXT];
FILE *fich;
char magic_number1;
int width;
int height;
do{
printf("Introduzca el nombre del fichero origen:");
scanf("%19[^n]s", nombre);
getchar();
fich = fopen(nombre,"r"); //abro el fichero para leer
if(fich==NULL)
printf("Error abriendo el fichero origenn");
} while (fich==NULL);
fscanf(fich,"%c",&magic_number1);
printf("%c",magic_number1);/* para ver el resultado*/
fscanf(fich,"%4c",&width);
printf("%4c",width);/*para ver resultado*/
fscanf(fich,"%4c",&height);
printf("%4c",height);/*esto no me escribe el tamaño del fichero*/
Os agradecería me indicaseis como puedo leere los caracteres de las cabeceras y los datos de los pixeles.
Aprovecho la ocasión para enviaros un cordial saludo.