1

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);
}
4

1 に答える 1