首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >位向数据的高效RLE思想

位向数据的高效RLE思想
EN

Stack Overflow用户
提问于 2017-02-15 15:47:20
回答 1查看 344关注 0票数 0

我的主要项目之一是一个用于微控制器的显示库。作为其中的一部分,我有一个字体(位图)和图标(alpha通道)的集合。

由于资源(闪存和RAM)在微控制器中是有限的,我正在寻找更好的方法来存储这些字体和图标的数据。

我倾向于对数据使用一种分离的平面安排(就像使用的Amiga上的ILBM ),也就是说,与其将每个像素的所有比特存储在一起,不如将整个图像的所有第一位存储在一起,然后存储第二位等等。这对于处理非幂的图像深度变得更有效了--2(您是否尝试过将3位数据打包到8位数据流中?)

然后,我还想压缩每一个比特平面。RLE似乎是最明智的。但是,由于我现在使用的是位流,而不是整数,所以我想知道实现RLE的最佳方法是什么。

我可以坚持传统的方法,在8块中处理比特,并寻找重复字节(2或更多相同,替换为2相同,然后计算运行中的字节数),但对于包含一个位平面的按位排列的数据,我看不出有那么好。(顺便说一句,ILBM使用了各种按字节划分的方法-将数据纯粹视为字节,并根据需要使用定义下一个字节如何处理的“头”字节来重复它们)。

另一种选择是使用交替位计数方法。也就是说,开始假设位为0,并在运行中记录该位的数量。然后切换到1,并记录运行中的1位数。然后再次切换到0,并记录位数。等。

同样,如果您有相同位的长时间运行,那么很好,但是一旦您得到比特的快速替换,您最终占用的空间就会大幅度增加(比如01010101,8位,最终可能是8字节的[1,1,1,1,1,1,1,1])。

这里的主要警告是,它必须是高效的--无论是在CPU中解压它,还是在它解压时在内存中保存任何工作缓冲区。这就是为什么我认为RLE而不是任何其他方法。

所以我想我是在寻找我错过的想法。在以字节为中心的系统中,压缩单比特流和表示压缩数据的最佳实现是什么?

例如字形(十进制):

代码语言:javascript
复制
00 00 02 14 03 00 00 00
00 00 09 13 10 00 00 00
00 00 13 05 13 00 00 00
00 05 12 00 12 06 00 00
00 11 15 15 15 11 00 00
00 14 02 00 01 14 00 00
08 12 00 00 00 12 08 00
11 07 00 00 00 07 12 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00

因此,位平面0-3应该是

代码语言:javascript
复制
   0            1            2            3
00001000     00111000     00010000     00010000
00111000     00001000     00010000     00111000
00111000     00000000     00111000     00101000
01000000     00000100     01101100     00101000
01111100     01111100     00111000     01111100
00001000     01100100     01000100     01000100
00000000     00000000     01000100     11000110   
11000100     11000100     01000110     10000010
00000000     00000000     00000000     00000000
00000000     00000000     00000000     00000000

然而,这样大小的字形,我甚至不太可能尝试压缩。它小到没有意义。但是,它说明了位平面的分层以及比特流与原始数据的关系。

EN

回答 1

Stack Overflow用户

发布于 2017-02-15 19:17:57

几十年来,位图图像的压缩问题一直是研究的主题,所以您可以只使用它的结果,即JBIG2。您可以在谷歌上搜索开源JBIG2代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42253925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档