easyx与ege图形库的比较学习(一)

首先对比一下两者的库文件,头文件,以vs2015 win10 64位为例:

Easyx 头文件 graphics.h , 库文件两个
EasyXa.lib // VC2015 ~ 2017 库文件(x64, MBCS 版本)
EasyXw.lib // VC2015 ~ 2017 库文件(x64, Unicode 版本)

ege头文件 graphics.h,ege.h,库文件是graphics15.lib

所以如果同时安装这两个库,只需要替换一下头文件graphics.h就可以了,其他的文件不会互相覆盖。

//ege第一个图形窗口程序
#include <graphics.h>

int main()
{
	//初始化为640*480大小
	initgraph(640, 480);

  // 画圆,圆心(200, 200),半径 100
  circle(200, 200, 100);

	//等待用户按键
	getch();

	//关闭图形界面
	closegraph();
	return 0;
}
//easyx 第一个图形窗口程序
#include <graphics.h>    
#include <conio.h>
int main()
{
    initgraph(640, 480);   // 创建绘图窗口,大小为 640x480 像素
    circle(200, 200, 100); // 画圆,圆心(200, 200),半径 100
    _getch();              // 按任意键继续
    closegraph();          // 关闭绘图窗口
    return 0;
}

流程一样,都是初始化窗口,操作,最后关闭窗口。
但是有一点细微区别,ege的代码更少一些,等待用户输入用的getch(),easyx多了一个include<conio.h>头文件,等待用户输入用的_getch()

设置颜色
#include <graphics.h>
//#include <conio.h>
//在ege中用法

int main()
{
	//初始化为640*480大小
	initgraph(640, 480);

	//设置画图颜色,使用RGB宏,三个参数值的范围均为0 - 255 (0xFF)
	//分别表示红色亮度,绿色亮度,蓝色亮度
	//EGERGB(0xFF, 0x0, 0x0) (纯红色) 等价于0xFF0000
	setcolor(EGERGB(0xFF, 0x0, 0x0));

	circle(200, 200, 100); // 画圆,圆心(200, 200),半径 100

					 
	getch();			   //等待用户按键
	

	//关闭图形界面
	closegraph();
	return 0;
}

ege中使用EGERGB宏来选取颜色,函数setcolor设定颜色。
在这里插入图片描述
在easyx中最基本的头文件是 easyx.h 。

graphics.h 头文件实现了和 Borland BGI 库的兼容。

换句话说在easyx.h的基础上,提供了与 Borland BGI 相似的函数接口。程序中只需要引用 graphics.h 头文件,即可使用 easyx.h 和下表中的所有函数。
在这里插入图片描述
这一部分ege和easyx都是一样的。

除此之外,还有一些细节不同,比如选取颜色easyx用RGB宏。

当然如果想设置颜色,easyx还可以用其他两个方法,

①设定画笔前景色setlinecolor ,和setcolor作用一样

②设置背景画笔颜色setbkcolor

注意,“背景色”是调色板绘图模式下的概念,真彩色绘图模式下没有调色板,显存中直接保存每个点的颜色,没有背景色的概念。
在 EasyX 中,已经废弃了调色板模式。那为什么还有这个背景色函数呢?

EasyX 采用真彩色绘图模式,同时使用背景色,目的有两个:

  1. 当文字背景不是透明时,指定文字的背景色。
  2. 执行 cleardevice() 或 clearcliprgn() 时,使用该颜色清空屏幕或裁剪区。

ege设置前景色:setcolor,设置背景色:setbkcolor,它并没有setlinecolor函数。

从这两个简单示例可见easyx与ege高度相近,毕竟都是为了兼容最早期的Borland BGI 库,应该说经过少量的代码修改,就能够互相转换。

相对来说ege的函数更少一些,概念也更容易理解一些(函数少),但帮助文档明显easyx做得更好。
好像ege是个人在维护? 而easyx是个小团队,所以也很正常。

颜色填充
//颜色填充
#include <graphics.h>

int main()
{
	initgraph(640, 480);

	//设置填充颜色,一般为图形内部颜色
	setfillcolor(EGERGB(0xFF, 0x0, 0x80));

	//画一实心矩形,范围为:x坐标从50-300,y坐标从100-200
	bar(50, 100, 300, 200);

	getch();

	closegraph();
	return 0;
}

在这里插入图片描述
ege的颜色填充函数setfillcolor(EGERGB(0xFF, 0x0, 0x80)),条状图bar; easyx填充也是这个函数,只不过参数写法RGB不同,条状图也是bar一样。

图形边界和填充
//ege图形边界和填充
#include <graphics.h>

int main()
{
	initgraph(640, 480);

	//设置绘图颜色,一般用于边界
	setcolor(EGERGB(0xFF, 0xFF, 0x0));

	//设置填充颜色,一般为图形内部颜色
	setfillcolor(EGERGB(0xFF, 0x0, 0x80));

	//画一带填充的椭圆
	fillellipse(200, 200, 150, 100);

	//画一个空心圆
	circle(500, 300, 100);

	//再次设置填充颜色,用于决定下一函数填充的颜色
	setfillcolor(EGERGB(0x80, 0x0, 0xFF));

	//手工填充
	//x,y是开始填充的坐标,第三个参数是填充的边界颜色,或者说以这个颜色作为边界
	//如果这个边界不封闭,那么会导致整个屏幕都是这个颜色
	floodfill(500, 300, EGERGB(0xFF, 0xFF, 0x0));

	getch();

	closegraph();
	return 0;
}

floodfill填充一个图形内部的分界点是依靠边界的颜色,而不是通常想象的数据坐标。
边界颜色可以和填充色相同,只要保证边界封闭。
在这里插入图片描述

屏幕背景色
//ege屏幕背景色
#include <graphics.h>

int main()
{
	initgraph(640, 480);

	//第一次设置背景色
	setbkcolor(EGERGB(0x0, 0x40, 0x0)); //浅绿色

	setcolor(EGERGB(0xFF, 0xFF, 0x0));
	setfillcolor(EGERGB(0xFF, 0x0, 0x80));

	//画带填充的扇形
	sector(200, 200, 45, 135, 150, 100);

	getch();

	//按下一任意键后,再次改变背景色
	setbkcolor(EGERGB(0x0, 0x0, 0x40)); //浅蓝色

	getch();

	closegraph();
	return 0;
}

//补充:另有setbkcolor_f函数,它设置的是cleardevice函数所使用的颜色,
//所以要等到cleardevice调用时,它的效果才会展现。
//当然,setbkcolor也会设置,但同时也会立即把屏幕上的原背景色改变

在这里插入图片描述
按任意键后
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值