Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Koordinaten umrechnen, nur wie? (https://www.delphipraxis.net/125911-koordinaten-umrechnen-nur-wie.html)

LDericher 14. Dez 2008 18:41


Koordinaten umrechnen, nur wie?
 
Hallp DP!

Ich habe folgendes Problem:

Gegeben ist eine Image-Komponente mit einem Bild (JPEG) von variabler Größe.
Das Image ist auf proportional und center eingestellt. (Bild wird mit festem Seitenverhältnis skaliert in der Mitte des Image gezeigt.)
Auch die Koordinaten des Mauscursors liegen vor (ggf. lokal und global).

Gesucht sind nun die Koordinaten des dargestellten Bildes, über denen der Zeiger schwebt.

Hat da wer 'ne Idee?

Euer LDer!

P.S.: Ich nehme auch "Foren-Suchbeispiele", mir fällt bloß nix passendes dazu ein -.-

turboPASCAL 15. Dez 2008 08:54

Re: Koordinaten umrechnen, nur wie?
 
<Image>.Top & <Image>.Left usw. geben dir die akt. Position des Bildes an.
Bei <Form>.FormMouseMove() bekommst du die Mouskoordinaten.
Der Rest ist Mathe.

LDericher 15. Dez 2008 16:11

Re: Koordinaten umrechnen, nur wie?
 
Für die Allgemeinheit, hier die Lösung des Problems:

Delphi-Quellcode:
function PosOnPicture(Display: TImage): TPoint;
var
  IMGRelation,
  DisplayRelation,
  Scale:Extended;
  OffsX,
  OffsY:integer;
  MPos:TPoint;
  procedure BorderIt(var Input:integer; MaxBorder, MinBorder:integer);
  begin
  if(Input>MaxBorder)
    then Input:=MaxBorder
  else if(Input<MinBorder)
    then Input:=MinBorder;
  end;
begin
IMGRelation:=Display.Picture.Width/Display.Picture.Height;
DisplayRelation:=Display.Width/Display.Height;
if(DisplayRelation>IMGRelation)then
  begin
  Scale:=(Display.Height/Display.Picture.Height);
  OffsX:=(Display.Width div 2)-(round(Scale*Display.Picture.Width) div 2);
  OffsY:=0;
  end else
  begin
  Scale:=(Display.Width/Display.Picture.Width);
  OffsX:=0;
  OffsY:=(Display.Height div 2)-(round(Scale*Display.Picture.Height) div 2);
  end;
GetCursorPos(MPos);
MPos:=Display.ScreenToClient(MPos);
MPos.X:=MPos.X-OffsX;
MPos.Y:=MPos.Y-OffsY;
Result.X:=round(MPos.X/Scale);
Result.Y:=round(MPos.Y/Scale);
BorderIt(Result.X, Display.Picture.Width, 0);
BorderIt(Result.Y, Display.Picture.Height, 0);
end;

smallsmoker 15. Dez 2008 17:10

Re: Koordinaten umrechnen, nur wie?
 
[ot]
kommen inline prozeduren vor oder nach den variablen ?
[/ot]

DeddyH 15. Dez 2008 17:12

Re: Koordinaten umrechnen, nur wie?
 
IIRC danach.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz