При удаленном взаимодействии не удалось найти nativeImage в типе System.Drawing.Image

Я занимаюсь распределенной игрой Sokoban, где технология.NET Remoting обязательна.

Я настроил логику игры в серверном компоненте, а также отображение окна и управление клавиатурой в клиентской копии. В тот момент, когда клиентский компонент должен заполнить форму окна с изображением игры, отображающей стены, пол и прочее, я получаю необработанное исключение:

Необработанное исключение: удаленное взаимодействие не может найти поле "nativeImage" в типе "System.Drawing.Image".

Ища через Google, я обнаружил, что это старая проблема, где System.Drawing не предназначен для сериализации, поэтому требуется обходной путь.

Так как я не слишком увлекаюсь C# (и программированием в целом), я прошу помощи:

Как отправить PictureBox.Image объекты между программными компонентами?

Весь мой код имеет [Serializable] а также MarshalByRefObject теги.

Примеры приветствуются!

Заранее спасибо.

1 ответ

После некоторого исследования я наконец нашел решение. Все, что нужно сделать, - это преобразовать все объекты Image в строки, чтобы они могли быть сериализуемыми.

На стороне сервера:

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;
}
Другие вопросы по тегам