Lire en anglais

Partager via


Vue d’ensemble du codec JPEG XR

Le codec JPEG XR natif est disponible via le composant d’acquisition d’images Windows (WIC). Le format JPEG XR, pris en charge par le codec, est conçu pour la photographie numérique grand public et professionnel.

Le format JPEG XR peut atteindre jusqu’à deux fois l’efficacité de compression du format JPEG d’origine, avec des artefacts de compression moins visibles. Les fonctionnalités de JPEG XR sont les suivantes :

  • Prise en charge des images monochromes, RVB, CMJN et n canaux
  • Formats entiers 8, 16 et 32 bits
  • Plage dynamique élevée, formats larges, à l’aide de valeurs de couleur à point fixe ou à virgule flottante
  • Décodage progressif
  • Encodage avec perte ou sans perte à l’aide du même algorithme de compression
  • Prise en charge du décodage des régions d’intérêt dans les images volumineuses

Le format JPEG XR est défini dans les documents de normes suivants :

  • ITU-T.832 : Technologies de l’information – Système de codage d’images JPEG XR – Spécification de codage d’image
  • ISO/IEC 29199-2:2010 : Technologies de l’information — Système de codage d’images JPEG XR — Partie 2 : Spécification du codage d’images

La norme JPEG XR est largement basée sur le format Photo HD , mais il existe quelques différences entre les deux formats. Dans Windows 8, le codec Photo HD a été mis à jour pour prendre en charge JPEG XR. L’encodeur génère désormais toujours un flux de bits compatible JPEG XR. Le décodeur peut décoder à la fois des images JPEG XR et PHOTO HD.

Des améliorations substantielles des performances, par rapport au codec PHOTO HD, ont été apportées au codec JPEG XR. Par exemple, le décodage d’images en sous-résolution, comme la génération de miniatures, a été amélioré, ainsi que le décodage d’images basse résolution. Il est recommandé d’utiliser le format JPEG XR au lieu du format Photo HD.

Informations sur le codec

Composant Description
Extension de nom de fichier « jxr » et « wdp »
GUID de conteneur GUID_ContainerFormatWmp
GUID du décodeur CLSID_WICWmpDecoder
GUID d’encodeur CLSID_WICWmpEncoder
Prise en charge des profils L’encodeur et le décodeur prennent en charge jusqu’au profil principal et jusqu’au niveau 128.

 

Fonctionnalités du codec

Plage dynamique élevée

JPEG XR prend en charge les images à plage dynamique élevée, à l’aide de couleurs à virgule flottante ou à point fixe. Dans ces formats de couleurs, la plage numérique d’un pixel est supérieure à la plage visible. Vous pouvez donc ajuster les couleurs au-dessus ou au-dessous de la plage visible pendant les étapes de traitement intermédiaires.

  • Point fixe : dans une représentation à point fixe, 0 représente le noir et 1.0 représente la saturation maximale. Le codec JPEG XR prend en charge les formats à point fixe 16 bits et 32 bits. Pour 16 bits, 1.0 = 0x2000h, ce qui donne 13 bits pour la plage visible [0...1]. La plage totale est comprise entre -4,0 et +3,999 et est mappée de manière linéaire. Pour 32 bits, 1.0 = 0x01000000h, la plage visible est de 24 bits et la plage totale est de -128 à +127.999.
  • Virgule flottante : dans une représentation à virgule flottante, 0 représente le noir et 1.0 représente la saturation maximale. Le codec JPEG XR prend en charge les formats à virgule flottante 16 bits et 32 bits.

Vignettes

Un cadre peut être partitionné en sous-régions rectangulaires appelées vignettes. Une vignette est une zone d’une image qui contient des tableaux rectangulaires de macroblocs. Les vignettes permettent de décoder les régions de l’image sans traiter l’image entière.

Pendant l’encodage, sélectionnez le nombre de vignettes en définissant les propriétés HorizontalTileSlices et VerticalTileSlices . La taille minimale de la vignette est de 16 × 16 pixels. L’encodeur ajuste le nombre de vignettes pour maintenir cette restriction. Il existe une surcharge de stockage et de traitement associée à chaque vignette. Vous devez donc tenir compte du nombre de vignettes nécessaires pour des scénarios particuliers.

Sortie du flux d’images

La norme JPEG-XR définit deux parties d’un fichier JPEG-XR :

  • Flux de bits d’image, défini dans le corps de la norme.
  • Conteneur d’images. Le fichier contient les métadonnées Exif et XMP, et est défini dans l’annexe A de la norme.

