C语言图形库——EasyX基本贴图

在C语言的学习过程中,接触最多的就是黑乎乎的DOS窗口,这也是在消磨学习者的兴趣,学到最后可能还不知道C语言到底能做什么,难道就是输入输出数据吗?当然不是,C的用处很广泛,这里不做讨论。我们能不能用C语言做些好玩的东西,当然可以,我们可以做游戏,可以做动画,还有很多能装逼的东西,在外行眼里看来,你的逼格高的就不是一点点了。做游戏、做动画一定要用到图片、音频等,怎么用C语言显示出来呢?这里我们就要用到EasyX库了,在文章末尾有百度网盘链接,下载后双击安装即可,但有编译器限制,VC、VS都可以安装,Dev C++目前不能安装EasyX库。文章的末尾给出了几个小项目。

当我们安装好EasyX库后,该怎么用呢?我们首先来显示一张图片,首先我们要创立一个图形窗口(要建立.cpp文件才可以用EasyX,因为EasyX库是属于C++范畴的,但在编程风格上用的是C语言)。

1、添加头文件:

 #include <graphics.h> 

2、定义图像变量:

 IMAGE image1;

IMAGE,通俗的说可视为图,型,和int,char一样,IMAGE image1就是说定义一个图片型变量image1。

3、创立图形窗口:

initgraph(800, 600); 

这个函数就是说建立一个宽为800像素,高为600像素的图形窗口。

4、加载图片:

loadimage(&image1, L"bird.png", 200, 100); 

选择一张图片,我这里的图片名为bird.jpg,将它放在和你源文件同一目录下。这个函数的意思就是说将这张名为bird.png的图片与image1绑定在一块,用image1代表bird.png,并将其宽和高拉伸为200和100像素点。

5、显示图片:

putimage(200,300,&image1);

这个函数的意思就是说将image1显示在所创立的图形窗口的(200,300)处,这是一个坐标
在这里插入图片描述

最终的程序是这样的:
在这里插入图片描述
在有的时候,我们想要把一张图片的某一部分显示在另一张图片上,例如,把图1中的马显示在以图2为背景的图中。
在这里插入图片描述
图1
在这里插入图片描述
图2
这个时候我们不能直接贴,否则无法去除图1中的背景,如图3结果。这很显然不是我们想要的。
在这里插入图片描述
图3
而我们真正想要的是这样的,如图4。
在这里插入图片描述
图4

这个时候我们需要用到图片编辑软件,只要能抠图就行,PS是最佳选择,此处就以PS为例(文章末尾有PS百度网盘连接,安装过程十分简单,不做赘述),选择图1用PS打开,W键用于抠图,把这个圆形光标调小一些,仔细把马选中,Ctrl+c复制,然后选择文件->新建一个黑底剪切板,Ctrl+v粘贴,便可得到图5,把它导出来,继续选择文件->新建一个白底剪切板,Ctrl+v粘贴,在用W键把这个马选择出来,鼠标右键填充,选择黑色,此时在右键选择取消选择便可得到图6,再把它导出来。

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

将图2、图5、图6放在项目中,分别命名为bk.jpg、1.png、2.png。
代码如下:

#include<stdio.h>
#include<graphics.h>
#include<stdlib.h>int main()
{IMAGE bk, image1, image2;initgraph(1000, 600);loadimage(&bk,"bk.jpg",1000,600);loadimage(&image1, "1.png");loadimage(&image2, "2.png");putimage(0, 0, &bk);//先贴黑白图,即2.pngputimage(50, 100, //显示的位置286, 167,//图片的大小,也可自行设置大小&image2, //选择需要贴的图0, 0,	//从该图片的起始位置开始显示SRCAND	//绘制出的像素颜色 = 屏幕颜色 & 图像颜色);//再贴彩黑图,即1.pngputimage(50, 100, 286, 167,&image1, 0, 0,	//与上相同SRCPAINT							//绘制出的像素颜色 = 屏幕颜色 | 图像颜色);system("pause");return 0;
}

