2014-02-20 2 views
0

Я занимаюсь распределенной игрой Sokoban, где технология .NET Remoting является обязательной.Удаленное общение не удалось найти nativeImage в пределах типа System.Drawing.Image

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

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

Поиск через Google, я обнаружил, что это старая проблема, где System.Drawing не предназначен для сериализации, поэтому необходимо обходное решение.

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

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

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

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

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

ответ

0

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

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

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; 
} 
Смежные вопросы