WEB开发网
开发学院操作系统Windows Vista 深入了解图标,使用WIC对Windows Vista图标进行解... 阅读

深入了解图标,使用WIC对Windows Vista图标进行解码

 2008-10-24 17:35:27 来源:WEB开发网   
核心提示: GetContainerFormat 方法指示解码器表示的图像格式,在这种特例中,深入了解图标,使用WIC对Windows Vista图标进行解码(6),我们可以只返回内置图标容器格式标识符 (GUID_ContainerFormatIco),GetDecoderInfo 方法可返回用于描

GetContainerFormat 方法指示解码器表示的图像格式。在这种特例中,我们可以只返回内置图标容器格式标识符 (GUID_ContainerFormatIco)。

GetDecoderInfo 方法可返回用于描述解码器的 IWICBitmapDecoderInfo 接口。该接口并不特别复杂,但却相当大,实现起来肯定会很繁琐。值得庆幸的是,它实际上只用于抽象存储在注册表中的编解码器元数据。WIC API 提供了一个库存实现,可供您使用。同样,此实现由图像工厂对象提供。图 4 中提供了一个典型的 GetDecoderInfo 实现。您只需要将解码器的 CLSID 传递到 CreateComponentInfo 方法,该方法将创建一个对象,并使用存储在注册表中的解码器元数据进行填充。

实现 GetDecoderInfo

HRESULT Kerr::IconDecoder::GetDecoderInfo(__out IWICBitmapDecoderInfo** decoderInfo)
{
if (0 == m_imagingFactory)
{
return E_UNEXPECTED;
}
if (0 == decoderInfo)
{
return E_POINTER;
}
*decoderInfo = 0;
CComPtr<IWICComponentInfo> componentInfo;
HR(m_imagingFactory->CreateComponentInfo(__uuidof(IconDecoder),
&componentInfo));
return componentInfo.QueryInterface(decoderInfo);
}

如您所料,GetFrameCount 方法可返回图像中正在解码的帧数。

最后是 GetFrame 方法,此方法可返回代表图像中特定帧的 IWIC­Bitmap­FrameDecode 接口。

至此,我已经介绍完了如何实现 IWICBitmapDecoder 接口。实现此接口后,您就能够使用 CoCreateInstance 创建解码器实例了,但只需要再做一点工作,您就可以将编解码器完全集成到由 WIC 提供的发现和仲裁框架中,而这样一来,应用程序将无需事先了解编解码器,即可自动利用它。

上一页  1 2 3 4 5 6 7  下一页

Tags:深入 了解 图标

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接