Udostępnij za pośrednictwem


Implementowanie interfejsu IWICBitmapFrameDecode

IWICBitmapFrameDecode

IWICBitmapFrameDecode to interfejs poziomu ramki, który zapewnia dostęp do rzeczywistych bitów obrazu. Ten interfejs należy zaimplementować w klasie dekodowania na poziomie ramki. Ponieważ pochodzi on z IWICBitmapSource, implementacja IWICBitmapFrameDecode będzie zawierać implementację metod IWICBitmapSource. Dodatkowe metody IWICBitmapFrameDecode zapewniają dostęp do miniatury na poziomie ramki, wszelkich kontekstów kolorów obrazu i czytnika zapytań metadanych dla ramki.

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 zwraca miniaturę bieżącej klatki. Ze względu na wydajność miniatury są najczęściej kodowane w formacie JPEG. Podobnie jak w przypadku podglądu na dekoderze, nie jest konieczne ani zalecane podanie własnego dekodera JPEG dla miniatur. Zamiast tego należy delegować do dekodera JPEG dostarczonego przez składnik Windows Imaging Component (WIC).

Aby uzyskać więcej informacji na temat miniatur, zobacz metodę SetThumbnail w ramach Implementing IWICBitmapFrameEncode.

GetColorContexts

GetColorContexts zwraca prawidłowe konteksty kolorów (znane również jako profile kolorów) skojarzone z obrazem w tej ramce. W większości przypadków będzie to tylko jeden, ale mogą istnieć przypadki, w których występuje dwa lub, rzadko, więcej. Obiekt wywołujący przekaże co najmniej jeden obiekt IWICColorContext, ustawiając parametr cCount, aby wskazać liczbę przekazywanych obiektów. Ta metoda wypełnia obiekty IWICColorContext rzeczywistymi danymi kontekstu kolorów dla profilów kolorów skojarzonych z obrazem. Ustaw parametr pcActualCount na rzeczywistą liczbę kontekstów kolorystycznych skojarzonych z obrazem, nawet jeśli jest większa niż liczba, którą można zwrócić. (W przypadku, gdy dostępnych jest więcej kontekstów kolorów niż liczba obiektów IWICColorContext przekazanych przez wywołującego, oznacza to, że dostępne są jeden lub więcej dodatkowych kontekstów).

GetMetadataQueryReader

GetMetadataQueryReader zwraca IWICMetadataQueryReader, którego aplikacja może użyć do pobierania metadanych z klatki obrazu. Ten interfejs jest implementowany przez program obsługi metadanych i umożliwia aplikacji wykonywanie zapytań o określone właściwości metadanych należących do określonego formatu metadanych. Aby uzyskać więcej informacji, zobacz Implementowanie interfejsu IWICMetadataBlockReader.

Aby utworzyć instancję IWICMetadataQueryReader, wywołaj CreateQueryReaderFromBlockReader dla IWICComponentFactory.

IWICMetadataQueryReader* pQueryReader = NULL;
HRESULT hr;

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

GetSize, GetPixelFormat i GetResolution

getSize, GetPixelFormati GetResolution są objaśniające i zwracają żądane właściwości obrazu.

KopiujPiksele

CopyPixels to metoda wywoływana przez aplikację, gdy chce utworzyć mapę bitową w pamięci, którą można renderować na ekranie lub drukarce. Jest to metoda, która wykonuje rzeczywiste dekodowanie bitów obrazu. Parametry obejmują prostokąt, który reprezentuje region zainteresowania w obrazie źródłowym do skopiowania do pamięci; krok, który określa ilość bajtów w jednym wierszu skanowania; rozmiar buforu w pamięci przydzielonej przez aplikację; i wskaźnik do buforu, do którego powinny zostać skopiowane żądane fragmenty obrazu. (Aby zapobiec potencjalnym przepełnieniom buforu, które mogą wprowadzić luki w zabezpieczeniach, pamiętaj, aby skopiować tylko tyle danych obrazu do buforu, ile określa parametr cbBufferSize.)

CopyPalette

Tylko kodetki, które mają indeksowane formaty pikseli, muszą implementować metodę CopyPalette. Jeśli obraz używa indeksowanego formatu, użyj tej metody, aby zwrócić paletę kolorów używanych na obrazie. Jeśli twój kodek nie ma indeksowanego formatu, zwróć WINCODEC_ERR_PALETTEUNAVAILABLE.

referencje

IWICBitmapSource

IWICBitmapDecoder

IWICBitmapFrameDecode

koncepcyjny

Implementacja IWICBitmapSource

Implementowanie IWICMetadataBlockReader

Jak napisać WIC-Enabled CODEC

Składnik programu Windows Imaging — omówienie