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