2014-09-02 2 views
0

У меня есть файл, который содержит несколько jpg-изображений. Я хочу читать их один за другим в буферах, чтобы их декодировать отдельно. Я не знаю, есть ли другая информация, сохраненная в файле, отличном от заголовков изображений и данных изображения.чтение нескольких изображений jpg из одного файла

Изображение jpg начинается с байта SOI и заканчивается байтом EOI. Могу ли я предположить, что эти байты появляются только в начале и в конце изображения? Тогда я попытался бы прочитать символы без знака в буфер и только проверить, нашел ли я СОИ или EOI.

Будет ли это работать? (все еще на этапе планирования, поэтому кода еще нет ... будет в c или C++, хотя)

ответ

3

Маркеры на самом деле два октета, 0xFF плюс фактический код маркера. SOI - 0xFF, 0xD8 и EOI - 0xFF, 0xD9. Кроме того, в стандарте указано, когда вы кодируете данные изображения, если вы кодируете октет 0xFF (т. Е. Это не маркер), тогда вам нужно следовать ему с помощью 0x00, чтобы декодеры/сканеры не думали, что это маркер (это так называемая байтовая начинка). Во всяком случае, учитывая это, вы должны хорошо сканировать маркеры SOI и EOI.

Редактировать: Вы можете найти изображения с встроенными эскизами ... в этом случае вам может потребоваться подсчет маркеров ... например. 0xFF, 0xD8, ... 0xFF, 0xD8, ... 0xFF, D9 ... 0xFF, D9 - это одно изображение со встроенным эскизом.

+0

Вы случайно знаете, может ли я проверить (c == 0xFF), если c является символом unsigned? –

+0

Да, это было бы хорошо. – mark

+0

Большое спасибо! –

Смежные вопросы