0

イメージを読み取り、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 を掛けています (ビットマップのデータ フィールドの 3 バイトごとに、(BGR) すべてのピクセルの青、緑、赤の相対強度を表します)。

4

0 に答える 0