Поделиться через


Обзор кодека JPEG XR

Собственный кодек JPEG XR доступен через компонент образов Windows (WIC). Формат JPEG XR, поддерживаемый кодеком, предназначен для потребительских и профессиональных цифровых фотографий.

Формат JPEG XR может в два раза повысить эффективность сжатия исходного формата JPEG с менее заметными артефактами сжатия. К функциям JPEG XR относятся:

  • Поддержка монохромных, RGB, CMYK и n-каналов изображений
  • 8-, 16- и 32-разрядные целочисленные форматы
  • Высокий динамический диапазон, форматы широкой гаммы с использованием значений цвета с фиксированной или плавающей запятой
  • Прогрессивное декодирование
  • Кодировка с потерями или без потерь с использованием одного и того же алгоритма сжатия
  • Поддержка декодирования интересующих областей в больших изображениях

Формат JPEG XR определен в следующих документах по стандартам:

  • ITU-T T.832: Информационные технологии — система кодирования изображений JPEG XR — спецификация кодирования изображений
  • ISO/IEC 29199-2:2010: Информационные технологии — система кодирования изображений JPEG XR — часть 2. Спецификация кодирования изображений

Стандарт JPEG XR в значительной степени основан на формате HD Photo , но есть некоторые различия между этими двумя форматами. В Windows 8 кодек HD Photo был обновлен для поддержки JPEG XR. Кодировщик теперь всегда выводит поток битов, совместимый с JPEG XR. Декодер может декодировать изображения JPEG XR и HD Photo.

В кодек JPEG XR были внесены значительные улучшения производительности по сравнению с кодеком HD Photo. Например, улучшено декодирование изображений с вложенным разрешением, например создание эскизов, а также декодирование изображений с низким разрешением. Рекомендуется использовать формат JPEG XR вместо формата HD Photo.

Сведения о кодека

Компонент Описание
Расширение имени файла "jxr" и "wdp"
GUID контейнера GUID_ContainerFormatWmp
Guid декодера CLSID_WICWmpDecoder
GUID кодировщика CLSID_WICWmpEncoder
Поддержка профилей Кодировщик и декодер поддерживают до основного профиля и до уровня 128.

 

Функции кодека

Высокий динамический диапазон

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

  • Фиксированная точка. В представлении с фиксированной точкой 0 представляет черный цвет, а 1,0 — максимальную насыщенность. Кодек JPEG XR поддерживает как 16-разрядные, так и 32-разрядные форматы с фиксированной запятой. Для 16-разрядных 1,0 = 0x2000h, что дает 13 бит для видимого диапазона [0...1]. Общий диапазон составляет от –4,0 до +3,999 и сопоставляется линейно. Для 32-разрядной версии 1,0 = 0x0100000h видимый диапазон составляет 24 бита, а общий диапазон — от –128 до +127,999.
  • С плавающей запятой: в представлении с плавающей запятой 0 представляет черный цвет, а 1,0 — максимальную насыщенность. Кодек JPEG XR поддерживает как 16-разрядный, так и 32-разрядный форматы с плавающей запятой.

Tiles

Кадр можно разделить на прямоугольные подразделы, называемые плитками. Плитка — это область изображения, содержащая прямоугольные массивы макроблоков. Плитки позволяют декодировать области изображения без обработки всего изображения.

Во время кодирования выберите количество плиток, задав свойства HorizontalTileSlices и VerticalTileSlices . Минимальный размер плитки составляет 16 × 16 пикселей. Кодировщик корректирует количество плиток, чтобы сохранить это ограничение. С каждой плиткой связаны затраты на хранение и обработку, поэтому следует учитывать количество плиток, необходимых для конкретных сценариев.

Выходные данные потока изображений

Стандарт JPEG-XR определяет две части файла JPEG-XR:

  • Поток битов изображения, определенный в теле стандарта.
  • Контейнер образа. Файл содержит метаданные Exif и XMP и определяется в приложении A стандарта.

Стандарт позволяет внедрить поток изображений в другой тип контейнера файлов. Кодировщик поддерживает режим только потока, который выводит необработанный поток битового изображения без контейнера образа. Приложение может хранить битовый поток в другом формате контейнера.

Чтобы включить режим только для потоковой передачи, задайте свойство StreamOnly .

Параметры качества изображения

Несколько свойств кодека управляют качеством выходного изображения из кодировщика.

  • ImageQuality — это свойство, общее в кодеках WIC. Он задает качество изображения в виде одного значения с плавающей запятой в диапазоне от 0,0 до 1,0.
  • Свойства Quality, Overlap и Subsampling обеспечивают больший контроль над параметрами качества.

