首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从JFIF/EXIF (JPEG)头中获取实际图像分辨率?

从JFIF/EXIF (JPEG)头中获取实际图像分辨率?
EN

Stack Overflow用户
提问于 2013-01-19 21:33:05
回答 1查看 6K关注 0票数 4

我已经创建了一个用于读取和验证JFIF文件格式的头的C++结构。结构如下所示。

代码语言:javascript
复制
#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结构中已经完成,一切工作正常。现在,问题是,保存在XDensityYDensity变量中的值非常高(X:24576,Y:24576我在十六进制编辑器中读取图像)。该值不能是图像的实际宽度和高度。Units的值为0x01,即单位为“每英寸像素数”。

如何从这些值中获得实际的图像分辨率1024x826?如果这不是正确的方法,请给我任何其他选择。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-19 21:41:35

您可以找到JPEG的SOF0标记(0xC0),然后是16位长度,然后是每像素位(8位)、高度(16位)、宽度(16位)和组件计数(8位)。所有值都是网络字节顺序。

图像是0x1C2像素(450x450)的0x1C2

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14414884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档