Mit WPF und MVVM versuche ich Kamerabilder in einem Image
anzuzeigen.
Jede Frame-Kamera hat einen Callback namens:
Ansichtsmodell
%Vor%In jedem Frame aktualisiere ich die Variable _bmpImage:
ViewModel
%Vor% Um Bitmap
in BitmapImage
zu konvertieren, verwende ich einen Konverter:
Konverter
%Vor%Finnaly an meine Sicht binden:
%Vor% Es ist gut, die erste 15 Sekunde, aber nach dieser Verzögerung: mein Image
wird weiß. Im Konverter ist image
niemals null
, also funktioniert die Kamera gut. Das Problem ist die Komponente Image
stop repainting.
Wenn Image
weiß ist, kann ich das Fenster verkleinern oder verschieben und das Bild wird gut, weil Image
neu gezeichnet wird.
Es gibt etwas, was ich falsch mache?
Es gibt eine Möglichkeit, Image
neu streichen zu erzwingen?
Warum Image
hört auf zu streichen?
Danke
EDIT1:
Nach einer Überprüfung, wenn das Bild weiß wird, frieren alle ein (so dass meine Schaltfläche nicht anklickbar ist, bis ich die Größe ändere oder das Fenster verschiebe)
EDIT2
Als Dennis in dem Kommentar mich anregte, versuchte ich die Konvertierung in meinem ViewModel:
Dafür füge ich eine Eigenschaft hinzu, die das konvertierte Bild darstellt:
%Vor% Und ich habe _bmpImage
direkt in OnNewFrame
konvertiert:
und binden Sie direkt das TestImage
auf meinem Image
Anzeigen
Und mit diesem Code habe ich die Ausnahme:
%Vor%EDIT 3
Ich habe Ihre Bemerkungen berücksichtigt und es ist mein neuer Code:
%Vor% Ich habe die gleiche Ausnahme auf RaisePropertyChanged("TestImage");
Bitte beachten Sie, dass Edit2 und Edit3 ein Test sind und nicht auf meine ursprüngliche Frage antworten
Entschuldigung für den langen Post
Ich habe endlich eine Lösung gefunden. Ich benutze eine andere Methode, um meine Bitmap zu konvertieren (wahrscheinlich schneller)
%Vor%Ich wette, Ihre OnNewFrame-Methode wird nicht im UI-Thread ausgeführt.
Ändern Sie in Ihrem Code diese Zeile so, dass sie auf dem UI-Thread buy ausgeführt wird und Invoke oder BeginInvoke für die Dispatcher-Eigenschaft Ihres Fensters / Steuerelements aufruft:
%Vor%Überprüfen Sie den Speicherverbrauch der Anwendung.
Wenn die Bitmaps viel Speicher belegen und die Anwendung die Bilder und Puffer nicht entsorgt
%Vor%Die Anwendung könnte ihre Zeit damit verbringen, Müll zu sammeln, anstatt die Benutzeroberfläche zu aktualisieren.