package ie.dcu.swt; import ie.dcu.image.colormap.*; import ie.dcu.matrix.*; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.PaletteData; /** * Visualize matrices using color maps. * * @author Kevin McGuinness */ public class MatrixVisualizer { private ColorMap colorMap; public MatrixVisualizer() { this(ColorMaps.hot()); } public MatrixVisualizer(ColorMap map) { setColorMap(map); } public ColorMap getColorMap() { return colorMap; } public void setColorMap(ColorMap map) { if (map == null) { throw new IllegalArgumentException("colorMap == null"); } this.colorMap = map; } public ImageData createVisualization(Matrix matrix) { return visualize(matrix.toDoubleMatrix()); } private ImageData visualize(DoubleMatrix matrix) { rescale(matrix); PaletteData palette = colorMap.createPaletteData(); ImageData image = new ImageData(matrix.cols, matrix.rows, 8, palette); int n = colorMap.size(); for (int i = 0; i < matrix.rows; i++) { int k = i * matrix.cols; for (int j = 0; j < matrix.cols; j++, k++) { int value = (int) (matrix.values[k] * (n-1)); image.setPixel(j, i, value); } } return image; } private void rescale(DoubleMatrix matrix) { double min = matrix.minValue(); double max = matrix.maxValue(); double range = max - min; if (range == 0) { range = 1; } for (int i = 0; i < matrix.size; i++) { matrix.values[i] = (matrix.values[i] + min) / range; } } }