我正在尝试将 bmp 文件读入我的程序,但遇到了一些问题。读入文件后,如果我告诉它打印 pBmp->header.fileSize 它说 16 但如果我在十六进制编辑器中查看它,如果我将值修改为正确的文件大小,则文件大小部分有 F6 7A 10 00在十六进制中,它会说 F6 7A F6 7A 10 00 但这会进入 resv1,它应该始终为零。我知道这只是读取 1 个像素的数据,我遇到的另一个问题是,当我尝试使用 while 循环读取像素直到文件末尾出现分段错误时。我确实花了几个小时在谷歌上搜索试图解决这个问题,但我运气不佳。
// The BMPHEADER structure.
typedef struct {
byte sigB;
byte sigM;
int32_t fileSize;
int16_t resv1;
int16_t resv2;
int32_t pixelOffset;
} tBmpHeader;
// The BMPINFOHEADER structure.
typedef struct {
int32_t size;
int32_t width;
int32_t height;
int16_t colorPlanes;
int16_t bitsPerPixel;
byte zeros[24];
} tBmpInfoHeader;
typedef uint8_t byte;
typedef struct {
byte blue;
byte green;
byte red;
} tPixel;
// A BMP image consists of the BMPHEADER and BMPINFOHEADER structures, and the 2D pixel array.
typedef struct {
tBmpHeader header;
tBmpInfoHeader infoHeader;
tPixel **pixel;
} tBmp;
tPixel **BmpPixelAlloc(int pWidth, int pHeight)
{
tPixel **pixels = (tPixel **)malloc (pHeight * sizeof(tPixel *));
for (int row = 0; row < pHeight; ++row)
{
pixels[row] = (tPixel *)malloc(pWidth * sizeof(tPixel));
}
printf("pixelAlloc\n");
return pixels;
}
pBmp->pixel = BmpPixelAlloc(pBmp->infoHeader.width, pBmp->infoHeader.height);
if(FileRead(file, &pBmp->pixel, sizeof(tPixel), 1)!=0)
{
errorCode = ErrorFileRead;
}