我有一个多维 int 数组,它有一个“0”或一个“1”。我想创建一个类似于热图的图像。具有“0”的元素将具有一种颜色,而具有“1”的元素将具有另一种颜色。例如
int [][] test = {{0,0,1}, {1,1,0}, {1,1,1}}
我会得到一个“3 x 3”的图像,有点像这样。
wwr
rrw
rrr
其中白色表示白色,r 表示红色。
感谢您的任何建议。
setRGB()
或getRaster()
方法对此BufferedImage
很有效。此处引用的示例使用SwingWorker
,并且此示例使用Runnable
线程。
鉴于您的值都是 1 和 0,为什么不使用二维布尔数组?这将节省空间并使 if 语句更简单。
然后,您可以根据需要使用 Java 的 Graphics2D 包来绘制这些点!
这就是我喜欢设置我的 Graphics2D 实例的方式:
private static BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
private static Graphics2D g = image.createGraphics();
然后通过执行以下操作绘制图像:
g.drawLine(x1, y1, x2, y2);
并使用以下方法保存文件:
private static void saveToFile(){
try {
ImageIO.write(image, "png", new File("map.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
看看Java2D。
基本上,您想为像素颜色创建一个 2d int 数组并将它们绘制到图像上。查看 Graphics 和 Graphics2D 对象以及 BufferedImage 等。然后使用 Java ImageIO 将图像写入文件。