2016-04-13 22 views
2

これを行う方法はありますか?D3DImageをバイト配列に変換する

オブジェクトをImageSourceにキャストしてImageに割り当てることができますが、それをバイト[]で格納できる必要があります。私が見つけたすべてのメソッドは、BitMapにキャストを使用し、ここでは動作しません。

答えて

1

ここに私が見つけた解決策があります。重要な点は、内部的に一時的なイメージを作成するためにDrawingVisualを使用することでした。

 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; 
    } 
関連する問題