关于easyx库中怎样贴出透明图片
写在前面:我是1024Person,一个编程道路上小白
一个崇尚知识免费,技术共享,代码开源的有点不一样的小白
今天我们来分享一下,如何利用easyx库贴出透明效果的技巧
如何利用easyx库贴出透明图片
- 原理剖析(位运算)
- 1
- 2
- 3、
- 实现
- 图片的准备
- 代码实现
- 最后
原理剖析(位运算)
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做或运算(|)都是它本身
请记住并理解这三句话
2
- 那么接下来问题就简单了,首先我们需要准备两张图片,一张黑底彩图,一张白底黑图,可能就是网上说的掩码图(俺也不是很清楚,尴尬)准备的图片如下
黑底彩图(以下简称图一)
白底黑图(以下简称图二) |
原图如下:
- 接下来就是重点了
- 首先,我们根据上面所说(任何数和0做与运算(&)都是0,任何数和1做与运算(&)都是它本身),那么如果我们用图二和背景图片做与运算的话会发生什么呢?
- 结果就是:背景图片中与黑色重叠的部分会全部变成黑色,和白色重叠的部分还是它本身如下所示
- PS:我们设置的背景为红色(setbkcolor(RED))
可以看到这样我们确实将深蓝色的背景去掉了,但是,卡通人物呢?这样显然不行,还没有达到目的- 那么接下来,
我们在同样的位置上贴出图一,和该位置的图片做或运算 - 结果如下
- 下面我们来讨论讨论,究竟是如何把卡通人物填到黑色区域中的
- 首先根据我们在上面提到过的(任何数和0做或运算都是它本身,同理0和任何数做或运算结果为任何数)
- 那么,贴入的图一中,黑底部分经过与运算之后就会变为背景色(因为背景色为RGB(255,0,0)和0做与运算之后,这一部分还是RGB(255,0,0),没有改变,在背景图的卡通人物处的黑色和贴入的图一的卡通人物重合,经过与运算之后,那么该处变为图一的卡通人物,最后就是我们看到的类似于透明背景的效果了
3、
最后我们来总结一下,
- 贴出白底黑图的图片(图二)和背景图片做与运算,
目的:将背景去掉
副作用:卡通人物也没有了 - 贴出黑底彩图的图片(图一)和目标图片做或运算
目的:弥补第一步的副作用,卡通人物填入
总结来说,第一步将背景去掉,第二部将人物填入
实现
图片的准备
打开PS软件
打开图片
制作掩码图
ctrl+c复制所选内容
新建一个工作区域(文件–>新建,或者快捷键ctrl+n)
(PS:这里要提一下的是,剪切版的大小会根据你复制的内容自动调节,所以我们不需要关心剪切板大小的问题,直接点创建就好了)
ctrl+v,将复制的卡通人物粘贴到剪切板中,黑底彩图就制作完成了,然后保存(文件–>导出—>快速导出为png,或者快捷键CTRL+s)
制作白底黑图(图像----->模式–>灰度,之后会弹出一个对话框点击拼合)
拼合
设置阈值(图像—>调整–>阈值)
PS:这里说明一下阈值调节的标准:调节到黑色和白色有明显的界限
当前图片还是黑底白图,我们要的是白底黑图,所以还要进行反向(图像---->调整---->反向)
反向之后:保存,此时我们的黑底白图就制作好了,(文件—>导出—>快速导出为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;}
最后
我想分享一下写博客的技巧:
- 首先截图工具必不可少(我用的是qq截图)
- 学会设置字体的格式,大小和字形
- 有一个制作gif的工具
分享一个介绍写博客技巧的博客(这话咋越听越绕口……),
链接: https://blog.csdn.net/cungudafa/article/details/84658703.
这篇博客干货满满哦,绝对不容错过!!
写在后面:我是1024Person,一个编程道路上的小白,一个正在前进的小白!!!
一个崇尚知识免费,技术共享,代码开源的有点不一样的小白
关于easyx库中怎样贴出透明图片相关推荐
- 使用libjpeg-turbo库中的TurboJPEG API实现图片解压,缩放及压缩功能
概述:前一篇博客中说到libjpeg-turbo的使用,有一些错误也在前篇博客中纠正了,现在呢,就用TurboJPEG API实现图片的解压,缩放,压缩. 1,直接上代码(简单粗暴,重要代码都加了注释 ...
- easyX库颜色模型和颜色及样式设置相关函数(注释版)
0.颜色模型和颜色及样式设置相关函数概览 本次我给您带了easyX库系列的颜色模型和样式设置的相关函数,希望您能看得开心. 函数或数据类型 描述 LINESTYLE 画线样式对象. FILLSTYLE ...
- C语言书写推箱子(坤坤版easyx库)
C语言书写推箱子(坤坤版easyx库) 游戏效果的展示 运用的知识点(必看) 代码的讲解 游戏地图的实现 地图的初始化 地图图片的加载 地图图片的放置 人物和箱子的移动(重点) 游戏结束的判断 音乐的 ...
- C/C++基于easyX库实现三星环绕小项目(C/C++)
1,项目描述 功能1:使用图形化的方式描述地球围绕着太阳转动,月球围绕着地球转动 功能2:在转动的过程中当用户按下1,2,3,4,5,6,7时它可以变换出7种不同的颜色,当用户按下8时它可以变换从1- ...
- Java黑皮书课后题第10章:**10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2)
**10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2) 题目 简短的吐槽 代码:这里将类名改用Test23_MyStrin ...
- 【word】如何让文本中已经使用的样式出现在样式库中?
如图,文本中的这段文字使用了"正文"样式,但在样式库中没有,怎么办呢? 第一步:点击样式库的右下角 第二步:在弹出的样式窗格中找到你所应用的样式,点击右侧小三角,在下拉菜单中点击& ...
- 使用SPFx一行代码实现Office 365文档库Modern UI中批量签出文档
Office 365中的文档库在经典UI (Classic UI)中是可以批量签出文档的: 但是当切换到现代UI(Modern UI)的时候,却无法批量签出文档了,当选择多个文档时,在顶部命令栏和下拉 ...
- 使用VMD中的Tachyon渲染出透明逼真的水盒子效果
1.概述 在本教程中将重点向你展示如何通过VMD中的Tachyon制作一个高质量的可视化图像.本文假设你对vmd有一定了解(最基本的打开载入分子即可).关于vmd制作图像的快速入门中文教程,本例所使用 ...
- android 媒体库扫描,如何扫描出Android系统媒体库中视频文件
Android系统启动时会去扫描系统文件,并将系统支持的视频文件(mp4,3gp,wmv)扫描到媒体库(MediaStore)中,下面代码演示如何获得这些文件的信息: publicstatic Lis ...
- easyx库的介绍与使用
easyx库的介绍与使用 简单介绍 下载安装 注意事项 1.创建一个窗口(initgraph) 2.图形绘制 画圆(circle,solidcircle) 画线条(line) 画矩形(rectangl ...
最新文章
- 电子测量与仪器第二次作业
- mybatis连接oracle12乱码,使用mybatis链接oracle数据库出现账号密码错误解决
- Python 中的黑暗角落(三):模块与包
- 编写python代码估算sin(x)的值
- formdata 接受参数中带有class 对象_浅析JAVA中的反射机制及对Servlet的优化
- 浅谈Java、Python、C++、PHP、JavaScript5大编程语言该如何选择
- Abp Quartz配置Sqlite
- 调优为王!阿里巴巴彩版java性能调优实战,终于到手了!文末福利
- Mars《Android开发视频教程》
- 计算机声卡和显卡驱动,声卡或显卡驱动怎么卸载干净?声卡或显卡常见驱动问题解决方案...
- 大浪淘沙-新浪发展的秘密
- Vim快捷键(一):文档操作与文本插入
- [精简]托福核心词汇98
- 高级WEB前端游戏开发视频教程
- PowerPoint!让教学更精彩:PPT课件高效制作
- 后端思想篇:设计好接口的36个锦囊!
- 盒子装载图片时出现的盒子比图片实际偏高的问题
- k8s+Jenkins+GitLab-自动化部署tomcat项目
- 英语中描写”人”的词语集萃
- 武汉市下吴地形图国家2000地方坐标转WGS84案例
热门文章
- Windows XP几个版本的区分
- 第十六周助教心得体会
- 四,AXI总线协议解析
- WPF(C#)桌面UI控件库推荐:Newbeecoder.UI-NbGroupBox使用
- [WARNING]: Could not match supplied host pattern, ignoring: servers
- CSS基础的文字样式
- w ndows 10关机快捷键,windows关机快捷键winuu
- 乐吾乐 Topology 全新优化1.0已经内测啦
- linux上面使用ftdi芯片模拟485串口详解
- 【Lua杂谈】debug.getinfo源码分析——使用C API重写lfunctimer