设为首页收藏本站

如鹏网

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 24758|回复: 85

ege图形库主帖(当前版本12.03,旧版本保留)——C简易图形编程教学1

[复制链接]

41

主题

0

好友

4622

积分

版主

笨笨的女孩

Rank: 7Rank: 7Rank: 7

如鹏网原创先锋

发表于 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

vc6egegraph.zip

112.68 KB, 下载次数: 1092

VC6静态库版

vc2008egegraph.zip

120.29 KB, 下载次数: 954

VC2008静态库版

egegraph.zip

585.15 KB, 下载次数: 430

dll通用版和gcc mingw静态库版和Python2.5/2.6动态库版和C#Dll接口声明文件

GdiPlus.zip

34.67 KB, 下载次数: 455

vc6gdiplus补丁

已有 1 人评分鹏币 收起 理由
伍星 + 8 辛苦了!

总评分: 鹏币 + 8   查看全部评分

我是笨笨的女孩,期待好好的交流  我的博客http://blog.sina.com.cn/rtgirl

29

主题

0

好友

6104

积分

论坛元老

Rank: 8Rank: 8

发表于 2010-5-12 15:58:36 |显示全部楼层

4

主题

0

好友

252

积分

中级会员

Rank: 3Rank: 3

发表于 2010-5-12 16:30:06 |显示全部楼层
哇!你就是雨中飞燕!!!偶像啊

0

主题

0

好友

4995

积分

论坛元老

Rank: 8Rank: 8

如鹏终身MVP勋章

发表于 2010-5-12 16:30:19 |显示全部楼层
非常敬佩lz的分享和无私精神~
心系如鵬,從未離開~

4

主题

0

好友

121

积分

注册会员

Rank: 2

发表于 2010-5-12 16:55:24 |显示全部楼层

6

主题

0

好友

624

积分

高级会员

Rank: 4

发表于 2010-5-12 17:19:58 |显示全部楼层
OO 发布了? 顶个!!!!!!

2353

主题

0

好友

1万

积分

版主

自学中。

Rank: 7Rank: 7Rank: 7

发表于 2010-5-12 17:37:57 |显示全部楼层
谢谢楼主精彩的文章!

0

主题

0

好友

3202

积分

论坛元老

Rank: 8Rank: 8

如鹏MVP提名勋章

发表于 2010-5-12 17:59:23 |显示全部楼层

6

主题

0

好友

335

积分

中级会员

Rank: 3Rank: 3

发表于 2010-5-12 18:39:15 |显示全部楼层
学习啦...可以运行..只是要下面的函数用的话是不是就得把hello world 给改了啊....期待下一节......

41

主题

0

好友

4622

积分

版主

笨笨的女孩

Rank: 7Rank: 7Rank: 7

如鹏网原创先锋

发表于 2010-5-12 18:45:40 |显示全部楼层
学习啦...可以运行..只是要下面的函数用的话是不是就得把hello world 给改了啊....期待下一节......
houyajun 发表于 2010-5-12 18:39



    你可以实验一下嘛,用这个就足够写出效果很炫的东西了,关键就看你的想象力了
我是笨笨的女孩,期待好好的交流  我的博客http://blog.sina.com.cn/rtgirl

6

主题

0

好友

8593

积分

版主

Rank: 7Rank: 7Rank: 7

发表于 2010-5-12 18:46:51 |显示全部楼层
谢谢学习啦!非常感谢笨笨的无私奉献!
期待下节课的到来!
默默的问下要不要交作业啊?
学习不是因为缺少时间而是缺少努力--MyBlog
  Studies this matter, lacks the time, but is lacks diligently.
                  ----xiao祥 加油 UP UP UP

19

主题

0

好友

3062

积分

论坛元老

Rank: 8Rank: 8

如鹏MVP提名勋章

发表于 2010-5-12 18:54:22 |显示全部楼层
确实是雨中飞燕!!再次仰慕!!
过去不等于未来,没有失败,只有暂时停止成功,走自己的路,让别人说去吧!

6

主题

0

好友

335

积分

中级会员

Rank: 3Rank: 3

发表于 2010-5-12 19:50:24 |显示全部楼层
回复 10# rtgirl


    恩。。问之前试了,但是没成功。。。汗。。。。之前没接触过这个。。。。看你的图感觉想想力好丰富。。。

0

主题

0

好友

12

积分

新手上路

Rank: 1

