一键将pctolcd2002 生成的bmp 字模数据生成程序可以直接调用的字模文件
一、背景
做单色lcd 点阵屏幕显示开发的时候,当要显示图片时,我们先要将图片通过取模软件转换成单片机可读的ascii 数据。emwin 等成熟方案,用户只需要导入一张bmp格式的图片,然后点击几下,就可以生成代码可以直接调用的字模数据文件,例如bmp_buzz.c ; bmp_buzz.h
。但是emwin 本身不开源,占用flash 空间也大,对低成本方案不友好。
我要实现的
自己编写gui驱动框架,实现点、线、字、图等的绘制,利用pctolcd2002 进行字体和图片的取模。编写shell脚本,一键将取模软件生成的图片数据生成可以直接使用的图片描述文件。
二、pctolcd2002 输出的bmp字模文件分析
图一
如图,我们程序中真正需要用到的是图片点阵数据,和图片的宽和高。
三、实现
3.1 写好bmp数据文件的模板文件
bmp 数据源文件
bmp 数据头文件
3.2 实现思路
从pctolcd2002 生成的图片字模文件提取出点阵数据(数组),图片的宽(像素),图片的高(像素),从模板文件复制出一份新的文件,然后将对应的数据替换,插入到其中。
3.3 脚本实现
generate_bmp_data.sh
#!/bin/bashfile_create_by_pctolcd2002=$1
new_bmp_name=$2if [ $# -lt 2 ] ; thenecho "please input bmp src file name!"echo "please input bmp new file name!"exit 1
fifirst_line_to_insert_bmp_data=5echo $new_bmp_name#------------ 1: get bmp width and height from src file ----------------
#filter bmp file size:width and height
#eg: format( 9 X 12)#get width and height data ; remove (,)
bmp_size=$(grep -o "(.*X.*)" $file_create_by_pctolcd2002 | sed 's/(//g' | sed 's/)//g')
new_bmp_width=$(echo $bmp_size|cut -f 1 -d X)
new_bmp_height=$(echo $bmp_size|cut -f 2 -d X)echo "new_bmp_name:"$new_bmp_name
echo "bmp_width:"$new_bmp_width
echo "bmp_height:"$new_bmp_height#------------ 2: generate new bmp src file from template file----------------
new_src_file="bmp_"$new_bmp_name".c"
new_h_file="bmp_"$new_bmp_name".h"cp ./bmp_name.cfile $new_src_file
cp ./bmp_name.header $new_h_file
echo "new_h_file:"$new_h_file#replace bmp src name
sed -i 's/name/'"$new_bmp_name"'/g' $new_src_file
#replace bmp header name
sed -i 's/name/'"$new_bmp_name"'/g' $new_h_file#upper case new_file_name
upper_bmp_name=$(echo $new_bmp_name| tr 'a-z' 'A-Z')#replace macro definition
sed -i 's/NAME/'"$upper_bmp_name"'/g' $new_h_file#replace bmp width
sed -i 's/bmp_width/'"$new_bmp_width"'/g' $new_src_file#replace bmp height
sed -i 's/bmp_height/'"$new_bmp_height"'/g' $new_src_file#------------ 3: get available data from temp file ------------------------ #remove first line
# sed -i '1d' $file_create_by_pctolcd2002
sed -ie '/(0)/d' $file_create_by_pctolcd2002# remove empty line
sed -i '/^\s*$/d' $file_create_by_pctolcd2002#remove note line
sed -i 's/\/.*\///g' $file_create_by_pctolcd2002# remove { and }
sed -i 's/{//g' $file_create_by_pctolcd2002
sed -i 's/}//g' $file_create_by_pctolcd2002sed -i ''"$first_line_to_insert_bmp_data"'r '"$file_create_by_pctolcd2002"'' $new_src_file#-------------------------4: new file format --------------------------------
dos2unix $new_src_file
dos2unix $new_h_fileastyle $new_src_file
astyle $new_h_file
3.4 脚本流程分析
3.4.1 从bmp 字模数据源文件,提取bmp 宽和高
- bmp 宽和高的描述格式是(数字 X 数字),利用grep 工具结合正则表达式,grep 的
-o
参数 表示直接返回匹配的数据,而非一整行,节省了工作量。 - 利用cut 工具,以分隔为
X
进行切割,切割到的第一个数据为bmp的宽,第二个为高
3.4.2 根据模块文件,生成新的bmp数据文件,更新bmp宽和高
这部分主要是利用sed
工具的字符串替换功能。sed -i 's/old_exp/new_exp/g' file_name
, 其中,当old_exp
或 new_exp
为变量时,需要注意引号的使用,sed 工具才能正确解析。例如: sed -i 's/old_exp/ '" $new_exp_var"' file_name
。
3.4.3 删除bmp字模数据源文件的无用数据,提取图片点阵数组
- 第一行数据描述文件的路径。可以用sed 工具直接删除第一行。这里的做法是识别第一行的表达式特征
(0)
,进行删除
sed -i '/(0)/d' $file_create_by_pctolcd2002
- 删除空行
sed -i ' /^\s*$/d' $file_create_by_pctolcd2002
- 删除注释部分(
/*abaga*/
)
sed -s 's/\/.*\///g' $file_create_by_pctolcd2002
- 删除字符
{
和}
- 利用sed 工具,将
$file_create_by_pctolcd2002
经过处理后,剩下的点阵数组,插入到bmp 数据文件指定行。
示例,将a.file 文件插入到b.file 的指定行
sed -i ' 4 r a.file ' b.file
3.4.4 格式化最终的文件
3.5 用户使用
这个脚本需要传入两个参数:
参数1: 取模软件生成的bmp 字模数据文件,如上图一
参数2: 程序中对这个bmp 图片命名,例如:buzzer,bat
./generate_bmp_data.sh src_file buzzer
生产的bmp 数据文件如下:
一键将pctolcd2002 生成的bmp 字模数据生成程序可以直接调用的字模文件相关推荐
- Ansys节点数据批量一键导出脚本生成CSV (ansys数据导出利用matlab脚本)
由于ANSYS软件本身的数据后处理.绘图等功能有限,我们常常需要把ansys模拟后的结果数据导出以做进一步的处理分析.为此作者编写了matlab平台的m/p脚本,使得ansys的lis文件可以一键生成 ...
- OLED显示字符的大小与PCtoLCD2002生成字模
OLED显示字符的大小与PCtoLCD2002生成字模 首次尝试性写博客,如果错误或不足请大家指正 如有涉及相关版权的问题,联系我删除 前言: 为什么为了一个小小的OLED写这些乱七八糟的东西,还得花 ...
- 用Python一键生成微信个人专属数据报告,了解你的微信社交历史
简介 你是否想过生成一份属于你的微信个人数据报告,了解你的微信社交历史.现在,我们基于python对微信好友进行全方位数据分析,包括:昵称.性别.年龄.地区.备注名.个性签名.头像.群聊和公众号等. ...
- 8.一键生成微信个人专属数据报告(了解你的微信社交历史)
1.你是否想过生成一份属于你的微信个人数据报告,了解你的微信社交历史.现在,我们基于python对微信好友进行全方位数据分析,包括:昵称.性别.年龄.地区.备注名.个性签名.头像.群聊.公众号等. 其 ...
- DICOM医学图像处理:DICOM存储操作之“多幅BMP图像数据存入DCM文件”
背景: 本专栏"DICOM医学图像处理"受众较窄,起初只想作为自己学习积累和工作经验的简单整理.前几天无聊浏览了一下,发现阅读量两极化严重,主要集中在"关于BMP(JPG ...
- Bitmap文件格式+生成一个BMP文件
Bitmap的文件格式: 1 #define UINT16 unsigned short 2 #define DWORD unsigned int 3 #define WORD short 4 #de ...
- 国产开源「文本-视频生成」模型!免费在线体验,一键实现视频生成自由
原文链接:全球首发,国产开源「文本-视频生成」模型!免费在线体验,一键实现视频生成自由 去年4月,OpenAI发布的DALL-E 2用更高的分辨率.更真实的图像生成以及更准确地理解自然描述,横扫整个A ...
- java生成bmp单色位图,关于GDI+生成单色BMP图片的问题,请高手进!
用GDI+生成的BMP图片颜色位数一般都是24位,我要怎样生成1位的BMP图片呢? 我在网上找了几种方法,有的方法效果是达到了,但是效率非常低,我是要生成几万张甚至几十万张的,所以要求速度要够快. 不 ...
- C#生成单色bmp图片,转为单色bmp图片 任意语言完全用字节拼一张单色图,LCD取模 其它格式图片转为单色图
最终效果: V1.8.2 20230419 文字生成单色BMP图片4.exe 默认1280*720 如果显示不全,请把宽和高加大 字体加大. 首先,用windows画板生成一张1*1白色单色图作为 ...
最新文章
- Swift进阶学习笔记
- 【转载】 C#使用Math.Abs返回数值的绝对值
- 利用序列化与反序列化对Java对象进行深度复制
- 洛谷 - P1198 - 最大数 - 线段树
- 变种 背包问题_动态规划入门——传说中的零一背包问题
- 高端服务器CPU详细图解
- Jmeter系列之接口断言
- 完全卸载MySQL的方法
- 基于Python网络爬虫的设计与实现毕业设计
- java cmd 编译jar_Java程序在命令行下编译运行打Jar包
- APF有源滤波器仿真,三相三线制 谐波电流检测模块基于p-q方法,ip-iq等方法
- 操作系统实验: 进程管理
- 收藏 90+深度学习开源数据集整理|包括目标检测、工业缺陷、图像分割等多个方向
- 小学生的游戏 FZU - 1575
- /Volumes/TeXLive2019/install-tl: No binary platform specified/available, quitting.
- 手机剪辑视频指南:去水印、加字幕、做转场,统统一键就搞定
- 元宵快乐!!!! 自己做的贺卡。。 :)
- AI领域首位图灵奖得主Marvin Minsky:求索“智能”奥秘的一生 | 人物志
- DB2数据库如何修改字段名称
- 【midomi】Android下最强音乐搜索工具
热门文章
- 「网络安全」安全设备篇(5)——UTM
- 闪烁着凄烈紫光的太刀。名之为「回光」是因为一度破碎的过去。
- 详细篇 (ES6Class类)
- NetSuite:一个页面简单功能齐全的软件
- apollo6.0发行版安装到启动(内含超多踩坑细节,2022-3-8日亲测可用)
- epoll 原理详解
- 超频到3200最佳时序_XPG 龙耀 D50 重装铠甲RGB内存 来了超频颗粒、1.95mm加厚散热...
- 酒店该如何选择酒店管理软件
- 【爬虫进阶】字体解密——案例解析
- Dubbo面试问题一:Dubbo是什么?为什么要使用Dubbo?