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

article/2025/1/10 12:07:34

本文章介绍C++用EasyX进行C++基础图形编程介绍。

EasyX安装:

1、点击上方超链接,进入官网,点击右侧下载EasyX

在这里插入图片描述

2、点击下载后的可执行文件:

在这里插入图片描述

3、EasyX安装非常简单,进入可执行文件,直接next,然后会自动检测你的开发工具,针对对应的开发工具直接点击安装即可。(文档最好也下载,有时候会遇见一些小疑问,可以查看):

在这里插入图片描述

4、安装成功:

在这里插入图片描述

安装成功后,我们就可以开始进行编程了(本人使用的是Visual Studio 2019)。


插件安装后,我们不需要做任何工作,打开或新建一个项目都可以,编写的过程只需要像平时引入头文件一样就可以进行图形编程。

下面介绍基于Easy图形库的基本编程知识:

1、打开/新建一个项目后,引入头文件easyx.h并建立一个图形窗口:

#include<easyx.h>int main(){initgraph(1266, 730);//用该函数建立窗口//----------------------------------//initgraph(int width,int height)while(1);  //为了防止我们窗口建立后点击一下会退出的情况发生,我们用该语句阻塞一下return 0;
}

运行结果:

在这里插入图片描述

是不是像控制台一样黑?我们绘制的图形就是在这里显示的。

2、图形窗口坐标基础知识:

话不多说,给个图自己体会

在这里插入图片描述
坐标轴拓展(坐标轴修改)【学习完文字输出和颜色表示再回来学习这一小部分】:

一般我们使用坐标轴的时候,并不习惯上图这样的表示的方式,我们一般是取Y轴向上为正,要实现这个效果,我们需要调用两个函数:setaspectratio(int , int)和setorigin(int x,int y)

setaspectratio(int , int):修改缩放比例,但是当我们的x或者y为-1的时候,会参数坐标轴翻转的效果。

setorigin(int x,int y):修改坐标原点。因为我们的坐标原点默认为左上角,我们可以修改为左下角或中央。

示例:输出五个坐标点

#include<easyx.h>
class coordination {char draw = '*';
public:int x = 0;int y = 0;void disp() { outtextxy(x, y, this->draw); }//构造函数coordination() {};coordination(int x, int y) {this->x = x;this->y = y;}//析构函数~coordination() {};
};
int main() {initgraph(600, 400);setbkcolor(RED);settextstyle(20, 0, "宋体");cleardevice();settextcolor(YELLOW);coordination c1 = coordination(100,300);coordination c2 = coordination(300,300);coordination c3 = coordination(400,300);coordination c4 = coordination(100,100);coordination c5 = coordination(130,200);c1.disp();c2.disp();c3.disp();c4.disp();c5.disp();while (1);return 0;
}

输出结果:

在这里插入图片描述

修改坐标原点到左下角

#include<easyx.h>
class coordination {char draw = '*';
public:int x = 0;int y = 0;void disp() { outtextxy(x, y, this->draw); }//构造函数coordination() {};coordination(int x, int y) {this->x = x;this->y = y;}//析构函数~coordination() {};
};
int main() {initgraph(600, 400);setaspectratio(1, -1);//Y 轴向上为正,设置后,我们还需要修改坐标原点--------------------setorigin(0, 500);//修改坐标原点---------------------------------------------------setbkcolor(RED);settextstyle(20, 0, "宋体");cleardevice();settextcolor(YELLOW);coordination c1 = coordination(100,300);coordination c2 = coordination(300,300);coordination c3 = coordination(400,300);coordination c4 = coordination(100,100);coordination c5 = coordination(130,200);c1.disp();c2.disp();c3.disp();c4.disp();c5.disp();while (1);return 0;
}

输出结果:

在这里插入图片描述

修改坐标原点到中央:

#include<easyx.h>
#include<cmath>
class coordination {char draw = '*';
public:int x = 0;int y = 0;void disp() { outtextxy(x, y, this->draw); }//构造函数coordination() {};coordination(int x, int y) {this->x = x;this->y = y;}//析构函数~coordination() {};
};
int main() {initgraph(600, 400);setaspectratio(1, -1);//Y 轴向上为正,设置后,我们还需要修改坐标原点--------------------setorigin(300, 200);//修改坐标原点-------------------------------------------------setbkcolor(RED);settextstyle(20, 0, "宋体");cleardevice();settextcolor(YELLOW);coordination c1 = coordination(100,300);coordination c2 = coordination(300,300);coordination c3 = coordination(400,300);coordination c4 = coordination(100,100);coordination c5 = coordination(130,200);c1.disp();c2.disp();c3.disp();c4.disp();c5.disp();while (1);return 0;
}

