用Java绘制对角线

格雷格斯

我有以下代码:

private _x,_y,_w,_h;
protected void paintComponent( Graphics g_ ) {
  g_.setStroke( new BasicStroke(2) );

  g_.drawLine(_x, _y, _x+_w, _y+_h);
  g_.drawLine(_x, _y+_h, _x+_w, _y);
}

就我而言,我正在绘制正方形的对角线,因此:_w==_h

我的问题是,这两行的外观没有相同的厚度:第一行看起来比第二行更粗。检查绘制的实际像素时,这里是渲染的区别:

描边2px

我并不在乎哪一个应该被认为是“正确的”(尽管我想理解这一结果的原因),但是我想在这里保持一定的连贯性,即这两行具有相同的渲染:我该怎么做那?

(当我使用1px笔触时,两行之间没有区别)。

Olavi的答案的后续行动:

对于笔划使用奇数个像素不能解决问题:

描边3px

启用抗锯齿会导致另一个问题:绘制十字的正方形的笔触变得模糊:

描边2px +抗锯齿

奥拉维·穆斯塔诺亚

基本上,您有两种选择:

  1. 使用奇数厚度
  2. 使用抗锯齿

我个人更喜欢抗锯齿,因为它很漂亮,而且我喜欢漂亮的东西。但是,要解释为什么笔划宽度2会表现出这样的行为:Java不知道是用第一种方法还是第二种方法绘制线条(我无法确切解释为什么它会这样做吗,但这就是我知道了)。要进一步阐述此答案,请尝试从左侧或右侧的一个像素开始另一条线:这将导致两条线具有相同的粗细。

要使用抗锯齿,请执行以下操作(未经测试的代码!)。这里获取的代码

Graphics2D graphics2D = (Graphics2D) g_;

graphics2D.setRenderingHint(
        RenderingHints.KEY_ANTIALIASING,
        RenderingHints.VALUE_ANTIALIAS_ON);

graphics2D.drawLine(_x, _y, _x+_w, _y+_h);
graphics2D.drawLine(_x, _y+_h, _x+_w, _y);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章