1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
procedure TForm46.ImageViewer1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Single);
begin
var V := Sender as TImageViewer; //image fenêtrée, zoomée
var bmp := V.Bitmap; //image originale
var scale := V.BitmapScale; //facteur de zoom
var xy := TPointF.Create(0, 0); //coordonnées du pixel dans l'image
//calcul des coordonnées du pixel dans l'image originale
//si l'image originale est plus petite que la fenêtre, les coordonnées sont
//rapportées à leurs centres respectifs.
//si elle est plus grande (il faut alors autoriser le "scrolling" pour explorer
//la totalité de l'image), leur décalage relatif est fourni par le paramètre
//"ViewPortPosition" du composant.
if (V.Width > (bmp.Width*scale)) //image plus petite que la fenêtre ?
then xy.X := bmp.Width/2 + (X - V.Width/2)/scale
else xy.X := (X + V.ViewportPosition.X)/scale;
EnsureRange(xy.X, 0, bmp.Width-1);
if (V.Height > (bmp.Height*scale))
then xy.Y := bmp.Height/2 + (Y - V.Height/2)/scale
else xy.Y := (Y + V.ViewportPosition.Y)/scale;
EnsureRange(xy.Y, 0, bmp.Height-1);
//contrôle
Label3.Text := Format('%8.4f %.0f,%.0f (%.0f,%.0f <-> %.0f,%.0f)',
[scale, V.ViewportPosition.X, V.ViewportPosition.Y, X, Y, xy.X, xy.Y]);
end; |
Partager