压缩/打包“不关心”位到3个状态

时间:2010-08-21 02:20:09

标签: algorithm compression microcontroller

目前我正在开发一个带有黑色,白色和透明像素的屏幕显示项目。 (这是一个开源项目:http://code.google.com/p/super-osd;显示开发中的256x192像素设置/清除OSD,但我正在迁移到白/黑/清晰OSD。)

由于每个像素是黑色,白色或透明,我可以使用简单的2位/ 4状态编码,其中我存储黑/白选择和透明选择。所以我会有一个像这样的真值表(x =不关心):

B/W  T      
 x   0    pixel is transparent
 0   1    pixel is black
 1   1    pixel is white

然而,可以清楚地看到,当像素透明时,这会浪费一点。我正在设计一个内存受限的微控制器,所以只要我能节省内存就很好。

所以我试图想出一种方法将这3种状态打包成一个更大的单元(比如一个字节)。我愿意使用查找表来解码和编码数据,因此可以使用复杂的算法,但不能依赖于当前单位/字节之前或之后的像素状态(这排除了任何适当的数据压缩算法),并且大小必须一致;也就是说,具有所有透明像素的场景必须与具有随机噪声的场景相同。我正在想象一个密集的十进制级别的东西,它包含3 x 4位(0-9)BCD数字,只有10位,其中24个状态保留在1024之外,这很棒。那么有人有任何想法吗?

有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:3)

在一个字节(256个可能的值)中,您可以存储5个三位值。一种看待它的方法:三到五的功率是243,略小于256.它略微的事实也表明你没有浪费太多的一点点(几乎没有)任何,或者)。

为了将5个3位“数字”编码成一个字节,可以考虑连续使用5个“数字”取3个数字 - 结果值保证小于243,因此直接可存储在一个字节中。类似地,对于解码,执行字节值的base-3转换。