Vue d’ensemble du format de photo HD

Cette rubrique fournit des informations sur le codec Photo HD natif (intégré) disponible via le Composant Imagerie Windows (WIC).

Important

Le format Photo HD est une implémentation pré-standard du format JPEG XR, et la prise en charge de Photo HD est implémentée par le codec WIC JPEG XR. Pour plus d’informations, consultez la vue d’ensemble du codec JPEG XR.

Identité de codec

Le tableau suivant fournit des informations d’identification de codec.

Composant Description
Nom(s) formel(s) Photo HD, Photo Windows Media
Extension(s) de nom de fichier wdp
Type de l’MIME image/vnd.ms-photo
Signature(s) de fichier Quatre premiers octets : 0x4949bc00 (version 0 ; préversion), 0x4949bc01 (version 1.0)

Le tableau suivant répertorie les GUID utilisés pour identifier les composants de codec Photo HD natifs.

Composant Nom convivial GUID
Format de conteneur GUID_ContainerFormatWmp 57a37caa-367a-4540-916bf183c5093a4b
Décodeur CLSID_WICWmpDecoder a26cec36-234c-4950-ae16e34aace71d0d
Encodeur CLSID_WICWmpEncoder ac4ce3cb-e1c1-44cd-82155a1665509ec2

Encodage

L’API d’encodage WIC est conçue pour être indépendante des codecs et l’encodage d’image pour les codecs compatibles WIC est essentiellement identique. Pour plus d’informations sur l’encodage d’image à l’aide de l’API WIC, consultez la vue d’ensemble de l’encodage.

Options d’encodeur

Les codecs compatibles WIC diffèrent au niveau de l’option d’encodage. Les options d’encodeur reflètent les capacités d’un encodeur d’image et chaque codec natif prend en charge un ensemble de ces options d’encodeur. Les options d’encodeur peuvent être des options WIC de base prises en charge disponibles pour tous les codes compatibles WIC (mais pas nécessairement pris en charge) ou les options spécifiques aux codecs conçues par le codec de format d’image. Pour gérer ces options d’encodage pendant le processus d’encodage, WIC utilise l’interface IPropertyBag2. Pour plus d’informations sur l’utilisation de l’interface IPropertyBag2 pour l’encodage WIC, consultez la vue d’ensemble de l’encodage.

Le codec Photo HD utilise à la fois les options WIC de base et fournit plusieurs options d’encodage spécifiques à Photo HD. Le tableau suivant répertorie les options d’encodeur prises en charge par le codec Photo HD natif.

Options d’encodeur WIC de base

Nom de la propriété VARTYPE Plage de valeurs Valeur par défaut
ImageQuality VT_R4 0 – 1,0 0.9
Lossless VT_BOOL TRUE, FALSE FAUX
BitmapTransform VT_UI1 WICBitmapTransformOptions WICBitmapTransformRotate0

Options d’encodeur spécifiques à Photo HD

Nom de la propriété VARTYPE Plage de valeurs Valeur par défaut
UseCodecOptions VT_BOOL TRUE, FALSE FAUX
Contrôle VT_UI1 1 - 255 10
Overlap VT_UI1 0 – 2 1
Subsampling VT_UI1 0 - 3 3 si ImageQuality > 0,8 ; sinon 1 ;
HorizontalTileSlices VT_UI2 0 – 4095 (largeur de l’image – 1) >> 8
VerticalTileSlices VT_UI2 0 – 4095 (hauteur de l’image – 1) >> 8
FrequencyOrder VT_BOOL TRUE, FALSE VRAI
InterleavedAlpha VT_BOOL TRUE, FALSE FAUX
AlphaQuality VT_UI1 1 - 255 1
CompressedDomainTranscode VT_BOOL TRUE, FALSE VRAI
ImageDataDiscard VT_UI1 0 - 3 0
AlphaDataDiscard VT_UI1 0 - 4 non utilisée.
IgnoreOverlap VT_BOOL TRUE, FALSE FAUX

Si une option d’encodeur présente dans la liste d’options IPropertyBag2 n’est pas prise en charge par le codec, elle est ignorée.

Option ImageQuality

Spécifie la fidélité de l’image souhaitée. 0,0 indique la fidélité la plus faible possible et 1,0 spécifie la fidélité la plus élevée. Pour le format d’image Photo HD, une valeur 1,0 entraîne une compression mathématiquement sans perte.

