Entwickler-Ecke

Multimedia / Grafik - flimmern...


myukew - Mo 24.01.05 15:54
Titel: flimmern...
wenn man mit canvas (aufwändigere,) animierte graphik macht kommt es unweigerlich zu flimmern bei löschen und neu zeichnen des objekts. gibt es einen weg das loszuwerden?


ScorpionKing - Mo 24.01.05 15:56

ja, du könntest probieren manche routinen mit assembler zu schreiben, vielleicht gibt es auch eine bessere image-komponente, aber probier ersteres mal!

MfG, Scorpion!


AXMD - Mo 24.01.05 16:01

2 Möglichkeiten:

1.) DoubleBuffering
2.) Über GDI programmieren

AXMD


myukew - Mo 24.01.05 16:06

wie funktioniert double buffering (ich weiß was es is, ich habs ma mit qbasic gemacht)?

tja assembler, sowas müsste man lernen... immer wieder sind die lösungen assemblersnippets...


Delete - Mo 24.01.05 16:45

Schreib doch einfach mal in deine OnCreate-Routine deines Formulars

Delphi-Quelltext
1:
doublebuffered := true;                    

Wenn dein Image auf nem Panel o.Ä. ist, musst du eben Panel1.Doublebuffered := true schreiben.


Delete - Mo 24.01.05 17:11

Direkte GDI-Ausgaben auf dem Canvas sind immer langsam. Mach es über ein Bitmap im Speicher, auf das du zeichnes und bei Bedafr auf den Canvas kopierst.


ScorpionKing - Mo 24.01.05 20:03

Luckie hat folgendes geschrieben:
Direkte GDI-Ausgaben auf dem Canvas sind immer langsam. Mach es über ein Bitmap im Speicher, auf das du zeichnes und bei Bedafr auf den Canvas kopierst.


beim besten willen, icg glaube nicht, dass das myukew kann!

aber eine idee wäre es!


DaRkFiRe - Mo 24.01.05 20:14

@Luckie: Das ist in der Tat die schnellste Methode! Ist quasi eigenes Double-Buffering...


tommie-lie - Mo 24.01.05 20:34

ScorpionKing hat folgendes geschrieben:
beim besten willen, icg glaube nicht, dass das myukew kann!
Und jemand, der Assembler für sowas empfiehlt, kann es dann?
Die Zeichenroutinen sind identisch, denn das Bitmap hat auch nur einen Canvas. Und das Kopieren des Bitmaps auf den Ziel-Canvas mit Draw() oder BitBlt() ist ja nun wirklich trivial und hundertfach im Forum zu Suche in: Delphi-Forum, Delphi-Library FINDEN


ScorpionKing - Mo 24.01.05 20:36

tommie-lie hat folgendes geschrieben:
ScorpionKing hat folgendes geschrieben:
beim besten willen, icg glaube nicht, dass das myukew kann!
Und jemand, der Assembler für sowas empfiehlt, kann es dann?
Die Zeichenroutinen sind identisch, denn das Bitmap hat auch nur einen Canvas. Und das Kopieren des Bitmaps auf den Ziel-Canvas mit Draw() oder BitBlt() ist ja nun wirklich trivial und hundertfach im Forum zu Suche in: Delphi-Forum, Delphi-Library FINDEN


ok, ich gebe zu: guter einwand.

stimmt, daran hatte ich noch gar nicht gedacht.


DaRkFiRe - Mo 24.01.05 20:58

Anmerkung: natürlich sind die Routinen identisch, nur jedes Mal, wenn der Canvas verändert wird, muss er in den Gerätekontext des jeweiligen Controls geschrieben werden und das verursacht auf Dauer das Flimmern.


myukew - Di 01.02.05 16:34

ok, mach langer zeit hab ichs mal wieder ins forum hier geschafft :oops:

gut... in ein bitmap zeichnen. an sowas hatte ich auch schon gedacht... wenn die routinen identisch sind isses ja in der tat nich so schiwierig! ich werd mir das also mal in der hilfe ankucken und bei fragen eifach noch ma hier was posten.

danke auf jeden fall erstmal