Обзор кодека 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
- AlphaQuality
- BitmapTransform
- CompressedDomainTranscode
- FrequencyOrder
- HorizontalTileSlices
- IgnoreOverlap
- ImageDataDiscard
- ImageQuality
- InterleavedAlpha
- Lossless
- Перекрытие
- ProgressiveMode
- Качество
- StreamOnly
- Подсэмплинг
- UseCodecOptions
- VerticalTileSlices
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