输出结果:

在这里插入图片描述

3、一个黑黑的窗口,看着就不舒服,下面我们不妨先输出几个字试一下:

initgraph(600, 400);//窗口太大,有点不方便,来个小窗outtextxy(200, 200,L"开启我的图形编程之路!");//----------------------------------
//注意,在vs2019中,若想将你的字符串正确输出,请在字符串的前面加上一个‘L’while (1);
return 0;

运行结果:

在这里插入图片描述

我们输出的时候是使用一个固定的字符串进行输出的,很多时候,我们可能想要用一个变量去输出,但是有小伙伴发现,我们建立了一个字符串变量,输出的时候会出现不兼容

std::string s1="开启我的图形编程之路!";
outtextxy(200, 200, s1);
//正常情况下,你的代码在这里会出错,实际上这是字符集不兼容的原因。

该问题的解决方案,在EasyX文档里面提供的解决方案:

在这里插入图片描述

为了问题便于解决,我们直接考虑使用自适应字符集,然后直接模仿代码:

#include<easyx.h>
int main() {initgraph(600, 400);TCHAR s[] = _T("Hello World!");//-----------------------outtextxy(200, 200, s);//-------------------------------while (1);return 0;
}

运行结果:

在这里插入图片描述

4、我们的字符输出成功了,我们能不能修改输出的字符的格式和颜色呢?在解决这个问题之前,我们有一个问题没有回答,在EasyX中如何表示颜色?:

最简单直接的方式:直接用每种颜色对应的英文字母大写来表示:

GREEN绿色
BLUE蓝色
YELLOW黄色

但是有的时候,我们想要使用组合色(由红绿蓝三基色可以组合任意一种颜色):

