【发布时间】:2013-10-26 20:04:45
【问题描述】:
这段代码有点问题:
private Bitmap WriteableBitmapToBitmap(WriteableBitmap wb)
{
BitmapEncoder encoder = new BmpBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(wb));
using (MemoryStream ms = new MemoryStream())
{
encoder.Save(ms);
Bitmap b = new Bitmap(ms);
return b;
}
}
如果我启动此代码,WPF UI 会冻结。我只想将 WriteableBitmap 转换为 Bitmap,以便可以将其用于 Emgu 图片处理。 WriteableBitmap 是从 Kinect 的深度数据创建的。我是编程新手,所以肯定有更好的方法,但我希望这也能奏效。
任何人都可以帮助我编写该代码吗?
【问题讨论】:
-
如果 UI 卡住了这并不意味着代码错误,这意味着您不应该在 UI 线程中执行它;您应该在非 UI 线程中进行长时间运行的 UI 工作。关于如何将工作卸载到非 UI 线程的参考文献有上百万条。
-
好的,谢谢,我去看看。
-
冻结不会是我所期望的典型结果。但是代码肯定是错误的,只要 Bitmap 对象是生命,您就不能处置 MemoryStream。它需要稍后能够访问流。删除 using 语句。
-
Servy 是对的,这是 UI 线程的问题,我用异步解决方案解决了它,现在它可以工作了。谢谢。
标签: c# kinect freeze memorystream