Java Graphics.drawLine() 不准确:绘制的线条太长
Java Graphics.drawLine() inexact: drawn lines are too long
我有一个顶点为 (0,0)、(100,0)、(100,100) 和 (0,100) 的多边形。
我调试了程序,这些正是 java 正在绘制的行。
不是绘制一个精确的正方形,而是一些线条太长了一个像素:
http://gyazo.com/7418546c51c9a10fc690b18afcc96360.png
(绿色圆圈只是我在测试质心)。
当我将正方形移出角时,您可以看到左上角是唯一完全正确的角。
为什么会这样?
就在drawLine之前,我把线条转换成整数坐标后写到控制台,它们是正确的。所以除了 drawLine 函数之外,我看不出有什么可能是错误的。
画线:
g.drawLine((int) line.getStart().getX(), (int) line.getStart().getY(),
(int) line.getEnd().getX(), (int) line.getEnd().getY());
这条线有一个起始向量和一个结束向量。向量包含 x 和 y。
即使这样做:
g.drawLine(0, 0, 100, 0);
g.drawLine(100, 0, 100, 100);
g.drawLine(100, 100, 0, 100);
g.drawLine(0, 100, 0, 0);
它仍然产生相同的结果。
这虽然有效:
g.drawLine(0, 0, 100, 0);
g.drawLine(101, 0, 101, 100);
g.drawLine(100, 101, 0, 101);
g.drawLine(0, 100, 0, 0);
您提供的示例有效:
BufferedImage bi = new BufferedImage(200, 200, BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.getGraphics();
g.fillRect(0, 0, bi.getWidth(), bi.getHeight());
g.setColor(Color.red);
g.translate(50, 50);
g.drawLine(0, 0, 100, 0);
g.drawLine(100, 0, 100, 100);
g.drawLine(100, 100, 0, 100);
g.drawLine(0, 100, 0, 0);
JOptionPane.showMessageDialog(null, new ImageIcon(bi));
有一个错误 https://bugs.openjdk.java.net/browse/JDK-8049901 描述了一个可能的问题。
我有一个顶点为 (0,0)、(100,0)、(100,100) 和 (0,100) 的多边形。
我调试了程序,这些正是 java 正在绘制的行。
不是绘制一个精确的正方形,而是一些线条太长了一个像素:
http://gyazo.com/7418546c51c9a10fc690b18afcc96360.png
(绿色圆圈只是我在测试质心)。
当我将正方形移出角时,您可以看到左上角是唯一完全正确的角。
为什么会这样?
就在drawLine之前,我把线条转换成整数坐标后写到控制台,它们是正确的。所以除了 drawLine 函数之外,我看不出有什么可能是错误的。
画线:
g.drawLine((int) line.getStart().getX(), (int) line.getStart().getY(),
(int) line.getEnd().getX(), (int) line.getEnd().getY());
这条线有一个起始向量和一个结束向量。向量包含 x 和 y。
即使这样做:
g.drawLine(0, 0, 100, 0);
g.drawLine(100, 0, 100, 100);
g.drawLine(100, 100, 0, 100);
g.drawLine(0, 100, 0, 0);
它仍然产生相同的结果。 这虽然有效:
g.drawLine(0, 0, 100, 0);
g.drawLine(101, 0, 101, 100);
g.drawLine(100, 101, 0, 101);
g.drawLine(0, 100, 0, 0);
您提供的示例有效:
BufferedImage bi = new BufferedImage(200, 200, BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.getGraphics();
g.fillRect(0, 0, bi.getWidth(), bi.getHeight());
g.setColor(Color.red);
g.translate(50, 50);
g.drawLine(0, 0, 100, 0);
g.drawLine(100, 0, 100, 100);
g.drawLine(100, 100, 0, 100);
g.drawLine(0, 100, 0, 0);
JOptionPane.showMessageDialog(null, new ImageIcon(bi));
有一个错误 https://bugs.openjdk.java.net/browse/JDK-8049901 描述了一个可能的问题。