Implementieren von IWICBitmapFrameDecode
Iwicbitmapframedecode
IWICBitmapFrameDecode ist die Schnittstelle auf Frameebene, die Zugriff auf die tatsächlichen Bildbits bietet. Sie implementieren diese Schnittstelle in Ihrer Decodierungsklasse auf Frameebene. Da sie von IWICBitmapSourceabgeleitet ist, enthält Ihre Implementierung von IWICBitmapFrameDecode eine Implementierung der IWICBitmapSource-Methoden. Die zusätzlichen Methoden für IWICBitmapFrameDecode bieten Zugriff auf die Miniaturansicht auf Frameebene, alle Farbkontexte für das Bild und den Metadatenabfrageleser für den Frame.
interface IWICBitmapFrameDecode : IWICBitmapSource
{
// Required methods
HRESULT GetThumbnail ( IWICBitmapSource **ppIThumbnail );
HRESULT GetColorContexts ( UINT cCount,
IWICColorContext **ppIColorContexts, UINT *pcActualCount );
HRESULT GetMetadataQueryReader ( IWICMetadataQueryReader **ppIMetadataQueryReader );
// Methods inherited from IWICBitmapSource
HRESULT GetSize ( UINT *puiWidth, UINT *puiHeight );
HRESULT GetPixelFormat ( WICPixelFormatGUID *pPixelFormat );
HRESULT GetResolution ( double *pDpiX, double *pDpiY );
HRESULT CopyPixels ( const WICRect *prc,
UINT cbStride,
UINT cbBufferSize,
BYTE *pbBuffer );
// Optional method
HRESULT CopyPalette ( IWICPalette *pIPalette );
}
- GetThumbnail
- GetColorContexts
- GetMetadataQueryReader
- GetSize, GetPixelFormat und GetResolution
- Copypixels
- CopyPalette
GetThumbnail
GetThumbnail gibt die Miniaturansicht für den aktuellen Frame zurück. Aus Leistungsgründen werden Miniaturansichten am häufigsten in einem JPEG-Format codiert. Genau wie bei der Vorschau auf dem Decoder ist es nicht erforderlich oder empfohlen, einen eigenen JPEG-Decoder für Miniaturansichten zur Verfügung zu stellen. Stattdessen sollten Sie an den JPEG-Decoder delegieren, der von Windows Imaging Component (WIC) bereitgestellt wird.
Weitere Informationen zu Miniaturansichten finden Sie unter der SetThumbnail-Methode unter Implementing IWICBitmapFrameEncode ( Implementieren von IWICBitmapFrameEncode).
GetColorContexts
GetColorContexts gibt die gültigen Farbkontexte (auch als Farbprofile bezeichnet) zurück, die dem Bild in diesem Frame zugeordnet sind. In den meisten Fällen ist dies nur eins, aber es kann Fälle geben, in denen es zwei oder selten mehr gibt. Der Aufrufer übergibt mindestens ein IWICColorContext-Objekt und gibt mit dem cCount-Parameter an, wie viele übergeben werden. Diese Methode füllt die IWICColorContext-Objekte mit den tatsächlichen Farbkontextdaten für die farblichen Profile auf, die dem Bild zugeordnet sind. Legen Sie den pcActualCount-Parameter auf die tatsächliche Anzahl von Farbkontexten fest, die dem Bild zugeordnet sind, auch wenn dies größer als die Anzahl ist, die Sie zurückgeben können. (Wenn mehr Farbkontexte verfügbar sind als die Anzahl der VOM Aufrufer übergebenen IWICColorContext-Objekte, weist dies den Aufrufer an, dass mindestens ein anderer verfügbar ist.)
GetMetadataQueryReader
GetMetadataQueryReader gibt einen IWICMetadataQueryReader zurück, mit dem eine Anwendung Metadaten aus dem Bildrahmen abrufen kann. Diese Schnittstelle wird von einem Metadatenhandler implementiert und ermöglicht einer Anwendung das Abfragen bestimmter Metadateneigenschaften, die zu einem bestimmten Metadatenformat gehören. Weitere Informationen finden Sie unter Implementieren von IWICMetadataBlockReader.
Um einen IWICMetadataQueryReader zu instanziieren,rufen Sie CreateQueryReaderFromBlockReader für die IWICComponentFactory auf.
IWICMetadataQueryReader* pQueryReader = NULL;
HRESULT hr;
hr = m_pComponentFactory->CreateQueryReaderFromBlockReader(
static_cast<IWICMetadataBlockWriter*>(this),
&pQueryReader);
GetSize, GetPixelFormat und GetResolution
GetSize, GetPixelFormatund GetResolution sind selbsterklärend und geben die angeforderten Eigenschaften des Bilds zurück.
Copypixels
CopyPixels ist die Methode, die eine Anwendung aufruft, wenn sie eine Bitmap im Arbeitsspeicher erstellen möchte, die auf der Anzeige oder dem Drucker gerendert werden kann. Dies ist die Methode, die die eigentliche Decodierung der Bildbits übernimmt. Die Parameter sind ein Rechteck, das den für das Quellbild zu kopierenden Bereich darstellt, der in den Arbeitsspeicher kopiert werden soll. der Stride, der die Anzahl der Bytes in einer Scanzeile angibt; die Größe des Puffers im Arbeitsspeicher, der von der Anwendung zugeordnet wurde; und ein Zeiger auf den Puffer, in den die angeforderten Bildbits kopiert werden sollen. (Um zu verhindern, dass potenzielle Pufferüberläufe Sicherheitsrisiken einführen, müssen Sie nur so viele Bilddaten in den Puffer kopieren, wie der cbBufferSize-Parameter angibt.)
CopyPalette
Nur Codecs mit indizierten Pixelformaten müssen die CopyPalette-Methode implementieren. Wenn ein Bild ein indiziertes Format verwendet, verwenden Sie diese Methode, um die palette der im Bild verwendeten Farben zurück zu geben. Wenn Ihr Codec kein indiziertes Format hat, geben Sie WINCODEC _ ERR _ PALETTEUNAVAILABLE zurück.