codeblock图形界面编程(五)基于ege库的绘图
在嵌入式的项目开发中,数据检测、记录和分析往往是必要的功能,为了更加直观有效地展示数据,图形化的显示和分析往往事半功倍,另外,在分析故障情况是,往往需要区分问题原因,专业人员通过展示的图形,就可以区分是数据采集问题、还是数据分析算法问题,达到缩小范围,高效找到并解决问题的目的。
ege库在codeblock中配置
EGE, 全称 Easy Graphics Engine(简易图形引擎),是 windows 下的简易绘图库,是一个面向 C/C++ 语言的图形库,官网下载dz :
https://xege.org
当前最新版本为:
ege20.08_all(推荐, 支持vs2010-vs2019以及devcpp,codeblocks等)
推荐使用。
关于 ege图形库在codeblock中的安装和配置,网上教程好多,不在赘述。在此只强调两点:
- 一定要正确配置ege头文件目录,目录名字中不要有中文。
- ege的lib文件夹中要选择正确的codeblock版本
一定要和codeblock的版本一致,如下图:
ege库常用函数
基础函数
(1)初始化,创建窗口
initgraph(Length_PicX, Length_PicY,INIT_RENDERMANUAL);
(2)设置绘画颜色
setcolor(EGERGB(0xFF, 0x0, 0x0));
(3)设置背景颜色
setbkcolor(WHITE);
(4)画圆
circle(320, 240, 100);
(5)画直线
ege_line(Zero_X, Zero_Y, Length_X,Length_Y);
(6)结束绘图
closegraph();
进阶函数
(1) 画矩形和填充矩形
void EGEAPI ege_rectangle(float x, float y, float w, float h, PIMAGE pimg = NULL);
void EGEAPI ege_fillrect(float x, float y, float w, float h, PIMAGE pimg = NULL);
(2)画多边形和填充多边形
void EGEAPI ege_drawpoly(int numpoints, ege_point* polypoints, PIMAGE pimg = NULL);
void EGEAPI ege_fillpoly(int numpoints, ege_point* polypoints, PIMAGE pimg = NULL);
(3)画椭圆和填充椭圆
void EGEAPI ege_ellipse(float x, float y, float w, float h, PIMAGE pimg = NULL);
void EGEAPI ege_fillellipse(float x, float y, float w, float h, PIMAGE pimg = NULL);
(4) 画扇形和填充扇形
void EGEAPI ege_pie(float x, float y, float w, float h, float stangle, float sweepAngle, PIMAGE pimg = NULL);
void EGEAPI ege_fillpie(float x, float y, float w, float h, float stangle, float sweepAngle, PIMAGE pimg = NULL);
(5)获取图像文件:
PIMAGE getimage(pimg, "图片文件名(带扩展名)");
该函数有多个重载,分别从不同的地方获取图像
项目实例
在本项目实例中,我们实现一个50hz数据采集波形的输出功能,程序实现如下:
int Drad_Pic_from_Datet(unsigned int *buff,int length,int rad)
{
int i;
int StartX,StartY,EndX,EndY;
initgraph(800, 600);
//设置绘画颜色为红色
setcolor(EGERGB(0xFF, 0x0, 0x0));
//设置背景颜色为白色
setbkcolor(WHITE);
//直线 x坐标轴
ege_line(Zero_X, Zero_Y, Zero_X+Length_X, Zero_Y+0);
//直线 y坐标轴
ege_line(Zero_X, Zero_Y+Length_Y, Zero_X+0, Zero_Y-Length_Y);
for(i=0;i<length-1;i++) //循环输出数据,描点实现绘图
{
StartX=Zero_X+i;
lsdat = (buff[i];
StartY = lsdat/rad;
EndX=Zero_X+i+1;
EndY =(buff[i+1];
ege_line(StartX,Zero_Y-StartY,EndX,Zero_Y-EndY);
}
getch();
closegraph();
return 0;
}
运行后,输出图形如下:
当然,不同的采集数据决定了输出波形的形状,我们也可以对入口参数buff做工具填充,实现填充图形的显示功能。