【发布时间】:2012-05-25 12:40:44
【问题描述】:
我目前正在使用开源 libPNG 库来读取和解压缩位图。它在 Android、OS X 和 Win32 上运行良好,但由于某种原因在 iOS 设备上运行速度慢 30X。所有平台都使用相同的 libPNG 源代码树(未修改)。
我在 Cocos2D 论坛中发现的几件事让我相信这是 iOS 上的 zlib 实现的问题,但我尝试同时使用 stb_image 和 LodePng 来避免使用 zlib,而这些库的性能实际上比 libPNG 还要糟糕!
是否有一些特殊的方法可以为 iOS“正确”构建 libPNG?如果不是,那么 libPNG 在 iOS 上的 SO 会慢得多吗?为什么 stb_image 也会变慢/变慢?有没有已知的方法来解决或纠正这个问题?
谢谢, 自动对焦
【问题讨论】:
-
您可以在 iOS 和 OS X 上使用 CoreGraphics 来加载 PNG 图像。基本过程是使用
CGImageCreateWithPNGDataProvider加载PNG,然后创建位图上下文(CGBitmapContextCreate)并将PNG 绘制到位图上下文中。这样您就可以完全避免使用 LibPNG。 -
您能否主要测量 iOS 设备上较慢的文件系统带宽?将大型位图输入 GPU 进行显示也存在 iOS 设备带宽限制,因操作系统版本和设备型号而异。
-
它与 gpu 无关,只是将 .png 从一个内存缓冲区解压缩到另一个使用。一直吃的具体函数是“png_read_image()”。
-
即使找到了解决方法,也值得知道答案。谁知道它还会影响什么?
-
FWIW 我最终使用“CGBitmapContextCreate()”在 iOS 上解压缩内存中的 .png 文件。
标签: android c++ ios png libpng