深入了解图标,使用WIC对Windows Vista图标进行解码
2008-10-24 17:35:27 来源:WEB开发网应用程序可通过多种方法使用特定计算机上的可用编解码器。对于初学者,应用程序可以书面枚举所有的编码器和解码器,从中找出要使用的一项,或者为用户提供选择首选编解码器的选项。图 5 提供了如何枚举编码器的示例。请注意,生成的 IWICBitmapEncoderInfo 接口提供了大量有关每个编码器功能的有用信息。
枚举编码器
HRESULT EnumerateEncoders()
{
CComPtr<IWICImagingFactory> imagingFactory;
HR(imagingFactory.CoCreateInstance(CLSID_WICImagingFactory));
CComPtr<IEnumUnknown> enumerator;
HR(imagingFactory->CreateComponentEnumerator(WICEncoder,
WICComponentEnumerateDefault, &enumerator));
CComPtr<IUnknown> unknown;
while (S_OK == enumerator->Next(1,
&unknown,
0)) // ignored
{
CComQIPtr<IWICBitmapEncoderInfo> info(unknown);
unknown.Release();
if (info)
{
CLSID clsid = { 0 };
HR(info->GetCLSID(&clsid));
UINT count = 0;
HR(info->GetFriendlyName(0, // no buffer length
0, // no buffer
&count));
CString friendlyName;
HR(info->GetFriendlyName(count,
friendlyName.GetBufferSetLength(count),
&count));
friendlyName.ReleaseBuffer(count - 1);
TRACE(L"%sn", friendlyName);
}
}
return S_OK;
}
或者,应用程序可能要依赖 WIC 来自动选择合适的编解码器。正如我在上期专栏中所述,图像工厂提供了 CreateDecoder 方法,您可以使用此方法为特定图像格式创建解码器而不必考虑其实现。CreateDecoderFromStream 方法更加强大,它可以检查流并将检查结果与计算机上可用解码器中的注册信息进行比较,自动为您选择合适的解码器。
未来计划
本月内容到此结束。尽管 Windows 图像处理组件不完全支持 Windows Vista 中新的高分辨率图标格式,但您可以使用自己的编解码器来扩展 WIC,从而对其进行处理。综上所述,WIC 可能不太适合解码图标图像,因为并没有一种明确的方法区分具有不同分辨率的不同图像帧,但是练习编写解码器有助于了解 WIC 的设计原理。在大多数情况下,LoadImage 函数仍然是加载图标图像的最佳方法。
- ››深入理解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)...
更多精彩
赞助商链接