Получить фактическое разрешение изображения из заголовка JFIF / EXIF ​​(JPEG)?

Я создал структуру 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;

Чтение из сырых дисковых кластеров и копирование этих байтов в JFIFHeader Структура сделала, и все работает отлично.
Теперь проблема в том, что значения сохранены в XDensity а также YDensity переменные очень высоки (X:24576,Y:24576 Я читаю изображение в Hex-редакторе). Это значение не может быть фактической шириной и высотой изображения.
Значение Units является 0x01 в единицах «пиксели на дюйм».

Как я могу получить фактическое разрешение изображения 1024x826 из этих значений?
Если это не правильный метод, пожалуйста, дайте мне другую альтернативу.

4

Решение

Вы можете найти JPEG SOF0 маркер (0xC0), за ним следует 16-битная длина, а затем биты на пиксель (8 бит), высота (16 бит), ширина (16 бит) и число компонентов (8 бит). Все значения являются порядком байтов в сети.

введите описание изображения здесь

Изображение 0x1C2 от 0x1C2 пикселей (450х450).

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]