Easyx图形库应用(更多的图形库和GUI库)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        easyx其实很早的时候就知道,但是应用的不多。这里的应用,是指用于项目的机会不多。最多也就是学一些demo,编译练习一下。这一次因为项目的缘故,第一次系统学习和应用了easyx图形库,感觉还是完全不一样的。就是一个lib,从demo到产品原型,至少说,它是可行的,开发是高效的,有自己特定的应用场景。当然,不仅仅是easyx,其他的图形库和gui库也值得我们看看、了解了解。

1、gdi和gdi plus

        本身windows自带的图形库,称之为gdi,或者甚至有gdi plus。这些gdi的代码就是大家在创建win32程序的时候,看到的那些代码。所以,即使不用easyx,也可以用gdi这样的库进行2d图形绘制的。之所以不用,或者直接用的少,主要还是用起来比较麻烦。因为为了学习、用上gdi和gdi plus,可能得被逼学一些无关紧要的东西。这方面,easyx容易得不是一星半点,并且easyx也是基于gdi/gdi plus开发的,也只做windows平台,接口还是老式Borland BGI接口。

https://easyx.cn/

2、ege库

        本身easyx和ege都是模拟了graphics.h里面的接口。所以,两者从功能上是差不多。但是easyx目前是闭源的,ege是开源的。从这一点上来说,可能作者有自己的考虑吧。

https://xege.org/

3、sdl2库

        sdl本身也是非常优秀的一款跨平台开源库。大家如果了解ffmpeg,就知道很多人用它和sdl来做音视频开发,不然用纯命令行来进行操作音视频还是太单调了。sdl本身除了支持图形库,还支持键盘、鼠标、音频输出、多线程处理,如果不是特别重的人机交互要求,sdl开发还是非常合适的。

https://www.libsdl.org/

4、opengl+glfw

        opengl本身是用来开发3d程序的接口,但是用opengl来开发2d程序也是可以的。不过光opengl不行,一般还需要一个第三方库负责窗口绘制、键盘和鼠标响应的工作。之前这个工作是glut完成的比较多,大家搜到的一些opengl demo也是glut接口的,现在叫glfw。所以现在如果用opengl开发图形界面程序,需要glfw+opengl一起组合,才能跑起来。当然除了图形之外的其他内容就别想了,比如音频、网络等等,就要自己想办法了。opengl一般os默认安装,下载glfw即可。

https://www.glfw.org/

5、c# wpf

        在工控领域,c# wpf用的比较多。主要是wpf比较直观,比较方便,招人容易,不需要很多时间来学习,就可以掌握wpf的开发。而且wpf本身就是完整的gui开发平台,所以用c# wpf当成图形库开发也是手到擒来。c# wpf集成在vs里面,安装的时候选上即可。

6、qt平台

        最著名的gui平台肯定是qt。qt不仅是功能丰富,而且跨平台,所以windows可以用,linux可以用。电脑可以用,嵌入式设备也可以用。既然功能丰富,那么缺点就是整体略显臃肿,不太适合快速开发的demo。当然如果是开发专业的界面,还是非常合适的。

https://www.qt.io/

7、总结

        图形库本来就是想开发简单一点,有一个图形、图像的绘制,有一个鼠标、键盘的消息处理,把流程、仿真思路、算法、游戏原型短时间做出来,这就可以了。这就是图形库的由来。而且最早的pc,尤其是没有鼠标之前,基本就是基于各种图形库的开发,尤其是我们今天看到的graphics.h这种开发。只是后来随着gui的流行,图形库不仅仅可以画图,还有各种形式的gui控件,大家的注意力全部迁移到控件上面去了,忘记了图形库开发的实质是什么。当然随之而来的,就是学习曲线的提升。

        所以,如果有一些简单的客户需求,只需要某种特定的功能,直接利用graphics.h的图形库开发也是非常合适的。本身第三方库已经帮我们把后面的gui细节给屏蔽了,所见即所得,效率非常高。至此,所有图形库的讨论告一段落,大家多提宝贵意见。

注:

        知识就像浩瀚的宇宙,懂得越多,越觉得自己的渺小。最后给出一个小easyx demo,模仿一下流星,供大家一乐,

// 编译环境:Visual C++ 6.0~2022,EasyX_25.9.10
// https://easyx.cn
//
#include <graphics.h>
#include <time.h>
#include <conio.h>

#define MAXSTAR 200	// 星星总数

struct STAR
{
	double	x;
	int		y;
	double	step;
	int		color;
};

STAR star[MAXSTAR];

// 初始化星星
void InitStar(int i)
{
	star[i].x = 0;
	star[i].y = rand() % 480;
	star[i].step = (rand() % 5000) / 1000.0 + 1;
	star[i].color = (int)(star[i].step * 255 / 6.0 + 0.5);	// 速度越快,颜色越亮
	star[i].color = RGB(star[i].color, star[i].color, star[i].color);
}

// 移动星星
void MoveStar(int i)
{
	// 擦掉原来的星星
	putpixel((int)star[i].x, star[i].y, 0);

	// 计算新位置
	star[i].x += star[i].step;
	if (star[i].x > 640)	InitStar(i);

	// 画新星星
	putpixel((int)star[i].x, star[i].y, star[i].color);
}

// 主函数
int main()
{
	srand((unsigned)time(NULL));	// 随机种子
	initgraph(640, 480);			// 创建绘图窗口

	// 初始化所有星星
	for (int i = 0; i < MAXSTAR; i++)
	{
		InitStar(i);
		star[i].x = rand() % 640;
	}

	// 绘制星空,按任意键退出
	while (!_kbhit())
	{
		for (int i = 0; i < MAXSTAR; i++)
			MoveStar(i);
		Sleep(20);
	}

	closegraph();					// 关闭绘图窗口
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式-老费

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值