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 FMX Umgang mit MacOS und vermutlich auch iOS Auflösungen (https://www.delphipraxis.net/189848-fmx-umgang-mit-macos-und-vermutlich-auch-ios-aufloesungen.html)

Sherlock 29. Jul 2016 13:48

FMX Umgang mit MacOS und vermutlich auch iOS Auflösungen
 
Ich weiss nicht genau, wie man das Problem/Verhalten bezeichnet, ich versuchs mal zu beschreiben:
Ich habe mit FMX eine Anwendung geschrieben, die auf ein Bitmap zeichnet. Das Zeichnen soll möglichst in Originalgröße geschehen (es geht um einige cm, keine Sorge). Dazu kann ich unter Windows bisher Problemlos die dpi per TDeviceDisplayMetrics.PixelsPerInch abfragen und durch 2,54 teilen, schon habe ich PixelsPerCentimeter (ppc). Fein. Wenn ich jetzt also etwas auf den Canvas des Bitmaps zeichne, dann immer mit dem Faktor für ppc kombiniert, und das klappt prima. Jetzt hab ich die Anwendung zum Test auf MacOS ausgeführt und alles ist viel zu groß. Ich verstehe ungefähr, was los ist, aber ich weiß nicht wie ich das korrigiere. Mein MacBook hat eine native Auflösung von 2880x1800. Bei 15" macht das 226 dpi, die meine Anwendung übrigens auch tatsächlich so erhält. Leider ist es aber so, daß MacOS eine "logische" Auflösung von 1440x900 "bereitstellt". Was ich darauf male wird viel zu groß angezeigt. Wie kann ich das berücksichtigen/korrigieren? Ich bin normalerweise was Google betrifft nicht ganz hilflos, aber meine Suchanfragen führen immer wieder nur zu HighDPI Themen, die komplette Applikationen und Komponentengrößen und Manifestdateien betreffen. Ich will aber nur wissen, wie ich den entsprechenden Umrechnungsfaktor beim Zeichnen in die Bitmap herausfinden, und berücksichtigen kann. Es muss vermutlich irgendwo auch bei den TDeviceDisplayMetrics zu finden sein, aber das ist ungefähr so gut Dokumentiert wie ...naja, wie halt sonst alles von Emba ;)

Sherlock

bra 29. Jul 2016 14:26

AW: FMX Umgang mit MacOS und vermutlich auch iOS Auflösungen
 
Was du vermutlich suchst ist:

Delphi-Quellcode:
var
  DeviceSvc: IFMXDeviceMetricsService;
...
DeviceSvc.GetDisplayMetrics.ScreenScale

Sherlock 29. Jul 2016 14:38

AW: FMX Umgang mit MacOS und vermutlich auch iOS Auflösungen
 
Gnarf...so nah, daß ichs übersehen hatte :D

Aber hmmm, es ist ein wenig besser, wenn ich jetzt meine ppc (PixelProCentimeter) durch ScreenScale teile ...aber wirklich nur ein wenig. Erst wenn ich durch doppelte ScreenScale dividiere passt es wirklich. Das ist...mysteriös und ungünstig. Denn wenn ScreenScale=1, dann stimmt alles zu 100% und ich sollte nicht die ScreenScale verdoppeln. Hmmmm, irgendwie hab ich eventuell noch einen Denkfehler.

Sherlock

Sherlock 29. Jul 2016 14:58

AW: FMX Umgang mit MacOS und vermutlich auch iOS Auflösungen
 
OK, jetzt teile ich wo es sein muss durch das Quadrat von ScreenScale und es passt. Schriftgröße wird direkt durch ScreenScale geteilt, das stimmt dann auch. ein bisschen komisch, aber es geht jetzt zuverlässig auf allen Systemen. :)

Danke bra!!

Sherlock

mensch72 29. Jul 2016 18:26

AW: FMX Umgang mit MacOS und vermutlich auch iOS Auflösungen
 
mach doch bitte mal ein MiniTestProjekt wo auf einem FMX Form ein paar Quadratesind und ein paar Labels mit InfoText wie (groß) es wie aus sehen soll.
Dann noch einen Screenshot von deinem Mac(Book) und wir haben alle was zu probieren:)

Danke

Mavarik 30. Jul 2016 07:27

AW: FMX Umgang mit MacOS und vermutlich auch iOS Auflösungen
 
Das ding mit der retina Auflösung ist folgendes...

Gerechnet wird immer mit der Auflösung 1:1, Die Bilder müssen aber für Scale 2 oder 3 (6+) oder auch Android (1,5)
in entsprechender Auflösung vorliegen.

Beispiel:

300x300 pixel image.
Image muss 300x300 sein. Dann option nicht auf fit, sondern auf original und das Multiresbitmap belegen mit der Scalierung.

Mavarik

Rollo62 30. Jul 2016 09:20

AW: FMX Umgang mit MacOS und vermutlich auch iOS Auflösungen
 
Zitat:

komisch, aber es geht jetzt zuverlässig auf allen Systemen.
Ihr Glücklichen ...

Ich habe je nachdem im OnPaint beim Canvas auch noch verschiedene Canvas.Scale und beim Bitmap
verschiedene BitmapScale.
Muss ich von Hand in der jeweiligen Situation anpassen.

Nur mit dem SceneScale kann ich das nicht immer korrigieren, und eine einfache Regel dafür habe ich noch nicht gefunden wann Canvas.Scale und BitmapScale gesetzt werden.

- Wenn ich eine Bitmap mit TBitmap.Create anlege gibt es auf jeden Fall andere Settings als in einem OnPaint.
- Auch wenn ich ein Object mit MakeScreenShot aufnehme gibt es andere Settings.
- Beim Schreiben von Text in ein Bitmap reagiert die Routine anscheinend auf andere Scale Settings

Ich will es gerne nochmal mit Frank's einfacher Regel Testen, aber da bin ich sicher das hatte ich schonmal
so getestet.
Naja, vielleicht war bei dem ganzen Hin und Her etwas falsch gelaufen.

Rollo

Sherlock 1. Aug 2016 12:41

AW: FMX Umgang mit MacOS und vermutlich auch iOS Auflösungen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich hab mal ein kleines Testprojekt erstellt, indem ich eine Art Millimeterpapier zeichne. Es ist 8cm hoch und nutzt die Breite, die der Anwendung gegeben wird (ist etwas speziell, aber ich wollte jetzt nicht alles neu erfinden).

Es funktioniert unter Windows und MacOS. Unter iOS bekomme ich einen Fehler beim ersten Click auf Paint, danach nicht mehr...ich vermute, daß das Bitmap eines TImage unter iOS noch nicht existiert.

Frank: Ich verstehe nicht ganz, was das mit den MultiresBitmaps zur Laufzeit soll. Ich hoffe doch sehr, daß sich die Auflösung nicht ständig ändert. Daher nutze ich für fixe Bilder MultiresBitmaps, damit die Anwendung die jeweils passende Version bekommt, aber für dynamisch erstellte Bilder nutze ich den ganz normalen Canvas einer Bitmap, sonst müsste ich ja alles doppelt und dreifach malen.

Sherlock


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