#jpeg
#jpeg
Вопрос:
Я работаю с C # и веб-камерой usb, которая поддерживает форматы изображений YUY2 или MJPG. До сих пор у меня всегда была камера в режиме YUY2, и это работает нормально. Недавно я попытался изменить формат на MJPG, думая, что тогда он будет передавать моей программе по одному изображению в формате JPEG на каждый кадр захвата. Кажется, что это почти удается. Когда я пытаюсь отобразить буфер, мое приложение всегда выдает исключение, которое является неопределенным, но, похоже, указывает на то, что поток недействителен. Затем я скопировал один из буферов в файл и попытался просмотреть его с помощью IrfanView, и он сообщает мне, что таблицы Хаффмана нет. Просматривая буфер с помощью двоичного редактора, я вижу, что в нем есть маркеры SOI и EOF JPEG (и несколько других); однако он не содержит маркера таблицы Хаффмана. Есть идеи, что я здесь делаю не так? Я немного читал о JPEG, и, по-видимому, бывают случаи, когда изображения могут использовать стандартную таблицу Хаффмана для уменьшения размера файла; однако, если это так, как мне вставить это в изображение (при необходимости)? Кстати, это относится к Microsoft Lifecam.
Ответ №1:
Частью стандарта Motion-JPEG для файлов AVI является то, что будет использоваться фиксированная таблица Хаффмана, чтобы ее не нужно было сохранять в каждом кадре.
Комментарии:
1. Извините за поздний ответ; по-видимому, я забыл проверить «уведомлять меня ответами». :-(Тогда должен быть способ вставить эту таблицу хаффмана по умолчанию в изображение JPEG, чтобы я мог правильно просмотреть это изображение?
2. Да, вы можете вставить таблицу Хаффмана в поток данных MJPEG. Все маркеры JPEG являются подвижными и не используют абсолютные смещения в файле.
3. Эти фиксированные значения HT приведены в mmreg.h .