Мне нужно найти размер изображения JPEG (JFIF). Изображение не сохраняется как отдельный файл, поэтому я не могу использовать GetFileSize
или какой-либо другой API, например этот (изображение помещается в поток, и никакой другой заголовок отсутствует, кроме обычного заголовка JPEG / JFIF (ы)).
Я провел некоторое исследование и обнаружил, что изображения JPEG состоят из разных частей, каждая часть начинается с маркера кадра (0xFF 0xXX
) и размера этого кадра. Используя эту информацию, я смог разобрать много информации из файла.
Проблема в том, что я не могу найти размер сжатых данных, так как кажется, что для сжатых данных нет маркера кадра. Кроме того, кажется, что сжатые данные следуют за маркером SOS (FFDA
), а изображение заканчивается маркером Конец изображения (EOI) (FFD9
).
Одним из способов достижения этой цели является поиск маркера EOI от байта к байту, но я думаю, что сжатые данные могут содержать эту комбинацию байтов, верно?
Существует ли простой и правильный способ определения общего размера изображения? (Я бы предпочел некоторый код / идею без какой-либо внешней библиотеки )
В основном мне нужно расстояние (в байтах) между началом изображения (SOI- FFE0
) и концом изображения (EOI- FFD9
).