hört auf zu flackern

8

Ich habe ein altes Programm geschrieben in Borland Pascal und in Delphi, wenn ich die Form1.Canvas.LineTo und MoveTo Funktionen verwende, bekomme ich einen flackernden Effekt. Kann mir jemand sagen, wie man das Flackern los wird?

Danke

    
Remus Rigo 23.12.2009, 18:24
quelle

4 Antworten

13

Ein allgemeines Verfahren zum Reduzieren von Flimmern in animierten Grafikoperationen wird als Doppelpufferung bezeichnet. Der Grundgedanke ist, dass Sie alle zu einer Offscreen-Bitmap zeichnen. Wenn Sie die gesamte Szene gerendert haben, kopieren Sie die gesamte Bitmap in die sichtbare Anzeige.

Der Begriff bezieht sich auch auf hardwareunterstützte Techniken wie die Möglichkeit, den ganzen Videoanzeigepuffer mit einem alternativen auszutauschen, der in dedizierten Systemen wie Konsolen-Videospielen verwendet wird.

    
Greg Hewgill 23.12.2009, 18:30
quelle
20

Versuchen Sie DoubleBuffered in Form.OnCreate auf true zu setzen.

    
Matthias 23.12.2009 18:31
quelle
4

Einfaches Codebeispiel für die Doppelpufferung.

Puffer erstellen (TBitmap)

Zeichnen Sie auf die Buffer-Leinwand.

Zeichnen Sie die Bitmap auf der Leinwand. Form1.Canvas zum Beispiel.

%Vor%     
r_j 19.09.2012 08:02
quelle
3

Obwohl das Verwenden der doppelten Pufferung normalerweise die beste Lösung ist, ist es nicht immer die richtige Lösung und definitiv nicht die speichersparendste Lösung. Wenn Sie jedoch nur einen Teil des Bildes zeichnen, würde ich mit dieser Lösung gehen und auch DoubleBuffered auf true setzen, wie in den anderen Kommentaren erwähnt.

Wenn Sie jedoch bei jedem Zeichnen den gesamten Komponentenbereich ausfüllen, sollten Sie einen anderen Ansatz wählen. Wenn Sie ControlStyle auf csOpaque setzen, vermeiden Sie, dass die Komponente den Hintergrund löscht und dadurch eine Quelle des Flackerns entfernt, ohne dass der Puffer verdoppelt werden muss. Dies erfordert natürlich, dass Sie auf den gesamten Komponentenbereich zurückgreifen, sodass die Lösung nur dann wirklich geeignet ist, wenn Sie dies tun.

Im Allgemeinen aber, wenn der Speicherverbrauch keine Rolle spielt, würde ich auch die doppelte Pufferung wählen, ich wollte Ihnen nur eine Alternative liefern. :)

    
Tommy Andersen 26.12.2009 02:34
quelle

Tags und Links