553|2

197

帖子

0

资源

一粒金砂(中级)

【GD32E503评测】08 综合评测之数码相册(一) [复制链接]

本帖最后由 caizhiwei 于 2021-2-15 21:13 编辑


      图片显示另外一个重要的特点就是他的数据量很大,比如画一幅 320*240 的图像,以16 位色计算,那么光颜色的数据量就有: 320*240*2=153600 字节。这其中还不包括设置坐
标的过程,如果加上坐标设置,数据量就是颜色数据量的 5 倍(每次坐标设置需要发送 5次命令/数据)以上。所以尽量优化画点过程,才能使你的图片显示得流畅。
     单纯的画点,显然无法做太多优化,因为坐标设置是必须的。幸好,我们 ALIENTEK 所使用的液晶都是支持开窗显示以及坐标自增显示的。这样,我们只需要设置一次窗口,然后
设置一次坐标,就可以不停的往 LCD 写颜色数据,而不需要再做地址设置了。这样可以使得速度比单纯的画点显示要快至少5倍以上。

    这里必须要借助一个小软件:Image2lcd 
    Image2Lcd 是一款非常好的图像工具软件,它能把各种来源的图片转换成特定的数据格式以用来匹配单片机系统所需要的显示数据格式。 Image2Lcd 支持的输入图像格式包括:
BMP, WBMP, JPG, GIF, WMF, EMF, ICO, 等等。 Image2Lcd 的输出数据类型包括定制的二进制类型、 C 语言数组类型和标准的 BMP 格式、 WBMP 格式。 Image2Lcd 能可视调节输入图象的数据扫描方式、灰度(颜色数)、图像数据排列方式、亮度、对比度、等等。对于包含了图像头数据保存的图像数据文件, Image2Lcd 能重新打开作为输入图像。因为 image2lcd 能生成带图像数据头的数据文件,使得我们处理起来方便很多,这里我们仅以 16 位真彩色为例进行说明。在该软件的帮助文件查到对“4096 色/16 位真彩色/18 位真彩色/24 位真彩色/32 位真彩
色”图片,其生成的图像数据头的结构为:

typedef struct
{
	unsigned char scan;
	unsigned char gray;
	unsigned short w;
	unsigned short h;
	unsigned char is565;
	unsigned char rgb;
}IMG_Head;  /*图片头*/

头文件有了,接下来就是取模,取模设置我也摸索了好久,不过终于是成功了,如下图所示:

图片取模设置.bmp

此结构体的讲解如下:

各个成员的功能描述如下:
scan: 扫描模式
Bit7: 0:自左至右扫描, 1:自右至左扫描。
Bit6: 0:自顶至底扫描, 1:自底至顶扫描。
Bit5: 0:字节内象素数据从高位到低位排列, 1:字节内象素数据从低位到高位排列。
Bit4: 0:WORD 类型高低位字节顺序与 PC 相同, 1:WORD 类型高低位字节顺序与 PC 相反。
Bit3~2: 保留。
Bit1~0: [00]水平扫描, [01]垂直扫描, [10]数据水平,字节垂直, [11]数据垂直,字节水平。
gray: 灰度值, 1:单色, 2:四灰, 4:十六灰, 8:256 色, 12:4096 色, 16:16 位彩色, 24:24 位彩
色, 32:32 位彩色。
w: 图像的宽度。
h: 图像的高度。
is565: 在 4096 色模式下为 0 表示使用[16bits(WORD)]格式,此时图像数据中每个 WORD 表示
一个象素;为 1 表示使用[12bits(连续字节流)]格式,此时连续排列的每 12Bits 代表一个象素。
在 16 位彩色模式下为 0 表示 R G B 颜色分量所占用的位数都为 5Bits,为 1 表示 R G B 颜色
分量所占用的位数分别为 5Bits,6Bits,5Bits。

在 18 位彩色模式下为 0 表示"6Bits in Low Byte",为 1 表示"6Bits in High Byte"。
在 24 位彩色和 32 位彩色模式下 is565 无效。
rgb: 描述 R G B 颜色分量的排列顺序, rgb 中每 2Bits 表示一种颜色分量, [00]表示空白, [01]
表示 Red, [10]表示 Green, [11]表示 Blue。


       在 IMG_Head 中, scan, w, h 这三个参数对我们的图片显示尤为有用。 知道了 w 和 h,
就可以直到开窗的大小。而 scan 的最高两位,则代表了图片数据生成时的扫描方向,也就
是我们开窗后地址自增的方向。 知道了这几个参数,我们就可以很方便的解析各种大小,各
种扫描方式的图片数据了。

然后再写画图函数,参看了下历程中的函数,感觉写的很low,我需要计算每一个图片的xy起始和结束;

而我写的接口入参只需要其实坐标+ 图片指针即可,自动计算图片的高度和宽度。

微信截图_20210215200332.png

有了这个接口:主函数中调用即可:

	char_format_struct char_format;
	
	char error_string[]="Hello,eeworld!";
	
	/* configure char format */
    char_format.char_color = LCD_COLOR_RED;
    char_format.bk_color = LCD_COLOR_WHITE;
    char_format.font = CHAR_FONT_8_16; 
	
	lcd_str_display(8,8, error_string, strlen(error_string), char_format);
	lcd_picture_draw(0,0,(uint16_t *)(gImage_maomao));
	
	//lcd_chinese_display(0,50,"电子工程世界",char_format);

至此,主要流程就讲完了。

总结:

1. 后续把图片存放在sd卡中,这样就不需要取模了;

看看效果图:

微信图片_20210215180418.jpg

 

 

 

 

 

赞赏

1

查看全部赞赏

个人签名

gitee/casy


回复

197

帖子

0

资源

一粒金砂(中级)

Utilities.zip (12.72 KB, 下载次数: 2)

个人签名

gitee/casy


回复

785

帖子

2

资源

版主

感谢分享,期待后续的测评计划帖子哈,我也会持续关注你的哈!!!


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/8 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表