解码大小为1080x1920的png图像需要30多天,我希望能够更快地完成它。
在Android BitmapFactory中有一种方法可以传递要返回的sample size。这使得返回的解码图像小于实际源。这反过来使得解码过程更快,结果是质量较低的图像。
我想在c ++中使用一些png解码库(例如libpng)做类似的事情,但出于某种原因,我无法找到有关低质量解码的任何细节。
任何提高解码时间的指针或想法都会受到赞赏!
答案 0 :(得分:1)
在解码中要求较低分辨率的图像对CPU工作没有任何影响:PNG流基本上是一个必须完全解压缩的压缩ZLIB流,并且内部有一个特定于PNG的未完成,这又需要所有相邻像素。当然,子采样可以减少内存使用量(这本身可以减少解码时间),为此您需要逐步解码PNG(以便逐行完成子采样);你可以用(我的)Java库PNGJ做到这一点;它针对该使用模式进行了优化,有些人已在Android中成功使用。
如果你想在C中使用libpng,它的想法是一样的。逐行解码图像,然后自己进行子采样。
请记住,这种使用模式会破坏隔行扫描的PNG(在这种情况下,你想要解码其中一个子图像),但是,无论如何,将1080x1920图像存储为隔行扫描PNG将是一个坏主意。
答案 1 :(得分:0)
Android是开源的;您可以查看来源:the Java interface和the C++ backend - 从那里调用SKIA library。
This class似乎是抽样的地方;它是从here调用的。