2011-06-01 15 views
11

FontMetrics no tiene getters para cap height y x-height de una fuente.Java: ¿cómo se puede saber la altura de la tapa y la altura x de una fuente?

¿Cómo puedo obtener estos valores?

En lo que a la altura de la tapa va, no hay garantía de una letra mayúscula en particular que el ascenso de la carta es la misma que la altura de las mayúsculas. (Por ejemplo, una H mayúscula, no se garantiza que sea plana en la parte superior)

En lo que x altura va, yo supongo que es probablemente la misma que la altura de una "x", pero de nuevo, no hay garantía .


edición: Grr! Acabo de probar FontMetrics.getBounds() y FontMetrics.getLineMetrics() para secuencias de caracteres específicos, y siempre obtengo la misma respuesta para las alturas (getBounds() difiere para los anchos, obviamente). Hay una nota en el método hasUniformLineMetrics() sobre una fuente métrica que tiene varias fuentes para cubrir el conjunto de caracteres, pero que abarca los grupos de caracteres, no los caracteres individuales.

+0

Existe una interfaz 'java.awt.font.OpenType' que podría ser utilizado para recuperar tablas de fuentes, y así conseguir el 'x-height' definido por la fuente. Sin embargo, esa interfaz no se usa aparentemente: http://stackoverflow.com/questions/33716004/how-do-i-use-the-opentype-interface-in-java – HRJ

Respuesta

0

No he trabajado con él, pero la clase GlyphView.GlyphPainter tiene getAscent, getDescent y getHeight métodos. Eso podría ser algo para ver.

0

Bueno, si usted está tratando de hacer una caja con el texto que se ajusta el texto, creo que se puede hacer simplemente la altura del tamaño de la fuente en sí

No estoy seguro, pero creo que eso es lo que i' he hecho en el pasado

2

Lo que está buscando es el cuadro de representación de la pantalla que le dice el tamaño exacto del texto.

Esto significa que deberá proporcionar información en algún momento sobre la superficie que está dibujando y la cadena que está dibujando. La razón es que el sistema simplemente no conoce el resultado visual hasta tarde en la renderización. Me utilizado:

Graphics2D g; 
g.getFont().createGlyphVector(g.getFontRenderContext(),"abc").getVisualBounds(); 

También puede intentar:

Graphics2D g; 
g.getFont().getMaxCharBounds(g.getFontRenderContext()); 

también tengo problemas para mantener todos esos métodos de fuente recta.

0

En cuanto a la altura de la x, el siguiente código woks bien para mí:

public double getXHeight(Font font) 
    { 
     FontRenderContext fc = new FontRenderContext(null, false, false); 
     TextLayout layout = new TextLayout("x", font, fc); 
     return layout.getBounds().getHeight(); 
    } 
+0

Lamento ser pedante, pero el colmo de un " x "character" no es necesariamente el mismo que el x-height de un tipo de letra. –

Cuestiones relacionadas