最近用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<iostream>
#include<graphics.h>
#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如何显示透明无背景贴图相关推荐

  1. 使用easyx中的putimage函数实现无背景贴图

    1,待解决的问题 如果我们要在背景图片贴上小图片玫瑰花会出现什么样的效果 背景图片 玫瑰花 贴图之后的图片(玫瑰花图片我有意缩小,为了与背景看起来融洽些) 直接上代码: #include<gra ...

  2. python显示透明图片背景

    首先,你得有一种背景色为透明的图片(ps处理过的),比如下面这样的gif图片. 之后可以使用程序在tkinter中配置好你的图像路径,这样就能在图形界面中显示出背景透明的图片了 from tkinte ...

  3. duilib修复ActiveXUI控件bug,以支持flash透明动态背景

    转载请说明原出处,谢谢~~ 昨天在QQ控件里和同学说起QQ2013登陆窗体的开发,从界面角度考虑,单单一个登陆界面是很容易做出来的.腾讯公司为了防止各种盗号行为可谓煞费苦心,QQ2013采用了动态背景 ...

  4. 长图预警,全网最全的23个免费无背景PNG素材网站汇总,让你有用不完的资源!!

    不管什么形式的内容创作,配图都是一个重中之重.找图片,俨然成为一个超级重要的事情.png素材对于设计来说,更是不可缺少的素材了! 当然了,可以PS抠图去背景(比较费时间),但是如果你有这个网站,就不要 ...

  5. CSS实现背景透明而背景上的文字不透明

    在我们设计制作一些网页的时候可能会用到半透明的效果,首先我们可能会想到用PNG图片处理,当然这是一个不错的办法,唯一的兼容性问题就是ie6 下的BUG,但这也不困难,加上一段js处理就行了.但假如我们 ...

  6. WPF实现透明无边框悬浮球

    想在工作中实现一个透明无边框并且具有动画功能的悬浮球,如图片所示,但在网上搜了之后发现发现使用wpf实现的基本没有,所以将自己实现的过程放在这里,希望给需要的一个方便,过程是这样的: <Wind ...

  7. kinect体感互动拍照软件开发,支持绿幕/无背景两种,自定义成像区域

    体感互动拍照软件主要利用抠像技术和影像合成技术实现,参与者走进游戏区域内,会看见自己的影像已经被合成到前方的屏幕里,这就是抠像互动. 产品介绍: 佩京AR虚拟拍照系统支持绿幕和无背景,通过体感控制拍摄 ...

  8. 鼠标悬浮显示文字半透明背景

    鼠标悬浮显示文字半透明背景 鼠标悬浮头像,出现文字"上传头像",之前都是使用< a title="上传头像"></a>这样的title来 ...

  9. BitBlt实现透明背景贴图

    void CBitBltDlg::OnPaint() {CPaintDC dc(this); // 用于绘制的设备上下文CRect rect;GetClientRect(&rect);int ...

最新文章

  1. CentOS Linux 7 安全基线设置
  2. Python之字符处理方法大全
  3. (笔记)Linux Root下的.gvfs出现异常解决办法
  4. 档案盒正面标签制作_包材工艺丨浅述模内标签印刷及材料的选择
  5. kaggle(01)-泰坦尼克号问题
  6. android ros 节点编写_嵌入式的我们为什么要学ROS
  7. java访问错误404_如何解决 Java web 项目中的 404 错误
  8. 云空间-全面进入免费云时代-国内首家免费T级云空间!
  9. 你(wo)不注意的和数据类型有关的小细节
  10. isag java_ISAG - WEB源码|JSP源码/Java|源代码 - 源码中国
  11. Amlogic机顶盒开发工具使用
  12. 为什么要学习数据库以及数据库的选择
  13. SqlParameter防SQL注入的方法
  14. dota2服务器切换账号,DOTA2网络卡顿得到改善 全面更换电信服务器机房
  15. 学习java的第五天 基本数据类型 double、char、boolean
  16. 原来清理手机内存,使用管家是不够的!还需删除这4个文件夹
  17. 一代测序、二代测序以及三代测序的优缺点及应用对比?
  18. PTA7-4 考试周
  19. 阿里云实践训练营第七天——Class6 NAS快速搭建个人网盘
  20. X-Order创始人陶荣祺:Libra让所有互联网应用成为开放金融的一部分

热门文章

  1. 1.1.4 Getting Started_Budding Your First App_Starting Another Activity
  2. 91wii_安装Wii Game Loader,以轻松备份并缩短加载时间
  3. Rhino gha开发如何添加动态参数
  4. java 调用多次_关于java:Mockito可以捕获多次调用方法的参数吗?
  5. 生日祝福卡片 html,生日祝福卡片怎么写
  6. outlook自动下载附件
  7. 《拖延心理学》读书笔记
  8. 有关Inner、Outer等相关词汇的理解(二)
  9. 我装Windows 8 经历以及用后感
  10. 吴恩达 老师 机器学习资料