用C#绘图实现动画出现卡屏(运行慢)问题的解决办法

原文:用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#绘图实现动画出现卡屏(运行慢)问题的解决办法,布布扣,bubuko.com

时间: 2024-10-10 17:50:44

用C#绘图实现动画出现卡屏(运行慢)问题的解决办法的相关文章

Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法(转)

转载: Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法   首先感谢博主分享,本文作为学习记录 惊鸿一瞥 微信的启动页,相信大家都不陌生. 不知道大家有没有发现一个现象,微信每次启动的时候,是直接进入这个启动页面. 我的意思是,很多应用,往往会先白屏停顿一下后再进入启动页面(Splash).为了印证这一点,我把手机上所有的App都点了一遍.选几个例子 如下图: 微信:  斗鱼:  斗鱼和微信是直接进入了,他们的Splash页面. 知乎:  B站:  知乎和B站要先

win10安装VirtualBox以后系统重启黑屏,无法进入的解决办法

win10安装VirtualBox以后系统重启黑屏,无法进入的解决办法: 安全模式或者winPE删除C:\Windows\System32\drivers目录下的 VBoxDrv.sys.VBoxNetAdp.sys.VBoxNetFlt.sys.VBoxUSBMon.sys 为了验证此方法的有效性,我又重新安装了一遍,证明此方法有效 希望能帮上需要的人

老旧电脑笔记本安装XP过程中突然报错黑屏关机无法安装的解决办法

由于老旧电脑或笔记本年限已到,在安装XP系统过程中会由于显卡没有驱动而无法正常工作,VGA工作模式会将所有运行压力转移到CPU,此时也就是为什么我们在安装过程中风扇声音突然变大(CPU温度快速升高),老旧电脑由于主板CPU等电子元件存在老化问题,特别是电阻元件,温度一旦上升,其阻值参数将发生巨大变化,在达到某种条件时,要么CPU运行出错(此为报错原因),要么主板自我保护直接关机(此为突然黑屏关机原因). 理清楚上面的问题原因,解决办法如下: 1. 清理电脑硬件灰尘,排除硬件问题,同时确保内存,硬

刷电信版s710d卡在htc开机画面的解决办法

在用各种刷机精灵刷机时,刷完后总是卡在开机画面,网上说的双清也做过了,可还是不行,千辛万苦试了一下的办法才可以,记录一下. 所有的行货官解机刷room之后,都要单刷一次boot.img,否则都会卡在开机第一屏.懒得打字,从baidu里面copy的:第一步下载adb  adb.rar 之后解压到D盘.(http://dl.dbank.com/c0arj6hafi#)第二步把你下载的ROM包解压,提取里面的BOOT.IMG文件,放到adb文件夹里.第三步,重启手机,进入fastboot模式(就是按住

SD卡创建文件夹失败,解决办法及文件缓存

1.相关代码: 添加权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> /** 获取SD卡路径 **/ private static String getSDPath() { St

电脑蓝屏问题引起原因及解决办法

蓝屏故障 (1)STOP消息0X0000000A故障 引起原因:一般是由于新安装了什么设备,而设备的驱动程序使用了不正常的内存地址,这种情况下我们需要确保硬件的驱动程序与系统要兼容. 解决方法:去除新安装的设备,更换硬件或系统. (2)STOP消息0X00000023或者0X00000024故障 引起原因:通常原因是计算机长时间使用,出现严重的驱动器碎片或者第三方镜像软件或者一些杀毒软件出错引起. 解决方法:运行chkdsk /f命令检修磁盘驱动器,然后重启,禁用一些防病毒软件或者备份程序. (

Exchange服务器系统蓝屏及脱域后解决办法

在工作中有时会出现Exchange服务器在意外重启后蓝屏并且无法直接恢复的情况,通过灾难恢复方式处理之后稳定运行一个月该服务器又出现脱域的现象.在此我总结处理问题的过程及思路,希望能对同行有所帮助. 环境: 操作系统:Windows Server 2008 R2 sp1 Exchange版本:Exchange2010sp3 CU8 架构:3台CAS+4台MBX 现象:CAS服务器中的一台(用CAS2表示)系统在意外重启后无法进入系统.测试同样无法进入安全模式和最后一次正确配置. 解决过程: 确认

大批量win7蓝屏报错qjs***.sys解决办法

公司最近发现有4-5台电脑pc蓝屏,蓝屏错误代码都一样,均为qjs***.sys蓝屏目录位置尝试用各种杀毒软件查杀,如360.金山毒霸.腾讯管家都无法查杀,后找到腾讯出了一款专杀,放出专杀下载链接:http://dlied6.qq.com/invc/xfspeed/tools/SystemAidBoxPro_2018_7_18.7z查杀效果,需要重启继续查杀,方可使用. 原文地址:http://blog.51cto.com/12185273/2148741

node-sass 安装卡在 node scripts/install.js 解决办法

Cannot download "https://github.com/sass/node-sass/releases/download/v3.4.2/linux-x64-14_binding.node": connect ETIMEDOUT 总的来说就是两种方法解决: SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ npm install 或者在 ~/.npmrc 里添加下面这行(参考),保存后再 npm inst