При удаленном взаимодействии не удалось найти 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;
}