La valeur par défaut est 0,9.

Option CompressionQuality

Spécifie la qualité de compression souhaitée. 0,0 indique le schéma de compression efficace disponible. En règle générale, ce schéma produit un encodage plus rapide, mais une sortie plus grande. La valeur 1,0 spécifie le schéma de compression le plus efficace disponible, ce qui produit généralement un encodage plus long, mais une sortie plus petite.

Photo HD ne prend pas en charge cette option d’encodeur. Cette valeur est ignorée si elle est présente dans la liste des paramètres IPropertyBag2.

Option Lossless

Spécifie s’il faut utiliser le mode de compression des pertes. Pour le format d’image Photo HD, cette valeur remplace la valeur de l’option ImageQuality.

La valeur par défaut est FALSE.

Option BitmapTransform

Spécifie la façon dont l’image est transformée pendant le décodage d’image. Vous devez définir cette option sur l’une des valeurs d’énumération WICBitmapTransformOptions.

La valeur par défaut est WICBitmapTransformOptions::WICBitmapTransformRotate0.

Option UseCodecOptions

Si la valeur est VARIANT_TRUE, utilisez les options Quality, Overlap et Subsampling au lieu de la valeur d’option.

La valeur par défaut est FALSE.

Option Quality

Spécifie la qualité de compression de l’image. La valeur 1 indique le mode sans perte. L’augmentation des valeurs entraîne des taux de compression plus élevés et une qualité d’image inférieure.

La valeur par défaut est 10.

Option Overlap

Spécifie le niveau de traitement de chevauchement.

Le tableau suivant répertorie les niveaux de traitement de chevauchement disponibles.

Valeur Description
0 Aucun traitement de chevauchement n’est activé.
1 Un niveau de traitement de chevauchement est activé, modifiant les valeurs encodées en bloc 4x4 en fonction des valeurs des blocs voisins.
2 Deux niveaux de traitement de chevauchement sont activés. Outre le traitement de premier niveau, les valeurs encodées des blocs de macros 16x16 sont modifiées en fonction des valeurs des blocs de macro voisins.

La valeur par défaut est 1.

Option Subsampling

Spécifie une compression supplémentaire dans l’espace chromatique. De cette façon, vous pouvez conserver les détails de la luminance au détriment des détails de couleur. Cette option s’applique uniquement aux images RVB.

Le tableau suivant répertorie les options de sous-échantillonnage disponibles.

Valeur Description
3 L’encodage 4:4:4 conserve la résolution chromatique complète.
2 L’encodage 4:2:2 réduit la résolution chromatique à ½ de la résolution de la luminance.
1 L’encodage 4:2:0 réduit la résolution chromatique à ¼ de la résolution de la luminance.
0 L’encodage 4:0:0 abandonne tout le contenu chromatique et conserve uniquement la luminance. Étant donné que le codec utilise une définition légèrement modifiée de la luminance pour améliorer les performances, nous vous recommandons de convertir une image RVB en monochrome avant l’encodage plutôt que d’utiliser ce mode de sous-échantillonnage de chrominance.

La valeur par défaut est 3 si ImageQuality> 0,8 ; sinon elle est 1.

Options HorizontalTileSlices, VerticalTileSlices

Spécifiez la mosaïque horizontale et verticale de l’image avant d’effectuer l’encodage de compression pour obtenir le niveau de performance optimal du décodage de région. En divisant l’image en mosaïques rectangulaires pendant l’encodage, vous pouvez décoder les régions de l’image sans traiter l’intégralité du flux de données compressé. La valeur par défaut 0 ne spécifie aucune sous-division. L’image entière est donc traitée comme une seule mosaïque. Une valeur de 1 pour chaque paramètre crée une division horizontale et verticale unique, divisant efficacement l’image en quatre mosaïques de taille égale. La valeur maximale de 4095 pour chaque paramètre divise l’image en 4096 lignes de mosaïques avec 4096 mosaïques par ligne. En d’autres termes, les valeurs de paramètre sont égales au nombre de mosaïques horizontales et verticales (respectivement) moins 1. Une mosaïque ne peut jamais être inférieure à 16 pixels en largeur ou hauteur. L’encodeur Photo HD peut donc ajuster ce paramètre pour conserver la taille minimale nécessaire de la mosaïque. Étant donné qu’il existe un traitement de stockage et de préparation associée à chaque mosaïque, vous devez choisir attentivement ces valeurs pour répondre au scénario spécifique.

