在过去的几周里,我一直在努力让一个平铺机制在 iPhone 上工作。我需要缩放和裁剪大约 150mb 的图像,以便它们可以保存为滚动视图请求的图块,从而允许用户以高分辨率查看图像。
问题是这些图像确实在推动 iPhone 可以处理的范围。将这些巨大的图像缩小到 1000 左右并进行平铺似乎很容易,但是对于大的缩放级别,我需要在中途缩放它,比如 4000 左右,这太大了。所以我想到了从全尺寸图像制作中等大小的块并将每个块和中等缩放平铺。
通过在内部循环周围创建一个自动释放池,并在每个循环后将其排空,我基本上可以控制内存,但有时,在我看来,这似乎是随机的,内存正在泄漏,或者至少没有被耗尽。我在辅助线程上执行所有这些操作,当它返回到该线程中的第一个函数时,我释放线程自己的自动释放池,然后才清除最后的内存工件。它似乎并没有打扰模拟器,但 iPhone 的宽容度要小得多,它在完成整个平铺过程之前就崩溃了。我使用的裁剪代码来自 Hive05
http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/
以前有没有其他人不得不处理如此大量的图像?预生成瓷砖是最好的方法吗?关于为什么有些循环会增加内存而有些不会增加内存的任何建议,或者如何强制每个自动释放的东西在内部池中清除而不是等待外部池?
感谢您阅读本文。
补充一下,这些图像是 TIF,所以也许直接读取位图信息会比缩放和裁剪整个图像更好