代码
效果如下图所示,这是把图像在纯色背景上合成的结果,可以看出图像的半透明部分(例如底部阴影)受到的背景色影响。如果背景是其他图片,则可以看到两个图片合成的结果。

(二)适用于XP系统中的反锯齿图标。
关于 AlphaBlend 就简单说到这里。alphablend 可以使图片完美的融入到任何的背景中,而不必关心背景的内容,这是其最大的优点。图标同样具有这个要求,图标的格式是在 Windows 的早期定义的,那时候的设备条件也远没有发展到现在的地步,所以那时定义的图标,只需要定义透明部分,不透明部分就够了,所以图标的 MASK 基于节省存储空间的考虑被定义成了单色位图(二元图)。然后到了XP时代,随着硬件水平改善,CPU的运算速度,显示器的表达颜色数量,存储设备的空间都大大提高,对 UI 美观性的要求又开始突出起来,仅提高图标图片本身的颜色数量(从16色,256色仅仅提高到24bpp)还不够,于是 XP 引入了带有 alpha 的 32 bpp图标,图标格式的定义没有改变,由于32 bpp 图标具有 alpha 通道,所以其mask数据块已经变得可有可无了,因为其作用完全可以由 alpha 通道提供。实际上从更合理的角度考虑,图标中的每个图片都有一个图片信息头,在图标的图片信息头中,再提供一个 mask 的 bpp 数据(而不是像现在这样一律假定bpp为1),将会比现在的格式定义更完美。显然,使用带有 alpha 通道的图标绘制要比之前的简单图标工作量更大,原来只需要两次位操作性质的数据块传送,效率很高,而 Alpha 合成则无法整块传送,需逐点合成。
现在的 XP 系统中大量的应用了 32 BPP 的图标,这些图标通常带有渐隐的阴影效果,可以完美融合在背景中,因此也称作反锯齿图标。而早期的图标文件的像素要么透明,要么完全可见,因此是能够看出锯齿痕迹的。下面就是这两种图标的显示效果的区别:
上面的是 32 bpp 的图标,可以看到它在任意背景上都能呈现视觉感舒适的阴影效果,而下面的是普通图标,没有办法提供完美的阴影效果。现在商业软件基本都提供了这种反锯齿的 32bpp 图标,比如qq等等。
windows为了适应多种硬件条件考虑,建议图标含有多个图片,首先按照颜色数量(BPP)从低到高排列,然后再同一个BPP中按照尺寸从大到小排列,系统在显示时从图标中按照一些原则(具体准则请参考MSDN)去抽取图标最适合的图片。对 32 BPP的图标,系统的建议是提供 3 种典型尺寸(48*48,32*32,16*16),尺寸24*24一般是在开始菜单上使用,属于可选的,三种典型BPP(16色,256色,真彩色(bpp = 24或32))。因此要在程序中使用反锯齿图标,我们通常至少需要 9 幅图片。
但是在IDE中我们没法编辑这样的图标,注意如果导入了32bpp的图标到IDE中也决不能用IDE去做任何修改!否则很可能损坏其显示效果。因此我们需要借助专用的图标制作工具。这里我使用的是:IconWorkshop,这是老外编写的(一般看起来比较好比较强大比较细心的东西的作者不可能是中国人,这是一个规律。。。),网络有免费的汉化版本下载。但是可能是我不熟悉的缘故,它的编辑功能我用的不惯,所以我先在 Photoshop 中编辑图片,然后存储为 PNG 格式,再用 IconWorkshop 打开PNG,然后就是复制粘贴,IconWorkshop 有个很方便的功能,可以自动的以现有图片为基础产生所有其他大小和BPP的图片,然后再保存为 ICO 格式就可以了。
假如不自己制作,也可以借助工具(例如ICONPRO)从系统的 shell32.dll 中导出一些图标,把这样的图标添加到资源中,然后可以绘制他们,但是要注意,不能用常规的方法去做,否则绘制出来的图标是看不到反锯齿效果的。正确的方法是用 LoadImage 指定 LR_CREATEDIBSECTION 去加载图标,然后用 DrawIconEx 去指定大小的去绘制。代码如下:
代码
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shenmilingyu/article-5750-2.html
民进党当选
我有去看
质检总局都是摆设