Sdílet prostřednictvím


Implementace IWICBitmapFrameDecode

IWICBitmapFrameDecode

IWICBitmapFrameDecode je rozhraní na úrovni rámce, které poskytuje přístup k skutečným bitům obrázků. Toto rozhraní implementujete ve třídě dekódování na úrovni rámce. Vzhledem k tomu, že je odvozena z IWICBitmapSource, vaše implementace IWICBitmapFrameDecode bude zahrnovat implementaci IWICBitmapSource metod. Další metody pro IWICBitmapFrameDecode poskytují přístup k miniaturě na úrovni rámce, libovolným barevným kontextům obrázku a čtečkě dotazů metadat pro rámec.

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 vrátí miniaturu aktuálního snímku. Z důvodů výkonu jsou miniatury nejčastěji kódovány ve formátu JPEG. Stejně jako u náhledu na dekodéru není nutné ani nedoporučujeme poskytovat vlastní dekodér JPEG pro miniatury. Místo toho byste měli delegovat na dekodér JPEG poskytovaný komponentou Windows Imaging Component (WIC).

Další informace o miniaturách naleznete v metodě SetThumbnail při implementaci IWICBitmapFrameEncode.

ZískejBarevnéKontexty

GetColorContexts vrátí platné kontexty barev (označované také jako profily barev) přidružené k obrázku v tomto rámečku. Ve většině případů to bude jenom jedno, ale může existovat případy, kdy existují dvě nebo zřídkakdy více. Volající předá jeden nebo více IWICColorContext objekty a nastaví parametr cCount tak, aby vyznačil, kolik se předává. Tato metoda naplní IWICColorContext objekty skutečnými daty kontextu barev pro profily barev přidružené k obrázku. Nastavte parametr pcActualCount na skutečný počet kontextů barev přidružených k obrázku, i když je větší než číslo, které můžete vrátit. (V případě, že je k dispozici více kontextů barev, než je počet předaných IWICColorContext objektů, to znamená, že je k dispozici jeden nebo více dalších.)

GetMetadataQueryReader

GetMetadataQueryReader vrátí IWICMetadataQueryReader, kterou může aplikace použít k načtení metadat z rámce obrázku. Toto rozhraní je implementováno obslužnou rutinou metadat a umožňuje aplikaci dotazovat se na konkrétní vlastnosti metadat patřící do konkrétního formátu metadat. Další informace naleznete v části Implementace IWICMetadataBlockReader.

Chcete-li vytvořit instanci IWICMetadataQueryReader, zavolejte CreateQueryReaderFromBlockReader na IWICComponentFactory.

IWICMetadataQueryReader* pQueryReader = NULL;
HRESULT hr;

hr = m_pComponentFactory->CreateQueryReaderFromBlockReader( 
  static_cast<IWICMetadataBlockWriter*>(this),
  &pQueryReader);

GetSize, GetPixelFormat a GetResolution

GetSize, GetPixelFormata GetResolution jsou vysvětlující a vrátí požadované vlastnosti obrázku.

CopyPixels

CopyPixels je metoda, kterou aplikace volá, když chce vytvořit rastr v paměti, který lze vykreslit na displej nebo tiskárnu. Toto je metoda, která provádí skutečné dekódování bitů obrázku. Parametry jsou obdélník, který představuje oblast zájmu zdrojového obrázku pro kopírování do paměti; krok, který určuje počet bajtů v jednom řádku skenování; velikost vyrovnávací paměti v paměti, kterou aplikace přidělila; a ukazatel na vyrovnávací paměť, do které se mají zkopírovat požadované bity obrázku. (Pokud chcete zabránit potenciálnímu přetečení vyrovnávací paměti a tím zavedení bezpečnostních slabin, ujistěte se, že do vyrovnávací paměti zkopírujete pouze tolik obrazových dat, kolik určuje parametr cbBufferSize.)

CopyPalette

Pouze kodeky s indexovanými pixelovými formáty musí implementovat metodu CopyPalette. Pokud obrázek používá indexovaný formát, použijte tuto metodu k vrácení palety barev použitých v obrázku. Pokud váš kodek nemá indexovaný formát, vraťte WINCODEC_ERR_PALETTEUNAVAILABLE.

Referenční

IWICBitmapSource

IWICBitmapDecoder

IWICBitmapFrameDecode

koncepční

implementace IWICBitmapSource

Implementace IWICMetadataBlockReader

Jak napsat WIC-Enabled kodek

Přehled komponent Windows Imaging