Java tutorial
//package com.java2s; //License from project: Apache License public class Main { /** * XYZ to sRGB conversion matrix */ public static double[][] Mi = { { 3.2406, -1.5372, -0.4986 }, { -0.9689, 1.8758, 0.0415 }, { 0.0557, -0.2040, 1.0570 } }; /** * Convert XYZ to RGB. * * Convert equation and source code is from ImageJ's plugin Color Space Converter * http://rsbweb.nih.gov/ij/plugins/download/Color_Space_Converter.java * * @param X * @param Y * @param Z * @return RGB in int array. */ private static int[] XYZtoRGB(double X, double Y, double Z) { int[] result = new int[3]; double x = X / 100.0; double y = Y / 100.0; double z = Z / 100.0; // [r g b] = [X Y Z][Mi] double r = (x * Mi[0][0]) + (y * Mi[0][1]) + (z * Mi[0][2]); double g = (x * Mi[1][0]) + (y * Mi[1][1]) + (z * Mi[1][2]); double b = (x * Mi[2][0]) + (y * Mi[2][1]) + (z * Mi[2][2]); // assume sRGB if (r > 0.0031308) { r = ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055); } else { r = (r * 12.92); } if (g > 0.0031308) { g = ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055); } else { g = (g * 12.92); } if (b > 0.0031308) { b = ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055); } else { b = (b * 12.92); } r = (r < 0) ? 0 : r; g = (g < 0) ? 0 : g; b = (b < 0) ? 0 : b; // convert 0..1 into 0..255 result[0] = (int) Math.round(r * 255); result[1] = (int) Math.round(g * 255); result[2] = (int) Math.round(b * 255); return result; } /** * Convert XYZ to RGB * @param XYZ in a double array. * @return RGB in int array. */ private static int[] XYZtoRGB(double[] XYZ) { return XYZtoRGB(XYZ[0], XYZ[1], XYZ[2]); } }