RTT MSH 控制台显示彩色图片

RT-Thread vt100 软件包

Introduction

终端 (terminal) 很多时候给人的感觉就是,黑白屏上有一些奇奇怪怪的字符,40几年前很受欢迎的 vt100 显示器就是这样:

但是现在控制台甚至可以打开浏览器,看视频 (browssh)。下面的图并不是 windows 上打开 Chrome 或者 Firefox 浏览器,而是 ssh 到 linux 服务器上控制台的截图。

控制台能显示 RGB888 这样丰富的颜色,也是 ANSI Escape 标准不断扩展,比如参照下面这张表,在控制台打印 \033[44m 就可以把背景色设置为蓝色 (Esc = \033)。

当然,也不是所有的控制台软件都是支持 RGB888 彩色的,比如文章开头的小黄人图片如果在 windows 的 cmd 或者 powershell 看起来就是这样:

例如 putty,iterm,gnome bash 都是支持 RGB888 的。

vt100 软件包

之前 RT-Thread 的 vt100 软件包已经可以打印简单的彩色图像,播放小动画了。

突然想在控制台显示图片,是之前和人生导师坑同学走在路上,无意中看到 RTT & 21c & ucloud 联合举办的一个比赛,坑同学突然表示对硬件很感兴趣,那就刚好报个名,开发板寄给他好好学习嵌入式。

然而本来比赛是打算把 nuklear (imgui) 移植到 RTT 上,之后发现 nuklear 虽然体积很小,但是实际渲染速度并不太适合嵌入式,而且 RTT 已经有 柿饼UIlittlevgl 了,刚好又看到 golang 的 cui,那就把控制台作为显示屏用用也挺不错的(虽然嵌入式控制台实际只做调试用),作为坑同学的嵌入式入门项目好像也挺不错的。

上面这个小黄人是 vt100 软件包自带的例程,如果要显示自己的图片,在 examples 目录下有个直接 jpg/png 生成 C 代码的小工具:

python img2rgb888_cwh.py minions.png

这样就会自动生成 minions.h,然后就可以在控制台打印图片了

#include <rtthread.h>
#include <stdio.h>

#include <vt100.h>
#include "minions.h"

void vt_rgb_buf(int argc, char* arvg[])
{
    vt_draw_rgb888(minions, minions_w, minions_h);
}
MSH_CMD_EXPORT(vt_rgb_buf, draw RGB image in console)

如果配合 RTT 的 TJpgDec 软件包似乎可以直接在控制台 ls image.png,对着漂亮的控制台调试,心情可能也会更加愉悦。

参考资料