AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Canvas beim Zeichnen zu langsam
Thema durchsuchen
Ansicht
Themen-Optionen

Canvas beim Zeichnen zu langsam

Ein Thema von holle · begonnen am 31. Mai 2006 · letzter Beitrag vom 31. Mai 2006
Antwort Antwort
holle

Registriert seit: 15. Nov 2005
Ort: Uckerland
138 Beiträge
 
Delphi 7 Enterprise
 
#1

Canvas beim Zeichnen zu langsam

  Alt 31. Mai 2006, 12:44
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
Angehängte Dateien
Dateityp: zip sort_966.zip (197,5 KB, 21x aufgerufen)
Marcel
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Canvas beim Zeichnen zu langsam

  Alt 31. Mai 2006, 13:26
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.
Klaus
  Mit Zitat antworten Zitat
holle

Registriert seit: 15. Nov 2005
Ort: Uckerland
138 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Canvas beim Zeichnen zu langsam

  Alt 31. Mai 2006, 14:04
danke funktioniert super!
mfg holle
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Canvas beim Zeichnen zu langsam

  Alt 31. Mai 2006, 15:44
@Klaus: Dir ist aber schon klar, dass Du nur den unsortierten Zustand zeichnest?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Canvas beim Zeichnen zu langsam

  Alt 31. Mai 2006, 15:56
@Union,

ich zeichne einmal das unsortierte Bild
und danach jede Vertauschung.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz