Algorithm 压缩/包装“;don';t care“;位转换为3种状态

Algorithm 压缩/包装“;don';t care“;位转换为3种状态,algorithm,compression,microcontroller,Algorithm,Compression,Microcontroller,目前,我正在开发一个具有黑白和透明像素的屏幕显示项目。(这是一个开源项目:;显示了正在开发的256x192像素设置/清除OSD,但我正在迁移到白/黑/清除OSD。) 因为每个像素都是黑色、白色或透明的,所以我可以使用一个简单的2位/4状态编码,在这里我存储黑色/白色选择和透明选择。所以我会有一个这样的真值表(x=不在乎): 然而,可以清楚地看到,当像素是透明的时,这浪费了一位。我设计的是一个内存受限的微控制器,所以只要我能节省内存,它就是好的 因此,我正试图想办法将这3种状态打包成更大的单位(比

目前,我正在开发一个具有黑白和透明像素的屏幕显示项目。(这是一个开源项目:;显示了正在开发的256x192像素设置/清除OSD,但我正在迁移到白/黑/清除OSD。)

因为每个像素都是黑色、白色或透明的,所以我可以使用一个简单的2位/4状态编码,在这里我存储黑色/白色选择和透明选择。所以我会有一个这样的真值表(x=不在乎):

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

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

有什么建议吗?谢谢!

在一个字节(256个可能的值)内,您可以存储三位值中的5位。一种方法是:三到五次方为243,略小于256。事实上,它略小于256也表明您没有浪费太多的一小部分位(几乎没有)


要将5个3位“数字”编码为一个字节,请考虑将5个“数字”组成的基数3中的数字依次——结果值保证小于243,因此可直接存储在一个字节中。类似地,对于解码,对一个字节的值进行基数-3转换。

我很好奇如何将它们打包得更多,但感谢您提供的信息。8位听起来非常可行。但是,问题是如何才能适合一个2位的数字只占用3个状态到8位,5次?(编辑:只需阅读您的编辑,将在一秒钟内发布。)关于base-3的好主意;我将编写一个python程序,看看它是如何运行的。这与您将得到的一样好。我认为在开始使用192位(121个3状态值,而120个8位值)之前,您不会得到更好的压缩。我的方法是,在将其转换为C或汇编之前,始终先让它在Python中工作,因为您知道,使用Python不会出现晦涩难懂的编译器错误或内存冲突或其他问题。Python是一种很棒的语言,我更喜欢用它编写所有代码,但不幸的是,这并不总是可能的…:(我已经完成了算法。请看这个Python程序:它将5个像素(10位未压缩)打包成8位。对不起,我想我不清楚。它不能依赖于任何前一个字节中的任何像素。
B/W  T      
 x   0    pixel is transparent
 0   1    pixel is black
 1   1    pixel is white