uGUI的基本工作原理是将GUI组件的像素通过数据修改或者替换的方法叠加在原始图像数据上
uGUI的使用非常简单,将下载的ugui.h和ugui.c文件导入PS工程中即可以使用,通过官网手册和代码注释可以查看详细用法
下载
在官网下载uGUI的最新版本
在网页的下方可以找到使用手册,源代码和示例程序
导入PS工程
可以通过复制粘贴的方式将下载的源码文件ugui.h和ugui.c文件导入PS工程
将ugui.h中的#include "system.h"
改为#include "stdint.h"
定义像素点绘制函数
为了让uGUI正常工作,还应当在程序中自定义像素点绘制函数,并且在uGUI的初始化函数UG_Init()
中通过参数指定绘制函数,否则uGUI不能工作
目前使用的像素点绘制函数如下:
//自定义像素点(x, y)的填充函数
static void pix_set(UG_S16 x, UG_S16 y, UG_COLOR c)
{
//计算当前像素点在图像缓冲中的偏移
//LINE_WIDTH为当前图像一行数据占用的字节数目
//PIX_BYTES为当前图像中一个像素点占用的字节数目
u32 pix_addr;
pix_addr = y*LINE_WIDTH+x*PIX_BYTES;
//取得配置颜色的RGB通道数值
u8 r, g, b;
r = (c >> 16) & 0xFF;
g = (c >> 8) & 0xFF;
b = c & 0xFF;
//下方的透明度算法正确,但是uGUI底层接口调用时会在刷新GUI时出现闪烁
#ifdef GUI_ALPHA//如果有透明度要求
//当前像素点值
u8 ro, go, bo;
ro = *(frame_ptr_ping+pix_addr);
go = *(frame_ptr_ping+pix_addr+1);
bo = *(frame_ptr_ping+pix_addr+2);
//当前像素点值与GUI像素点值融合
r = (u8)((float)r*GUI_ALPHA+(float)ro*(1.0F-GUI_ALPHA)+0.5F);
g = (u8)((float)g*GUI_ALPHA+(float)go*(1.0F-GUI_ALPHA)+0.5F);
b =