注册 登录
主题 : 大图内存优化问题
级别: 新手上路
状态: 连续签到 - [3天]
UID: 384249
精华: 0
发帖: 42
可可豆: 102 CB
威望: 97 点
在线时间: 398(时)
注册时间: 2014-10-10
最后登录: 2017-10-18
0 楼:  发表于: 2017-10-13 11:30    发自: Web Page
来源于 已解决 分类

大图内存优化问题   

现在我有一张9000*9000的png格式场景图10M,加载到内存中会增加内存200M。这在IOS中是不可接受的。
一、我目前采用的方法是把图片压缩成4000*4000的,然后换成jpg格式加载进内存消耗40M。似乎可以接受了。缺点是压缩图片放大会不清晰。
二、我在想采用小图片分块显示可以实现原图的高清显示。思路是:把大图裁剪成81张小图,通过scrollView滑动到屏幕对应位置在显示相应图片,不在屏幕中的图片就进行释放。


问题已解决:


方法一:
我把大图用PS拆分成了54张小图。在scrollViewDidScroll代理方法中计算当前应该显示的图片,然后手动释放掉不需要显示的额图片。内存消耗非常小哦。

方法二:
我最想不明白的地方,我只是把原来的额PNG图片转换成了JPG,测试后几乎不怎么消耗内存。也没要影响图片的清晰度,还没弄明白。有没大神能给出解释的。。。

方法三:
如果必须使用PNG的大图,那么推荐使用CATiledLayer来显示,性能极佳,且图片无损。苹果API会自动把大图拆分成若干小贴片进行显示,自带渐入效果。

[ 此帖被frankl在2017-10-17 15:08重新编辑 ]

级别: 侠客
状态: 连续签到 - [99天]
UID: 500596
精华: 0
发帖: 118
可可豆: 683 CB
威望: 463 点
在线时间: 254(时)
注册时间: 2015-08-26
最后登录: 2017-10-17
1 楼:  发表于: 2017-10-13 17:31    发自: Web Page
可不可以把图片下载 下来 通过imagewithcontentoffile 方法加载图片呢?这样就不会占用内存了
级别: 新手上路
UID: 618113
精华: 0
发帖: 51
可可豆: 132 CB
威望: 132 点
在线时间: 137(时)
注册时间: 2017-07-05
最后登录: 2017-10-18
2 楼:  发表于: 2017-10-13 17:58    发自: Web Page
imagewithcontentoffile 只是不會對圖片進行緩存吧,但加載時還是會占用很大的空間。。。?
级别: 新手上路
状态: 连续签到 - [3天]
UID: 384249
精华: 0
发帖: 42
可可豆: 102 CB
威望: 97 点
在线时间: 398(时)
注册时间: 2014-10-10
最后登录: 2017-10-18
3 楼:  发表于: 2017-10-13 18:08    发自: Web Page
大场景图片是本地的,正如2楼所言,imagewithcontentoffile方式只是不会缓存,但是还是会消耗很大的内存空间。
级别: 骑士

状态: 连续签到 - [13天]
UID: 335952
精华: 0
发帖: 277
可可豆: 247 CB
威望: 312 点
在线时间: 797(时)
注册时间: 2014-06-30
最后登录: 2017-10-18
4 楼:  发表于: 2017-10-14 09:13    发自: Web Page
很有意思 关注下
级别: 骑士
状态: 连续签到 - [219天]
UID: 568764
精华: 0
发帖: 248
可可豆: 1427 CB
威望: 998 点
在线时间: 540(时)
注册时间: 2016-06-16
最后登录: 2017-10-18
5 楼:  发表于: 2017-10-14 09:57    发自: Web Page
为什么不能用网页写呢?
级别: 侠客
状态: 连续签到 - [99天]
UID: 500596
精华: 0
发帖: 118
可可豆: 683 CB
威望: 463 点
在线时间: 254(时)
注册时间: 2015-08-26
最后登录: 2017-10-17
6 楼:  发表于: 2017-10-14 16:55    发自: Web Page
回 楼主(frankl) 的帖子
这样的话 还是使用HTML写吧,那样会好很多
级别: 新手上路
UID: 594443
精华: 0
发帖: 7
可可豆: 7 CB
威望: 7 点
在线时间: 5(时)
注册时间: 2016-10-19
最后登录: 2017-10-19
7 楼:  发表于: 2017-10-14 23:04    发自: Web Page
动态检测contentOffset,用didScroll 或 KVO 都可以
级别: 新手上路
状态: 连续签到 - [3天]
UID: 384249
精华: 0
发帖: 42
可可豆: 102 CB
威望: 97 点
在线时间: 398(时)
注册时间: 2014-10-10
最后登录: 2017-10-18
8 楼:  发表于: 2017-10-16 10:27    发自: Web Page
回 6楼(去你的联盟) 的帖子
感谢回答,对网页实现这个功能我还不太熟悉,但是,我猜想即使是网页来加载这个大图片,也会加载进内存吧!这样内存不是还是会急剧升高吗?(我的大图是本地的场景图片)
级别: 新手上路
状态: 连续签到 - [3天]
UID: 384249
精华: 0
发帖: 42
可可豆: 102 CB
威望: 97 点
在线时间: 398(时)
注册时间: 2014-10-10
最后登录: 2017-10-18
9 楼:  发表于: 2017-10-16 10:30    发自: Web Page
回 7楼(hua397) 的帖子
我目前就是在didScroll中监测contentOffset,但是需要手动来控制图片的加载和释放,还要预加载周围的图片,操作相对复杂。页面功能后面可能比较繁杂,我担心会衍生一些bug
描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部