将BitmapSource转换为MemoryStream

5

如何将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' 的异常。 Length: 'printStream.Length' 引发了类型为 'System.ObjectDisposedException' 的异常。 Position: 'printStream.Position' 引发了类型为 'System.ObjectDisposedException' 的异常。


请查看当有人回答我的问题时我该怎么办?除此之外,你打算在将编码的位图写入MemoryStream后做什么?你可能只需要结果缓冲区,即字节数组吗? - Clemens
谢谢!Clemens,我已经投票给了发布的答案。 :),我希望我的彩色帧能够保存在内存缓冲区中,以便与“人脸识别API”轻松使用。因此,我将我的结果返回到一个“流”中,这是我的“人脸识别API”将要使用的。 - Aarti Dhiman
1
你也应该接受一个答案。你现在遇到的问题是一个不同的问题。 - Clemens
2个回答

8

using (bmp = new MemoryStream())会导致对象在结束使用块时被销毁。而你返回的bmp变量已经被销毁。

移除using:

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' 抛出了一个 'System.InvalidOperationException' 类型的异常 WriteTimeout = 'imgStream.WriteTimeout' 抛出了一个 'System.InvalidOperationException' 类型的异常 感谢您的帮助。但现在我遇到了这两个异常的问题。 - Aarti Dhiman

0
这里的问题在于你正在一个 using 中创建 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;
}

ReadTimeout = 'imgStream.ReadTimeout' 抛出了一个 'System.InvalidOperationException' 类型的异常 WriteTimeout = 'imgStream.WriteTimeout' 抛出了一个 'System.InvalidOperationException' 类型的异常 感谢您的帮助。但现在我遇到了这两个异常的问题。 - Aarti Dhiman
可能可以帮忙解决这个问题:http://stackoverflow.com/questions/28172110/readtimeout-exception-with-memorystream - moondaisy
不是的,这样并没有什么帮助。我正在使用BitmapSource而非Bitmap - Aarti Dhiman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接