我目前在 Java 程序中有以下数组,
byte[] data = new byte[800];
我想在通过串行(115200 波特)将其发送到微 Controller 之前对其进行压缩。然后我想用 C 解压缩微 Controller 上的数组。但是,我不太确定最好的方法是什么。性能是一个问题,因为微 Controller 只是一个 arduino,所以它不能太占用内存/cpu。数据或多或少是随机的(编辑 我猜它并不是真的那么随机,请参阅下面的编辑)我会说因为它代表每 16 位的 rgb 颜色值。
压缩这些数据的最佳方式是什么?知道我可以获得多少压缩吗?
编辑
抱歉缺少信息。我需要无损压缩,而且我只打算一次发送 800 个字节。我的问题是,在我使用的 115200 波特率下,800 字节的传输速度不够快。我希望我可以稍微缩小尺寸以提高速度。
每两个字节看起来像:
0RRRRRGGGGGBBBBB
其中 R G 和 B 位分别表示颜色 channel 红色、绿色和蓝色的值。每两个字节就是 20x20 网格上的一个单独的 LED。我会想象许多两个字节的集合是相同的,因为我经常将相同的颜色代码分配给多个 LED。也可能是 RGB 值通常 > 15,因为我通常尽可能使用明亮的颜色(但是,这可能是一个有争议的问题,因为它们通常不会同时 > 15)。
最佳答案
如果数据“或多或少是随机的”,恐怕你压缩它的运气就不太好。
更新
根据新信息,我敢打赌您的 LED 显示屏不需要 32k 色。我想一个 1024 色或 256 色的调色板可能就足够了。因此,您可以采用简单的压缩方案(通过查找表简单地映射每个单词,或者可能只是丢弃每个组件的 lsbs),即使对于完全不相关的像素值也适用。
关于java - 在 Java 中压缩字节数组并在 C 中解压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4159502/