HorizontalTileSlices : la valeur par défaut est (largeur de l’image – 1) >> 8.

VerticalTileSlices : la valeur par défaut est (hauteur de l’image – 1) >> 8.

Option FrequencyOrder

Spécifie que l’image doit être encodée dans l’ordre de fréquence. Les données de fréquence les plus basses apparaissent en premier dans le fichier, et le contenu de l’image est regroupé en fonction de la fréquence plutôt que de l’orientation spatiale. Nous vous recommandons l’organisation d’un fichier par ordre de fréquence, car cela offre le meilleure niveau de performance pour tout décodage basé sur la fréquence. Les implémentations d’appareils d’encodeurs Photo HD peuvent organiser un fichier dans l’ordre spatial afin de réduire l’empreinte mémoire nécessaire pendant l’encodage.

La valeur par défaut est TRUE et nous recommandons que les applications et les appareils utilisent toujours l’ordre de fréquence, sauf si vous avez des raisons spécifiques au niveau de performance ou aux applications d’utiliser l’ordre spatial.

Option InterleavedAlpha

La définition de cette option sur TRUE indique au codec d’encoder les informations du canal alpha en tant que canal entrelacé supplémentaire, sans corrélation avec les canaux de contenu d’image. Ce mode est utile lorsque vous devez décoder alpha simultanément avec l’image dans un scénario de diffusion en continu.

La définition de ce paramètre sur FALSE génère un canal alpha planaire, encodé en tant qu’image distincte avec sa propre valeur Quality facultative. En utilisant un canal alpha planaire, vous pouvez décoder les données d’image et le canal alpha indépendamment. Les canaux alpha entrelacés sont pris en charge uniquement pour certains formats de pixels RVB. Vous pouvez associer un canal alpha planaire à n’importe quel format d’image qui définit un canal alpha.

La valeur par défaut est FALSE.

Option AlphaQuality

Spécifie la qualité de compression de l’image de canal alpha planaire. La valeur 1 définit le mode sans perte. L’augmentation des valeurs entraîne des taux de compression plus élevés et une qualité d’image inférieure.

La valeur par défaut est 1.

Option CompressedDomainTranscode

À l’aide de Photo HD, vous pouvez effectuer un certain nombre d’opérations de transformation de fichier sans réellement décoder les données compressées et les ré-encoder dans le fichier de destination. Les opérations de domaine compressées sont très efficaces et évitent toute perte de qualité supplémentaire, ce qui est courant lorsque vous décodez et ré-encodez une image compressée avec perte.

Les opérations de domaine compressées suivantes sont prises en charge :

  • Rogner une région de l’image.
  • Effectuer une transformation de rotation/retournement.
  • Abandonner les données de fréquence (ce qui permet de créer un fichier image plus petit.)
  • Réorganiser l’image entre l’ordre séquentiel spatial et fréquentiel.

L’encodeur Photo HD effectue une opération de transcodeur de domaine compressé lorsqu’il encode une image Photo HD à l’aide d’un décodeur Photo HD comme source d’image. Selon les options d’encodage que vous avez sélectionnées, le codec utilise une opération de domaine compressé si possible. Si une application choisit d’empêcher explicitement toutes les opérations de transcode de domaine compressé, vous devez définir l’option UseCodecOptions sur TRUE et l’option CompressedDomainTranscode sur FALSE.

