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

2023-11-01

在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.png
	putimage(
			50, 100, //显示的位置
			286, 167,//图片的大小,也可自行设置大小
			&image2, //选择需要贴的图
			0, 0,	//从该图片的起始位置开始显示
			SRCAND	//绘制出的像素颜色 = 屏幕颜色 & 图像颜色
			);
	//再贴彩黑图,即1.png
	putimage(
			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常用函数请点此处查看

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言图形库——EasyX基本贴图 的相关文章

随机推荐

  • 关于z-index的总结

    z index的作用 很多时候需要把一个元素覆盖到另一个元素之上 比如登入弹出框等 这个时候就需要z index属性出场了 所以呢 z index就是调节层的显示优先级 决定哪个显示在最上方 作用范围就是Positioned element
  • Vmware虚拟机找不到.vmdk文件,不能开机

    Vmware虚拟机找不到 vmdk文件 不能开机 背景 公司的虚拟机平台是宿主机和存储组成的 虚拟机文件是挂载存储上的 由于虚拟机的命名有点乱 更改了一下 顺便把存储上的命名也更改了吗 在开机的时候出现报错 找不到 vmdk文件 原因 当系
  • 统计指定数字的个数

    编写函数统计指定数字的个数 前言 学习python的日常 提示 以下是本篇文章正文内容 下面案例可供参考 题目 本题要求实现一个统计整数中指定数字的个数的简单函数 CountDigit number digit 其中number是整数 di
  • webstorm中怎么搜索文件

    Ctrl N 文件搜索 Ctrl SHIFT R 关键字搜索
  • windows搭建ftp服务器、抓取虚拟机数据包、局域网流量监听

    先保证三台主机在同一局域网下 可以相互ping通 控制面板 gt 程序 gt 程序和功能 gt 启用或关闭windows功能 Web管理工具也要选上 进入管理工具 配置登录用户的权限 访问成功 使用kali登录ftp服务器 用户名 anon
  • MySQL服务器断电无法启动处理过程

    问题描述 2021 09 14 09 02 42 f24 InnoDB Operating system error number 1117 in a file operation InnoDB Some operating system
  • SpringBoot之统一返回格式与统一异常处理

    文章目录 导入Jar包 配置统一结果返回 配置全局异常处理 效果测试 在任何接口返回数据时 正确的返回格式 code 状态码 data 数据 message 接口响应信息 一般接口需要的就是这三个数据 code 200 data succe
  • WEB项目中出现The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in ei问题的解决方法

    web项目出现如上问题 据查是版本问题 JSTL 1 0 的声明是 JSTL1 1 的声明是 项目中 已经是 jstl 1 2 版本了 页面中也全部是用这种方式 javaee5之后就只有 jstl jar 这一个jar包了 没有standa
  • FLASH:一种高效的Transformer设计

    背景 近年来 Transformer凭借其优秀的设计 在文本 图像 语音等方向大杀四方 但是由于其attention的二次复杂度限制了其在长序列上的应用 本文提出了一种快 速度快 省 省显存 的模型FLASH Fast Linear Att
  • Allegro 干货知识分享--如何在Allegro中添加泪滴

    背景介绍 有时候在PCB绘制完成后需要对PCB进行添加泪滴的操作 添加泪滴的作用主要是 信号传输时平滑阻抗 减少阻抗的急剧跳变 避免高频信号传输时由于线宽突然变小而造成反射 焊接时可以保护焊盘 避免多次焊接时焊盘的脱落 生产时可以避免蚀刻不
  • Java与C#比较,哪个语言更是适合你?

    Java与C 比较 哪个语言更是适合你 先来说一说Java和c 的一些语言细节上的区别 第1个方面是数据类型方面 c 支持nullable数据类型 而Java不支持 c 支持指针类型 而Java不支持 c 支持无符号整形型 而Java不支持
  • 给一串字符串,打乱字符串顺序

    import java util Random public class Pratice 给一串字符串 打乱字符串顺序 修改字符串有两个思路 1 subString 2 字符数组 public static void main String
  • 4.0寸86盒显示屏调试(三)

    读取了个把星期也没读取出正确的ID号 最终放弃了读取 考虑是不是液晶屏根本没有输出功能 在使用SPI驱动以后 也没有显示白屏或者任何可以让人感觉驱动正确的现象 最终也放弃了在SPI上搞出个现象 转而使用RGB协议直驱 但还是没有结果 最后还
  • 百奥赛图财报解读:CRO业务枝繁叶茂,“千鼠万抗”遍地生花

    命运对勇士说 你无法抵御风暴 勇士回应 我就是风暴 这段对话是对中国创新药行业最好的诠释 回顾中国创新药近十年高速发展期 上千家创新药公司先后诞生 行业被资本推动一路 狂飙 根据医药魔方数据 创新药一级市场报道的融资额从2013年的36亿元
  • 计算机毕业设计-基于SSM的音乐播放器管理系统

    项目摘要 随着社会的发展 计算机的优势和普及使得音乐播放器管理系统的开发成为必需 音乐播放器管理系统主要是借助计算机 通过对首页 音乐推荐 付费音乐 论坛信息 个人中心 后台管理等信息进行管理 减少管理员的工作 同时也方便广大用户对个人所需
  • openGL增强表面细节--高度贴图

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 高度贴图原理 二 代码实现 1 c 主程序 2 着色器程序 运行效果 源码下载 前言 现在我们扩展法线贴图的概念 从纹理图像用于扰动法向量到扰乱顶点位置本身 实 际上
  • 深度学习环境配置5——windows下的torch-cpu=1.2.0环境配置

    深度学习环境配置5 windows下的torch cpu 1 2 0环境配置 注意事项 一 2021 10 8更新 学习前言 各个版本pytorch的配置教程 环境内容 环境配置 一 Anaconda安装 1 Anaconda的下载 2 A
  • SystemServer启动服务

    一 启动流程 SystemServer的在Android体系中所处的地位 SystemServer由Zygote fork生成的 进程名为system server 该进程承载着framework的核心服务 startSystemServe
  • 超强语义分割算法!基于语义流的快速而准确的场景解析

    论文地址 https arxiv org abs 2002 10120 代码地址 https github com donnyyou torchcv 该论文提出了一种有效且快速的场景解析方法 通常 提高场景解析或语义分割性能的常用方法是获得
  • C语言图形库——EasyX基本贴图

    在C语言的学习过程中 接触最多的就是黑乎乎的DOS窗口 这也是在消磨学习者的兴趣 学到最后可能还不知道C语言到底能做什么 难道就是输入输出数据吗 当然不是 C的用处很广泛 这里不做讨论 我们能不能用C语言做些好玩的东西 当然可以 我们可以做