Java Graphics.drawLine()不精确:绘制的行太长

时间:2015-02-21 00:31:28

标签: java graphics line

我有一个带顶点(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);

1 个答案:

答案 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描述了一个可能的问题。