8
votes

Java: Obtenir une police avec une hauteur spécifique en pixels

Il est facile de déterminer la hauteur rendue d'une police en utilisant FontMetrics , mais qu'en est-il de l'inverse? Comment puis-je obtenir une police qui conviendra à une hauteur spécifique en pixels?

"Donnez-moi Verdana dans une taille de 30 pixels élevés d'Ascendender à Descender."

Comment puis-je demander à Java pour cela?


2 commentaires

Juste curieux - qu'est-ce que tu essayes de faire?


Essayer d'optimiser une disposition de texte pour utiliser la meilleure taille d'affichage disponible


4 Réponses :


6
votes

Je ne pense pas qu'il y ait une façon "directe" de trouver une police par hauteur; Seulement une manière indirecte ... en boucle à travers les tailles et en testant la hauteur de chacun est <= hauteur requise.

Si vous faites cela une fois, il suffit de boucler à travers eux ... Si vous le faites "à la volée", faites une recherche binaire, ce sera plus rapide.


0 commentaires

5
votes

Je ne suis pas au courant d'un moyen d'obtenir une police par sa hauteur réelle en pixels. Cela dépend du contexte qu'il est utilisé pour qu'il n'y a probablement pas de manière plus courte que d'échantillonner pour le meilleur match. Il devrait être assez rapide de rechercher des tailles vers le haut ou le bas de la hauteur conçue. Voici un exemple de méthode qui fait:

public Font getFont(String name, int style, int height) {
    int size = height;
    Boolean up = null;
    while (true) {
        Font font = new Font(name, style, size);
        int testHeight = getFontMetrics(font).getHeight();
        if (testHeight < height && up != Boolean.FALSE) {
            size++;
            up = Boolean.TRUE;
        } else if (testHeight > height && up != Boolean.TRUE) {
            size--;
            up = Boolean.FALSE;
        } else {
            return font;
        }
    }
}


0 commentaires

1
votes

Le code de Whitefang34 est utile en combinaison avec la méthode suivante qui renvoie la hauteur réelle d'une chaîne spécifique. Cela pourrait être un peu lent pour le rendu en temps réel, en particulier pour les grosses polices / cordes et je suis sûr que cela peut être encore optimisé, mais pour l'instant, il répond à mes propres besoins et est assez rapide pour fonctionner dans un processus d'arrière-plan. xxx


0 commentaires

11
votes

Je sais que c'est une très vieille question, mais quelqu'un pourrait toujours le trouver:

La hauteur de la police en Java (et de nombreux autres endroits) est donnée dans" points typographiques ", qui sont définies comme environ 1 / 72nd d'un pouce.

Pour calculer les points nécessaires à une certaine hauteur de pixels, vous devriez pouvoir utiliser les éléments suivants: P>

FontMetrics m= g.getFontMetrics(font); // g is your current Graphics object
double totalSize= fontSize * (m.getAscent() + m.getDescent()) / m.getAscent();


1 commentaires

Merci d'avoir clarifié cela ... Je viens de vérifier et une police de la taille 18F semble être d'environ 1/4 "sur mon moniteur de 30" sur mon moniteur de 30 "à partir du port d'accueil ... et apparaît également 1/4" lorsque j'envoie mon ordinateur portable et Utilisez son écran beaucoup plus petit ... une révélation!