我不确定如何标记这个问题所以如果您认为它们适用,我想添加标签。
我有一个相当大的矩阵,我被要求绘制并可能打印出海报。它的尺寸是70K。即我有一个70,000平方的数组,我必须绘制它将每个元素的值映射到某种颜色。这不是困难的部分,我可以这样做。
问题是,如何以合理的方式保存这样的图像?
我意识到这非常依赖于图像的特定属性。我认为这个形象在这方面可能会有问题。它显然很有趣的原因是因为它本质上是分形的。很多图像只是白色,如果这会有帮助......
然后,如果我确实打印出来,那么即使在2400dpi,它也将是一个米平方,每个矩阵元素只有1个像素。它会看起来有什么好处吗?或者它看起来像一个可怕的烂摊子? (问的一个原因是我不能去打印并看到它,因为它可能浪费50英镑!)
答案 0 :(得分:1)
我不知道您的数据看起来如何,但我可以想到一些好方法:
对于RLE,假设您使用16位作为样本大小。因此,如果您的其中一行开头如下:1245 white, 2 black, 100 white, 1 black, 834 white
您可以对此进行编码(十六进制)04dd0002006400010342
(请注意,004d是十六进制的1245,等等...)。现在使用80位代表2182位,或大约3.6%的压缩率。
但不是自己滚动...我建议,如果可以的话,只需使用... PNG!
我制作了一个7k乘7k(或总面积的1/100)的随机文件。它每100个白色随机分布1个黑色。它出现了677k,或大约11.3%的压缩率。
我将它提升到20k x 20k(约占你总面积的1/12),并且它的随机分布为100:1。它的大小为5.4Mb,或大约11.1%的压缩。
因此,如果您的黑到白是1:100,我打赌您能够以大约11%的所需位数或600Mb以下的方式表示您的文件。
答案 1 :(得分:0)
人眼开始失去在大约300 DPI时看到单个像素的能力,因此拥有比这更高分辨率的图像没有意义。因此,这成为如何降低图像分辨率的练习。每像素3个字节,原始版本需要14.7GB,因此大多数现成的解决方案都不太可行。
我假设你可以按顺序读取数据,这样就不需要同时将它全部存储在内存中。
一种简单的缩减方法是一次读取8行,然后平均每个8x8区域以产生一个输出像素。这会产生一个8750 x 8750的图像,这个图像仍然很大但在理性范围内。
有一些调整大小的方法可以产生比平均值更好的结果,可以在原始的滑动窗口上运行。重叠窗口最好能产生无缝结果。