ビットマップファイルを変更しようとしていますが、そのためにサイズが必要です。ビットマップファイルのサイズは正しいですか?一致するプロパティがありません
私は(Cを使用して、ところで)これらの構造体を使用し、私は適切にヘッダを読んでかなり確信している:
#pragma pack(1)
struct bmp_fileheader
{
unsigned char fileMarker1; /* 'B' */
unsigned char fileMarker2; /* 'M' */
unsigned int bfSize; /* File's size */
unsigned short unused1;
unsigned short unused2;
unsigned int imageDataOffset; /* Offset to the start of image data */
};
struct bmp_infoheader
{
unsigned int biSize; /* Size of the info header - 40 bytes */
signed int width; /* Width of the image */
signed int height; /* Height of the image */
unsigned short planes;
unsigned short bitPix;
unsigned int biCompression;
unsigned int biSizeImage; /* Size of the image data */
int biXPelsPerMeter;
int biYPelsPerMeter;
unsigned int biClrUsed;
unsigned int biClrImportant;
};
#pragma pack()
私はバギー結果を取得しています、と私はそれがあるためだと思う一日の終わりにbfSizeはファイルのプロパティと一致しません。 (右クリックプロパティはprintf関数のbfSizeとは異なります。
を私は、このリンク(https://en.wikipedia.org/wiki/BMP_file_format#Example_1)から理解して何から、bfSizeは、パディングを含めた全体のサイズを、含まれている必要があります。
bfSizeは性質が異なる場合、それは大丈夫ですか?私はアイデアを得た
、私は、プラグマパックを使用して構造体を読んでいるので、私はピクセルの配列は?
を開始どこから読んでいるかのように私のバギー結果は、その後、私は、ファイルから読み続けていることだと思います私は
のようなものを使用していますFILE *pf
これらの構造体を読みました。
ピクセルの配列内に格納されているオクテットの数を計算します。
次に、pfの位置から続くオクテットを読んでいます。これは、私のロジックによれば、配列がどこから始まるのかがわかります。
読んでいただきありがとうございます。
編集:ps:これらの違いは次のとおりです:bfSizeは 3645と表示され、プロパティにはかなり大きな違いが3702と表示されます。 bfSizeの数値は、プロパティの数値よりも常に小さくなります。
'bfSize'がDisk_バイトの_Sizeより小さい場合、' bfSize'は間違っています。 MSDNから: 'bfSize' _ビットマップfile_のサイズをバイト単位で指定します。 –
ファイルをモード "" rb "'で開きますか? –
私はそれを "rb"モードで開きます。同じFILE * pfを使って2つの構造体を読んでいます。それから私は各バイトを読みます。 – NuSuntStudent