在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常用函数请点此处查看

C语言图形库——EasyX基本贴图相关推荐

  1. C语言图形库EasyX安装及基本使用

    本文章介绍C++用EasyX进行C++基础图形编程介绍. EasyX安装: 1.点击上方超链接,进入官网,点击右侧下载EasyX 2.点击下载后的可执行文件: 3.EasyX安装非常简单,进入可执行文 ...

  2. C语言图形库——EasyX常用函数

    上节讲到贴出一张图片的过程,本节接着介绍一些基本的图形库函数. 头文件 #include <graphics.h> 1.图形窗口背景颜色设置函数: 例 setbkcolor(YELLOW) ...

  3. c语言使用easyX图形库制作打气球小游戏

    大一c语言使用easyX图形库制作打气球小游戏 如果你是入门easyX图形库,那么这个打气球小游戏将会是和不错的入门项目选择,easyX开创了可视化窗口,使用户更加直观的了解到对象的变化,总代码以及素 ...

  4. 用C语言图形库画一个红色爱心

    这次我教大家用代码画一个心,这样你们就可以送给你们的女(男)朋友了.没找到对象的也可以用来表白啊. 1.首先,我去百度找了心形线的函数,如下: 2. 联系高中的数学知识,我们知道:f(x)>0和 ...

  5. R语言绘制环形树状图

    R语言绘制环形树状图 1.主要用到dendextend和circlize包绘图: library(dendextend) library(circlize)# 距离矩阵 d <- dist(US ...

  6. R语言绘制二维密度图

    R语言绘制二维密度图 二维密度图显示了两个数值变量之间的关系,一个在x轴上表示,另一个在Y轴上表示,与散点图类似,然后计算二维空间中特定区域内的观测数,并用颜色梯度表示.二维密度图有几种类型,以下主要 ...

  7. R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战

    R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战 目录 R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战

  8. R语言ggplot2可视化树状图、层次聚类系统树图、树状图根据给定的距离度量将相似点分组在一起、并根据点的相似性将它们组织成树状图链接起来(Hierarchical Dendrogram)

    R语言ggplot2可视化树状图.层次聚类系统树图.树状图根据给定的距离度量将相似点分组在一起.并根据点的相似性将它们组织成树状图链接起来(Hierarchical Dendrogram) 目录

  9. R语言ggplot2可视化可视化聚类图、使用geom_encircle函数绘制多边形标定属于同一聚类簇的数据点、并自定义每个聚类簇数据点的颜色、多边形框的颜色(Cluster Plot)、主副标题题注

    R语言ggplot2可视化可视化聚类图.使用geom_encircle函数绘制多边形标定属于同一聚类簇的数据点.并自定义每个聚类簇数据点的颜色.多边形框的颜色(Cluster Plot).主副标题题注 ...

  10. R语言ggplot2可视化分面图(facet_wrap)、使用size参数自定义设置分面图标签栏(灰色标签栏)中的标签文本的字体大小

    R语言ggplot2可视化分面图(facet_wrap).使用size参数自定义设置分面图标签栏(灰色标签栏)中的标签文本的字体大小 目录

最新文章

  1. 金蝶 K/3 Cloud 服务端控件编程模型
  2. 阿里巴巴拿下奥运顶级赞助商
  3. 转:AMS之dumpsys篇
  4. GB2312 UTF8 UCS2汉字编码对应表
  5. android mysql开发工具_Android开发工具--adb的使用
  6. JDBC是什么?和JDBC程序的基本编写
  7. 第三章Python快速入门
  8. JAVA计算机毕设题目大全
  9. sai钢笔图层怎么移动某条线?
  10. 如何让网站快速被收录,试试这个方法!
  11. 中国汽车原始设备制造商的厂内物流市场趋势报告、技术动态创新及市场预测
  12. Android Hook 实战--替换第三方sdk的类
  13. N76E003 串口接收字符串,完整输出
  14. 新一代智慧医疗整体解决方案
  15. ERP系统的数据安全
  16. 说不清心里对于这个孩子是什么样的感情
  17. JAVA + 酷Q开发人工智能QQ机器人
  18. 【PCL】VoxelGrid滤波器下采样
  19. PSCAD 出现 TRIANG错误
  20. html5教程鼠标,利用HTML5 Canvas制作键盘及鼠标动画的实例分享

热门文章

  1. 文献笔记(4)(2018ISSCC 13.3)
  2. CATIA V6二次开发——复杂装配体的结构树遍历
  3. 【ManageEngine】如何利用好OpManager的报表功能
  4. ADB连接手机和简单命令
  5. adb通过usb连接手机
  6. 解决浏览器不能安装idm插件
  7. 一键采集淘宝店铺装修模板图
  8. 开源可视化bi工具有哪些,干货推荐
  9. 弹性卡箍零件自动化检测 与包装生产线的研制
  10. TCP——TCP报文分析及TCP状态机、非法TCP报文标志组合