图像副本不正确

时间:2012-06-12 17:29:38

标签: file image-processing graphics bitmap

我需要读取一个图像并用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)每个像素的蓝色,绿色和红色的相对强度。)

0 个答案:

没有答案