我有一个带顶点(0,0),(100,0),(100,100)和(0,100)的多边形。
我调试了程序,这些是java绘制的确切行。
有些线条不是绘制精确的正方形,而是像素太长:
http://gyazo.com/7418546c51c9a10fc690b18afcc96360.png
(绿色圆圈只是我测试质心)。
当我将角落移出角落时,您可以看到左上角是唯一正确的角落。
为什么会这样?
就在drawLine之前,我将这些行在转换为整数坐标后写入控制台,并且它们是正确的。所以除了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);
答案 0 :(得分:2)
您提供的示例正在运行:
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描述了一个可能的问题。