Hem*_*rma 4 c c++ jpeg resolution header
我已经创建了一个C++结构来读取和验证JFIF文件格式的标头.结构如下......
#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;
Run Code Online (Sandbox Code Playgroud)
从原始磁盘集群读取并在JFIFHeaderStructure中复制这些字节已经完成,一切正常.现在,问题是,保存的值XDensity和YDensity变量非常高(X:24576,Y:24576我在Hex-Editor中读取图像).该值不能是图像的实际宽度和高度.的值Units是0x01,即单位是"每英寸的像素".
如何1024x826从这些值中获得实际图像分辨率?如果这不是正确的方法,请给我任何其他选择.
您可以找到JPEG的SOF0标记(0xC0),然后是16位长度,然后是每像素位(8位),高度(16位),宽度(16位)和组件计数(8位).所有值都是网络字节顺序.

图像是0x1C2按0x1C2像素(450x450).