程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 用C#繪圖實現動畫出現卡屏(運行慢)問題的解決辦法

用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); 就是每次都從磁盤讀取圖片,速度慢,所以會出現卡屏現象。   希望對大家有幫助,也希望大家提出更好的解決辦法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved