File 图像复制不正确 我需要读取一个图像并在C++中回写(创建一个副本)

File 图像复制不正确 我需要读取一个图像并在C++中回写(创建一个副本),file,image-processing,graphics,bitmap,File,Image Processing,Graphics,Bitmap,我有密码 FILE *filePtr, *filePtr2; BITMAPFILEHEADER bitmapFileHeader; BITMAPINFOHEADER bitmapInfoHeader; filePtr = fopen(path,"rb"); filePtr2 = fopen("output.bmp","wb"); fread(&bitmapFileHeader, sizeof(BITMAPFILEHEADER),1,filePtr); fread(&b

我有密码

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)每个像素的蓝色、绿色和红色的相对强度。)

这行是否正确?是否需要将bOffBits转换为若干字节?不过,我们可能需要更多地了解文件的格式,尤其是它是否包括任何地方的填充,例如,使每行具有一定数量的字节?我想我已经发现了错误。我没有在末尾添加flose:-Dlol,这仍然不起作用。我在大图像(800x600)上得到了正常的结果,但是使用相同的裁剪图像(400x300)作为源,结果小了2个字节。关于bfOfBits,结果中的标题是ok的,问题是图像的最后一行(图像顶部)。看起来问题出在读取或写入图像数据点的行中的某个位置?“它是否包括任何地方的填充,例如,使每行具有一定数量的字节?”-您可以用其他单词说吗?