Какое значение имеет порядок байтов JPEG при кодировании?

Сейчас я работаю над большим проектом, который связан с изображениями. Одна из больших проблем, с которыми я сталкиваюсь, связана с порядком байтов изображения (jpeg для ясности). Я всегда думал, что в нашем современном мире нам не нужно беспокоиться об этом, но теперь я не уверен.

Что я делаю:

  1. Я делаю HTTP-запрос к IP-камере, камера возвращается мне массив байтов.
  2. Я анализирую эти байты в объект Image в .NET с помощью Image.FromStream.
  3. Я беру свой объект Image и выполняю сохранение в физический файл на жестком диске.

Эти изображение затем используется в другом модуле моего приложения, который использует стороннюю программу просмотра, которая выполняет некоторые манипуляции с изображением. Программа просмотра работает со всеми изображениями, созданными с помощью компьютера в Windows XP и Windows Vista. Но когда изображение создается на машине с Windows 7, все изображения искажаются.

Допустим, изображение, созданное в Windows XP, будет называться PictureXP, а изображение, созданное в Windows 7, будет называться Picture7. Я проверил файлы с помощью exiftools и обнаружил, что есть 2 поля, которые различаются между PictureXP и Picture7.

PictureXP: Порядок байтов Exif: Little-endian Picture7: Порядок байтов Exif: с прямым порядком байтов Изображение 7 также имеет дополнительное поле: Комментарий пользователя:.

Два изображения можно нормально открывать в любом средстве просмотра фотографий, только в этом стороннем средстве просмотра изображения отображаются смешанными, и единственная разница между тремя изображениями заключается в эти поля.

Что я хочу знать:

  1. Возможно ли, что третья сторона должна добавить дополнительный код в свое программное обеспечение, чтобы иметь дело с порядком байтов изображения? Думаю, с этим справляются все программы обработки изображений?
  2. Могу ли я изменить порядок байтов в моем jpeg так, чтобы он всегда был прямым порядком байтов? Я где-то читал, что содержимое файла jpeg всегда должно быть с одинаковым порядком байтов, но кажется, что он не учитывает данные exif. Если возможно, мне бы хотелось найти решение в .NET ...
  3. Все, что может помочь в этой ситуации, также будет рассматриваться как ответ.

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

РЕДАКТИРОВАТЬ 1 : Я нашел эту статью , подтверждающую, что порядок байтов, найденный в заголовке exif, применим только к заголовку exif и что файл jpeg всегда имеет прямой порядок байтов. Так есть ли способ изменить заголовок exif, чтобы сторонняя программа могла читать то, что ему нужно?

9
задан Jean-François Côté 24 August 2011 в 15:23
поделиться