![]() |
Zeichenroutine optimieren...
Delphi-Quellcode:
Diese funktion wandelt ein aus zahlen bestehendes Zweidimensionales Array in ein Bild um.
procedure TForm1.AssignColors(PB: TProgressbar);
var i, j: integer; begin Image.canvas.brush.color:=clBlack; Image.canvas.rectangle(0,0,AufloesungX,AufloesungY); for i := 0 to AufloesungX - 1 do begin for j := 0 to AufloesungY - 1 do begin if not (CountArray[i,j] = Form3.TrackBar1.Position + 1) then MandelImage.Canvas.Pixels[i,j] := Image10.Canvas.Pixels[1,CountArray[i,j]]; end; PB.Position := PB.Position + 1; end; PB.Position := 0; end; Sie funktioniert ist aber recht langsam. Bei einer aufloesung von 1280 * 1024 geht das durchaus 5-6 sekunden. Programme wie Paint oder IrfanView (insbesondere) Irfan brauchen bruchteile von sekunden um ein Bild zu zeichnen und das ja auch aus gegebenen Zahlenwerten. Wie kann man das jetzt optimieren?? lG Green |
Re: Zeichenroutine optimieren...
von welchem Typ ist MandelImage? Wenn es vom Typ TBitmap ist solltest du direkt auf den Speicher des Bildes mit der Methode Scanline zugreifen.
|
Re: Zeichenroutine optimieren...
Hab vergessen das umzubenennen ^^
is auch ein TImage. Wie soll das mit Scanline gehen? |
Re: Zeichenroutine optimieren...
Benutz die Forensuche!
|
Re: Zeichenroutine optimieren...
Zitat:
Delphi-Quellcode:
Doch zufriedenstellend war es nicht gerade: ungefähr 2-3 mal so lang...
procedure assign;
var i, j, iy, ix: integer; lPixel: PRGBQuad; begin Image.canvas.brush.color:=clBlack; Image.canvas.rectangle(0,0,AufloesungX,AufloesungY); Image.Picture.Bitmap.PixelFormat := pf32bit; Image.Canvas.MoveTo(0,0); for iy := 0 to AufloesungY - 1 do begin lPixel := Image.Picture.Bitmap.Scanline[iy]; for ix := 0 to AufloesungX - 1 do begin if not (CountArray[ix,iy] = Form3.TrackBar1.Position + 1) then begin lPixel^.rgbRed := GetRValue(Image10.Canvas.Pixels[1,CountArray[ix,iy]]); lPixel^.rgbGreen := GetGValue(Image10.Canvas.Pixels[1,CountArray[ix,iy]]); lPixel^.rgbBlue := GetBValue(Image10.Canvas.Pixels[1,CountArray[ix,iy]]); lPixel^.rgbReserved := 0; end; Inc(lPixel); end; PB.Position := PB.Position + 1; end; PB.Position := 0; end; was mach ich falsch? |
Re: Zeichenroutine optimieren...
folgendes machst du noch falsch:
Delphi-Quellcode:
du nutzt weiterhin das Pixels-Property. Und anstelle es einmal abzufragen und auf eine Zwischenvariable zu zuweisen fragst du es 3 mal ab.
Image10.Canvas.Pixels[1,CountArray[ix,iy]
|
Re: Zeichenroutine optimieren...
Ok, jetzt hab ich davor die RGB werte einzeln in ein Array gespeichert, jetzt geht das ganze sehr sehr fix!!
Vielen Dank!!! |
Re: Zeichenroutine optimieren...
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 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