Implementazione di IWICMetadataBlockWriter

IWICMetadataBlockWriter

La classe di codifica a livello di frame implementa questa interfaccia per esporre tutti i blocchi di metadati e richiedere il writer di metadati appropriato per ogni blocco. Se il formato dell'immagine supporta metadati globali, all'esterno di qualsiasi singolo frame, è necessario implementare questa interfaccia anche nella classe del codificatore a livello di contenitore. Per una descrizione più dettagliata dei gestori di metadati, vedere la sezione relativa a IWICMetadataBlockReader nella sezione Implementazione di un decodificatore WIC-Enabled.

interface IWICMetadataBlockWriter : IWICMetadataBlockReader
{
   // All methods required
   HRESULT InitializeFromBlockReader ( IWICMetadataBlockReader *pIMDBlockReader );
   HRESULT GetWriterByIndex ( UINT nIndex, IWICMetadataWriter **ppIMetadataWriter );
   HRESULT AddWriter (IWICMetadataWriter *pIMetadataWriter );
   HRESULT SetWriterByIndex ( UINT nIndex, IWICMetadataWriter *pIMetadataWriter );
   HRESULT RemoveWriterByIndex ( UINT nIndex );
}

InitializeFromBlockReader

InitializeFromBlockReader usa un oggetto IWICMetadataBlockReader per inizializzare il writer di blocchi. È possibile ottenere IWICMetadataBlockReader dal decodificatore che ha decodificato l'immagine.

UINT blockCount = 0;
IWICMetadataReader* pMetadataReader = NULL;
IWICMetadataWriter** ppMetadataWriter = NULL;
HRESULT hr;

hr = m_pBlockReader->GetCount(&blockCount);
ppMetadataWriter = IWICMetadataWriter*[blockCount];

for (UINT x=0; x < blockCount; x++)
{
   hr = m_pBlockReader->GetReaderByIndex(&pMetadataReader);
   hr = m_pComponentFactory->CreateMetadataWriterFromReader(
         pMetadataReader, NULL, &ppMetadataWriter[x]);
}

Poiché l'inizializzazione di IWICMetadataBlockWriter con un oggetto IWICMetadataBlockReader crea un'istanza di un writer di metadati per ogni lettore di metadati esposto dall'oggetto IWICMetadataBlockReader , l'applicazione non deve richiedere esplicitamente un writer per ogni blocco di metadati.

GetWriterByIndex

GetWriterByIndex restituisce l'oggetto IWICMetadataWriter per il blocco di metadati n, dove n è il valore passato nel parametro nIndex . Se non è registrato alcun writer di metadati in grado di gestire il tipo di metadati nell'n° blocco, la factory del componente restituirà il gestore metadati sconosciuto, che tratterà il blocco di metadati come oggetto binario di grandi dimensioni (BLOB). Lo serializzerà come flusso di bit senza tentare di analizzarlo.

AddWriter

AddWriter consente a un chiamante di aggiungere un nuovo writer di metadati. Questa operazione è necessaria se un'applicazione vuole aggiungere metadati di un formato diverso da uno qualsiasi dei blocchi di metadati esistenti. Ad esempio, un'applicazione può voler aggiungere alcuni metadati XMP. Se non è presente alcun blocco di metadati XMP, l'applicazione deve creare un'istanza di un writer di metadati XMP e usare il metodo AddWriter per includerlo nella raccolta di writer di metadati.

SetWriterByIndex

SetWriterByIndex viene usato per aggiungere un writer di metadati in corrispondenza di un indice specifico nella raccolta. Se un writer di metadati esiste attualmente in tale indice, il nuovo deve sostituirlo.

RemoveWriterByIndex

RemoveWriterByIndex viene usato per rimuovere un writer di metadati dalla raccolta.

Informazioni concettuali

Implementazione di IWICBitmapFrameEncode

Installazione e registrazione codec

Come scrivere un codec WIC-Enabled

Panoramica del componente Windows Imaging