批处理自动生成图片Flash信息

本文档详细介绍了如何使用一系列批处理脚本,将.jpg格式的图片转换为.c文件,并自动生成与之相关的Flash存储、LCD显示等代码。脚本包括图片处理、合并、Flash地址分配、写Flash接口生成等多个步骤,旨在提高批量处理图片的效率,避免手动操作的错误。通过执行不同脚本,可生成头文件、Flash地址定义、写Flash源文件以及图片显示接口,适用于消费级电子产品的屏幕显示需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者声明:

    本文章主要介绍.jpg格式的图片集,自动化生成保存Flash的相关文件。如有疑问望共同讨论。本文章主要介绍一系列的脚本族,从而实现将.jpg图片转换成的.c进行处理。避免人为的操作,减少误操作及解放程序猿。

应用背景:

    在消费级的电子产品中往往需要在显示屏上显示图片、文字增加产品的用户体验。尤其是高保真图片:占用存储空间见较大,以16位LCD显示屏为例:一张80*160的图片占用空间达25KB。因此我们希望将图片存储在外部FLASH中,以便节省MCU内部FLASH空间。一个带屏幕的电子产品可能要存储1000余张图片,那么将这些图片保存在FLASH的一系列数据将花费很大的工作量(FLASH地址、图片大小、图片对应.c的声明、写FLASH的接口、显示图片的接口)。下面我们来看下本人是如何解决此问题的。

工具脚本说明:

<!-- ******************************read me start**************************************** -->
<!-- ******************************date : 2018.01.04************************************ -->
<!-- *************************author : wujing  深圳爱都科技***************************  -->
<!--
本脚本族只能处理图片名称如下类型
: *_*_width_higt.jpg

例如:
gImage_digit_num0_6_12
gImage_breath_count_down_num1_10_14
gImage_digit_green_dot_14_31

不适用以下类型图片:
图片过大:宽、高和为5位数
gImage_background_icon_70_136

因为该工具获取图片的宽和高均是根据图片的尾部的5个字符进行字符分割,而不是以下划线进行分割。
-->
<!--
功能说明:本脚本族分为12个,分为3类
第1类:
: make.bat
make.bat的作用:
将本层目录下的.c源文件处理后,输出
字库相关的头文件
字库大小宏定义头文件
FLASH地址宏定义
写FLASH源文件
LCD显示图片源文件

第2类:
: merge_auto.bat
merge_auto.bat的作用:
将批量生成的图片字库.c源文件合并成一个.c 源文件

第3类:
1 : filter_header_common.bat
2 : merge_flash_addr_demo1.bat
3 : merge_flash_addr_demo2.bat
4 : merge.bat
5 : create_write_flash_interface.bat
6 : filter_icon_higt.bat
7 : filter_icon_width.bat
8 :  filter_icon_width_higt.bat
9 : merge_flash_image1.bat
10 : merge_flash_image2.bat
11 : merge_flash_image3.bat
12 :  ecc.bat
13 :  process_icon_ecc.bat
14 :  combo_hex.bat   ::根据图片提取有效地数组成员

使用方法1:
双击执行: make.bat 

使用方法2:
1 双击执行 :filter_header_common.bat
2 双击执行 : merge_flash_addr_demo1.bat
3 双击执行 : merge_flash_addr_demo2.bat
4 双击执行 : merge.bat
5 双击执行 : create_write_flash_interface.bat
6 双击执行 : filter_icon_higt.bat
7 双击执行 : filter_icon_width.bat
8 双击执行 : filter_icon_width_higt.bat
9 双击执行 : merge_flash_image1.bat
10 双击执行 : merge_flash_image2.bat
11 双击执行 : merge_flash_image3.bat
12 双击执行 : ecc.bat
13 双击执行 : process_icon_ecc.bat
输出文件:
1. output : 生成图片对应的大小、图片声明、图片的FLASH地址、写FLASH的函数、显示图片的函数
2. ecc : 生成图片校验的两个文本:
image_all_ecc.xml 、 *_size_name.xml
使用的BeyondCompare工具对比两个文本的内容
如果每行的第一个数字的大小一样则该图片各项参数都正确
如果某行的第一个数字的大小一样则该图片各项参数有错误
   查找对应的图片即可更改
