使用Java中的点阵列创建PNG图像(始终显示为黑色)

时间:2016-05-13 10:12:10

标签: java bufferedimage graphics2d

我目前有一个一维双阵列,它有50个不同的点,意味着间隔1。我需要通过图像中的线条绘制和连接这些点。目前正在制作PNG图像,如果我添加一个单独的行它将起作用,但不知何故,循环使整个图像变为黑色。关于出了什么问题的任何想法?

BufferedImage bi = new BufferedImage(50, 50, BufferedImage.TYPE_INT_ARGB);

    Graphics2D ig2 = bi.createGraphics();
    ig2.setBackground(Color.white);
    ig2.setColor(Color.red);

    for(int i = 0; i < 49; i++){

        Shape line = new Line2D.Double(i,finalpoints[i],i+1,finalpoints[i+1]);
        ig2.draw(line);

    }

    //Export the result to a file
    try {
        ImageIO.write(bi, "PNG", new File("C://Users/vince/Desktop/heightmap.png"));
    } catch (IOException e) {
        System.out.println("There was an error writing the image to file");

    }

2 个答案:

答案 0 :(得分:0)

有两个重载的Line2D.Double构造函数:第一个使用两个Point2D作为参数,所以如果你的数组包含Point2D对象,你的代码应该是:

 Shape line = new Line2D.Double(finalpoints[i],finalpoints[i+1]);

第二种方法Line2D.Double(double x1,double y1,double x2,double y2) 它需要点的坐标,所以如果你想要第二个,游览代码应该是这样的:

Shape line = new Line2D.Double(finalpoints[i].getX(), finalpoints[i].getY(), finalpoints[i+1].getX(), finalpoints[i+1].getY());

如果您的数组不包含Point2D对象,只需更新您的帖子,以便我们为您提供帮助。

答案 1 :(得分:0)

设置前景色不会填充背景。 此外还需要Graphics.dispose()

BufferedImage bi = new BufferedImage(50, 50, BufferedImage.TYPE_INT_ARGB);

Graphics2D ig2 = bi.createGraphics();
ig2.setBackground(Color.white);
ig2.setColor(Color.white);
ig2.fillRect(0, 0, 50, 50);
ig2.setColor(Color.red);

// Better use a ig2.drawPolyline (Polygon) so the joints are nicer.
for(int i = 0; i < 49; i++){

    Shape line = new Line2D.Double(i,finalpoints[i],i+1,finalpoints[i+1]);
    ig2.draw(line);

}
ig2.dispose();