在WPF中使用BitmapSource作为图像源

时间:2009-03-16 20:37:52

标签: wpf event-handling bitmap freeze bitmapsource

我正在尝试通过在每次事件确定源需要更新时更改源图像来更新XAML中的图像(下面的_browserScreenshot)对象。现在我有这个:

public BitmapSource GetScreen()
{
    Bitmap bitmap = new Bitmap(app.Browser.ClientRectangle.Width, app.Browser.ClientRectangle.Height);
    app.Browser.DrawToBitmap(bitmap, app.Browser.Bounds);

    BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());

    bitmapSource.Freeze();

    bitmap.Dispose();
    bitmap = null;
    return bitmapSource;
}

然后我有一个事件处理程序如图所示:

app.BitmapSource.Changed += new EventHandler(BitmapSource_Changed);

void BitmapSource_Changed(object sender, EventArgs e)
{
    Window1._browserScreenshot.Source = app.GetScreen();
}

现在每当此事件触发时,都会拍摄新的屏幕截图,并且应该更新图像的来源(此处称为_browserScreenshot)控件。我一直收到关于更改IsFrozen属性的错误,但是我无法弄清楚如何正确地更改它并按照我想要的方式工作。在此先感谢大家。

2 个答案:

答案 0 :(得分:0)

以下一行证明是我的问题:

bitmapSource.Freeze();

答案 1 :(得分:0)

您可能希望冻结对象。您遇到的问题是您希望每次都创建一个全新的BitmapSource,并让垃圾收集器处理旧图像。