如果我有一个bitmapfont,例如;
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中使用的字体大小都会有所帮助。
由于
USECASE
我手动使用带有距离场着色器的纹理。了解纹理自然字体大小非常有用,可以准确地将文本和线高度缩放到任何请求的字体大小,而无需调整图像大小,从而降低质量。
答案 0 :(得分: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的更多信息,请阅读此topic。 与你的32px字体进行了相当多的实验。字符串“W”似乎是29px宽,这是我能找到的最宽的,所以如果要存档的内容大小完全正确,那肯定不准确。
你可以做一个小hacky方法,将.fnt文件作为文本文件读取并在“size =”之后查找Integer,非常像properties文件工作,效率会降低但是会返回确切的值。