赞
踩
上面是我的微信和QQ群,欢迎新朋友的加入。
最近入手一个开发板,上面有一个彩屏接口,考虑到方便自己平时的开发应用,准备做个简单的GUI库。
要求不需要太高,基本的图形解码以及简单的GUI创建就行。
程序接口定义三个文件
doc:包含一些文档介绍和开发工具
oclib:定义一些基础库函数,封装常用的功能模块
ocuser:应用层与底层驱动的接口。
首先看ocuser
当前只定义了几个简单的接口函数,采用的是点驱动方式,这个方式基本上可以适应各种屏幕和硬件平台,但是有一个问题,就是它的处理效率是最低的。现在GUI刚写,为了扩展性好,先使用这种方式,后面再考虑数据流的接口函数。
其中最重要的函数是:
- /**********************************************
- * @brief :在指定的位置绘制一个像素点
- * @param : Xpos: x坐标
- * @param : Ypos: y坐标
- * @note :初始化成功返回oc_OK,失败返回oc_ON
- * @retval: 绘制成功返回oc_OK,失败返回oc_ON
- **********************************************/
- uint8_t ocPutDot(uint16_t Xpos, uint16_t Ypos);
用户层需要提供一个接口,只要输入坐标点,就能打点。
这里有个问题,如何实现数据的清除和打点颜色的设置。
最开始的时候,我想过直接把颜色也作为一个参数添加进来,不过考虑了一下又算了,对于彩屏来说,有时候并不需要频繁的设置字体或者背景颜色,虽然只是一条命令的事情,但是在整个程序流程里面来说,设置颜色这个事情是可以被优化的。
那么对于字体颜色的控制我通过结构体设置,再通过一个子函数对其调用
- //颜色控制结构体
- typedef struct
- {
- uint8_t fontForm;//字符类型
- uint32_t textColor;//字体颜色
- uint32_t textBackColor;//字体背景色
- }ocFont_t;
对于这个GUI的设计,我的几点要求是
1.移植方便:只要在接口处提供一个打点函数,早期的emwin是要求一个打点和画线的函数
2.效率高:做过显示朋友都知道,GUI设计这块,经常出现的就是刷屏速度跟不上,我想设计的一个方式图像块传输方式,对屏幕界面做一个裁剪,分层若干块,然后每次传输按块传输
3.LIB组件式:程序以组件的方式设计,尽可能减少组件之间的联系,例如我不需要BPM解码,那就直接删除相关的文件。能够随意缩小体积
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。