Introducción al formato HD Photo
En este tema se proporciona información sobre el códec nativo (integrado) HD Photo disponible a través de Windows Imaging Component (WIC).
Importante
El formato HD Photo es una implementación pre-estándar del formato JPEG XR y la compatibilidad con HD Photo se implementa mediante el códec JPEG XR WIC. Para obtener más información, consulte Información general sobre el códec JPEG XR.
Identidad de códec
En la tabla siguiente se proporciona información de identificación del códec.
Componente | Descripción |
---|---|
Nombres formales | HD Photo, Windows Media Foto |
Extensiones de nombre de archivo | wdp |
Tipo de MIME | image/vnd.ms-photo |
Firmas de archivo | Primeros cuatro bytes: 0x4949bc00 (versión 0; versión preliminar), 0x4949bc01 (versión 1.0) |
En la tabla siguiente se enumeran los GUID usados para identificar los componentes nativos del códec HD Photo.
Componente | Nombre descriptivo | GUID |
---|---|---|
Formato de contenedor | GUID_ContainerFormatWmp | 57a37caa-367a-4540-916bf183c5093a4b |
Descodificador | CLSID_WICWmpDecoder | a26cec36-234c-4950-ae16e34aace71d0d |
Codificador | CLSID_WICWmpEncoder | ac4ce3cb-e1c1-44cd-82155a1665509ec2 |
Encoding
La API de codificación WIC está diseñada para ser independiente del códec y la codificación de imágenes para códecs habilitados para WIC es esencialmente la misma. Para obtener más información sobre la codificación de imágenes mediante la API de WIC, consulte Introducción a la codificación.
Opciones del codificador
Los códecs habilitados para WIC difieren en el nivel de opción de codificación. Las opciones del codificador reflejan las funcionalidades de un codificador de imágenes y cada códec nativo admite un conjunto de estas opciones de codificador. Las opciones del codificador pueden ser opciones básicas compatibles con WIC disponibles para todos los códigos habilitados para WIC (aunque no se admiten necesariamente) o opciones específicas de códec diseñadas por el códec de formato de imagen. Para administrar estas opciones de codificación durante el proceso de codificación, WIC usa la interfaz IPropertyBag2. Para obtener más información sobre el uso de la interfaz IPropertyBag2 para la codificación WIC, consulte Introducción a la codificación.
El códec HD Photo usa las dos opciones básicas de WIC y proporciona varias opciones de codificación específicas de HD Photo. En la tabla siguiente se enumeran las opciones del codificador compatibles con el códec nativo HD Photo.
Opciones básicas del codificador WIC
Nombre de propiedad | VARTYPE | Intervalo de valores | Valor predeterminado |
---|---|---|---|
ImageQuality | VT_R4 | 0 - 1.0 | 0.9 |
Lossless | VT_BOOL | TRUE, FALSE | FALSO |
BitmapTransform | VT_UI1 | WICBitmapTransformOptions | WICBitmapTransformRotate0 |
Opciones del codificador específico de HD Photo
Nombre de propiedad | VARTYPE | Intervalo de valores | Valor predeterminado |
---|---|---|---|
UseCodecOptions | VT_BOOL | TRUE, FALSE | FALSO |
Control de | VT_UI1 | 1 - 255 | 10 |
Overlap | VT_UI1 | 0 - 2 | 1 |
Subsampling | VT_UI1 | 0 - 3 | 3 si ImageQuality > 0.8; en caso contrario, 1; |
HorizontalTileSlices | VT_UI2 | 0 - 4095 | (ancho de la imagen – 1) >> 8 |
VerticalTileSlices | VT_UI2 | 0 - 4095 | (altura de la imagen – 1) >> 8 |
FrequencyOrder | VT_BOOL | TRUE, FALSE | VERDADERO |
InterleavedAlpha | VT_BOOL | TRUE, FALSE | FALSO |
AlphaQuality | VT_UI1 | 1 - 255 | 1 |
CompressedDomainTranscode | VT_BOOL | TRUE, FALSE | VERDADERO |
ImageDataDiscard | VT_UI1 | 0 - 3 | 0 |
AlphaDataDiscard | VT_UI1 | 0 -4 | no se usa. |
IgnoreOverlap | VT_BOOL | TRUE, FALSE | FALSO |
Si una opción de codificador está presente en la lista de opciones IPropertyBag2 que el códec no admite, se omite.
Opción ImageQuality
Especifica la fidelidad de la imagen deseada. 0.0 indica la fidelidad más baja posible y 1.0 especifica la fidelidad más alta. Para el formato de imagen HD Photo, un valor 1.0 da como resultado una compresión matemáticamente sin pérdida.
El valor predeterminado es 0.9.
Opción CompressionQuality
Especifica la calidad de compresión deseada. 0.0 indica el esquema de compresión eficaz disponible. Normalmente, este esquema genera una codificación más rápida, pero una salida mayor. Un valor de 1.0 especifica el esquema de compresión más eficaz disponible, que normalmente genera una codificación más larga pero una salida más pequeña.
HD Photo no admite esta opción de codificador. Este valor se omite si está presente en la lista de parámetros IPropertyBag2.
Opción sin pérdida
Especifica si se va a usar el modo de compresión de pérdidas. Para el formato de imagen HD Photo, este valor invalida el valor de la opción ImageQuality.
El valor predeterminado es FALSE.
Opción BitmapTransform
Especifica cómo se transforma la imagen durante la descodificación de imágenes. Debe establecer esta opción en uno de los valores de enumeraciónWICBitmapTransformOptions.
El valor predeterminado es WICBitmapTransformOptions::WICBitmapTransformRotate0.
Opción UseCodecOptions
Si el valor es VARIANT_TRUE, se muestran las opciones Calidad, Superposición y Submuestreo en lugar del valor de opción.
El valor predeterminado es FALSE.
Opción de calidad
Especifica la calidad de compresión de la imagen. Un valor de 1 indica el modo sin pérdida. El aumento de los valores da lugar a mayores razones de compresión y a una calidad de imagen menor.
El valor predeterminado es 10.
Opción de superposición
Especifica el nivel de procesamiento de superposición.
En la tabla siguiente se enumeran los niveles de procesamiento de superposición disponibles.
Value | Descripción |
---|---|
0 | No hay habilitado ningún procesamiento de superposición. |
1 | Se habilita un nivel de procesamiento de superposición, modificando valores codificados en bloques 4x4 en función de los valores de los bloques vecinos. |
2 | Se habilitan dos niveles de procesamiento de superposición. Además del procesamiento de primer nivel, los valores codificados de 16 x 16 bloques de macros se modifican en función de los valores de los bloques de macro vecinos. |
El valor predeterminado es 1.
Opción de submuestreo
Especifica la compresión adicional en el espacio cromático. De este modo, puede conservar el detalle de la luminancia a costa del detalle de color . Esta opción solo se aplica a imágenes RGB.
En la tabla siguiente se indican las opciones de submuestreo disponibles.
Value | Descripción |
---|---|
3 | La codificación 4:4:4 conserva la resolución cromática completa. |
2 | La codificación 4:2:2 reduce la resolución cromática a 1/2 de la resolución de luminancia. |
1 | La codificación 4:2:0 reduce la resolución cromática a 1/2 de la resolución de luminancia. |
0 | La codificación 4:0:0 descarta todo el contenido cromático y conserva solo la luminancia. Dado que el códec usa una definición ligeramente modificada de luminancia para mejorar el rendimiento, se recomienda convertir las imágenes RGB en monocromo antes de codificarlas en lugar de usar este modo de submuestreo cromático. |
El valor predeterminado es 3 si ImageQuality> es 0.8; en caso contrario, 1.
Opciones HorizontalTileSlices, VerticalTileSlices
Especifique el mosaico horizontal y vertical de la imagen antes de realizar la codificación de compresión para obtener el rendimiento óptimo de la descodificación de región. Al dividir la imagen en mosaicos rectangulares durante la codificación, puede descodificar regiones de la imagen sin procesar todo el flujo de datos comprimido. El valor predeterminado de 0 no especifica ninguna subdivisión, por lo que toda la imagen se trata como un único mosaico. Un valor de 1 para cada parámetro crea una sola división horizontal y una sola división vertical, por lo que se divide eficazmente la imagen en cuatro mosaicos de igual tamaño. El valor máximo de 4095 para cada parámetro divide la imagen en 4096 filas de mosaicos con 4096 mosaicos por fila. En otras palabras, los valores de parámetro son iguales al número de mosaicos horizontales y verticales (respectivamente) menos 1. Un mosaico nunca puede ser inferior a 16 píxeles de ancho o alto, por lo que el codificador HD Photo podría ajustar este parámetro para mantener el tamaño mínimo de mosaico necesario. Dado que hay sobrecarga de almacenamiento y procesamiento asociada a cada mosaico, debe elegir estos valores cuidadosamente para responder al escenario específico.
HorizontalTileSlices: el valor predeterminado es (Ancho de imagen – 1) >> 8.
VerticalTileSlices: el valor predeterminado es (Alto de imagen – 1) >> 8.
Opción FrequencyOrder
Especifica que la imagen debe codificarse en orden de frecuencia. Los datos de frecuencia más bajos aparecen primero en el archivo, y el contenido de la imagen se agrupa por su frecuencia en lugar de por su orientación espacial. Recomendamos la organización de un archivo por orden de frecuencia porque proporciona el mejor rendimiento para cualquier descodificación basada en frecuencia. Las implementaciones de dispositivos de codificadores HD Photo pueden organizar un archivo en orden espacial para reducir la superficie de memoria necesaria durante la codificación.
El valor predeterminado es TRUE, y se recomienda que las aplicaciones y los dispositivos usen siempre el orden de frecuencia, a menos que tenga motivos específicos de rendimiento o de aplicación para usar el orden espacial.
Opción InterleavedAlpha
Al establecer esta opción en TRUE, se indica al códec que codifique la información del canal alfa como un canal intercalado adicional, sin correlación con los canales de contenido de la imagen. Este modo es útil cuando es necesario descodificar alfa simultáneamente con la imagen en un escenario de streaming.
Establecer este parámetro en FALSE da como resultado un canal alfa planar, codificado como una imagen independiente con su propio valor de calidad opcional. Mediante un canal alfa planar, puede descodificar los datos de imagen y el canal alfa de forma independiente. Los canales alfa intercalados solo se admiten para determinados formatos de píxel RGB. Puede asociar un canal alfa planar con cualquier formato de imagen que defina un canal alfa.
El valor predeterminado es FALSE.
Opción AlphaQuality
Especifica la calidad de compresión de la imagen del canal alfa planar. Un valor de 1 define el modo sin pérdida. El aumento de los valores da lugar a mayores razones de compresión y a una calidad de imagen menor.
El valor predeterminado es 1.
Opción CompressedDomainTranscode
Con HD Photo puede realizar una serie de operaciones de transformación de archivos sin descodificar realmente los datos comprimidos y volver a codificarlos en el archivo de destino. Las operaciones de dominio comprimido son muy eficaces y evitan cualquier pérdida de calidad adicional que sea habitual al descodificar y volver a codificar una imagen comprimida con pérdidas.
Se admiten las siguientes operaciones de dominio comprimido:
- Recortar una región de la imagen.
- Realizar una transformación de rotación/volteo.
- Descartar los datos de frecuencia (lo que permite crear un archivo de imagen más pequeño).
- Reorganizar la imagen entre el orden secuencial espacial y de frecuencia.
El codificador HD Photo realiza una operación de transcodificación de dominio comprimido cuando codifica una imagen de HD Photo mediante un descodificador de HD Photo como origen de la imagen. Según las opciones de codificación que haya seleccionado, el códec usa una operación de dominio comprimido si es posible. Si una aplicación decide impedir explícitamente cualquier operación de transcodificación de dominio comprimido, debe definir la opción UseCodecOptions en TRUE y la opción CompressedDomainTranscode en FALSE.
Cuando el códec realiza una operación de dominio comprimido, solo se permiten determinados parámetros del codificador y la configuración de propiedades.
- Las opciones básicas del codificador ImageQuality, CompressionQuality y Lossless se ignoran.
- Las opciones específicas de HD Photo del codificador Quality, Overlap, InterleavedAlpha y AlphaQuality se ignoran.
- Si están presentes, las opciones HorizontalTileSlices y VerticalTileSlices deben definirse en cero. El tamaño del mosaico de una imagen no se puede cambiar como parte de un transcodificación de dominio comprimido.
- Para cambiar la organización de la imagen entre el orden de frecuencia y el espacial, especifique el valor adecuado de las opciones FrequencyOrdering.
- Se puede realizar una operación de rotación cardinal o volteo horizontal/vertical en función del valor especificado en la opción de codificador BitmapTransform.
- Para recortar la imagen hay que especificar la región deseada mediante el parámetro WICRect del método de codificador WriteSource.
- Para descartar los datos alfa o de la imagen hay que especificar los valores adecuados en las opciones ImageDataDiscard o AlphaDataDiscard, lo que reduce el tamaño del archivo codificado y reduce eficazmente la resolución de la nueva imagen.
El valor predeterminado es TRUE, y se recomienda que las aplicaciones y los dispositivos usen siempre el orden de frecuencia, a menos que tenga motivos específicos de rendimiento o de aplicación para usar el orden espacial.
Opción ImageDataDiscard
Este parámetro solo es válido si la opción CompressedDomainTranscode es TRUE. De lo contrario, se ignora. ImageDataDiscard especifica la cantidad de datos de imagen que se van a descartar durante una transcodificación de dominio comprimido. Si la imagen contiene un canal alfa intercalado, este descarte de datos también se aplica al canal alfa, con las excepciones que se describen más adelante en esta sección.
Se admiten los valores siguientes.
Value | Descripción |
---|---|
0 | No se descartan datos de frecuencia de imagen. |
1 | Los FlexBits se descartan, lo que reduce arbitrariamente la calidad de la imagen transcodificada sin cambiar su resolución efectiva. La reducción exacta del tamaño de archivo o la reducción de calidad específica depende de numerosos factores, por lo que no se puede especificar ni predecir. Este valor devuelve un error si se especifica para un canal alfa intercalado. |
2 | La banda de datos de frecuencia HighPass se descarta (incluidos también los FlexBits), lo que reduce eficazmente la resolución de la imagen transcodificada por un factor de 4 en ambas dimensiones. Las dimensiones reales de la imagen transcodificada siguen siendo las mismas, pero pierde todos los detalles en cada bloque de píxeles de 4x4. Por lo tanto, debe muestrear la imagen transcodificada en consecuencia siempre que la descodifique. |
3 | Las bandas de datos de frecuencia HighPass y LowPass se descartan (incluidos también los FlexBits), lo que reduce eficazmente la resolución de la imagen transcodificada por un factor de 16 en ambas dimensiones. Las dimensiones reales de la imagen transcodificada siguen siendo las mismas, pero pierde todos los detalles en cada bloque de píxeles de 16x16. Por lo tanto, debe muestrear la imagen transcodificada en consecuencia siempre que la descodifique. |
El valor predeterminado es 0.
Opción AlphaDataDiscard
Esta opción solo es válida si la propiedad CompressedDomainTranscode es TRUE y la imagen contiene un canal alfa planar o intercalado; de lo contrario, se omite. Especifica la cantidad de datos de imagen que se van a descartar durante una transcodificación de dominio comprimido. Se permiten los siguientes valores para un canal alfa planar.
Value | Descripción |
---|---|
0 | No se descartan datos de frecuencia de imagen. |
1 | Los FlexBits se descartan, lo que reduce arbitrariamente la calidad del canal alfa planar de la imagen transcodificada sin cambiar su resolución eficaz. La reducción exacta del tamaño de archivo o la reducción de calidad específica depende de numerosos factores, por lo que no se puede especificar ni predecir. |
2 | La banda de datos de frecuencia HighPass se descarta (incluidos también los FlexBits), lo que reduce eficazmente la resolución del canal alfa planar de la imagen transcodificada por un factor de 4 en ambas dimensiones. Las dimensiones reales de la imagen transcodificada siguen siendo las mismas, pero pierde todos los detalles del canal alfa planar en cada bloque de píxeles de 4x4. Por lo tanto, la imagen transcodificada debe muestrearse en consecuencia siempre que se descodifique. Normalmente, solo debe definir este valor al establecer la propiedad ImageDataDiscard en el mismo valor. |
3 | Las bandas de datos de frecuencia HighPass y LowPass se descartan (incluidos también los FlexBits), lo que reduce eficazmente la resolución de la imagen transcodificada por un factor de 16 en ambas dimensiones. Las dimensiones reales de la imagen transcodificada siguen siendo las mismas, pero pierde todos los detalles en cada macrobloque de píxeles de 16x16. Por lo tanto, la imagen transcodificada debe muestrearse en consecuencia siempre que se descodifique. Normalmente, solo debe definir este valor al establecer la propiedad ImageDataDiscard en el mismo valor. |
4 | El canal Alpha se descarta por completo. El formato de píxel de la imagen transcodificada se cambia para reflejar la eliminación del canal alfa. |
En el caso de las imágenes que contienen canales alfa intercalados, a menos que esta propiedad se defina en 4, el canal alfa se procesa igual que los datos de imagen, según el valor de la propiedad ImageDataDiscard. Si esta propiedad se define en 4, el canal alfa intercalado se descarta por completo y el formato de píxel de la imagen transcodificada se cambia en consecuencia.
Ningún valor predeterminado.
Opción IgnoreOverlap
Esta opción solo es válida si la propiedad CompressedDomainTranscode es TRUE y se solicita una transcodificación de subregión de exactamente uno o varios mosaicos. La operación predeterminada para una transcodificación de región (o descodificación) es expandir la región solicitada para que incluya los píxeles circundantes necesarios para la descodificación superpuesta de los bordes de la región. Cuando este parámetro se establece en TRUE, se omiten los píxeles circundantes y solo se extraen los mosaicos seleccionados. De nuevo, se requiere que la región solicitada coincida exactamente con las coordenadas de uno o varios mosaicos. Si la imagen de origen no está en mosaico o si la región solicitada especifica mosaicos parciales, este parámetro se omite.
El valor predeterminado es FALSE.
Descodificación
La API de codificación WIC está diseñada para ser independiente del códec y la codificación de imágenes para códecs habilitados para WIC es esencialmente la misma. Para obtener más información sobre la descodificación de imágenes, consulte la Introducción a la descodificación. Para obtener más información sobre el uso de datos de imagen descodificados, consulte Introducción a orígenes de mapa de bits.
Compatibilidad con IWICBitmapSourceTransform
Además de las interfaces necesarias para ser un códec habilitado para WIC, el descodificador nativo HD Photo también admite IWICBitmapSourceTransform. La interfaz IWICBitmapSourceTransform proporciona una opción avanzada para descodificar una secuencia de bits de imagen. En lugar de devolver una imagen completa mediante IWICBitmapFrameDecode, la interfaz IWICBitmapSourceTransform habilita las siguientes opciones de descodificador.
- Descodifique una subregión rectangular de la imagen.
- Descodificar a una resolución inferior
- Descodificar a un formato de píxel diferente
- Realizar una transformación (rotación/voltear) al descodificar
El códec HD Photo nativo proporciona el siguiente nivel de compatibilidad con la interfaz IWICBitmapSourceTransform..
DoesSupportTransform
La implementación nativa admite todas las transformaciones WICBitmapTransformOptions.
GetClosestSize
En el caso de las solicitudes que son inferiores a 1/2 de la dimensión de la imagen de origen en ambas dimensiones, HD Photo devuelve el siguiente tamaño de imagen entero más grande que se puede dividir uniformemente por un factor de dos. En el caso de los demás tamaños solicitados, HD Photo devuelve las dimensiones de imagen originales.
GetClosestPixelFormat
HD Photo devuelve el formato de píxel de la imagen codificada.
CopyPixels
HD Photo acepta cualquier región solicitada especificada por el parámetro WICRect y devuelve esa parte de la imagen.
Los parámetros uiWidth y uiHeight deben especificar las dimensiones devueltas por la función GetClosestSize. Cualquier otro valor devuelve un error.
El parámetro pguidDstFormat debe especificar el formato de píxel devuelto por la función GetClosestPixelFormat. Cualquier otro valor devuelve un error.
HD Photo acepta cualquier valor permitido para el parámetro dstTransform. Tenga en cuenta que los valores permitidos por WIC para este parámetro son diferentes de los utilizados por HD Photo para la etiqueta de metadatos de transformación.