У меня есть файл, содержащий несколько jpg-изображений. Я хочу читать их один за другим в буферах, чтобы их декодировать отдельно. Я не знаю, есть ли другая информация, сохраненная в файле, отличном от заголовков изображений и данных изображения.
Изображение jpg начинается с байта SOI и заканчивается байтом EOI. Могу ли я предположить, что эти байты появляются только в начале и в конце изображения? Затем я попытался бы прочитать символы без знака в буфер и только проверить, нашел ли я СОИ или EOI.
Будет ли это работать? (Тем не менее на этапе планирования, поэтому кода еще нет... будет в c или c++, хотя)
Маркеры на самом деле два октета, 0xFF плюс фактический код маркера. SOI - 0xFF, 0xD8 и EOI - 0xFF, 0xD9. Кроме того, в стандарте указано, когда вы кодируете данные изображения, если вы кодируете октет 0xFF (т.е. Это не маркер), тогда вам нужно следовать ему с помощью 0x00, чтобы декодеры/сканеры не считали его маркером (это так называемая байтовая начинка). Во всяком случае, учитывая это, вы должны хорошо сканировать маркеры SOI и EOI.
Изменить: вы можете найти изображения с встроенными миниатюрами... в этом случае вам может потребоваться подсчет маркеров... например, 0xFF, 0xD8,... 0xFF, 0xD8,... 0xFF, D9... 0xFF, D9 будет одним изображением со встроенным эскизом.