正点原子 i.mx6ull裸板RGB屏 显示彩色图片 (单片机显示彩色图片通用)取模软件

编者注:阅读之前需要完成屏幕指定位置画点操作,屏幕画点本文不展开。

软件: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(..),并在相应的头文件中声明。

//图片显示RGB888
//x:欲显示图片左上角的位置
//y:欲显示图片左上角的位置
//x_width:欲显示图片的分辨率(水平宽度)
//y_length:欲显示图片的分辨率(垂直长度)
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++)//图片取模数组中三个十六进制表示一个像素点
		{
			//这里对R和B进行交换
			//即对一个像素点的三个元素 第一个和第三个进行交换 高位在前 直接交换即可
			//逐行显示 y固定 x累加
			//pic[pix_num*3]<<0 		B
			//pic[pix_num*3 + 1]<<8     G
			// pic[pix_num*3 + 2]<<16 	R
			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。

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kashine

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值