Чтобы использовать свойства Quality, Overlap и Subsampling , задайте для свойства UseCodecOptionsзначение VARIANT_TRUE.

Если параметр UseCodecOptions имеет значение VARIANT_FALSE (VARIANT_FALSE используется по умолчанию), кодировщик использует свойство ImageQuality . Кодировщик сопоставляет значение ImageQuality с quality, overlap и Subsampling через таблицу подстановки.

Кодировщик не поддерживает свойство CompressionQuality .

Перекодирование сжатого домена

Кодек JPEG XR может выполнять определенные преобразования изображений без фактического декодирования сжатых данных и их повторного кодирования. Операции со сжатыми доменами очень эффективны и позволяют избежать дополнительной потери качества, которая характерна при декодировании и повторном кодировании изображения со сжатием с потерями.

Поддерживаются следующие операции сжатого домена:

  • Обрезка области изображения.
  • Поворачивайте или переворачивайте изображение.
  • Отмена данных частоты для создания файла изображения меньшего размера.
  • Реорганизуйте изображение между пространственным и частотным порядком.

Кодировщик JPEG XR использует сжатое перекодирование домена, если это возможно, если исходное изображение является изображением JPEG XR. Когда кодировщик выполняет операцию сжатого домена, он игнорирует следующие свойства кодека: AlphaQuality, ImageQuality, InterleavedAlpha, Перекрытие без потерь и Качество. Если имеются свойства HorizontalTileSlices и VerticalTileSlices , необходимо задать для них нулевое значение. Размер плитки изображения нельзя изменить в рамках перекода сжатого домена.

В следующем списке описано, как выполнять преобразования изображений.

  • Чтобы обрезать изображение, задайте нужную область в параметре WICRect метода WriteSource .
  • Чтобы повернуть или отразить изображение, задайте свойство BitmapTransform .
  • Чтобы отменить данные частоты в изображении, задайте свойство ImageDataDiscard . Чтобы отменить данные частоты в альфа-канале, задайте свойство AlphaDataDiscard . Отмена частоты данных уменьшает размер закодированного файла и может уменьшить разрешение.
  • Чтобы изменить организацию изображений между частотой и пространственным упорядочением, задайте свойство FrequencyOrdering .

Чтобы отключить сжатое перекодирование домена и принудить кодировщик повторно закодировать изображение, задайте параметру UseCodecOptionsзначение VARIANT_TRUE и задайте для свойства CompressedDomainTranscodeзначение VARIANT_FALSE.

Параметры кодировщика

Чтобы задать свойства кодирования, используйте интерфейс IPropertyBag2 . Дополнительные сведения см. в разделе Общие сведения о кодировке.

В следующем списке указаны параметры кодировщика.

AlphaDataDiscard

Задает количество альфа-данных частоты, отбрасываемых во время перекодировки сжатого домена.

Тип данных VARTYPE Диапазон По умолчанию
UCHAR VT_UI1 0–4 Нет

 

Это свойство применяется только в том случае, если свойству CompressedDomainTranscode присвоено значение VARIANT_TRUE и изображение содержит либо планарный альфа-канал, либо канал с чередованием альфа-канала; в противном случае он игнорируется.

Для изображений, содержащих планарный альфа-канал, допустимы следующие значения.

Значение Описание
0 Данные частоты изображения не удаляются.
1 Гибкие биты отклоняются. Это произвольно снижает качество планарного альфа-канала для перекодированного изображения. , без изменения в действующем разрешении. Точное уменьшение размера и качества файла зависит от множества факторов и не может быть точно указано.
2 Диапазон данных высокой частоты отклоняется, включая гибкие. Это эффективно уменьшает разрешение планарного альфа-канала в 4 раз в обоих измерениях. Фактические размеры перекодированного изображения остаются прежними, но изображение теряет все детали в каждом блоке 4x4 пикселей альфа-канала. Как правило, это значение следует задавать только в том случае, если свойство ImageDataDiscard имеет то же значение.
3 Полосы данных высокой и низкой частоты отбрасываются, включая гибкие. Это уменьшает разрешение планарного альфа-канала в 16 раз в обоих измерениях. Фактические размеры перекодированного изображения остаются прежними, но изображение теряет все детали в каждом макроблоке 16x16 пикселей альфа-канала. Как правило, это значение следует задавать только в том случае, если свойство ImageDataDiscard имеет то же значение.
4 Полностью удаляется альфа-канал. Формат пикселей перекодированного изображения изменяется в соответствии с удалением альфа-канала.

 

