JavaFX - Jak definovat velkost textu v pixelech?
Dobrý den,
Potřebuji definovat velikost textu v pixelech a našel jsem, jak by měl přepočet vypadat
double fontSize= 72.0 * pixelSize / Toolkit.getDefaultToolkit().getScreenResolution();
Bohužel není správný. V příkladu níže mé text cca 95 pixelů
import java.awt.Toolkit;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class TextHeight extends javafx.application.Application {
@Override
public void start(Stage stage) {
var text = new Text("EXAMPLE");
var fontSize = 100 * Toolkit.getDefaultToolkit().getScreenResolution() / 72.0;
text.setFont(Font.loadFont(getClass().getResourceAsStream("GT Pressura Mono Regular Regular.ttf"), fontSize));
text.setFill(Color.BLUE);
text.setX(0);
text.setY(100);
var pane = new Pane(text, new Rectangle(500, 0, 10, 100));
stage.setScene(new Scene(pane, 600, 120));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Jak to, prosím Vás, správně vypočítat?
Děkuji
Jak jsi prisel na to, ze velikost textu = vyska velkych pismenek z fontu?
https://scribus.cz/zakladni-typograficke-pojmy-co-byste-meli-vedet-o-pismu/
Promiňte, špatně jsem se vyjádřil. Chtěl jsem říct, že bych chtěl, aby měla velká písmena tolik pixelů na výšku (v příkladu 100). Jak tuto hodnotu mám definovat respektive jak správně to přepočítat?
No to se právě takhle definovat nedá. Což by ses dozvěděl, kdyby sis přečetl ten článek.
A alespoň přibližně by to nešlo? Nepotřebuji nutně přesnou hodnotu, stačí s odchylkou 1-2px.
Jestli ti chybí 5 px, tak to zvětši zhruba o 5 %. Pokud ale změníš font, tak to zase může být jinak.
Měnit font (ke stažení zde) nebudu, ale nechci kód, který bude závislý pouze na jednom rozlišení. Jenže jsem doteď nepřišel na to, jak kód upravit. Napadá Vás, jak to vypočítat, prosím?
Zapomněl jsem tuhle otázku uzavřít. Lze to vyřešit tímto kódem.
Funguje to jednoduše. Vložím písmeno I, které je asi nejideálnější, umístím do rohu, nastavím libovolnou barvu a potom zvětšuji text do té doby, než se 99 a 100 pixel (od shora) bude lišit. Je to sice primitivní, ale funguje to.
I přesto děkuji za snahu.