Implementieren von IWICBitmapFrameDecode

Iwicbitmapframedecode

IWICBitmapFrameDecode ist die Schnittstelle auf Frameebene, die Zugriff auf die tatsächlichen Bildbits ermöglicht. Sie implementieren diese Schnittstelle in Ihrer Decodierungsklasse auf Frameebene. Da sie von IWICBitmapSource abgeleitet 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

GetThumbnail gibt die Miniaturansicht für den aktuellen Frame zurück. Aus Leistungsgründen werden Miniaturansichten am häufigsten im JPEG-Format codiert. Genau wie bei der Vorschau auf dem Decoder ist es nicht notwendig oder empfohlen, einen eigenen JPEG-Decoder für Miniaturansichten bereitzustellen. Stattdessen sollten Sie an den JPEG-Decoder delegieren, der von windows Imaging Component (WIC) bereitgestellt wird.

Weitere Informationen zu Miniaturansichten finden Sie in der SetThumbnail-Methode unter 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 eine, aber es kann Fälle geben, in denen es zwei oder selten mehr gibt. Der Aufrufer übergibt ein oder mehrere IWICColorContext-Objekte und legt den cCount-Parameter fest, um anzugeben, wie viele sie übergeben werden. Diese Methode füllt die IWICColorContext-Objekte mit den tatsächlichen Farbkontextdaten für die Farbprofile auf, die dem Bild zugeordnet sind. Legen Sie den parameter pcActualCount auf die tatsächliche Anzahl von Farbkontexten fest, die dem Bild zugeordnet sind, auch wenn diese größer als die Zahl ist, die Sie zurückgeben können. (Wenn mehr Farbkontexte als die Anzahl der vom Aufrufer übergebenen IWICColorContext-Objekte verfügbar sind, teilt dies dem Aufrufer mit, dass mindestens ein anderer verfügbar ist.)

GetMetadataQueryReader

GetMetadataQueryReader gibt einen IWICMetadataQueryReader zurück, den eine Anwendung zum Abrufen von Metadaten aus dem Bildframe verwenden kann. Diese Schnittstelle wird von einem Metadatenhandler implementiert und ermöglicht es einer Anwendung, bestimmte Metadateneigenschaften abzufragen, 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, GetPixelFormat und 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 dem Bildschirm oder Drucker gerendert werden kann. Dies ist die Methode, die die eigentliche Decodierung der Bildbits durchführt. Die Parameter sind ein Rechteck, das den relevanten Bereich im Quellbild darstellt, das in den Arbeitsspeicher kopiert werden soll. die Stride, die die Anzahl der Bytes in einer Scanzeile angibt; die Größe des Puffers im Arbeitsspeicher, der von der Anwendung zugewiesen wurde; und ein Zeiger auf den Puffer, in den die angeforderten Bildbits kopiert werden sollen. (Um zu verhindern, dass potenzielle Pufferüberläufe zu Sicherheitsrisiken fü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 im Bild verwendete Farbpalette zurückzugeben. Wenn Ihr Codec kein indiziertes Format aufweist, geben Sie WINCODEC_ERR_PALETTEUNAVAILABLE zurück.

Referenz

Iwicbitmapsource

Iwicbitmapdecoder

Iwicbitmapframedecode

Konzept

Implementieren von IWICBitmapSource

Implementieren von IWICMetadataBlockReader

Schreiben eines WIC-Enabled CODEC

Übersicht über die Windows-Imageerstellungskomponente