Как получить естественный размер шрифта для 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=", во многом как работа с файлом свойств, он будет менее эффективным, но будет возвращать точное значение.

Другие вопросы по тегам