Har*_*ain 5 iphone iphone-3gs ios iphone-4 ios5
我正在开发一个应用程序,它需要使用分辨率高于(2000 x 2000)的图像,以达到文本清晰度.
我有一个背景图像,我需要在其上显示具有相同分辨率的叠加图像.叠加的数量是可变的,从2到30.
在使用UIImage加载图像时,每个像素需要4个字节,因此如果一个图像的分辨率为3000x3000,则需要最多34 MB的内存,15 MB的2000 x 2000.
这就是问题出现的问题,应用程序在3GS上加载4-5张图像后崩溃,在iPhone 4上加载11-13张图像.
需要将叠加层准确放置在背景图像上.它们就像我们在谷歌地图流量叠加层中所拥有的那样.这并不排除平铺,但使任务相对复杂.
我该如何处理这个问题?
当然,您无法一次将整个图像集加载到内存中。您只需加载图像数据的可见部分,并应尽快卸载不可见部分。
如果你想在 QuartzCore 级别解决这个问题,有CATiledLayer专门用于此目的的类。
其他信息:http://red-glasses.com/index.php/tutorials/catiledlayer-how-to-use-it-how-it-works-what-it-does/
要使用此图层,您需要将源图像拆分为许多图块。并在图层需要时提供它们。(drawLayer:inContext:方法。) 该方法将在非主线程上调用,因此用户界面不会被阻塞。不要忘记释放不可见图块的图像以节省内存。
此外,您还可以使用低级 OpenGL 代码来实现此功能,并使用后台线程进行动态资源加载。在这种情况下,您可以使用 PVRTC 有损内存压缩,这可以大量节省视频内存的使用,但这确实是痛苦且耗时的工作。我建议使用CATiledLayer. 对于大多数情况来说这已经足够了。
| 归档时间: |
|
| 查看次数: |
484 次 |
| 最近记录: |