在iOS上显示大图片,而不需要预先切片

我正在构build一个将图像数据保存到沙盒中的单个JPEG文件的相机应用程序。 图像的平均大小约为2MB。

问题:我无法在照片查看器中显示图像,因为在内存中有less量图像会引发内存警告,并且非常缓慢地滚动图像。

我不能将图像拆分成磁贴并将其保存到磁盘,因为这比显示单个图像更昂贵。 我试图在捕获时将图像分成多个图块,但在5S上平均花费5 1/2秒将所有图块保存到磁盘。 随着应用程序在旧设备上执行,它只会变得更糟。 这是非常糟糕的,因为如果用户在保存中间存在应用程序呢? 我将遗失瓷砖,并没有未经压缩的原始文件以后find遗失的瓷砖。

问题:在不引起内存问题的情况下显示全尺寸图像并保持滚动速度最快的最佳方式是什么? 在App Store上的相机应用程序吨这样做,照片应用程序这样做,必须有一个很好的解决scheme。

注意 :我目前正在显示图像的缩略图,然后在另一个线程中从磁盘加载完整大小的图像。 一旦完整大小的图片加载完成后,我会在主线上呈现全尺寸的图片。 这消除了内存问题,因为我一次只有一个全尺寸的图像在内存中,有两个缩略图,但仍然导致在scrollview滞后,因为在主线程中绘制全尺寸图像仍然非常昂贵。

我将不胜感激任何input!

你可以..

  1. 创build一个缩小的拇指钉
    • 创build一个较小的图像,并保存在一个不同的“沙箱”文件夹..并阅读,以浏览..然后加载图像,如果用户想看它的全尺寸。

解决这个问题的一个方法是平铺图像。 您可以将较大的解压缩图像保存为“ 磁盘 ”作为一系列的图块,并且随着用户的移动,只会拉出您需要实际显示的图块。 您只需要一次在内存中需要1个区块,因为您将其绘制到屏幕上,然后将其丢弃并加载下一个区块。 (你可能想把可见的图块caching在内存中,但是这是一个实现细节,即使把整个图像作为图块也可以减轻内存压力,因为你不需要一个大的连续块。

这就是Photoshop这样的应用程序如何处理这种情况。

我build议你的第二种方法是检查来自苹果的例子,用于处理称为PhotoScroller的大型图像。 图像已经平铺。 如果你需要一个在Cocoa平铺图像的例子,请查看cimgf.com

希望这会帮助你。