Ich versuche, einige Schriftarten in meiner Java Swing-Anwendung manuell zu skalieren (dh für einen hochauflösenden Bildschirm).(DPI) Skalierung von Schriftarten in Java Swing (und Windows)
bei 96 DPI (100%), sagt mir Windows Look & Spüren Sie die Standard-Schriftart ist Tahoma Größe 11. Bei 200% (Label.font in der WLF verwenden) es 21 ist, 300% 32 ist, 400% ist 43 und 500% ist 53. (diese Punktgröße beachten == Schrift Aufstieg)
Mein ursprünglicher Ansatz ist „mein“ Standardschriftart zu nehmen: Tahoma Größe 11. Dann berechnen Sie den Skalierungsfaktor (zB 2.0 für 200%.). Von dort aus möchte ich die Schriftpunktgröße berechnen, aber eine gerade Multiplikations tun, ist nicht im Einklang mit der Windows-Skalierung,
so die Frage (n):
- Wie funktioniert Schriftskalierung Arbeit in Windows? und
Wie skaliere ich meine Schriftarten? (Es gibt auch eine andere Skalierung für Komponenten usw.) Die beiden Hauptschriftarten in meiner Anwendung sind Tahoma (11) und Segoe UI (12).
new WindowsLookAndFeel().getDefaults().getFont("Label.font") //returns 11 @ 100% Font font = StyleContext.getDefaultStyleContext().getFont("Tahoma", Font.PLAIN, 11); //my inital Composite font (Tahoma with Dialog fallback) Font newFont = font.deriveFont(zoomFactor * 11); // this gets me 22 @ 200%
Dank!
Warum nicht Java fragen, was die zugrunde liegenden dpi sind? Wenn Sie versuchen, High-dpi-Displays zu kompensieren, nehmen Sie das Tahoma auf '11'px pro' 96' dpi und skalieren Sie es auf '11 * [real]/96' px per' [real] 'dpi –
Hey danke Für deinen Kommentar. Ich mache genau das, ich berechne den Zoomfaktor, indem ich die dpi frage (am besten kann ich) und dividiere durch 96 (dh 100%). Das Problem ist, dass @ 192 dpi, Windows Look and Feel sagt mir Tahoma ist in Größe 21. Wenn ich die Zoom * 11 Berechnung mache, erhält man stattdessen Punktgröße 22 (11 * 192/96) –
Das klingt eigentlich nicht wie ein Problem so sehr als eine Folge der Punktabrundung. "11px" ist möglicherweise kein echter Pixelwert, sondern eine Pixelrepräsentation eines (gebrochenen) 'pt'-Wertes. In diesem Fall kann 21px bei 192dpi leicht auf einen' floor (...) 'des Konvertierungsergebnisses zurückzuführen sein von 'pt' nach' px'. An diesem Punkt müssen Sie möglicherweise wissen, mit welcher Textformatierung Sie arbeiten (GDI, GDI +, DirectWrite?), Oder legen Sie die Schriftgröße basierend auf den Abmessungen des Containers fest, der benötigt wird. –