Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Koordinate in TImage32 abh. vom Bild finden (https://www.delphipraxis.net/112495-koordinate-timage32-abh-vom-bild-finden.html)

Trille 22. Apr 2008 12:56


Koordinate in TImage32 abh. vom Bild finden
 
Hallo,
Ich habe ein TImage32, in dem beliebige Bilder angezeigt werden. Ich habe das Bild skaliert angezeigt (also so, dass die Seitenverhältnisse konstant bleiben zum Originalbild), das Bild selbst hat als Align := alClient, das Bitmapalign ist baCenter. Links und Rechts bleibt bei mir also noch reichlich Platz. Ich brauche jetzt einen Punkt, der 5 Pixel neben der Grafik liegt. Das Bild kann ja verschiedene Abmessungen haben. Ich habe sowas versucht:

Delphi-Quellcode: markieren
x := (Image.Width div 2) + (Image.Bitmap.Width div 2) + 5;


Das funktioniert so aber nicht. Hat jemand dazu einen Hinweis?

Medium 22. Apr 2008 13:31

Re: Koordinate in TImage32 abh. vom Bild finden
 
Zitat:

Zitat von Trille
Das funktioniert so aber nicht.

Hurraaaaaaaaaaa! Wieder einmal geht der Preis für die präziseste Fehlerbeschreibung an einen DP-User! Herzlichen Glückwunsch, ich bitte um Ihre Dankesrede. *zumpodiumschubs*

Trille 22. Apr 2008 13:33

Re: Koordinate in TImage32 abh. vom Bild finden
 
Zitat:

Zitat von Medium
Zitat:

Zitat von Trille
Das funktioniert so aber nicht.

Hurraaaaaaaaaaa! Wieder einmal geht der Preis für die präziseste Fehlerbeschreibung an einen DP-User! Herzlichen Glückwunsch, ich bitte um Ihre Dankesrede. *zumpodiumschubs*

Was erwartest du denn für eine Fehlerbeschreibung? Beim dem Sachverhalt, den ich beschrieben habe, ist das Label entweder an der Stelle oder eben nicht. Anahnd meiner aussage dürfte klar, sein, welcher Fall eingetreten ist.

Medium 22. Apr 2008 13:37

Re: Koordinate in TImage32 abh. vom Bild finden
 
Aha, ein Label also. Das wäre z.B. eine wichtige Information gewesen, die du in deinem 1. Beitrag aber verheimlichst. Nimm ein TStaticText. TLabel ist nur ein GraphicControl und hat damit keinen eigenen Canvas, und zeichnet somit auf den Canvas seines Parents: Das Formular. Da TImage32 aber einen eigenen Canvas hat der über dem Formular gezeichnet wird, überdeckt dies dein Label. Die Formel selber ist völlig korrekt.

Ich hoffe du verstehst jetzt, dass es durchaus wichtig ist wenigstens ein paar Randinformationen zu liefern.

Trille 22. Apr 2008 13:51

Re: Koordinate in TImage32 abh. vom Bild finden
 
Zitat:

Zitat von Medium
Aha, ein Label also. Das wäre z.B. eine wichtige Information gewesen, die du in deinem 1. Beitrag aber verheimlichst. Nimm ein TStaticText. TLabel ist nur ein GraphicControl und hat damit keinen eigenen Canvas, und zeichnet somit auf den Canvas seines Parents: Das Formular. Da TImage32 aber einen eigenen Canvas hat der über dem Formular gezeichnet wird, überdeckt dies dein Label. Die Formel selber ist völlig korrekt.

Ich hoffe du verstehst jetzt, dass es durchaus wichtig ist wenigstens ein paar Randinformationen zu liefern.

Ich darf an dieser Stelle leider nur ein TLabel nehmen. Im übrigen sehe ich das Label auch, aber halt immer an der falschen Position. Mal zu weit rechts, mal zu weit links (obwohl die Bilder die gleichen Höhe/Breite-Verhältnisse haben) und auch gleich groß dargestellt werden. Das liegt daran, dass Image.Bitmap.Width die Breite des Originalbildes zurückliefert, ich brauche aber die Breite des skalierten Bildes. D.h. wenn ich ein 500x500 Pixel Bild darstelle, ist das Label zu weit rechts (es wird runterskaliert)
stelle ich aber ein ein 3x3 Pixel Bild ein (wird genau so groß dargestellt wie das 500x500 Pixel Bild), dann ist das Label auf dem Bild (es wird hochskaliert) und das Label landet fast in der Mitte.

Angenommen das TImage32 ist 1000 Pixel breit und 50 Pixel hoch, dann ergibt das laut der Formel, di ich benutze folgendes:

x := (Image.Width div 2) + (Image.Bitmap.Width div 2) + 5;

500x500: x=755
3x3: x=506;

x ist übrigens label.left.
Im gegebenen Fall muss x in beiden Fällen gleich sein, da beide Bilder auf die gleiche Größe skaliert werden.

Ich hoffe, ich konnte das Problem verdeutlichen.

Medium 22. Apr 2008 14:17

Re: Koordinate in TImage32 abh. vom Bild finden
 
Ich muss mich entschuldigen, ich hab den Teil mit der Skalierung nicht mit bedacht. Ein Blick in die GR32 Doku offenbart z.B. TImage32.GetPictureRect, was dir die Koordinaten des angezeigten Bildes zurückliefert. (Dokus sind toll ;))

edit: GetPictureSize wüde die skalierte Größe liefern, aber o.g. erspart dir sogar noch Rechnungen.

Trille 22. Apr 2008 14:27

Re: Koordinate in TImage32 abh. vom Bild finden
 
Zitat:

Zitat von Medium
Ich muss mich entschuldigen, ich hab den Teil mit der Skalierung nicht mit bedacht. Ein Blick in die GR32 Doku offenbart z.B. TImage32.GetPictureRect, was dir die Koordinaten des angezeigten Bildes zurückliefert. (Dokus sind toll ;))

edit: GetPictureSize wüde die skalierte Größe liefern, aber o.g. erspart dir sogar noch Rechnungen.

Hehe, auch das habe ich getan. Nur gibt es bei mir die o.g. Methode nicht. GetBitmapRect() hat aber letztendlich geholfen :)

Medium 22. Apr 2008 14:36

Re: Koordinate in TImage32 abh. vom Bild finden
 
Welche Version hast du von der G32? Ich hab die Online-Doku von hier zu Rate gezogen. Wenn die Change-History in der Doku den letzten Stand dieser wiederspiegelt, ist sie aktuell (1.8.3).

Edit: Ich vermute sogar, dass beide Funktionen das selbe tun, und nur umbenannt wurde, da ja eigentlich eben nicht das Bitmap-Rect, sondern eben das skalierte Picture-Rect zurückgeliefert wird.


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