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

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.

Referenz

Iwicbitmapsource

Iwicbitmapdecoder

Iwicbitmapframedecode

Konzept

Implementieren von IWICBitmapSource

Implementieren von IWICMetadataBlockReader

Schreiben eines WIC-Enabled CODEC

Windows Übersicht über Bildverarbeitungskomponenten