2015-03-31 125 views
3

有没有办法将ImageSource对象转换为字节数组? 我有一个ImageSource对象绑定到一个WPF窗口,我可以从数据库转换一个字节数组并将其转换为ImageSource,但我不能以相反的方式做到这一点。将System.Windows.Media.ImageSource转换为ByteArray

Thx提前。

编辑:我试图将ImageSource转换为BitmapImage,但得到一个空对象。

+0

检查:

所以,如果您的ImageSource实际上是一个的BitmapSource(而不是DrawingImage或D3DImage),下面的方法通过使用指定的BitmapEncoder(如PngBitmapEncoder)将其转换为一个字节数组该属性FileBytes – 2015-03-31 23:43:57

+0

嗨,没有这样的属性。 – 2015-03-31 23:49:31

+0

您现在尝试使用的代码是什么? – 2015-04-01 01:31:18

回答

7

即使你的ImageSource不是一个BitmapImage的,你还可以成功地将其转换为BitmapSource,这是基类的所有WPF位图类,如BitmapImage的,BitmapFrame,WriteableBitmap的,RenderTargetBitmap等(见here)。

public byte[] ImageSourceToBytes(BitmapEncoder encoder, ImageSource imageSource) 
{ 
    byte[] bytes = null; 
    var bitmapSource = imageSource as BitmapSource; 

    if (bitmapSource != null) 
    { 
     encoder.Frames.Add(BitmapFrame.Create(bitmapSource)); 

     using (var stream = new MemoryStream()) 
     { 
      encoder.Save(stream); 
      bytes = stream.ToArray(); 
     } 
    } 

    return bytes; 
} 
+0

Thx它工作正常:)。 – 2015-04-01 09:53:17

+0

调用此函数时,我应该在编码器字段中传递什么信息。 – SANDEEP 2016-02-03 14:53:23

+0

@SANDEEP正如答案中提到的:“例如PngBitmapEncoder”。 – Clemens 2016-02-03 14:58:40