Общие сведения о формате фотографий HD

В этом разделе содержатся сведения о собственном (встроенном) фотокодеке HD, доступном через компонент образов Windows (WIC).

Важно!

Формат HD Photo — это предварительная реализация формата JPEG XR, а поддержка HD Photo реализована кодеком JPEG XR WIC. Дополнительные сведения см. в обзоре кодека JPEG XR.

Удостоверение Codec

В следующей таблице содержатся идентификационные данные кодека.

Компонент Description
Формальные имена 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 Диапазон значений: Значение по умолчанию
ImageQuality VT_R4 0 - 1.0 0,9
Без потерь VT_BOOL. TRUE, FALSE FALSE
BitmapTransform VT_UI1 WICBitmapTransformOptions WICBitmapTransformRotate0

Параметры кодировщика для конкретной фотографии HD

Имя свойства VARTYPE Диапазон значений: Значение по умолчанию
UseCodecOptions VT_BOOL. TRUE, FALSE FALSE
Quality 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
VerticalTileSlices VT_UI2 0 - 4095 (высота изображения — 1) >> 8
FrequencyOrder VT_BOOL. TRUE, FALSE TRUE
InterleavedAlpha VT_BOOL. TRUE, FALSE FALSE
AlphaQuality VT_UI1 1 - 255 1
СжатыйDomainTranscode VT_BOOL. TRUE, FALSE TRUE
ImageDataDis карта VT_UI1 0–3 0
AlphaDataDis карта VT_UI1 0–4 Не используется.
IgnoreOverlap VT_BOOL. TRUE, FALSE FALSE

Если параметр кодировщика присутствует в списке параметров IPropertyBag2 , который не поддерживается кодеком, он игнорируется.

Параметр ImageQuality

Указывает требуемое качество изображения. 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.

Параметр subsampling

Указывает дополнительное сжатие в пространстве хрома. Таким образом, вы можете сохранить детали света за счет цветовой детализации. Этот параметр применяется только к изображениям RGB.

В следующей таблице перечислены доступные параметры вложенных элементов.

значение Описание
3 Кодировка 4:4:4 сохраняет полное разрешение хрома.
2 Кодировка 4:2:2 уменьшает разрешение хрома до 1/2 разрешения света.
1 Кодировка 4:2:0 уменьшает разрешение хрома до 1/4 разрешения света.
0 4:0:0 кодировка dis карта s all chroma content, и сохраняет только светимость. Так как кодек использует немного измененное определение яркости для повышения производительности, рекомендуется преобразовать изображение 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 можно выполнять ряд операций преобразования файлов, не декодируя сжатые данные и повторно кодируя его в целевой файл. Сжатые операции домена очень эффективны и избежать дополнительной потери качества, обычной при декодировании и повторном кодировании сжатого изображения.

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

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

Кодировщик фотографий HD выполняет операцию транскодирования сжатого домена при кодировании изображения HD Photo с помощью декодатора фотографий HD в качестве источника изображения. В зависимости от выбранных параметров кодирования кодек при возможности использует сжатую операцию домена. Если приложение решит явно запретить любые операции транскодирования сжатых доменов, необходимо задать для параметра UseCodecOptions значение TRUE , а параметр "Сжатый ДоменTranscode " имеет значение FALSE.

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

  • Основные параметры кодировщика ImageQuality, CompressionQuality и Lossless игнорируются.
  • Параметры кодировщика hd Photo, Overlap, InterleavedAlpha и AlphaQuality игнорируются.
  • При наличии параметры HorizontalTileSlices и VerticalTileSlices должны иметь значение нулю. Размер плитки изображения нельзя изменить как часть сжатого транскода домена.
  • Вы можете изменить организацию изображений между частотой и пространственным упорядочением, указав соответствующее значение параметров FrequencyOrdering .
  • Можно выполнить операцию карта поворота и (или) горизонтального или вертикального поворота на основе значения, указанного в параметре кодировщика BitmapTransform.
  • Изображение можно обрезать, указав нужный регион с помощью параметра WICRect метода кодировщика WriteSource.
  • Изображения и (или) альфа-данные могут быть отключены карта путем указания соответствующих значений в параметрах ImageDataDis карта и/или AlphaDataDis карта, уменьшая размер закодированного файла и эффективно уменьшая разрешение нового образа.

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

Параметр ImageDataDis карта

