我不知道您的数据看起来如何,但我可以想到一些好的方法来做到这一点:
- 运行长度编码 - 逐行列出交替模式中有多少黑色,多少白色,黑色,白色。
- 坐标列表 - 如果您的人口非常稀少,您可以简单地列出填写的坐标。
- 白盒 - 这就像一次列出一个位(在您的 70k x 70k 中大约是 4.9b 位),除了它首先列出只有白色的大矩形区域。当这些位被列出时,它会跳过初始框列表中的任何内容。当它们被读入时,它也知道跳过框中的内容。这里有 12 个字节(每个坐标 3 个),可能会表示 20 x 20 的框(400 位)或更大。那将是大约 10% 的压缩。如果你能得到一个 200x200 的盒子,你就会看到 1% 的压缩率。
对于 RLE,假设您使用 16 位作为样本大小。因此,如果您的某一行开始是这样的:1245 white, 2 black, 100 white, 1 black, 834 white
您可以对其进行编码(以十六进制表示)04dd0002006400010342
(请注意,004d 是十六进制的 1245,等等...)。现在使用 80 位并表示 2182 位,或大约 3.6% 的压缩率。
但不要自己动手......我建议,如果可以的话,只使用...... PNG!
我制作了一个 7k x 7k 的随机文件(或总面积的 1/100)。每 100 个白色随机分布 1 个黑色。结果为 677k,或大约 11.3% 的压缩率。
我将它提高到 20k x 20k(大约是你总面积的 1/12)并且它再次具有 100:1 的随机分布。它的大小为 5.4Mb,或大约 11.1% 的压缩率。
因此,如果您的黑白比例为 1:100,我敢打赌您将能够以大约 11% 的所需位或 600Mb 以下来表示您的文件。