为什么这样可以把马显示在图2中呢?
我们知道,三原色可以构成任何一种颜色,其中黑色的三原色构成为(0,0,0),白色为(255,255,255),其余的颜色在0—255之间。
在8位数与运算中,任何数与255 相与都等于该数,与0 相与都等于0 。比如我们拿100和255相与,255的二进制表示就是11111111,100的二进制是01100100,二者相与自然就是01100100,也就是100,后面的或运算也同理。我们先拿黑白图(图6)按的形式贴在背景图(图2)上,因为白色的三原色数值是最大的,非白色白色等于非白色,又因为黑色的三原色数值最小,所以非黑色黑色等于黑色。示意图如下:
在这里插入图片描述
接着按或贴彩黑图(图5),一样的道理,在8位数或运算中,任何一个数与0 相或 都等于该数,非黑色黑色等于非黑色。示意图如下:
在这里插入图片描述

EasyX链接:
链接:https://pan.baidu.com/s/1CTWMbqaATgx663M01vRA5A
提取码:2chn

PS软件链接
链接:https://pan.baidu.com/s/1PfaBDBnq07CnDzvwWIBZ2g
提取码:m3sd

小项目
自定义一个屏保程序

制作一个简易钟表

EasyX常用函数请点此处查看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一气之下,手撸了一个抖音去水印的工具!

百因必有果说一下我为什么要做个抖音视频去水印工具&#xff0c;其实是因为我的沙雕女友&#xff0c;她居然刚我~有天晚上她在抖音看见一个非常具有 教育意义 的视频&#xff0c;“男人疼媳妇就该承包全部家务活”&#xff0c;然后它就想把视频下载下来&#xff0c;分享到她的姐…

css 隐藏元素 显示元素_使用CSS打印时如何隐藏元素?

css 隐藏元素 显示元素Introduction: 介绍&#xff1a; We have come across many challenges while developing a website or web page and every challenge comes with new learnings. It is a trait of a good developer who develops or creates websites or web pages by…

Java新特性:数据类型可以扔掉了?

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;在很久很久以前&#xff0c;我们写代码时要慎重的考虑变量的数据类型&#xff0c;比如下面这些&#xff1a;枚举&#xff1a…

Spyder:Python中机器学习的强大武器

So, first of all, you would need to install Anaconda distribution which can be downloaded from the link https://www.anaconda.com/download/ (for Windows users only). 因此&#xff0c;首先&#xff0c;您需要安装Anaconda发行版 &#xff0c;可以从链接https://www.…

对内存重叠的深入认识

内存重叠&#xff1a;拷贝的目的地址在源地址范围内。所谓内存重叠就是拷贝的目的地址和源地址有重叠。在函数strcpy和函数memcpy都没有对内存重叠做处理的&#xff0c;使用这两个函数的时候只有程序员自己保证源地址和目标地址不重叠&#xff0c;或者使用memmove函数进行内存拷…

Android特效 五种Toast具体解释

Toast是Android中用来显示显示信息的一种机制&#xff0c;和Dialog不一样的是&#xff0c;Toast是没有焦点的&#xff0c;并且Toast显示的时间有限&#xff0c;过一定的时间就会自己主动消失。 1.默认效果: 代码:Toast.makeText(getApplicationContext(), "默认Toast样式&…

为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较?

△一个对Coding有着独特追求的人△作者 l Hollis来源 l Hollis&#xff08;ID&#xff1a;hollischuang&#xff09;BigDecimal&#xff0c;相信对于很多人来说都不陌生&#xff0c;很多人都知道他的用法&#xff0c;这是一种java.math包中提供的一种可以用来进行精确运算的类型…

动图演示:手撸堆栈的两种实现方法!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;正式开始之前&#xff0c;先和各位朋友聊聊公众号后期的一些打算&#xff0c;后面的文章计划写一些关于数据结构和算法的内容…

多图带你彻底理解Java中的21种锁!

作者 | 悟空聊架构来源 | 悟空聊架构&#xff08;ID&#xff1a;PassJava666&#xff09;本篇主要内容如下&#xff1a;本篇主要内容本篇文章已收纳到我的Java在线文档、 Github我的SpringCloud实战项目持续更新中帮你总结好的锁&#xff1a;序号锁名称应用1乐观锁CAS2悲观锁sy…

