主页->关于

Easy Graphics Engine

相关信息:


项目:https://github.com/wysaid/xege
作者:wysaid
官网:https://xege.org/
原作者:misakamm(misakamm@gmail.com)

更新历史:


版本更新日志
 24.04 
配置变更
1. 库文件名统一命名为 graphics(libgraphics.a, graphics.lib),不区分 64/32 位
2. GCC 链接的库由 20.08 的 9 个调整为 3个: -lgraphics -lgdi32 -lgdiplus

新增功能
1.  新增 EGE_VERSION, EGE_VERSION_NUMBER 等版本相关的宏
2.  提供 Linux /MacOs 下的编译支持(使用 MinGW-W64 工具链)
3.  新增 putimage_rotatetransparent(),支持指定透明色旋转绘制图像
4.  新增 putpixel_savealpha(写入像素时保留原来的 alpha 值),
5.  新增 putpixel_alphablend(使用 alpha 混合公式写入像素)
6.  新增 ege_drawimage(),用于绘制带透明通道图像(支持坐标变换,拉伸)
7.  新增控制台系列相关函数(不支持 VC++ 6.0)
8.  新增圆角矩形系列函数、填充圆系列函数,饼形系列函数,闭合曲线系列函数,填充矩形(fillrect)
9.  新增无边框填充的普通图形函数
10. 新增与 drawpoly 相似但更明确的 polyline(折线), polygon(多边形)
11. 新增路径图形
12. 支持保存带透明通道的 BMP 图片, 新增保存 BMP 格式图片的 savebmp 函数
13. 新增 key_A 和 key_Z 中间的键码定义
14. 新增更多预定义颜色
15. 新增按键标志位key_flag_first_down,指示按键按下时发送的第一次 down 消息
16. 新增 showwindow(), hidewindow() 函数,用于控制窗口显示/隐藏
17. 新增 INIT_HIDE 初始化模式,使用窗口创建后不可见(调用 showwindow() 显示窗口)
18. 支持在 EGE 中使用 UTF-8 字符串
19. 新增用于刷新窗口的 flushwindow() 函数,确保显示绘图内容
20. 提供对 VS2022 的支持
21. putimage_withalpha() 支持缩放
22. ege_系列绘图函数支持设置线型(由 setlinestyle 设置)
23. MUSIC 类增加 RepeatPlay(), 支持循环播放
24. 新增 alpha 颜色混合计算函数 alphablend(标准公式), colorblend(保留目标颜色的alpha值),
    alphablend_premultiplied(预乘 alpha 格式)
25. 支持设置线帽和线条连接样式
26. randomize 支持传入随机数种子,并且会返回所使用的随机数种子
27. 新增 ege_系列使用 ARGB 颜色的单行文本输出函数(ege_xyprintf, ege_outtextxy)
28. 支持对使用预乘 alpha 像素格式的图像进行混合
29. 支持设置和获取 EGE 所使用的代码页
30. ege_系列高级绘图函数支持坐标变换
31. 支持独立设置和获取线条颜色和文本颜色

功能变更
1. getimage() 返回值类型统一为 int, 表示是否成功读取图像
2. saveimage() 根据文件名后缀确定保存为 PNG 格式还是 BMP 格式(优先保存为 PNG 格式)
3. resize() 恢复为自动填充背景色(20.08 行为改为不填充,现恢复),另新增不填充背景色的 resize_f()
4. EGERGB(), EGEARGB() 等宏的返回值类型修改为 color_t
5. 定时精度提升至 1ms
6. 为部分类型增加 EGE_XXX_TYPEDEF 宏,控制类型定义
7. 消除扩展中的头文件包含顺序依赖
8. 取消 setfillstyle/getfillstyle 的弃用标记
9. 图像旋转正方向修改为与坐标系一致的顺时针方向
10. 调整文本垂直对齐方式的值
11. 为 GCC4.5 以上版本增加弃用信息
12. 线条连接点默认样式统一修改为尖角
13. color_t 恢复为与 uint32_t 一致的 unsigned int 类型(20.08 为 DWORD)

