AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Performance-Optimierung

Ein Thema von VkPenguin · begonnen am 16. Jul 2012 · letzter Beitrag vom 18. Jul 2012
 
VkPenguin

Registriert seit: 23. Dez 2011
150 Beiträge
 
Delphi XE7 Architect
 
#3

AW: Performance-Optimierung

  Alt 17. Jul 2012, 12:44
Danke erstmal für deinen Tipp!
Habe mir gestern Abend noch ein paar Beiträge zu dem Thema durchgelesen und es hörte sich ja vielversprechend an, auch wenn ich es noch nicht zu 100% verstanden habe.
In der Hoffnung das zu ändern hab ich heute morgen einfach schnell ein kleines Programm zum Testen gemacht, welches nach ein bisschen rumprobieren auch funktionierte. Nun versuche ich, das ganze auf mein Hauptprogramm zu übertragen, ich erhalte jedoch immer einen Fehler. Gibt es da noch etwas über Scanline, das ich wissen müsste? Es scheint, als dürfte man "p^[X]" nur einmal benutzen, weil ich immer eine Exeption bekomme, wenn ich es ein zweites mal verwende, egal in welcher reihenfolge..

Hier mal eine Procedur (An der makierten Stelle kommt die Fehlermeldung):

Delphi-Quellcode:
procedure TForm1.AnalysePIC2;
type
PixArray = Array [1..3] of Byte;
VAR p: ^PixArray;
VAR X,Y,Farbtoleranz:Integer;
VAR RValSel,GValSel,BValSel:Byte;
Begin
// Standartwerte //
 PB_Small.Max:=PIC_Breite*3;
 PB_Small.Position:=0;
 AnyLine:=False;
 for X := 0 to PIC_Breite do
  Begin
  PB_Small.Position:=PB_Small.Position+1;
  for Y := 0 to PIC_Höhe do
   Begin
   Line[X,Y]:=False;
  End;
 End;
// /Standartwerte //

 PB_Main.Position:=PB_Main.Position+3;
 PIC_res.Assign(PIc_res2);
 Farbtoleranz:=Ceil(SB_Farbtoleranz.Position*255/100);
 RValSel:=GetRValue(Color_Analysefarbe.Selected);
 GValSel:=GetGValue(Color_Analysefarbe.Selected);
 BValSel:=GetBValue(Color_Analysefarbe.Selected);

 for Y := 0 to PIC_Höhe-1 do
  Begin
  PIC_Res.ScanLine[Y];
  for X:=0 To PIC_Breite-1 do
   Begin
   if SB_Farbtoleranz.Position>0 then
    Begin
    if (((Abs(RValSel-P^[3]))<=Farbtoleranz) AND ((Abs(GValSel-P^[2]))<=Farbtoleranz) AND ((Abs(BValSel-P^[1]))<=Farbtoleranz)) then
     Begin
     AnyLine:=True;
     Line[X,Y]:=True;
     LinePTK:=LinePTK+1;
    End
    else
     Begin
     //Weiß
p^[3]:=255;
Delphi-Quellcode:
 
     p^[2]:=255;
     p^[1]:=255;
     Inc(p);
    End;
   End
   Else
    Begin
    if ((p^[3]=0) AND (p^[2]=0) AND (p^[1]=0)) then
     Begin
     AnyLine:=True;
     Line[X,Y]:=True;
     LinePTK:=LinePTK+1;
    End
    else
     Begin
     p^[3]:=255; //Weiß
     p^[2]:=255;
     p^[1]:=255;
     Inc(p);
    End;
   End;
  End;
 End;

.
.
.
Was mache ich denn falsch?

Und zu dem Inline: Verstehe ich es richtig, dass es also die Programmgeschwindigkeit erhöht, weil der PC dann nicht "hin und her springen" muss? Aber warum macht man das dann nicht immer? Die Datei wird vielleicht ein bisschen größer, aber soviel kann das doch nicht ausmachen, oder?

Geändert von VkPenguin (17. Jul 2012 um 12:48 Uhr)
  Mit Zitat antworten Zitat
 


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 04:04 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