用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);

就是每次都从磁盘读取图片,速度慢,所以会出现卡屏现象。

希望对大家有帮助,也希望大家提出更好的解决办法。

时间: 2024-09-14 00:55:40

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

电脑很卡 系统提示内存不足的解决办法

电脑卡得不行,软件运行速度超慢,系统提示内存不足,这时该怎么办呢? 我经历了惨痛的教训后,终于痛下前非,整理出了一些优化加速电脑,缓解内存不足的相关措施,仅供参考. 希望能够帮到大家吧- 关闭没必要的启动程序 很多时候,电脑变卡,是因为电脑里运行的程序太多,有些程序是很占cpu 的. 所以一些没必要的程序关掉就好. 可以在开始 ,搜索程序和文件 里面输入msconfig ,然后打开这个程序. 这样就打开了系统配置 . 选择启动 ,把里面所有你想关闭的程序都打上勾,然后点确定 . 没必要的启动程序

Mac卡顿的11种有效解决办法

1.关闭无用动画 对于旧款Mac来说,Mac OS中炫酷的动画效果会为硬件带来较大的负担,因此关闭一些对实际使用影响不大的动画是很有必要的.比如在系统偏好设置的Dock选项中关闭自动隐藏选项,或者最小化窗口时使用缩放效果,而不是更加炫酷的神奇效果. 2.开启减少透明度   Mac OS颜值高的重要原因就是很多元素采取了透明设计,比如在Dock栏下方仍然可以看到其他窗口,但这对于图形处理能力不足的老款Mac来说其实反倒成了累赘,所以你可以选择在辅助功能的显示器选项中选择减少透明度以提高系统流畅度.

幽浮2红屏卡住原因分析与解决办法

幽浮2红屏怎么办 <幽浮2>红屏解决方法: 首先在游戏目录中的"XCom2"文件夹中找到"XCom2.exe"文件. 右键点击,选择[发送到--]-[桌面快捷方式] 回到[桌面]右键快捷方式,点击[属性],在快捷方式选项卡下,找到目标,在后面加上" -noRedScreens -review"注意空格,如下图 输入指令前 输入指令后 幽浮2红屏卡住怎么办 花几分钟下载steam游戏平台安装注册账号登陆平台运行游戏库添加幽浮2游戏运行即

电脑开机蓝屏停机码0x0000006b的解决办法

  电脑出错,给一个蓝屏,如果蓝屏的截图中不能给出导致蓝屏的文件名,那么还是需要用户自己回忆蓝屏前做了什么?应该还是有蛛丝马迹可以顺藤摸瓜的! 1.先来看一下这张蓝屏截图说了些什么? A problem has been detected and Windows has been shut down to prevent damage to your computer. 一个问题已经被发现和窗户已经关闭,以防止损坏您的计算机. 点评:病毒.木马.不良程序,甚至于大名鼎鼎的程序都会是蓝屏的罪魁祸首

手机黑屏是怎么回事?手机黑屏开不了机解决办法

手机用的时间长了,有时候会出现黑屏,这是为什么呢?手机黑屏主要有两个原因,一个是手机内部出了问题,还一个是认为造成.想修好需先找对问题所在,掌握下面这些技巧,必要时不会在慌张. 1.内存问题 手机在存储东西过多时,不仅会大大减慢运行速度,而且在运行程序过程中很容易黑屏,然后自动退出程序.手机内存被占用80%时,可能出现死机或黑屏的情况. 出现这种情况好办,长按手机的home键,调出最近运行的程序退出即可.平时在使用过程中也的注意,卸载不常用的软件,养成不使用即退出程序的好习惯. 2.接触问题  

Win10玩lol卡怎么办 Win10玩英雄联盟卡解决办法

一.用腾讯TGP登录/登陆lol英雄联盟     首先登陆客户端自带TP是无法运行的,如果用TGP官方助手绕过它到游戏大厅,把"某盘:Program Files腾讯游戏英雄联盟Game "中的游戏主程序"League of Legends.exe"替换为不含TP的文件就不会蓝屏. 二.重启电脑,清除下电脑垃圾 建议设置下电脑虚拟内存,设置大一点,重启生效,再清除电脑垃圾. 三.还是不能玩,建议更新显卡驱动程序 百度搜索"驱动精灵官网",去官网下载

手机SIM卡读不了怎么解决 手机SIM卡读不了5种解决办法

1.确认是否是SIM问题 在经过手机重启,卡重新插放等步骤无用后,找一部手机确认是否SIM已坏,如过在其他手机上依然无反应就是卡坏了,需从新补卡. 2.确认是否手机故障 将其他手机卡插入手机,看是否能读取SIM.如不能,有可能是卡槽坏了,也可能是手机系统出现问题. 先别急着送往维修店,试试下面方法,看是否能解决. 3.升级手机系统 前往设置,查看手机系统是否为最新版本,尝试先升级版本试试.无效请往下看. 4.恢复出厂设置 手机读取不了SIM还有一种是基带(一个专门负责通讯的BIOS)出了问题.在

Win7电脑发生蓝屏报错“0x0000040”如何解决

  Win7电脑发生蓝屏报错"0x0000040"的解决办法: 1.按Win+R打开运行,输入"ncpa.cpl"按回车键或确定; 2.打开网络连接窗口,在窗口找到网络连接并右键菜单中选择"删除"选项,如果删除选项时灰色,可以尝试禁用网络再启用; 3.如果连接的是无线网络,那么可以禁用有线的网卡设备防止冲突,打开开始--控制面板; 4.进入系统和安全--系统--设备管理器; 5.在设备管理器窗口中展开"网络适配器",选择有线网

Win8出现蓝屏故障代码0x00000019怎么解决

  Win8系统下出现蓝屏故障代码0x00000019的解决办法. 方法/步骤 1.下载一个PE微系统,这是安装系统.维护电脑的必备工具,里面有修复引导的小工具. 2.除此之外,这个蓝屏代码还有可能是硬盘.数据线等硬件的异常引起的. 3.详情可以在开始→运行中输入:EventVwr.msc,回车后打开事件查看器,注意检查其中的系统日志和应用程序日志中标明错误的项. 4.之前,务必点选系统失败记录在案选项,否则蓝屏不能记录蓝屏事件(可能会被优化掉):控制面板→系统→高级→启动和故障恢复→系统失败→