怎样在贴图时去掉背景

2022年5月14日 24点热度 0人点赞

在进行游戏编程时,经常需要在粘贴位图时去掉背景(即位图的背景不显示,例如下图所示的飞机位图)。那么,这该怎么进行呢?

下面,我们以 VS2013 为例,来给大家详细讲解。

工具/原料

  • VS2013

一、位图准备

  1. 1

    要想实现粘贴位图去背景,首先需要对要粘贴的位图进行加工,并且需要再制作一个屏蔽位图。具体方法如下:

    左图:要贴的位图(去背景部分做成黑色)

    右图:屏蔽图(将飞机部分做成黑色,去背景部分做成白色)

    END

二、原理简介

  1. 1

    位图准备好以后,首先将屏蔽图与背景图做 AND 运算,这一步的作用是露出背景。具体原理如图所示。

  2. 2

    然后,再将待粘贴的图(这里是飞机图)与背景图做 OR 运算,这一步的作用是露出待粘贴图的前景图(即飞机)。具体原理如图所示。

    END

三、代码实现

  1. 1

    作为一个最简单的示例,我们将创建一个对话框,并在对话框加上银河背景,然后将飞机位图去掉黑色背景粘贴上去。示例的效果如图所示。

  2. 2

    首先,我们使用 DialogBox 在主函数中创建一个模态对话框。其中 IDD_DLG 为对话框模板资源ID。

  3. 3

    然后,我们写对话框程序 DlgProc,并在 DlgProc 函数中声明必要的位图句柄、设备内容句柄,以及其他需要用到的变量。

    注意,在这儿我们将位图句柄声明为静态变量,以便保证位图句柄在函数内赋值后保持可用;同时将 hdc 和内存兼容DC mdc 也设为静态变量,以便仅作一次初始化。

  4. 4

    接着,我们根据前面所述,先给对话框粘上作为背景的星空位图,再将飞机位图去掉背景粘贴上去。贴图的核心代码如图所示。

    注意,一般贴图的代码适宜放在 WM_PAINT 消息中进行。

    END

注意事项

  • 一般情况下,贴图代码宜放在 WM_PAINT 消息中。
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部

laozhao

这个人很懒,什么都没留下

文章评论