在上学期小学期转专业班的补课-十天内完成来bupt的第一个项目,我负责就是图形化和完成输出的任务。
最开始我是用的Qt,但是Qt的入门和掌握太花时间了,最后万般无奈地情况下我选择了EGE图形库。
首先提一下,笔者使用Visual Studio 2017开发环境,至于ege图形库安装和生效大家可以去csdn里面搜。
ege能实现一些图形化的功能,比如说:
绘制直线 绘制矩形 绘制曲线(正圆和椭圆) 绘制字符串
贴图:各种格式图片文件
设置画笔的颜色和线条粗细 提供文本输入对话框 移动画面的某些部分(动画)
安好了ege之后。。。
#include <graphics.h> // 引用图形库
新建和关闭图像:initgraph(640,480)//创建大小为640*480的画卷
对应的,关闭图像:closegraph()
处理鼠标/键盘事件:getch(),getkey(),getmouse(),其中getch和c一样的用法
在某个坐标画圆:circle(横坐标,纵坐标,半径大小)
到此我们可以初步的尝试一下了:
#include <graphics.h> // 就是需要引用这个图形库
int main()
{
initgraph(640, 480); // 初始化为640*480大小的窗口
circle(200, 200, 100); // 画圆,圆心(200, 200),半径100
getch(); // 等待用户按键,按任意键继续
closegraph(); // 关闭图形界面
return 0;
}
提一句:在生成的图像中,xy轴是这样的分布,x代表水平轴,y代表铅垂轴,长度的单位为像素
还有一些函数:
setbkcolor 设置当前绘图背景色,就是生成的图画的背景颜色
setcolor 设置当前绘图前景色,比如你要写一串紫色的fuck you
setfillcolor 设置当前绘图填充色
arc 画椭圆弧。
bar 画无边框填充矩形。
drawpoly 画多边形。
ellipse 画椭圆。
fillellipse 画填充椭圆。
fillpoly 画填充的多边形。
我们接下来看一个小程序:
#include <graphics.h>
#include <conio.h>
#include <windows.h>
int runbar(); //上下移动的方块
int main() {
initgraph(640, 480);
runbar(); // 调用动画函数
closegraph(); // 关闭图形界面
return 0;
}
int runbar()//移动的方块
{ setbkcolor(WHITE);
int direction=1;
int positionY=80;
int speed=20;//方块运行速度
while(!_kbhit())//按任意键结束
{
if(positionY<80||positionY>391)
direction=(direction+1)%2;//改变方向
setfillcolor(BLUE);
bar(280,positionY,380,positionY+20);
Sleep(speed);
setfillcolor(WHITE);
//擦除原来的方块,用与背景相同的颜色
bar(280,positionY,380,positionY+20);
if(direction==1) positionY += 10;
else positionY -= 10;
}
}
另外,文字输出函数:
setfont(30, 0, "华文楷体");//指定字体高度宽度
setcolor(BLACK);
outtextxy(270, 20, "演示程序"); //写文字,outtextxy不支持\t \n这类格式化用的特殊字符
outtextxy(100, 100, "Hello EGE Graphics"); //要使用特殊格式化字符请用outtextrect
outtextrect(100, 120, 200, 100, "\tHello EGE Graphics\nHere is the next line.");
举个例子:
void output(){
//文字背景色(注意setbkcolor函数也会同时改变文字背景色)
setfontbkcolor(EGERGB(0x80, 0x00, 0x80));
//设置字体,第一个参数是字体的高度(像素),第二个参数是字体的宽度,第二个参数如果为0,就使用默认比例值
//如果高度为12,即相当于小五号字,或者9磅字
setfont(20, 0, "宋体");
outtextxy(100, 100, "Hello EGE Graphics");
outtextrect(100, 120, 200, 100, "\tHello EGE Graphics\nHere is the next line.");
//设置文字背景填充方式为透明,默认为OPAQUE不透明
setbkmode(TRANSPARENT);
outtextxy(100, 250, "Hello EGE Graphics, 中文也是支持的");
getch();
}