如何提高PNG数据解码时间?

时间:2013-06-29 10:22:28

标签: c++ android-ndk libpng

解码大小为1080x1920的png图像需要30多天,我希望能够更快地完成它。

在Android BitmapFactory中有一种方法可以传递要返回的sample size。这使得返回的解码图像小于实际源。这反过来使得解码过程更快,结果是质量较低的图像。

我想在c ++中使用一些png解码库(例如libpng)做类似的事情,但出于某种原因,我无法找到有关低质量解码的任何细节。

任何提高解码时间的指针或想法都会受到赞赏!

2 个答案:

答案 0 :(得分:1)

在解码中要求较低分辨率的图像对CPU工作没有任何影响:PNG流基本上是一个必须完全解压缩的压缩ZLIB流,并且内部有一个特定于PNG的未完成,这又需要所有相邻像素。当然,子采样可以减少内存使用量(这本身可以减少解码时间),为此您需要逐步解码PNG(以便逐行完成子采样);你可以用(我的)Java库PNGJ做到这一点;它针对该使用模式进行了优化,有些人已在Android中成功使用。

如果你想在C中使用libpng,它的想法是一样的。逐行解码图像,然后自己进行子采样。

请记住,这种使用模式会破坏隔行扫描的PNG(在这种情况下,你想要解码其中一个子图像),但是,无论如何,将1080x1920图像存储为隔行扫描PNG将是一个坏主意。

答案 1 :(得分:0)

Android是开源的;您可以查看来源:the Java interfacethe C++ backend - 从那里调用SKIA library

This class似乎是抽样的地方;它是从here调用的。