Для изображений, содержащих канал альфа-с чередованием, допустимо следующее значение.

Значение Описание
4 Полностью удаляется альфа-канал. Формат пикселей перекодированного изображения изменяется в соответствии с удалением альфа-канала.

 

Если для этого свойства не задано значение 4, альфа-канал обрабатывается так же, как и данные изображения, в соответствии со значением свойства ImageDataDiscard .

AlphaQuality

Задает качество сжатия для плоского изображения альфа-канала.

Тип данных VARTYPE Диапазон Значение по умолчанию
UCHAR VT_UI1 1–255 1

 

Это свойство применяется, если изображение имеет альфа-канал и свойство InterleavedAlphaVARIANT_FALSE. Значение 1 указывает режим без потерь. Увеличение значений приводит к более высокому коэффициенту сжатия и снижению качества изображения.

BitmapTransform

Указывает, будет ли изображение поворачивается или перевернуто при декодировании.

Тип данных VARTYPE Диапазон По умолчанию
UCHAR VT_UI1 WICBitmapTransformOptions WICBitmapTransformRotate0

 

CompressedDomainTranscode

Включает или отключает перекодирование сжатого домена.

Тип данных VARTYPE По умолчанию
VARIANT_BOOL VT_BOOL VARIANT_TRUE

 

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

FrequencyOrder

Включает кодирование в порядке частоты. Устройства реализации кодировщиков JPEG XR могут упорядочить файл в пространственном порядке, чтобы уменьшить объем памяти, необходимый во время кодирования.

Тип данных VARTYPE По умолчанию
VARIANT_BOOL VT_BOOL VARIANT_TRUE

 

  • VARIANT_TRUE: порядок частоты. Данные с наименьшей частотой отображаются сначала в файле, а содержимое изображения группируется по частоте, а не по пространственной ориентации. Упорядочение файла по частоте обеспечивает наилучшую производительность при декодировании на основе частоты.
  • VARIANT_FALSE: пространственный порядок. Пространственный порядок сокращает объем памяти, необходимый во время кодирования

Порядок частоты рекомендуется, если у вас нет причин производительности или приложений для использования пространственного порядка.

HorizontalTileSlices

Задает количество горизонтальных плиток.

Тип данных VARTYPE Диапазон По умолчанию
USHORT VT_UI2 0–4095 (ширина изображения – 1) >> 8

 

Значением является число горизонтальных подразделений; то есть количество горизонтальных плиток — 1.

IgnoreOverlap

Указывает, как кодировщик обрабатывает границы плиток во время перекодировки сжатого домена.

Тип данных VARTYPE Значение по умолчанию
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

Это свойство применяется только в том случае, если свойству CompressedDomainTranscode присвоено значение VARIANT_TRUE и выполняется перекодирование подрегионов из одной или нескольких плиток.

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

ImageDataDiscard

Задает объем данных о частоте изображений, отбрасываемых во время перекодировки сжатого домена.

Тип данных VARTYPE Диапазон По умолчанию
UCHAR VT_UI1 0–3 0

 

Это свойство применяется только в том случае, если свойству CompressedDomainTranscode присвоено значение VARIANT_TRUE; в противном случае он игнорируется.

Значение Описание
0 Данные частоты изображения не удаляются.
1 Гибкие биты отклоняются. Это произвольно снижает качество перекодированного изображения без изменения эффективного разрешения изображения. Точное уменьшение размера и качества файла зависит от множества факторов и не может быть точно указано. Это значение возвращает ошибку, указанную для канала с чередованием альфа-канала.
2 Диапазон данных высокой частоты отклоняется, включая гибкие. Это уменьшает разрешение перекодированного изображения в 4 раз в обоих измерениях. Фактические размеры перекодированного изображения остаются прежними, но изображение теряет все детали в каждом блоке 4x4 пикселей. Таким образом, перекодированное изображение должно быть соответствующим образом понижено при декодировании.
3 Полосы данных высокой и низкой частоты отбрасываются, включая гибкие. Это уменьшает разрешение перекодированного изображения в 16 раз в обоих измерениях. Фактические размеры перекодированного изображения остаются прежними, но изображение теряет все детали в каждом макроблоке 16x16 пикселей. Таким образом, перекодированное изображение должно быть соответствующим образом понижено при декодировании.

 

Если изображение содержит альфа-канал с чередованием, значение ImageDataDiscard применяется к альфа-каналу, если только для свойства AlphaDataDiscard не задано значение 4, и в этом случае альфа-канал отклоняется.

