关于easyx库中怎样贴出透明图片

写在前面:我是1024Person,一个编程道路上小白
一个崇尚知识免费,技术共享,代码开源的有点不一样的小白

今天我们来分享一下,如何利用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),存储在计算机中的,那么就说明
      我们就可以图片做一些数字可以做的事,比如位运算
    • 是的,我们就是对图片做位运算,下面的三句话可能有点无聊加枯燥,但是也是核心之处,请静下心来仔细琢磨,
    1. 任何数和0做或运算(|)还是它本身
    2. 任何数和0做与运算(&)都是0
    3. 任何数和1做或运算(|)都是它本身
    请记住并理解这三句话

2

  • 那么接下来问题就简单了,首先我们需要准备两张图片,一张黑底彩图,一张白底黑图,可能就是网上说的掩码图(俺也不是很清楚,尴尬)准备的图片如下
    黑底彩图(以下简称图一)

在这里插入图片描述

白底黑图(以下简称图二)

在这里插入图片描述
原图如下:
在这里插入图片描述

  • 接下来就是重点了
  • 首先,我们根据上面所说(任何数和0做与运算(&)都是0,任何数和1做与运算(&)都是它本身),那么如果我们用图二和背景图片做与运算的话会发生什么呢?
  • 结果就是:背景图片中与黑色重叠的部分会全部变成黑色,和白色重叠的部分还是它本身如下所示
  • PS:我们设置的背景为红色(setbkcolor(RED))
  • 在这里插入图片描述
    可以看到这样我们确实将深蓝色的背景去掉了,但是,卡通人物呢?这样显然不行,还没有达到目的
  • 那么接下来,
    我们在同样的位置上贴出图一,和该位置的图片做或运算
  • 结果如下
    在这里插入图片描述
  • 下面我们来讨论讨论,究竟是如何把卡通人物填到黑色区域中的
  • 首先根据我们在上面提到过的(任何数和0做或运算都是它本身,同理0和任何数做或运算结果为任何数)
  • 那么,贴入的图一中,黑底部分经过与运算之后就会变为背景色(因为背景色为RGB(255,0,0)和0做与运算之后,这一部分还是RGB(255,0,0),没有改变,在背景图的卡通人物处的黑色和贴入的图一的卡通人物重合,经过与运算之后,那么该处变为图一的卡通人物,最后就是我们看到的类似于透明背景的效果了

3、

最后我们来总结一下,

  1. 贴出白底黑图的图片(图二)和背景图片做与运算,
    目的:将背景去掉
    副作用:卡通人物也没有了
  2. 贴出黑底彩图的图片(图一)和目标图片做或运算
    目的:弥补第一步的副作用,卡通人物填入

总结来说,第一步将背景去掉,第二部将人物填入

实现

图片的准备

  1. 打开PS软件

  2. 打开图片
    在这里插入图片描述

  3. 制作掩码图
    在这里插入图片描述

  4. ctrl+c复制所选内容
    在里插入图片描述

  5. 新建一个工作区域(文件–>新建,或者快捷键ctrl+n)
    (PS:这里要提一下的是,剪切版的大小会根据你复制的内容自动调节,所以我们不需要关心剪切板大小的问题,直接点创建就好了)
    在这里插入图片描述

  6. ctrl+v,将复制的卡通人物粘贴到剪切板中,黑底彩图就制作完成了,然后保存(文件–>导出—>快速导出为png,或者快捷键CTRL+s)
    在这里插入图片描述

  7. 制作白底黑图(图像----->模式–>灰度,之后会弹出一个对话框点击拼合)
    在这里插入图片描述
    在这里插入图片描述
    拼合
    在这里插入图片描述

  8. 设置阈值(图像—>调整–>阈值)
    PS:这里说明一下阈值调节的标准:调节到黑色和白色有明显的界限
    在这里插入图片描述
    在这里插入图片描述

  9. 当前图片还是黑底白图,我们要的是白底黑图,所以还要进行反向(图像---->调整---->反向)
    在这里插入图片描述
    反向之后:在这里插入图片描述

  10. 保存,此时我们的黑底白图就制作好了,(文件—>导出—>快速导出为png或者快捷键CTRL+s)

代码实现

在这里插入图片描述
在这里插入图片描述

#include<iostream>
using namespace std;
#include<easyx.h>
int main()
{
	IMAGE _1, _2,_3;						//_1,代表黑底彩图 ,_2代表白底黑图 ,_3代表原图
	loadimage(&_1, L"图一.png");
	loadimage(&_2, L"图二.png");
	loadimage(&_3, L"原图.png",500,500);
	initgraph(1000, 500);
	setbkcolor(RED);
	cleardevice();
	/*---------------------------------------------------------------------------|
	|	注意:经过我们的分析得到,需要先贴白底黑图(图二)再贴黑底彩图, 	
	|			而且位置必须相同									 	  	
	|	宏: “ SRCAND ”  做与运算						   	  		 
	|	宏:  “SRCPAINT” 做或运算										  
	|---------------------------------------------------------------------------*/
	putimage(0, 0, &_2, SRCAND);
	putimage(0, 0, &_1, SRCPAINT);
	putimage(500, 0, &_3);
	/*--------------------------------------------------------------------*/
	system("pause");
	closegraph();
	return 0;

}

最后

我想分享一下写博客的技巧:

  1. 首先截图工具必不可少(我用的是qq截图)
  2. 学会设置字体的格式,大小和字形
  3. 有一个制作gif的工具

分享一个介绍写博客技巧的博客(这话咋越听越绕口……),
链接: https://blog.csdn.net/cungudafa/article/details/84658703.
这篇博客干货满满哦,绝对不容错过!!
在这里插入图片描述
写在后面:我是1024Person,一个编程道路上的小白,一个正在前进的小白!!!
一个崇尚知识免费,技术共享,代码开源的有点不一样的小白

  • 65
    点赞
  • 244
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值