发表于 2010-5-12 20:52:05 |显示全部楼层
希望此课程能延续下去

27

主题

0

好友

1453

积分

金牌会员

Rank: 6Rank: 6

发表于 2010-5-12 21:30:07 |显示全部楼层

好好学习,天天向上






0

主题

0

好友

1489

积分

金牌会员

Rank: 6Rank: 6

发表于 2010-5-12 22:50:50 |显示全部楼层
楼主MM终于发教学贴了,鄙人一直翘首企盼啊!

6

主题

0

好友

1823

积分

金牌会员

Rank: 6Rank: 6

如鹏网宣传大使

发表于 2010-5-13 20:14:03 |显示全部楼层
哈哈!雨中飞燕,难怪最近群里面有人仰慕良多!
明天
         今天  
  昨天

0

主题

0

好友

46

积分

新手上路

Rank: 1

发表于 2010-5-13 21:17:27 |显示全部楼层

6

主题

0

好友

335

积分

中级会员

Rank: 3Rank: 3

发表于 2010-5-14 11:27:08 |显示全部楼层
问一个很菜的问题啊。
为什么不直接用TC的库呢?这样有TC基础的人学起来是不是更简单呢。

41

主题

0

好友

4622

积分

版主

笨笨的女孩

Rank: 7Rank: 7Rank: 7

如鹏网原创先锋

发表于 2010-5-14 11:40:17 |显示全部楼层
回复 19# jackxia


    win7和winxp下你用TC跑图形试试看,看看什么结果
我是笨笨的女孩,期待好好的交流  我的博客http://blog.sina.com.cn/rtgirl

6

主题

0

好友

624

积分

高级会员

Rank: 4

发表于 2010-5-14 11:47:13 |显示全部楼层
TC的要DOS。。黑屏。。占CPU很高的。。有时还会死机,而且语法不标准,现在基本没人用TC开发游戏了。另外,XP下能跑TC吧。。。

0

主题

0

好友

12

积分

新手上路

Rank: 1

发表于 2010-5-14 14:37:54 |显示全部楼层
附件怎么下载不了呢?

0

主题

0

好友

253

积分

中级会员

Rank: 3Rank: 3

发表于 2010-5-14 22:43:10 |显示全部楼层
版主是MM
太不可思议
   期待下课

6

主题

0

好友

335

积分

中级会员

Rank: 3Rank: 3

发表于 2010-5-15 12:01:17 |显示全部楼层

13

主题

0

好友

888

积分

高级会员

Rank: 4

发表于 2010-5-16 11:32:05 |显示全部楼层
回复 1# rtgirl

楼主,我想问一下,那图形窗口是640*480吗?

6

主题

0

好友

624

积分

高级会员

Rank: 4

发表于 2010-5-16 12:09:47 |显示全部楼层
initgr时gd为DETECT或TRUECOLOR时是,若gd为TRUECOLORSIZE则不但可以直接使用24位色彩还可以通过gm设置大小
gm指向的整数低16位为窗口宽度,高16位为窗口高度
on s'comprend pas toujours soi-même
et un jour
on aime

0

主题

0

好友

155

积分

注册会员

Rank: 2

发表于 2010-5-16 18:37:16 |显示全部楼层
对于学C#的人来说有用吗?
输得起,才会赢!

28

主题

0

好友

502

积分

高级会员

Rank: 4

发表于 2010-5-16 22:49:07 |显示全部楼层
要是能整成视频教程,效果会更好一些

6

主题

0

好友

624

积分

高级会员

Rank: 4

发表于 2010-5-16 22:54:26 |显示全部楼层
on s'comprend pas toujours soi-même
et un jour
on aime

41

主题

0

好友

4622

积分

版主

笨笨的女孩

Rank: 7Rank: 7Rank: 7

如鹏网原创先锋

发表于 2010-5-16 23:21:11 |显示全部楼层
要是能整成视频教程,效果会更好一些
xuwenyuan 发表于 2010-5-16 22:49



    谁学会了想做成视频的就谁做吧,反正我一定不做,我不喜欢视频的方式教人,那是浪费时间。
学会看文档是你向高阶学习的必须过程
我是笨笨的女孩,期待好好的交流  我的博客http://blog.sina.com.cn/rtgirl

您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|如鹏网 ( 粤ICP备09013919号 )   360网站安全检测平台

GMT+8, 2012-5-19 15:38

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部