Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bitmap: nur Änderungen zeichnen (https://www.delphipraxis.net/29579-bitmap-nur-aenderungen-zeichnen.html)

fkerber 11. Sep 2004 08:19


Bitmap: nur Änderungen zeichnen
 
Hi!

Ich habe hier eine Paintbox und da werden Kreise drauf gezeichnet. 25x pro Sekunde bekommen die 9 Kreise eine neue Position.
Im Moment ist es so, dass bei einer Änderung die gesamte Paintbox neu gezeichnet wird.

Gibt es Mittel und Wege nur die Pixel neu zu zeichnen, die sich geändert haben?


Ciao Frederic

himitsu 11. Sep 2004 11:06

Re: Bitmap: nur Änderungen zeichnen
 
Nur die neuen Pixel zu zeichnen wird ein bissl schwer, aber du kannst doch ach nur den Bereich (das Rechteck) neu zeichnen, wo sich was ändert.

fkerber 11. Sep 2004 15:52

Re: Bitmap: nur Änderungen zeichnen
 
Hi!

Wie gesagt, es sind 8 Kreise, die quer über dem Feld liegen können und dann wäre wohl doch alles neu zu zeichnen, aber rein Interesse halber, wie würde das denn aussehen?

Ciao Frederic

himitsu 11. Sep 2004 16:05

Re: Bitmap: nur Änderungen zeichnen
 
Du mußt nur ausrechnen, in welches Rechteck alle Kreise reinpassen, welche ihre Position geändert haben.

etwa so:
Delphi-Quellcode:
x1 := min(Kreis1.X, Kreis2.X, Kreis3.X ...);
y1 := min(Kreis1.Y, Kreis2.Y, Kreis3.Y ...);
x2 := max(Kreis1.X, Kreis2.X, Kreis3.X ...) + Kreisdurchmesser;
y2 := max(Kreis1.Y, Kreis2.Y, Kreis3.Y ...) + Kreisdurchmesser;
Da du aber abei die alten Kreise nicht vergessen darfst, sieht es dann wohl in etwa so aus:
Delphi-Quellcode:
x1 := min(Kreis1.X, Kreis2.X, Kreis3.X ...);
y1 := min(Kreis1.Y, Kreis2.Y, Kreis3.Y ...);
x2 := max(Kreis1.X, Kreis2.X, Kreis3.X ...);
y2 := max(Kreis1.Y, Kreis2.Y, Kreis3.Y ...);

Kreise verschieben und so... (also Kreis_.X & Kreis_.Y verändern)

x1 := min(x1, Kreis1.X, Kreis2.X, Kreis3.X ...);
y1 := min(y1, Kreis1.Y, Kreis2.Y, Kreis3.Y ...);
x2 := max(x2, Kreis1.X, Kreis2.X, Kreis3.X ...) + Kreisdurchmesser;
y2 := max(x3, Kreis1.Y, Kreis2.Y, Kreis3.Y ...) + Kreisdurchmesser;

// der Bereich zwischen x1,y1 und x2,y2 wird/wurde geändert

fkerber 11. Sep 2004 16:07

Re: Bitmap: nur Änderungen zeichnen
 
Hi!

Danke, ich werde versuchen, es nachzuvollziehen.

Ciao Frederic


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz