1

解码大小为 1080x1920 的 png 图像需要超过 30 毫秒,我希望能更快地完成。

在 Android BitmapFactory中有一个方法,您可以在其中传递要返回的样本大小。这会导致返回的解码图像小于实际源。这反过来又使解码过程更快,结果图像质量较低。

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

任何改善解码时间的指针或想法将不胜感激!

4

2 回答 2

1

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

如果你想用 C 语言和 libpng 来做,想法是一样的。逐行逐行解码图像,然后自己进行二次采样。

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

于 2013-07-02T01:22:09.400 回答
0

Android是开源的;您可以查看源代码:Java 接口C++ 后端- 从那里,它调用SKIA 库

此类似乎是进行采样的地方;它是从这里调用的。

于 2013-06-29T11:02:20.627 回答