Hallo liebe Gemeinde,
ich möchte ein Array in einem Image plotten. Das ganze geschieht über ein TBitmap, welches nach dem Zeichnen auf das Image assigned wird (BitBlt). Dies verhindert im Vergleich zum direkten Zeichnen auf das Image das flackern und beschleunigt den Vorgang. Trotzdem ist es mir noch zu langsam.
Es wird nämlich sehr of (300 Mal, für jedes Arrayelement) gezeichnet, da ich eine flüssige Bewegung darstellen möchte.
Delphi-Quellcode:
procedure drawgraph(arr:tintarr;image:timage;bmp:tbitmap);
var
i:integer;
col:tcolor;
begin
with bmp do
begin
Canvas.Brush.Color:=clbtnface;
Canvas.Pen.Color:=clblack;
Canvas.Rectangle(0,0,302,302);
for i:=0 to 299 do
begin
if arr[i]=i then Col:=clgreen else Col:=clred; //Der Sinn hiervon sei mal dahingestellt...
Canvas.Pixels[i+1,300-arr[i]]:=col;
end;
end;
bitblt(image.Canvas.Handle,0,0,302,302,bmp.Canvas.Handle,0,0,srccopy);
image.Refresh;
end;
Wie kann ich die Prozedur beschleunigen? Dabei möchte ich jedoch ungern auf TChart oder OGL zurückgreifen.
Grüße,
Frank.