Implementieren von IWICMetadataBlockWriter

IWICMetadataBlockWriter

Die Codierungsklasse auf Frameebene implementiert diese Schnittstelle, um alle Metadatenblöcke verfügbar zu machen und den entsprechenden Metadatenschreiber für jeden Block anzufordern. Wenn Ihr Bildformat globale Metadaten außerhalb eines einzelnen Frames unterstützt, sollten Sie diese Schnittstelle auch in der Encoderklasse auf Containerebene implementieren. Eine ausführlichere Erläuterung der Metadatenhandler finden Sie im Abschnitt zum IWICMetadataBlockReader im Abschnitt Implementieren eines WIC-Enabled Decoders.

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 verwendet einen IWICMetadataBlockReader , um den Block writer zu initialisieren. Sie können den IWICMetadataBlockReader von dem Decoder abrufen, der das Bild decodiert hat.

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]);
}

Da das Initialisieren des IWICMetadataBlockWriter mit einem IWICMetadataBlockReader einen Metadatenschreiber für jeden Metadatenleser instanziiert, der vom IWICMetadataBlockReader-Objekt verfügbar gemacht wird, muss die Anwendung nicht explizit einen Writer für jeden Metadatenblock anfordern.

GetWriterByIndex

GetWriterByIndex gibt das IWICMetadataWriter-Objekt für den n.Metadatenblock zurück, wobei n der im nIndex-Parameter übergebene Wert ist. Wenn kein Metadatenschreiber registriert ist, der den Metadatentyp im nth-Block verarbeiten kann, gibt die Komponentenfactory den Unbekannten Metadatenhandler zurück, der den Metadatenblock als binäres großes Objekt (Blob) behandelt. Es wird als Bitstream serialisiert, ohne zu versuchen, ihn zu analysieren.

AddWriter

AddWriter ermöglicht es einem Aufrufer, einen neuen Metadatenschreiber hinzuzufügen. Dies ist erforderlich, wenn eine Anwendung Metadaten in einem anderen Format als alle vorhandenen Metadatenblöcke hinzufügen möchte. Beispielsweise kann eine Anwendung einige XMP-Metadaten hinzufügen. Wenn kein XMP-Metadatenblock vorhanden ist, muss die Anwendung einen XMP-Metadatenschreiber instanziieren und die AddWriter-Methode verwenden, um ihn in die Sammlung von Metadatenschreibern aufzunehmen.

SetWriterByIndex

SetWriterByIndex wird verwendet, um einen Metadatenschreiber an einem bestimmten Index in der Auflistung hinzuzufügen. Wenn bei diesem Index derzeit ein Metadaten-Writer vorhanden ist, sollte er durch den neuen ersetzt werden.

RemoveWriterByIndex

RemoveWriterByIndex wird verwendet, um einen Metadatenschreiber aus der Sammlung zu entfernen.

Konzept

Implementieren von IWICBitmapFrameEncode

CODEC-Installation und -Registrierung

Schreiben eines WIC-Enabled CODEC

Übersicht über die Windows-Bildverarbeitungskomponente