Lorsque le codec effectue une opération de domaine compressé, seuls certains paramètres d’encodeur et paramètres de propriété sont autorisés.

  • Les options d’encodeur de base ImageQuality, CompressionQuality et Lossless sont ignorées.
  • Les options d’encodeur spécifiques à Photo HD Quality, Overlap, InterleavedAlpha et AlphaQuality sont ignorées.
  • Si elles sont présentes, les options HorizontalTileSlices et VerticalTileSlices doivent être définies sur zéro. La taille de la mosaïque d’une image ne peut pas être modifiée dans le cadre d’un transcode de domaine compressé.
  • Vous pouvez modifier l’organisation de l’image entre l’ordre fréquentiel et spatial en spécifiant la valeur appropriée des options FrequencyOrdering.
  • Une rotation cardinale et/ou une opération de retournement horizontal/vertical peut être effectuée en fonction de la valeur spécifiée dans l’option d’encodeur BitmapTransform.
  • L’image peut être rognée en spécifiant la région souhaitée à l’aide du paramètre WICRect de la méthode d’encodeur WriteSource.
  • Les données image et/ou alpha peuvent être abandonnées en spécifiant les valeurs appropriées dans les options ImageDataDiscard et/ou AlphaDataDiscard, réduisant la taille du fichier encodé et réduisant efficacement la résolution de la nouvelle image.

La valeur par défaut est TRUE et nous recommandons que les applications et les appareils utilisent toujours l’ordre de fréquence, sauf si vous avez des raisons spécifiques au niveau de performance ou aux applications d’utiliser l’ordre spatial.

Option ImageDataDiscard

Ce paramètre est valide uniquement si l’option CompressedDomainTranscode est définie sur TRUE, sinon il est ignoré. ImageDataDiscard spécifie la quantité de données image à abandonner pendant un transcode de domaine compressé. Si l’image contient un canal alpha entrelacé, cette abandon de données s’applique également au canal alpha, avec les exceptions décrites plus loin dans cette section.

Les valeurs suivantes sont autorisées.

Valeur Description
0 Aucune donnée de fréquence d’image n’est abandonnée.
1 Les FlexBits sont abandonnés, ce qui réduit arbitrairement la qualité de l’image transcodée sans modifier la résolution effective de l’image. La réduction exacte de la taille du fichier ou la réduction de qualité spécifique dépend de nombreux facteurs et ne peut pas être spécifiée ou prédite. Cette valeur retourne une erreur si vous la spécifiez pour un canal alpha entrelacé.
2 La bande de données de fréquence HighPass est abandonnée (cela inclut également les FlexBits), réduisant efficacement la résolution de l’image transcodée en facteur de 4 dans les deux dimensions. Les dimensions réelles de l’image transcodée restent les mêmes, mais elles perdent tous les détails dans chaque bloc de pixels 4x4. Par conséquent, vous devez sous-échantillonner l’image transcodée en conséquence chaque fois que vous la décodez.
3 Les bandes de données de fréquence HighPass et LowPass sont abandonnées (cela incluent également FlexBits), réduisant efficacement la résolution de l’image transcodée en facteur de 16 dans les deux dimensions. Les dimensions réelles de l’image transcodée restent les mêmes, mais elles perdent tous les détails dans chaque bloc macro de pixels 16x16. Par conséquent, vous devez sous-échantillonner l’image transcodée en conséquence chaque fois que vous la décodez.

La valeur par défaut est 0.

Option AlphaDataDiscard

Cette option est valide uniquement si la propriété CompressedDomainTranscode est définie sur TRUE et que l’image contient un canal alpha planaire ou entrelacé, sinon elle est ignorée. Elle spécifie la quantité de données de fréquence alpha à abandonner pendant un transcode de domaine compressé. Les valeurs suivantes sont autorisées pour un canal alpha planaire.

Valeur Description
0 Aucune donnée de fréquence d’image n’est abandonnée.
1 Les FlexBits sont abandonnés, ce qui réduit arbitrairement la qualité du canal alpha planaire pour l’image transcodée sans modifier la résolution effective. La réduction exacte de la taille du fichier ou la réduction de qualité spécifique dépend de nombreux facteurs et ne peut pas être spécifiée ou prédite.
2 La bande de données de fréquence HighPass est abandonnée (cela inclut également les FlexBits), réduisant efficacement la résolution du canal alpha planaire de l’image transcodée en facteur de 4 dans les deux dimensions. Les dimensions réelles de l’image transcodée restent les mêmes, mais l’image perd tous les détails du canal alpha planaire dans chaque bloc de pixels 4x4. Par conséquent, l’image transcodée doit être sous-échantillonné en conséquence chaque fois qu’elle est décodée. En règle générale, vous devez définir cette valeur uniquement lorsque vous définissez la propriété ImageDataDiscard sur la même valeur.
3 Les bandes de données de fréquence HighPass et LowPass sont abandonnées (cela incluent également FlexBits), réduisant efficacement la résolution de l’image transcodée en facteur de 16 dans les deux dimensions. Les dimensions réelles de l’image transcodée restent identiques, mais l’image perd tous les détails dans chaque bloc macro de 16x16 pixels. Par conséquent, l’image transcodée doit être sous-échantillonné en conséquence chaque fois qu’elle est décodée. En règle générale, vous devez définir cette valeur uniquement lorsque vous définissez la propriété ImageDataDiscard sur la même valeur.
4 Le canal Alpha est complètement abandonné. Le format de pixel de l’image transcodée est modifié pour refléter la suppression du canal alpha.