-->

<!-- read me  end  -->

1.  merge_auto.bat:

::*******************************************************************************************
:: Description:    此脚本的功能可以将同一层目录下的指定.c文件定向输出至同一.c文件中:
::
:: warning:   合并后的.c文件更名为公共名称;
:: 例如:
::  待合并文件如下:
::  Jun_ch_Jan_37_20.c
::  Jun_en_ger_spain_35_18.c
::  Jun_fran_27_19.c
::  Jun_italy_33_19.c
::
::  合并后文件命名如下:
::  Jun.c
::
:: Author: wujing wwx338541
::
:: Date: 2018.01.01
::*****************************************************************************************
::clean 
::获取当前路径
set CURRENT_PATH=%CD%
::跳转至当前路径
cd /d %CURRENT_PATH%
::获取本层目录下.c文件名称列表,定向输出至FileName.txt
dir *.c /b >FileName.txt

::获取本层目录下.c文件的个数,将信息定向输出至FileNum.txt
findstr /n . FileName.txt|find /c /v "">FileNum.txt

::从FileNum.txt中获取到文件个数并保存到变量FILE_NUM
for /f "delims= tokens=1" %%i in ( FileNum.txt ) do set /a FILE_NUM=%%i

::自动获取合并后.c文件名称
for /f "delims=_ tokens=1" %%i in ( FileName.txt ) do set MERGE_FILE_NAME=%%i

del %MERGE_FILE_NAME%.c

::合并文件至MERGE_FILE_NAME.c中
for /f "delims=. tokens=1" %%i in ( FileName.txt ) do more %%i.c >> %MERGE_FILE_NAME%.c

::定义变量
::for /l %%i in ( 0, 1, %FILE_NUM% ) do set /a version%%i=%%i

::获取ciconfig.xml中 version 的值
::for /f "delims== tokens=2" %%i in ('findstr /b "version" ciconfig.xml') do set /a version=%%i

del FileName.txt FileNum.txt 


2.1  filter_header_common.bat:

::*******************************************************************************************
:: Description:    将制作的字库源文件的数组名提取出来,存放在头文件中:自动在每行首添加extern
:: 自动过滤数组大小,自动添加分号;
:: warning:   将制作的字库源文件的数组名提取出来,存放在头文件中;
:: 例如:
::  待合并文件如下:
::  icon_all.c
::  word_all.c
::  digit_num_all.c
::
::  合并后文件命名如下:
::  icon_all.h
::  word_all.h
::  digit_num_all.h
::
::
:: Author: wujing wwx338541
:: Date: 2018.01.01
::*****************************************************************************************
::clean
rd /Q /S output
rd /Q /S ecc
rd /Q /S source_output
::rd /Q /S bin
del *.txt *.h

::获取当前路径
set CURRENT_PATH=%CD%

::跳转至当前路径
cd /d %CURRENT_PATH%

::获取本层目录下.c文件名称列表,定向输出至FileName.txt
dir *.c /b >FileName.txt

::自动获取合并后.c文件名称
for /f "delims=. tokens=1" %%i in ( FileName.txt ) do set MERGE_FILE_NAME=%%i

::过滤不需要的行
for /f "eol=0 delims== tokens=1" %%i in (%MERGE_FILE_NAME%.c) do @echo %%i>>temp0.txt
for /f "eol=* delims== tokens=1" %%i in (temp0.txt) do @echo %%i>>temp1.txt
for /f "eol=  delims== tokens=1" %%i in (temp1.txt) do @echo %%i>>temp2.txt
for /f "eol=# delims== tokens=1" %%i in (temp2.txt) do @echo %%i>>temp3.txt
for /f "eol=/ delims== tokens=1" %%i in (temp3.txt) do @echo %%i>>temp4.txt
for /f "eol={ delims== tokens=1" %%i in (temp4.txt) do @echo %%i>>temp5.txt
for /f "eol=} delims== tokens=1" %%i in (temp5.txt) do @echo %%i>>%MERGE_FILE_NAME%_temp.txt

