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

使用Java中的点数组创建PNG图像(始终显示为黑色),java,bufferedimage,graphics2d,Java,Bufferedimage,Graphics2d,我现在有一个一维双数组,包含50个不同的点,它们的间距为1。我需要这些点被画出来,并通过图像中的线连接起来。目前正在生成PNG图像,如果我添加一行,它将正常工作,但不知何故,循环会使整个图像变成黑色。有什么问题吗 BufferedImage bi = new BufferedImage(50, 50, BufferedImage.TYPE_INT_ARGB); Graphics2D ig2 = bi.createGraphics(); ig2.setBackground(Col

我现在有一个一维双数组,包含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");

    }
BufferedImage bi=新的BufferedImage(50,50,BufferedImage.TYPE_INT_ARGB);
Graphics2D ig2=bi.createGraphics();
ig2.立根背景(颜色:白色);
ig2.setColor(颜色为红色);
对于(int i=0;i<49;i++){
造型线=新线条2D.双(i,最终点[i],i+1,最终点[i+1]);
ig2.画(线);
}
//将结果导出到文件
试一试{
write(bi,“PNG”,新文件(“C://Users/vince/Desktop/heightmap.PNG”);
}捕获(IOE异常){
System.out.println(“将图像写入文件时出错”);
}

有两个重载的Line2D。双构造函数:第一个构造函数将两个Point2D作为参数,因此如果数组包含Point2D对象,则代码应为:

 Shape line = new Line2D.Double(finalpoints[i],finalpoints[i+1]);
第二种方法是Line2D.Double(双x1、双y1、双x2、双y2) 它需要点的坐标,所以如果你想要第二个,巡更代码应该是这样的:

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

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

设置前景色不会填充背景。 还需要一个
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();
BufferedImage bi=新的BufferedImage(50,50,BufferedImage.TYPE_INT_ARGB);
Graphics2D ig2=bi.createGraphics();
ig2.立根背景(颜色:白色);
ig2.setColor(Color.white);
ig2.fillRect(0,0,50,50);
ig2.setColor(颜色为红色);
//最好使用ig2.Draw多段线(多边形),以便关节更好。
对于(int i=0;i<49;i++){
造型线=新线条2D.双(i,最终点[i],i+1,最终点[i+1]);
ig2.画(线);
}
ig2.dispose();

您的点是否都在为图像设置的10x10尺寸范围内?它实际上在50x50尺寸的图像范围内。尺寸不会改变输出。“最终点”数组中的值是什么?所有值都在-3和3之间加倍。可能先尝试将数据转换为点,渲染部分正常,例如,
Point[]最终点=新点[50];最终点[0]=新点();对于(int i=1;i