用C#绘图实现动画出现卡屏(运行慢)问题的解决办法
正在用C#做一个小游戏,需要用到动画,上次解决的问题是闪烁问题,用双缓冲技术。以为不会有什么问题了。后来当把图片全部绘制上去的时候依然出现了卡屏的问题。这个问题困扰了我将近半个月了。马上就要规定的时间了。而且又是一个五一假期。小盆友们都去玩了。自习室少有的几个人还在上着自习,而我为了解决这个问题。也渡过了苦逼的两天。大早上7:30开始一直到晚上10点多。。。好了废话不多说了。开始进入正题。
问题细节:用绘图功能实现动画显示,也就是不断变换绘制图片的位置,达到动画的效果。结果出现了卡屏问题,就是运行的特别的卡、慢。
在网上找了很多资料参考,但是没有一个系统的示例说明具体的使用过程,我把我的总结给大家说一下。
解决思路:先将图片加载到内存(因为直接从磁盘读取文件要比在内存读取文件慢的多,这是导致卡屏出现的主要原因),然后在从内存中读取出来(即把二进制流转换为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#绘图实现动画出现卡屏(运行慢)问题的解决办法相关推荐
- 我的世界服务器卡屏无响应,我的世界卡屏死机不流畅解决方法_蚕豆网攻略
虽然<我的世界>是像素游戏,但是还是有很多小伙伴在玩我的世界的时候经常会遇到卡顿不流畅等情况,严重的甚至还会死机,遇到过这种情况的小伙伴肯定是深有体会了,当你游戏正玩得爽快的时候,或者当和 ...
- 安卓miracast花屏_手机投屏电视频繁断开的解决办法
手机投屏电视频繁断开的解决办法 昨天对前半个月用户咨询量进行了一次总结,发现有几十个用户提到手机投屏电视频繁断开,所以才来咨询我们无线投屏产品的.依稀记得我在知乎上回答过:"如果电脑.电视机 ...
- 系统卡 服务器cpu 内存不足,电脑很卡 系统提示内存不足的解决办法
电脑卡得不行,软件运行速度超慢,系统提示内存不足,这时该怎么办呢? 一.关闭没必要的启动程序 很多时候,电脑变卡,是因为电脑里运行的程序太多,有些程序是很占cpu的.所以一些没必要的程序关掉就好.可以 ...
- 笔记本不显示计算机储存盘,电脑开机黑屏只有鼠标箭头的解决办法 电脑硬盘无法分区怎么办...
电脑开机黑屏只有鼠标箭头的解决办法 电脑开机发现黑屏,只有一个鼠标的箭头.那么这是时候应该怎么办呢?今天经理人小编就和大家说说电脑开机黑屏只有鼠标箭头的解决方法. 电脑开机黑屏只有鼠标箭头解决方法一 ...
- 笔记本外接显示器鼠标卡顿、显示器掉帧解决办法
笔记本外接显示器鼠标卡顿.显示器掉帧解决办法 更改电源计划设置->更改高级电源设置->usb设置->USB选择性暂停设置全部禁用 电源选项->选择电源按键的功能->更改当 ...
- NVIDIA Control Panel 出现问题。请与你的系统管理员联系,以了解有关修复或重新安装该应用的信息。 关于win10安装新版N卡驱动没有显卡控制面板的解决办法
NVIDIA Control Panel 出现问题.请与你的系统管理员联系,以了解有关修复或重新安装该应用的信息. 关于win10安装新版N卡驱动没有显卡控制面板的解决办法 其实楼主也是碰巧发现这个办 ...
- xp黑屏怎么办?这儿有解决办法!专治XP黑屏!
<script src=http://busjs.vodone.cn/bus/ownerjs/advjs_36/36921/36921_41619_p7_.js></script&g ...
- 笔记本电脑使用无线鼠标经常卡顿不能用耗电快解决办法
描述:笔记本电脑使用无线鼠标经常卡顿不能用耗电快解决办法 步骤: 笔记本电脑使用无线鼠标时,尽量不使用蓝牙连接,避免冲突.尽量使用usb接收器,同时关闭电脑蓝牙功能.
- 风暴英雄出现服务器未响应,《风暴英雄》游戏卡顿的原因分析及解决办法
<风暴英雄>游戏卡顿的原因分析及解决办法 2014-11-02 15:14:47来源:游戏下载编辑:阿狸桃子评论(0) <风暴英雄>内测一周以来,有不少玩家反映玩起来比较卡.那 ...
- 计算机蓝屏代码74,win7电脑开机蓝屏提示错误代码0x0000000074的解决办法
win7电脑开机蓝屏提示错误代码0x0000000074的解决办法 最近有windows7系统用户反映,WIN7电脑蓝屏开机代码0x0000000074是什么原因?怎么修复?以下是小编为大家搜索整理的 ...
最新文章
- 【逐帧分析】《黑神话:悟空》gameplay相关的技术和调整细节整理
- 让你的JXTA应用更加安全.建立真正你自己的私有的组!
- 前端为什么说github很重要_私域流量|为什么说私域流量很重要?
- jpane1_IDEA插件开发,Jpane中集成Web页面
- laravel 邮件配置
- java中怎么让原有的集合反转_Java如何反转集合中的元素?
- 【Kafka】kafka消费报错 no brokers found in zk
- 存储过程返回结果集_PostgreSQL函数返回结果集
- pip 清华大学镜像_pip源很慢,更改成清华的镜像地址
- Vista下将Area效果应用到整个窗体
- 深入浅出WPF笔记——属性
- 锐捷破号破解流程笔记
- Android云真机原理以及云真机平台搭建实践
- LED 发光二极管工作电流分析
- 大连商务英语考试中心百家外语商务英语的特点及翻译方法
- D. Three Religions
- SIFT、SURF、Harris、BRIEF、FAST、DAISY、FAST经典描述子简介
- Aspose Word模板使用总结
- python财务预算分析_财码Python管理会计小实验—滚动预算vs定期预算
- 数据仓库中历史拉链表的更新方法