gpt4 book ai didi

c - 读取 bmp header C++ 时出错(颜色数 = 0)

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:03 25 4
gpt4 key购买 nike

首先,抱歉我的英语不好,我是法国人。如果你能回答我的问题,谢谢你。我有一个项目,我必须在其中读取 bmp 文件。这是我的标题:

#include<stdio.h>
#include<stdlib.h>



#pragma pack (1)
typedef struct {
char filetype[2];
unsigned int filesize;
short reserved1;
short reserved2;
unsigned int dataoffset;
} file_head;



typedef struct {

unsigned int headersize;
unsigned int width;
unsigned int height;
short planes;
short bitsperpixel;
unsigned int compression;
unsigned int bitmapsize; /*taille de l'image*/
unsigned int horizontalres;
unsigned int verticalres;
long NumColorsUsed;
unsigned int importantcolors;
} bmp_head;


#pragma pack (0)
}

这是我的主要内容:

#include <stdio.h>
#include <stdlib.h>
/*#include <errno.h> bibliothèque erreur*/
#include <string.h>
#include "Header.h"



void main()

{

FILE *input; /*fichier d'entree*/
FILE *output; /*fichier de sortie*/
bmp_head *bmp_header;
file_head *file_header;
rgb **pointcolor= NULL;
rgb *col;
char* data;
int n;
int i;
int j;
int B;
int a;

input = fopen("Rouge.bmp", "rb"); /* ouverture du fichier lena se trouvant dans le dossier du projet*/
if (input == NULL)
{ printf("Erreur lors de l'ouverture! \n");
}
else
{ printf("Fichier ouvert!\n");


}
file_header=NULL;
file_header = (file_head*)malloc(sizeof(file_head));
if (file_header == NULL)
{
printf("Erreur lors de l'allocation file_header!\n");
}
else
{
printf("Allocation de file_header reussie!\n");
}

n = fread(file_header, sizeof(file_head), 1, input);
if (n < 1)
{
printf("Le fichier ne peut pas etre lu !\n");
}
else
{
printf("La lecture du fichier a reussi!\n\n");
}


bmp_header= NULL;
bmp_header = (bmp_head*)malloc(sizeof(bmp_head));

if (bmp_header == NULL)
{
printf("\nErreur lors de l'allocation bmp_header!\n");
}
else
{
printf("\nAllocation de bmp_header reussie!\n");
}

n = fread(bmp_header, sizeof(bmp_head), 1, input);
if (n < 1)
{
printf("\nLe fichier ne peut pas etre lu !\n");
}
else
{
printf("\nLa lecture du fichier a reussi!\n");

printf("Le nombre de couleurs est %d\n", bmp_header->NumColorsUsed);

}

system("pause");
fclose(input);

free(input);
free (bmp_header);

}

我的问题在最后一行(在 system("pause") 之前:当我尝试读取我的颜色数量时,他们说 0。有人知道为什么吗?

谢谢!

最佳答案

位图头的定义是:

typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;

你的定义不一样。

文件头的定义是:

#include <pshpack2.h>
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
#include <poppack.h>

与:

typedef unsigned short      WORD;
typedef unsigned long DWORD;

关于c - 读取 bmp header C++ 时出错(颜色数 = 0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29197773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com