::*************************************生成后文件****************************************************
::提取数组名并在行首添加extern
for /f "delims== tokens=1" %%i in (%MERGE_FILE_NAME%_temp.txt) do @echo extern %%i>>%MERGE_FILE_NAME%_temp0.txt

::在行尾添加[];
for /f "delims=[ tokens=1" %%i in (%MERGE_FILE_NAME%_temp0.txt) do @echo %%i[];>>%MERGE_FILE_NAME%_temp1.txt

::删除掉原头文件%MERGE_FILE_NAME%.txt
del %MERGE_FILE_NAME%_temp0.txt 
del temp0.txt temp1.txt temp2.txt temp3.txt temp4.txt temp5.txt FileName.txt

::目标头文件重新命名
ren %MERGE_FILE_NAME%_temp1.txt %MERGE_FILE_NAME%_header.h

::****************************************提取图片大小和宏名称*****************************************
::提取数组大小
for /f "delims=[ tokens=2" %%i in (%MERGE_FILE_NAME%_temp.txt)  do @echo %%i>>%MERGE_FILE_NAME%_temp0.txt
for /f "delims=] tokens=1" %%i in (%MERGE_FILE_NAME%_temp0.txt) do @echo %%i >>%MERGE_FILE_NAME%_macrosize.xml
del %MERGE_FILE_NAME%_temp0.txt

::提取Flash地址宏名
for /f "tokens=4" %%i in (%MERGE_FILE_NAME%_temp.txt) do @echo %%i>>%MERGE_FILE_NAME%_temp0.txt
for /f "delims=[ tokens=1" %%i in (%MERGE_FILE_NAME%_temp0.txt)  do @echo %%i_SIZE>>%MERGE_FILE_NAME%_macroname.txt
for /f "delims=[ tokens=1" %%i in (%MERGE_FILE_NAME%_temp0.txt)  do @echo #define   %%i_SIZE    >>%MERGE_FILE_NAME%_macroname_define.txt

::insert a line which is "wujing

【论坛原创】强大的Flash动画生成工具 - SWiSH Max3 v3.0 简体中文特别版(Build:2009.11.30) SwiSHmax是Flash编辑工具 SwiSHzone家族的新成员,假如您想要不使用Flash来制作强大或令人惊叹的动画,SwiSHmax是您最佳的选择。 SwiSHmax操作方便,您将可轻易的在短时间内制作出复杂的文本,图像,图形和声音的效果。SwiSHmax现在有超过230个内建效果,例如:爆炸,漩涡,3D旋转,曲折等等。SwiSHmax用来创建直线、正方形、椭圆形、贝塞尔曲线、动作路径、精灵、rollover按钮和导入表单的所有工具,全都囊括在一个非常容易使用的界面里。 SwiSHmax和SWiSH2最大的不同点在于全功能的描述语言:SwiSHscript。然而,除此之外,它和SWiSH2比较起来还是有非常多令人惊讶的新功能。 假如您再也不想和复杂、昂贵程序搏斗,那么就使用SwiSHmax。SwiSHmax会让脚本呈现令人耳目一新的效果。 SwiSHmax 导出SWF文件的格式可被Macromedia Flash?使用,所以您的动画将可以在任何一台有安装Flash? Player的机器上执行。 SwiSHmax 所做的动画可以和任何网页做结合或导入Flash?使用。它们也可以放到电子邮件上发送,嵌入微软的PowerPoint演示文稿,或纳入微软的Word文件中。 版本:v3.0 Build:2009.11.30 * 注:此程序汉化版本基于官方英文原版语言文件制作;    本安装程序部分资源基于官方繁体中文版本; 安装版已作特别处理,无任何功能限制;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值