Для планарных альфа-данных частота, отбрасываемая, управляется свойством AlphaDataDiscard .

ImageQuality

Задает качество изображения.

Тип данных VARTYPE Диапазон Значение по умолчанию
FLOAT VT_R4 0–1.0 0,9

 

Уровень 1.0 обеспечивает математическое сжатие без потерь.

Уровень 0.0 — это самый низкий уровень качества.

InterleavedAlpha

Указывает, следует ли кодировать чередование альфа-или плоского альфа-канала.

Тип данных VARTYPE Значение по умолчанию
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

  • VARIANT_TRUE: чередующиеся альфа-каналы. Сведения о альфа-канале кодируются как дополнительный канал с чередованием без корреляции с каналами содержимого изображений. Этот режим полезен для декодирования альфа-канала одновременно с изображением при потоковой передаче изображения.
  • VARIANT_FALSE: Planar alpha. Планарный альфа-канал кодируется как отдельное изображение. Данные изображения и альфа-канал декодируются независимо. При необходимости можно задать уровень качества альфа-канала, задав свойство AlphaQuality .

Чередование альфа-канала поддерживается только для определенных форматов пикселей RGB. Planar alpha поддерживается для любого формата изображения, определяющего альфа-канал.

Lossless

Включает сжатие потерь.

Тип данных VARTYPE Значение по умолчанию
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

Если значение равно VARIANT_TRUE, кодировщик использует сжатие без потерь. Если задано значение VARIANT_TRUE, это свойство переопределяет свойство ImageQuality .

Перекрытие

Задает уровень фильтрации перекрытия. При фильтрации перекрытия коэффициенты преобразования применяются к границам блоков и макроблоков. Это может уменьшить количество блокирующих артефактов.

Тип данных VARTYPE Диапазон По умолчанию
UCHAR VT_UI1 0–4 1

 

Значение Описание
0 Нет перекрытия.
1 Один уровень перекрытия, мягкая плитка. (по умолчанию).
2 Два уровня перекрытия, мягкая плитка.
3 Один уровень перекрытия, жесткая плитка
4 Два уровня перекрытия, жесткая плитка.

 

Определения:

  • Один уровень перекрытия. Закодированные значения блоков 4x4 изменяются на основе соседних блоков.
  • Два уровня перекрытия. Применяется первый уровень перекрытия. Кроме того, закодированные значения макроблоков 16x16 изменяются на основе соседних макроблоков.
  • Мягкая плитка. Фильтрация перекрытия применяется через границы плитки.
  • Жесткая плитка. Фильтрация перекрытия не применяется через границы плитки. Жесткие плитки могут представлять некоторые визуальные артефакты вдоль границ плиток.

Если вы задали это свойство, присвойте параметру UseCodecOptionsзначение VARIANT_TRUE.

ProgressiveMode

Включает или отключает прогрессивное кодирование.

Тип данных VARTYPE Значение по умолчанию
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

Значение Описание
VARIANT_TRUE Последовательный режим (по умолчанию).
VARIANT_FALSE Прогрессивный режим.

 

Качество

Задает качество сжатия.

Тип данных VARTYPE Диапазон По умолчанию
UCHAR VT_UI1 1–255 1

 

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

Если вы задали это свойство, присвойте параметру UseCodecOptionsзначение VARIANT_TRUE.

StreamOnly

Включает или отключает режим только потока.

Тип данных VARTYPE По умолчанию
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

Значение Описание
VARIANT_TRUE Кодировщик выводит поток необработанного изображения без метаданных.
VARIANT_FALSE Кодировщик выводит формат контейнера (поток изображения и метаданные).

 

Подсэмплинг

Задает подсхемку хрома. Это свойство применяется только к изображениям RGB.

Тип данных VARTYPE Диапазон По умолчанию
UCHAR VT_UI1 0–3 3, если ImageQuality> 0.8; в противном случае — 1

 

Значение Описание
3 Кодировка 4:4:4. Сохраняет полное разрешение хрома.
2 Кодирование 4:2:2. Разрешение хрома составляет 1/2 от разрешения яркости.
1 Кодировка 4:2:0. Разрешение хрома составляет 1/4 от разрешения яркости.
0 Кодирование 4:0:0. Отменяет все значения хрома и сохраняет только яркость. Примечание: Этот режим не рекомендуется, так как кодек использует немного измененное определение яркости для повышения производительности. Вместо этого лучше преобразовать изображение в монохромное перед кодировкой.

 

