Utilisation de BitmapSource en tant que source d'image dans WPF
-
19-08-2019 - |
Question
J'essaie de mettre à jour un objet Image (_browserScreenshot ci-dessous) en XAML en modifiant l'image source chaque fois qu'un événement détermine que la source doit être mise à jour. En ce moment, j'ai ceci:
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;
}
Ensuite, j'ai un gestionnaire d'événements, comme indiqué:
app.BitmapSource.Changed += new EventHandler(BitmapSource_Changed);
void BitmapSource_Changed(object sender, EventArgs e)
{
Window1._browserScreenshot.Source = app.GetScreen();
}
Désormais, chaque fois que cet événement se déclenche, une nouvelle capture d'écran est prise et la source du contrôle Image (appelé _browserScreenshot ici) doit être mise à jour. Je continue à avoir une erreur sur la modification de la propriété IsFrozen, mais je n'arrive pas à comprendre comment changer cela correctement et avoir ce travail comme je le souhaite. Merci d'avance à tous.
La solution
Il est fort probable que vous souhaitiez geler l'objet. Le problème que vous rencontrez est que vous voulez créer un BitmapSource complètement nouveau à chaque fois et laisser le récupérateur de place jeter l’ancienne image.
Autres conseils
La ligne suivante s'est avérée être mon problème:
bitmapSource.Freeze ();