[EasyX库安装介绍讲解】超详细入门级

news2025/1/16 14:12:30

基本说明

EasyX 是针对 C++ 的图形库,可以帮助 C/C++ 初学者快速上手图形和游戏编程。

比如,可以基于 EasyX 图形库很快的用几何图形画一个房子,或者一辆移动的小车,可以编写俄罗斯方块、贪吃蛇、黑白棋等小游戏,可以练习图形学的各种算法,等等。

EasyX 库是为了一个更好的学习平台,就是 VC 方便的开发平台和 TC 简单的绘图功能。

安装

直接搜索官网:https://easyx.cn/

安装方法

双击下载的 EasyX 安装包,在“Windows 已保护你的电脑”提示窗中,点“更多信息”,再点“仍要运行”,这时,可以看到 EasyX 的安装程序。 

 EasyX 安装程序会检测到当前操作系统中安装的 Visual Studio 版本。在对应的 VS 版本右侧点击“安装”即可。

 

介绍 

使用教程

 EasyX 在使用上非常简单。

比如:启动 Visual C++,创建一个的控制台项目(Win32 Console Application),然后添加一个新的代码文件(.cpp),并引用 graphics.h 头文件就可以了。

看一个画圆的例子:

#include <graphics.h>		// 引用图形库头文件
#include <conio.h>
int main()
{
	initgraph(640, 480);	// 创建绘图窗口,大小为 640x480 像素
	circle(200, 200, 100);	// 画圆,圆心(200, 200),半径 100
	_getch();				// 按任意键继续
	closegraph();			// 关闭绘图窗口
	return 0;
}

基本概念

颜色

描述颜色的各种表示方法。

表示颜色的方法

用预定义常量表示颜色

常量                     值                     颜色
--------               --------           --------
BLACK                   0                        黑
BLUE                      0xAA0000       蓝
GREEN                   0x00AA00       绿
CYAN                      0xAAAA00      青
RED                         0x0000AA      红
MAGENTA               0xAA00AA     紫
BROWN                   0x0055AA     棕
LIGHTGRAY            0xAAAAAA    浅灰
DARKGRAY             0x555555     深灰
LIGHTBLUE            0xFF5555      亮蓝
LIGHTGREEN         0x55FF55      亮绿
LIGHTCYAN            0xFFFF55      亮青
LIGHTRED               0x5555FF     亮红
LIGHTMAGENTA    0xFF55FF      亮紫
YELLOW                  0x55FFFF      黄
WHITE                     0xFFFFFF      白
 

用 16 进制数字表示颜色

图片来自https://huaweicloud.csdn.net/63a5712eb878a545459475d7.html?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-1-89279180-blog-105847549.235%5Ev38%5Epc_relevant_anti_vip&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-1-89279180-blog-105847549.235%5Ev38%5Epc_relevant_anti_vip&utm_relevant_index=1 

用 RGB 宏合成颜色

 用 HSLtoRGB、HSVtoRGB 转换其他色彩模型到 RGB 颜色

实例

以下是几种设置画线颜色的方法:

setlinecolor(0xff0000);
setlinecolor(BLUE);
setlinecolor(RGB(0, 0, 255));
setlinecolor(HSLtoRGB(240, 1, 0.5));

坐标

描述坐标系。

在 EasyX 中,坐标分两种:物理坐标和逻辑坐标。

物理坐标

物理坐标是描述设备的坐标体系。

坐标原点在设备的左上角,X 轴向右为正,Y 轴向下为正,度量单位是像素。

坐标原点、坐标轴方向、缩放比例都不能改变。

逻辑坐标

逻辑坐标是在程序中用于绘图的坐标体系。

坐标默认的原点在窗口的左上角,X 轴向右为正,Y 轴向下为正,度量单位是点。

默认情况下,逻辑坐标与物理坐标是一一对应的,一个逻辑点等于一个物理像素。

凡是没有注明的坐标,一般均指逻辑坐标。

设备

描述“设备”概念。

设备”,是指绘图表面。

在 EasyX 中,设备分两种,一种是默认的绘图窗口,另一种是 IMAGE 对象。通过 SetWorkingImage 函数可以设置当前用于绘图的设备。

设置当前用于绘图的设备后,所有的绘图函数都会绘制在该设备上。

函数

详细讲解请点击超链接进入网站查看。

绘图设备相关函数

相关函数如下:

函数或数据类型描述
cleardevice清除屏幕内容。
initgraph初始化绘图窗口。
closegraph关闭图形窗口。
getaspectratio获取当前缩放因子。
setaspectratio设置当前缩放因子。
graphdefaults恢复绘图窗口为默认值。
setorigin设置坐标原点。
setcliprgn设置当前绘图设备的裁剪区。
clearcliprgn清除裁剪区的屏幕内容。

颜色模型

相关函数如下:

函数或数据类型描述
GetBValue返回指定颜色中的蓝色值。
GetGValue返回指定颜色中的绿色值。
GetRValue返回指定颜色中的红色值。
HSLtoRGB转换 HSL 颜色为 RGB 颜色。
HSVtoRGB转换 HSV 颜色为 RGB 颜色。
RGB通过红、绿、蓝颜色分量合成颜色。
RGBtoGRAY转换 RGB 颜色为 灰度颜色。
RGBtoHSL转换 RGB 颜色为 HSL 颜色。
RGBtoHSV转换 RGB 颜色为 HSV 颜色。
BGR交换颜色中的红色和蓝色。

图形颜色及样式设置相关函数

相关函数如下:

函数或数据类型描述
FILLSTYLE填充样式对象。
getbkcolor获取当前设备背景色。
getbkmode获取当前设备图案填充和文字输出时的背景模式。
getfillcolor获取当前设备填充颜色。
getfillstyle获取当前设备填充样式。
getlinecolor获取当前设备画线颜色。
getlinestyle获取当前设备画线样式。
getpolyfillmode获取当前设备多边形填充模式。
getrop2获取当前设备二元光栅操作模式。
LINESTYLE画线样式对象。
setbkcolor设置当前设备绘图背景色。
setbkmode设置当前设备图案填充和文字输出时的背景模式。
setfillcolor设置当前设备填充颜色。
setfillstyle设置当前设备填充样式。
setlinecolor设置当前设备画线颜色。
setlinestyle设置当前设备画线样式。
setpolyfillmode设置当前设备多边形填充模式。
setrop2设置当前设备二元光栅操作模式。

图形绘制相关函数

相关函数如下:

函数或数据类型描述
arc画椭圆弧。
circle画无填充的圆。
clearcircle清空圆形区域。
clearellipse清空椭圆区域。
clearpie清空扇形区域。
clearpolygon清空多边形区域。
clearrectangle清空矩形区域。
clearroundrect清空圆角矩形区域。
ellipse画无填充的椭圆。
fillcircle画有边框的填充圆。
fillellipse画有边框的填充椭圆。
fillpie画有边框的填充扇形。
fillpolygon画有边框的填充多边形。
fillrectangle画有边框的填充矩形。
fillroundrect画有边框的填充圆角矩形。
floodfill填充区域。
getheight获取绘图区的高度。
getpixel获取点的颜色。
getwidth获取绘图区的宽度。
line画直线。
pie画无填充的扇形。
polybezier画三次方贝塞尔曲线。
polyline画多条连续的线。
polygon画无填充的多边形。
putpixel画点。
rectangle画无填充的矩形。
roundrect画无填充的圆角矩形。
solidcircle画无边框的填充圆。
solidellipse画无边框的填充椭圆。
solidpie画无边框的填充扇形。
solidpolygon画无边框的填充多边形。
solidrectangle画无边框的填充矩形。
solidroundrect画无边框的填充圆角矩形。

文字输出相关函数

相关函数和数据如下:

函数或数据类型描述
gettextcolor获取当前文字颜色。
gettextstyle获取当前文字样式。
LOGFONT文字样式的结构体。
outtextxy在指定位置输出字符串。
drawtext在指定区域内以指定格式输出字符串。
settextcolor设置当前文字颜色。
settextstyle设置当前文字样式。
textheight获取字符串实际占用的像素高度。
textwidth获取字符串实际占用的像素宽度。

图像处理相关函数

相关函数和数据如下:

函数或数据类型描述
IMAGE保存图像的对象。
loadimage读取图片文件。
saveimage保存绘图内容至图片文件。
getimage从当前绘图设备中获取图像。
putimage在当前绘图设备上绘制指定图像。
GetWorkingImage获取指向当前绘图设备的指针。
rotateimage旋转 IMAGE 中的绘图内容。
SetWorkingImage设定当前绘图设备。
Resize调整指定绘图设备的尺寸。
GetImageBuffer获取绘图设备的显示缓冲区指针。
GetImageHDC获取绘图设备句柄。

消息处理相关函数

消息缓冲区可以缓冲 63 个未处理的消息。每次获取消息时,将从消息缓冲区取出一个最早发生的消息。消息缓冲区满了之后,不再接收任何消息。

相关函数如下:

函数或数据类型描述
ExMessage消息结构体。
flushmessage清空消息缓冲区。
getmessage获取一个消息。如果当前消息缓冲区中没有,就一直等待。
peekmessage获取一个消息,并立即返回。
setcapture设置允许捕获绘图窗口外的鼠标消息。
releasecapture设置禁止捕获绘图窗口外的鼠标消息。

其它函数

相关函数如下:

函数或数据类型描述
BeginBatchDraw开始批量绘图。
EndBatchDraw结束批量绘制,并执行未完成的绘制任务。
FlushBatchDraw执行未完成的绘制任务。
GetEasyXVer获取当前 EasyX 库的版本信息。
GetHWnd获取绘图窗口句柄。
InputBox以对话框形式获取用户输入。

graphics.h 暂留函数

在 easyx.h 的基础上,graphics.h 暂时保留了若干已经废弃的函数,以提高对旧程序的兼容性。

在 graphics.h 里面额外提供的相关函数如下:

函数或数据类型描述
bar画无边框填充矩形。
bar3d画有边框三维填充矩形。
drawpoly画无填充的多边形。
fillpoly画有边框的填充多边形。
getcolor获取当前绘图前景色。
getmaxx获取绘图窗口的物理坐标中的最大 x 坐标。
getmaxy获取绘图窗口的物理坐标中的最大 y 坐标。
getx获取当前 x 坐标。
gety获取当前 y 坐标。
linerel画直线。
lineto画直线。
moverel移动当前点。
moveto移动当前点。
outtext在当前位置输出字符串。
setcolor设置当前绘图前景色。
setwritemode设置前景的二元光栅操作模式。

示例程序

字符阵

// 编译环境:Visual C++ 6.0~2022,EasyX_2023大暑版
// https://easyx.cn
//
#include <graphics.h>
#include <time.h>
#include <conio.h>

int main()
{
	// 设置随机种子
	srand((unsigned) time(NULL));

	// 初始化图形模式
	initgraph(640, 480);

	int  x, y;
	char c;

	settextstyle(16, 8, _T("Courier"));	// 设置字体

	// 设置颜色
	settextcolor(GREEN);
	setlinecolor(BLACK);

	for (int i = 0; i <= 479; i++)
	{
		// 在随机位置显示三个随机字母
		for (int j = 0; j < 3; j++)
		{
			x = (rand() % 80) * 8;
			y = (rand() % 20) * 24;
			c = (rand() % 26) + 65;
			outtextxy(x, y, c);
		}

		// 画线擦掉一个像素行
		line(0, i, 639, i);

		Sleep(10);					// 延时
		if (i >= 479)	i = -1;
		if (_kbhit())	break;		// 按任意键退出
	}

	// 关闭图形模式
	closegraph();
	return 0;
}

星空

// 编译环境:Visual C++ 6.0~2022,EasyX_2023大暑版
// https://easyx.cn
//
#include <graphics.h>
#include <time.h>
#include <conio.h>

#define MAXSTAR 200	// 星星总数

struct STAR
{
	double	x;
	int		y;
	double	step;
	int		color;
};

STAR star[MAXSTAR];

// 初始化星星
void InitStar(int i)
{
	star[i].x = 0;
	star[i].y = rand() % 480;
	star[i].step = (rand() % 5000) / 1000.0 + 1;
	star[i].color = (int)(star[i].step * 255 / 6.0 + 0.5);	// 速度越快,颜色越亮
	star[i].color = RGB(star[i].color, star[i].color, star[i].color);
}

// 移动星星
void MoveStar(int i)
{
	// 擦掉原来的星星
	putpixel((int)star[i].x, star[i].y, 0);

	// 计算新位置
	star[i].x += star[i].step;
	if (star[i].x > 640)	InitStar(i);

	// 画新星星
	putpixel((int)star[i].x, star[i].y, star[i].color);
}

// 主函数
int main()
{
	srand((unsigned)time(NULL));	// 随机种子
	initgraph(640, 480);			// 创建绘图窗口

	// 初始化所有星星
	for(int i = 0; i < MAXSTAR; i++)
	{
		InitStar(i);
		star[i].x = rand() % 640;
	}

	// 绘制星空,按任意键退出
	while(!_kbhit())
	{
		for(int i = 0; i < MAXSTAR; i++)
			MoveStar(i);
		Sleep(20);
	}

	closegraph();					// 关闭绘图窗口
	return 0;
}

鼠标操作

// 编译环境:Visual C++ 6.0~2022,EasyX_2023大暑版
// https://easyx.cn
//
#include <graphics.h>

int main()
{
	// 初始化图形窗口
	initgraph(640, 480);

	ExMessage m;		// 定义消息变量

	while(true)
	{
		// 获取一条鼠标或按键消息
		m = getmessage(EX_MOUSE | EX_KEY);

		switch(m.message)
		{
			case WM_MOUSEMOVE:
				// 鼠标移动的时候画红色的小点
				putpixel(m.x, m.y, RED);
				break;

			case WM_LBUTTONDOWN:
				// 如果点左键的同时按下了 Ctrl 键
				if (m.ctrl)
					// 画一个大方块
					rectangle(m.x - 10, m.y - 10, m.x + 10, m.y + 10);
				else
					// 画一个小方块
					rectangle(m.x - 5, m.y - 5, m.x + 5, m.y + 5);
				break;

			case WM_KEYDOWN:
				if (m.vkcode == VK_ESCAPE)
					return 0;	// 按 ESC 键退出程序
		}
	}

	// 关闭图形窗口
	closegraph();
	return 0;
}

彩虹

// 编译环境:Visual C++ 6.0~2022,EasyX_2023大暑版
// https://easyx.cn
//
#include <graphics.h>
#include <conio.h>

int main()
{
	// 创建绘图窗口
	initgraph(640, 480);

	// 画渐变的天空(通过亮度逐渐增加)
	float H = 190;		// 色相
	float S = 1;		// 饱和度
	float L = 0.7f;		// 亮度
	for(int y = 0; y < 480; y++)
	{
		L += 0.0005f;
		setlinecolor( HSLtoRGB(H, S, L) );
		line(0, y, 639, y);
	}

	// 画彩虹(通过色相逐渐增加)
	H = 0;
	S = 1;
	L = 0.5f;
	setlinestyle(PS_SOLID, 2);		// 设置线宽为 2
	for(int r = 400; r > 344; r--)
	{
		H += 5;
		setlinecolor( HSLtoRGB(H, S, L) );
		circle(500, 480, r);
	}

	// 按任意键退出
	_getch();
	closegraph();
	return 0;
}

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

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

相关文章

安防视频监控/视频集中存储/云存储平台EasyCVR无法播放HLS协议该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

Andorid 属性动画ObjectAnimation整理

属性动画相关内容可参考官网 动画资源 属性动画概览 来自官网的说明&#xff0c; 属性动画与视图动画的区别 视图动画系统仅提供为 View 对象添加动画效果的功能&#xff0c;因此&#xff0c;如果您想为非 对象添加动画效果&#xff0c;则必须实现自己的代码才能做到。视图动…

微信开发之一键创建标签的技术实现

简要描述&#xff1a; 添加标签 请求URL&#xff1a; http://域名地址/addContactLabel 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明…

高校实验室预约平台

高校实验室预约平台 我们​正在定制开发的软件&#xff0c;资源都在完成数字化管理&#xff0c;然后向社会开放… 每个行业走在向数字化深化&#xff0c;昨天看到一个数字&#xff0c;美国企业SAAS软件的渗透率为75%&#xff0c;中国企业还只有15%&#xff0c;中国企业数字化还…

同创永益入选首批“金融数字韧性与混沌工程实践试点机构”

8月16日下午&#xff0c;由北京国家金融科技认证中心、北京国家金融标准化研究院联合主办的“传递信任 服务发展”金融科技标准认证生态大会在太原成功举办。中国金融电子化集团有限公司党委书记、董事长周逢民&#xff0c;中国科学院院士冯登国&#xff0c;中国工商银行首席技…

如何制作党建专题汇报片

通过展示党组织的凝聚力和战斗力&#xff0c;增强党员的组织归属感和团结合作意识。通过宣传片&#xff0c;可以加强党组织的凝聚力&#xff0c;推动党的事业发展。制作党建专题汇报片需要一定的前期准备和后期制作技巧。下面是由深圳党建专题汇报片制作公司老友记小编为您整理…

kubesphere安装Maven+JDK17 流水线打包

kubesphere 3.4.0版本&#xff0c;默认支持的jav版本是8和11&#xff0c;不支持17 。需要我们自己定义JenKins Agent 。方法如下&#xff1a; 一、构建镜像 1、我们需要从Jenkins Agent的github仓库拉取master最新源码&#xff0c;最新源码里已经支持jdk17了。 git clone ht…

Spring 如何解决循环依赖问题 - 三级缓存

1. 什么是循环依赖问题 ? 循环依赖问题是指对象与对象之间存在相互依赖关系&#xff0c;而且形成了一个闭环&#xff0c;导致两个或多个对象都无法准确的完成对象的创建和初始化。 两个对象间的循环依赖&#xff1a; 多个对象间的循环依赖 &#xff1a; 解决 Spring 中的循环…

MobaXtermV10.7安装步骤

目录 1&#xff0c;打开​编辑 2&#xff0c;填写自己的虚拟机IP和用户名&#xff0c;点机OK 3,设置 MobaXterm是一款增强型远程连接工具&#xff0c;主要用于Windows的增强终端&#xff0c;带有X11服务器、选项卡式SSH客户端、网络工具等。在一个Windows应用程序中&#xff…

acunetix2023安装教程

1、解压之后一键安装exe文件 2、将解压出来的Awv2023.6[Windows]文件夹下的wvsc.exe文件放置于AWVS安装目录&#xff0c;与原文件进行替换&#xff0c;如图所示。&#xff08;注&#xff1a;如果是默认安装&#xff0c;则文件位置位于C:\Program Files (x86)\Acunetix\14.2.210…

C语言“牵手”京东商品详情数据方法,京东商品详情API接口,京东API申请指南

京东是中国最大的自营式电商企业&#xff0c;在线销售计算机、手机及其它数码产品、家电、汽车配件、服装与鞋类、奢侈品、家居与家庭用品、化妆品与其它个人护理用品、食品与营养品、书籍与其它媒体产品、母婴用品与玩具、体育与健身器材以及虚拟商品等。 京东平台的商品详情…

12.6V三节锂电池升压充电管理IC

HU5810C是5V输入升压充电12.6V1.2A给三节锂电池充电芯片 输入小电流不会拉死&#xff0c;温度60建议1000-1100MA带NTC热敏温度电流保护。HU5810C是一款5V输入,1.2A充电电流,支持三节锂电池串联应用 ,锂离子电池的升压充电管理IC。HU4059C集成功率MOS&#xff0c;采用异步开关架…

pycharm Failed to connect to github.com port 443: Timed out

使用浏览器发现必需打开代理才能访问github, 故有可能是pycharm没有设置代理. 在设置中选择自动代理模式.

【LeetCode】205. 同构字符串 - 数组

这里写自定义目录标题 2023-8-29 16:32:00 205. 同构字符串 2023-8-29 16:32:00 详细通俗的思路分析&#xff0c;多解法 重新了一遍解法二&#xff0c;下次再写这个题目&#xff0c;我要试一试用HashMap class Solution {public boolean isIsomorphic(String s, String t)…

视频监控/视频汇聚/视频云存储EasyCVR平台HLS流集成在小程序无法播放问题排查

安防视频/视频云存储/视频集中存储EasyCVR视频监控综合管理平台可以根据不同的场景需求&#xff0c;让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上&#xff0c;视频云存储平台EasyCVR可实现视频实时直播、云端录像、视频…

Mac系统Anaconda环境配置Python的json库

本文介绍在Mac电脑的Anaconda环境中&#xff0c;配置Python语言中&#xff0c;用以编码、解码、处理JSON数据的json库的方法&#xff1b;在Windows电脑中配置json库的方法也是类似的&#xff0c;大家可以一并参考。 JSON&#xff08;JavaScript Object Notation&#xff09;是一…

四川玖璨电子商务有限公司:抖店运营攻略

抖店运营&#xff0c;是指在抖音平台上进行电商销售的一种新型商业模式。随着抖音平台越来越受到年轻人的喜爱和关注&#xff0c;抖店运营正变得越来越重要。那么&#xff0c;抖店运营应该如何做呢&#xff1f;我们来谈谈抖店运营的一些攻略。 第一&#xff0c;选对产品。选择…

论文阅读_扩散模型_SDXL

英文名称: SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis 中文名称: SDXL&#xff1a;改进潜在扩散模型的高分辨率图像合成 论文地址: http://arxiv.org/abs/2307.01952 代码: https://github.com/Stability-AI/generative-models 时间: 2023-…

无门槛访问ChatGPT升级版-数据指北AI

大家好&#xff0c;我是脚丫先生 (o^^o) 给小伙伴们介绍ChatGPT升级版不需要任何门槛&#xff0c;不需要单独搞账号&#xff0c;只要邮箱登录的方式&#xff0c;即可访问平台&#xff0c;以用户体验为首要&#xff0c;让所有人都能无门槛的使用目前市面上最强大的AI智能聊天&a…

vue3+antdesign table实现表格行颜色

实现效果&#xff1a; 代码&#xff1a; html: <a-table:columns"stockColumns":data-source"stockData"class"ant-table-striped":rowClassName"rowClassName"></table> js: const rowClassName computed(() > {re…