RGB( int , int ,int;
//参数中的三个int分别代表红、绿、蓝三基色的色度,其范围均为0~255。

通过RGB(int, int, int)我们可以获取任何我们想要得到的颜色

4.1 在这里,我们再进行一步拓展:颜色在计算机中的表示方式:

我们知道,一个图片在计算机中由一个个的像素点组成,每个像素点都有一个颜色,进而组成一幅图。在计算机中,一个像素点用4个字节(Byte)表示

00000000000000000000000000000000
ARGB

上面的ARGB代表黑色,其中:

A:透明通道;

R:三基色之红色;

G:三基色之绿色;

B:三基色之蓝色;

因为RGB分别由8位二进制数表示,因此在进行色度调整的时候,我们只能选择0~255

4.2 像素点的位运算:

当两个像素点在同一坐标时,会发生什么情况?

我们给出两种运算:

  • 位与:SRCAND
  • 位或:SRCPAINT

例如,黑色跟白色进行位与(我们只考虑三基色,不考虑透明度):

黑:000H

白:FFFH

结果:000H,位与结果为黑色。

黑色与白色进行位或:

黑:000H

白:FFFH

结果:FFFH,位与结果为白色。

利用以上的运算,我们可以让图片产生很多不同的效果,比如背景透明图的实现,模糊化,马赛克等。

5、言归正传,下面我们了解如何输出带颜色的字:

settextcolor(color);
//参数为你想要展示的颜色

显示为蓝色字体:

	initgraph(600, 400);settextcolor(BLUE);//将文字颜色调整为蓝色---------------------------TCHAR s[] = _T("开启我的图形编程之路!");outtextxy(200, 200, s);while (1);return 0;

输出结果:

在这里插入图片描述

组合色:

	initgraph(600, 400);settextcolor(RGB(150,20,150));//文字颜色组合色--------------------------TCHAR s[] = _T("开启我的图形编程之路!");outtextxy(200, 200, s);while (1);return 0;

输出结果:

在这里插入图片描述

6、字体格式的调整:

我们在使用文档编辑工具的时候,我们可以选择调整字体的字号、字体样式等,在C++中,我们使用settextstyle(int(字高),int(字宽),string(字体样式));来实现。(注意,字体样式使用字符串表示的时候,前面别忘了加’L’)

在这里简述一下什么是字高、字宽。实际上,我们编辑文本的时候,经常使用字体的字号调节,但是我们调节的时候只调节一个字号值,并不存在什么字高、字宽。实际上,我们调节的字号就是字高,而字宽的变化属于自适应变化,其跟随字高进行变化。在这里,将字宽值设置为0时,其代表自适应变化。

例如,将字号设置为50,字体为楷体:

	initgraph(600, 400);settextcolor(RGB(150, 20, 150));settextstyle(50, 0, L"楷体");//字号设为50,字体为楷体---------------------TCHAR s[] = _T("开启我的图形编程之路!");outtextxy(50, 200, s);while (1);return 0;	

输出结果:

在这里插入图片描述

7、图片的输出:

图片文件与之前我们学习文件io的操作要求完全一致,并且注意将你的图片放到正确的文件夹中。

学习之前,我们看一个普通数据的输入输出:

int a;             //定义一个整型变量scanf("%d",&a);    //从控制台读取一个10进制的数据保存在a中printf("%d",a);    //将a输出在控制台。

图片的显示也与此类似:

IMAGE p;                 //定义一个IMAGE类型变量loadimage(&p,"图片名");   //从文件中读取一张图片保存到p中putimage(int x,int y,&p);//将p中的图像输出在界面上

例如:

我们选择一个宽1000,高625的图片:

在这里插入图片描述

建立对应窗口并载入输出图片:

	initgraph(1000, 625);//---------------------------------IMAGE m;loadimage(&m, L"Pokemon.jpg");//注意后缀-----------------putimage(0, 0, &m);//-----------------------------------while (1);return 0;

输出结果:

在这里插入图片描述

8、音乐播放:

在我们建立的窗口也能进行音乐播放(音乐播放器设计的基础)

(重点)实际上,EasyX库并没有提供播放音乐的对应接口,它是windows系统的东西,因此只有一个easyx头文件根本不够用>。我们可以按照以下步骤:

  1. 包含头文件mmsystem.h mm:Multi-Media多媒体

  2. 包含一个库文件 winmm.lib win:windows mm同上

    库文件包含方式:

    #pragma comment (lib,“winmm.lib”) //c-预处理语句

  3. 调用函数:mciSendString(string file_name) //这里的file_name同文件io(注意后缀)

我们在针对mciSendString(string file_name)进行用法介绍:

代码解释
mciSendString(“open 夜曲.mp3”,0,0,0);打开音乐文件
mciSendString(“play 夜曲.mp3”,0,0,0);播放音乐文件
mciSendString(“pause 夜曲.mp3”,0,0,0);暂停音乐播放
mciSendString(“close 夜曲.mp3”,0,0,0);关闭音乐文件

其中:

mic: modia control interface:媒体控制接口

send string: 发送字符串

后面的三个0暂时先不管,因为它涉及的东西比较多(比如声道),新手先不用管太多,我们简单模拟一下就行,后面有时间再深入。

注意:

1、网易云的音乐播放不了。(文件内部做了调整,windows系统内部无法识别)QQ音乐可以

2、音乐名称中间不能有空格,因为你的一些操作需要用空格来隔开(比如open和文件名中间留一个空格)

3、请提前把文件拓展名勾上,不要自己改后缀

例如:

#include<easyx.h>
#include<mmsystem.h>//-------------------------------------一定别忘了引入
#pragma  comment  (lib,"winmm.lib")//----------------------一定别忘了引入
int main() {initgraph(1000, 625);mciSendString(L"open 1.mp3", 0, 0, 0);    //打开---------------------mciSendString(L"play 1.mp3", 0, 0, 0);    //播放---------------------while (1);return 0;
}

当窗口生成后,会自动播放音乐。

9、背景色修改:setbkcolor()+cleardevice();

setbkcolor:设置背景色

cleardevice:用当前背景色刷新窗口。

注意:仅仅使用setbkcolor()后,我们并不能直接改变窗口背景的颜色,必须后面来一次cleardevice来刷新一下。

示例:

	initgraph(1000, 625);setbkcolor(WHITE);//--------------------------------背景白色cleardevice();//------------------------------------刷新背景色settextcolor(RED);settextstyle(30, 0, "宋体");outtextxy(400, 260, "Hello World!");while (1);return 0;

输出结果:

在这里插入图片描述
后记:

为打好图形编程的基础,正所谓磨刀不误砍材工,我们先把EasyX文档上面涉及的基本操作多多运用,熟练掌握,等使用熟练了以后,再去掌握画图的进阶内容(比如动画、按钮、鼠标点击事件等,实际上,掌握了上面的基础内容结合文件IO,就做一些简单的数据可视化)。EasyX文档中涉及的基础知识,每有心得即可再该文档中进行补充。而进阶内容补充到另一个文档中。


2023年6月3日更:为了进一步方便初学者使用鼠标、键盘操作来制作属于自己的小游戏,本人将easyx中的鼠标、键盘操作进一步以独立线程的方式封装以方便大家使用。
具体请参考:
利用C++11结合easyx并发监听鼠标、键盘事件


(文章内容若有纰漏,欢迎指正)

参考博文:

C/C++图形库EasyX快速上手指南【1】——绘图窗口和基本图形文字绘制(该文章中对字符串输入部分的详细解释,内容很好,可参考)


http://chatgpt.dhexx.cn/article/2v5K1iUE.shtml

相关文章

c语言的图形库

图形库链接http://www.easyx.cn/ 使用图形库头文件easyx.h或graphics.h 同样在里面下载图形库帮助文档进行查询 vs vc都可使用图形库 图形库窗口: initgraph打开窗口 closegraph关闭窗口 颜色 RGB值 RGB(,,):red green blue 下表值都可以在函数中直接使用填充颜色 上图为图形…

在Dev C++中使用c语言图形库的配置

[img]C:\Documents and Settings\Administrator\桌面\devcppEditor1.gif[/img]Dev-C Installation If you are installing Dev-C on your own computer, you should make some changes and additions to the default installation. Here are the details. If you are planning…

利用DevC++和EGE图形库写出一款C语言飞机大战小游戏

利用DevC以及EGE图形库写出一款C语言飞机大战小游戏 前言&#xff1a; 上学期期末大作业利用C语言写过一个极其简陋的飞机大战&#xff08;只有黑洞洞的终端窗口&#xff0c;至于飞机&#xff0c;额&#xff0c;也是一言难尽&#xff09;&#xff0c;暑假闲来无事&#xff0c…

【c语言】五子棋(EasyX图形库+背景音乐)

大家好&#xff0c;有没有觉得写了好多c语言代码&#xff0c;面对的都是黑框框控制台&#xff0c;当我们学习了基础的c语言知识&#xff0c;和EasyX图形库后&#xff0c;终于可以和黑框框saygoodbye,今天要分享给大家的是小游戏五子棋&#xff0c;跟着小张一起学习吧 EasyX图形…

C语言课程设计图形库

记得刚上大学的时候&#xff0c;大一学C语言&#xff0c;最后有一个大作业&#xff0c;用的是Turbo C2.0&#xff0c;然后大部分设计题都需要用到里面的图形界面&#xff0c;也就是引用<graphics.h>.差不10年过去了&#xff0c;不知道现在的学生还用不用Turbo C&#xff…

C语言画图形(图形库graphics的使用)

目录 工具 c语言基本绘图 文字输出 c语言基本贴图 获取鼠标、键盘信息 工具 &#xff08;1&#xff09;环境&#xff1a;VC &#xff08;2&#xff09;库函数&#xff1a;graphics.h&#xff08;因为不是标准库函数&#xff0c;所以需下载EASYX&#xff09; &#xff08;3&am…

codeblock c语言图形库,C语言入门项目——扫雷游戏(ege图形库+codeblocks)

扫雷游戏适合C练手,会C基本语法就可以尝试。需要导入ege图形库(文章后半部分写了ege如何导入codeblocks,以及我用到的ege函数) 一、先介绍如何将ege图形库导入codeblocks: 1、下载codeblocks 2、下载ege图形库的文件包 官方网址:ege图形库主站 (1)打开下载好的压缩包,找到…

【精选】适合初学者小游戏井字棋(三子棋)(C语言),Easyx图形库应用+源代码分享

【精选】井字棋&#xff08;三子棋&#xff0c;C语言&#xff09; 目录 【精选】井字棋&#xff08;三子棋&#xff0c;C语言&#xff09;游戏展示一、项目环境简单介绍一下easyx图形库Easyx图形库 二、游戏规则介绍三、运行效果展示四、项目介绍五、项目源代码分享总结与思考B…

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

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

#C语言或C++中强大的图形库——easyx

1.了解easyx图形库 EasyX Graphics Library 是针对 Visual C 的免费绘图库&#xff0c;支持 VC6.0 ~ VC2022&#xff08;以及VS2013~VS2022)&#xff0c;简单易用&#xff0c;学习成本极低&#xff0c;应用领域广泛。目前已有许多大学将 EasyX 应用在教学当中。 使用范围&…

产品 • B端和C端产品经理有什么区别?

一些概念 to-C产品分类&#xff1a; 直接触达型&#xff1a;类似一级市场——微信、微博等平台&#xff1b;间接触达型&#xff1a;二级市场——广告、公众号等 &#xff1b; 总的市场规模&#xff1a; 用户规模可用时间 —— 御豪同学 • 京东金融 • 数据产品经理 每位用户每…

B端产品思维全解析,提升产品经理核心竞争力

产品思维和用户思维组成了产品经理两大核心思维方法论。对两者的理解也代表了产品经理的产品理解方向。 很多人把产品思维和用户思维混在一起说&#xff0c;我觉得是不合适的&#xff0c;因为两个是互相搭配的关系&#xff0c;你也可以把产品思维理解成智商&#xff0c;用户思维…

全方位解析 C 端和 B 端的产品特性

近年来&#xff0c;互联网进入下半场&#xff0c;C 端流量红利逐渐消退&#xff0c;很多企业转向了 B 端服务&#xff0c;随之而来的是产品设计者的转型&#xff0c;现在越来越多的 C 端产品设计师开始涉足到 B 端产品的设计&#xff0c;这是一个知识迁移的过程&#xff0c;需要…

B端产品经理,应从哪些方面理解业务?

新人入职新公司后&#xff0c;第一个工作就是了解公司业务&#xff0c;一般都是看公司项目PPT、产品需求文档&#xff0c;根据现有系统功能梳理功能结构图、产品流程等方式&#xff0c;但并不能系统化地帮助我们了解公司业务&#xff0c;容易流于表面。 由于TO B业务往往具有鲜…

B端和C端产品区别

一、定义 B端的B是单词Business的缩写&#xff0c;即企业用户。 C端的C是单词Consumer的缩写&#xff0c;即个人用户。 二、区别 B端产品&#xff08;如**管理系统&#xff09;&#xff1a; B端产品注重操作的实用性&#xff0c;注重功能的实现效率&#xff0c;是为了工作而…

新入行的产品做C端还是B端?

作为一名产品经理&#xff0c;你是否曾思考过&#xff1a;新入行的产品&#xff0c;做C端还是B端发展前景更好&#xff1f; C端产品需要对用户需求有深刻的了解。你需要研究市场趋势、用户行为、竞争对手&#xff0c;然后设计出符合用户期望的产品。同时&#xff0c;你需要面对…

【产品经理】B端产品经理需知道几个市场概念

美国市场营销协会称&#xff1a;“市场是指一种货物或劳务的潜在购买者的集合需求。”简单的说市场是买卖双方交易的领域&#xff0c;有买方、有卖方、有商品或服务、有需求。我们可以简单的了解市场竞争程度、需求和供给模型和边际成本模型。 01市场竞争程度 《西方经济学》里…

为什么说用C端产品的思维做B端产品就是死路一条?

经常听行业大佬说起&#xff1a;如果用C端产品的思维做B端产品就是死路一条&#xff0c;那原因究竟是什么呢&#xff1f; 首先&#xff0c;需要明确的是C端产品和B端产品的用户群体和需求存在很大差异。C端产品的用户主要是消费者&#xff0c;更多的是被情感驱动。而B端产品的…

B端产品:通过线上渠道增长

老于笔记11.29 征服畏惧建立自信的最快最确实的方法&#xff0c;就是去做你害怕的事&#xff0c;直到你获得成功的经验。 前言 疫情让我们越来越重视线上流量。作为B端产品的市场运营&#xff0c;每天我有多少流量&#xff0c;从哪些地方来、转化情况如何&#xff0c;以及数据驱…