https://gist.github.com/manojpandey/f5e ... ebebaf66ae
.... but my result is a mile out, tested on: https://www.nixsensor.com/free-color-converter
Code: Select all
Procedure.s RgbToCieLab(iRed.i, iGrn.i, iBlu.i)
;#---------------------------------------------
;Python Code: https://gist.github.com/manojpandey/f5ece715132c572c80421febebaf66ae
;Converter: https://www.nixsensor.com/free-color-converter
Protected dRgbRed.d, dRgbGrn.d, dRgbBlu.d
Protected dXyzRed.d, dXyzGrn.d, dXyzBlu.d
Protected dLabL.d, dLabA.d, dLabB.d
Protected sXyzRed.s, sXyzGrn.s, sXyzBlu.s
Protected sColour.s
dRgbRed = (iRed / 255)
dRgbGrn = (iGrn / 255)
dRgbBlu = (iBlu / 255)
If dRgbRed > 0.04045
dRgbRed = Pow( ((dRgbRed + 0.055) / 1.055), 2.4 )
Else
dRgbRed = dRgbRed / 12.92
dRgbRed = dRgbRed * 100
EndIf
If dRgbGrn > 0.04045
dRgbGrn = Pow( ((dRgbGrn + 0.055) / 1.055), 2.4 )
Else
dRgbGrn = dRgbGrn / 12.92
dRgbGrn = dRgbGrn * 100
EndIf
If dRgbBlu > 0.04045
dRgbBlu = Pow( ((dRgbBlu + 0.055) / 1.055), 2.4 )
Else
dRgbBlu = dRgbBlu / 12.92
dRgbBlu = dRgbBlu * 100
EndIf
dXyzRed = (0.4124240 * dRgbRed) + (0.357579 * dRgbGrn) + (0.1804640 * dRgbBlu) ;0 to 0.9642
dXyzGrn = (0.2126560 * dRgbRed) + (0.715158 * dRgbGrn) + (0.0721856 * dRgbBlu) ;0 to 1.0000
dXyzBlu = (0.0193324 * dRgbRed) + (0.119193 * dRgbGrn) + (0.9504440 * dRgbBlu) ;0 to 0.8252
sXyzRed = StrD(dXyzRed, 4)
sXyzGrn = StrD(dXyzGrn, 4)
sXyzBlu = StrD(dXyzBlu, 4)
dXyzRed = ValD(sXyzRed)
dXyzGrn = ValD(sXyzGrn)
dXyzBlu = ValD(sXyzBlu)
;Observer= 2°, Illuminant= D65
dXyzRed = (dXyzRed / 95.0470) ;ref_X = 95.047
dXyzGrn = (dXyzGrn / 100.000) ;ref_Y = 100.000
dXyzBlu = (dXyzBlu / 108.883) ;ref_Z = 108.883
If(dXyzRed > 0.008856)
dXyzRed = Pow(dXyzRed, 0.3333333333333333)
Else
dXyzRed = (7.787 * dXyzRed) + (16 / 116)
EndIf
If(dXyzGrn > 0.008856)
dXyzGrn = Pow(dXyzGrn, 0.3333333333333333)
Else
dXyzGrn = (7.787 * dXyzGrn) + (16 / 116)
EndIf
If(dXyzBlu > 0.008856)
dXyzBlu = Pow(dXyzBlu, 0.3333333333333333)
Else
dXyzBlu = (7.787 * dXyzBlu) + (16 / 116)
EndIf
Debug "X-->" + StrD(dXyzRed,4) + "<--37.75"
Debug "Y-->" + StrD(dXyzGrn,4) + "<--34.52"
Debug "Z-->" + StrD(dXyzBlu,4) + "<--24.41"
dLabL = (116 * dXyzGrn) - 16 ;0 to 100
dLabA = 500 * (dXyzRed - dXyzGrn) ;-128 to 128
dLabB = 200 * (dXyzGrn - dXyzBlu) ;-128 to 128
sColour = "CIE Lab: " + StrD(dLabL,4) + "," + StrD(dLabA,4) + "," + StrD(dLabB,4)
Debug sColour ;65.37, 16.81, 18.80
ProcedureReturn(sColour)
EndProcedure
RgbToCieLab(199, 147, 126)
End