BMP Чтение файлов в c программировании не работает // LECTURA DE FICHERO BMP EN C - PullRequest
0 голосов
/ 29 октября 2019

Создайте приложение для предоставления информации, имеющей отношение к 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 

...