问题修复
1. 修复 inputbox_getline() 界面发黑的问题(20.08 引入)
2. 修复 sector 函数在半径小于等于20时出现绘制错误的问题
3. 修复 drawpoly 绘制闭合多边形时首尾连接点无拐角的问题
4. 修复 setinitmode() 无法改变窗口位置的问题 (20.08 引入)
5. 修复初始化后 initgraph(-1, -1) 无法将窗口大小设置为全屏的问题
6. 修复 sys_edit的 isfocus() 函数不可用的问题
7. 修复 sys_edit 在调用 setfocus 后不显示光标的问题
8. 修复初始化后鼠标初始位置不正确的问题
9. 修复 rgb2gray 未对做近似处理的问题
10. 修复用户手动关闭窗口,不能马上退出的问题
11. 修复 delay_ms(0) 延时过长的问题,改为与 Sleep(0) 一致的行为(放弃剩余 CPU 时间片,其它线程执行后立即返回)
12. 修复角度不为0的文本在设置垂直居中时发生偏移的问题
13. 修复 RGB 格式图片文件读取后图像 alpha 通道为 0 的问题
14. 修复 ege_drawtext() 无法旋转的问题
15. 修复填充模式 EMPTY_FILL 不正确的问题
16. 修复矩形区域输出文本无法按照对齐方式正确的问题
17. 修复ege_drawtext()无法按照指定字体宽度输出文本的问题
18. 修复 outtext() 不更新当前点的问题
19. 纠正 HOME 键和END键的键码
20. 修复设置视口后当前点没有移动至视口左上角的问题
21. 修复 putimage 系列函数在源矩形区域左上角不为(0,0) 且宽高使用默认值0时会发生越界的问题
22. 修复设置视口后 GDI+ 绘图坐标系未移动至视口左上角的问题
23. VECTOR3D 的 GetAngel() 函数纠正为 GetAngle()
24. 修复 random() 无默认参数的问题
25. 修复 keystate 在打开文件对话窗口后失效的问题

其它
1. 绘图性能优化(GDI+ 实现的图形绘制以及 GDI 的直线绘制)
2. 减少初次显示屏幕时的闪烁
3. 图片读取速度优化
 20.08 
 新增功能
 1.  [2019-10-26] 提供对 VS2019 的支持
 2.  [2019-10-26] 引入 CMAKE 构建系统,支持 MSVC 系列和 MinGW-W64 版本编译器
 3.  [2020-04-14] 在 key_code_e 中新增小键盘符号键键码
 4.  [2020-04-25] 新增使用 ARGB 的 ege_drawtext() 文本输出函数
 5.  [2020-04-28] 支持加载 PNG 资源文件
 6.  [2020-05-13] 新增 movewindow() 和 resizewindow() 函数,用于调整窗口大小和位置
 7.  [2020-05-13] 新增 getHDC() 函数,支持获取图像及窗口帧缓冲区的 HDC 句柄
 8.  [2020-05-13] 新增 getGraphicsVer(),获取 ege 库版本
 9.  [2020-06-27] 新增 seticon() 函数,支持通过传入图标资源 ID 设置 EGE 窗口图标,可在 initgraph() 之前调用
 10. [2020-06-27] 新增 INIT_UNICODE 初始化模式,允许创建 Unicode 窗口
 11. [2020-07-02] 新增不创建窗口而直接对图像进行绘图的功能,可在 initgraph() 之前调用 newimage()
 12. [2020-07-07] 新增 putimage_alphafilter() 函数
 13. [2020-07-26] 新增 putpixel_withalpha/putpixel_withalpha_f 绘制带透明通道像素点
 14. [2020-07-26] 新增 alphablend() ARGB 颜色混合函数
 15. [2020-08-12] 添加 LGPL 开源许可证

功能变更:
 1.  [2020-04-06] 项目内移除 gdiplus 依赖
 2.  [2020-05-19] 使用 Simsun(宋体)作为默认字体
 3.  [2020-07-02] 创建图像或调用 resize 时,支持将图像宽高设置为 0
 4.  [2020-07-03] resize() 不自动对图像以背景色填充,以提高效率
 5.  [2020-07-04] EGERGB() 宏生成的 RGB 颜色透明通道由 0 改为 255
 6.  [2020-07-07] putimage_withalpha(), putimage_alphablend(), putimage_alphatransparent() 使用误差更小的 Alpha 通道混合算法
 7.  [2020-07-07] putimage_transparent() 改为仅比较 RGB 通道,忽略 Alpha 通道
 8.  [2020-07-19] 为 getimage() 增加 NULL 参数检查
 9.  [2020-07-26] color_t 的定义由 unsigned int 改为 DWORD(unsigned long)
 10. [2020-07-26] initgraph() 不使用默认参数而改为两个重载

