2014-02-20 71 views
0

找到nativeImage我正在做一個分佈式的推箱子游戲,其中.NET Remoting技術是強制性的。遠程處理通信無法在類型System.Drawing.Image

我在服務器組件中設置了遊戲的邏輯,並在客戶端對應部分中設置了窗口顯示和鍵盤控制。在離客戶端組件必須填滿窗口形式顯示的牆壁,地板和東西的遊戲畫面來看,我收到一個未處理的異常:

未處理的異常:遠程處理通信找不到「nativeImage 「System.Drawing.Image」類型中的「字段。

通過谷歌搜索,我發現這是一個老問題,System.Drawing不打算被序列化,所以需要一個解決方法。

因爲我不是太成C#(和一般的編程),我尋求幫助:

如何將軟件組件之間發送PictureBox.Image對象?

我所有的代碼都有[Serializable]MarshalByRefObject標籤。

歡迎舉例!

預先感謝您。

回答

0

經過一番研究,我終於找到了解決辦法。 所有要做的就是將所有的圖像對象轉換爲字符串,所以它可以是可序列化的。

在服務器端:

public Bitmap img; 

public String ImageToString(Bitmap img) 
{ 
    byte[] byteArray = new byte[0]; 
    using (MemoryStream stream = new MemoryStream()) 
    { 
     img.Save(stream, System.Drawing.Imaging.ImageFormat.Png); 
     stream.Close(); 
     byteArray = stream.ToArray(); 
    } 
    return Convert.ToBase64String(byteArray); 
} 

在客戶端:

public Bitmap img; 

public Bitmap StringToImage(string imageString) 
{ 
    if (imageString == null) throw new ArgumentNullException("imageString"); 
    byte[] array = Convert.FromBase64String(imageString); 
    Bitmap image = (Bitmap)Bitmap.FromStream(new MemoryStream(array)); 
    return image; 
}