/** * */ package neural; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; public class ColorMap { /** * @param data * @param pixelsWidth * @param pixelsHeight * @return * @throws Exception * @see https://josetips.wordpress.com/category/java/ */ public static BufferedImage generateImage(double[][] data, int pixelsWidth, int pixelsHeight) throws Exception { double x = 0, y = 0; BufferedImage bi = new BufferedImage(pixelsWidth, pixelsHeight, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) bi.getGraphics(); int w = data[0].length; int l = data.length; double Dy = (double) pixelsHeight / (double) l; double Dx = (double) pixelsWidth / (double) w; int height = (int) Math.ceil(Dy); int width = (int) Math.ceil(Dx); int gap = (int) Math.ceil(width / 4); double max = -Double.MAX_VALUE; double min = Double.MAX_VALUE; for (int i = 0; i < l; i++) { for (int j = 0; j < w; j++) { max = data[i][j]; if (data[i][j] < min) { min = data[i][j]; } } } float fcolor; float saturation = (float) 0.9; float bright = (float) 0.7; g.setColor(Color.WHITE); g.fillRect(0, 0, pixelsWidth, pixelsHeight); for (int i = 0; i < l; i++) { for (int j = 0; j < w; j++) { fcolor = (float) ((data[i][j] - min) / (max - min)); float hue = fcolor; g.setColor(Color.getHSBColor((float) (hue * 0.7), saturation, bright)); g.fillRect((int) x, (int) y, width - gap, height); x += Dx; } y += Dy; x = 0; } File f = new File("color.png"); try { ImageIO.write(bi, "png", f); } catch (IOException e) { e.printStackTrace(); } g.dispose(); return bi; } public static void main(String[] args) { double[][] data; int pixelsWidth = 300; int pixelsHeight = 400; Random r = new Random(); data = new double[pixelsWidth][]; for (int ndx = 0; ndx < pixelsWidth; ndx++) { data[ndx] = new double[pixelsHeight]; for (int ndx2 = 0; ndx2 < pixelsHeight; ndx2++) { // data[ndx][ndx2] = r.nextDouble(); data[ndx][ndx2] = ndx2; } } try { generateImage(data, pixelsWidth, pixelsHeight); } catch (Exception e) { e.printStackTrace(); } } }