2011-07-07 47 views
2

我有一个多维的int数组,它具有'0'或'1'。我想创建一个类似于热图的图像。具有“0”的元素将是一种颜色,而“1”将是另一种颜色。 例如使用Java数组的热图图像

int [][] test = {{0,0,1}, {1,1,0}, {1,1,1}} 

我会得到的“3×3”的形象,有点像这样。

wwr 
rrw 
rrr 

其中白色表示白色和红色。

感谢您的任何建议。

+0

Java 2D? http://java.sun.com/products/java-media/2D/index.jsp –

+0

这应该是更清晰然后 –

回答

3

setRGB()getRaster()方法BufferedImage适用于此。引用的示例为here,使用SwingWorker,并且这个example使用Runnable线程。

image

+0

这不会踢你的屁股表现明智,因为它会放弃加速? – mre

+0

@little:是的,但我认为问题中没有足够的信息来通知更有效的填充栅格的方法。作为一个实际问题,这个例子使我的系统达到了〜50赫兹,但是当事件合并时性能会降低。 – trashgod

1

看一看Java2D

基本上你想要为像素颜色创建一个2d int数组并将它们绘制到图像上。看看Graphics和Graphics2D对象以及BufferedImage等等。然后使用Java ImageIO将图像写入文件。

1

鉴于你的价值都为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(); 
     } 
    }