首先对比一下两者的库文件,头文件,以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 采用真彩色绘图模式,同时使用背景色,目的有两个:
- 当文字背景不是透明时,指定文字的背景色。
- 执行 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也会设置,但同时也会立即把屏幕上的原背景色改变

按任意键后

2136

被折叠的 条评论
为什么被折叠?



