JFIFファイル形式のヘッダーを読み取って検証するためのC++構造を作成しました。構造は次のとおりです。
#pragma pack(1)
typedef struct _JFIF_Header
{
WORD SOIMarker; // start of image marker
WORD APP0_Marker; // Application use marker
WORD APP0_Length; // Length of APP0 field
BYTE Identifier[5]; // zero terminating string "JFIF",X'4A', X'46', X'49', X'46', X'00'
BYTE Version[2]; // X'01',X'02'
BYTE Units; // units = 0:no units ;; units = 1:X and Y are dots per inch ;; units = 2:X and Y are dots per cm
WORD XDensity; // horizontal pixel density
WORD YDensity; // vertical pixel density
BYTE XThumbnail; // Thumbnail horizontal pixel density
BYTE YThumbnail; // Thumbnail vertical pixel density
}JFIFHeader;
rawディスククラスターからの読み取りとJFIFHeader
Structureでのこれらのバイトのコピーが完了し、すべてが正常に機能します。さて、問題は、保存された値XDensity
とYDensity
変数が非常に高いことです(X:24576,Y:24576
私はHex-Editorで画像を読みました)。この値を画像の実際の幅と高さにすることはできません。の値はUnits
です0x01
。つまり、単位は「ピクセル/インチ」です。
1024x826
これらの値から実際の画像解像度を取得するにはどうすればよいですか?これが適切な方法でない場合は、他の方法を教えてください。