您尚未登录。

楼主 #1 2018-03-02 09:57:31

F1F2
会员
注册时间: 2017-09-11
已发帖子: 99
积分: 99

有没有办法把SDL设置成RGB565(16bit)颜色,然后再把 littlevgl也改成16bit ?

有没有办法把SDL设置成RGB565(16bit)颜色,然后再把 littlevgl也改成16bit ?

离线

#2 2018-03-02 11:41:54

daydayup
会员
注册时间: 2017-10-09
已发帖子: 343
积分: 343

Re: 有没有办法把SDL设置成RGB565(16bit)颜色,然后再把 littlevgl也改成16bit ?

QQ20180302115828.png

刚刚我好奇试了一下, 居然没成功.


打开monitor.c把这个函数SDL_CreateTexture的参数改成SDL_PIXELFORMAT_RGB565
sdl的显示缓冲区配置应该就是rgb565了。

然后再把 lv_conf.h 改成这样

#define LV_COLOR_DEPTH     16

改完全部重新编译运行,就变成上面那副模样了。

离线

楼主 #3 2018-03-02 11:59:55

F1F2
会员
注册时间: 2017-09-11
已发帖子: 99
积分: 99

Re: 有没有办法把SDL设置成RGB565(16bit)颜色,然后再把 littlevgl也改成16bit ?

谢谢楼上大神,我试一试。

离线

#4 2018-03-02 14:07:03

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,342
积分: 9202

Re: 有没有办法把SDL设置成RGB565(16bit)颜色,然后再把 littlevgl也改成16bit ?

我试了一下和2楼一样的问题,
单后来看了 SDL模拟器 monitor.c 的代码,

#if LV_COLOR_DEPTH != 24
    int32_t x;
    for(y = y1; y <= y2; y++) {
        for(x = x1; x <= x2; x++) {
            tft_fb[y * MONITOR_HOR_RES + x] = lv_color_to24(*color_p) | 0xFF000000;
            color_p++;
        }

    }
#else
    uint32_t w = x2 - x1 + 1;
    for(y = y1; y <= y2; y++) {
        memcpy(&tft_fb[y * MONITOR_HOR_RES + x1], color_p, w * sizeof(lv_color_t));

        color_p += w;
    }
#endif

发现模拟器不需要做任何修改,
因为如果把模拟器改成RGB565之后,
tft_fb在内存中的排列就不是 SDL_PIXELFORMAT_ARGB8888 这样了。
如果实在要改掉模拟成SDL_PIXELFORMAT_RGB565也不是不行,
但是要改下这部分代码而已。
@F1F2 你可以改改试一试哦。





离线

楼主 #5 2018-03-02 15:10:59

F1F2
会员
注册时间: 2017-09-11
已发帖子: 99
积分: 99

Re: 有没有办法把SDL设置成RGB565(16bit)颜色,然后再把 littlevgl也改成16bit ?

谢谢楼上两位, 终于解决这个问题了, 用SDL_PIXELFORMAT_RGB565 也可以了.

代码稍微改一点点,就是用那个 memcpy

QQ20180302150543.png

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn