在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
这意味着矩形原点位于前导而不是基线,我对此是否正确?
答案 0 :(得分:5)
这意味着边界的坐标位于零Y坐标位于字符串基线且正Y坐标向下的空间中。在下图中,黑点对应于零Y:
因此,负bounds.getY()
(上升)对应于最顶部的坐标。正bounds.getHeight() + bounds.getY()
(下降+前导)将对应于此坐标空间中的最低坐标。
答案 1 :(得分:4)
数学计算出来了:
72.38671875上升+ 15.8203125下降+ 3.0585938领先= 91.265625总高度
This tutorial on 2D Text有一张图片说明了领先,下降和上升。
在您的具体情况下,72.38671875是上升的高度。这是从基线到最高雕文顶部的测量值。前导是下行器底部到下一行顶部之间的空间。
边界矩形相对于基线。 FontMetrics.getStringBounds
的API指出“返回的边界是基线相对坐标”,它解释了您的结果。 x
将始终为0,并且边界框的高度将是上升加上下降加上前导。
答案 2 :(得分:3)
Java图形坐标系的原点位于画布的右上角,Y坐标从上到下增加 。这意味着矩形的上边缘(getY()
的返回值)将具有小于 Y坐标而不是其下边缘(文本字符串的基线)。
getStringBounds()
的结果值与此略有一致。在遵循坐标系的同时,边界矩形的原点相对于基线,而不是左上角。这意味着矩形的左上角将具有负Y坐标。