Java tutorial
//package com.java2s; //License from project: Apache License public class Main { /** * sRGB to XYZ conversion matrix */ public static double[][] M = { { 0.4124, 0.3576, 0.1805 }, { 0.2126, 0.7152, 0.0722 }, { 0.0193, 0.1192, 0.9505 } }; /** * Convert RGB to XYZ * * 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 R * @param G * @param B * @return XYZ in double array. */ public static double[] RGBtoXYZ(int R, int G, int B) { double[] result = new double[3]; // convert 0..255 into 0..1 double r = R / 255.0; double g = G / 255.0; double b = B / 255.0; // assume sRGB if (r <= 0.04045) { r = r / 12.92; } else { r = Math.pow(((r + 0.055) / 1.055), 2.4); } if (g <= 0.04045) { g = g / 12.92; } else { g = Math.pow(((g + 0.055) / 1.055), 2.4); } if (b <= 0.04045) { b = b / 12.92; } else { b = Math.pow(((b + 0.055) / 1.055), 2.4); } r *= 100.0; g *= 100.0; b *= 100.0; // [X Y Z] = [r g b][M] result[0] = (r * M[0][0]) + (g * M[0][1]) + (b * M[0][2]); result[1] = (r * M[1][0]) + (g * M[1][1]) + (b * M[1][2]); result[2] = (r * M[2][0]) + (g * M[2][1]) + (b * M[2][2]); return result; } /** * Convert RGB to XYZ * * 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 RGB * @return XYZ in double array. */ private static double[] RGBtoXYZ(int[] RGB) { return RGBtoXYZ(RGB[0], RGB[1], RGB[2]); } }