Как получить ascender / descender и x высота для данного шрифта

Мне нужно жумар/спусковое и x-высота..

используя следующий код, я могу найти спуск и общую высоту:

descender_height = paint.descent();
total_height = descender_height - paint.ascent();
//ascender = ?; is this always equal to descender height?
//x_height = ?; total_height - 2*descender_height ?

спасибо

2 ответов


Я бы подумал, что высота Восходящего и Нисходящего обычно будет одинаковой, но я бы не зависел от нее для каждого шрифта. Я действительно не вижу прямого способа добраться до x-высоты, но трюк, который вы могли бы использовать, будет чем-то вроде ниже. Кроме того, для общей высоты вы говорите об абсолютном расстоянии от самого высокого восходящего до самого низкого нисходящего? Я также включил что-то ниже. Я не проверял это сам, но он должен работать (но дайте мне знать, если я неверно истолковав сказанное вами):

// Assuming TextPaint/Paint tp;
Rect bounds;

// this will just retrieve the bounding rect for 'x'
tp.getTextBounds("x", 0, 1, bounds);
int xHeight = bounds.height();

Paint.FontMetrics metrics = tp.getFontMetrics();
int totalHeight = metrics.top - metrics.bottom;

Это то, что сработало для меня:

Paint.FontMetrics fm = paint.getFontMetrics();
int totalHeight = (int)(fm.bottom - fm.top + .5f);