4:2:2 и 4:2:0 сохраняют сведения о яркости за счет детализации цвета.

Если вы задали это свойство, присвойте параметру UseCodecOptionsзначение VARIANT_TRUE.

UseCodecOptions

Указывает, следует ли использовать свойства Quality, Overlap и Subsampling вместо универсального свойства ImageQuality .

Тип данных VARTYPE Значение по умолчанию
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

VerticalTileSlices

Задает количество горизонтальных плиток.

Тип данных VARTYPE Диапазон По умолчанию
USHORT VT_UI2 0–4095 (высота изображения — 1) >> 8

 

Значением является число вертикальных подразделений; то есть количество вертикальных плиток — 1.

Поддерживаемые форматы цветов

Дополнительные сведения об этих форматах см. в разделе Собственные форматы пикселей.

  • Целочисленные форматы RGB
    • GUID_WICPixelFormat24bppRGB
    • GUID_WICPixelFormat24bppBGR
    • GUID_WICPixelFormat32bppBGR
    • GUID_WICPixelFormat48bppRGB
    • GUID_WICPixelFormat32bppBGRA
    • GUID_WICPixelFormat64bppRGBA
    • GUID_WICPixelFormat32bppPBGRA
    • GUID_WICPixelFormat64bppPRGBA
  • Форматы RGB с фиксированной запятой
    • GUID_WICPixelFormat48bppRGBFixedPoint
    • GUID_WICPixelFormat64bppRGBFixedPoint
    • GUID_WICPixelFormat96bppRGBFixedPoint
    • GUID_WICPixelFormat128bppRGBFixedPoint
    • GUID_WICPixelFormat128bppRGBAFixedPoint
  • Форматы RGB с плавающей запятой
    • GUID_WICPixelFormat48bppRGBHalf
    • GUID_WICPixelFormat64bppRGBHalf
    • GUID_WICPixelFormat128bppRGBFloat
    • GUID_WICPixelFormat64bppRGBAFixedPoint
    • GUID_WICPixelFormat64bppRGBAHalf
    • GUID_WICPixelFormat128bppRGBAFloat
    • GUID_WICPixelFormat128bppPRGBAFloat
  • Форматы оттенков серого
    • GUID_WICPixelFormat8bppGray
    • GUID_WICPixelFormat16bppGray
    • GUID_WICPixelFormat16bppGrayFixedPoint
    • GUID_WICPixelFormat16bppGrayHalf
    • GUID_WICPixelFormat32bppGrayFixedPoint
    • GUID_WICPixelFormat32bppGrayFloat
  • Упакованные форматы
    • GUID_WICPixelFormat16bppBGR555
    • GUID_WICPixelFormat16bppBGR565
    • GUID_WICPixelFormat32bppBGR101010
    • GUID_WICPixelFormat32bppRGBE
  • Форматы CMYK
    • GUID_WICPixelFormat40bppCMYKAlpha
    • GUID_WICPixelFormat64bppCMYK
    • GUID_WICPixelFormat80bppCMYKAlpha
  • N-канальные форматы
    • GUID_WICPixelFormat32bpp4Channels
    • GUID_WICPixelFormat40bpp5Channels
    • GUID_WICPixelFormat48bpp6Channels
    • GUID_WICPixelFormat56bpp7Channels
    • GUID_WICPixelFormat64bpp8Channels
    • GUID_WICPixelFormat32bpp3ChannelsAlpha
    • GUID_WICPixelFormat40bpp4ChannelsAlpha
    • GUID_WICPixelFormat48bpp5ChannelsAlpha
    • GUID_WICPixelFormat56bpp6ChannelsAlpha
    • GUID_WICPixelFormat64bpp7ChannelsAlpha
    • GUID_WICPixelFormat72bpp8ChannelsAlpha
    • GUID_WICPixelFormat48bpp3Channels
    • GUID_WICPixelFormat64bpp4Channels
    • GUID_WICPixelFormat80bpp5Channels
    • GUID_WICPixelFormat96bpp6Channels
    • GUID_WICPixelFormat128bpp8Channels
    • GUID_WICPixelFormat64bpp3ChannelsAlpha
    • GUID_WICPixelFormat80bpp4ChannelsAlpha
    • GUID_WICPixelFormat96bpp5ChannelsAlpha
    • GUID_WICPixelFormat112bpp6ChannelsAlpha
    • GUID_WICPixelFormat128bpp7ChannelsAlpha
    • GUID_WICPixelFormat144bpp8ChannelsAlpha