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

在嵌入式开发当中,我们经常会需要显示公司logo,或者操作界面的图标,也自然会用到图像转换工具,比如uC-GUI-BitmapConvert, 下载地址连接页面 ,我们可以用它进行输入一幅位图,然后输出该位图对应的C语言形式的数据格式(包括位图调色板及位图数据部分,该部分就是调色板的索引)。这个工具很好用,但是对于不同图像会得到不同的调色板及数据索引,这样的话,如果有很多图像需要显示,就要得到很多不同的调色板,这样的话,会造成几个问题:

1. 嵌入式开发中,内存本来就很珍贵,不可能同时去存储多幅调色板。

2. 即使你的内存很牛且很大,但可能该OSD(即在线视频显示, 支持字符与视频的叠加)的芯片根本就不允许有多个调色板存在(本人目前就碰到这个问题,我用的是TW8811视频与字符叠加芯片),因为如果使用多个调色板,最后使用的调色板将会覆盖前面所有的调色板,使与之调色板对应的位图图像根本不能正常显示颜色。



为了解决上面这个很烦人的问题,则我给出一种非常好的思路及实践方法。那就是让所有的图标共享同一个调色板(我假设称之为公共调色板),然后使用photoshop将每幅图像按照该调色板进行定制,这样就可以满足要求了。那问题来了,我们如何取得一个公共的调色板及如何与其为模板进行自定义成一个自己的位图图像?

本人采用的方法是:

1. 通过将所有的图标放在同一个界面下,然后转换成位图图像(我假设称之为公共位图)

2. 然后通过PS保存该公共位图的调色板(可以有很多种调色板格式,我这里使用的是.aco的格式)。具体做法是:打开该公共位图,选择色板->存储色板->选择.aco

3. 在通过PS读入要处理的图像,然后用该公共调色板去调色该图像,最后保存下来。

即在PS菜单中,图像->模式->索引颜色->选择自定义调色板->导入刚才保存的公共调色板->保存

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



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

好了,先写到这里了。

时间: 2024-11-09 03:43:29

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

Scala 深入浅出实战经典 第81讲:Scala中List的构造是的类型约束逆变、协变、下界详解

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-97讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/ceac2IoB-ik/优酷:http://v.youku.com/v_show/id_

Scala中List的构造是的类型约束逆变、协变、下界详解

学习了Scala中List的构造是的类型约束逆变.协变.下界详解,列表中用::加入父类的对象,列表会协变为父类,例子如下: Def :: [B>:A](x:B):List(B)= New scala:collection.imutable.::(x,this) 王家林亲授<DT大数据梦工厂>大数据实战视频“Scala深入浅出实战经典”视频.音频和PPT下载!第81讲:Scala中List的构造是的类型约束逆变.协变.下界详解腾讯微云:http://url.cn/UNeLA2百度云盘:ht

[nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)

:由于在大多数情况下GPIO的状态变化都会触发应用程序执行一些动作.为了方便nRF51官方把该流程封装成了GPIOTE,全称:The GPIO Tasks and Events (GPIOTE) . 从GPIO电平变化到产生中断事件的流程详解  1.GPIOTE概览 nRF51上面有32个GPIO,由于在大多数情况下GPIO的状态变化都会触发应用程序执行一些动作.为了方便nRF51官方把该流程封装成了GPIOTE,全称:The GPIO Tasks and Events (GPIOTE) .GP

Sql Server 中 GAM、SGAM、PAM、IAM、DCM 和 BCM 的详解与区别

GAM.SGAM.PAM.IAM.DCM 和 BCM 都是 SQL Server 中用来管理空间分配的一些特殊分配映射表.理解他们的区别与作用,对于理解 Sql Server 物理数据库体系结构有着非常重要的作用. Sql Server 区的管理(GAM,SGAM) 全局分配映射表 (GAM) :统一盘区,GAM 页记录已分配的区.每个 GAM 包含 64,000 个区,相当于近 4 GB 的数据.GAM 用一个位来表示所涵盖区间内的每个区的状态.如果位为 1,则区可用:如果位为 0,则区已分配

第81讲:Scala中List的构造和类型约束逆变、协变、下界详解

今天来学习一下scala中List的构造和类型约束等内容. 让我们来看一下代码 package scala.learn /** * @author zhang */abstract class Big_Data class Hadoop extends Big_Dataclass Spark extends Big_Data object List_Constructor {  def main(args:Array[String]){    val hadoop = new Hadoop ::

iOS中 扫描二维码/生成二维码详解 韩俊强的博客

最近大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 指示根视图: self.window.rootViewController = [[UINavigationController alloc]initWithRootViewController:[SecondViewController new]]; 每日更新关注:http://weibo.com/hanjunqi

Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解

今天继续给大家分享下View的相关知识,重点有一下两点:   1.View的几种不同状态属性            2.如何根据不同状态去切换我们的背景图片. 开篇介绍:android背景选择器selector用法汇总 对Android开发有经验的同学,对 <selector>节点的使用一定很熟悉,该节点的作用就是定义一组状态资源图片,使其能够 在不同的状态下更换某个View的背景图片.例如,如下的hello_selection.xml文件定义: <?xml version="

Win2003中配置FTP服务,开启防火墙导致客户端无法连接【精华详解】

因为某种需求,我们在Win2003中配置FTP,可能使用的是IIS可能使用的是其他的服务软件,可能是出于安全的考虑我们必须开启防火墙,可开启防火墙导致客户端无法连接,关闭防火墙反而可以正常使用.由此我们得出,问题肯定是处在了端口上. 第一时间我们百度去寻求解决问题,很少能找到一篇满意的文章.都几乎是千篇一律的草文. 在这里整了下一下解决方案,如果你的问题满足上述内容,即可往下看. 解决方案: 开启防火墙,为了安全着想,不然就没必须费那么大神了. 在防火墙的例外设置中添加21端口(如果你有其他服务

c++中.dll与.lib文件的生成与使用的详解

两种库: ? 包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library.? 包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library.共有两种链接方式: ? 动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位DLL函数的可执行代码所需的信息.? 静态链接使用静态链接库,链接器从静态链接库LIB获取所有被引用函数,并将库