Cでビットマップファイルを作成するプログラムを作成しています.24ビットカラーを使用しています。
私は 3 段階でファイルを書き込んでいます。最初に FileHeader、次に InfoHeader、そして Pixel Data を書きます。各行がワード境界で終了するように、ピクセル データのパディングに問題があります。
以下のコードは時々動作しますが、(行末にパディングを追加する) while ループがない場合のみです。たとえば、12x12px の画像を 24x24 に拡大できますが、10x10 にはできません (ファイルが破損しています)。以下のパディング コードを挿入すると、画像がゆがみ、場合によっては破損することもあります。
何が問題なのかわかりません。以下のコードは、単語の境界に達するまで各行の末尾にパディングを追加してから、次の行を開始する必要があります。
fwrite(&fh, 1, sizeof(FILEHEADER), n_img);
fwrite(&ih, 1, sizeof(INFOHEADER), n_img);
int i, j;
uint8_t pad = 0;
for (i = height-1; i >= 0; i--) {
for (j = 0; j < width; j++)
fwrite(n_pix+(i*width)+j, 1, sizeof(IMAGE), n_img);
while(ftell(n_img)%4 != 0)
fwrite(&pad, 1, 1, n_img);
}