- 注册时间
- 2010-5-1
- 最后登录
- 2012-3-13
- 在线时间
- 437 小时
- 鹏币
- 1378
- 阅读权限
- 100
- 积分
- 4622
- 帖子
- 404
- 主题
- 41
- 精华
- 10
- UID
- 53409
  
|
发表于 2010-5-12 15:45:19
|显示全部楼层
ege 即 easy graphics engine 的缩写,简易图形引擎。
新版本的ege已出炉,地址:猛击此处 tcgraphics.sourceforge.net 是sourceforge的链接
新版本的ege与旧版本略有不同,教程依然保留,以下教程为旧版ege的教程
如果需要新版本的ege,那请看新版本的ege内的链接以及教程。注:新版本的ege为开源图形库
另附带xege可以在linux/windows下编译使用,但还是测试版本
新的ege维护作者的blog: http://blog.misakamm.org
本课程基于本人做的一个仿TC的graphics.h的BGI库,是一个为了让VC上使用graphics.h的库
如果你有使用那个库的经历,那学起来会快得多,本库是基于GDI编写的BGI兼容库,不过有少数地方和TC不太一样。
但能让很多基于BGI的图形程序经过简单修改移植到Windows。
它除了支持绝大部分常用的TC图形函数外,还:
支持更高的颜色数,并且有更丰富的高级图形操作,
简单易用,编译的程序可以完美在Windows98或以上版本的系统运行,
更高的绘图效率,中文字体完美支持,更丰富的字体选择,
支持从文件或者资源读取图片数据,支持jpg/png/gif/wmf等压缩格式
支持保存图片为bmp/jpg/png等格式
支持HSV/HSL与RGB颜色之间进行转换
支持透明半透明贴图,支持图形旋转、缩放、不规则拉伸、反转
支持简单的三维图形操作
支持简单的数据压缩/解压缩,
。
更多应用,可以见本文最后本人发布的作品列表和以下教学帖子中的介绍。敬请留意。
目录:
1. 基本框架和基本函数http://www.rupeng.com/forum/viewthread.php?tid=12260
2. 用户交互,以及颜色模式http://www.rupeng.com/forum/viewthread.php?tid=12266
第一次作业:http://www.rupeng.com/forum/viewthread.php?tid=12285
3. 基本绘图函数大杂汇(含完整库文档)http://www.rupeng.com/forum/viewthread.php?tid=12362
4. 函数使用注意事项及绘图技巧http://www.rupeng.com/forum/viewthread.php?tid=12562
第二次作业:http://www.rupeng.com/forum/viewthread.php?tid=12937
5. 客户端游戏编程基础设计模式http://www.rupeng.com/forum/viewthread.php?tid=13168
更新记录(请大家留意更新):
2010 05 12 第一版发布
2010 05 21 修正字体大小设置的问题,增加自定义字体功能,修正高级贴图函数的BUG等等
2010 06 05 修正链接参数的问题,增加VS2005版本的库文件及工程,增加完整函数文档,详见第三课
2010 06 14 修正输出文字垂直对齐的BUG,增加GDI对象缓存,增加图像旋转缩放贴图
2010 06 28 调整延迟机制,增加配置指令,浮点参数全部改为float,增加图像旋转时平滑的处理
2010 07 03 修正库部分函数的BUG,调整框架,增加多窗口支持,增加类C++调用模式,增加gcc mingw的支持
2010 07 07 修正部分贴图函数的BUG,增加对Python2.5 / 2.6的支持,所有除Python外,其它均改用C编译
2010 09 04 增加对png文件的支持,增加图片保存的支持,增加简单压缩解压的支持,
增加对HSV/HSL颜色空间转换的支持,对多窗口支持进行了完善,
增加自定义资源读取,增加部分基础画图函数的平滑绘图功能,
增加对C#的支持,但部分函数还没更新进去,Python版部分函数没有添加(如压缩解压)
部分函数功能重新定义,头文件结构调整
使用方法(如果你曾经下载过本库,那请重新下载,本版本结构有比较大的不同,以下教程针对0904版):
VC6:
先下载附件,用VC6(必须为打了SP6的版本),把GDIplus.zip里面的gdiplus.lib放到VC的lib目录里
建立一个console(控制台)工程,点确认后,在弹出的对话框中选择空工程(empty project)
然后,新建一个main.cpp加入到工程里
再把附件里的yzfy_graphics.h, yzfy_graphics6.lib, yzfy_dos.h, graphics.h四个文件复制到工程目录,
然后在main.cpp里按下文编写代码,然后编译就可以了
如果你用的不是VC6,而是VC2005(不带SP1补丁版)或者VC2008,那么请改用yzfy_graphics05.lib或者yzfy_graphics08.lib
其中yzfy_graphics08.lib也能用在VC2010上,对于gcc mingw静态库版本,使用-lyzfy_graphics链接参数,并且要安装gdiplus包。
代码编写:
以下是简单的示例程序,请复制如下代码到你的main.cpp里:
#include "graphics.h"
int main()
{
int driver = DETECT, mode = 0;
initgraph(&driver, &mode, "第一个ege程序");
bar(100, 100, 200, 200);
getch();
closegraph();
return 0;
}
以上代码一运行,就有一个正方形出现在窗口里
简单解释:
首先,调用了initgraph,initgraph的前两个参数先不用管,第三个参数是指定窗口的标题内容。
目的是初始化绘图,并且显示窗口。
然后,bar函数在窗口的100,100至200,200的地方,画出一个正方形,你可以试试改一改这个数值,看看形状会发生怎么样的变化。
再者,getch函数等待用户键盘和鼠标的按键输入,当有键盘按键按下,或者鼠标按键按下的时候,这个函数就会返回按下的键的键码。
最后,closegraph结束绘图,窗口消失,然后return 0,结束整个程序,这就是这个程序的流程。
以下我们来看一个稍复杂的例子:
#include"graphics.h"
#include <time.h>
#include <stdio.h>
void init()
{
int g = DETECT, m = 0;
initgraph(&g, &m, "Hello World");
}
int main()
{
/*初始化*/
init();
/*主循环*/
for (; kbhit() == 0; delay_fps(60))
{
cleardevice(); /*清除屏幕*/
setcolor(GREEN);
outtextxy(100, 100, "Hello World"); /*在(100,100)的地方输出"Hello World"*/
}
/*结束*/
closegraph();
return 0;
}
然后编译,如果编译成功,运行后你会在一个图形窗口中看到绿色的"Hello World",如下图
以上是一个最简单的图形版Hello World程序

现在简要解释一下这个程序
先不用管前三行,那三行是必需的,不要修改它,先看下面
首先,定义了一个init函数,这个用来做图形初始化,其实它就调用了initgraph,当然你把那两行复制到main函数里也行
initgraph的前两个参数先不用管,第三个参数是指定窗口的标题内容。
然后,main函数里调用init后,进入主循环
主循环的结构很简单,关键是
for (; kbhit() == 0; delay_fps(60))
kbhit这个函数检测有没有按键按下,有就返回非0,否则返回0
delay_fps这个函数表示延迟1/60秒的时间,目的是要达到每秒刷新60次
在主循环里面,
cleardevice,用于清除屏幕内容
setcolor,设置绘画用的颜色,其颜色常数定义在yzfy_graphics.h里,比如RED表示红,WHITE表示白等等
outtextxy,指定在某个坐标输出文字内容
出了主循环后
closegraph关闭绘图窗口,释放内存
如果用过TC的BGI图形的人,会发现这些几乎和TC的一模一样,只有initgraph的第三个参数的意义不相同。
正是如此,如果你曾经用过TC的BGI图形,那这个库你应该能很快上手。
另外,
附件中还包含一个VC6工程,一个VS2005工程和一个VS2008工程,是已经按如上说明配置好了的,
内容是第一次作业的代码,大家可以参考
然后,我们再补充一些简单的作图函数:
line(int x0, int y0, int x1, int y1);
从x0,y0画一线段到x1,y1
bar(int x1, int y1, int x2, int y2);
以x1,y1为左上角,x2,y2为右下角画一个实心矩形
rectangle(int x1, int y1, int x2, int y2);
以x1,y1为左上角,x2,y2为右下角画一个空心矩形
circle(int x, int y, int radius);
以x,y为圆心,radius为半径画一个圆
putpixel(int x, int y, int color);
在x,y的地方以color画一个点
getpixel(int x, int y);
获得x,y的地方的点的颜色
getch();
暂停并等待用户的按键
还有很多很多的绘图函数可以在头文件里查得到,详细可以看教学第三篇文章
你可以试试加在刚刚的程序里的主循环,看看有什么效果
本课讲了图形的初始化,和基本的文字输出,基本的图形函数,以及主循环时间控制三部分内容,
用这三个,足够可以写很多很有意思的程序了,比如变幻线,数字雨,只有想不到,没有做不到!
下一课:与用户交互,接收鼠标和键盘操作,以及颜色模式
http://www.rupeng.com/forum/viewthread.php?tid=12266
已发布作品列表:
变幻线 http://www.rupeng.com/forum/thread-11990-1-1.html
下雪 http://www.rupeng.com/forum/thread-12155-1-3.html
数字雨 http://www.rupeng.com/forum/thread-12209-1-2.html
3d立方体 http://www.rupeng.com/forum/thread-12201-1-2.html
碧波荡漾 http://www.rupeng.com/forum/thread-12090-1-3.html
俄罗斯方块 http://www.rupeng.com/forum/thread-13118-1-2.html
音乐播放器 http://www.rupeng.com/forum/thread-13252-1-1.html |
-
总评分: 鹏币 + 8
查看全部评分
|