2016-04-13 19 views

cevap

1

İşte bulduğum bir çözümdür. Anahtar, geçici görüntüyü dahili olarak oluşturmak için DrawingVisual'ın kullanımıydı.

 public static byte[] ImageToBytes(ImageSource imageSource) 
    { 
     var bitmapSource = imageSource as BitmapSource; 
     if (bitmapSource == null) 
     { 
      var width = (int)imageSource.Width; 
      var height = (int)imageSource.Height; 
      var dv = new DrawingVisual(); 
      using (var dc = dv.RenderOpen()) 
      { 
       dc.DrawImage(imageSource, new Rect(0, 0, width, height)); 
      } 
      var rtb = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32); 
      rtb.Render(dv); 
      bitmapSource = BitmapFrame.Create(rtb); 
     } 

     byte[] data; 
     var encoder = new PngBitmapEncoder(); 
     encoder.Frames.Add(BitmapFrame.Create(bitmapSource)); 
     using (var ms = new MemoryStream()) 
     { 
      encoder.Save(ms); 
      data = ms.ToArray(); 
     } 
     return data; 
    } 
İlgili konular