0

如果我有一个位图字体,例如;

fonttexture = new Texture(Gdx.files.internal("data/fonttest.png"), true);
font= new BitmapFont(Gdx.files.internal("data/fonttest.fnt"), 
                     new TextureRegion(fonttexture ), true);

是否可以检索或推断相关 png 纹理文件上使用的自然字体大小?*.fnt 文件本身在第一行指定了这一点;

info face="Calibri Light" size=32 bold=0 italic=0 charset=""

它是我在代码中追求的32 。我在 BitmapFonts 类上看不到直接获取它的方法,但是可以获取各种其他与高度相关的属性。

我尝试从这些中重新创建大小,但运气不佳。

float baseToAssent = font.getCapHeight()+font.getAscent();
float baseToDecent = -font.getDescent();Decent);            
float fontHeight = baseToAssent+baseToDecent;  //too small, like 11 not 32

不是字体设计师?fontophile?...嗯...平面设计师,我可能把这些碎片拼错了,或者只是缺少一个。

在任何一种情况下,计算 fonttest.png 中使用的字体大小的任何方法都会有所帮助。

谢谢

用例

我手动使用带有距离场着色器的纹理。了解纹理的自然字体大小有助于准确地将文本和行高缩放到任何请求的字体大小,而无需调整图像大小并因此降低质量。

4

1 回答 1

0

不确定如何获取特定的字体大小,但是您可以使用GlyphLayout轻松获取字体的字符串宽度和高度,如下所示:

    BitmapFont font = new BitmapFont(Gdx.files.internal("data/fonttest.fnt", false);

    GlyphLayout glyph = new GlyphLayout(font, "TextMessage");
    float width = glyph.width;
    float height = glyph.height;

如果您想了解有关 GlyphLayout 和 BitmapFont 的更多信息,请阅读本主题。尝试了很多 32px 字体,就像你的一样。字符串“W”似乎是 29px 宽,这是我能找到的最宽的,所以如果你想要存档的大小正好是它肯定是不精确的。

您可以做一些 hacky 方法,将 .fnt 文件作为文本文件读取并在“size=”之后查找 Integer,这与属性文件的工作非常相似,它的效率会降低,但会返回准确的值。

于 2016-11-16T01:28:56.950 回答