将 BitmapSource 转换为 MemoryStream

Convert BitmapSource to MemoryStream

如何将 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;
}

它没有给出任何错误,但在放置调试点后它显示了下面列出的一些异常。

Capacity: 'printStream.Capacity' threw an exception of type 'System.ObjectDisposedException' Length: 'printStream.Length' threw an exception of type 'System.ObjectDisposedException' Position: 'printStream.Position' threw an exception of type 'System.ObjectDisposedException'

这里的问题是您正在 using 中创建 bmp,这就是为什么它在您 return 之前就被处理掉了(一旦您离开使用它就会被处理掉)这解释了您收到的例外情况。

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

   return bmp;
}

using (bmp = new MemoryStream()) 导致 bmp 对象在使用块结束时被销毁。而你 return 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;
}