在iPhone 3GS上,相机拍摄的图像为2048x1536像素。如果我的数学是正确的,在CGLayer上打开此图像将消耗12.5 MB。
Springboard将终止任何超过12 MB的应用程序(至少这是我遇到的情况)。
使用像CGContextDrawLayer这样的函数操作此图像将至少消耗12 mb。
这是24 MB。
如何在没有程序终止的情况下在iPhone上操作此类图像?
有没有办法减少相机拍摄的图像的占地面积而不减小尺寸?
任何线索?感谢。
答案 0 :(得分:2)
您应该考虑使用NSInputStream来处理您的图像,无论大小有多大。例如,您可能会读取1 MB的数据,处理它,将结果写入NSOutputStream,然后重复11次直到EOF。
更有可能的是,您的图像处理算法将确定最佳块大小。
答案 1 :(得分:1)
您的屏幕只有320 x 480像素,因此在图层上放置更多内容似乎是浪费内存。
因此,您可以将原始图像从原始图像转换为2048 x 1526像素,然后再缩放到320 x 480像素,然后再将其放到图层上。
例如,如果使用UIScrollView
来显示图层,则可以编写代码,以便捏合和拉伸将根据当前缩放级别计算新的320 x 480像素表示,并根据框架和视角的界限。在您的代码中,点击并拖动将转换原点并重新计算缺失的位。
当您放大文档时,可以使用Safari查看此效果。在渲染新视图时,它从模糊变为锐利。同样,在拖动视图时,会计算其新丢失的部分并将其添加到视图中。
无论触摸事件如何,您可能只想在图层上放置一个320 x 480像素的表示。