Implementieren eines WIC-Enabled Decoders
Zum Implementieren Windows WIC-Decoders (Imaging Component) müssen zwei Klassen geschrieben werden. Die Schnittstellen in diesen Klassen entsprechen direkt den Decoderaufgaben, die im Abschnitt Decoding von How The Windows Imaging Component (Funktionsweiseder Bildverarbeitungskomponente) beschrieben werden.
Eine der -Klassen stellt Dienste auf Containerebene bereit und implementiert die IWICBitmapDecoder-Schnittstelle. Wenn Ihr Imageformat Metadaten auf Containerebene unterstützt, müssen Sie auch die IWICMetadataBlockReader-Schnittstelle für diese Klasse implementieren. Es wird empfohlen, die IWICBitmapCodecProgressNotification-Schnittstelle sowohl im Decoder als auch im Encoder zu unterstützen, um eine bessere Benutzererfahrung zu unterstützen.
Die andere Klasse, die Sie implementieren, stellt Dienste auf Frameebene zur Verfügung und führt die eigentliche Decodierung der Bildbits für jeden Frame im Container durch. Diese Klasse implementiert die IWICBitmapFrameDecode-Schnittstelle und die IWICMetadataBlockReader-Schnittstelle. Wenn Sie einen Decoder für ein Rohformat schreiben, implementieren Sie auch die IWICDevelopRaw-Schnittstelle für diese Klasse. Zusätzlich zu den erforderlichen Schnittstellen wird dringend empfohlen, die IWICBitmapSourceTransform-Schnittstelle für diese Klasse zu implementieren, um die bestmögliche Leistung für Ihr Bildformat zu ermöglichen.
Eines der von WIC bereitgestellten Objekte ist imagingFactory. Sie verwenden häufig die IWICComponentFactory-Schnittstelle für dieses Objekt, um verschiedene Komponenten zu erstellen. Da sie häufig verwendet wird, sollten Sie einen Verweis darauf als Membereigenschaft für Ihre Decoder- und Encoderklassen behalten.
IWICImagingFactory* m_pImagingFactory = NULL;
IWICComponentFactory* m_pComponentFactory = NULL;
HRESULT hr;
hr = CoCreateInstance(CLSID_WICImagingFactory, NULL,
CLSCTX_INPROC_SERVER, IID_IWICImagingFactory,
(LPVOID*) m_pImagingFactory);
hr = m_pImagingFactory->QueryInterface(
IID_IWICComponentFactory, (void**)&m_pComponentFactory);