实现 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 解码器。 相反,应委托给 Windows 映像组件提供的 JPEG 解码器 (WIC) 。

有关缩略图的详细信息,请参阅实现 IWICBitmapFrameEncode 上的 SetThumbnail 方法。

GetColorContexts

GetColorContexts 返回与此帧中的图像关联的有效颜色上下文 (也称为颜色配置文件) 。 在大多数情况下,这只会是一个,但在某些情况下,可能有两个或很少更多。 调用方将传入一个或多个 IWICColorContext 对象,并将 cCount 参数设置为指示传入多少个对象。 此方法使用与图像关联的颜色配置文件的实际颜色上下文数据填充 IWICColorContext 对象。 将 pcActualCount 参数设置为与图像关联的颜色上下文的实际数量,即使这大于可以返回的数量。 (如果可用的颜色上下文多于调用方传入的 IWICColorContext 对象数,则告知调用方有一个或多个其他可用对象。)

GetMetadataQueryReader

GetMetadataQueryReader 返回应用程序可用于从图像帧检索元数据的 IWICMetadataQueryReader 。 此接口由元数据处理程序实现,并允许应用程序查询属于特定元数据格式的特定元数据属性。 有关详细信息,请参阅 实现 IWICMetadataBlockReader

若要实例化 IWICMetadataQueryReader,请在 IWICComponentFactory 上调用 CreateQueryReaderFromBlockReader

IWICMetadataQueryReader* pQueryReader = NULL;
HRESULT hr;

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

GetSize、GetPixelFormat 和 GetResolution

GetSizeGetPixelFormatGetResolution 是一目了然的,并返回图像的请求属性。

CopyPixels

CopyPixels 是应用程序在内存中创建可呈现到显示器或打印机的位图时调用的方法。 这是对图像位进行实际解码的方法。 参数是一个矩形,它表示源图像中要复制到内存中感兴趣的区域;步幅,指定一个扫描行中的字节数;应用程序分配的内存中缓冲区的大小;和指向应将请求的图像位复制到的缓冲区的指针。 (若要防止潜在的缓冲区溢出引入安全漏洞,请确保仅将 cbBufferSize 参数指定的图像数据复制到缓冲区中。)

CopyPalette

只有具有索引像素格式的编解码器才能实现 CopyPalette 方法。 如果图像使用索引格式,请使用此方法返回图像中使用的调色板。 如果编解码器没有索引格式,则返回 WINCODEC_ERR_PALETTEUNAVAILABLE。

参考

IWICBitmapSource

IWICBitmapDecoder

IWICBitmapFrameDecode

概念性

实现 IWICBitmapSource

实现 IWICMetadataBlockReader

如何编写WIC-Enabled CODEC

Windows 映像组件概述