深入了解图标,使用WIC对Windows Vista图标进行解码
2008-10-24 17:35:27 来源:WEB开发网了解一般概念后,现在让我们来看一个具体的示例。我将重点介绍如何实现适用于 Windows 图标格式的备用解码器。选用图标格式的原因有两个。首先,Windows Vista ® 引入了对图标格式的更新,这本身就非常值得注意;稍后我将深入介绍这些更改。其次,Windows Vista附带的内置解码器实际上并不支持更新后的图标格式。
Windows 图标发展史
Windows 经历了多次蜕变,图标格式也同样有着自己的发展历史。在 16 位 Windows 操作系统刚刚问世时,仅支持设备相关位图 (DDB) 格式。这种位图指定了宽度和高度(以像素为单位),还指定了一个表,用于将像素值映射到特定设备调色板中的条目。设备不同,支持的分辨率和拥有的着色功能自然也不同,因此,要在不同设备之间移动这些位图并不容易。但由于 DDB 效率很高,所以至今仍然沿用它来执行某些操作。设备无关位图 (DIB) 格式的引入解决了 DDB 中存在的所有问题。这种位图本身附带颜色表,独立于任何特定设备。这样,位图的像素就会映射到位图的颜色表,此表使用红、绿、蓝 (RGB) 颜色值明确定义像素颜色。
当然,图标格式可以使用 DIB 格式,但存在一个问题。DIB 已经使用 Alpha 通道来表示透明度。当时的硬件也不允许对每个像素添加一个额外的字节,但 Alpha 通道却需要对每个像素使用一个额外的字节。这就需要改用其他解决方案。DIB 将在色位图之后附加一个额外的位图,此位图是一个有效的位掩码,用于标识色位图中的透明像素和不透明像素。通过使用 BitBlt 函数传输位块,可以轻松地使用布尔运算将位掩码中的位与目标设备表面相结合;而且此方法效率很高,这一点尤为重要。
图标格式本身包含多个 DIB 结构,每个结构都有与其相关的位掩码,可获得不同大小。这样,单个图标即可针对不同方案提供图像。例如,如果在桌面上显示图标,将使用 32×32 像素 DIB。如果在窗口的标题栏中显示图标,将使用 16×16 像素 DIB。此外,图标格式也需要符合不同的显示功能,因此还支持带有不同图标尺寸的颜色表的其他 DIB。
- ››深入理解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)...
更多精彩
赞助商链接