Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   screen resolution koordinaten konvertieren? (https://www.delphipraxis.net/168782-screen-resolution-koordinaten-konvertieren.html)

rhodan 11. Jun 2012 00:09

screen resolution koordinaten konvertieren?
 
Hallo!

Bin mir nicht sicher ob die Threadecke hier richtig ist, im zweifelsfall bitte moven und sorry..

Nun zu meiner Frage..

Mir liegt ein code vor, aufgezeichnet von einem Maus-Rekorder. In dem code sind X und Y koordinaten angegeben, auf die geklickt wird. das script setzt aber eine auflösung von 1920x1080 voraus.

mein bildschirm unterstützt diese allerdings nicht. ich möchte ein tool schreiben was die koordinaten aus der 1920x1080 auflösung für sagen wir...1024x768 umrechnet.

wenn der mausklick also in der auflösung 1920x1080 auf position..sagen wir 400x500 erfolgt, wo müsste er dann in einer anderen auflösung erfolgen um das gleiche ergebniss zu erzielen...hoffe es ist verständlich :)
vielleicht gibts ja so ein tool schon..ich finds nützlich.

danke für nen tip wie ich sowas realisieren kann.
möchte also als erstes die ausgangs-auflösung eintragen in ein feld, dann angeben auf welcher X/Y koordinate ein klick erfolgen würde und diese position dann auf eine andere auflösung umrechnen lassen.

lg robin

Valle 11. Jun 2012 00:25

AW: screen resolution koordinaten konvertieren?
 
Rechne mit Verhältnissen:

Code:
x_alt / breite_alt = x_neu / breite_neu
y_alt / hoehe_alt = y_neu / hoehe_neu
Also etwas konkreter:

Code:
x_alt / 1920 = x_neu / 1024
y_alt / 1080 = y_neu / 768
Mit deinem Beispiel:

Code:
400 / 1920 = x_neu / 1024
500 / 1080 = y_neu / 768
Einfach nach x_neu bzw. y_neu auflösen. Dann ausrechnen und auf ganzen Zahlen (Integer) runden. Ergebnis wäre dann (213|356). Das kriegst du hin, oder?

Liebe Grüße,
Valentin

rhodan 11. Jun 2012 00:32

AW: screen resolution koordinaten konvertieren?
 
hmm...ich kenne mich mehr im grafischenbereich mit delphi aus.

wie bist du auf die zahlen gekommen bzw die neue auflösung? kannst du mir eben den rechenweg beschreiben? den code schaff ich dann :D

danke!

rhodan 11. Jun 2012 00:39

AW: screen resolution koordinaten konvertieren?
 
ah ich habs...danke dir!
mathe war noch nie meine stärke xD

Valle 11. Jun 2012 00:44

AW: screen resolution koordinaten konvertieren?
 
Das hat mir Grafik absolut nichts zu tun. ;-)

Die Zahlen stammen nur aus deinen Beispielen. Nur bei einer hatte ich einen Tippfehler drin, vielleicht hat dich das verwirrt.

Den neuen Punkt habe ich durch Auflösen der Gleichung bekommen. ;-) Du musst das Ganze mit Verhältnissen rechnen. Die X-Koordinate des gegebenen, alten Punktes (400 in deinem Beispiel) steht im Verhältnis zur Breite des alten Auflösung (1920 in deinem Beispiel). Wenn du diese X-Koordinate jetzt umgerechnet hast, sagen wir mal sie lautet jetzt x_neu, dann steht sie immer noch im gleichen Verhältnis zur Breite des Bildschirms. Die neue Breite in deinem Beispiel war 1024. Die Verhältnisse sind gleich. Das drückt man dann so aus:

Code:
400 / 1920 = x_neu / 1024
(400 durch 1920 ist gleich x-neu durch 1024 ;-) )
Jetzt einfach diese Formel nach x_neu auflösen, um die neue X-Koordinate des Punktes zu bestimmen. Das Gleiche Prinzip gilt dann auch für die Y-Koordinate. Das hat mit Delphi nichts zutun, ist nur Mathematik. :-) Jetzt klar was gemeint ist?

Edit:// Habe meinen Beitrag jetzt trotz "ah ich habs" abgeschickt. Etwas mehr Erklärung kann ja nicht schaden. :-)

Liebe Grüße,
Valentin

rhodan 11. Jun 2012 00:45

AW: screen resolution koordinaten konvertieren?
 
jap...danke dir! :D

rhodan 11. Jun 2012 01:15

AW: screen resolution koordinaten konvertieren?
 
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
originalxx :integer;
originalyy :integer;
koordinatexx:integer;
koordinateyy:integer;
zielxx:integer;
zielyy:integer;

begin
originalxx := StrToInt(originalx.text);
originalyy := StrToInt(originaly.text);
koordinatexx := StrToInt(koordinatex.text);
koordinateyy := StrToInt(koordinatey.text);
zielxx := StrToInt(zielx.text);
zielyy := StrToInt(ziely.text);

[B]zielkoordinatex.caption := koordinatexx / originalxx * zielxx;[/B]
end;

end.
wie kann ich in dem label "zielkoordinatex.caption" das ergebnis der rechnung anzeigen lassen? InttoStr funktioniert hier nicht :X

rhodan 11. Jun 2012 01:27

AW: screen resolution koordinaten konvertieren?
 
habs jetzt so gelöst..:

Code:
zielkoordinatex.caption := floattostr(StrtoFloat(koordinatex.text) / StrtoFloat(originalx.text) * StrtoFloat(zielx.text));

zielkoordinatey.caption := floattostr(StrtoFloat(koordinatey.text) / StrtoFloat(originaly.text) * StrtoFloat(ziely.text));
allerdings kommen da keine glatten zahlen heraus..wie kann ich das ändern damit ich exakte koordinaten habe?

Valle 11. Jun 2012 02:01

AW: screen resolution koordinaten konvertieren?
 
Ich kann kein Delphi, aber ich tendiere mal zu Round():

Delphi-Quellcode:
zielkoordinatex.caption := IntToStr(Round(StrToFloat(koordinatex.text) / StrToFloat(originalx.text) * StrToFloat(zielx.text)));
zielkoordinatey.caption := IntToStr(Round(StrToFloat(koordinatey.text) / StrToFloat(originaly.text) * StrToFloat(ziely.text)));
Liebe Grüße,
Valentin

Luckie 11. Jun 2012 07:43

AW: screen resolution koordinaten konvertieren?
 
Oder nimm div anstatt /.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:36 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