gpt4 book ai didi

c++ - 从 JFIF/EXIF (JPEG) header 获取实际图像分辨率?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:45 25 4
gpt4 key购买 nike

我已经创建了一个 C++ 结构来读取和验证 JFIF 文件格式的 header 。结构如下...

#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?如果这不是正确的方法,请给我任何其他选择。

最佳答案

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

enter image description here

图像是 0x1C2 × 0x1C2 像素 (450x450)。

关于c++ - 从 JFIF/EXIF (JPEG) header 获取实际图像分辨率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14414884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com