Создайте приложение для предоставления информации, имеющей отношение к BMP. La ruta hasta el fichero se pasará como parámetro. En caso de que el fichero не существует ни одного морского BMP, описанного в отчете SOLAMENTE en la salida de error. Важная информация: Tamaño del archivo (el almacenado dentro del BMP) Tamaño en пиксели del BMP (anchura y altura) Nº de planos Si utiliza paleta de colores o no. Состязание по отношению к пикселям не имеет смысла. Состязание по BMP не имеет вертикального значения и защиты пикселей. Si no es un un archivo comprimido, calcal el valor medio, maximo and mínimo de la luminancia de la imagen. Формула для определения яркости (Y) в цветовых представлениях в RGB: Y = R * 0,3 + G * 0,59 + B * 0,11
Основной файл:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "header.h"
void DisplayInfo(bmpImageHeader *ImageHeader)
{
printf("Tamaño de la cabecera: %d\n", ImageHeader->biSize);
printf("Anchura: %d\n", ImageHeader->biWidth);
printf("Altura: %d\n", ImageHeader->biHeight);
printf("Planos (1): %d\n", ImageHeader->biPlanes);
printf("Bits por pixel: %d\n", ImageHeader->biBitCount);
printf("Compresión: %d\n", ImageHeader->biCompression);
printf("Tamaño de datos de imagen: %d\n", ImageHeader->biSizeImage);
printf("Resolucón horizontal: %d\n", ImageHeader->biXPelsPerMeter);
printf("Resolucón vertical: %d\n", ImageHeader->biYPelsPerMeters);
printf("Colores en paleta: %d\n", ImageHeader->biClrUsed);
printf("Colores importantes: %d\n", ImageHeader->biClrImportant);
}
int main(int argc, char* argv[]) {
FILE *fp;
bmpFileHeader FileHeader;
bmpImageHeader ImageHeader;
if (argc!=2)
{
printf("Archivo no válido");
exit(1);
}
fp=fopen(argv[1], "r");
if(fp == NULL)
{
printf("Error opening file\n");
exit(1);
}
/*Leer 2 primeros bytes y comprobar BMP*/
fread(&FileHeader, sizeof(bmpFileHeader), 1, fp);
//printf("Valor devuelto %04x\n",Header.bfType);
if (FileHeader.bfType!=0x4D42)
{
printf("No es BMP");
fclose(fp);
exit(1);
}
/*Leer cabecera de imagen*/
fread(&ImageHeader, sizeof(bmpImageHeader), 1, fp);
/*Mostrar info*/
DisplayInfo(&ImageHeader);
}
Заголовокфайл
#include <stdio.h>
#include <stdlib.h>
#ifndef DATA_H_
#define DATA_H_
typedef struct bmpFileHeader
{
/* 2 bytes de identificación */
uint16_t bfType; /* BM,comprobar */
uint32_t bfSize; /* Tamaño del archivo en bytes */
uint16_t bfReserved1; /* Reservado =0*/
uint16_t bfReserved2; /* Reservado =0 */
uint32_t bfOffBits; /* Offset hasta hasta los datos de imagen */
} bmpFileHeader;
typedef struct bmpImageHeader
{
uint32_t biSize; /* Tamaño de la cabecera >40 */
int32_t biWidth; /* Ancho de la imagen en píxeles */
int32_t biHeight; /* Alto de la imagen en píxeles */
uint16_t biPlanes; /* = 1 */
uint16_t biBitCount; /* Bits por pixel: 1,4,8,16,24,32 */
uint32_t biCompression; /* 0=sin comprimir, 1=8-bit, 2=4-bit, 3=16/32-bit */
uint32_t biSizeImage; /* Tamaño de los datos de imagen, 0=sin comprimir */
int32_t biXPelsPerMeter; /* Resolución X en bits por metro */
int32_t biYPelsPerMeters; /* Resolución Y en bits por metro */
uint32_t biClrUsed; /* Colores usados */
uint32_t biClrImportant; /* Colores importantes, 0 = todos */
} bmpImageHeader;
typedef struct IMAGE
{
unsigned char b; /* Azul */
unsigned char g; /* Verde */
unsigned char r; /* Rojo */
}IMAGE;
#endif