2010-07-13 3 views
2

WPF WriteableBitmap 개체를 System.Drawing.Image로 변환하려면 어떻게해야합니까?WPF/WinForms/GDI interop : WriteableBitmap을 System.Drawing.Image로 변환 하시겠습니까?

내 WPF 클라이언트 응용 프로그램은 비트 맵 데이터를 웹 서비스로 보내고 웹 서비스는 그 끝에 System.Drawing.Image를 구성해야합니다.

// WPF side: 

WriteableBitmap bitmap = ...; 
int width = bitmap.PixelWidth; 
int height = bitmap.PixelHeight; 
int[] pixels = bitmap.Pixels; 

myWebService.CreateBitmap(width, height, pixels); 

그러나 웹 서비스의 끝

, 나는 System.Drawing을 만드는 방법을 모르는 :

는 내가하는 WriteableBitmap의 데이터를 얻을 웹 서비스를 통해 정보를 보낼 수 있습니다 알고 이 데이터로부터 이미지.

// Web service side: 

public void CreateBitmap(int[] wpfBitmapPixels, int width, int height) 
{ 
    System.Drawing.Bitmap bitmap = ? // How can I create this? 
} 

답변

3

이 블로그 post은 jpeg 이미지로 WriteableBitmap을 인코딩하는 방법을 보여줍니다. 그게 도움이 될까요?

  1. 는, 원시 데이터에 대한 정확한 크기
  2. 으로 반복으로 System.Drawing.Bitmap를 만들 시스템에 원시 데이터를 변환 : 당신이 할 수

    당신이 정말로 원시 이미지 데이터 (픽셀)를 전송하려면

    . Drawing.Color (예를 통해 Color.FromArgb()을 내가 확실히 최초의 솔루션 (블로그 게시물에 설명 된)을 선호하는 것 SetPixel()

를 통해 새로 생성 된 이미지의 각 픽셀의 색상을 설정합니다.

+0

감사합니다. 나는 놀고 이것의 무엇이든이 도움이되는지 볼 것이다. –

+0

좋습니다. 도와 주셔서 감사합니다. –

3

비트 맵 데이터를 압축하지 않은 경우이 System.Drawing.Bitmap 생성자 (Bitmap(Int32, Int32, Int32, PixelFormat, IntPtr))를 사용할 수 있습니다.

비트 맵이 jpg 또는 png로 인코딩 된 경우 비트 맵 데이터에서 MemoryStream을 만들고 Bitmap(Stream) 생성자와 함께 사용하십시오.

편집 :

당신이 웹 서비스에 비트 맵을 보내는 때문에

, 나는 당신이 시작을 인코딩하는 것이 좋습니다. System.Windows.Media.Imaging 네임 스페이스에는 여러 인코더가 있습니다. 단순히 수신 측에

WriteableBitmap bitmap = ...; 
    var stream = new MemoryStream();    
    var encoder = new JpegBitmapEncoder(); 
    encoder.Frames.Add(BitmapFrame.Create(bitmap)); 
    encoder.Save(stream); 
    byte[] buffer = stream.GetBuffer(); 
    // Send the buffer to the web service 

: : 도움이

var bitmap = new System.Drawing.Bitmap(new MemoryStream(buffer)); 

희망 예를 들어.

+0

내 데이터는 단순히 int []를 반환하는 wpfWriteableBitmap.Pixels입니다 –

+0

비트 맵을 보내기 전에 인코딩하는 방법과 웹 서비스에서 디코딩하는 방법에 대한 예제로 답변을 업데이트했습니다. –

0

질문은 WPF 용이며 PixelsWriteableBitmap의 속성으로 보이지 않습니다. 여기에있는 답변 중 일부는 SilverLight 기사를 가리키며, 이것이 WPF와 SilverLight의 차이 일 수 있습니다.