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

标签 c header bmp

首先,抱歉我的英语不好,我是法国人。如果你能回答我的问题,谢谢你。 我有一个项目,我必须在其中读取 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/

相关文章:

c++ - 如何克服大量生成代码导致的编译时间过长?

带有 header 和包含的 c 源代码

c++ - 来自文件错误的 Win32 LoadImage()

c - 在 24 位 rgb 位图中填充

c# - 如何将位图图像转换为 jpeg2000

c - libxml xmlNodePtr 到原始 xml 字符串?

c - 如何读取和比较 C 中的字符 255

c float 和 int 长度问题(段错误)

c - 如何在 Ax = b 中生成一个非常大的非奇异矩阵 A?

header - 如何在打印预览中设置Excel标题字体和样式?