首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理超高分辨率图像的最佳方法是什么?

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

Stack Overflow用户
提问于 2012-09-17 19:35:25
回答 1查看 489关注 0票数 5

我正在开发一个应用程序,这需要使用的图像分辨率高于(2000 X 2000)的文字清晰度的目的。

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

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

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

覆盖图需要精确地放置在背景图像上。它们就像我们在Google Maps流量覆盖中所拥有的一样。这并不排除平铺,但会使任务相对复杂。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-02 02:55:35

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

如果您想在QuartzCore级别上解决这个问题,有一个专门用于此目的的CATiledLayer类。

苹果参考资料:https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CATiledLayer_class/Introduction/Introduction.html

苹果示例代码:https://developer.apple.com/library/mac/#samplecode/CALayerEssentials/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008029

更多信息:http://red-glasses.com/index.php/tutorials/catiledlayer-how-to-use-it-how-it-works-what-it-does/

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12458356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档