Где начинается источник графической строки? - PullRequest
3 голосов
/ 07 февраля 2012

В основной книге по Java написано

Ширина прямоугольника, который возвращает метод getStringBounds, является горизонтальным экстентом строки.Высота прямоугольника является суммой подъема, спуска и движения.Прямоугольник имеет свое происхождение от базовой линии строки.Верхняя y-координата прямоугольника отрицательна.Таким образом, вы можете получить ширину, высоту и подъем строки следующим образом:

double stringWidth = bounds.getWidth();
double stringHeight = bounds.getHeight();
double ascent = -bounds.getY();

Что автор имеет в виду, когда говорит, что прямоугольник имеет свое происхождение от базовой линии строки, а верхняя часть y-координат это восхождение?

Где начинается ограничивающий прямоугольник строки?

с тестовой строкой я получил следующее:

w: 291.0
h: 91.265625
x:0.0
y:-72.38671875
descent: 15.8203125
leading: 3.0585938

Это означает, что источник прямоугольника находится в начале, а не в начале.базовый уровень, я прав по этому поводу?

Ответы [ 3 ]

5 голосов
/ 07 февраля 2012

Это означает, что координаты границ находятся в пространстве, где нулевая координата Y находится на базовой линии строки, а положительные координаты Y идут вниз.На следующем изображении черная точка соответствует нулю Y:

font metrics

Следовательно, отрицательный bounds.getY() (подъем) соответствует самой верхней координате.И положительный bounds.getHeight() + bounds.getY() (спуск + ведущий) будет соответствовать самой нижней координате в этом координатном пространстве.

4 голосов
/ 07 февраля 2012

Математика получается:

72,38671875 подъем + 15,8203125 спуск + 3,0585938 ведущий = 91,265625 общая высота

В этом учебном пособии по 2D-тексту имеется изображение, иллюстрирующее начало, спуск и подъем.

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

Ограничительный прямоугольник относительно базовой линии. API для FontMetrics.getStringBounds гласит «Возвращенные границы находятся в базовых относительных координатах», что объясняет ваши результаты. x всегда будет 0, а высота ограничительной рамки будет подъемом, спуском и продвижением.

3 голосов
/ 07 февраля 2012

Графическая система координат Java берет свое начало в верхнем правом углу холста, причем координата Y увеличивается сверху вниз . Это означает, что верхний край прямоугольника (возвращаемое значение getY()) будет иметь меньшую Y координату, чем его нижний край (базовая линия текстовой строки).

Значение результата getStringBounds() только в некоторой степени соответствует этому. Хотя система координат соблюдается, начало ограничивающего прямоугольника относится к baseline , а не вверху слева. Это означает, что верхний левый угол прямоугольника будет иметь отрицательную координату Y.

...