2

在 iPhone 3GS 上,相机拍摄的图像有 2048x1536 像素。如果我的数学是正确的,在 CGLayer 上打开这个图像将消耗 12.5 MB。

Springboard 将终止任何超过 12 mb 的应用程序(至少这是发生在我身上的事情)。

使用 CGContextDrawLayer 之类的函数操作此图像至少会再消耗 12 mb。

这是 24 MB。

如何在不终止程序的情况下在 iPhone 上操作这些图像?

有什么方法可以在不减小尺寸的情况下减少相机拍摄的图像的占用空间?

任何线索?谢谢。

4

2 回答 2

2

您应该考虑使用NSInputStream以便以任何有意义的大小块处理您的图像。例如,您可能会读取 1 MB 的数据,对其进行处理,将结果写入NSOutputStream,然后再重复 11 次直到 EOF。

您的图像处理算法很可能会确定最佳块大小。

于 2009-10-04T17:31:08.467 回答
1

您的屏幕只有 320 x 480 像素,因此在图层上放置更多内容似乎是在浪费内存。

因此,您最好将原始图像的原点从 2048 x 1526 像素缩放到 320 x 480 像素,然后再将其放到图层上。

例如,如果您使用 aUIScrollView来呈现图层,您将编写代码,以便捏合和拉伸将根据当前缩放级别计算新的 320 x 480 像素表示,该缩放级别由视图的框架和边界确定。在您的代码中,点击和拖动将转换原点并重新计算丢失的位。

当您放大文档时,您可以使用 Safari 看到这种效果。随着新视图的渲染,它从模糊变为清晰。同样,当您拖动视图时,会计算其新缺失的部分并将其添加到视图中。

无论触摸事件如何,您可能只想在图层上放置一个 320 x 480 像素的表示。

于 2009-09-30T11:15:44.880 回答