WPF-Bild wird nicht neu gezeichnet

9

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:

%Vor%

und binden Sie direkt das TestImage auf meinem Image
Anzeigen

%Vor%

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

    
Epitouille 05.06.2015, 09:29
quelle

3 Antworten

0

Ich habe endlich eine Lösung gefunden. Ich benutze eine andere Methode, um meine Bitmap zu konvertieren (wahrscheinlich schneller)

%Vor%     
Epitouille 09.06.2015, 08:04
quelle
2

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%     
James Harcourt 05.06.2015 11:38
quelle
0

Ü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.

    
Erno de Weerd 05.06.2015 11:48
quelle

Tags und Links