2010-04-23 16 views
9

Es gibt eine einfache MSDN example über WriteableBitmap.Wpf: Warum wird WriteableBitmap langsamer?

Es zeigt, wie eine Freihandlinie mit dem Cursor gezeichnet wird, indem nur ein Pixel aktualisiert wird, wenn die Maus gedrückt wird und über eine WPF-Bildsteuerung bewegt wird.

writeableBitmap.Lock(); 
(...set the writeableBitmap.BackBuffers pixel value...) 
writeableBitmap.AddDirtyRect(new Int32Rect(column, row, 1, 1)); 
writeableBitmap.Unlock(); 

Jetzt versuche ich, das folgende Verhalten zu verstehen, wenn Sie den Mauszeiger sehr schnell bewegen:

Wenn das Bild/Bitmap-Größe relativ klein ist z.B. 800: 600 Pixel, dann ist das zuletzt gezeichnete Pixel immer mit der Mauszeigerposition "synchronisiert", d. H. Es gibt keine Verzögerung, sehr schnelle Reaktion bei Mausbewegungen.

Aber wenn die Bitmap z. 1300: 1050 Pixel, man merkt eine Verzögerung, die zuletzt gezeichneten Pixel erscheinen immer etwas verzögert hinter dem bewegten Mauszeiger.

So wie in beiden Fällen nur ein Pixel mit "AddDirtyRect" aktualisiert wird, sollte die Reaktionsgeschwindigkeit unabhängig von der Bitmap-Größe sein !? Aber es scheint, dass Writablebitmap langsamer wird, wenn die Größe größer wird.

Oder wird die gesamte Bitmap irgendwie auf das Grafikgerät bei jedem Aufruf von writeableBitmap.Unlock(); übertragen, und nicht nur der Rechteckbereich, der in der AddDirtyRect Methode spezifiziert ist?

fritz

Antwort

4

ein Fehler in Writeablebitmap für WPF in .Net Es ist 3,5, die jeden Anruf AddDirtyRect bewirkt, dass das gesamte Bild entkräften, nicht nur den rechteckigen Bereich.

Es soll in .Net 4,0

http://social.msdn.microsoft.com/Forums/en-US/wpfprerelease/thread/1b84e451-9698-431f-9c51-078825a729b5

+0

Aber ich sehe, dass jemand in diesem Thread immer noch Perf Probs erlebt, also hat jemand wirklich bestätigt, dass es behoben ist? –

+0

Ab sofort scheint WriteableBitmap noch Leistungsprobleme zu haben. Ich benutze AddDirtyRect wie fritz, um nur die Pixel zu ändern, die geändert werden müssen, aber je größer das Bild, desto langsamer wird es. Ich benutze .NET 4.6, übrigens: /. –

4

In .Net 4, die beschreibbar Bitmap entkräftet noch die ganze Region, egal wo Sie ein schmutziges rect hinzufügen Siehe fixiert wurden. Sie können dies mithilfe von Perforator, einem Teil des Windows Performance Toolkit, das mit dem Windows SDK v7.1 geliefert wird, bestätigen.

Dies ist ein wichtiger Leistungsfehler.

Verwandte Themen