在进行游戏编程时,经常需要在粘贴位图时去掉背景(即位图的背景不显示,例如下图所示的飞机位图)。那么,这该怎么进行呢?
下面,我们以 VS2013 为例,来给大家详细讲解。


一、位图准备
-
1
要想实现粘贴位图去背景,首先需要对要粘贴的位图进行加工,并且需要再制作一个屏蔽位图。具体方法如下:
左图:要贴的位图(去背景部分做成黑色)
右图:屏蔽图(将飞机部分做成黑色,去背景部分做成白色)
END
二、原理简介
-
1
位图准备好以后,首先将屏蔽图与背景图做 AND 运算,这一步的作用是露出背景。具体原理如图所示。
-
2
然后,再将待粘贴的图(这里是飞机图)与背景图做 OR 运算,这一步的作用是露出待粘贴图的前景图(即飞机)。具体原理如图所示。
END
三、代码实现
-
1
作为一个最简单的示例,我们将创建一个对话框,并在对话框加上银河背景,然后将飞机位图去掉黑色背景粘贴上去。示例的效果如图所示。
-
2
首先,我们使用 DialogBox 在主函数中创建一个模态对话框。其中 IDD_DLG 为对话框模板资源ID。
-
3
然后,我们写对话框程序 DlgProc,并在 DlgProc 函数中声明必要的位图句柄、设备内容句柄,以及其他需要用到的变量。
注意,在这儿我们将位图句柄声明为静态变量,以便保证位图句柄在函数内赋值后保持可用;同时将 hdc 和内存兼容DC mdc 也设为静态变量,以便仅作一次初始化。
-
4
接着,我们根据前面所述,先给对话框粘上作为背景的星空位图,再将飞机位图去掉背景粘贴上去。贴图的核心代码如图所示。
注意,一般贴图的代码适宜放在 WM_PAINT 消息中进行。
END
文章评论