1>最初方案:

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

          for (int i = 1; i < 601; 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(40);//每秒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 = 1; i < 601; 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 = 1024;byte[] bytes = new byte[fileInfo.Length];for (long j = 0; j < (fileInfo.Length / (long)leng + (long)1); j++){byte[] b = binReader.ReadBytes(leng);if (b == null || b.Length < 1){break;}for (long jj = j * leng; jj < (j + 1) * 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);
           }

真诚期待大家指导...

转载于:https://www.cnblogs.com/zydf/p/3141735.html

wpf image控件循环显示图片 以达到动画效果 问题及解决方案相关推荐

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

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

  2. oc中在控件上显示图片

    当我们想在控件上改变图片的时候,我们需要做的是获得图片的引用,然后调用函数,来设置图片.那么具体是怎样来操作. 第一步是获得控件的引用: @property(weak,nonatomic)IBOutl ...

  3. WPF将控件保存为图片

    我们很多时候想把软件当前的界面内容保存为图片,在WPF中是非常简单的,RenderTargetBitmap就是专门用来干这个滴,鉴于很多朋友问我这个问题,我特此把相关的源代码在这里展示一下. 先看一下 ...

  4. DataGridView控件中显示图片及其注意事项 【z】

    windows Forms编程里面有一个DataGridView控件,它不光是可以显示数据,可以显示按钮,复选框,甚至还可以显示图片.这些图片可以来自于数据库(用二进制的方式存储的),也可以来自文件系 ...

  5. 利用OpenCV在picture控件中显示图片

    (1)首先要保证OpenCV的头文件已包含进程序,并且已在工程中正确lib等文件目录. (2)添加一个picture控件 (3)在对话框初始化函数(或者某按钮响应函数)中 CWnd* pwnd = G ...

  6. Qt解决资源文件中添加图片,对应控件不显示图片的问题

    //资源文件--为控件添加图标//:/new/prefix1/image/mr.jpgQPixmap pic; //定义一个图片对象pic.load(":/new/prefix1/a.jpg ...

  7. avalonia 控件-Image(显示图片)

    1- resm方式 将图片文件属性设置为 嵌入的资源 Source="resm:项目名称.图片文件夹.图片文件.png?assembly=项目名称" <Image Curso ...

  8. MFC Picture Control 自适应控件大小显示图片,失真和不失真

    StretchBlt和BitBlt都用在双缓冲视图中,用来显示一幅图像 一.StretchBlt 函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩.也即是将内存中的 ...

  9. android 左移动画_Android 控件的显示隐藏上下左右移动动画

    标签: 一.利用Android提供的左右移动工具类:AnimationUtils LinearLayout ll_first = (LinearLayout) findViewById(R.id.ll ...

最新文章

  1. Windows7是什么
  2. Java里的接口的interface 简单介绍.
  3. 【安全牛学习笔记】kali TOP10 安全工具:
  4. 百年诺奖的那些争议与放弃
  5. Linux APT VIM 的一些指令
  6. 时隔两年,盘点ECCV 2018影响力最大的20篇论文
  7. 电脑如何进入bios模式_如何进入BIOS设置U盘启动盘
  8. vue项目打包之后首页白屏的问题
  9. 喜马拉雅 xm文件转m4a_录音转文字:学习/办公/生活都极为实用!
  10. java tostring的用处_java中的toString什么意思?toString有什么用?
  11. go导出mysql中的excel表,MySQL导出数据,并转存到Excel表格中
  12. e站host地址_ip地址基础入门知识
  13. 安装mysq的时候执行mysqld --initialize --console时候报错:can not create directory data文件夹需要把分隔符改成反方向
  14. D语言游戏编程(1):工作环境
  15. 有源和无源设备的共质心布局:回顾和未来之路
  16. 计算机变量符号有哪些,数值型数据的符号在计算机中如何表示
  17. 报500服务器内部错误解决思路
  18. alwayson的同步提交和异步提交
  19. Idea中自动注释的缩进(避免添加注释自动到行首)
  20. 计算机软件卡死,必看!电脑运行卡或软件卡死无响应,怎么办?

热门文章

  1. linux系统awk、sed,Linux系统 linux awk sed
  2. python调用sql数据库_Python3操作SQL Server数据库(实例讲解)
  3. MySQL做毕设_PHP+MYSQL在线小说阅读网的设计与实现
  4. 结构力学求解器_结构力学学好这些内容对施工很关键,你都学懂了吗?
  5. 【Ubuntu18.04】Seetaface6人脸识别部署
  6. RDD 常见Action算子入门及应用
  7. 零基础、转行学习Python是否还在纠结?这里告诉你答案!
  8. java多线程之volatile理解
  9. V神:你所理解的“去中心化”不一定准确
  10. java使用jeids实现redis2.6的HyperLogLog数据结构的操作