Hace tiempo hablé de la lectura de archivos BMP en C y puse algún ejemplo. Pero falta lo más importante, poder guardar de nuevo las imágenes, tras aplicar un filtro o generar una imagen desde cero y exportarla. Para ello he creado la siguiente función:
Presento aquí mi solución al reto 14, en el que nos pasan una imagen en BMP, y por la stdin nos dan una componente (R, G, B) y un número de línea. Tenemos que hacer la suma de los valores de esa componente a lo largo de la línea especificada, y luego sumar 1.
Hoy vamos a practicar a leer una imagen desde un archivo BMP desde C. Aunque existen muchas APIs disponibles que son capaces de hacerlo, y mucho mejor que lo que voy a plantear (puesto que nos limitaremos a BMPs sin compresión y a 24bits por pixel), es un buen ejercicio para leer archivos con un formato especificado y documentado.
Para este tipo de archivos, tendremos dos cabeceras disponibles, la primera será la cabecera de fichero, y la segunda, la cabecera de información de imagen, que las definimos aquí:
typedefstruct bmpFileHeader { /* 2 bytes de identificación */ uint32_t size;/* Tamaño del archivo */ uint16_t resv1;/* Reservado */ uint16_t resv2;/* Reservado */ uint32_t offset;/* Offset hasta hasta los datos de imagen */ } bmpFileHeader;
typedefstruct bmpInfoHeader { uint32_t headersize;/* Tamaño de la cabecera */ uint32_t width;/* Ancho */ uint32_t height;/* Alto */ uint16_t planes;/* Planos de color (Siempre 1) */ uint16_t bpp;/* bits por pixel */ uint32_t compress;/* compresión */ uint32_t imgsize;/* tamaño de los datos de imagen */ uint32_t bpmx;/* Resolución X en bits por metro */ uint32_t bpmy;/* Resolución Y en bits por metro */ uint32_t colors;/* colors used en la paleta */ uint32_t imxtcolors;/* Colores importantes.
Si te ha gustado el sitio, te ha resultado útil o simplemente quieres colaborar con el sitio para que siga compartiendo contenidos, invítame a un café, una pizza, una ensalada, o lo que se te ocurra.Te lo agradeceré eternamente :)
¡Atención! Este sitio utiliza cookies propias y de terceros para mejorar la experiencia de usuario, Si continúa la navegación en el sitio, asumo que estás de acuerdo con esto, aunque siempre puedes desactivar las cookies en tu navegador. AceptarLeer más
Últimos comentarios