Реализация IWICBitmapFrameDecode

IWICBitmapFrameDecode

IWICBitmapFrameDecode — это интерфейс на уровне кадра, который предоставляет доступ к фактическим битам изображения. Этот интерфейс реализуется в классе декодирования на уровне кадра. Так как он является производным от IWICBitmapSource, ваша реализация IWICBitmapFrameDecode будет включать реализацию методов IWICBitmapSource . Дополнительные методы в IWICBitmapFrameDecode предоставляют доступ к эскизу на уровне кадра, любым контекстам цвета для изображения и средству чтения запросов метаданных для кадра.

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 возвращает эскиз текущего кадра. По соображениям производительности эскизы чаще всего кодируются в формате JPEG. Как и в случае с предварительным просмотром в декодере, не требуется и не рекомендуется предоставлять собственный декодер JPEG для эскизов. Вместо этого следует делегировать декодер JPEG, предоставляемый компонентом обработки изображений Windows (WIC).

Дополнительные сведения о эскизах см. в статье Метод SetThumbnail в разделе Реализация IWICBitmapFrameEncode.

GetColorContexts

GetColorContexts возвращает допустимые контексты цвета (также известные как цветовые профили), связанные с изображением в этом кадре. В большинстве случаев это будет только один вариант, но могут быть случаи, когда есть два или, редко, больше. Вызывающий объект передает один или несколько объектов IWICColorContext , задав параметр cCount , чтобы указать, сколько они передаются. Этот метод заполняет объекты IWICColorContext фактическими данными контекста цвета для цветовых профилей, связанных с изображением. Задайте для параметра pcActualCount фактическое число контекстов цвета, связанных с изображением, даже если это значение больше, чем можно вернуть. (В случае, когда доступно больше контекстов цвета, чем количество объектов IWICColorContext , переданных вызывающим объектом, это указывает, что вызывающий объект имеет один или несколько доступных.)

GetMetadataQueryReader

GetMetadataQueryReader возвращает IWICMetadataQueryReader , который приложение может использовать для получения метаданных из кадра изображения. Этот интерфейс реализуется обработчиком метаданных и позволяет приложению запрашивать определенные свойства метаданных, относящиеся к определенному формату метаданных. Дополнительные сведения см. в разделе Реализация IWICMetadataBlockReader.

Чтобы создать экземпляр IWICMetadataQueryReader, вызовите CreateQueryReaderFromBlockReader в IWICComponentFactory.

IWICMetadataQueryReader* pQueryReader = NULL;
HRESULT hr;

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

GetSize, GetPixelFormat и GetResolution

GetSize, GetPixelFormat и GetResolution являются понятными и возвращают запрошенные свойства изображения.

CopyPixels

CopyPixels — это метод, который приложение вызывает, когда требуется создать в памяти растровое изображение, которое можно отрисовывать на дисплее или принтере. Это метод, который выполняет фактическое декодирование битов изображения. Параметры представляют собой прямоугольник, который представляет интересующую область в исходном изображении для копирования в память; шаг, который указывает количество байтов в одной строке сканирования; размер буфера в памяти, выделенной приложением; и указатель на буфер, в который должны быть скопированы запрошенные биты изображения. (Чтобы предотвратить потенциальное переполнение буфера из-за уязвимостей системы безопасности, обязательно скопируйте в буфер только столько данных изображения, сколько указано в параметре cbBufferSize .)

CopyPalette

Только кодеки, имеющие индексированные форматы пикселей, должны реализовывать метод CopyPalette . Если изображение использует индексированные форматы, используйте этот метод для возврата палитры цветов, используемых на изображении. Если кодек не имеет индексированного формата, верните WINCODEC_ERR_PALETTEUNAVAILABLE.

Reference

IWICBitmapSource

IWICBitmapDecoder

IWICBitmapFrameDecode

Основные понятия

Реализация IWICBitmapSource

Реализация IWICMetadataBlockReader

Написание кодека WIC-Enabled

Общие сведения о компоненте обработки образов Windows