| Autor |
Beitrag |
FatalError
      
Beiträge: 64
WIN ME
D6 Pers
|
Verfasst: Sa 20.12.03 16:14
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
p.S.hat nichts mit besoffensein zu tun 
|
|
Gandalfus
      
Beiträge: 129
|
Verfasst: Sa 20.12.03 17:19
Backpuffer
_________________ Wennn man feststellt, dass es drei Moeglichkeiten gibt, die einen Vorgang schiefgehen lassen koennen und man diese ausschaltet, entstehen automatisch drei neue Moeglichkeiten.
|
|
FatalError 
      
Beiträge: 64
WIN ME
D6 Pers
|
Verfasst: Sa 20.12.03 18:19
danke  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
      
Beiträge: 1144
Win XP
D5 Standard, D7 Pers, D2005 Pers
|
Verfasst: Sa 20.12.03 18:25
wie wärs mit Image1.Transparent???
_________________ "Als es noch keine Computer gab, war das Programmieren noch relativ einfach."(Edsger W. Dijkstra)
"Ich bin nicht von Sinnen, sondern ich rede wahre und vernünftige Worte." (Paulus)
|
|
FatalError 
      
Beiträge: 64
WIN ME
D6 Pers
|
Verfasst: Sa 20.12.03 19:21
Hi,
danke,genau was ich suchte aber nicht fand
Zum Backpuffer:
was genau macht diese Codezeile? Versteh ich irgendwie nicht  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
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Sa 20.12.03 20:48
| FatalError hat folgendes geschrieben: | was genau macht diese Codezeile? Versteh ich irgendwie nicht 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.
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
Gandalfus
      
Beiträge: 129
|
Verfasst: 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});
_________________ Wennn man feststellt, dass es drei Moeglichkeiten gibt, die einen Vorgang schiefgehen lassen koennen und man diese ausschaltet, entstehen automatisch drei neue Moeglichkeiten.
|
|
FatalError 
      
Beiträge: 64
WIN ME
D6 Pers
|
Verfasst: 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 
|
|
|