我目前有一个一维双阵列,它有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");
}
答案 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();