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

基本说明

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.mfbz.cn/a/94829.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

android logcat问题 怎么换成旧版

参考 如果想切换回旧版LOGCAT&#xff0c;按照下方步骤设置即可 File->Settings->Expermental->Logcat->Enable new Logcat tool window&#xff1a;取消勾选 设置好后上方会有一个Toast&#xff0c;询问你是否使用新版logcat&#xff0c;关掉即可 最新测试版移…

【Cesium创造属于你的地球】实现地球展示、灵活进行坐标转换、视角切换

大家好&#xff0c;我是AIC山鱼&#xff01;&#x1f449;这是我的主页 &#x1f40b;作为CSDN博主和前端优质创作者✍&#xff0c;我致力于为大家带来新颖、脱俗且有趣的内容。 &#x1f431;我还创建了山鱼社区&#xff0c;这是一个独特的社区&#x1f3e0;&#xff0c;&…

激活潜能:探索职场中的自我效能感之道

引言:自我效能感的定义与重要性 自我效能感,简而言之,是个体对自己能够成功完成某项任务的信心。这种信心不仅影响我们的思考方式和情感,还影响我们的行为和动机。在职场中,高自我效能感的人往往更有动力,更能够面对挑战,而低自我效能感的人则可能会避免面对困难,容易…

微信小程序如何实现页面传参和页面传递多个参数

前言 只要你的小程序超过一个页面那么可能会需要涉及到页面参数的传递&#xff0c;下面我总结了 4 种页面方法。 下面时多个参数页面传参的方式 let loveJSON.stringify(this.data.totle);let youJSON.stringify(this.data.totleId)let csdnJSON.stringify(this.data.totleP…

瞬态电压抑制器(TVS)汽车级 SZESD9B5.0ST5G 工作原理、特性参数、封装形式

什么是汽车级TVS二极管&#xff1f; TVS二极管是一种用于保护电子电路的电子元件。它主要用于电路中的过电压保护&#xff0c;防止电压过高而损坏其他部件。TVS二极管通常被称为“汽车级”是因为它们能够满足汽车电子系统的特殊要求。 在汽车电子系统中&#xff0c;由于车辆启…

Golang Gorm 一对多的添加

一对多的添加有两种情况&#xff1a; 一种是添加用户的时候同时创建文章其次是创建文章关联已经存在的用户。 package mainimport ("gorm.io/driver/mysql""gorm.io/gorm" )// User 用户表 一个用户拥有多篇文章 type User struct {ID int64Name …

SpringBoot整合thymeleaf

JavaEE领域有几种常用的模板引擎: Jsp, Thymeleaf, Freemarker, Velocity等.对于前端页面渲染效率来说 JSP 其实还是最快的, Velocity次之.Thymeleaf虽然渲染效率不是很快,但语法比较轻巧. Thymeleaf 支持html5标准, Thymeleaf页面无需部署到servlet开发到服务器上,以 .html 后…

JVM,JRE和JDK的区别

JVM&#xff0c;JRE和JDK的区别 JVM(Java Virtual Machine&#xff0c;Java虚拟机)JREJRE目录结构 JDK JVM(Java Virtual Machine&#xff0c;Java虚拟机) Java程序的跨平台特性主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行&#xff0c;Java虚拟机中…

网络安全(黑客技术)0基础学习手册

目录梗概 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01; 网络安全可以基于攻击和防御视角来…

论文阅读_图形图像_U-NET

name_en: U-Net: Convolutional Networks for Biomedical Image Segmentation name_ch: U-Net&#xff1a;用于生物医学图像分割的卷积网络 addr: http://link.springer.com/10.1007/978-3-319-24574-4_28 doi: 10.1007/978-3-319-24574-4_28 date_read: 2023-02-08 date_publi…

c++之指针

