实现 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映像组件 (WIC) 提供的 JPEG 解码器。

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

GetColorContexts

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

GetMetadataQueryReader

GetMetadataQueryReader 返回一个 IWICMetadataQueryReader,应用程序可以使用该 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映像组件概述