XYZColour const XYZColour::from (Colour const& sRGB) { float r = sRGB.getRed () / 255.f; float g = sRGB.getGreen () / 255.f; float b = sRGB.getBlue () / 255.f; if (r > 0.04045f) r = 100.f * pow ((r + 0.055f) / 1.055f, 2.4f); else r = r / 12.92f; if (g > 0.04045f) g = 100.f * pow ((g + 0.055f) / 1.055f, 2.4f); else g = g / 12.92f; if (b > 0.04045f) b = 100.f * pow ((b + 0.055f) / 1.055f, 2.4f); else b = b / 12.92f; // D65 float x = r * 0.4124f + g * 0.3576f + b * 0.1805f; float y = r * 0.2126f + g * 0.7152f + b * 0.0722f; float z = r * 0.0193f + g * 0.1192f + b * 0.9505f; return XYZColour (x, y, z, sRGB.getAlpha() / 255.f); }