| 307 | // double var_X = lab[1] / 500 + var_Y; |
| 308 | // double var_Z = var_Y - lab[2] / 200.0; |
| 309 | static private double[] labToXyz(double el, double ay, double be) { |
| 310 | double var_Y = (el + 16) / 116; |
| 311 | double var_X = ay / 500 + var_Y; |
| 312 | double var_Z = var_Y - be / 200; |
| 313 | |
| 314 | // if ( var_Y^3 > 0.008856 ) var_Y = var_Y^3 |
| 315 | // else var_Y = ( var_Y - 16 / 116 ) / 7.787 |
| 316 | // if ( var_X^3 > 0.008856 ) var_X = var_X^3 |
| 317 | // else var_X = ( var_X - 16 / 116 ) / 7.787 |
| 318 | // if ( var_Z^3 > 0.008856 ) var_Z = var_Z^3 |
| 319 | // else var_Z = ( var_Z - 16 / 116 ) / 7.787 |
| 320 | |
| 321 | final double amt = Math.pow(0.008856, 1/3.0); |
| 322 | var_Y = (var_Y > amt) ? |
| 323 | Math.pow(var_Y, 3) : (var_Y - 16/116.0) / 7.787; |
| 324 | var_X = (var_X > amt) ? |
| 325 | Math.pow(var_X, 3) : (var_X - 16/116.0) / 7.787; |
| 326 | var_Z = (var_Z > amt) ? |
| 327 | Math.pow(var_Z, 3) : (var_Z - 16/116.0) / 7.787; |
| 328 | |
| 329 | // X = ref_X * var_X //ref_X = 95.047 Observer= 2°, Illuminant= D65 |
| 330 | // Y = ref_Y * var_Y //ref_Y = 100.000 |
| 331 | // Z = ref_Z * var_Z //ref_Z = 108.883 |
| 332 | return new double[] { |
| 333 | REF_X * var_X, |
| 334 | REF_Y * var_Y, |
| 335 | REF_Z * var_Z |
| 336 | }; |
| 337 | } |
| 338 | |
| 339 | |
| 340 | static private double[] xzyToRgb(double[] xyz) { |