2011-06-09 98 views
0

我目前正在开发一款“Dropbox”式的应用程序,它具有集成了文件/图像的查看器。使用iOS处理/缩放高分辨率图像

问题:当用户在服务器上存储了真正高分辨率的图像并希望在设备上查看它时,应用程序将崩溃。

例如:12000x4000像素的全景照片。有没有办法缩小这张图片(在客户端 - iOS端)?

目前我使用这个类:http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/

但我需要找到一种方法,而无需使用>的内存300MB ...

回答

5

如果你控制的服务器,然后再去做服务器 - 侧。我不想通过3G下载12000x4000图像,只能将其视为640x960。

+0

不幸的是我们需要在客户端解决这个问题。 – cweinberger 2011-06-09 16:01:09

1

你应该考虑处理这个图像,就像Google Maps处理大图像一样,通过在CATiledLayer上做一些图像拼贴王,请检查Apple文档中的PhotoScroller示例。

+0

问题是在使用平铺图层之前处理这个图像,我需要提供它们..因此我需要以某种方式剪切图像 - 但是这也会使用太多的内存:/ – cweinberger 2011-06-17 12:20:42

+0

您可以在服务器端使用ImageMagick削减它们,图像拼贴是解决您的问题的唯一方法,对此表示遗憾。 – ararog 2011-06-17 12:27:02

+0

请查看此链接(http://iphonedevelopment.blogspot.com/2010/10/cutting-large-images-into-tiles-for.html)了解如何为iPhone应用程序执行图像平铺。 – ararog 2011-06-17 12:28:51

1

查看Apple示例代码项目Large Image Downsizing。 与CATiledLayer不同,它实际上会从iOS本地磁盘上的较大图像在内存中创建一个新的较小图像。在完全放大CATiledLayer 会尝试根据需要解码整个源图像以显示它。

然而,这种技术缩小了全幅波段的源图像,因此整个过程不会一次尝试加载到内存中。支持TIFF,JPEG,PNG。不支持BMP,GIF,隔行扫描图像。

正如自述文件中提到的,源图像可以存在于应用程序包,照片卷或其他地方(如下载的OTA)中。