Общие сведения о формате фотографий HD
В этом разделе содержатся сведения о собственном (встроенном) фотокодеке HD, доступном через компонент образов Windows (WIC).
Важный
Формат HD Photo — это предварительная реализация формата JPEG XR, а поддержка HD Photo реализована кодеком JPEG XR WIC. Дополнительные сведения см. в обзоре кодека JPEG XR.
Идентификатор кодека
В следующей таблице содержатся идентификационные данные кодека.
Компонент | Описание |
---|---|
Формальные имена | HD Photo, Windows Media Photo |
Расширения имени файла | wdp |
Тип MIME | image/vnd.ms-photo |
Подписи файлов | Первые четыре байта: 0x4949bc00 (версия 0; предварительная версия), 0x4949bc01 (версия 1.0) |
В следующей таблице перечислены идентификаторы GUID, используемые для идентификации компонентов собственного фотокодека HD.
Компонент | Дружественное имя | GUID |
---|---|---|
Формат контейнера | GUID_ContainerFormatWmp | 57a37caa-367a-4540-916bf183c5093a4b |
Дешифратор | CLSID_WICWmpDecoder | a26cec36-234c-4950-ae16e34aace71d0d |
Кодировщик | CLSID_WICWmpEncoder | ac4ce3cb-e1c1-44cd-82155a1665509ec2 |
Кодировка
API кодирования WIC разработан таким образом, чтобы быть независимым от кодеков, и процесс кодирования изображений для кодеков с поддержкой WIC по сути одинаков. Дополнительные сведения о кодировании изображений с использованием API WIC см. в обзоре кодирования .
Параметры кодировщика
Кодеки с поддержкой WIC отличаются на уровне параметра кодирования. Параметры кодировщика отражают возможности кодировщика изображений, а каждый машинный кодек поддерживает набор этих параметров кодировщика. Параметры кодировщика могут быть базовыми опциями, поддерживаемыми WIC и доступными для всех кодеков с поддержкой WIC (хотя и не обязательно поддерживаются), или опциями, предназначенными специально для кодека формата изображения. Для управления этими параметрами кодирования во время кодирования WIC использует интерфейс IPropertyBag2. Дополнительные сведения об использовании интерфейса IPropertyBag2 для кодирования WIC см. в Обзор кодирования.
В кодеке HD Photo используются как основные параметры WIC, так и несколько вариантов кодирования для фотографий HD. В следующей таблице перечислены параметры кодировщика, поддерживаемые собственным кодеком фотографий HD.
Основные параметры кодировщика WIC
Имя свойства | VARTYPE | Диапазон значений | Значение по умолчанию |
---|---|---|---|
КачествоИзображения | VT_R4 | 0 - 1.0 | 0.9 |
без потерь | VT_BOOL | ИСТИНА, ЛОЖЬ | ЛОЖЬ |
BitmapTransform | VT_UI1 | WICBitmapTransformOptions | WICBitmapTransformRotate0 |
Параметры кодировщика для конкретной фотографии HD
Имя свойства | VARTYPE | Диапазон значений | Значение по умолчанию |
---|---|---|---|
UseCodecOptions | VT_BOOL | ИСТИНА, ЛОЖЬ | ЛОЖЬ |
качество | VT_UI1 | 1 - 255 | 10 |
пересечение | VT_UI1 | 0 - 2 | 1 |
субдискретизация | VT_UI1 | 0 - 3 | 3, если ImageQuality > 0,8; в противном случае 1; |
HorizontalTileSlices | VT_UI2 | 0 - 4095 | (ширина изображения — 1) >> 8 |
ВертикальныеПлиточныеСлои | VT_UI2 | 0 - 4095 | (высота изображения — 1) >> 8 |
ЧастотаПорядок | VT_BOOL | ИСТИНА, ЛОЖЬ | ИСТИНА |
InterleavedAlpha | VT_BOOL | ИСТИНА, ЛОЖЬ | ЛОЖЬ |
АльфаКачество | VT_UI1 | 1 - 255 | 1 |
сжатойdomainTranscode | VT_BOOL | ИСТИНА, ЛОЖЬ | TRUE |
УдалениеДанныхИзображения | VT_UI1 | 0 - 3 | 0 |
AlphaDataDiscard | VT_UI1 | 0 - 4 | Не используется. |
Игнорировать перекрытие | VT_BOOL | ИСТИНА, ЛОЖЬ | ЛОЖЬ |
Если параметр кодировщика присутствует в списке параметров IPropertyBag2, но не поддерживается кодеком, он игнорируется.
Параметр качества изображения
Указывает требуемое качество изображения. 0.0 указывает наименьшую возможную верность и 1.0 указывает самую высокую точность. Для формата изображения HD Photo значение 1.0 приводит к математически без потерь сжатию.
Значение по умолчанию — 0.9.
Параметр CompressionQuality
Указывает требуемое качество сжатия. 0.0 указывает, что доступна эффективная схема сжатия. Как правило, эта схема создает более быстрое кодирование, но больший объем выходных данных. Значение 1.0 указывает наиболее эффективную схему сжатия, которая обычно создает более длинный код, но меньший результат.
HD Photo не поддерживает этот параметр кодировщика. Это значение игнорируется, если присутствует в списке параметров IPropertyBag2.
Опция без потерь
Указывает, следует ли использовать режим сжатия потерь. Для формата изображения HD это значение переопределяет значение параметра ImageQuality.
Значение по умолчанию — FALSE.
Параметр BitmapTransform
Указывает, как изображение преобразуется во время декодирования изображения. Этот параметр необходимо задать в одно из значений перечисления WICBitmapTransformOptions.
Значение по умолчанию — WICBitmapTransformOptions::WICBitmapTransformRotate0.
Параметр UseCodecOptions
Если значение равно VARIANT_TRUE, вместо значения параметра используются параметры: качество, перекрытиеи дискретизация.
Значение по умолчанию — FALSE.
Параметр "Качество"
Указывает качество сжатия для изображения. Значение 1 указывает режим без потери. Увеличение значений приводит к повышению коэффициента сжатия и снижению качества изображения.
Значение по умолчанию — 10.
Параметр "Перекрытие"
Задает уровень перекрывающейся обработки.
В таблице ниже перечислены доступные уровни обработки перекрытий.
Ценность | Описание |
---|---|
0 | Обработка перекрывающихся данных не включена. |
1 | Включена одна из уровней перекрывающейся обработки, изменение 4x4 блочных значений в кодировке на основе значений соседних блоков. |
2 | Включено два уровня перекрывающейся обработки. Помимо обработки первого уровня, кодированные значения 16x16 блоков макросов изменяются на основе значений соседних блоков макросов. |
Значение по умолчанию — 1.
Параметр субдискретизации
Указывает дополнительное сжатие в пространстве цветности. Таким образом, вы можете сохранить детали света за счет цветовой детализации. Этот параметр применяется только к изображениям RGB.
В следующей таблице перечислены доступные опции субдискретизации.
Ценность | Описание |
---|---|
3 | Кодировка 4:4:4 сохраняет полное разрешение хрома. |
2 | Кодировка 4:2:2 уменьшает разрешение хрома до 1/2 разрешения света. |
1 | Кодировка 4:2:0 уменьшает разрешение хрома до 1/4 разрешения света. |
0 | Кодировка 4:0:0 удаляет все содержимое хрома и сохраняет только светимость. Так как кодек использует немного измененное определение яркости для повышения производительности, рекомендуется преобразовать изображение RGB в монохромный перед кодировкой, а не использовать этот режим подсемплинга хрома. |
Значение по умолчанию равно 3, если ImageQuality> 0,8; в противном случае — 1.
Параметры HorizontalTileSlices, VerticalTileSlices
Укажите горизонтальную и вертикальную плитку изображения перед выполнением кодирования сжатия для оптимальной производительности декодирования региона. Разделив изображение на прямоугольные плитки во время кодирования, можно декодировать области изображения, не обрабатывая весь сжатый поток данных. Значение по умолчанию 0 не указывает ни одного подразделения, поэтому весь образ обрабатывается как одна плитка. Значение 1 для каждого параметра создает одно горизонтальное и единое вертикальное деление, эффективно разделяя изображение на четыре равных размера плитки. Максимальное значение 4095 для каждого параметра делит изображение на 4096 строк плиток с 4096 плитками на строку. Другими словами, значения параметров равны числу горизонтальных и вертикальных плиток (соответственно) минус 1. Плитка никогда не может быть меньше 16 пикселей в ширину или высоту, поэтому кодировщик фотографий HD может настроить этот параметр для поддержания требуемого минимального размера плитки. Так как с каждой плиткой связана нагрузка на хранение и обработку, следует тщательно выбрать эти значения, чтобы соответствовать конкретному сценарию.
HorizontalTileSlices: значение по умолчанию — (ширина изображения — 1) >> 8.
VerticalTileSlices: значение по умолчанию — (высота изображения – 1) >> 8.
Параметр FrequencyOrder
Указывает, что изображение должно быть закодировано в порядке частоты. Данные наименьшей частоты отображаются в файле, а содержимое изображения группируется по частоте, а не пространственной ориентации. Упорядочение файла по частоте обеспечивает лучшую производительность для любого декодирования на основе частоты, поэтому мы рекомендуем его. Реализации устройств кодировщиков фотографий HD могут упорядочивать файл в пространственном порядке, чтобы уменьшить объем памяти, необходимый во время кодирования.
Значение по умолчанию — TRUE, и мы рекомендуем, чтобы приложения и устройства всегда использовали порядок частоты, если у вас нет причин для использования пространственного порядка.
Параметр InterleavedAlpha
При выборе этого параметра значение TRUE инструктирует кодек кодировать информацию альфа-канала как дополнительный чередующийся канал, без взаимосвязи с каналами содержимого изображения. Этот режим полезен, если необходимо декодировать альфа-канал одновременно с изображением в сценарии потоковой передачи.
При задании этого параметра значение FALSE приводит к тому, что планарный альфа-канал закодирован как отдельный образ с собственным необязательным значением качества. Используя альфа-канал Planar, вы можете декодировать данные изображения и альфа-канал независимо. Межуровневые альфа-каналы поддерживаются только для определенных форматов пикселей RGB. Вы можете связать планарный альфа-канал с любым форматом изображения, определяющим альфа-канал.
Значение по умолчанию — FALSE.
Параметр AlphaQuality
Задает качество сжатия для образа планарного альфа-канала. Значение 1 задает режим без потери. Увеличение значений приводит к повышению коэффициента сжатия и снижению качества изображения.
Значение по умолчанию — 1.
Параметр CompressedDomainTranscode
С помощью HD Photo можно выполнять ряд операций преобразования файлов, не декодируя сжатые данные и повторно кодируя его в целевой файл. Операции в сжатом домене очень эффективны и избегают дополнительных потерь качества, что обычно происходит при декодировании и повторном кодировании изображения с потерями.
Поддерживаются следующие сжатые операции домена:
- Обрежьте область изображения.
- Выполните преобразование поворота или отражения.
- Отмена данных частоты (что позволяет создать меньший файл изображения.)
- Переорганизуйте изображение между пространственным и последовательным порядком частоты.
Кодировщик HD Photo выполняет транскодирование в сжатом домене, когда кодирует изображение HD Photo с использованием декодера HD Photo как источника изображения. В зависимости от выбранных параметров кодирования кодек при возможности использует сжатую операцию домена. Если приложение явно предотвращает любые операции транскодирования в сжатых доменах, необходимо задать параметру UseCodecOptions значение TRUE и параметру CompressedDomainTranscode значение FALSE.
Если кодек выполняет сжатую операцию домена, разрешены только определенные параметры кодировщика и параметры свойств.
- Основные параметры кодировщика ImageQuality, CompressionQuality и Lossless игнорируются.
- Параметры кодировщика HD Photo Quality, Перекрытие, InterleavedAlpha и AlphaQuality игнорируются.
- В случае если параметры HorizontalTileSlices и VerticalTileSlices присутствуют, их значение должно быть ноль. Размер плитки изображения нельзя изменить как часть сжатого транскода домена.
- Можно изменить организацию изображений между частотой и пространственным упорядочением, указав соответствующее значение параметров FrequencyOrdering.
- Можно выполнить операцию поворота кардинала и (или) горизонтального или вертикального перевернутого поворота на основе значения, указанного в параметре кодировщика BitmapTransform.
- Изображение можно обрезать, указав нужный регион с помощью параметра WICRect метода кодировщика WriteSource.
- Изображения и/или альфа-данные можно удалить, указав соответствующие значения в ImageDataDiscard и/или AlphaDataDiscard параметры, уменьшая размер закодированного файла и таким образом уменьшив разрешение нового изображения.
Значение по умолчанию — TRUE, и мы рекомендуем, чтобы приложения и устройства всегда использовали порядок частоты, если у вас нет конкретных причин производительности или приложений для использования пространственного порядка.
Параметр ImageDataDiscard
Этот параметр действителен только в случае, если опция CompressedDomainTranscode равна TRUE; в противном случае он игнорируется. ImageDataDiscard указывает объем данных изображения, который следует удалить при транскодировании в сжатом домене. Если изображение содержит перемежённый альфа-канал, эта потеря данных распространяется также на альфа-канал, при этом исключения описаны далее в этом разделе.
Допустимы следующие значения.
Ценность | Описание |
---|---|
0 | Данные частоты изображения не удаляются. |
1 | При удалении FlexBits происходит произвольное снижение качества транскодированного изображения без изменения фактического разрешения изображения. Точное уменьшение размера файла или сокращение конкретного качества зависит от многочисленных факторов и не может быть задано или предсказано. Эта величина возвращает ошибку, если указать её для перекрестного альфа-канала. |
2 | Диапазон данных высокой частоты HighPass удаляется (включая FlexBits), что эффективно уменьшает разрешение транскодированного изображения в 4 раза по ширине и высоте. Фактические размеры транскодированного изображения остаются одинаковыми, но она теряет все детали в каждом блоке 4x4 пикселей. Таким образом, при декодировании изображения необходимо уменьшать размер перекодированного изображения соответствующим образом. |
3 | Частотные диапазоны данных HighPass и LowPass удаляются (включая FlexBits), что эффективно снижает разрешение транскодированного изображения в 16 раз по обеим осям. Фактические размеры транскодированного изображения остаются неизменными, но теряются все детали в каждом макроблоке 16x16 пикселей. Поэтому, всякий раз при декодировании изображения, его необходимо понизить разрешение в соответствии с необходимыми параметрами. |
Значение по умолчанию — 0.
Параметр AlphaDataDiscard
Этот параметр действителен, только если свойство CompressedDomainTranscode имеет значение TRUE, а изображение содержит планарный или перерезанный альфа-канал; в противном случае он игнорируется. Он указывает объем данных альфа-частоты для удаления во время транскодирования в сжатом домене. Для планарного альфа-канала разрешены следующие значения.
Ценность | Описание |
---|---|
0 | Данные частоты изображения не удаляются. |
1 | FlexBits удаляются, что приводит к произвольному снижению качества альфа-канала в планарном формате для транскодированного изображения без изменения эффективного разрешения. Точное уменьшение размера файла или сокращение конкретного качества зависит от многочисленных факторов и не может быть задано или предсказано. |
2 | Диапазон данных высокой частоты HighPass удаляется (включая FlexBits), что приводит к уменьшению разрешения планарного альфа-канала транскодированного изображения в 4 раза по обоим измерениям. Фактические размеры транскодированного изображения остаются неизменными, но изображение теряет все детали планарного альфа-канала в каждом блоке 4x4 пикселей. Таким образом, транскодированное изображение должно быть уменьшено по разрешению каждый раз, когда оно декодируется. Как правило, это значение следует задать только в том случае, если свойство ImageDataDiscard задано таким же значением. |
3 | Диапазоны данных частот HighPass и LowPass удаляются (включая FlexBits), что эффективно снижает разрешение транскодированного изображения в 16 раз в обоих измерениях. Фактические размеры транскодированного изображения остаются неизменными, но изображение теряет все детали в каждом макроблоке 16x16 пикселей. Таким образом, всякий раз как транскодированное изображение декодируется, оно должно быть уменьшено в разрешении соответственно. Как правило, это значение следует задать только при установке свойства ImageDataDiscard на то же значение. |
4 | Альфа-канал полностью отбрасывается. Формат пикселя транскодированного изображения изменяется на отражение удаления альфа-канала. |
Для изображений, содержащих перекрестиенные альфа-каналы, если для этого свойства не задано значение 4, альфа-канал обрабатывается так же, как и данные изображения, в соответствии со значением свойства ImageDataDiscard. Если для этого свойства задано значение 4, перемеченный альфа-канал полностью отбрасывается, а формат пикселя транскодированного изображения изменяется соответствующим образом.
Значение по умолчанию отсутствует.
Параметр IgnoreOverlap
Этот параметр действителен только в том случае, если свойство CompressedDomainTranscode установлено в TRUE, и запрашивается транскодирование подрегиона, состоящего ровно из одной или более плиток. Операция по умолчанию для транскодирования региона (или декодирования) заключается в том, чтобы развернуть запрошенный регион, чтобы включить окружающие пиксели, необходимые для декодирования краев региона. Если для этого параметра задано значение TRUE, окружающие пиксели игнорируются и извлекаются только выбранные плитки или плитки. Опять же, для этого требуется, чтобы запрошенный регион точно соответствовал координатам одного или нескольких плиток. Если исходное изображение не является плиточным, или если запрошенная область содержит какие-либо частичные плитки, этот параметр будет игнорироваться.
Значение по умолчанию — FALSE.
Расшифровка
API декодирования WIC разработан для того, чтобы быть независимым от конкретного кодека, и процесс декодирования изображений для кодеков с поддержкой WIC, по сути, одинаков. Дополнительные сведения о декодировании изображений см. в Обзоре декодирования. Дополнительные сведения об использовании декодированных данных изображения см. в обзоре источников растровых изображений.
Поддержка IWICBitmapSourceTransform
Помимо интерфейсов, необходимых для создания кодека с поддержкой WIC, встроенный декодировщик фотографий HD также поддерживает IWICBitmapSourceTransform. Интерфейс IWICBitmapSourceTransform предоставляет расширенный способ декодирования битового потока изображения. Вместо того чтобы просто вернуть полное изображение с помощью IWICBitmapFrameDecode, интерфейс IWICBitmapSourceTransform включает следующие параметры декодера.
- Декодировать прямоугольный подрегион изображения.
- Декодирование в более низкое разрешение
- Декодирование в другой формат пикселей
- Выполните преобразование (поворот или отражение) во время декодирования.
Собственный кодек HD Photo предоставляет следующий уровень поддержки интерфейса IWICBitmapSourceTransform.
ПоддерживаетТрансформацию
Встроенная реализация поддерживает все преобразования WICBitmapTransformOptions.
ПолучитьБлижайшийРазмер
Для запросов, которые меньше 1/2 измерения исходного изображения в обоих измерениях, HD Photo возвращает следующий самый большой размер целочисленного изображения, который равномерно делится на два. Для всех остальных запрошенных размеров HD Photo возвращает исходные размеры изображения.
GetClosestPixelFormat
HD Photo возвращает формат пикселя закодированного изображения.
CopyPixels
HD Photo принимает любой запрошенный регион, указанный параметром WICRect, и возвращает эту часть изображения.
Параметры uiWidth и uiHeight должны указывать измерения, возвращаемые функцией GetClosestSize. Любые другие значения возвращают ошибку.
Параметр pguidDstFormat должен указать формат пикселя, возвращаемый функцией GetClosestPixelFormat. Любое другое значение возвращает ошибку.
HD Photo принимает любое допустимое значение для параметра dstTransform. Обратите внимание, что значения, разрешенные WIC для этого параметра, отличаются от значений, используемых HD Photo для тега метаданных преобразования.