我收到此错误。这是代码:
Image image;
BitmapImage BmpImg;
MemoryStream ms;
public void Convert()
{
ms = new MemoryStream();
image.Save(ms, ImageFormat.Jpeg);
BmpImg = new BitmapImage();
BmpImg.BeginInit();
BmpImg.StreamSource = new MemoryStream(ms.ToArray());
BmpImg.EndInit();
}
private void Btn_Click(object sender, RoutedEventArgs e)
{
Dispatcher.Invoke(new Action(() => { Image.Source = BmpImg; }));
}
如何将System.Drawing.Image转换为BitmapImage并在wpf上显示相同内容?
答案 0 :(得分:5)
BmpImg
是在后台线程上创建的。 您无法绑定在UI线程以外的线程上创建的Image Source DP
对象。
由于您使用Dispatcher
,我现在假设您如何在UI线程上委托内容。
所以你需要做的就是通过Dispatcher在UI线程上创建BmpImg
。
您也可以获得这样的UI调度程序 - App.Current.Dispatcher
。
或强>
正如@Clemens在评论中建议的那样,如果你在BitmapImage实例上调用Freeze()
,你可以跨线程访问它。
BmpImg.Freeze()