在过去的几周里,我一直在试图让我的头发在iPhone上工作。我需要缩放和裁剪大约150mb的图像,以便将它们保存为滚动视图所要求的图块,以便用户以高分辨率查看图像。在iPhone上缩放和裁剪巨大的图像
问题是,这些图像真的推动了iPhone可以处理的范围。把这些巨大的图像缩小到1000左右并做平铺似乎很容易,但对于大的缩放级别,我需要在中途对其进行缩放,例如4000,这太大了。所以我想到了从全尺寸图片制作中等大小的图块,并将每个图块和中等缩放图块进行拼贴的想法。
通过在内部循环周围创建一个autoreleasepool,并在每个循环之后对其进行排空,但我可以控制内存,但有时对我来说似乎是随机的,内存泄漏或至少不会排空。我在辅助线程上完成了所有这些工作,当它返回到该线程中的第一个函数时,我释放线程自己的autoreleasepool,然后才清除最后一个内存工件。它似乎并没有打扰模拟器,但iPhone的宽容度要小得多,而且它在完成整个平铺过程之前崩溃了。裁剪的代码,我现在用的就是从Hive05
http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/
任何人都有前应对如此大规模的图像?预先生成瓷砖是最佳方式吗?任何关于为什么一些循环会增加内存和一些不会,或者如何强制每个自动释放的内容清除内部池而不是等待外部池的建议?
感谢您阅读这篇文章。
为GOT增加,这些图像是TIFS,所以也许位图信息的直接读数会比缩放和裁切整个事情
它绝对可以在iPhone 3G上完成。这就是我所拥有的,我可以在一切中等大小的块之前平铺一些中等大小的块。基本上,如果它可以平铺一个,它可以将它们全部平铺。我只需要正确清理中间的内存并重复此过程。 我一直非常沮丧,试图让循环不留下任何东西我认为C函数可能是下一步,但我不知道如何继续。 – Craig 2009-12-12 00:27:55