1>最初方案:

用wpf的image控件循环显示图片,达到动画效果,其实就是在后台代码动态改变Image.Source的值,关键代码:

          for (int i = ; i < ; i++)//六百张图片
{
BitmapImage bmImg = new BitmapImage(new Uri(AppDomain.CurrentDomain.BaseDirectory + i.ToString() + ".png"));
bmImg.CacheOption = BitmapCacheOption.None;
vimage..Source=bmImg.Clone();
System.Threading.Thread.Sleep();//每秒25帧
}

由于Image.Source切换BitmapImage后,仍然抓着旧的bmImg不放,导致内存溢出.再多的内存也不够用.

在网上也找了大家说的方案都不行.只能寻找其他方案.

2>最终方案:

思路:a>先把所有要加载的图片转换成二进制数组,再把数组缓存到List中;

b>循环List,把二进制图片转换成MemoryStream;

c>把MemoryStream,通过ImageSourceConverter.ConvertFrom() as BitmapFrame,进行转换.

优点:先把图片缓存成二进制,这样可以释放对图片文件资源的占用,后面代码执行效率高;用通过MemoryStream生成的Source,用完就被释放了[暂时解释不了]!

核心代码:

           imageSourceConverter = new ImageSourceConverter();
byList = new List<byte[]>();
for (int i = ; i < ; i++)
{
using (BinaryReader binReader = new BinaryReader(File.Open(AppDomain.CurrentDomain.BaseDirectory + i.ToString() + ".png", FileMode.Open)))
{
FileInfo fileInfo = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + i.ToString() + ".png");
//byte[] bytes = binReader.ReadBytes((int)fileInfo.Length);
//byList.Add(bytes); if ((long)int.MaxValue > fileInfo.Length)
{
byte[] bytes = binReader.ReadBytes((int)fileInfo.Length);
byList.Add(bytes);
}
else
{
int leng = ;
byte[] bytes = new byte[fileInfo.Length];
for (long j = ; j < (fileInfo.Length / (long)leng + (long)); j++)
{
byte[] b = binReader.ReadBytes(leng);
if (b == null || b.Length < )
{
break;
}
for (long jj = j * leng; jj < (j + ) * leng; jj++)
{
bytes[jj] = b[jj % leng];
}
}
byList.Add(bytes);
}
}
}

// // //////////////
           for (int i = 0; i < byList.Count; i++)
           {
               MemoryStream stream = new MemoryStream(byList[i]);
               vimage.Source = imageSourceConverter.ConvertFrom(stream) as BitmapFrame;
               System.Threading.Thread.Sleep(40);
           }

真诚期待大家指导...

wpf image控件循环显示图片 以达到动画效果 问题及解决方案的更多相关文章

  1. QlikView TEXT控件固定显示图片

    QlikView 的Text控件不仅可以用来展示文本也可以用来展示图片. 数据表 2个列,一个是 关联字段(Country),另外一个保存图片物理路径. TEXT控件固定显示图片 ,编辑控件表达式 = ...

  2. 对话框上动态控件的创建、在Picture Control控件上显示图片

    1  MFC对话框之上的动态控件的创建 对话框上的控件是MFC类的一个具体对象. 当在对话框之上使用静态控件时,可以根据类向导来为每个控件添加消息.响应函数以及变量. 当需要在对话框中动态的创建某个控 ...

  3. C# WPF 歌词控件(支持逐字定位描色效果)

    原文:C# WPF 歌词控件(支持逐字定位描色效果) 之前做了一个模仿网易云歌词的控件,实现了加载网易云歌词并能随音乐播放进度定位歌词.今天呢将在这个控件的基础上增加逐字定位描色功能,如下图效果(QQ ...

  4. 解决嵌入WinForm的WPF控件无法显示图片问题

    解决办法是在控件初始化时,通过下面方法再次加载图片: ucCanvas.CreateCoordinateImage.Source = GetImageIcon(global::MainApplicat ...

  5. 在DataGridView控件中显示图片

    实现效果: 知识运用: DataGridView控件的DataSource属性 实现代码: private void Form1_Load(object sender, EventArgs e) { ...

  6. Android 控件的显示隐藏上下左右移动动画

    一.利用Android提供的左右移动工具类:AnimationUtils 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 LinearLayout ll_fi ...

  7. WPF Image控件使用本地图片

    BitmapImage bi = new BitmapImage(); // BitmapImage.UriSource must be in a BeginInit/EndInit block. b ...

  8. Sencha touch Panel之间的跳转(如不使用TabPanel或者Carousel控件而产生跳转的动画效果)

    常规的Sencha touch 应用都是"header content footer"结构,这样的结构无疑将使用TabPanel来实现,而且TabPanel肯定是card布局,这样 ...

  9. C# WPF Image控件下对于Base64的转化显示

    原文:C# WPF Image控件下对于Base64的转化显示 算作前言 本文对图片如何转化成base64不做描述,我们可以从很多途径了解到转化办法.却很少有博客提到怎么在WPF的Image控件中显示 ...

随机推荐

  1. keyStore vs trustStore--转载

    原文:http://lukejin.iteye.com/blog/605634 今天有同事向我问起这两个概念,所以我就记录下.首先我们得澄清一些概念.一个web应用如果需要提供以https的方式访问的 ...

  2. linux crt

    1.仿真  终端选linux  ANSI颜色[有颜色了] 使用颜色方案[颜色加深了] 2.外观  选传统的 ,utf-8 就不会乱码了

  3. Jackson框架,json转换

    Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 前面有介绍过json-lib这个框架,在线博文:http://www.cnblo ...

  4. 【转】Adobe CC 的下载地址

    http://trials3.adobe.com/AdobeProducts/AEFT/12/win64/AfterEffects_12_LS20.7z http://trials3.adobe.co ...

  5. NekoHTML

    1.如何使用NekoHTML? 必须在 Java Build Path里加入 nekohtml.jar , xercesImpl.jar 以及xalan.jar.下载的NekoHTML目录中并没有xe ...

  6. opencv中stitching_detail的运行

    这个拼图并非自带的直接使用sources中的代码.而是把必要的内容放到工程中,改造成自己的图像拼接.参考博文:http://www.tuicool.com/articles/fMbUfaF 该篇博文总 ...

  7. (转)fastdfs group通过添加硬盘扩容

    通过给group的机器添加硬盘的方式,实现某个group的扩容. fastdfs在一台服务器支持多个store_path,每个store_path指向一个存储路径.url “M00/3F/E1/oYY ...

  8. oracle数据库创建用户,并且给用户授权

    参考文档: http://www.blogjava.net/wolfman09/archive/2009/05/01/268536.html 一:创建用户 create user username i ...

  9. Linux系统下安装ISO文件

    1.在/mnt目录下,创建相应的iso文件夹,例如cd1,cd2. 2.然后,用命令:mount -o loop /home/kinglu/Matlab/matlab1.iso(iso文件路径名) / ...

  10. Android端手机测试体系

    1.冒烟测试 跟web端的测试流程一样,你拿到一个你们开发做出来的apk首先得去冒烟,也就是保证他的稳定性,指定时间内不会崩溃.这款原生sdk自带的monkey可以当做我们的测试工具.就跟我之前博客所 ...