总结性质 我们如何在一个函数中获取数组的长度&#xff1a; 我们都知道&#xff0c;在main函数中我们获得数组的长度只需要使用sizeof&#xff08;a&#xff09;/sizeof&#xff08;a【0】&#xff09;即可获得&#xff0c;但当我们把一个数组传入到方法时&#xff0c;c默认把…

QT概括-Rainy

Qt 虽然经常被当做一个 GUI 库&#xff0c;用来开发图形界面应用程序&#xff0c;但这并不是 Qt 的全部&#xff1b;Qt 除了可以绘制漂亮的界面&#xff08;包括控件、布局、交互&#xff09;&#xff0c;还包含很多其它功能&#xff0c;比如多线程、访问数据库、图像处理、音频…

循环神经网络(RNN) | 项目还不成熟 |还在初级阶段

一&#xff0c;定义 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一种深度学习神经网络架构&#xff0c;专门设计用于处理序列数据&#xff0c;如时间序列数据、自然语言文本等&#xff08;一般用来解决序列问题&#xff09;。 因为它们具…

部署 ssm 项目到云服务器上(购买云服务器 + 操作远程云服务器 + 服务器中的环境搭建 + 部署项目到服务器)

部署 Web 项目 1、获取 Linux 环境1.1、如何去买一个云服务器1.2、远程操作云服务器1.3、在 Linux 系统中搭建 Java Web 的运行环境。1&#xff09;安装 JDK&#xff08;使用包管理器 yum 来安装&#xff09;2&#xff09; 安装Tomcat3&#xff09;安装 MySQL。 1.4、在云服务器…

MySQL概述,架构原理

一.MySQL简介 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典的MySQL AB公司开发&#xff0c;后被oracle公司收购&#xff0c;MySQL是当下最流行的关系型数据库管理系统之一&#xff0c;在WEB应用方面&#xff0c;MySQL是最好的RDBMS&#xff08;Relational Database Man…

Android屏幕适配(5) — 最小宽度smallWidth适配

概述 最小宽度smallWidth适配实现屏幕适配方案 详细 前言 在之前的文章中&#xff0c;我们讲到了Android屏幕适配的一些知识&#xff0c;大家感兴趣的话可参考Android屏幕适配(1) — 概念解释Android屏幕适配(2) — drawable与mipmapAndroid屏幕适配(3) — 资源文件夹命名与…

42、基于51单片机的蓝牙智能手环系统(全套资料)

编号&#xff1a;42 基于51单片机的蓝牙智能手环系统 功能描述&#xff1a; 本设计由STC89C52单片机最小系统ADXL345三轴加速传感器模块DS1302时钟模块DS18B20温度传感器模块Pulse Sensor心率采集模块BT06蓝牙模块LCD1602显示模块键盘模块组成 1、采用STC89C52单片机为主控制…

国际旅游网络的大数据分析(数学建模练习题)

题目&#xff1a;国际旅游网络的大数据分析 伴随着大数据时代的到来,数据分析已经深入到现代社会生活中的各个方面。 无论是国家政府部门、企事业单位还是个人&#xff0c;数据分析工作都是进行决策之前的 重要环节。 山东省应用统计学会是在省民政厅注册的学术类社会组织&…

Node与Express后端架构:高性能的Web应用服务

在现代Web应用开发中&#xff0c;后端架构的性能和可扩展性至关重要。Node.js作为一个基于事件驱动、非阻塞I/O的平台&#xff0c;以及Express作为一个流行的Node.js框架&#xff0c;共同构建了高性能的Web应用服务。 在本文中&#xff0c;我们将深入探讨Node与Express后端架构…

先进API生产力工具eqable HTTP,一站式开发调试工具推荐

简介 Reqable是什么? Regable Fiddler/Charles Postman Reqable是HTTP一站式开发调试国产化解决方案&#xff0c;拥有更便捷的体验&#xff0c;更先进的协议&#xff0c;更高效的性能和更精致的界面。 Reqable是一款跨平台的专业HTTP开发和调试工具&#xff0c;在全平台支持…
最新文章