Обзор кодека 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.
Значительные улучшения производительности в связи с кодеком HD Photo были внесены в кодек JPEG XR. Например, декодирование изображений под разрешением, например создание эскизов, было улучшено, а также декодирование изображений с низким разрешением. Рекомендуется использовать формат JPEG XR вместо формата ФОТОГРАФИИ HD.
Сведения о кодеке
Компонент | Описание |
---|---|
Расширение имени файла | "jxr" и "wdp" |
GUID контейнера | GUID_ContainerFormatWmp |
GUID декодировщика | CLSID_WICWmpDecoder |
GUID для кодировщика | CLSID_WICWmpEncoder |
Поддержка профилей | Кодировщик и декодировщик поддерживают основной профиль (Main Profile) и до уровня 128. |
Функции Codec
Высокий динамический диапазон
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-разрядные форматы с плавающей запятой.
Плитки
Кадр может быть разделён на прямоугольные подрегионы, называемые плитками. Плитка — это область изображения, содержащего прямоугольные массивы макроблоков. Плитки позволяют декодировать области изображения без обработки всего изображения.
Во время кодирования выберите количество плиток, задав свойства HorizontalTileSlices и VerticalTileSlices. Минимальный размер плитки составляет 16 × 16 пикселей. Кодировщик настраивает количество плиток для поддержания этого ограничения. Существуют ресурсы хранения и обработки, связанные с каждой плиткой, поэтому следует учитывать количество плиток, необходимых для определенных сценариев.
Выходные данные потока изображений
Стандарт JPEG-XR определяет две части файла JPEG-XR:
- Битовый поток изображения, определенный в тексте стандарта.
- Контейнер изображения. Файл содержит метаданные Exif и XMP и определяется в приложении A стандарта.
Это возможно, и разрешено стандартом, чтобы внедрить поток изображений в другой тип контейнера файлов. Кодировщик поддерживает режим только потока, который выводит необработанный битовый поток изображения без контейнера образа. Приложение может хранить битовый поток в другом формате контейнера.
Чтобы включить режим только потоков, задайте свойство StreamOnly.
Параметры качества изображения
Несколько свойств кодека управляют качеством выходного изображения из кодировщика.
- ImageQuality является свойством, общим для кодеков WIC. Он задает качество изображения как одно значение с плавающей запятой от 0,0 до 1.0,
- Свойства "Качество", "Перекрытие"и "Дискретизация" обеспечивают больше контроля над настройками качества.
Чтобы использовать свойства Quality, Overlapи Subsampling, задайте для свойства UseCodecOptions значение VARIANT_TRUE.
Если UseCodecOptions имеет значение VARIANT_FALSE (VARIANT_FALSE является значением по умолчанию), то кодировщик использует свойство ImageQuality. Кодировщик сопоставляет значение ImageQuality с качеством, перекрытиеми субдискретизацией через таблицу подстановки.
Кодировщик не поддерживает свойство CompressionQuality.
Сжатый транскод домена
Кодек JPEG XR может выполнять определенные преобразования изображений, не декодируя сжатые данные и повторно кодируя их. Операции в сжатом домене очень эффективны и позволяют избежать дополнительной потери качества, которая обычно происходит при декодировании и повторном кодировании изображения с потерей.
Поддерживаются следующие сжатые операции домена:
- Обрежьте область изображения.
- Поворот или переворачивание изображения.
- Отбросьте данные частоты для создания меньшего по размеру файла изображения.
- Перестройте изображение между пространственным и частотным порядком.
Кодировщик JPEG XR использует перекодирование сжатых доменов, если это возможно, когда исходный образ — это изображение JPEG XR. Когда кодировщик выполняет операцию в сжатом домене, он игнорирует следующие свойства кодека: AlphaQuality, ImageQuality, InterleavedAlpha, Lossless,Перекрытиеи Качество. Если свойства HorizontalTileSlices и VerticalTileSlices присутствуют, необходимо установить их значение на ноль. Невозможно изменить размер плитки изображения в составе сжатого транскода домена.
В следующем списке описывается, как выполнять преобразования изображений.
- Чтобы обрезать изображение, задайте нужный регион в параметре WICRect метода WriteSource.
- Чтобы повернуть или перевернуть изображение, задайте свойство BitmapTransform.
- Чтобы удалить данные частот на изображении, задайте свойство ImageDataDiscard. Чтобы отменить данные частоты в альфа-канале, задайте свойство AlphaDataDiscard. Исключение данных о частотах уменьшает размер закодированного файла и может снизить разрешение.
- Чтобы изменить организацию изображений между частотой и пространственным упорядочением, задайте свойство FrequencyOrdering.
Чтобы отключить транскодирование в сжатом домене и принудительно перекодировать изображение, установите для UseCodecOptions значение VARIANT_TRUE и для CompressedDomainTranscode значение VARIANT_FALSE.
Параметры кодировщика
Чтобы задать свойства кодирования, используйте интерфейс IPropertyBag2. Дополнительные сведения см. в общем обзоре кодирования.
В следующем списке указаны параметры кодировщика.
- AlphaDataDiscard
- АльфаКачество
- BitmapTransform
- сжатойdomainTranscode
- ЧастотаПорядок
- HorizontalTileSlices
- IgnoreOverlap
- УдалениеДанныхИзображения
- КачествоИзображения
- InterleavedAlpha
- без потерь
- перекрытие
- ProgressiveMode
- качество
- StreamOnly
- Субдискретизация
- ИспользоватьПараметрыКодека
- VerticalTileSlices
AlphaDataDiscard
Задает количество альфа-данных, которые нужно отбросить в процессе транскодирования в сжатом домене.
Тип данных | VARTYPE | Диапазон | По умолчанию |
---|---|---|---|
UCHAR | VT_UI1 | 0–4 | Никакой |
Это свойство применяется только в том случае, если свойство CompressedDomainTranscode имеет значение VARIANT_TRUE, а изображение содержит планарный альфа-канал или перерезанный альфа-канал; в противном случае он игнорируется.
Для изображений, содержащих планарный альфа-канал, допустимы следующие значения.
Ценность | Описание |
---|---|
0 | Данные частоты изображения не удаляются. |
1 | Гибкие биты удаляются. Это произвольно снижает качество планарного альфа-канала для транскодированного изображения. без изменения в эффективном разрешении. Точное уменьшение размера файла и качества зависит от многочисленных факторов и не может быть точно указано. |
2 | Диапазон данных высокочастотного фильтра убирается, включая flexbits. Это эффективно снижает разрешение планарного альфа-канала на 4 в обоих измерениях. Фактические размеры перекодированного изображения остаются одинаковыми, но изображение теряет все детали в каждом блоке 4x4 пикселей альфа-канала. Как правило, это значение следует задать только в том случае, если свойство ImageDataDiscard имеет то же значение. |
3 | Диапазоны данных высоких и низких частот удаляются, включая флекси-биты. Это эффективно уменьшает разрешение планарного альфа-канала в 16 раз в обоих измерениях. Фактические размеры транскодированного изображения остаются неизменными, но изображение теряет все детали в каждом макроблоке 16x16 пикселей альфа-канала. Как правило, это значение следует задать только в том случае, если свойство ImageDataDiscard имеет то же значение. |
4 | Альфа-канал полностью отбрасывается. Формат пикселя транскодированного изображения изменяется на отражение удаления альфа-канала. |
Для изображений, содержащих перемеченный альфа-канал, допустимо следующее значение.
Ценность | Описание |
---|---|
4 | Альфа-канал полностью отбрасывается. Формат пикселя транскодированного изображения изменяется на отражение удаления альфа-канала. |
Для чередующегося альфа-канала, если это свойство не установлено на 4, альфа-канал обрабатывается так же, как данные изображения, в соответствии со значением свойства ImageDataDiscard.
AlphaQuality
Задает качество сжатия для образа планарного альфа-канала.
Тип данных | VARTYPE | Диапазон | По умолчанию |
---|---|---|---|
UCHAR | VT_UI1 | 1–255 | 1 |
Это свойство применяется, когда изображение имеет альфа-канал и свойство InterleavedAlpha устанавливается в VARIANT_FALSE. Значение 1 указывает режим без потери. Увеличение значений приводит к повышению коэффициента сжатия и снижению качества изображения.
BitmapTransform
Указывает, поворачивается ли изображение или перевернуто при декодировании.
Тип данных | Тип переменной | Диапазон | По умолчанию |
---|---|---|---|
UCHAR | VT_UI1 | WICBitmapTransformOptions | WICBitmapTransformRotate0 |
Транскодирование в сжатом домене
Включает или отключает перекодирование сжатых доменов.
Тип данных | Тип переменной | По умолчанию |
---|---|---|
VARIANT_BOOL | VT_BOOL | VARIANT_TRUE |
Чтобы отключить операции в сжатом домене, задайте для этого свойства значение VARIANT_FALSE.
Порядок Частоты
Включает кодировку в порядке частоты. Реализации кодировщиков JPEG XR могут упорядочивать файл в пространственном порядке, чтобы уменьшить объем памяти, необходимый во время кодирования.
Тип данных | VARTYPE | По умолчанию |
---|---|---|
VARIANT_BOOL | VT_BOOL | VARIANT_TRUE |
- VARIANT_TRUE: частотный порядок. Данные наименьшей частоты отображаются в файле, а содержимое изображения группируется по частоте, а не пространственной ориентации. Упорядочение файла по частоте обеспечивает оптимальную производительность для декодирования на основе частоты.
- VARIANT_FALSE: пространственный порядок. Пространственный порядок уменьшает объем памяти, необходимой во время кодирования
Рекомендуется использовать порядок по частоте, если только у вас нет причин, связанных с производительностью или особенностями приложения, чтобы использовать пространственный порядок.
HorizontalTileSlices
Задает количество горизонтальных плиток.
Тип данных | VARTYPE | Диапазон | По умолчанию |
---|---|---|---|
USHORT | VT_UI2 | 0–4095 | (ширина изображения — 1) >> 8 |
Значение — это число горизонтальных делений; то есть число горизонтальных плит – 1.
ИгнорироватьПерекрытия
Указывает, как кодировщик обрабатывает границы плиток во время сжатого транскода домена.
Тип данных | ВАРТИП | По умолчанию |
---|---|---|
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 | Диапазон данных высокочастотного фильтра удаляется, включая flexbits. Это уменьшает разрешение транскодированного изображения на 4 в обоих измерениях. Фактические размеры транскодированного изображения остаются неизменными, но изображение теряет все детали в каждом блоке 4x4 пикселей. Таким образом, транскодированное изображение должно быть уменьшено соответствующим образом каждый раз при декодировании. |
3 | Диапазоны частотных данных высокой и низкой частоты удаляются, включая flexbits. Это уменьшает разрешение транскодированного изображения на 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 поддерживается для любого формата изображения, который определяет альфа-канал.
Без потерь
Активирует сжатие потерь.
Тип данных | 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.
прогрессивный режим
Включает или отключает прогрессивную кодировку.
Тип данных | VARTYPE | По умолчанию |
---|---|---|
VARIANT_BOOL | VT_BOOL | VARIANT_FALSE |
Ценность | Описание |
---|---|
ВАРИАНТ_ИСТИНА | Последовательный режим (по умолчанию). |
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. Разрешение Chroma равно 1/2 разрешения света. |
1 | Кодировка 4:2:0. Разрешение Chroma равно 1/4 разрешения света. |
0 | Кодировка 4:0:0. Удаляет все значения хрома и сохраняет только светимость.
Примечание. этот режим не рекомендуется, так как кодек использует немного измененное определение светимости для повышения производительности. Вместо этого лучше преобразовать изображение в монохром перед кодировкой. |
4:2:2 и 4:2:0 сохраняют детали света за счет детализации цвета.
Если установите это свойство, также установите для UseCodecOptions значение VARIANT_TRUE.
UseCodecOptions
Указывает, следует ли использовать свойства Quality, Перекрытиеи Subsampling вместо универсального свойства ImageQuality.
Тип данных | VARTYPE | По умолчанию |
---|---|---|
VARIANT_BOOL | VT_BOOL | VARIANT_FALSE |
VerticalTileSlices
Задает количество горизонтальных плиток.
Тип данных | VARTYPE | Диапазон | По умолчанию |
---|---|---|---|
USHORT | VT_UI2 | 0–4095 | (высота изображения — 1) >> 8 |
Значение — это число вертикальных подразделений; то есть количество вертикальных плиток – 1.
Поддерживаемые форматы цветов
Дополнительные сведения об этих форматах см. в родных форматах пикселей.
-
целочисленные форматы RGB
- GUID_WICPixelFormat24bppRGB (24-битный RGB-пиксельный формат)
- 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 (8-битный серый пиксельный формат)
- GUID_WICPixelFormat16bppGray
- GUID_WICPixelFormat16bppGrayFixedPoint (Формат пикселя с фиксированной точкой серого цвета 16 бит на пиксель)
- GUID_WICPixelFormat16bppGrayHalf
- GUID_WICPixelFormat32bppGrayFixedPoint
- Формат пикселей 32bpp GrayFloat (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_WICPixelFormat48bpp3Каналы
- GUID_WICPixelFormat64bpp4Channels (формат пикселя 64-бит, 4 канала)
- GUID_WICPixelFormat80bpp5Channels
- GUID_WICPixelFormat96bpp6Channels
- GUID_WICPixelFormat128bpp8Channels
- GUID_WICPixelFormat64bpp3ChannelsAlpha
- GUID_WICPixelFormat80bpp4ChannelsAlpha
- Формат пикселя GUID_WIC 96 бит на пиксель, 5 каналов с альфа-каналом
- GUID_WICPixelFormat112bpp6ChannelsAlpha
- GUID_WICPixelFormat128bpp7ChannelsAlpha (формат пикселей 128 бит, 7 каналов и альфа)
- GUID_WICPixelFormat144bpp8ChannelsAlpha