lvgl 绘制原理

lvgl 绘制,其实就是给一个buffer 里写上各个像素点的rgba 值,那么这个buffer 就是 disp->driver->draw_buf->buf_act,给这个变量写rgba 值就能显示出来了。

给这个buffer 写rgba , 那这个 rgba 数值是怎么得到的,估计就是类似算法问题了。

首先简单的就是 

1. LVGL 检查无效区域并连接相邻或相交的区域;

2. 把这些对象都纪录下来,然后调用对象的 lv_xx_draw_xx 函数, 给 buffer 的固定位置写值

3..当区域被渲染时,从显示驱动程序调用 flush_cb 来刷新显示;


uint32_t test_mysqrt(uint32_t num)
{
    uint32_t res = 0;
    uint32_t xx = num / 2;
    for (uint32_t i = 0; i < xx; i++) {
        if (i * i >= num) {
            return i;
        }
    }
    return res;
}



void set_pure_color(void)
{
    lv_disp_t* disp = lv_disp_get_default();
    if (disp) {
        uint32_t* buf = disp->driver->draw_buf->buf_act;
        for (uint32_t i = 0; i < disp->driver->hor_res; i++) {
            for (uint32_t j = 0; j < disp->driver->ver_res; j++) {
                buf[i * disp->driver->ver_res + j] = 0x00Fa5701;
            }
        }
    }
}

void write_one(void)
{
    lv_disp_t* disp = lv_disp_get_default();
    if (disp) {
        uint32_t* buf = disp->driver->draw_buf->buf_act;
        for (uint32_t i = 0; i < disp->driver->ver_res; i++) {
            for (uint32_t j = 0; j < disp->driver->hor_res; j++) {
                buf[i * disp->driver->hor_res + j] = 0x00FF0000;
            }
        }

        for (uint32_t i = 10; i < 55; i++) {
            for (uint32_t j = 10; j < 25; j++) {
                buf[i * disp->driver->hor_res + j] = 0xFa570100;
            }
        }
    }
}

void write_circle(void)
{
    // (x - 100)^2 + (y - 100)^2 = 100 ^2
    lv_disp_t* disp = lv_disp_get_default();
    uint32_t* buf = disp->driver->draw_buf->buf_act;
    for (uint32_t i = 0; i < 200; i++) {
        uint32_t num1 = 100 * 100 - (i - 100) * (i - 100);
        uint32_t y_b = test_mysqrt(num1);
        uint32_t y = y_b + 100;
        buf[i * disp->driver->hor_res + y] = 0xFa570100;
        y = 100 - y_b;
        buf[i * disp->driver->hor_res + y] = 0xFa570100;
    }
    return;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PADS是一款常用的PCB设计软件,它具有绘制原理图和封装的功能。下面我将为你解释一下PADS绘制原理图和封装的基本原理。 首先,PADS绘制原理图需要以下步骤: 1. 创建项目:在PADS中创建一个新的项目文件,并设置好相关的项目参数。 2. 绘制原理图符号:使用PADS提供的符号库,选择合适的元件符号,并进行连接。 3. 添加文本和注释:在原理图中添加元件名称、引脚标记、注释等信息。 4. 连接信号:使用PADS提供的线和电源线工具连接各个元件。 5. 校验原理图:检查原理图中的连接是否正确,并进行必要的修改。 完成以上步骤后,就可以保存原理图文件,供后续的PCB布局设计使用。 接下来是PADS封装设计的基本原理: 1. 创建封装:在PADS中创建一个新的封装库文件,并设置好相关的封装参数。 2. 绘制封装外形:根据元件的实际外形,使用PADS提供的绘图工具绘制封装的外形。 3. 定义引脚:根据元件的引脚定义,使用PADS提供的引脚编辑工具定义封装的引脚信息,包括引脚位置、名称、电气特性等。 4. 添加文本和注释:在封装中添加元件名称、引脚标记、注释等信息。 5. 校验封装:检查封装中的引脚定义是否正确,并进行必要的修改。 完成以上步骤后,就可以保存封装文件,供后续的PCB布局设计使用。 以上就是PADS绘制原理图和封装的基本原理,希望能对你有所帮助。如果还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值