杨辉三角——数组解决

杨辉三角如图下所示&#xff0c;每一行的第一个数和最后一个数都为1&#xff0c;每一行中间的数&#xff08;出去第一个和最后一个&#xff09;a等于上一行与其相同列数的数b与数b前面的数之和。例&#xff1a; 第3行第2列的数是3&#xff0c;它就等于第2行第2列的数&#xff…

VS生成的exe文件如何在其他电脑上运行

在VS编译器上编写的程序都会生成一个exe文件&#xff0c;有时候写了一个很装逼的程序想在别人电脑炫耀一下&#xff0c;奈何将这个exe文件拷贝过去并不能运行&#xff0c;直接宣告装逼失败。为此将介绍一下如何将生成的exe文件在其他电脑上运行&#xff0c;步骤如下&#xff1a…

netty websocket 简单消息推送demo

2019独角兽企业重金招聘Python工程师标准>>> 今天心情很不好&#xff01;&#xff01;&#xff01; 原因保密。 这篇是基于"netty与websocket通信demo"。 错误想法&#xff1a;大量客户请求&#xff0c;共用一个worker&#xff0c;来实现推送。 正确作法&…

给 JDK 官方提了一个 Bug,结果...

图 by&#xff1a;石头北京-望京关于作者&#xff1a;程序猿石头(ID: tangleithu)&#xff0c;现任阿里巴巴技术专家&#xff0c;清华学渣&#xff0c;前大疆后端 Leader。背景分享一下之前踩的一个坑&#xff0c;背景是这样的&#xff1a;我们的项目依赖于一个外部服务&#x…

解决exe文件在别人电脑上运行缺失文件情况

这里就以vs2013为例&#xff1a;编译后生成的exe文件拷贝到别人电脑上运行是会弹出一个窗口说缺失MSVCR120.dll和MSVCR120D.dll这两个文件。&#xff08;其他vs版本的编译器在所提示的缺失文件按下述方法也可解决&#xff09;下面就介绍一种方法解决。 1、在VS2013软件中找到MS…

32张图带你彻底搞懂事务和锁!

作者 | 悟空聊架构来源 | 悟空聊架构&#xff08;ID&#xff1a;PassJava666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;PassJava&#xff09;本篇主要内容如下&#xff1a;本篇主要内容一、事务1.1 什么是事务为单个工作单元而执行的一系列操作。如查询、修改数…

分布式映射与集中式映射_K映射上的表达式映射和组包围

分布式映射与集中式映射In the previous article (Karnaugh Map 2, 3 and 4- variable) we have already discussed the designing of K-Map and various forms in which they are represented based on either they are being mapped for minterm or maxterm. 在上一篇文章( 卡…

JDK 竟然是这样实现栈的?

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;前面的文章《动图演示&#xff1a;手撸堆栈的两种实现方法&#xff01;》我们用数组和链表来实现了自定义的栈结构&#xff…

关于微信,运营商们就这点志向?

2019独角兽企业重金招聘Python工程师标准>>> 近期关于运营商威逼微信收费之事闹得沸沸扬扬&#xff0c;在虎嗅上看到有不少人发表了自己的看法也不乏给运营商或微信出点子的人&#xff0c;但我觉得都不是很妥&#xff0c;还是谈谈我的看法吧。 陈旧的思路&#xff…

阿里巴巴开源的Excel操作神器!

前提导出数据到Excel是非常常见的后端需求之一&#xff0c;今天来推荐一款阿里出品的Excel操作神器&#xff1a;EasyExcel。EasyExcel从其依赖树来看是对apache-poi的封装&#xff0c;笔者从开始接触Excel处理就选用了EasyExcel&#xff0c;避免了广泛流传的apache-poi导致的内…

再谈指针

C语言为什么高效&#xff1f;因为C语言有指针。指针是C语言的精华&#xff0c;同时也是C语言的难点&#xff0c;很多人一学到指针就表示头大&#xff0c;指针的指向往往把人搞得晕头转向&#xff0c;甚至有的人为了避免使用指针居然不惜多写几十行代码&#xff0c;无疑增加了工…