b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

关于 AlphaBlend 和 32bpp 的反锯齿图标(3)

电脑杂谈  发布时间:2016-05-21 11:00:01  来源:网络整理

绘制的效果如下所示,这个图标就是我从 Shell32.dll 中抽取的图标,可以看到其柔和的阴影,我把图标绘制在比真正尺寸少许放大的白色矩形上,这样可以很容易看出图标的尺寸大概有多大,这些图片都是图标实际提供的(而不是从缩放得到),因此能够保证设计时的效果:

反锯齿的图标也可以放在 Static 图形控件中,显示效果是同样的,当然我们要先借助其他工具制作出反锯齿的图标。实际上不仅仅是图标,还有很多位置的小位图,比如自定义绘制菜单项左侧的小位图,各种TreeView,ListView等控件中使用的小位图,可能都是用 32 BPP 的图片通过 alpha 合成来实现的,这样就可达到更柔和更美观的显示效果,。

(三)我所编写的范例程序;

(1)我写了一个小范例程序用来演示 alphablend 的效果,同时也可读取一个32BPP的图片(BMP或者PNG格式),然后保存为应用了Alpha通道后的BMP格式位图。这样的结果图片就可以直接添加到项目资源中,然后应用到Alpha合成的场合。这个工具的主要代码在文中已经提供,也没有什么技术含量,因此不再提供源码下载。

(2)我写的另一个小程序用来打开一个ICO文件,然后可以展示图标中每个图像的XOR Mask,AND Mask, XOR中的Alpha通道(仅32bpp具有)部分。右下角是通过加载图标的方式绘制的图标。通过上方的组合框可以切换图片中的图像。这个工具还有一个功能,可以把图标的当前图像另存为 BMP 格式的位图文件(然后就可以在Photoshop中观察其 Alpha 通道)。通过这个工具,主要可以观察 32 bpp 的图标的 Alpha 通道,以帮助理解反锯齿效果的原理,你可看到,AND MASK一定是“锯齿”的,因为它是二元图像只有两种颜色,如果有 Alhpa 通道,Alpha 通道会和AND MASK很像,但是黑白是相反的(因为它们的应用场合不同,因此黑白色的意义也不同,AND MASK 用于在背景上擦出黑色的绘制区域,其白色的意义是“保留背景原样”,Alpha 通道用于像素合成,其白色的意义是“此处像素完全不透明”),Alpha 通道的黑白色之间一般会有柔和的过渡(不然提供 Alpha 通道的意义就不大了),这正是图标绘制出来以后具有反锯齿效果的原因。其效果如下所示:

关于 AlphaBlend 和 32bpp 的反锯齿图标

在这个工具中值得一提的是,对于 bpp 为16的图像在绘制 AND MASK 时必须特别处理,bpp的取值通常是1,4,8,16,24,32。BPP 为 1,4,8 (注意和bpp = 8的灰度图像是有区别的)的彩色索引图像需要图像提供调色板(我在绘制时,把彩色索引图像升级成了 24 bpp 的像素数据块)。bpp等于16,24和32的图像都是通过像素数据块本身来提供 RGB 通道的。bpp=16的特殊在于,它用两个字节(WORD)表示一个像素。

通道如何分布取决于 biCompression 的取值:

如果 biCompression 是 BI_RGB,表示无压缩,没有调色板。对于 biCompression 为 BI_RGB 时,从低位到高位每5位表示一个通道(最高位没有用处,也没有 Alpha 通道),每个通道只有 2^5=32 级灰度,三个通道分享两个字节。这样在绘制 AND MASK 时不能使用在 24bpp 及以上的方式去设置像素数据(每个通道可独占一个字节)。例如在 AND MASK 中,白色是 0x7FFF(最高位为0),黑色是 0x0000,最大亮度是31 ( 0x1F )。

如果 biCompression 是 BI_BITFIELDS,(备注:这个值仅可能在 bpp 为16或32的图像中可能使用),则调色板中提供三个元素,分别是 RGB 通道的 mask ,用于指定某个通道在像素数据的占用的是哪些位。例如如果 RGB 通道各占用 5 位,那么它们的 mask 分别是 0x7C00,0x03E0,0x001F。

这个小工具的源码下载链接如下:

参考文献:

(1)本文说明了如何创建WINXP图标(给图标设计师阅读)

ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/dnwxp/html/winxpicons.htm#winxpicons_step5

(2)本文比较重要的是,介绍了如何使用XP风格控件(接受系统样式的管理)。和32位的图标(支持alpha通道)

ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/commctls/userex/cookbook.htm

(3)关于ICO文件格式,可以参考我之前写的博客:《[VC6] 图像文件格式数据查看器》

在这里我再简要总结下ICO文件格式:

Header:(6个字节。含图像个数)

Entries: (含每个图像的信息,这里的高度等于实际的高度,但这里的尺寸数据大小只有1个字节,因此应该以后面的BitmapInfoHeader中的尺寸为准)

Images:

[0] : BitmapInfoHeader (这里的高度是实际的二倍,图像的大小应该以这里的数据为准)

RGBQUAD[] (调色板,它有没有,如果有则含有多少个颜色,都取决于BitmapInfoHeader中的信息, 通常在 bpp<=8 时具有)

XOR MASK Bits (扫描行按照4 bytes 对齐,bpp 由前面的信息指定)

AND MASK Bits (扫描行按照 4 bytes 对齐,bpp = 1)

posted on

以上就是关于alphablend的全部内容,相信你一定会非常满意。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shenmilingyu/article-5750-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...