![]() |
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 -.- |
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. |
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; |
Re: Koordinaten umrechnen, nur wie?
[ot]
kommen inline prozeduren vor oder nach den variablen ? [/ot] |
Re: Koordinaten umrechnen, nur wie?
IIRC danach.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:45 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-2025 by Thomas Breitkreuz