写在前面:我是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),存储在计算机中的,那么就说明

      我们就可以图片做一些数字可以做的事,比如位运算
    • 是的,我们就是对图片做位运算,下面的三句话可能有点无聊加枯燥,但是也是核心之处,请静下心来仔细琢磨,
    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,一个编程道路上的小白,一个正在前进的小白!!!
一个崇尚知识免费,技术共享,代码开源的有点不一样的小白

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

  1. 使用libjpeg-turbo库中的TurboJPEG API实现图片解压,缩放及压缩功能

    概述:前一篇博客中说到libjpeg-turbo的使用,有一些错误也在前篇博客中纠正了,现在呢,就用TurboJPEG API实现图片的解压,缩放,压缩. 1,直接上代码(简单粗暴,重要代码都加了注释 ...

  2. easyX库颜色模型和颜色及样式设置相关函数(注释版)

    0.颜色模型和颜色及样式设置相关函数概览 本次我给您带了easyX库系列的颜色模型和样式设置的相关函数,希望您能看得开心. 函数或数据类型 描述 LINESTYLE 画线样式对象. FILLSTYLE ...

  3. C语言书写推箱子(坤坤版easyx库)

    C语言书写推箱子(坤坤版easyx库) 游戏效果的展示 运用的知识点(必看) 代码的讲解 游戏地图的实现 地图的初始化 地图图片的加载 地图图片的放置 人物和箱子的移动(重点) 游戏结束的判断 音乐的 ...

  4. C/C++基于easyX库实现三星环绕小项目(C/C++)

    1,项目描述 功能1:使用图形化的方式描述地球围绕着太阳转动,月球围绕着地球转动 功能2:在转动的过程中当用户按下1,2,3,4,5,6,7时它可以变换出7种不同的颜色,当用户按下8时它可以变换从1- ...

  5. Java黑皮书课后题第10章:**10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2)

    **10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2) 题目 简短的吐槽 代码:这里将类名改用Test23_MyStrin ...

  6. 【word】如何让文本中已经使用的样式出现在样式库中?

    如图,文本中的这段文字使用了"正文"样式,但在样式库中没有,怎么办呢? 第一步:点击样式库的右下角 第二步:在弹出的样式窗格中找到你所应用的样式,点击右侧小三角,在下拉菜单中点击& ...

  7. 使用SPFx一行代码实现Office 365文档库Modern UI中批量签出文档

    Office 365中的文档库在经典UI (Classic UI)中是可以批量签出文档的: 但是当切换到现代UI(Modern UI)的时候,却无法批量签出文档了,当选择多个文档时,在顶部命令栏和下拉 ...

  8. 使用VMD中的Tachyon渲染出透明逼真的水盒子效果

    1.概述 在本教程中将重点向你展示如何通过VMD中的Tachyon制作一个高质量的可视化图像.本文假设你对vmd有一定了解(最基本的打开载入分子即可).关于vmd制作图像的快速入门中文教程,本例所使用 ...

  9. android 媒体库扫描,如何扫描出Android系统媒体库中视频文件

    Android系统启动时会去扫描系统文件,并将系统支持的视频文件(mp4,3gp,wmv)扫描到媒体库(MediaStore)中,下面代码演示如何获得这些文件的信息: publicstatic Lis ...

  10. easyx库的介绍与使用

    easyx库的介绍与使用 简单介绍 下载安装 注意事项 1.创建一个窗口(initgraph) 2.图形绘制 画圆(circle,solidcircle) 画线条(line) 画矩形(rectangl ...

最新文章

  1. 电子测量与仪器第二次作业
  2. mybatis连接oracle12乱码,使用mybatis链接oracle数据库出现账号密码错误解决
  3. Python 中的黑暗角落(三):模块与包
  4. 编写python代码估算sin(x)的值
  5. formdata 接受参数中带有class 对象_浅析JAVA中的反射机制及对Servlet的优化
  6. 浅谈Java、Python、C++、PHP、JavaScript5大编程语言该如何选择
  7. Abp Quartz配置Sqlite
  8. 调优为王!阿里巴巴彩版java性能调优实战,终于到手了!文末福利
  9. Mars《Android开发视频教程》
  10. 计算机声卡和显卡驱动,声卡或显卡驱动怎么卸载干净?声卡或显卡常见驱动问题解决方案...
  11. 大浪淘沙-新浪发展的秘密
  12. Vim快捷键(一):文档操作与文本插入
  13. [精简]托福核心词汇98
  14. 高级WEB前端游戏开发视频教程
  15. PowerPoint!让教学更精彩:PPT课件高效制作
  16. 后端思想篇:设计好接口的36个锦囊!
  17. 盒子装载图片时出现的盒子比图片实际偏高的问题
  18. k8s+Jenkins+GitLab-自动化部署tomcat项目
  19. 英语中描写”人”的词语集萃
  20. 武汉市下吴地形图国家2000地方坐标转WGS84案例

热门文章

  1. Windows XP几个版本的区分
  2. 第十六周助教心得体会
  3. 四,AXI总线协议解析
  4. WPF(C#)桌面UI控件库推荐:Newbeecoder.UI-NbGroupBox使用
  5. [WARNING]: Could not match supplied host pattern, ignoring: servers
  6. CSS基础的文字样式
  7. w ndows 10关机快捷键,windows关机快捷键winuu
  8. 乐吾乐 Topology 全新优化1.0已经内测啦
  9. linux上面使用ftdi芯片模拟485串口详解
  10. 【Lua杂谈】debug.getinfo源码分析——使用C API重写lfunctimer