深入了解图标,使用WIC对Windows Vista图标进行解码
2008-10-24 17:35:27 来源:WEB开发网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 方法,此方法可返回代表图像中特定帧的 IWICBitmapFrameDecode 接口。
至此,我已经介绍完了如何实现 IWICBitmapDecoder 接口。实现此接口后,您就能够使用 CoCreateInstance 创建解码器实例了,但只需要再做一点工作,您就可以将编解码器完全集成到由 WIC 提供的发现和仲裁框架中,而这样一来,应用程序将无需事先了解编解码器,即可自动利用它。
- ››深入理解JAR包
- ››深入分析Volatile的实现原理
- ››深入理解Flash Player的应用程序域(Application ...
- ››深入理解flash函数(AS2)
- ››图标设计中的几何形状应用
- ››深入理解Android消息处理系统——Looper、Handler...
- ››深入理解SET NAMES和mysql(i)_set_charset的区别
- ››深入理解Mysql字符集设置
- ››深入浅出实战攻防恶意PDF文档
- ››深入剖析防火墙策略的执行过程:ISA2006系列之六
- ››深入JavaScript与.NET Framework中的日期时间(3)...
- ››深入JavaScript与.NET Framework中的日期时间(2)...
更多精彩
赞助商链接