The Color Conversion C API provides built-in conversion. To do a built-in conversion, follow the steps below:
At the beginning of the Unit1 file, add LTDLLUNT, LTDLLTYP, and LTDLLDEF to the uses section.
Use the following code to perform the built-in conversion:
function TForm1.Builtin_RGBToLAB({in}pSrcRGB, {out}pDstLAB: Pointer; {in}nWidth, {in}nHeight: Integer) : {ret}Integer;varClrHandle : THandle; (* color handle *)params : CONVERSION_PARAMS; (* conversion params *)WPoint : WHITEPOINT ; (* white point definition *)ret : Integer; (* return value *)begin(******************************************************************** Simple conversion from RGB to CIELab using built-in conversion ** Parameters : ** pSrcRGB : 24 bit RGB data, this is the input image data ** pDstLAB : 24 bit CIELab data, this is the output image data ** nWidth : Width of the image ** nHeight : Height of the image ** Returns SUCCESS when successful or error code else ********************************************************************)(* initialize the conversion structure *)ZeroMemory(Pointer(@params), SizeOf(CONVERSION_PARAMS));(* set the whitepoint *)params.pWpoint := @WPoint;(* set up default conversion data *)params.uStructSize := sizeof(CONVERSION_PARAMS);params.pWpoint.nWhitePoint := CIELAB_D50;params.nQuantization := 8;params.nMethod := USE_BUILTIN;params.nActiveMethod := USE_BUILTIN;params.pWpoint.xWhite := 0.0;params.pWpoint.yWhite := 0.0;(* initialize the conversion engine *)ret := L_ClrInit(@ClrHandle,CCS_RGB,CCS_LAB,@params);(* do we have a valid handle *)if ret <> SUCCESS thenResult := retelsebegin(* do the conversion from RGB to CIELab *)ret := L_ClrConvert (ClrHandle,pSrcRGB,pDstLAB,nWidth,nHeight,0,0);if ret <> SUCCESS thenbegin(* free before leaving *)L_ClrFree (ClrHandle);Result := ret;endelsebegin(* do not forget to free every thing *)ret := L_ClrFree (ClrHandle);Result := ret;end;end;end;