用C#绘图实现动画出现卡屏(运行慢)问题的解决办法
2014-05-03 08:33
357 查看
正在用C#做一个小游戏,需要用到动画,上次解决的问题是闪烁问题,用双缓冲技术。以为不会有什么问题了。后来当把图片全部绘制上去的时候依然出现了卡屏的问题。这个问题困扰了我将近半个月了。马上就要规定的时间了。而且又是一个五一假期。小盆友们都去玩了。自习室少有的几个人还在上着自习,而我为了解决这个问题。也渡过了苦逼的两天。大早上7:30开始一直到晚上10点多。。。好了废话不多说了。开始进入正题。
问题细节:用绘图功能实现动画显示,也就是不断变换绘制图片的位置,达到动画的效果。结果出现了卡屏问题,就是运行的特别的卡、慢。
在网上找了很多资料参考,但是没有一个系统的示例说明具体的使用过程,我把我的总结给大家说一下。
解决思路:先将图片加载到内存(因为直接从磁盘读取文件要比在内存读取文件慢的多,这是导致卡屏出现的主要原因),然后在从内存中读取出来(即把二进制流转换为Image)
解决步骤:
1.先将图片放到内存中。就是以将图片以二进制流的形式加载到内存。
这段是参考网上的代码。
2.然后定义一个Image类型的变量,这个变量作为我们绘图时使用:
3.对Image类型 的变量赋值,即当我们程序加载的时候fish图片在使用的时候就不是在磁盘取得了,这样速度要快的多。
3.然后在使用fish进行绘图。
这样在改变fish位置绘图,就不会出现卡屏现象了。
如果用下面的方法绘图:
就是每次都从磁盘读取图片,速度慢,所以会出现卡屏现象。
希望对大家有帮助,也希望大家提出更好的解决办法。
问题细节:用绘图功能实现动画显示,也就是不断变换绘制图片的位置,达到动画的效果。结果出现了卡屏问题,就是运行的特别的卡、慢。
在网上找了很多资料参考,但是没有一个系统的示例说明具体的使用过程,我把我的总结给大家说一下。
解决思路:先将图片加载到内存(因为直接从磁盘读取文件要比在内存读取文件慢的多,这是导致卡屏出现的主要原因),然后在从内存中读取出来(即把二进制流转换为Image)
解决步骤:
1.先将图片放到内存中。就是以将图片以二进制流的形式加载到内存。
/// <summary> /// 图片转换成字节流 /// </summary> /// <param name="img">要转换的Image对象</param> /// <returns>转换后返回的字节流</returns> public static byte[] ImgToByt(Image img) { MemoryStream ms = new MemoryStream(); byte[] imagedata = null; img.Save(ms, System.Drawing.Imaging.ImageFormat.Png); imagedata = ms.GetBuffer(); return imagedata; } /// <summary> /// 字节流转换成图片 /// </summary> /// <param name="byt">要转换的字节流</param> /// <returns>转换得到的Image对象</returns> public static Image BytToImg(byte[] byt) { MemoryStream ms = new MemoryStream(byt); Image img = Image.FromStream(ms); return img; }
这段是参考网上的代码。
2.然后定义一个Image类型的变量,这个变量作为我们绘图时使用:
public Image fish ;
3.对Image类型 的变量赋值,即当我们程序加载的时候fish图片在使用的时候就不是在磁盘取得了,这样速度要快的多。
fish = BytToImg(ImgToByt(Image.FromFile("../../image/down.png")));
3.然后在使用fish进行绘图。
g1.DrawImage(fish, 0,0);
这样在改变fish位置绘图,就不会出现卡屏现象了。
如果用下面的方法绘图:
g1.DrawImage(Image.FromFile("../../image/down.png"), 0,0);
就是每次都从磁盘读取图片,速度慢,所以会出现卡屏现象。
希望对大家有帮助,也希望大家提出更好的解决办法。
相关文章推荐
- 用C#绘图实现动画出现卡屏(运行慢)问题的解决办法
- .NETC#下AE二次开发过程中出现的属性表不能更新问题解决办法
- 关于PB在安装或运行时出现的“nodebug”等问题的解决办法
- Linux下安装MyEclipse和Tomcat服务器详解,以及我安装过程中所出现的问题以及解决办法,并实现一个web小程序
- 运行yum时出现已被锁定,PID的另一个程序正在运行的问题解决解决办法
- discuz运行过程中出现问题的一些尝试解决办法
- QT运行exe时出现“could not find or load the QT platform plugin windows”问题的解决办法
- 用oralce连接.net客户端出现问题:“数据连接不成功,请检查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以64位模式运行,”的解决办法
- 我遇到的Myeclipse 实现Jena推理时出现的问题及解决办法
- VC6在win10运行时出现无法单步调试问题的解决办法
- windows下python-nmap运行过程中出现的问题及解决办法
- cxfreeze打包工程文件生成.exe,运行exe出现闪退问题,相关解决办法总结
- c#程序运行报错提示相应的设置outputpath和assemblyname属性的问题解决办法!
- springboot项目打包后运行出现问题解决办法
- JBPM5客户端Bundle运行到Felix上出现的问题以及解决办法
- jquery1.8版本使用ajax实现微信调用出现的问题分析及解决办法
- Struts运行时出现的问题及解决办法
- windows下python-nmap运行过程中出现的问题及解决办法
- 水晶报表运行一段时间后出现的两个问题及解决办法
- Windows下,运行tomcat9w.exe出现unable to open the service tomcat9问题解决办法。