首页 新闻 会员 周边

WPF 图片预加载

0
悬赏园豆:50 [已关闭问题] 关闭于 2014-05-26 16:11

一系列的3d序列帧(把3d模型保存为若干张图片),MouseMove 事件中更改Image.Source,但由于图片比较大,出现了卡顿(3d模型转动起来不够流畅),把所有的图片都加载到了List<byte[]>中,但是卡顿几乎得不到改善,而且内存占用很高(加载了几百张图片,不高才怪!)。如果压缩减小图片文件,经测试,单张图片600KB左右就比较流畅,但是不够清晰,所以此路不通。

问题的关键应该在于“图像呈现”,但是在下水平实在有限,还望各位大神走过路过不要错过啊!在下不胜感激!

问题补充:

经过测试:

使用List<ImageSource> 来缓存所有的图片,在ImageSource呈现过一次之后,下次呈现就会加快很多。但是这样内存占用很高。

 

400张1.27M的图片,内存占用达到了1360多M,而每张图片第一次呈现需要35ms左右,当所有的图片都呈现过之后,三维模型能够流畅旋转,图片呈现耗时减少为15ms左右。

400张860K左右的图片,内存占用达到了1300多M,呈现时间30ms左右  之后呈现时间为15ms左右

400张620K左右的图片,内存占用880多M,呈现时间为20ms左右,理论耗时:20*400=8000ms 实际耗时:1200+ms ,之后呈现时间为15ms左右,

400张500K左右的图片,内存占用700多M,呈现时间15ms左右,第一次呈现即可以流畅的旋转,但是图片清晰度不够!程序大小1024*1024

 

注:以上内存占用均指List中ImageSource已经全部呈现过 ,呈现时间在15ms以内即可达到流畅效果

 

两个关键性问题:

1、如何减少呈现耗时(我现在的做法是用一个动态的loading图片遮住,用一个线程来依次呈现所有ImageSource)

2、减少内存占用 (我尝试只保存当前Index的前、后10个ImageSource,内存占用是下来了,但是没有了缓存效果,可能是我的线程调度有问题)

疯狂的懒羊羊的主页 疯狂的懒羊羊 | 初学一级 | 园豆:76
提问于:2013-07-23 17:19
< >
分享
所有回答(1)
0

是JPG格式的图片? 尝试更改下图片的格式,不同的图片格式WPF加载出来内存占用会有点不同。

不过总得说来WPF、WINFORM处理图像似乎都差不多。就是不知道windows自带的图片查看器是如何做的。

Libra.Jerry | 园豆:73 (初学一级) | 2013-12-06 17:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册