Entwickler-Ecke
Multimedia / Grafik - flimmerfreie Darstellung von Grafik in Paintbo/image
FatalError - Sa 20.12.03 16:14
Titel: flimmerfreie Darstellung von Grafik in Paintbo/image
Hi,
wenn in Image-Fenstern schnell hintereinander z.B über eine Timer-procedure immer neue Kreise od.Linien eingezeichnet werden, kommt es bei mir immer zu "flimmern" des images, d.h. man sieht z.B. auf schwarzem Himtergrund immer wieder kurz graue Streifen.
Wie kann man das verhindern?
Grüße
Andy :wink:
p.S.hat nichts mit besoffensein zu tun :lol:
Gandalfus - Sa 20.12.03 17:19
Backpuffer
FatalError - Sa 20.12.03 18:19
danke :D mal sehen ob ichs hinbekomme..
Andere Frage:
warum bekomme ich mit diesem Code(unten) automatisch einen weißen Hintergrund?
Wie kann ich den Rest des images (um den Kreis herum) durchsichtig erscheinen lassen?
Delphi-Quelltext
1: 2: 3: 4: 5:
| begin with image1.canvas do begin Brush.Color:=clgreen; Ellipse(40,100,0,60); end; |
Grüße
Andy
StefanH - Sa 20.12.03 18:25
wie wärs mit Image1.Transparent???
FatalError - Sa 20.12.03 19:21
Hi,
danke,genau was ich suchte aber nicht fand :D
Zum Backpuffer:
was genau macht diese Codezeile? Versteh ich irgendwie nicht :roll: Kann mir das jemand erklären?
Delphi-Quelltext
1:
| BitBlt(backpuffer.canvas.handle,50,50,105,105,image1.Canvas.handle,0,0,srccopy); |
Gruß
Andy
tommie-lie - Sa 20.12.03 20:48
| FatalError hat folgendes geschrieben: |
was genau macht diese Codezeile? Versteh ich irgendwie nicht :roll: Kann mir das jemand erklären?
Delphi-Quelltext 1:
| BitBlt(backpuffer.canvas.handle,50,50,105,105,image1.Canvas.handle,0,0,srccopy); | |
Das ist eine Funktion aus der Windows-API. Sie kopiert (verhältnismäßig schnell) zwei Bilder ineinander (macht praktisch das, was Canvas.Draw() auch macht). Der erste Parameter ist das Handle des Zieles (der Backpuffer). Dann folgen X, Y Breite und Höhe und das Handle der Quelle (das Image). Dann kommen die X- und Y-Koordinaten des Fensters, daß aus der Quelle kopiert werden soll (wenn man nicht das ganze Bild kopieren will). Zum Schluß der Kopiermodes, in diesem Fall einfaches Überschreiben mit den Daten der Quelle.
Gandalfus - Sa 20.12.03 20:59
alles zeichnen erfolgt auf einem Hintegrund bild
Delphi-Quelltext
1: 2:
| var backpuffer: TBitmap |
das bild muss noch erstellt werden:
Delphi-Quelltext
1: 2: 3:
| backpuffer := TBitmap.create; backpuffer.width := XXX; backpuffer.height := XXXX: |
alle zeichen operationen erfolgen jetzt auf diesem backbild
z.B.:
Backpuffer.canvas.pixels[10,10] :)= clred;
noch abschluss aller zeichen operationen wird das gesamte bild auf den BIldschirm(Formular) kopiert
Delphi-Quelltext
1:
| BitBlt(Form1.canvas.handle,0 ,0 ,backpuffer.width ,backpuffer.height ,backpuffer.Canvas.handle,0,0,srccopy) |
zum besseren verständnis der BitBlt Funktion:
BitBlt(Handle des Zieles,XPosition,YPosition,Breite,Höhe,Handle der Quelle,Position des Ausschnits der kopiert werden sollX,Y,Modus in dem kopiert wird{normal ist srccopy});
FatalError - Sa 20.12.03 23:15
Hi,
thks für die Erklärungen, klappt schon, das meiste...
zwei Fragen noch:
1. Wie kann man jedesmal auf einer neuen Grundlage zeichen(neues Canvas?)
Gibt es sowas wie Clrscr (clearscreen) in Pascal auch in Delphi?
2.wie kann man das mit Operationen (ellipse, rectangle, etc.) auf dem Canvas erzeugte Bild pixelweise abspeichern?
Ich will jeweils das letzte Bild als Backpuffer für das nächste nehmen...
Grüße
Andy :lol:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!