![]() |
Canvas beim Zeichnen zu langsam
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, ich habe ein Programm geschrieben, das den Sortiervorgang von Bubblesort grafisch darstellt. Mein Problem: Bei 512 Elementen dauert der Sortiervorgang seeeehr lange. Ich habe schon alles versucht, jedoch schafft es anscheinend der Algortihmus nicht schneller. Der Rechner ist dabei immer zu 100% ausgelastet.
Wisst ihr vielleicht, wie ich mein Programm beschleunigen kann? mfg holle |
Re: Canvas beim Zeichnen zu langsam
Hallo Marcel,
habe Deine Unit mal etwas abgeändert kann man vielleicht noch etwas mehr optimieren - aber so ist es schon schneller. Eine Bremse bei Dir war das Du bei jeder Tauschaktion, das ganze Bild neu aufgebaut hast. Das dauert.Es ist aber nur nötig, die zwei Vertauschungen neu zu zeichnen und das macht die Version unten. Grüße Klaus
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type TDaten = record zahl: integer; farbe: TColor; end; var Form1: TForm1; Daten: array of TDaten; l, r: integer; BMP: TBitmap; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i: integer; temp_zahl: integer; temp_color: tColor; begin randomize; SetLength(Daten,0); for i:=0 to 511 do begin SetLength(Daten,Length(Daten)+1); Daten[i].Zahl:=random(512)+1;; Daten[i].Farbe:=ClBlue; end; l:=0; r:=511; //DRAW With Form1.Canvas do begin brush.Color:=clWhite; rectangle(0,0,512,512); pen.Width:=1; for i:=0 to 511 do begin Pen.Color:=Daten[i].Farbe; Rectangle(i,Daten[i].Zahl,i+4,Daten[i].Zahl+4); Daten[i].Farbe:=ClBlue; end; end; //DRAW //BUBBLESORT repeat begin if Daten[l].Zahl > Daten[l+1].Zahl then begin // lösche rechteck an der alten Position Form1.canvas.pen.color:=clwhite; Form1.Canvas.Rectangle(l,Daten[l].Zahl,l+4,Daten[l].Zahl+4); Form1.Canvas.Rectangle(l+1,Daten[l+1].Zahl,l+1+4,Daten[l+1].Zahl+4); Temp_Zahl:=Daten[l].zahl; Daten[l].zahl:=Daten[l+1].zahl; Daten[l+1].zahl:=Temp_Zahl; // verschiebe Rechteck Form1.Canvas.Pen.Color:=clBlue; Form1.Canvas.Rectangle(l,Daten[l].Zahl,l+4,Daten[l].Zahl+4); Form1.Canvas.Rectangle(l+1,Daten[l+1].Zahl,l+1+4,Daten[l+1].Zahl+4); Temp_Color:=Daten[l].farbe; Daten[l].farbe:=Daten[l+1].farbe; Daten[l+1].farbe:=Temp_Color; end; inc(l); if l=r then begin dec(r); l:=0; end; for i:=r+1 to 511 do Daten[i].Farbe:=ClNavy; Daten[l].Farbe:=ClRed; Daten[l+1].Farbe:=ClGreen; end until l>=r; end; end. |
Re: Canvas beim Zeichnen zu langsam
danke funktioniert super!
mfg holle |
Re: Canvas beim Zeichnen zu langsam
@Klaus: Dir ist aber schon klar, dass Du nur den unsortierten Zustand zeichnest?
|
Re: Canvas beim Zeichnen zu langsam
@Union,
ich zeichne einmal das unsortierte Bild und danach jede Vertauschung. Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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-2025 by Thomas Breitkreuz