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

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

 2008-10-24 17:35:27 来源:WEB开发网   
核心提示: 应用程序可通过多种方法使用特定计算机上的可用编解码器,对于初学者,深入了解图标,使用WIC对Windows Vista图标进行解码(7),应用程序可以书面枚举所有的编码器和解码器,从中找出要使用的一项,但是练习编写解码器有助于了解 WIC 的设计原理,在大多数情况下,或者为用户提供选择首选

应用程序可通过多种方法使用特定计算机上的可用编解码器。对于初学者,应用程序可以书面枚举所有的编码器和解码器,从中找出要使用的一项,或者为用户提供选择首选编解码器的选项。图 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 函数仍然是加载图标图像的最佳方法。

上一页  2 3 4 5 6 7 

Tags:深入 了解 图标

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