为iOS应用程序存储非常大的图像的最佳方法是什么?我希望一个应用程序能够查看可能数百兆字节的图像,可能与jpeg一样多达一千兆字节。我需要能够存储图像并检索所选区域以供显示。
目前,图像被切割成512x512像素的图块,并作为jpeg文件存储在具有数万个图块的目录树中(实际上是包含下采样的图像金字塔)。
忽略显示图像的问题,我感兴趣的是将这些数据存储在设备上的最有效,最易管理的方式:文件,就像它们目前一样,是在sqlite数据库中还是其他什么东西?
问题的第二部分。应用程序可以存储的数据量是否有限制,或者应用程序是否可以将数据导入到设备的存储限制。我在这里询问应用程序在安装后导入的数据。
答案 0 :(得分:2)
对此的解决方案是预先平铺巨大的图像,以便可以根据需要从文件系统中快速检索切片。非常大的图像的一个问题是大多数解决方案需要将整个图像渲染到上下文中,从而消耗大量的存储器。在iOS等内存有限的系统上,解决此问题的方法是使用像 libjeg 或 libjpegturbo <这样的库/ strong>一次渲染一行图像,然后将像素保存到原始文件中。直接执行此操作的缺点是,当您需要一个磁贴时,您需要遍历文件系统以查找磁贴的每一行。因此,更好的解决方案不仅是递增扫描,而且还递增地平铺。您可以使用mmap将文件映射到您需要的区域,这样您就可以真正减少内存消耗。也就是说,您可以在iOS上破坏统一缓冲区队列,以免应用程序崩溃,甚至整个系统崩溃!
如果您对如何实施上述解决方案感到好奇,那么github上有一个免费的项目 - PhotoScrollerNetwork - 可以完成上述所有工作。
答案 1 :(得分:1)
来自Apple的示例:PhotoScroller
答案 2 :(得分:-1)
分成几部分怎么样?然后,如果需要,可以通过您的应用程序收集