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

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

 2008-10-24 17:35:27 来源:WEB开发网   
核心提示: QueryCapability 方法用于检查给定流并确定它是否能够解码图像,如果能,深入了解图标,使用WIC对Windows Vista图标进行解码(5),则指示它能解码图像中的所有帧 (WIC­BitmapDecoderCapabilityCanDecodeAllImages),

QueryCapability 方法用于检查给定流并确定它是否能够解码图像。如果能,则指示它能解码图像中的所有帧 (WIC­BitmapDecoderCapabilityCanDecodeAllImages),还是只能解码其中的部分帧 (WICBitmap-DecoderCapabilityCanDecodeSomeImages)。此外,还可以指定其他功能标志。切记在返回前还原流位置。您可以通过 QueryCapability 读取我在上一部分中介绍的图标格式的基础结构,从而确保该结构是解码器预期的结构。您可能还希望枚举图标中的图像,以确保可以进行加载。

Initialize 方法提供可供解码器读取的流。根据所提供的选项,它可能会立即加载所有帧 (WICDecodeMetadataCacheOnLoad),也可能仅在使用 GetFrame 方法特别要求 (WICDecode­MetadataCacheOnDemand) 时进行加载。如果属于后者,您需要一直持有流,直到所有帧加载完毕。

以下是我执行的一些操作,可能会对您有所帮助:我发现,可以根据图标中每个图像的图像大小和偏移创建子流,然后将这些子流传递到 IWICBitmapFrameDecode 接口实现中,这很有用。幸运的是,借助我在 2008 年 4 月一期的专栏中介绍的 WIC 图像工厂对象,可以非常轻松地完成此操作。图 3 显示了我借助 WIC 流对象创建子流时使用的 CreateSubStream 帮助程序函数。

创建子流

HRESULT CreateSubStream(IWICImagingFactory* factory,
IStream* stream,
ULONGLONG offset,
ULONGLONG maxSize,
IStream** subStream)
{
ASSERT(0 != factory);
ASSERT(0 != stream);
ASSERT(0 != subStream);
*subStream = 0;
CComPtr<IWICStream> wicStream;
HR(factory->CreateStream(&wicStream));
ULARGE_INTEGER quadOffset = { 0 };
quadOffset.QuadPart = offset;
ULARGE_INTEGER quadMaxSize = { 0 };
quadMaxSize.QuadPart = maxSize;
HR(wicStream->InitializeFromIStreamRegion(stream,
quadOffset,
quadMaxSize));
return wicStream.QueryInterface(subStream);
}

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

Tags:深入 了解 图标

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