Pour les images qui contiennent des canaux alpha entrelacés, sauf si cette propriété est définie sur 4, le canal alpha est traité de la même façon que les données image, en fonction de la valeur de la propriété ImageDataDiscard. Si cette propriété est définie sur 4, le canal alpha entrelacé est complètement abandonné et le format de pixel de l’image transcodée est modifié en conséquence.

Pas de valeur par défaut.

Option IgnoreOverlap

Cette option est valide uniquement si la propriété CompressedDomainTranscode est définie sur TRUE et qu’un transcode sous-région d’exactement une ou plusieurs mosaïques est demandé. L’opération par défaut d’un transcode de région (ou décodage) consiste à développer la région demandée pour inclure les pixels environnants nécessaires pour le décodage de chevauchement des bords de la région. Lorsque ce paramètre est défini sur TRUE, les pixels environnants sont ignorés et seules les mosaïques sélectionnées sont extraites. Là encore, cela nécessite que la région demandée corresponde exactement aux coordonnées d’une ou plusieurs mosaïques. Si l’image source n’est pas en mosaïque ou si la région demandée spécifie des mosaïques partielles, ce paramètre est ignoré.

La valeur par défaut est FALSE.

Décodage

L’API de décodage WIC est conçue pour être indépendante des codecs et le décodage d’image pour les codecs compatibles WIC est essentiellement identique. Pour plus d’informations concernant le décodage d’image, consultez la vue d’ensemble du décodage. Pour plus d’informations concernant l’utilisation des données image décodées, consultez la vue d’ensemble des sources bitmap.

Prise en charge de IWICBitmapSourceTransform

Outre les interfaces nécessaires pour être un codec compatible WIC, le décodeur Photo HD natif prend également en charge IWICBitmapSourceTransform. L’interface IWICBitmapSourceTransform fournit une option avancée pour décoder un flux de bits d’image. Au lieu de renvoyer une image complète à l’aide de IWICBitmapFrameDecode, l’interface IWICBitmapSourceTransform active les options de décodeur suivantes.

  • Décoder une sous-région rectangulaire de l’image.
  • Décoder en une résolution inférieure
  • Décoder en un format de pixel différent
  • Effectuer une transformation (rotation/retournement) lors du décodage

Le codec Photo HD natif fournit le niveau de prise en charge suivant pour l’interface IWICBitmapSourceTransform.

DoesSupportTransform

L’implémentation native prend en charge toutes les transformations WICBitmapTransformOptions.

GetClosestSize

Pour les requêtes dont la dimension est inférieure à la moitié de la dimension de l’image source dans les deux dimensions, Photo HD retourne la taille d’image entière suivante la plus grande, divisible uniformément par un facteur de deux. Pour toutes les autres tailles demandées, Photo HD retourne les dimensions d’image d’origine.

GetClosestPixelFormat

Photo HD retourne le format de pixel de l’image encodée.

CopyPixels

Photo HD accepte toute région demandée spécifiée par le paramètre WICRect et retourne cette partie de l’image.

Les paramètres uiWidth et uiHeight doivent spécifier les dimensions retournées par la fonction GetClosestSize. Toutes les autres valeurs retournent une erreur.

Le paramètre pguidDstFormat doit spécifier le format de pixel retourné par la fonction GetClosestPixelFormat. Toute autre valeur retourne une erreur.

Photo HD accepte toute valeur autorisée pour le paramètre dstTransform. Notez que les valeurs autorisées par WIC pour ce paramètre sont différentes des valeurs utilisées par Photo HD pour la balise de métadonnées Transformation.