将BitmapSource转换为MemoryStream

时间:2017-02-16 11:17:52

标签: c# wpf memorystream bitmapsource

如何将BitmapSource转换为MemoryStream。虽然我尝试了一些代码:

private Stream StreamFromBitmapSource(BitmapSource writeBmp)
{
    Stream bmp;
    using (bmp = new MemoryStream())
    {                    
        BitmapEncoder enc = new BmpBitmapEncoder();
        enc.Frames.Add(BitmapFrame.Create(writeBmp));
        enc.Save(bmp);                                     
    }

   return bmp;
}

它没有给出任何错误但是在调试点之后它显示了下面列出的一些例外。

  

容量:' printStream.Capacity'抛出了类型的例外   ' System.ObjectDisposedException'长度:' printStream.Length'扔   类型为' System.ObjectDisposedException'位置:   ' printStream.Position'抛出了类型的例外   ' System.ObjectDisposedException'

2 个答案:

答案 0 :(得分:5)

using (bmp = new MemoryStream())导致bmp对象在使用块时被破坏。然后返回被销毁的bmp变量。

删除使用:

private Stream StreamFromBitmapSource(BitmapSource writeBmp)
{
    Stream bmp = new MemoryStream();

    BitmapEncoder enc = new BmpBitmapEncoder();
    enc.Frames.Add(BitmapFrame.Create(writeBmp));
    enc.Save(bmp);                                             

   return bmp;
}

答案 1 :(得分:0)

这里的问题是你在bmp内创建了using,这就是为什么它在你退回之前就被处理掉了(它一旦你离开使用就被处理掉)并解释你的例外情况接收。

private Stream StreamFromBitmapSource(BitmapSource writeBmp)
{
    Stream bmp= new MemoryStream();
    using (enc = new BmpBitmapEncoder())
    {                    
        enc.Frames.Add(BitmapFrame.Create(writeBmp));
        enc.Save(bmp);                                     
    }

   return bmp;
}