Il est possible, et autorisé par la norme, d’incorporer le flux d’image à l’intérieur d’un autre type de conteneur de fichiers. L’encodeur prend en charge un mode de flux uniquement, qui génère le flux de bits d’image brut sans conteneur d’images. Une application peut stocker le flux de bits dans un autre format de conteneur.

Pour activer le mode stream uniquement, définissez la propriété StreamOnly .

Paramètres de qualité de l’image

Plusieurs propriétés de codec contrôlent la qualité de l’image de sortie à partir de l’encodeur.

  • ImageQuality est une propriété commune entre les codecs WIC. Il spécifie la qualité de l’image sous la forme d’une seule valeur à virgule flottante comprise entre 0,0 et 1,0,
  • Les propriétés Qualité, Chevauchement et Sous-échantillonnage donnent plus de contrôle sur les paramètres de qualité.

Pour utiliser les propriétés Quality, Overlap et Subsampling, définissez la propriété UseCodecOptions sur VARIANT_TRUE.

Si UseCodecOptions est VARIANT_FALSE (VARIANT_FALSE est la valeur par défaut), l’encodeur utilise la propriété ImageQuality . L’encodeur mappe la valeur d’ImageQuality à Quality, Overlap et Subsampling via une table de recherche.

L’encodeur ne prend pas en charge la propriété CompressionQuality .

Transcode de domaine compressé

Le codec JPEG XR peut effectuer certaines transformations d’image sans décoder les données compressées et les ré-encoder. Les opérations de domaine compressées sont très efficaces et évitent toute perte de qualité supplémentaire typique 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 :

  • Rognez une région de l’image.
  • Faire pivoter ou retourner l’image.
  • Ignorez les données de fréquence pour créer un fichier image plus petit.
  • Réorganiser l’image entre l’ordre spatial et l’ordre de fréquence.

L’encodeur JPEG XR utilise le transcodage de domaine compressé, si possible, lorsque l’image source est une image JPEG XR. Lorsque l’encodeur effectue une opération de domaine compressé, il ignore les propriétés de codec suivantes : AlphaQuality, ImageQuality, InterleavedAlpha, LosslessOverlap et Quality. Si les propriétés HorizontalTileSlices et VerticalTileSlices sont présentes , vous devez les définir sur zéro. Vous ne pouvez pas modifier la taille des vignettes d’une image dans le cadre d’un transcode de domaine compressé.

La liste suivante décrit comment effectuer les transformations d’image.

  • Pour rogner l’image, définissez la région souhaitée dans le paramètre WICRect de la méthode WriteSource .
  • Pour faire pivoter ou retourner l’image, définissez la propriété BitmapTransform .
  • Pour ignorer les données de fréquence dans l’image, définissez la propriété ImageDataDiscard . Pour ignorer les données de fréquence dans le canal alpha, définissez la propriété AlphaDataDiscard . L’abandon des données de fréquence réduit la taille du fichier encodé et peut réduire la résolution.
  • Pour modifier l’organization d’image entre la fréquence et l’ordre spatial, définissez la propriété FrequencyOrdering.

Pour désactiver le transcodage de domaine compressé et forcer l’encodeur à réencoder l’image, définissez UseCodecOptions sur VARIANT_TRUE et définissez CompressedDomainTranscode sur VARIANT_FALSE.

Options de l’encodeur

Pour définir les propriétés d’encodage, utilisez l’interface IPropertyBag2 . Pour plus d’informations, consultez Vue d’ensemble de l’encodage.

La liste suivante spécifie les options d’encodeur.

AlphaDataDiscard

Définit la quantité de données de fréquence alpha à ignorer lors d’un transcode de domaine compressé.

Type de données VARTYPE Plage Default
UCHAR VT_UI1 0–4 Aucun

 

Cette propriété s’applique uniquement si la propriété CompressedDomainTranscode a la valeur VARIANT_TRUE et que l’image contient un canal alpha planaire ou un canal alpha entrelacé ; sinon, elle est ignorée.

Pour les images qui contiennent un canal alpha planaire, les valeurs suivantes sont valides.

