Eric, sorry for the confusion, I think I wrote it too quick:
Guillaume's library uses sRGB with D65 white ref. If you want to continue using that conversion, then just copy/paste RGBtoXYZ
and XYZtoRGB
into your code.
- you get a correct code
- the calculation is more precise with the expanded constants.
If you would like a conversion which is very similar to Adobe's, then you need to do the other proposed changes as well: RGB Bradford at D50.
Here is the ready copy/paste XYZtoRGB
for RGB Bradford:
public static RGB XYZtoRGB(double x, double y, double z)
{
double[] Clinear = new double[3];
Clinear[0] = x*3.1338561 - y*1.6168667 - z*0.4906146;
Clinear[1] = -x*0.9787684 + y*1.9161415 + z*0.0334540;
Clinear[2] = x*0.0719453 - y*0.2289914 + z*1.4052427;
for(int i=0; i<3; i++)
{
Clinear[i] = (Clinear[i]<=0.0031308)? 12.92*Clinear[i] :
(1+0.055)* Math.Pow(Clinear[i], (1.0/2.4)) - 0.055;
Clinear[i] *= 255.0;
}
return new RGB((int)Clinear[0], (int)Clinear[1], (int)Clinear[2]);
}
If you need help for the rest, just shout.
Rob
BTW, you can make a chicken fly, it all depends on the height of the building...
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.