如何在iPhone / iPad上存储非常大的图像

什么是最好的方式来存储iOS应用程序的一个非常大的图像? 我想要一个应用程序能够查看可能是数百兆字节的图像,也许像jpeg那样的千兆字节。 我需要能够存储图像并检索选定的区域进行显示。

目前,图像被分割成512×512像素的图块,并以jpeg文件的forms存储在一个有数万个图块的目录树中(实际上是一个包含下采样的图像金字塔)。

忽略显示图像的问题,我感兴趣的是将数据存储在设备上的最有效,最易于pipe理的方式:像sqlite数据库或其他类似的文件,

问题的第二部分。 应用程序可以存储的数据量是否有限制,或者应用程序是否可以持续导入数据直至达到设备的存储限制。 我在这里问的是安装后应用程序导入的数据。

解决这个问题的方法是预先处理巨大的图像,以便可以根据需要快速从文件系统中检索磁贴。 一个非常大的图像的问题是,大多数解决scheme需要将整个图像渲染到上下文中,消耗大量的内存。 在像iOS这样的内存有限的系统中,解决这个问题的方法是使用像libjeglibjpegturbo这样的库来一次渲染一行图像,然后将这些像素保存为一个原始文件。 直接做这件事的缺点是,当你需要一个瓷砖,你需要跳过整个文件系统find瓷砖的每一行。 因此,一个更好的解决scheme不仅是增量扫描,而且也是增量式的。 您可以使用mmap将文件映射到您需要的区域,这样可以最大限度地减less内存消耗。 也就是说,你可以在iOS上糟糕的统一缓冲区队列,甚至整个系统崩溃!

如果您对如何实现上述解决scheme感到好奇,github上有一个免费的项目 – PhotoScrollerNetwork – 可以完成上述任务。

来自Apple的样本: PhotoScroller

怎么分裂成部分。 然后,如果需要,可以通过您的应用程序收集