【问题标题】:Convert BitmapSource to MemoryStream将 BitmapSource 转换为 MemoryStream
【发布时间】:2017-02-16 11:17:51
【问题描述】:

如何将 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' 引发类型异常 'System.ObjectDisposedException' 长度:'printStream.Length' 抛出 'System.ObjectDisposedException' 类型的异常位置: 'printStream.Position' 引发类型异常 'System.ObjectDisposedException'

【问题讨论】:

  • 请看What should I do when someone answers my question? 此外,在您将编码位图写入 MemoryStream 之后,您打算如何处理它?您可能只需要生成的缓冲区,即字节数组吗?
  • 谢谢!克莱门斯,我对发布的答案投了票。 :),我希望我的颜色帧可以保存在内存缓冲区中,以便与face recognition API 轻松使用。所以,我将我的结果返回到Stream,我的face recognition API 将使用它。
  • 你也应该接受一个答案。您现在遇到的问题是另一个问题。

标签: c# wpf memorystream bitmapsource


【解决方案1】:

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;
}

【讨论】:

  • ReadTimeout = 'imgStream.ReadTimeout' threw an exception of type 'System.InvalidOperationException' WriteTimeout = 'imgStream.WriteTimeout' threw an exception of type 'System.InvalidOperationException' 感谢您帮助我。但是现在我遇到了这两个例外的麻烦
【解决方案2】:

这里的问题是您在using 中创建bmp,这就是为什么它在您返回它之前已被处置(一旦您离开使用它就被处置)并解释了您收到的异常。

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

   return bmp;
}

【讨论】:

  • ReadTimeout = 'imgStream.ReadTimeout' threw an exception of type 'System.InvalidOperationException' WriteTimeout = 'imgStream.WriteTimeout' threw an exception of type 'System.InvalidOperationException' 感谢您帮助我。但是现在我遇到了这两个例外的麻烦
  • 不,这没有帮助,我使用 BitmapSource 而不是 Bitmap
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
相关资源
最近更新 更多