嵌入式中如何统一多幅位图的调色板并生成C格式数据详解

在嵌入式开发当中,我们经常会需要显示公司logo,或者操作界面的图标,也自然会用到图像转换工具,比如uC-GUI-BitmapConvert, 下载地址连接页面 ,我们可以用它进行输入一幅位图,然后输出该位图对应的C语言形式的数据格式(包括位图调色板及位图数据部分,该部分就是调色板的索引)。这个工具很好用,但是对于不同图像会得到不同的调色板及数据索引,这样的话,如果有很多图像需要显示,就要得到很多不同的调色板,这样的话,会造成几个问题:
1. 嵌入式开发中,内存本来就很珍贵,不可能同时去存储多幅调色板。
2. 即使你的内存很牛且很大,但可能该OSD(即在线视频显示, 支持字符与视频的叠加)的芯片根本就不允许有多个调色板存在(本人目前就碰到这个问题,我用的是TW8811视频与字符叠加芯片),因为如果使用多个调色板,最后使用的调色板将会覆盖前面所有的调色板,使与之调色板对应的位图图像根本不能正常显示颜色。


为了解决上面这个很烦人的问题,则我给出一种非常好的思路及实践方法。那就是让所有的图标共享同一个调色板(我假设称之为公共调色板),然后使用photoshop将每幅图像按照该调色板进行定制,这样就可以满足要求了。那问题来了,我们如何取得一个公共的调色板及如何与其为模板进行自定义成一个自己的位图图像?
本人采用的方法是:
1. 通过将所有的图标放在同一个界面下,然后转换成位图图像(我假设称之为公共位图)
这里写图片描述
具体做法是:
假如你打开一幅真彩图片,那么在“图像”—>“模式”里面,“RGB颜色”前面打勾,这时,如果要把这幅真彩图片转为256色,则要选择“索引颜色”,在“索引颜色”对话框里面,“调色板”选项里可以选择“局部(可感知)”,颜色项,使用256,然后确定,这时这幅真彩色图片就转化为256色BMP 图了。
这里写图片描述
2. 然后回到“图像”—>“模式”里,选择“颜色表”,在“颜色表”对话框中就可以保存调色板文件了。
这里写图片描述
3. 调色板文件保存好后,再次回到“图像”—>“模式”里,可以发现在“索引颜色”之前打上了勾,这时要随便地选择一个颜色,比如“RGB颜色”,选择后,重新再选择到“索引颜色”上,这时在“索引颜色”对话框中调取刚才保存的调色板文件,就可以正常地调色了。

这里说说另一个问题,那就是我们通常可能需要将一幅图像转换成8位的bmp的格式,但发现默认只有16位、32位等格式,那么也可以通过上述的步骤,选择图像->模式->索引颜色。这样就可以有8位的格式了。


通过得到位图图像了,就可以用uC-GUI-BitmapConvert转换成C语言形式的数据了,具体是选择文件->另存为->选择调色板和数据。
这里写图片描述

好了,我们可以看看最后生成的调色板数据是否一样了,如果一样,那说明我们的做法完全正确了,下图是我截取部分的情况。
这里写图片描述

另外
如果我们想自定义前16种颜色为标准的4位位图的颜色,为:
这里写图片描述
而我们现在的前16种颜色不是标准颜色,如:
这里写图片描述
我们可以通过如下的方法得到:
1. 先提前建好16色标准颜色
这里写图片描述
如果要批量删除色板中的色,则可以如下方式:
即:编辑->预设管理器->色板,按住shift点选头尾色块,点删除。
2. 然后,在调色板控制面板中,选择“载入色板”,而不是“替换色板”。这样就可以得到我们想要的调色板了。注意:8位的要16*16=256种颜色。先拖动调色板形态,让其16个色一行,总共16行,多出来的去掉。如果发现不能控制到16色一行,则删除其他面板,让其空出位置来,就可以调整了。
这里写图片描述
技术是需要时间酝酿的,久了自然就香醇,一切就是这么简单!

原文地址:https://www.cnblogs.com/qianggezhishen/p/7349498.html