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/)
-   -   [FMX] warum sind bei FMX Positionsangaben Singlewerte? (https://www.delphipraxis.net/203869-%5Bfmx%5D-warum-sind-bei-fmx-positionsangaben-singlewerte.html)

Luckie 2. Apr 2020 00:48

[FMX] warum sind bei FMX Positionsangaben Singlewerte?
 
Ja, warum sind Positionsangaben Singlewerte unter FMX und nicht Integerwerte? Es gibt ja keine halben, dreiviertel oder 0,785 Pixel.

himitsu 2. Apr 2020 01:34

AW: [FMX] warum sind bei FMX Positionsangaben Singlewerte?
 
Im Prinzip gibt es auch Teilpixel.
Du kannst im FMX unmassen Skalierungen verschachteln und dazu noch mehrere Rotationen vermanschen, sodass sich daraus schon Teilpixel ergeben.

Auch besonders schön anzusehn, wenn der Text in z.B. einem Label nicht genau die Pixel trifft,
dann kommt zum optimierten Antialiasing des Fonts auch noch eine weitere kranke Unschärfe. (und leider sind im FMX die Texte selten genau passend, auch wenn das inzwischen schon erheblich verbessert wurde)
Wenn du kein Miniaturbildschirm mit UltrahighDPI hast, empfinde ich persönlich diese verschandelte Schrifft schon als extrem abstoßend.
Bei kleiner Schrift (<= 12 aka Standardgröße) ist ein nettes ClearType in der VCL dagegen noch eine Wohltat.

Falls du dann noch die 3D-Funktionalität des FMX nutzt, dann das selbe Ergebnis aufgrund der Perspektive.
Wobei hier ja die 2D-Ansicht im Grunde eigenlich nur eine flache Draufsicht 'ner 3D-Engine darstellt.

Luckie 2. Apr 2020 02:42

AW: [FMX] warum sind bei FMX Positionsangaben Singlewerte?
 
Aber das muss ja physisch umgesetzt werden. Und da gibt es eben nur ganze Pixel. Also irgendwann, irgendwo muss ja dann auf ganze Pixel umgerechnet werden. Man man ja nicht 34,76 an das Display schicken.

TigerLilly 2. Apr 2020 06:55

AW: [FMX] warum sind bei FMX Positionsangaben Singlewerte?
 
Mit Single umschifft man die Rundungsprobleme unterwegs, darstellen kannst du nur ganze Pixel, das stimmt. Aber in den Schritten davor wird viel gerechnet und skaliert.

Medium 2. Apr 2020 07:48

AW: [FMX] warum sind bei FMX Positionsangaben Singlewerte?
 
Zitat:

Zitat von Luckie (Beitrag 1461048)
Aber das muss ja physisch umgesetzt werden. Und da gibt es eben nur ganze Pixel. Also irgendwann, irgendwo muss ja dann auf ganze Pixel umgerechnet werden. Man man ja nicht 34,76 an das Display schicken.

An den Bildschirm nicht, aber an die Grafikkarte. FMX ist unter der Haube ja auf eine 3D-Engine aufgesetzt, und als solche kann sie "gebrochene" Pixel auch verarbeiten. Linien, die z.B. bei X,75 liegen, werden dann letztlich so gezeichnet, dass eine Linie mit 25% und direkt rechts davon eine mit 75% Deckkraft im finalen Bild landen.

Was technisch auch wieder ein wenig getrickst ist von Delphi, weil eigentlich liegen bei APIs mit Float-Pixeln die exakten Pixel-Mittelpunkte bei N,5-Koordinaten. Der oberste linke Pixel ist also in Wirklichkeit (0,5; 0,5), nicht (0; 0). Das regelt aber FMX bereits für uns durch ein globales Offset von 0,5.

Uwe Raabe 2. Apr 2020 08:00

AW: [FMX] warum sind bei FMX Positionsangaben Singlewerte?
 
Auch in einer VCL-Anwendung entspricht eine Integer-Koordinate nicht immer einem Pixel auf dem Bildschirm. Das gilt auch ohne eine eventuelle Skalierung bei High-DPI. Das Windows-GDI kennt verschiedene Coordinate Spaces, die zwar alle auf Ganzzahlen basieren, aber nicht zwingend eine 1:1 Beziehung zu Pixeln darstellen. Gerade diese Ganzzahl-Darstellung oberhalb der Device-Ebene führt aber auch zu Problemen durch fortschreitende Rundungsfehler.

FMX orientiert sich eher an Grafik-Schnittstellen wie OpenGL, die auf Floating Point Koordinaten aufbauen. Auch da landet am Ende alles auf einzelnen Pixeln, aber vorher hat man nur mit der Ungenauigkeit des verwendeten Float-Systems (Single, Double) zu leben. Dass es auch dort zu Ungenauigkeiten kommt sieht man gelegentlich an merkwürdigen Artefakten in 3D Spielen.

Rollo62 2. Apr 2020 13:41

AW: [FMX] warum sind bei FMX Positionsangaben Singlewerte?
 
Alles richtig bis hierhin.
Ich würde noch ergänzen dass das Konzept bei fMX vektorbasiert ist, und nicht rasterbasiert.
Deshalb die Skalierungen, Rotationen, Matrixberechnungen ...

himitsu 2. Apr 2020 13:50

AW: [FMX] warum sind bei FMX Positionsangaben Singlewerte?
 
Es wäre aber zu praktisch, wenn man aktivieren könnte, dass in der Anzeige alles/vieles auf ganze Pixel gerundet wird,
damit nicht aus 1 Pixel breiten Linien hier und da so verwaschene Dinger werden.

OK, bei UltraHighDPI und auf Mini-Smartphonedisplays, wo man eh keine Pixel mehr erkennen kann, dort mag das keine Probleme geben, aber sonst sieht das einfach nur "unsauber" aus. (SD oder FullHD auf 24"+)

DukeM 6. Apr 2020 15:43

AW: [FMX] warum sind bei FMX Positionsangaben Singlewerte?
 
Da wir hier auch gerade beim Thema sind.

Wie bekomme ich bloß die echten Koordinaten einer Komponente heraus, wenn es skaliert wurde? Also nicht mit Scale-faktor, sondern wenn man zB Align=Contents hat?


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