错误修复:
 1. [2019-02-02] 修复无法接收到 key_msg_char 类型消息的错误
 2. [2019-02-04] 修复 putimage_xxx 系列函数在裁剪区域外绘图的错误
 3. [2020-03-19] 修复绘图图像时绘制区域比裁剪区域小 1 行 1 列的计算错误
 4. [2020-04-12] 修复 clearviewport() 使用填充颜色对视口区域进行清除的错误
 5. [2020-04-13] 修复 setlinewidth() 无法立即生效,需要等到 setcolor() 调用 才生效的错误
 6. [2020-04-13] 修复 setlinestyle() 自定义样式不正确的错误
 7. [2020-04-13] 修复 ege_setalpha() 传入 NULL 参数时会发生崩溃的错误
 8. [2020-04-25] 修复当使用由 GDI 实现的绘图函数时,如果设置的颜色中 Alpha 值不为 0 会出现图形颜色不正常的错误
 9. [2020-05-19] 修复 getfont() 中,在 LOGFONTW 环境下使用 LOGFONTA 的错误
 19.01 
 1. 增加对 VS2017 的支持
 2. 修复在 Windows 1809 及之后的版本上发生崩溃的错误 
 15.04 
 1.修正重绘时资源泄露的 bug
 2.文档和部分函数细节调整,增加对 VC2013 的支持,增加对 VC2015 的支持
 3.调整发布目录和编译脚本命名
 13.04 
 1.文档和部分函数细节调整,调整默认支持的编译器
 13.03 
 1.画圆/椭圆/弧函数增加浮点版本
 2.填充函数增加按颜色区域填充(类似画图的油漆桶功能)
 3.修正 IMAGE 初始化背景色不是纯黑色
 4.修正第二次 initgraph 的状态错误
 5.源代码结构细调,抽离数据结构实现
 13.02 
 1.图形效率优化
 2.getch 特殊键响应不正常修正
 3.修正 keystate 状态错误
 13.01 
 1.对 mouse_msg 友好化
 12.12 
 1.增加 putimage_withalpha
 2.修正 ege_puttexture 贴图 bug
 12.11 
 1.增加对 VC2012 的支持
 2.发布文件分类方式调整
 12.08 
 1.delay_fps/delay_jfps 增加浮点帧率支持
 2.修正文档已知错误
 12.06 
 1.新增函数 xyprintf/rectprintf
 2.修正 png 处理 alpha 为 0 的像素的方案
 3.修正对带 alpha 的图片的贴图支持
 4.增加离线示例和在线示例
 5.vs2010 编译错误修正
 6.rgb2gray 函数修正
 12.05 
 1.inputbox_getline 函数修正
 2.mousemove 消息参数修正
 3.增加发布包中的示例
 12.04 
 1.库函数调整较大,去除所有大写字母开头的函数,旧程序基本都需要改动才能正常编译
 2.mingw 编译参数有变,增加链接库 msimg32
 3.不允许使用 IMAGE,全部改用 PIMAGE,使用 newimage/delimage 构造和删除
 4.颜色全部统一为 ARGB 格式,不要使用宏 RGB,要用 EGERGB 代替(否则红蓝颠倒)
 5.增加带 Anti-aliasing 的绘图
 6.增加渐变填充
 7.增加纹理概念,增加简单的纹理贴图
 8.修正若干 bugs(主要的是鼠标移动消息参数不正确)
 9.文档增加动画示例
 10.增加支持 64 位静态库(仅vc9/vc10)
 11.去除原有的编译警告
 12.增加部分函数过时警告,不屏蔽 vs 的过时警告
 13.示例代码更新及增加
 14.增加邮件列表通讯讨论 https://lists.sourceforge.net/lists/listinfo/tcgraphics-faqs
 12.03 
 1.调整版本命名方式(年.月,像12.03即12年三月发布)
 2.调整编译参数
 3.默认标题风格调整
 4.源代码目录结构调整
 2012-01-07 
 1.对objc++编译做兼容
 2.部分函数风格调整
 3.增加控件 button(未完善,测试版)
 2011-07-24 
 1.Bug 修正
 2.解决在 vs2010 下编译不正确的问题
 3.fix 在 linux wine下窗口移动困难的问题
 2011-06-02 
 1.增加 GUI
 2.修正部分 png 读取错误
 3.调整 getkey 函数,增加配对的 kbmsg 函数
 4.增加 getmouse 函数
 5.增加 setcaption 函数
 6.版本更新为20110602 V1.0.1 Beta
 2011-05-20 
 1.调整头文件,以使兼容性更好,减少链接出错
 2.GetFPS 函数去掉参数
 3.版本更新为20110520 V0.3.8 Release
 2011-04-16 
 1.增加 png 图片格式的读写函数(读取仍然用 getimage,保存用 savepng)
 2.增加压缩解压函数(ege_compress/ege_uncompress/ege_uncompress_size)
 3.版本更新为20110416 V0.3.8 Beta
 2011-04-14 
 1.修正拖动时,窗口可能会漂移的问题
 2.重绘效率优化
 3.增加 INIT_LOCKWINDOW
 4.批量绘图函数改名为窗口锁定函数(WindowLock/WindowUpdate/WindowUnlock),原函数仍然能使用
 5.IMAGE 类增加 getdc 接口以便 GDI 操作(仅可用于Blt操作其它操作慎用)
 6.VC6库改用/MT编译以便多线程编程
 7.版本更新为20110414 V0.3.7 Release
 2011-04-01 
 1.增加 drawlines 和 drawbezier 函数,优化 drawpoly 的效率
 2.增加对设置为屏幕保护程序的支持
 3.增加安装程序
 4.增加 WM_MOUSEWHEEL 宏定义以防在 VC6 上编译出错
 5.文档更新
 6.版本更新为20110401 V0.3.6 Release
 2011-03-21 
 1.更名为 EGE,取代原 EGE(Easy Graphics Engine) 库
 2.增加旋转缩放贴图函数(接口还可能变化,暂不推荐使用)
 3.增加窗口尺寸自动修正(在分辨率变小强制窗口尺寸变小了,再变回大分辨率的时候)
 4.版本更新为20110321 V0.3.5 Release
 2011-01-29 
 1.修正头文件一个类型错误的问题
 2.增加saveimage函数,用来保存图片(目前只支持bmp)
 3.版本号更新为20110129 V0.3.4 Release
 2010-12-13 
 1.增加对基本音频播放的支持(wav, mp3, midi)
 2.版本号更新为20101213 V0.3.3 Release
 2010-12-12 
 1.更新文档
 2.增加独立下载库和帮助文档
 3.版本号更新为20101207 V0.3.2 Release
 2010-12-07 
 1.修正图形更新同步时可能偶然发生无法更新的情况
 2.增加 setbkcolor_f 函数,功能是仅设置背景颜色,
   仅当调用 cleardevice 时才使用这个颜色一次性清除屏幕
 3.提升了重绘性能,并修正一个资源泄露的问题
 4.增加 swappage 函数,实现双缓冲模式
 2010-11-22 
 1.调整 GetMousePos 初始化坐标
 2.修正鼠标滚轮坐标不正确的问题
 3.随机函数改用专业算法,并增加 randomf 函数
 4.增加 3D 数学函数
 5.增加 3D 向量类
 6.修正文档错误,补充没加到文档的函数
 7.版本号改为20101122 V0.3.1 Release
 2010-11-18 
 1.修正了三个新贴图函数的 BUG
 2.增加了 outtextrect, setfontbkcolor
 3.增加了 logo 显示
 4.修正鼠标消息接收时内容不全的问题
 5.修正多次开关批量绘图时可能会卡死的 BUG
 6.相应更新文档
 7.版本号改为20101118 V0.3.0 Release
 2010-11-13 
 1.对 imagefilter_blurring 函数调整参数次序,并增加默认参数,以使其使用更方便
 2.优化透明,半透明贴图效率
 2010-11-11 
 1.增加三个函数支持透明/半透明贴图 (putimage_transparent, putimage_alphablend, putimage_alphatransparent)
 2.增加图像模糊函数 (imagefilter_blurring)
 3.版本号改为20101111 V0.2.5 Gamma
 2010-11-01 
 1.调整 putpixels,使得效率更高一些
 2.修正部分绘图函数如 rectangle 不空心的 BUG
 3.增加 INITGRAPH 宏,以便于使用全局 IMAGE 时,抢先初始化
 4.相应更新文档
 5.版本号改为 20101101 V0.2.4 Gamma
 2010-10-23 
 1.增加 putpixels 函数,便于批量画点时提升速度
 2.修正setbkcolor函数颜色不正确的BUG
 2010-10-13 
 1.增加 GetHInstance 函数,以便作为读入资源时的参数
 2.调整 closegraph,以便 close 后再次 init
 3.修正 setviewport 在某个版本里误编辑的问题导致区域失效
 4.textwidth 和 textheight 增加单字符版本
 5.修正总是隐藏控制台无法故意显示的问题
 6.增加 KEYMSG_FIRSTDOWN,便于实现按键按下一次仅响应一次的需求
 7.修正相应的俄罗斯方块例子(因增加了 KEYMSG_FIRSTDOWN 的原因)
 2010-10-10 
 1.增加 ShowMouse 函数,以控制鼠标是否隐藏
 2.增加对 VC2005 的支持(不带 SP1,打了 SP1 的不能编译通过,其实为了更稳定建议直接用 VC2008)
 3.增加 IMAGE 对象有效性检查,以便更容易发现指针错误
 4.相应更新文档,并修正文档中部分已发现的问题
 5.调整 initgraph,允许二次调用,并修改窗口大小(这时原内容会擦除,但除了 size 和 viewport 以外,其它属性不变)
 6.修正批量画图多次调用时可能发生的死锁问题
 7.增加初始化 IMAGE 在 initgraph 之前会直接报错并强制关闭程序
 8.版本号改为 20101010 V0.2.2 Gamma
 2010-09-30 
 1.调整 delay_fps,使得帧数更稳定些
 2.修正 getch, kbhit 带参数时的一些问题
 3.改为使用 SHOW_CONSOLE 才显示控制台窗口,默认不显示,详见 PDF 内“超简单的使用预览”
 4.增加 getpixel_f, putpixel_f,为原函数的加速版(但调用时有风险,但其实原来的已经足够快,现在的已经快不了多少)
 5.增加 API_Sleep 函数用于调用原来的原版 Sleep 函数
 6.增加 delay_jfps 用于自动控制跳帧(跳多少看流畅程度,如果绘图不复杂计算量少,一般不会跳)
 7.GetFPS 函数增加一个可选参数,以便得到实际绘图帧率(在跳帧模式下)
 8.增加一些方便在 CFree 下编程的特性,如 WinMain,详见 PDF 内“超简单的使用预览”
 9.基本完成 pdf,并加入了几个比较好的程序源代码,包含一个俄罗斯方块程序
 10.版本名改为 20101001  V0.2 Gamma
 2010-09-28 
 1.前一次修改后对效率的调整和优化
 2.修正 InputBoxGetLine, getch, GetMouseMsg 的 BUG
 3.调整延迟函数的逻辑,使得在相同帧率下能更流畅
 4.增加 fclock 函数
 5.增加 mingw3.4.5 编译器使用的静态库,即能支持在 CFree 下编译
 6.增加 pdf 格式的说明文档(测试版,部分函数还没有补充完成)
 7.版本名改为 0.2 Beta
 2010-09-26 
 1.大幅修改,使程序不会因为鼠标拖动而停下
 2.即使不调用 delay 族函数也会更新窗口,只是并不流畅,所以如果你想要流畅动画,推荐手工调用 delay 族函数
 3.增加 GetFPS 函数,可以随时获取当前帧率
 4.GetLineInputBox 更名为 InputBoxGetLine,以便于增加类似 InputBoxGetNumber 时,相同前缀容易查找
 5.getch 和 kbhit 改为宏,以防与 conio.h 库冲突,当包含 conio.h 时,会自动忽略
 6.版本名改为 0.2 Alpha
 注:delay 族函数在 graphics.h 头文件的最顶处有相关的说明,就是指 Sleep, delay, delay_ms, delay_fps, getch, GetMouseMsg
 2010-09-23 
 1.修正 getch 的行为,以保持非特殊按键键码与 CRT(C Run-Time) 的 getch 一致
 2010-09-22 
 1.增加 GetLineInputBox 在图形界面下进行字符串输入,使用回车确认输入,ESC 取消输入(输入为空)
 2.扩展 getch 和 kbhit 函数,使得能根据参数把按键放开的事件也能取得,两个函数需要组合使用
 2010-09-21 
 1.增加 void setinitmode(int mode, int x = CW_USEDEFAULT, int y = CW_USEDEFAULT)
 第一个参数 mode = 0 为普通窗口,1 为无边框窗口,xy 是初始窗口坐标,mode 为 1 时,用于方便全屏模式
 此函数必须在 initgraph 前调用,否则无效
 2.initgraph 函数,若窗口大小均指定为 -1,-1,则使用屏幕大小,用于方便全屏,全屏后可用 getwidth 和 getheight 取得窗口大小
 3.VC 下使用 HIDE_CONSOLE 可以使控制台窗口彻底消失,使用方法如下:
 #define HIDE_CONSOLE
 #include <graphics.h>
 要注意的是,#define HIDE_CONSOLE 必须在 graphics.h 的前面
 4.改为Beta版本
 2010-09-20 
 1.修正若干 BUG
 2010-09-18 
 1.第一版发布测试