Этот параметр действителен только в том случае, если параметр CompressedDomainTranscode имеет значение TRUE; в противном случае он игнорируется. ImageDataDis карта указывает объем данных изображения карта во время транскода сжатого домена. Если изображение содержит перемещенный альфа-канал, эти данные не карта применяются также к альфа-каналу, за исключением описанных далее в этом разделе.

Допустимы следующие значения.

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

Значение по умолчанию равно 0.

Параметр AlphaDataDis карта

Этот параметр действителен только в том случае, если свойство CompressedDomainTranscode имеет значение TRUE , а изображение содержит планарный или перерезанный альфа-канал; в противном случае он игнорируется. Он указывает объем данных альфа-частоты для отключения карта во время сжатого транскода домена. Для планарного альфа-канала разрешены следующие значения.

значение Описание
0 Данные частоты изображения не карта.
1 FlexBits не карта, что делает произвольное сокращение качества планарного альфа-канала для транскодированного изображения без изменения эффективного разрешения. Точное уменьшение размера файла или сокращение конкретного качества зависит от многочисленных факторов и не может быть задано или предсказано.
2 Диапазон данных высокой частоты HighPass не карта (который также включает FlexBits), эффективно снижает разрешение транскодированного альфа-канала изображения на коэффициент 4 в обоих измерениях. Фактические размеры транскодированного изображения остаются неизменными, но изображение теряет все детали планарного альфа-канала в каждом блоке 4x4 пикселей. Таким образом, транскодированное изображение должно быть приведено ниже, когда оно декодируется. Как правило, это значение следует задать только при установке свойства ImageDataDis карта то же значение.
3 Диапазоны данных высокой частоты HighPass и LowPass не карта (которые также включают FlexBits), эффективно сокращают разрешение транскодированного изображения на 16 в обоих измерениях. Фактические размеры транскодированного изображения остаются неизменными, но изображение теряет все детали в каждом макроблоке 16x16 пикселей. Таким образом, транскодированное изображение должно быть приведено ниже, когда оно декодируется. Как правило, это значение следует задать только в том случае, если свойство ImageDataDis карта имеет то же значение.
4 Альфа-канал полностью отключен карта. Формат пикселя транскодированного изображения изменяется на отражение удаления альфа-канала.

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

Нет значения по умолчанию.

Параметр IgnoreOverlap

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

Значение по умолчанию — FALSE.

Декодирования

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

Поддержка IWICBitmapSourceTransform

Помимо интерфейсов, необходимых для создания кодека с поддержкой WIC, собственный декодировщик фотографий HD также поддерживает IWICBitmapSourceTransform. Интерфейс IWICBitmapSourceTransform предоставляет расширенный параметр для декодирования битового потока изображения. Вместо того чтобы просто возвращать полный образ с помощью интерфейса IWICBitmapFrameDecode, интерфейс IWICBitmapSourceTransform включает следующие параметры декодера.

  • Декодирование прямоугольной подрегион изображения.
  • Декодирование в более низкое разрешение
  • Декодирование в другой формат пикселей
  • Выполнение преобразования (поворота или перевернутого) во время декодирования

Собственный кодек HD Photo обеспечивает следующий уровень поддержки интерфейса IWICBitmapSourceTransform .

DoesSupportTransform

Встроенная реализация поддерживает все преобразования WICBitmapTransformOptions.

GetClosestSize

Для запросов, которые меньше 1/2 измерения исходного изображения в обоих измерениях, HD Photo возвращает следующий самый большой размер целочисленного изображения, который равномерно делится на два. Для всех остальных запрошенных размеров HD Photo возвращает исходные размеры изображения.

GetClosestPixelFormat

HD Photo возвращает формат пикселя закодированного изображения.

CopyPixels

HD Photo принимает любой запрошенный регион, указанный параметром WICRect , и возвращает эту часть изображения.

Параметры uiWidth и uiHeight должны указывать измерения, возвращаемые функцией GetClosestSize. Любые другие значения возвращают ошибку.

Параметр pguidDstFormat должен указать формат пикселей, возвращаемый функцией GetClosestPixelFormat. Любое другое значение возвращает ошибку.

HD Photo принимает любое допустимое значение для параметра dstTransform . Обратите внимание, что значения, разрешенные WIC для этого параметра, отличаются от значений, используемых HD Photo для тега метаданных преобразования.