2014-02-20 3 views
0

.NET Remoting 기술이 필수 인 분산 Sokoban 게임을하고 있습니다.Remoting 통신은 System.Drawing.Image 형식 내에서 nativeImage를 찾을 수 없습니다.

서버 구성 요소에 게임 논리를 설정하고 클라이언트 상대방에 창 디스플레이와 키보드를 설정했습니다.

처리되지 않은 예외 : 통신을 리모팅 것은 찾을 수 없습니다 "nativeImage 클라이언트 구성 요소는 벽, 바닥과 물건을 표시하는 게임의 사진과 함께 창 양식을 작성해야합니다 곳에서 시점에서, 내가 처리되지 않은 예외가 발생 "System.Drawing.Image"형식의 필드입니다.

Google을 통해 검색 할 때, 이것은 System.Drawing이 일련 번호로 표시되지 않는 오래된 문제임을 발견했습니다. 따라서 해결 방법이 필요합니다.

내가 C 번호 (일반 프로그래밍)에 너무 아니에요 때문에, 내가 도움을 요청 :

어떻게 소프트웨어 구성 요소 사이에 PictureBox.Image 객체를 보내?

내 코드는 모두 [Serializable]MarshalByRefObject 태그입니다.

예제를 환영합니다!

미리 감사드립니다.

답변

0

약간의 연구 끝에 마침내 해결책을 얻었습니다. 모든 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; 
} 
서버 측에서