为什么Graphics的draw方法不考虑笔划属性?
题
我想创建一个带有圆角的自定义边框。
代码- 通用标签
结果-
如您所见,Graphics.drawRect
完全忽略了BasicStroke.CAP_ROUND
和BasicStroke.JOIN_ROUND
属性。为什么?
解决方案
java.awt.BasicStroke.CAP_ROUND
:这使圆帽以端点为中心,直径为笔宽。关键字是“居中”。我相信,在使用粗笔画进行绘制时,Java2D总是会在假设像素的起点和终点坐标之间的无穷细线处将线的粗线居中。例如,当绘制一条7像素粗的垂直蓝线时,Java2D在所绘制的假设线段的每一侧都绘制3像素。
在您的示例中,厚度为5像素。您需要偏移坐标才能在图形剪辑中完全绘制笔划。通过移动2个像素(或
THICKNESS/2
),可以看到圆角:通用标签
其他提示
问题是偏移量:您有效地切除了中间的边框,因此拐角处似乎没有圆角。考虑到这一点(此处仅针对偏移量,还需要调整宽度) 通用标签
修改
固定的草率像素计数:-)
不隶属于 StackOverflow