Как получить естественный размер шрифта для 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=""
Это то, что я в коде. Я не смог увидеть метод в классе 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;
Я вручную использую эту текстуру с шейдером поля расстояния. Знание текстур естественного размера шрифта полезно для точного масштабирования текста и высоты строки до любого требуемого размера шрифта без изменения размера изображения и, следовательно, потери качества.
1 ответ
Не уверен, как получить конкретный размер шрифта, однако вы можете легко получить ширину и высоту строки шрифта, используя 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", казалось, имела ширину 29 пикселей, что было самым широким, что я мог найти, поэтому точно не точно, если вы хотите заархивировать, точно такого размера.
Вы могли бы сделать небольшой хакерский метод, читая файл.fnt как текстовый файл и ища Integer после "size=", во многом как работа с файлом свойств, он будет менее эффективным, но будет возвращать точное значение.