Valeur Description
0 Aucune donnée de fréquence image n'est ignorée.
1 Les flexbits sont ignorés. Cela réduit arbitrairement la qualité du canal alpha planaire pour l’image transcodée. , sans modification de la résolution effective. La réduction exacte de la taille et de la qualité des fichiers dépend de nombreux facteurs et ne peut pas être spécifiée exactement.
2 La bande de données de fréquence de passage élevé est ignorée, y compris les flexbits. Cela réduit efficacement la résolution du canal alpha planaire d’un 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 dans chaque bloc 4x4 de pixels de canal alpha. En règle générale, vous devez définir cette valeur uniquement lorsque la propriété ImageDataDiscard a la même valeur.
3 Les bandes de données de fréquence de passe-haut et de passage bas sont ignorées, y compris les flexbits. Cela réduit de façon ffective la résolution du canal alpha planaire d’un facteur de 16 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 dans chaque macroblock de 16 x 16 de pixels de canal alpha. En règle générale, vous devez définir cette valeur uniquement lorsque la propriété ImageDataDiscard a la même valeur.
4 Le canal alpha est complètement ignoré. Le format de pixels de l’image transcodée est modifié pour refléter la suppression du canal alpha.

 

Pour les images qui contiennent un canal alpha entrelacé, la valeur suivante est valide.

Valeur Description
4 Le canal alpha est complètement ignoré. Le format de pixels de l’image transcodée est modifié pour refléter la suppression du canal alpha.

 

Pour l’alpha entrelacée, 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 d’image, en fonction de la valeur de la propriété ImageDataDiscard .

AlphaQuality

Définit la qualité de compression de l’image de canal alpha planaire.

Type de données VARTYPE Plage Default
UCHAR VT_UI1 1–255 1

 

Cette propriété s’applique lorsque l’image a un canal alpha et que la propriété InterleavedAlpha est VARIANT_FALSE. 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.

BitmapTransform

Spécifie si l’image est pivotée ou retournée lorsqu’elle est décodée.

Type de données VARTYPE Plage Default
UCHAR VT_UI1 WICBitmapTransformOptions WICBitmapTransformRotate0

 

CompressedDomainTranscode

Active ou désactive le transcodage de domaine compressé.

Type de données VARTYPE Default
VARIANT_BOOL VT_BOOL VARIANT_TRUE

 

Pour désactiver les opérations de domaine compressé, définissez cette propriété sur VARIANT_FALSE.

FrequencyOrder

Active l’encodage dans l’ordre de fréquence. Les implémentations d’appareils d’encodeurs JPEG XR peuvent organiser un fichier dans l’ordre spatial pour réduire la mémoire requise pendant l’encodage.

Type de données VARTYPE Default
VARIANT_BOOL VT_BOOL VARIANT_TRUE

 

  • VARIANT_TRUE : ordre de fréquence. Les données de fréquence la plus faible apparaissent en premier dans le fichier, et le contenu de l’image est regroupé par sa fréquence plutôt que par son orientation spatiale. L’organisation d’un fichier par ordre de fréquence offre les meilleures performances pour tout décodage basé sur la fréquence.
  • VARIANT_FALSE : ordre spatial. L’ordre spatial réduit la mémoire nécessaire lors de l’encodage

L’ordre de fréquence est recommandé, sauf si vous avez des raisons spécifiques aux performances ou à l’application d’utiliser l’ordre spatial.

HorizontalTileSlices

Définit le nombre de vignettes horizontales.

Type de données VARTYPE Plage Default
USHORT VT_UI2 0–4095 (largeur de l’image – 1) >> 8

 

La valeur est le nombre de subdivisions horizontales ; c’est-à-dire le nombre de vignettes horizontales – 1.

IgnoreOverlap

Spécifie comment l’encodeur gère les limites de vignette pendant un transcode de domaine compressé.

Type de données VARTYPE Default
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

Cette propriété est appliquée uniquement si la propriété CompressedDomainTranscode a la valeur VARIANT_TRUE et si un transcode de sous-région d’exactement une ou plusieurs vignettes est effectué.

L’opération par défaut pour un transcode de région consiste à développer la région demandée afin d’inclure les pixels environnants requis pour le décodage des bords de la région. Si cette propriété a la valeur VARIANT_TRUE, le codec ignore les pixels environnants et seules les vignettes sélectionnées sont extraites. Si l’image source n’est pas en mosaïque ou si la région demandée inclut des vignettes partielles, ce paramètre est ignoré.

ImageDataDiscard

Définit la quantité de données de fréquence d’image à ignorer lors d’un transcode de domaine compressé.

Type de données VARTYPE Plage Default
UCHAR VT_UI1 0–3 0

 

Cette propriété s’applique uniquement si la propriété CompressedDomainTranscode a la valeur VARIANT_TRUE ; sinon, elle est ignorée.

