精通Visual C++图象编程------读书笔记8

来源:互联网 发布:2016年网络流行词 编辑:程序博客网 时间:2024/04/29 13:13
    透明显示,是指在将图象显示到背景上时,图象上颜色为某种指定颜色的象素不被显示出来,而保留该处的背景显示.被指定的特定颜色叫做透明色。利用透明显示可以在背景上显示不规则的图形,是许多图象操作的基础,比如背景动画.
    最直观的透明显示方式是遍历图象的每一象素,如果象素的颜色不等于透明色,则显示该象素,否则不显示.但这种方法的缺陷是致命的,其实现速度太慢!
    使用BitBlt函数不仅是显示位图的最快的方法,而且利用该函数的光栅操作码参数可以实现位图与背景的不同融合方式,参见第2章的表2-3.通过设置一定的屏蔽位图,并组合使用适当的光栅操作方式,就可以用Bitblt函数来实现位图的透明显示,其基本的实现步骤如下:
    (1)创建一个与需透明显示位图(源位图b0)同样大小的单色屏蔽码位图b1.将屏蔽码位图中与显示位图中需透明的象素具有相同位置的象素设置为白色,与不透明的象素具有相同的象素设置为黑色.
    (2)用BitBlt函数,以SRCAND光栅操作码将b1单色屏蔽码位图与背景位图组合起来,生成位图b2.这时不透明的象素在b2上将显示为黑色.
    (3)将单色屏蔽码位图b1取反到单色位图b3,用BitBlt函数,以SRCAND光栅操作码将b3与b0组合起来,得到位图b4.这时b4中透明的象素将显示为黑色.
    (4)用BitBlt函数,以SRCINVERT(异或)光栅操作码将第三步中得到的位图b4显示到第二步中得到的位图b2组合起来,得到位图b5.这时b5中背景将透过源位图中的透明色显示出来
    (5)用Bitblt函数,以SRCCOPY光栅操作码将b5显示到背景位图中,实现了位图的透明显示.
 
原创粉丝点击