1

我正在做一个分布式推箱子游戏,其中 .NET Remoting 技术是强制性的。

我在服务器组件中设置游戏的逻辑,在客户端对应的窗口显示和键盘控制。在客户端组件必须用显示墙壁、地板和其他东西的游戏图片填充窗口表单时,我收到一个未处理的异常:

未处理的异常:远程通信在“System.Drawing.Image”类型中找不到“nativeImage”字段。

通过谷歌搜索,我发现这是一个System.Drawing不打算序列化的老问题,因此需要一种解决方法。

由于我不太喜欢 C#(和一般编程),我寻求帮助:

如何PictureBox.Image在软件组件之间发送对象?

[Serializable]我所有的代码都有MarshalByRefObject标签。

欢迎举例!

先感谢您。

4

1 回答 1

1

After some research, i finally got the solution. All to do is to convert all Image objects into Strings, so it can be serializable.

At the server side:

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

At the client side:

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;
}
于 2014-02-21T13:05:36.277 回答