我需要读取图像并用 C++ 回写(创建它的副本)
我有一个代码
FILE *filePtr, *filePtr2;
BITMAPFILEHEADER bitmapFileHeader;
BITMAPINFOHEADER bitmapInfoHeader;
filePtr = fopen(path,"rb");
filePtr2 = fopen("output.bmp","wb");
fread(&bitmapFileHeader, sizeof(BITMAPFILEHEADER),1,filePtr);
fread(&bitmapInfoHeader, sizeof(BITMAPINFOHEADER),1,filePtr);
fwrite(&bitmapFileHeader, sizeof(BITMAPFILEHEADER),1,filePtr2);
fwrite(&bitmapInfoHeader, sizeof(BITMAPINFOHEADER),1,filePtr2);
char *bitmapImage = new char[bitmapInfoHeader.biHeight*bitmapInfoHeader.biWidth*3];
fseek(filePtr, bitmapFileHeader.bfOffBits, SEEK_SET);
fread(bitmapImage, bitmapInfoHeader.biHeight*bitmapInfoHeader.biWidth*3, 1, filePtr);
fwrite(bitmapImage, bitmapInfoHeader.biHeight*bitmapInfoHeader.biWidth*3, 1, filePtr2);
但是生成的图像的重量小于源图像。我可以在 ImageViewer 中打开它,但没有显示最后几行图像。
如果我在代码中的任何地方将乘以 3 更改为乘以 4,则查看的结果图像没有问题,但尺寸大于源图像。
biBitCount = 24 这就是为什么我要乘以 3,原因(位图数据字段中的每三个字节代表 (BGR) 每个像素的蓝色、绿色和红色的相对强度。)