2013-08-05 2 views
0

사용자가 이미지를 설정할 수있는 곳을 가능한 한 사용자가 쉽게 제어 할 수있는 컨트롤을 개발 중입니다. 복사 & 붙여 넣기를 지원하므로 & 드롭을 드래그하십시오.Image/ImageSource/Interop 이미지 bytearray

나는 FileDrop의 fileformats, 된 FileContents (예를 들면 전망에서)에 대한 테스트 IDataObjects를 사용하여 작업이 부분을 가지고, 비트 맵 예를 들면 :

private void GetImageFromIDataObject(IDataObject myIDO) 
    { 
     string[] dataformats = myIDO.GetFormats(); 

     Boolean GotImage = false; 

     foreach (string df in dataformats) 
     { 
      if (df == DataFormats.FileDrop) 
      { 
       // code here 
      } 
      if (df == DataFormats.Bitmap) 
      { 
       // Source of my problem here... this gets & displays image but 
       // how do I then convert from here ? 
       ImageSource myIS = Utilities.MyImaging.ImageFromClipboardDib(); 
       ImgPerson.Source = myIS; 
      } 
     } 
    } 

ImageFromClipboard 코드는 토마스 레베의로에 대한 대답에서 참조 이 SO 질문 wpf InteropBitmap to bitmap

http://www.thomaslevesque.com/2009/02/05/wpf-paste-an-image-from-the-clipboard/

상관없이 내가 ImgPerson에 이미지를 얻을이 부분이 잘 작동 방법; 이미지가 멋지게 표시됩니다.

저장을 누르면 이미지를 bytearray로 변환하고 서버에 저장 한 WCF 서버로 보내야합니다. bytearray를 이미지로 재구성하고 폴더에 저장하십시오.

모든 형식의 드래그 & 드롭에 복사 & 붙여 넣기 이미지는 System.Windows.Media.Imaging.BitmapImage의 일부 양식입니다.

토마스의 코드를 사용하는 클립 보드를 사용하는 경우를 제외하고는 System.Windows.Media.Imaging.BitmapFrameDecode가됩니다. 나는 토마스의 코드를 사용하지 않도록 경우

는 :

BitmapSource myBS = Clipboard.GetImage(); 
ImgPerson.Source = myBS; 

을 나는 System.Windows.Interop.InteropBitmap를 얻을.

나는이 작업 방법을 알 수 없다. 그들을 bytearray로 가져 와서 재건축과 폴더 저장을 위해 WCF에 전달할 수 있습니다.

답변

0

나는이 SO 질문을 보지 못했다 믿을 수 있지만, 이것은 본질적으로 내 질문과 동일합니다 :

WPF: System.Windows.Interop.InteropBitmap to System.Drawing.Bitmap

대답의 존재 :

BitmapSource bmpSource = msg.ThumbnailSource as BitmapSource; 
MemoryStream ms = new MemoryStream(); 
BitmapEncoder encoder = new PngBitmapEncoder(); 
encoder.Frames.Add(BitmapFrame.Create(bmpSource)); 
encoder.Save(ms); 
ms.Seek(0, SeekOrigin.Begin); 


System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(ms); 

Nitesh의 대답과 비슷하지만 결정적으로 상호 작용 비트 맵을 사용합니다.

0

당신은 또한 당신의 요구 사항에 따라 JpegBitmapEncoder, BmpBitmapEncoder를 사용할 수있는 코드

public byte[] ImageToBytes(BitmapImage imgSource) 
    { 
     MemoryStream objMS = new MemoryStream();   
     PngBitmapEncoder encoder = new PngBitmapEncoder(); 
     encoder.Frames.Add(BitmapFrame.Create(imgSource)); 
     encoder.Save(objMS); 
     return objMS.GetBuffer(); 
    } 

이 조각을보십시오.

byte[] arr = ImageToBytes(ImgPerson.Source as BitmapImage); 
+0

이전에 BitmapImage myBI = ImgDriver.Source를 BitmapImage로 시도했는데 이로 인해 null이 발생했습니다. 그래서 캐스트가 작동하지 않았다. 내일까지 답변을 테스트 할 수는 없지만 두 옵션 모두 암시 적 캐스트에서 null이 계속 발생한다고 생각합니다. – andrew