关于Easyx如何显示透明无背景贴图 |
您所在的位置:网站首页 › 设置背景为透明怎么设置出来 › 关于Easyx如何显示透明无背景贴图 |
最近用Easyx写东西玩的时候发现一个问题就是图片只能显示一整张包括背景的,比如我想写一个小人移动,也就是这个小人的图片移动,但是这个图片可能会有背景,整体观感就会很差。查询了一些资料和一点ps基础,终于解决了这个问题。 正常情况下我们显示图片,会显示整张图片,包括背景: (这里我将控制台背景设置为红,与黑白色区分) 接下来就是显示的时候消除这个白边, 只留下人物。 这块原理涉及位运算,引用一个博主的说法: 首先,众所周知,在计算机中任何信息都是以二进制的方式存储的,那么也就是说每一段视频,每一张张图片的背后是无数的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.黑底彩图: ①先选出我们要的人物或关键图像(这里色差较大我直接用魔棒了) ②填充非关键部分也就是背景为黑
保存该素材 2.白底黑图(遮罩图) ①返回原图,并和之前一样操作选出不需要的背景部分,点击选择反向得到人物(或者直接得到背景更好了) ② 填充人物为黑 ③再次选择反向,选中背景区域,填充为白
这样两张素材就整理好了 接下来只要在显示图片的代码上同时显示两张底图,并加上位运算即可: 宏: “ 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"); }效果图: (左为处理完成的,右为原图) 即使在背景很复杂的底图下也能清晰显示人物 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |