4
我創建了一個用於讀取和驗證JFIF文件格式頭的C++結構。 的結構如下...從JFIF/EXIF(JPEG)頭獲取實際的圖像分辨率?
#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;
從原始磁盤簇讀取和複製在JFIFHeader
結構這些字節已經完成,一切工作正常。 現在,問題是,值保存在XDensity
和YDensity
變量非常高(X:24576,Y:24576
我讀了十六進制編輯器中的圖像)。該值不能是圖像的實際寬度和高度。 Units
的值是0x01
,即單位是「每英寸像素數」。
如何從這些值中獲得實際圖像分辨率1024x826
? 如果這不是正確的方法,請給我任何其他的選擇。
24567 = 0x6000。交換兩個字節,因爲您以錯誤的順序讀取它們= 0x0060 = 96。96 dpi是非常常見的值。不要編寫自己的jpeg解碼器。 –
是的,這就是我的想法。剛剛看到一個示例代碼。謝謝。 –