powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / как получить параметр шрифта x-height?
10 сообщений из 10, страница 1 из 1
как получить параметр шрифта x-height?
    #38466842
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикрепляю картинку по которой ясно о каком размере речь.

Класс FontMetrics не располагает такой информацией, или я нее смог найти. Можно ли считать верхний "кусочек" равным (asend-xheigth) примерно равным descend для широко распространенных шрифтов?


Мне надо сгенерить хитрую картинку, где много чего подписано. Для этого сначала я решил воспользоваться форматом SVG, но очень быстро выяснилось, что со шрифтами у него не очень. В часности, либа batik не поддерживает возможность на этапе конструирования картинки узнать размер текстовой надписи. Ей подавай для такого рендерер. И еще сам батик не поддерживает аттрибуты dominant-baseline и alignment-baseline и font-size-adjust (сверял с документаций, да, не реализовано). Вобщем, вроде неплохая либа, но недоработано.
Тогда я решил отнаследоваться от JComponent и вроде бы пока даже значительно проще получается. Но не фигню ли я делаю? Может есть еще какая нибудь продвинутая либа, на которую стоит посмотреть? Навскидку гугл ничего не предложил, но может я плохо гуглил? Если не найду как получить этот размер - задаем его жестко, руками.

У JComponent тоже со шрифтами какая-то ерунда. По идеологии JComponent должен сам знать какого он размера, и это прекрасно работает, но как только добавляется шрифт, начинаются странности. Например, размер шрифта можно узнать только из paint и ниже по трассе вызовов, там где есть Graphics, а не зная размера не выставишь правильно width/height, а когда размер не выставлен правильно, то paint может вообще не вызваться, а не вызвав его мы не получим Graphics значит не посчитаем размер. Замкнутый круг.

...
Рейтинг: 0 / 0
как получить параметр шрифта x-height?
    #38467570
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
c JavaFX тоже, кстати, засада. Проект еще очень сырой:

javafx.scene.text.Text t = new javafx.scene.text.Text(10,15, "asdasd");
System.out.println("w="+t.getWrappingWidth() );

выводит w=0.0

То есть картинку можно создать и показать, но сгенерить ее "просто так" нельзя. При этом высоту текста вообще не получить...
...
Рейтинг: 0 / 0
как получить параметр шрифта x-height?
    #38467585
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема не простая. По поводу высоты, единственный вариант который приходит в голову это какой-нибудь парсер TTF.
По поводу отображения, то, конечно нельзя узнать размер шрифта в пикселах не имея графического контекста. Потому что везде используются разные DPI. По этой причине рендеринг шрифтов в винде, в яве, на маке - везде разный и размеры одного и того же текста будут разными
...
Рейтинг: 0 / 0
как получить параметр шрифта x-height?
    #38467698
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Достать из FontMetrics xheight не получится, хотя можно попробовать поработать с FontRendererContext, может оттуда чего сможете вытащить.
Насколько я знаю, для большинства шрифтов справедливо:
Высота средней линии относительно базовой равна xheight. В свою очередь среднюю линию можно найти разделив на два расстояние от базовой линии до cap height. В качестве cap height можно использовать высоту из FontMetrics.getHeight()

chabapok Можно ли считать верхний "кусочек" равным (asend-xheigth) примерно равным descend для широко распространенных шрифтов?
Не думаю. В разных шрифтах эти величины имеют разные пропорции. Особенно это касается всяких иероглифов, где часто асцендер находится на одном уровне со средней линией.
...
Рейтинг: 0 / 0
как получить параметр шрифта x-height?
    #38467702
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapok, интересно существует-ли вообще такой параметр как x-height
применительно ко всему шрифту или он задаётся персонально для каждой буквы
или для всего фонта для файла или ещё для бог знает какого домена данных.

Под катом
Microsoft публикует формат здесь

http://www.microsoft.com/typography/otspec/default.htm
...
Рейтинг: 0 / 0
как получить параметр шрифта x-height?
    #38467841
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разные dpi? а шрифт исходно задан в дюймах или в точках? Я так понимаю, если в дюймах, то без контекста узнать размер шрифта в точках нельзя, а если изначально шрифт задан в точках - можно. Ну да, похоже что в em-ах он задан. Луч поноса тем кто это придумал.

Всем спасибо.

Вобью эти высоты жестко руками, для тех шрифтов что использую, и не буду парить мозг.

а еще, без контекста вот так получается метрику получить:
FontMetrics fm = sun.font.FontDesignMetrics.getMetrics(font);

А вот можно ли из jdk закинуть FontDesignMetrics и зависимые классы в свой проект, чтоб точно в будущем не иметь проблем с приватным api - не знаю.
...
Рейтинг: 0 / 0
как получить параметр шрифта x-height?
    #38468930
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonchabapok, интересно существует-ли вообще такой параметр как x-height
применительно ко всему шрифту или он задаётся персонально для каждой буквыTeX задаёт em и ex как обязательные параметры шрифта . Что вполне логично.
...
Рейтинг: 0 / 0
как получить параметр шрифта x-height?
    #38468934
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovmaytonchabapok, интересно существует-ли вообще такой параметр как x-height
применительно ко всему шрифту или он задаётся персонально для каждой буквыTeX задаёт em и ex как обязательные параметры шрифта . Что вполне логично.
А Tex работает с TrueType или у него свой набор шрифтов?
...
Рейтинг: 0 / 0
как получить параметр шрифта x-height?
    #38468936
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Свой формат.
...
Рейтинг: 0 / 0
как получить параметр шрифта x-height?
    #38468942
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА Tex работает с TrueType или у него свой набор шрифтов?TeX вообще не работает со шрифтами. Только с их метриками. Соответственно, если есть конвертор метрик из TT в TeXовские ...
Только вряд ли - TeX-у требуется минимум шесть параметров для "обычных" шрифтов и минимум двенадцать - для "математических". Плюс доп.параметры для "больших математических операторов", плюс "последовательности" для, опять-таки, математических символов разных размеров плюс нерасширяемость на юникод и прочая.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / как получить параметр шрифта x-height?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]