编者注:阅读之前需要完成屏幕指定位置画点操作,屏幕画点本文不展开。
软件:Image2Lcd 2.9 vscode
硬件:正点原子阿尔法开发板(i.mx6ull),原子哥看到请联系我,打钱,广告费。。
系统:Ubuntu Windows
需求:开发板RGB屏幕显示彩色图片
前提:屏幕指定位置画点
描述:通过图片取模软件Image2Lcd 2.9对图片进行取模,得到一维十六进制数组,通过指定区域的各个像素点进行描点操作,从而显示图片。
图片取模步骤:
Windows中,使用”画图“打开某张任意格式的图片,点击重新调整大小。
根据屏幕分辨率选择合适的大小(这里的选择相对来讲不是太重要),我的RGB屏幕分辨率800*480。
选择另存为bmp格式的图像。
图片取模软件Image2Lcd 2.9打开该图片。具体设置图中有详细描述,必须注意输出图像的分辨率(输出图像的分辨率就是后面嵌套for循环描点的两个边界),因为输出图像的分辨率与显示密切相关。
参数设置好之后,点击保存,生成图片的一维数组表示。一定要注意:对于RGB屏幕来说选用的是RGB888格式,而取模软件得到的是BGR格式,在获取像素点的时候应该格外注意,交换RG两个元素的位置。
代码撰写:
将上面获得的temp.c文件传输到Ubuntu中,在VSCode中新建一个picture.h头文件,将temp.c中的数组复制到picture.h中。
在描点函数的LCD接口.c文件中定义一个函数,lcd_show_picture(..),并在相应的头文件中声明。
unsigned char lcd_show_picture(unsigned short x, unsigned short y, unsigned short x_width, unsigned y_length, unsigned char *pic)
{
if(x < 0 || x > 800 || y < 0 || y > 480)return ERROR;
int pix_num = 0;
short int i, j = 0;
for(i = 0; i<y_length; i++)
{
for(j = 0; j< x_width; j++)
{
lcd_drawpoint(x+j, y+i, pic[pix_num*3]<<0 | pic[pix_num*3 + 1]<<8 | pic[pix_num*3 + 2]<<16);
pix_num++;
}
}
return OK;
}
main.c文件中添加相应的头文件,并调用绘图函数进行绘图。从x=80,y=15开始显示,图片的分辨率为635*450,也就是图片取模软件输出图像的分辨率。
lcd_show_picture(80, 15, 635, 450, miaomiao);
效果图:
可以看到,由于我的屏幕分辨率为800*480,显示的图片分辨率为635*450,所以有些地方留白。
完成!
加入圈子
🍎欢迎大家加入组织,一起交流、学习,群内多为嵌入式爱好者,也有企业MCU、Linux大佬carry。
🍎 球球群:【嵌入式c、c++、单片机、linux技术交流2群】🍎
自己搜索吧,官方不让发,净想着白嫖我文章!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)