关于Easyx如何显示透明无背景贴图

最近用Easyx写东西玩的时候发现一个问题就是图片只能显示一整张包括背景的,比如我想写一个小人移动,也就是这个小人的图片移动,但是这个图片可能会有背景,整体观感就会很差。查询了一些资料和一点ps基础,终于解决了这个问题。

正常情况下我们显示图片,会显示整张图片,包括背景:

(这里我将控制台背景设置为红,与黑白色区分)

关于Easyx如何显示透明无背景贴图_第1张图片

接下来就是显示的时候消除这个白边, 只留下人物。

 这块原理涉及位运算,引用一个博主的说法:

首先,众所周知,在计算机中任何信息都是以二进制的方式存储的,那么也就是说每一段视频,每一张张图片的背后是无数的0和1,这里具体来谈一谈图片背后的0和1

在进入正题之前要先介绍一下RGB三原色,为后面更好的理解

每一个像素点的RGB用一个int整形变量来表示,我们知道,每一个整形变量所占的字节数为4(三十二位,但是前八个位不存数据,用作占位符),所有平均下来RGB每一个原色都占八位,所以取值范围都是是0~255,也就是说用RGB(255,0,0)表示红色,因为在R(red)对应的位置(第一个位置)上是255,而G(green)和B(blue)对应的位置上(第二个和第三个)都是0,所以是红色,同理RGB(0,255,0),RGB(0,0,255)分别表示绿色和蓝色,RGB(255,255,255)表示白色,RGB(0,0,0)表示黑色,如果理解了白色和黑色这两个颜色,下面会更简单
每张图片背后对应的RGB


由于图片也是以数字的方式(0和1),存储在计算机中的,那么就说明
我们就可以图片做一些数字可以做的事,比如位运算
是的,我们就是对图片做位运算,下面的三句话可能有点无聊加枯燥,但是也是核心之处,请静下心来仔细琢磨,
任何数和0做或运算(|)还是它本身
任何数和0做与运算(&)都是0
任何数和1做或运算(|)都是它本身

————————————————
版权声明:本文为CSDN博主「夜深人静推公式」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45848751/article/details/106983700

简要概括一下就是我们需要 黑底彩图 白底黑图(遮罩图)。

并且在显示的时候进行位运算就能得到透明贴图(其实是透明部分显示底图的颜色)

通过简单的ps操作就可以得到这两张图:

1.黑底彩图:

①先选出我们要的人物或关键图像(这里色差较大我直接用魔棒了)

关于Easyx如何显示透明无背景贴图_第2张图片

②填充非关键部分也就是背景为黑

 关于Easyx如何显示透明无背景贴图_第3张图片

 保存该素材

2.白底黑图(遮罩图)

①返回原图,并和之前一样操作选出不需要的背景部分,点击选择反向得到人物(或者直接得到背景更好了)

关于Easyx如何显示透明无背景贴图_第4张图片

② 填充人物为黑

关于Easyx如何显示透明无背景贴图_第5张图片

③再次选择反向,选中背景区域,填充为白

 关于Easyx如何显示透明无背景贴图_第6张图片

 这样两张素材就整理好了

关于Easyx如何显示透明无背景贴图_第7张图片

 接下来只要在显示图片的代码上同时显示两张底图,并加上位运算即可:

宏: “ SRCAND ” 做与运算

 宏: “SRCPAINT” 做或运算

#include
#include
#undef UNICODE
#undef _UNICODE
using namespace std;
int main()
{
	IMAGE yuan, zhezhao,bk,test;
//图片地址自己去对应图片下找
	loadimage(&yuan,_T("图片地址"),200,200,1);
	loadimage(&zhezhao,_T("图片地址"), 200, 200, 1);
	loadimage(&bk, _T("图片地址"), 800, 800, 1);
	loadimage(&test, _T("图片地址"), 200, 200, 1);
	initgraph(800, 800);
	setbkcolor(RED);//设置背景色为红色
	cleardevice(); //调用清屏cleardevice用背景色刷新背景
	//putimage(0, 0, &bk);
	putimage(100, 100 ,&zhezhao, SRCAND);//添加位运算宏
	putimage(100, 100, &yuan, SRCPAINT);

	system("pause");
}

效果图:

(左为处理完成的,右为原图) 

关于Easyx如何显示透明无背景贴图_第8张图片

即使在背景很复杂的底图下也能清晰显示人物 

你可能感兴趣的:(Easyx,随记,贴图,c++)