... also :
Beispiel :
Dein Zeigerinstrument soll ein kreis sein mit einem Durchmesser von 120 Pixeln,
dann ist der Mittelpunkt an den Koordinaten : X=60, Y=60,
Dein Canvas hat eine Fläche von 120 mal 120 Pixeln.
Beispiel zum Zeichnen der Position 0 (links)
Delphi-Quellcode:
with Image1.Canvas do
begin
Pen.Width := 1; // Breite Deines Striches (=Zeiger)
Pen.Color := clBlack; // Zeigerfarbe
MoveTo(60,60) // Zeigerbeginn im Mittelpunkt
LineTo(10,60) // zeichne einen 50-pixel langen Zeiger nach links
end;
wenn Du jetzt eine Bitmap als Zeigerinstrument lädst, musst Du
vorher den Bereich unter dem zu zeichnenden Zeiger speichern, da die durch den überzeichneten Zeiger veränderten Pixel nach dem Verändern der Zeigerposition wieder zurückgeschrieben werden müssen.
Delphi-Quellcode:
oldPixels : array[0..49] of TColor; // array für 50 Pixel (Zeigerlänge) bereitstellen
// im Abschnitt Private declaration
var
i : Integer;
for i := 0 to 49 do
oldPixels[i] := Image1.Canvas.Pixels[i+10, 60]; // Speichern der orginal-Pixel
nach dem Zeichnen des Zeigers (außer beim ersten Zeichnen des Zeigers)
muss das alte Pixelbild unter dem Zeiger wieder hergestellt werden :
Delphi-Quellcode:
var
i : Integer;
for i := 0 to 49 do
Image1.Canvas.Pixels[i+10, 60].Pixels := oldPixels[i];
dieses Beispiel gilt nur für die waagerechte Position, für andere Zeigerpositionen
müssen Vektoren gespeichert werden, da der Zeiger ja auch in Vektoren dargestellt
werden soll, die nicht auf 0, 90, 180 oder 270 Grad liegen.
.. ja, und die Skalierung musst Du eben per Winkelfunktionen berechnen.
Markus H.