Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 处理高分辨率图像的最佳方法是什么?_Iphone_Ios_Ios5_Iphone 4_Iphone 3gs - Fatal编程技术网

Iphone 处理高分辨率图像的最佳方法是什么?

Iphone 处理高分辨率图像的最佳方法是什么?,iphone,ios,ios5,iphone-4,iphone-3gs,Iphone,Ios,Ios5,Iphone 4,Iphone 3gs,我正在开发一个应用程序,它需要使用分辨率高于(2000 x 2000)的图像来实现文本清晰度 我有一个背景图像,在上面我需要以相同的分辨率显示叠加图像。覆盖的数量是可变的,从2到30 使用UIImage加载图像时,每个像素需要4个字节,因此,如果一个图像的分辨率为3000x3000,它将占用高达34 MB的内存,对于2000 x 2000,将占用15 MB的内存 这就是问题的症结所在,在3GS上加载4-5幅图像,在iPhone4上加载11-13幅图像后,应用程序崩溃 覆盖层需要精确地放置在背景图

我正在开发一个应用程序,它需要使用分辨率高于(2000 x 2000)的图像来实现文本清晰度

我有一个背景图像,在上面我需要以相同的分辨率显示叠加图像。覆盖的数量是可变的,从2到30

使用UIImage加载图像时,每个像素需要4个字节,因此,如果一个图像的分辨率为3000x3000,它将占用高达34 MB的内存,对于2000 x 2000,将占用15 MB的内存

这就是问题的症结所在,在3GS上加载4-5幅图像,在iPhone4上加载11-13幅图像后,应用程序崩溃

覆盖层需要精确地放置在背景图像上。它们就像我们在谷歌地图流量叠加中看到的一样。这并不排除平铺,但会使任务相对复杂


我应该如何处理这个问题?

当然,您不能一次将整个图像集加载到内存中。 您只需要加载图像数据的可见部分,并应尽快卸载不可见部分

如果你想在QuartzCore级别解决这个问题,有一个类就是为了这个目的

苹果参考:

苹果示例代码:

其他信息:

要使用此层,需要将源图像分割为多个平铺。并在图层需要时提供。(
drawLayer:inContext:
method。)该方法将在非主线程上调用,因此不会阻止用户界面。不要忘记释放不可见磁贴的图像以节省内存


此外,您还可以通过使用后台线程动态加载资源的低级OpenGL代码来实现这一点。在这种情况下,您可以使用PVRTC有损内存压缩,这可以节省大量视频内存使用,但这确实是一项痛苦且耗时的工作。我建议使用
CATiledLayer
。这对于大多数情况来说已经足够了。

这个问题可以通过平铺或重新考虑业务逻辑来解决。是的,我想知道是否有一种方法可以在不平铺的情况下处理这个问题。我假设您使用MapKit,因为您同时提到了覆盖图和谷歌地图。MKOverlayView是平铺视图,因此您可能不应该排除平铺。MK框架将在覆盖视图上调用
drawMapRect:zoomScale:inContext:
,作为最佳实践,您应该只根据提供的边界矩形渲染内容。请从apple尝试,它正在缩小图像而不影响分辨率。请查看WWDC2010中的高级Scrollview演示文稿-其中包括使用
UIScrollView
平铺大型图像。对于这种大小的图像,除了平铺,实在没有其他选择。