Vue d’ensemble des métadonnées WIC
Cette rubrique présente la prise en charge des métadonnées d’imagerie fournie par le composant d’acquisition d’images Windows (WIC). Il fournit une introduction à la lecture et à l’écriture de métadonnées d’image, au langage de requête de métadonnées et à l’extensibilité du gestionnaire de métadonnées.
Les métadonnées d’image sont des données incorporées dans un fichier image qui fournit des informations supplémentaires sur l’image, telles que l’appareil utilisé pour capturer l’image ou les dimensions de l’image. Bien qu’elles soient contenues dans le fichier image lui-même, ces métadonnées ne font pas partie des données de rendu. WIC fournit des interfaces qui vous permettent de lire et d’écrire ces métadonnées pour plusieurs formats de métadonnées courants, notamment XMP (Extensible Metadata Platform), Exchangeable Image File (EXIF) et Png Textual Data (tEXt).
Cette rubrique contient les sections suivantes.
- Composants requis
- Introduction
- Lecture des métadonnées d’image
- Écriture de métadonnées d’image
- Extensibilité des métadonnées
- Formats de métadonnées pris en charge
- Résumé du composant de métadonnées
- Rubriques connexes
Prérequis
Pour comprendre cette rubrique, vous devez être familiarisé avec les interfaces d’encodeur et de décodeur WIC et leurs composants COM (Component Object Model) associés, comme décrit dans La vue d’ensemble des composants d’acquisition d’images Windows. Il permet également d’avoir une connaissance générale de certains des formats de métadonnées d’imagerie utilisés aujourd’hui.
Introduction
Les métadonnées fournissent des informations étendues sur une image. Ces informations peuvent être utilisées de plusieurs façons. Une image peut contenir des métadonnées telles qu’une description, une évaluation, des étiquettes de catégorie et des informations de copyright. L’accès aux métadonnées facilite l’exécution de tâches telles que la gestion des ressources, l’emplacement des fichiers ou la détermination des informations de copyright. Par exemple, la Galerie de photos Windows dans Windows Vista vous permet d’ajouter des descriptions et des étiquettes de catégorie aux images. Cela permet une meilleure détectabilité des images et un moyen pratique de catégoriser les images. À l’aide des API WIC et des formats de métadonnées courants, les applications peuvent facilement écrire ou lire ce type de métadonnées vers ou à partir d’images.
Le diagramme suivant illustre le contenu d’un fichier JPEG qui comprend des blocs de métadonnées incorporés et des éléments de métadonnées.
Dans cet exemple d’image, les métadonnées sont incorporées dans le fichier image dans un cadre d’image. Le format JPEG ne prend pas en charge plusieurs images. Les métadonnées sont donc attachées à cette image unique. Les formats qui prennent en charge plusieurs images, comme le TIFF, peuvent avoir des métadonnées attachées à chaque image, comme le montre ce diagramme. Bien qu’ils ne soient pas courants aujourd’hui et qu’ils ne soient pas pris en charge par les codecs d’image natifs, certains formats d’image peuvent également prendre en charge les métadonnées en dehors d’un cadre d’image. WIC est suffisamment flexible pour gérer à la fois les métadonnées au niveau de l’image et les métadonnées en dehors du cadre individuel d’une image.
Lecture des métadonnées d’image
Les API WIC fournissent des composants COM qui permettent aux applications de lire et d’écrire facilement des métadonnées d’image.
La principale façon de lire les métadonnées consiste à utiliser un lecteur de requête de métadonnées (IWICMetadataQueryReader) pour accéder à des éléments de métadonnées spécifiques. Le composant lecteur de requête de métadonnées est implémenté par le codec et est accessible au niveau du décodeur ou via des images individuelles, qui est la méthode la plus courante. Le code suivant montre comment accéder à un lecteur de requête pour une trame individuelle à l’aide de la méthode GetMetadataQueryReader du lecteur de requête.
// Get the query reader
if (SUCCEEDED(hr))
{
hr = pFrameDecode->GetMetadataQueryReader(&pQueryReader);
}
Un lecteur de requête fournit des méthodes pour obtenir des informations sur des métadonnées spécifiques et un moyen de spécifier un élément de métadonnées à récupérer. Le code suivant utilise une expression de requête pour demander un élément de métadonnées spécifique dans le bloc IFD (Nested Image File Directory) App1. Pour ce faire, utilisez la méthode GetMetadataByName du lecteur de requête. Le code suivant illustre l’utilisation du lecteur de requête pour obtenir la valeur d’évaluation MicrosoftPhoto.
PROPVARIANT value;
PropVariantInit(&value);
LPCWSTR pwzRatingQuery = L"/app1/ifd/{ushort=18249}";
if (SUCCEEDED(hr))
{
hr = pQueryReader->GetMetadataByName(pwzRatingQuery, &value);
}
La variable pwzRatingQuery dans l’exemple précédent est la chaîne de requête pour accéder à l’élément de métadonnées Évaluation MicrosoftPhoto. Cette chaîne est créée à l’aide du langage de requête de métadonnées. Pour créer cette chaîne, une connaissance du format des métadonnées et du langage de requête de métadonnées est nécessaire pour récupérer des éléments de métadonnées individuels. Pour plus d’informations sur le langage de requête de métadonnées, consultez Vue d’ensemble du langage de requête de métadonnées.
En arrière-plan, un lecteur de requête utilise un lecteur de métadonnées (IWICMetadataReader) pour accéder aux métadonnées décrites par l’expression de requête. En plus d’utiliser un lecteur de requête, vous pouvez également accéder directement à un lecteur de métadonnées pour lire les métadonnées. Vous pouvez obtenir un lecteur de métadonnées à partir du décodeur ou d’images individuelles en interrogeant une interface de lecteur de blocs (IWICMetadataBlockReader).
Écriture de métadonnées d’image
Le processus d’écriture des métadonnées est similaire à la façon dont elles sont lues, sauf qu’un enregistreur de requête de métadonnées (IWICMetadataQueryWriter) est utilisé. L’interface de l’enregistreur de requêtes est implémentée par l’encodeur d’image et, comme dans le lecteur de requête, les métadonnées sont accessibles à la fois sur l’encodeur et sur les images individuelles (en fonction de la prise en charge du format d’image).
Le code suivant montre comment obtenir un enregistreur de requêtes à partir d’une trame d’encodeur et supprimer la valeur d’évaluation précédemment lue.
// Get the frame's query writer
if (SUCCEEDED(hr))
{
hr = pFrameEncode->GetMetadataQueryWriter(&pFrameQWriter);
}
if (SUCCEEDED(hr))
{
hr = pFrameQWriter->RemoveMetadataByName(L"/app1/ifd/{ushort=18249}");
}
Une autre façon d’écrire des métadonnées consiste à effectuer des mises à jour rapides des métadonnées. L’encodage rapide des métadonnées est un moyen d’écrire des métadonnées d’image sans avoir à réencoder un fichier image. Pour ce faire, écrivez de nouvelles informations de métadonnées dans une région rembourrée du format de métadonnées. L’encodeur de métadonnées rapide (IWICFastMetadataEncoder) est obtenu à partir de la fabrique de composants, en fonction du décodeur d’image. L’encodeur de métadonnées rapide obtient ensuite un enregistreur de requête qui est utilisé pour écrire les métadonnées. Enfin, l’encodeur rapide valide la modification.
Le code suivant montre comment obtenir un encodeur de métadonnées rapide et l’utiliser pour écrire la valeur MicrosoftRating.
if (SUCCEEDED(hr))
{
IWICFastMetadataEncoder *pFME = NULL;
IWICMetadataQueryWriter *pFMEQW = NULL;
hr = pFactory->CreateFastMetadataEncoderFromFrameDecode(
pFrameDecode,
&pFME);
if (SUCCEEDED(hr))
{
hr = pFME->GetMetadataQueryWriter(&pFMEQW);
}
if (SUCCEEDED(hr))
{
// Add additional metadata
PROPVARIANT value;
PropVariantInit(&value);
value.vt = VT_UI4;
value.uiVal = 99;
hr = pFMEQW->SetMetadataByName(L"/app1/ifd/{ushort=18249}", &value);
PropVariantClear(&value);
}
if (SUCCEEDED(hr))
{
hr = pFME->Commit();
}
}
Tous les formats de métadonnées ne prennent pas en charge les métadonnées rapides. Pour voir quels formats pris en charge en mode natif prennent en charge l’encodage rapide des métadonnées, consultez le tableau de la section Formats de métadonnées pris en charge plus loin dans ce document.
En arrière-plan, un enregistreur de requêtes utilise un enregistreur de métadonnées (IWICMetadataWriter) pour écrire les métadonnées décrites par l’expression de requête. En plus d’utiliser un lecteur de requête, vous pouvez également accéder directement à un enregistreur de métadonnées pour écrire des métadonnées. Vous pouvez obtenir un enregistreur de métadonnées à partir du décodeur ou des trames individuelles à l’aide de l’interrogation d’un enregistreur de blocs (IWICMetadataBlockWriter).
Extensibilité des métadonnées
Comme mentionné précédemment, WIC fournit plusieurs gestionnaires de métadonnées pour lire et écrire des métadonnées pour les formats de métadonnées courants. Toutefois, certains formats de métadonnées ne sont pas pris en charge en mode natif. Par conséquent, WIC fournit des API pour créer des gestionnaires de métadonnées supplémentaires qui peuvent étendre la prise en charge des métadonnées à d’autres formats.
Pour prendre entièrement en charge d’autres formats de métadonnées, deux types de gestionnaires doivent être développés : un lecteur de métadonnées pour lire les métadonnées et un enregistreur de métadonnées pour écrire des métadonnées. Bien que ces deux gestionnaires soient généralement implémentés par paires pour un format spécifique, ce n’est pas obligatoire. Dans certains cas, seule la capacité de lecture ou seule la capacité d’écriture est nécessaire.
Pour plus d’informations sur l’extensibilité des métadonnées à l’aide des API WIC, consultez Vue d’ensemble de l’extensibilité des métadonnées.
Formats de métadonnées pris en charge
WIC prend en charge plusieurs formats de métadonnées courants. Le tableau suivant répertorie les formats de métadonnées pris en charge, leurs versions, les formats d’image qui prennent en charge le format de métadonnées et indique si le format de métadonnées prend en charge l’encodage rapide des métadonnées. Pour plus d’informations sur l’encodage rapide des métadonnées, consultez la section Écriture des métadonnées d’image plus haut dans ce document.
Formats de métadonnées pris en charge | Version de la spécification des métadonnées | Prise en charge du format d’image | Prend en charge l’encodage rapide des métadonnées |
---|---|---|---|
App0 | JFIF 1.02 | JPEG | Non |
App1 | JFIF 1.02 | JPEG, TIFF | Non |
App13 | Unknown | JPEG, TIFF | Non |
IFD | TIFF 6.0 | JPEG, TIFF | Oui |
CISR | Unknown | JPEG, TIFF | Non |
Exif | Exif 2.2 | JPEG, TIFF | Oui |
XMP | XMP 1.0 (septembre 2005) | JPEG, TIFF | Oui |
GPS | Exif 2.2 | JPEG, TIFF | Oui |
IPTC | IPTC 4.0 | JPEG, TIFF | Oui |
Texte | PNG 1.2 | PNG | Non |
Notes
IPTC prend uniquement en charge FME si la taille des blocs augmente, car IPTC ne prend pas en charge le remplissage.
Résumé du composant de métadonnées
Le tableau suivant décrit les interfaces WIC qui prennent en charge les métadonnées et leurs composants correspondants. Ces composants fournissent l’accès aux métadonnées d’une image. Pour plus d’informations sur ces composants, consultez vue d’ensemble du composant d’acquisition d’images Windows.
Composant | Description |
---|---|
Bitmap Decoder (IWICBitmapDecoder) |
|
Bitmap Frame Decode (IWICBitmapFrameDecode) |
|
Bitmap Encoder (IWICBitmapEncoder) |
|
Bitma Frame Encode (IWICBitmapFrameEncode) |
|
Le tableau suivant décrit les composants de métadonnées WIC. Ces composants vous permettent de lire et d’écrire les métadonnées dans une image exposée par les composants répertoriés dans le tableau précédent.
Composant | Description |
---|---|
Lecteur de requête de métadonnées (IWICMetadataQueryReader) |
|
Enregistreur de requêtes de métadonnées (IWICMetadataQueryWriter) |
|
Lecteur de blocs de métadonnées (IWICMetadataBlockReader) |
|
Enregistreur de blocs de métadonnées (IWICMetadataBlockWriter) |
|
Lecteur de métadonnées (IWICMetadataReader) |
|
Enregistreur de métadonnées (IWICMetadataWriter) |
|
Fast Metadata EncoderIWICFastMetadataEncoder |
|
Rubriques connexes