Valeur Description
0 Aucune donnée de fréquence image n'est ignorée.
1 Les flexbits sont ignorés. Cela 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 et de la qualité des fichiers dépend de nombreux facteurs et ne peut pas être spécifiée exactement. Cette valeur retourne une erreur spécifiée pour un canal alpha entrelacé.
2 La bande de données de fréquence de passage élevé est ignorée, y compris les flexbits. Cela réduit la résolution de l’image transcodée d’un 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 dans chaque bloc de pixels 4x4. Par conséquent, l’image transcodée doit être sous-échantillonnée en conséquence chaque fois qu’elle est décodée.
3 Les bandes de données de fréquence de passe-haut et de passage bas sont ignorées, y compris les flexbits. Cela réduit la résolution de l’image transcodée d’un facteur de 16 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 dans chaque bloc macro de pixels de 16 x 16. Par conséquent, l’image transcodée doit être sous-échantillonnée en conséquence chaque fois qu’elle est décodée.

 

Si l’image contient un canal alpha entrelacé, la valeur de ImageDataDiscard est appliquée au canal alpha, sauf si la propriété AlphaDataDiscard est définie sur 4, auquel cas le canal alpha est ignoré.

Pour l’alpha planaire, les données de fréquence ignorées sont contrôlées par la propriété AlphaDataDiscard .

ImageQuality

Définit la qualité de l’image.

Type de données VARTYPE Plage Default
FLOAT VT_R4 0–1.0 0.9

 

Le niveau 1.0 offre une compression mathématiquement sans perte.

Le niveau 0.0 est le paramètre de qualité la plus faible.

InterleavedAlpha

Spécifie s’il faut encoder l’alpha entrelacée ou l’alpha planaire.

Type de données VARTYPE Default
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

  • VARIANT_TRUE : alpha entrelacée. Les informations de canal alpha sont encodées sous la forme d’un canal entrelacé supplémentaire, sans corrélation avec les canaux de contenu d’image. Ce mode est utile pour décoder l’alpha simultanément avec l’image lors de la diffusion en continu de l’image.
  • VARIANT_FALSE : alpha planaire. Un canal alpha planaire est encodé sous la forme d’une image distincte. Les données d’image et le canal alpha sont décodés indépendamment. Si vous le souhaitez, vous pouvez définir le niveau de qualité du canal alpha en définissant la propriété AlphaQuality .

L’alpha entrelacée est prise en charge uniquement pour certains formats de pixels RVB. L’alpha planaire est pris en charge pour tout format d’image qui définit un canal alpha.

Lossless

Active la compression des pertes.

Type de données VARTYPE Default
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

Si la valeur est VARIANT_TRUE, l’encodeur utilise la compression sans perte. Lorsqu’elle est définie sur VARIANT_TRUE, cette propriété remplace la propriété ImageQuality.

Chevauchement

Définit le niveau de filtrage de chevauchement. Avec le filtrage de chevauchement, les coefficients de transformation sont appliqués au-delà des limites de blocs et de macroblocs. Cela peut réduire les artefacts bloquants.

Type de données VARTYPE Plage Default
UCHAR VT_UI1 0–4 1

 

Valeur Description
0 Aucun chevauchement.
1 Un niveau de chevauchement, carrelage souple. (valeur par défaut).
2 Deux niveaux de chevauchement, carrelage souple.
3 Un niveau de chevauchement, carrelage dur
4 Deux niveaux de chevauchement, carrelage dur.

 

Définitions :

  • Un niveau de chevauchement : les valeurs encodées des blocs 4x4 sont modifiées en fonction des blocs voisins.
  • Deux niveaux de chevauchement : le premier niveau de chevauchement est appliqué. En outre, les valeurs encodées de 16x16 macroblocks sont modifiées en fonction des macroblocks voisins.
  • Mosaïque souple : le filtrage des chevauchements est appliqué sur les limites des vignettes.
  • Mosaïque dur : le filtrage des chevauchements n’est pas appliqué sur les limites des vignettes. Les vignettes matérielles peuvent introduire des artefacts visuels le long des limites des vignettes.

Si vous définissez cette propriété, définissez également UseCodecOptions sur VARIANT_TRUE.

ProgressiveMode

Active ou désactive l’encodage progressif.

Type de données VARTYPE Default
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

Valeur Description
VARIANT_TRUE Mode séquentiel (par défaut).
VARIANT_FALSE Mode progressif.

 

Qualité

Définit la qualité de la compression.

Type de données VARTYPE Plage Default
UCHAR VT_UI1 1–255 1

 

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.

Si vous définissez cette propriété, définissez également UseCodecOptions sur VARIANT_TRUE.

StreamOnly

Active ou désactive le mode de flux uniquement.

Type de données VARTYPE Default
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

Valeur Description
VARIANT_TRUE L’encodeur génère le flux d’image brut sans métadonnées.
VARIANT_FALSE L’encodeur génère le format de conteneur (flux d’images plus métadonnées).

 

Sous-échantillonnage

Définit le sous-échantillonnage chroma. Cette propriété s’applique uniquement aux images RVB.

Type de données VARTYPE Plage Default
UCHAR VT_UI1 0–3 3 si ImageQuality> 0.8 ; sinon 1

 

Valeur Description
3 Encodage 4:4:4. Conserve la résolution chromatique complète.
2 Encodage 4:2:2. La résolution chromatique est de 1/2 de résolution de luminance.
1 Encodage 4:2:0. La résolution chromatique est de 1/4 de résolution de luminance.
0 Encodage 4:0:0. Ignore toutes les valeurs de chroma et conserve uniquement la luminance. Note: Ce mode n’est pas recommandé, car le codec utilise une définition légèrement modifiée de la luminance pour améliorer les performances. Au lieu de cela, il est préférable de convertir l’image en monochrome avant l’encodage.

 

4:2:2 et 4:2:0 conservent les détails de luminance au détriment des détails de couleur.

Si vous définissez cette propriété, définissez également UseCodecOptions sur VARIANT_TRUE.

UseCodecOptions

Spécifie s’il faut utiliser les propriétés Quality, Overlap et Subsampling au lieu de la propriété ImageQuality générique.

Type de données VARTYPE Default
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

VerticalTileSlices

Définit le nombre de vignettes horizontales.

Type de données VARTYPE Plage Default
USHORT VT_UI2 0–4095 (hauteur de l’image – 1) >> 8

 

La valeur est le nombre de subdivisions verticales ; c’est-à-dire le nombre de vignettes verticales – 1.

Formats de couleurs pris en charge

Pour plus d’informations sur ces formats, consultez Formats de pixels natifs.

  • Formats RVB entiers
    • GUID_WICPixelFormat24bppRGB
    • GUID_WICPixelFormat24bppBGR
    • GUID_WICPixelFormat32bppBGR
    • GUID_WICPixelFormat48bppRGB
    • GUID_WICPixelFormat32bppBGRA
    • GUID_WICPixelFormat64bppRGBA
    • GUID_WICPixelFormat32bppPBGRA
    • GUID_WICPixelFormat64bppPRGBA
  • Formats RVB à point fixe
    • GUID_WICPixelFormat48bppRGBFixedPoint
    • GUID_WICPixelFormat64bppRGBFixedPoint
    • GUID_WICPixelFormat96bppRGBFixedPoint
    • GUID_WICPixelFormat128bppRGBFixedPoint
    • GUID_WICPixelFormat128bppRGBAFixedPoint
  • Formats RVB à virgule flottante
    • GUID_WICPixelFormat48bppRGBHalf
    • GUID_WICPixelFormat64bppRGBHalf
    • GUID_WICPixelFormat128bppRGBFloat
    • GUID_WICPixelFormat64bppRGBAFixedPoint
    • GUID_WICPixelFormat64bppRGBAHalf
    • GUID_WICPixelFormat128bppRGBAFloat
    • GUID_WICPixelFormat128bppPRGBAFloat
  • Formats de nuances de gris
    • GUID_WICPixelFormat8bppGray
    • GUID_WICPixelFormat16bppGray
    • GUID_WICPixelFormat16bppGrayFixedPoint
    • GUID_WICPixelFormat16bppGrayHalf
    • GUID_WICPixelFormat32bppGrayFixedPoint
    • GUID_WICPixelFormat32bppGrayFloat
  • Formats packed
    • GUID_WICPixelFormat16bppBGR555
    • GUID_WICPixelFormat16bppBGR565
    • GUID_WICPixelFormat32bppBGR101010
    • GUID_WICPixelFormat32bppRGBE
  • Formats CMJN
    • GUID_WICPixelFormat40bppCMYKAlpha
    • GUID_WICPixelFormat64bppCMYK
    • GUID_WICPixelFormat80bppCMYKAlpha
  • Formats de N canaux
    • 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