Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Schnell viele Rechtecke färben (https://www.delphipraxis.net/20379-schnell-viele-rechtecke-faerben.html)

Nikolas 16. Apr 2004 22:38


Schnell viele Rechtecke färben
 
Guten Abend,
ich will für ein 'Game of Life' etwa 5500 Rechtecke mit einer Farbe füllen. Wenn ich dass aber mache (per Floodfill) dauert es etwa 30 sec um alle Rechtecke zu zeichnen. Da es aber darum geht, Entwicklungen zu sehen, ist das entschieden zu lang. Hat jemand eine Idee wie ich das so verändern kann, dass die Zeichenzeit möglichst gering zu halten? ( < 1 sec) :wall:

THXbyTOX

[Edit: damit auch tommie-lie nichts mehr zu meckern hat :mrgreen: ]

Nicolai1234 16. Apr 2004 22:44

Re: Schnell viele Rechtecke färben
 
Sind die Rechtecke Nummeriert (Beispiel: shape1, shape2, shape3...)?

Dann könntest du eventuell folgendes machen, aber ich weiß nicht wie lange das dauert:
(Kommt natürlich auf den Rechner an, wie lange er braucht)
Code:
for i := 1 to 5500 do
    TShape(FindComponent('Shape' + i));
end;
Shape musst du natürlich ersetzen.

Nikolas 16. Apr 2004 22:51

Re: Schnell viele Rechtecke färben
 
Ich hab's bisher so gemacht, dass ich mir mit Moveto/Lineto schwarze Linien auf das Formular zeichne und dann die Farben aus einem 3D-Array auslese.
Ich hab's jetzt nicht ausprobiert, aber ich kann fast nicht glauben, dass es schneller geht, alle shapes suchen zu lassen, dann zu färben und dann noch auszugeben. Hat das schon mla jemand ausprobiert und kann mir sagen ob das so schnell wird, wie ich mir das vorstelle?

Danke schon mal

tommie-lie 16. Apr 2004 22:54

Re: Schnell viele Rechtecke färben
 
Zitat:

Zitat von Toxman
( > 1 sec)

Wenn es 30 Sekunden dauert, hast du doch, was du willst :mrgreen:
Wie sind denn die Rechtecke angeordnet? Ist das eigentlich eine große Fläche, die nur durch Linien unterteilt wurde? Dann kannst du den Hintergrund z.B. auf einmal zeichnen und anschließend die Linien rein.
Oder du könntest versuchen, ob die API-Funktionen zur GDI ausreichend schnell sind, dafür gibt's dann die FloodFill() aus der windows.pas.
Anschließend könnte man versuchen zunächst in einen Backbuffer zu zeichnen, ich weiß grad' nicht wie das mit dem Refreshes ist (gibt's evtl ein BeginUpdate bei der Komponente, auf die di zeichnest?).

Ansonsten könnte man vielleicht umliegenden Code etwas optimieren, dafür müsste man den aber erstmal sehen.


Edit: Und dann hat Luckie auch noch ein eigenes Game of Life geschrieben, und IIRC ist das sogar eines seiner wenigen VCL-Programme gewesen (oder war das irgendwas anderes?!?). Da kannst du vielleicht das ein oder andere Prinzip abschauen.

Nikolas 16. Apr 2004 23:22

Re: Schnell viele Rechtecke färben
 
Vielen Dank schon mal. Ich hab mir grad von Luckie sein 'Life of Luckie' runtergeladen. Ich glaub, dass ich da genug Zeug find um das Problem zu lösen - und noch Lösungen für Probleme finde, die ich bis jetzt noch nicht hatte :mrgreen: .

Danke für für die Hinweise
und
@ Luckie :love:

himitsu 16. Apr 2004 23:26

Re: Schnell viele Rechtecke färben
 
Lass mal das mit dem Floodfill - das ist ja nicht das Schnellste, denn es sucht ja nach dem Bereich, der gefüllt wird - nimm mal lieber FillRec.

tommie-lie 17. Apr 2004 20:42

Re: Schnell viele Rechtecke färben
 
Zitat:

Zitat von Toxman
@ Luckie :love:

Also soweit ich weiß hat er 'ne Freundin, da musst du dich wohl hinten anstellen...

Gandalfus 18. Apr 2004 12:16

Re: Schnell viele Rechtecke färben
 
1. nur die sichtbaren zeichnen.
2. du kennst canvas.rectangel ?

Muetze1 19. Apr 2004 15:35

Re: Schnell viele Rechtecke färben
 
Moin!

Zitat:

Zitat von tommie-lie
Oder du könntest versuchen, ob die API-Funktionen zur GDI ausreichend schnell sind, dafür gibt's dann die FloodFill() aus der windows.pas.

Das TCanvas.FloodFill() ruft auch nur die WinAPI Funktion ExtFloodFill() auf, somit ist es das gleiche...

MfG
Muetze1


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:14 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 by Thomas Breitkreuz