You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
992 lines
43 KiB
992 lines
43 KiB
//
|
|
// Little cms DELPHI wrapper
|
|
// Copyright (C) 1998-2005 Marti Maria
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining
|
|
// a copy of this software and associated documentation files (the "Software"),
|
|
// to deal in the Software without restriction, including without limitation
|
|
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
// and/or sell copies of the Software, and to permit persons to whom the Software
|
|
// is furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
|
// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
// ver 1.15
|
|
|
|
UNIT lcmsdll;
|
|
|
|
INTERFACE
|
|
|
|
USES Windows;
|
|
|
|
CONST
|
|
|
|
// Intents
|
|
|
|
INTENT_PERCEPTUAL = 0;
|
|
INTENT_RELATIVE_COLORIMETRIC = 1;
|
|
INTENT_SATURATION = 2;
|
|
INTENT_ABSOLUTE_COLORIMETRIC = 3;
|
|
|
|
// Flags
|
|
|
|
cmsFLAGS_MATRIXINPUT = $0001;
|
|
cmsFLAGS_MATRIXOUTPUT = $0002;
|
|
cmsFLAGS_MATRIXONLY = (cmsFLAGS_MATRIXINPUT OR cmsFLAGS_MATRIXOUTPUT);
|
|
|
|
cmsFLAGS_NOPRELINEARIZATION = $0010; // Don't create prelinearization tables
|
|
// on precalculated transforms (internal use)
|
|
|
|
cmsFLAGS_NOTPRECALC = $0100;
|
|
cmsFLAGS_NULLTRANSFORM = $0200; // Don't transform anyway
|
|
cmsFLAGS_HIGHRESPRECALC = $0400; // Use more memory to give better accurancy
|
|
cmsFLAGS_LOWRESPRECALC = $0800; // Use less memory to minimize resouces
|
|
|
|
|
|
cmsFLAGS_GAMUTCHECK = $1000; // Mark Out of Gamut as alarm color (on proofing transform)
|
|
cmsFLAGS_SOFTPROOFING = $4000; // Softproof of proofing profile
|
|
|
|
cmsFLAGS_WHITEBLACKCOMPENSATION = $2000;
|
|
cmsFLAGS_BLACKPOINTCOMPENSATION = $2000;
|
|
|
|
cmsFLAGS_NODEFAULTRESOURCEDEF = $10000; // PostScript
|
|
|
|
// Format descriptors
|
|
|
|
|
|
TYPE_GRAY_8 = $30009;
|
|
TYPE_GRAY_8_REV = $32009;
|
|
TYPE_GRAY_16 = $3000A;
|
|
TYPE_GRAY_16_REV = $3200A;
|
|
TYPE_GRAY_16_SE = $3080A;
|
|
TYPE_GRAYA_8 = $30089;
|
|
TYPE_GRAYA_16 = $3008A;
|
|
TYPE_GRAYA_16_SE = $3088A;
|
|
TYPE_GRAYA_8_PLANAR = $31089;
|
|
TYPE_GRAYA_16_PLANAR = $3108A;
|
|
TYPE_RGB_8 = $40019;
|
|
TYPE_RGB_8_PLANAR = $41019;
|
|
TYPE_BGR_8 = $40419;
|
|
TYPE_BGR_8_PLANAR = $41419;
|
|
TYPE_RGB_16 = $4001A;
|
|
TYPE_RGB_16_PLANAR = $4101A;
|
|
TYPE_RGB_16_SE = $4081A;
|
|
TYPE_BGR_16 = $4041A;
|
|
TYPE_BGR_16_PLANAR = $4141A;
|
|
TYPE_BGR_16_SE = $40C1A;
|
|
TYPE_RGBA_8 = $40099;
|
|
TYPE_RGBA_8_PLANAR = $41099;
|
|
TYPE_RGBA_16 = $4009A;
|
|
TYPE_RGBA_16_PLANAR = $4109A;
|
|
TYPE_RGBA_16_SE = $4089A;
|
|
TYPE_ARGB_8 = $44099;
|
|
TYPE_ARGB_16 = $4409A;
|
|
TYPE_ABGR_8 = $40499;
|
|
TYPE_ABGR_16 = $4049A;
|
|
TYPE_ABGR_16_PLANAR = $4149A;
|
|
TYPE_ABGR_16_SE = $40C9A;
|
|
TYPE_BGRA_8 = $44499;
|
|
TYPE_BGRA_16 = $4449A;
|
|
TYPE_BGRA_16_SE = $4489A;
|
|
TYPE_CMY_8 = $50019;
|
|
TYPE_CMY_8_PLANAR = $51019;
|
|
TYPE_CMY_16 = $5001A;
|
|
TYPE_CMY_16_PLANAR = $5101A;
|
|
TYPE_CMY_16_SE = $5081A;
|
|
TYPE_CMYK_8 = $60021;
|
|
TYPE_CMYK_8_REV = $62021;
|
|
TYPE_YUVK_8 = $62021;
|
|
TYPE_CMYK_8_PLANAR = $61021;
|
|
TYPE_CMYK_16 = $60022;
|
|
TYPE_CMYK_16_REV = $62022;
|
|
TYPE_YUVK_16 = $62022;
|
|
TYPE_CMYK_16_PLANAR = $61022;
|
|
TYPE_CMYK_16_SE = $60822;
|
|
TYPE_KYMC_8 = $60421;
|
|
TYPE_KYMC_16 = $60422;
|
|
TYPE_KYMC_16_SE = $60C22;
|
|
TYPE_KCMY_8 = $64021;
|
|
TYPE_KCMY_8_REV = $66021;
|
|
TYPE_KCMY_16 = $64022;
|
|
TYPE_KCMY_16_REV = $66022;
|
|
TYPE_KCMY_16_SE = $64822;
|
|
TYPE_CMYKcm_8 = $0031;
|
|
TYPE_CMYKcm_8_PLANAR = $1031;
|
|
TYPE_CMYKcm_16 = $0032;
|
|
TYPE_CMYKcm_16_PLANAR = $1032;
|
|
TYPE_CMYKcm_16_SE = $0832;
|
|
TYPE_CMYK7_8 = $0039;
|
|
TYPE_CMYK7_16 = $003A;
|
|
TYPE_CMYK7_16_SE = $083A;
|
|
TYPE_KYMC7_8 = $0439;
|
|
TYPE_KYMC7_16 = $043A;
|
|
TYPE_KYMC7_16_SE = $0C3A;
|
|
TYPE_CMYK8_8 = $0041;
|
|
TYPE_CMYK8_16 = $0042;
|
|
TYPE_CMYK8_16_SE = $0842;
|
|
TYPE_KYMC8_8 = $0441;
|
|
TYPE_KYMC8_16 = $0442;
|
|
TYPE_KYMC8_16_SE = $0C42;
|
|
TYPE_CMYK9_8 = $0049;
|
|
TYPE_CMYK9_16 = $004A;
|
|
TYPE_CMYK9_16_SE = $084A;
|
|
TYPE_KYMC9_8 = $0449;
|
|
TYPE_KYMC9_16 = $044A;
|
|
TYPE_KYMC9_16_SE = $0C4A;
|
|
TYPE_CMYK10_8 = $0051;
|
|
TYPE_CMYK10_16 = $0052;
|
|
TYPE_CMYK10_16_SE = $0852;
|
|
TYPE_KYMC10_8 = $0451;
|
|
TYPE_KYMC10_16 = $0452;
|
|
TYPE_KYMC10_16_SE = $0C52;
|
|
TYPE_CMYK11_8 = $0059;
|
|
TYPE_CMYK11_16 = $005A;
|
|
TYPE_CMYK11_16_SE = $085A;
|
|
TYPE_KYMC11_8 = $0459;
|
|
TYPE_KYMC11_16 = $045A;
|
|
TYPE_KYMC11_16_SE = $0C5A;
|
|
TYPE_CMYK12_8 = $0061;
|
|
TYPE_CMYK12_16 = $0062;
|
|
TYPE_CMYK12_16_SE = $0862;
|
|
TYPE_KYMC12_8 = $0461;
|
|
TYPE_KYMC12_16 = $0462;
|
|
TYPE_KYMC12_16_SE = $0C62;
|
|
|
|
TYPE_XYZ_16 = $9001A;
|
|
TYPE_Lab_8 = $A0019;
|
|
TYPE_LabA_8 = $A0099;
|
|
TYPE_Lab_16 = $A001A;
|
|
TYPE_Yxy_16 = $E001A;
|
|
TYPE_YCbCr_8 = $70019;
|
|
TYPE_YCbCr_8_PLANAR = $71019;
|
|
TYPE_YCbCr_16 = $7001A;
|
|
TYPE_YCbCr_16_PLANAR = $7101A;
|
|
TYPE_YCbCr_16_SE = $7081A;
|
|
TYPE_YUV_8 = $80019;
|
|
TYPE_YUV_8_PLANAR = $81019;
|
|
TYPE_YUV_16 = $8001A;
|
|
TYPE_YUV_16_PLANAR = $8101A;
|
|
TYPE_YUV_16_SE = $8081A;
|
|
TYPE_HLS_8 = $D0019;
|
|
TYPE_HLS_8_PLANAR = $D1019;
|
|
TYPE_HLS_16 = $D001A;
|
|
TYPE_HLS_16_PLANAR = $D101A;
|
|
TYPE_HLS_16_SE = $D081A;
|
|
TYPE_HSV_8 = $C0019;
|
|
TYPE_HSV_8_PLANAR = $C1019;
|
|
TYPE_HSV_16 = $C001A;
|
|
TYPE_HSV_16_PLANAR = $C101A;
|
|
TYPE_HSV_16_SE = $C081A;
|
|
TYPE_NAMED_COLOR_INDEX = $000A;
|
|
|
|
TYPE_XYZ_DBL = $90018;
|
|
TYPE_Lab_DBL = $A0018;
|
|
TYPE_GRAY_DBL = $30008;
|
|
TYPE_RGB_DBL = $40018;
|
|
TYPE_CMYK_DBL = $60020;
|
|
|
|
|
|
// Some utility functions to compute new descriptors
|
|
|
|
|
|
FUNCTION COLORSPACE_SH(e: Integer):Integer;
|
|
FUNCTION SWAPFIRST_SH(e: Integer):Integer;
|
|
FUNCTION FLAVOR_SH(e: Integer):Integer;
|
|
FUNCTION PLANAR_SH(e: Integer):Integer;
|
|
FUNCTION ENDIAN16_SH(e: Integer):Integer;
|
|
FUNCTION DOSWAP_SH(e: Integer):Integer;
|
|
FUNCTION EXTRA_SH(e: Integer):Integer;
|
|
FUNCTION CHANNELS_SH(c: Integer):Integer;
|
|
FUNCTION BYTES_SH(b: Integer):Integer;
|
|
|
|
|
|
TYPE
|
|
|
|
DWord = Cardinal;
|
|
|
|
icTagSignature = DWord;
|
|
icColorSpaceSignature = DWord;
|
|
icProfileClassSignature= DWord;
|
|
|
|
CONST
|
|
|
|
// icc color space signatures
|
|
|
|
icSigXYZData = $58595A20;
|
|
icSigLabData = $4C616220;
|
|
icSigLuvData = $4C757620;
|
|
icSigYCbCrData = $59436272;
|
|
icSigYxyData = $59787920;
|
|
icSigRgbData = $52474220;
|
|
icSigGrayData = $47524159;
|
|
icSigHsvData = $48535620;
|
|
icSigHlsData = $484C5320;
|
|
icSigCmykData = $434D594B;
|
|
icSigCmyData = $434D5920;
|
|
|
|
// icc Profile class signatures
|
|
|
|
icSigInputClass = $73636E72;
|
|
icSigDisplayClass = $6D6E7472;
|
|
icSigOutputClass = $70727472;
|
|
icSigLinkClass = $6C696E6B;
|
|
icSigAbstractClass = $61627374;
|
|
icSigColorSpaceClass = $73706163;
|
|
icSigNamedColorClass = $6e6d636c;
|
|
|
|
|
|
// Added by lcms
|
|
|
|
lcmsSignature = $6c636d73;
|
|
icSigLuvKData = $4C75764B; {'LuvK'}
|
|
icSigChromaticityTag = $6368726d; { As per Addendum 2 to Spec. ICC.1:1998-09 }
|
|
icSigChromaticAdaptationTag = $63686164;
|
|
|
|
|
|
|
|
TYPE
|
|
|
|
cmsHPROFILE = Pointer;
|
|
cmsHTRANSFORM = Pointer;
|
|
LCMSHANDLE = Pointer;
|
|
|
|
LCMSGAMMAPARAMS = PACKED RECORD
|
|
Crc32 : DWord;
|
|
TheType : Integer;
|
|
Params : ARRAY [0..9] OF Double;
|
|
END;
|
|
|
|
GAMMATABLE = PACKED RECORD
|
|
Birth : LCMSGAMMAPARAMS;
|
|
nEntries : DWord;
|
|
GammaTable : ARRAY [0..1] OF Word;
|
|
END;
|
|
|
|
LPGAMMATABLE = ^GAMMATABLE;
|
|
|
|
|
|
// Colorimetric spaces
|
|
|
|
cmsCIEXYZ = PACKED RECORD
|
|
X, Y, Z : Double;
|
|
END;
|
|
|
|
LPcmsCIEXYZ = ^cmsCIEXYZ;
|
|
|
|
cmsCIEXYZTRIPLE = PACKED RECORD
|
|
Red, Green, Blue : cmsCIEXYZ
|
|
END;
|
|
|
|
LPcmsCIEXYZTRIPLE = ^cmsCIEXYZTRIPLE;
|
|
|
|
cmsCIExyY = PACKED RECORD
|
|
x, y, YY : Double
|
|
END;
|
|
|
|
LPcmsCIExyY = ^cmsCIExyY;
|
|
|
|
|
|
cmsCIExyYTRIPLE = PACKED RECORD
|
|
Red, Green, Blue : cmsCIExyY
|
|
END;
|
|
|
|
LPcmsCIExyYTRIPLE = ^cmsCIExyYTRIPLE;
|
|
|
|
|
|
cmsCIELab = PACKED RECORD
|
|
L, a, b: Double
|
|
END;
|
|
|
|
LPcmsCIELab = ^cmsCIELab;
|
|
|
|
cmsCIELCh = PACKED RECORD
|
|
L, C, h : Double
|
|
END;
|
|
|
|
LPcmsCIELCh = ^cmsCIELCh;
|
|
|
|
// CIECAM97s
|
|
|
|
cmsJCh = PACKED RECORD
|
|
J, C, h : Double
|
|
END;
|
|
|
|
LPcmsJCh = ^cmsJCh;
|
|
|
|
LPLUT = Pointer;
|
|
|
|
CONST
|
|
|
|
AVG_SURROUND_4 = 0;
|
|
AVG_SURROUND = 1;
|
|
DIM_SURROUND = 2;
|
|
DARK_SURROUND = 3;
|
|
CUTSHEET_SURROUND = 4;
|
|
|
|
D_CALCULATE = -1;
|
|
D_CALCULATE_DISCOUNT = -2;
|
|
|
|
|
|
TYPE
|
|
|
|
cmsViewingConditions = PACKED RECORD
|
|
|
|
WhitePoint: cmsCIEXYZ;
|
|
Yb : Double;
|
|
La : Double;
|
|
surround : Integer;
|
|
D_value : Double
|
|
END;
|
|
|
|
|
|
LPcmsViewingConditions = ^cmsViewingConditions;
|
|
|
|
cmsErrorHandler = FUNCTION (Severity: Integer; Msg:PChar): Integer; cdecl;
|
|
|
|
LCMSARRAYOFPCHAR = ARRAY OF PChar;
|
|
|
|
// Input/Output
|
|
|
|
FUNCTION cmsOpenProfileFromFile(ICCProfile: PChar; sAccess: PChar) : cmsHPROFILE; StdCall;
|
|
FUNCTION cmsOpenProfileFromMem(MemPtr: Pointer; dwSize: DWord) : cmsHPROFILE; StdCall;
|
|
FUNCTION cmsCloseProfile(hProfile : cmsHPROFILE) : Boolean; StdCall;
|
|
|
|
FUNCTION cmsCreateRGBProfile(WhitePoint : LPcmsCIExyY;
|
|
Primaries: LPcmsCIExyYTRIPLE;
|
|
TransferFunction: ARRAY OF LPGAMMATABLE) : cmsHPROFILE; StdCall;
|
|
|
|
|
|
FUNCTION cmsCreateGrayProfile(WhitePoint: LPcmsCIExyY;
|
|
TransferFunction: LPGAMMATABLE) : cmsHPROFILE; StdCall;
|
|
|
|
|
|
FUNCTION cmsCreateLinearizationDeviceLink(ColorSpace: icColorSpaceSignature;
|
|
TransferFunction: ARRAY OF LPGAMMATABLE) : cmsHPROFILE; StdCall;
|
|
|
|
FUNCTION cmsCreateInkLimitingDeviceLink(ColorSpace: icColorSpaceSignature;
|
|
Limit: Double) : cmsHPROFILE; StdCall;
|
|
|
|
|
|
FUNCTION cmsCreateNULLProfile : cmsHPROFILE; StdCall;
|
|
FUNCTION cmsCreateLabProfile(WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall;
|
|
FUNCTION cmsCreateLab4Profile(WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall;
|
|
FUNCTION cmsCreateXYZProfile:cmsHPROFILE; StdCall;
|
|
FUNCTION cmsCreate_sRGBProfile:cmsHPROFILE; StdCall;
|
|
FUNCTION cmsCreateBCHSWabstractProfile(nLUTPoints: Integer;
|
|
Bright, Contrast, Hue, Saturation: Double;
|
|
TempSrc, TempDest: Integer): cmsHPROFILE; StdCall;
|
|
|
|
|
|
// Utils
|
|
|
|
PROCEDURE cmsXYZ2xyY(Dest: LPcmsCIExyY; Source: LPcmsCIEXYZ); StdCall;
|
|
PROCEDURE cmsxyY2XYZ(Dest: LPcmsCIEXYZ; Source: LPcmsCIExyY); StdCall;
|
|
PROCEDURE cmsXYZ2Lab(WhitePoint: LPcmsCIEXYZ; xyz: LPcmsCIEXYZ; Lab: LPcmsCIELab); StdCall;
|
|
PROCEDURE cmsLab2XYZ(WhitePoint: LPcmsCIEXYZ; Lab: LPcmsCIELab; xyz: LPcmsCIEXYZ); StdCall;
|
|
PROCEDURE cmsLab2LCh(LCh: LPcmsCIELCh; Lab: LPcmsCIELab); StdCall;
|
|
PROCEDURE cmsLCh2Lab(Lab: LPcmsCIELab; LCh: LPcmsCIELCh); StdCall;
|
|
|
|
// CIELab handling
|
|
|
|
FUNCTION cmsDeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall;
|
|
FUNCTION cmsCIE94DeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall;
|
|
FUNCTION cmsBFDdeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall;
|
|
FUNCTION cmsCMCdeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall;
|
|
FUNCTION cmsCIE2000DeltaE(Lab1, Lab2: LPcmsCIELab; Kl, Kc, Kh: Double): Double; StdCall;
|
|
|
|
PROCEDURE cmsClampLab(Lab: LPcmsCIELab; amax, amin, bmax, bmin: Double); StdCall;
|
|
|
|
// White point
|
|
|
|
FUNCTION cmsWhitePointFromTemp(TempK: Integer; WhitePoint: LPcmsCIExyY) : Boolean; StdCall;
|
|
|
|
|
|
// CIECAM97s
|
|
|
|
FUNCTION cmsCIECAM97sInit(pVC : LPcmsViewingConditions ) : Pointer; StdCall;
|
|
PROCEDURE cmsCIECAM97sDone(hModel : Pointer); StdCall;
|
|
|
|
PROCEDURE cmsCIECAM97sForward(hModel: Pointer; pIn: LPcmsCIEXYZ; pOut: LPcmsJCh ); StdCall;
|
|
PROCEDURE cmsCIECAM97sReverse(hModel: Pointer; pIn: LPcmsJCh; pOut: LPcmsCIEXYZ ); StdCall;
|
|
|
|
// CIECAM02
|
|
|
|
FUNCTION cmsCIECAM02Init(pVC : LPcmsViewingConditions ) : Pointer; StdCall;
|
|
PROCEDURE cmsCIECAM02Done(hModel : Pointer); StdCall;
|
|
|
|
PROCEDURE cmsCIECAM02Forward(hModel: Pointer; pIn: LPcmsCIEXYZ; pOut: LPcmsJCh ); StdCall;
|
|
PROCEDURE cmsCIECAM02Reverse(hModel: Pointer; pIn: LPcmsJCh; pOut: LPcmsCIEXYZ ); StdCall;
|
|
|
|
|
|
// Gamma curves
|
|
|
|
FUNCTION cmsBuildGamma(nEntries : Integer; Gamma: Double) : LPGAMMATABLE; StdCall;
|
|
FUNCTION cmsAllocGamma(nEntries : Integer): LPGAMMATABLE; StdCall;
|
|
PROCEDURE cmsFreeGamma(Gamma: LPGAMMATABLE); StdCall;
|
|
PROCEDURE cmsFreeGammaTriple(Gamma: ARRAY OF LPGAMMATABLE); StdCall;
|
|
FUNCTION cmsReverseGamma(nResultSamples: Integer; InGamma : LPGAMMATABLE): LPGAMMATABLE; StdCall;
|
|
FUNCTION cmsJoinGamma(InGamma, OutGamma: LPGAMMATABLE): LPGAMMATABLE; StdCall;
|
|
FUNCTION cmsJoinGammaEx(InGamma, OutGamma: LPGAMMATABLE; nPoints: Integer): LPGAMMATABLE; StdCall;
|
|
FUNCTION cmsSmoothGamma(Gamma: LPGAMMATABLE; SmoothingLambda: Double): Boolean; StdCall;
|
|
FUNCTION cmsDupGamma(Src: LPGAMMATABLE): LPGAMMATABLE; StdCall;
|
|
FUNCTION cmsEstimateGamma(Src: LPGAMMATABLE): Double; StdCall;
|
|
FUNCTION cmsEstimateGammaEx(Src: LPGAMMATABLE; Thereshold: Double): Double; StdCall;
|
|
FUNCTION cmsReadICCGamma(hProfile: cmsHPROFILE; Sig: icTagSignature): LPGAMMATABLE; StdCall;
|
|
FUNCTION cmsReadICCGammaReversed(hProfile: cmsHPROFILE; Sig: icTagSignature): LPGAMMATABLE; StdCall;
|
|
|
|
CONST
|
|
|
|
lcmsParametricCurveExp = 0;
|
|
lcmsParametricCurveCIE_122_1966 = 1;
|
|
lcmsParametricCurveIEC_61966_3 = 2;
|
|
lcmsParametricCurveIEC_61966_2_1= 3;
|
|
|
|
FUNCTION cmsBuildParametricGamma(nEntries: Integer; TheType: Integer; Params: array of Double) : LPGAMMATABLE; StdCall;
|
|
|
|
|
|
// Access to Profile data.
|
|
|
|
PROCEDURE cmsSetLanguage(LanguageCode: Integer; CountryCode: Integer); StdCall;
|
|
|
|
FUNCTION cmsTakeMediaWhitePoint(Dest: LPcmsCIEXYZ; hProfile: cmsHPROFILE): Boolean; StdCall;
|
|
FUNCTION cmsTakeMediaBlackPoint(Dest: LPcmsCIEXYZ; hProfile: cmsHPROFILE): Boolean; StdCall;
|
|
FUNCTION cmsTakeIluminant(Dest: LPcmsCIEXYZ; hProfile: cmsHPROFILE): Boolean; StdCall;
|
|
FUNCTION cmsTakeColorants(Dest: LPcmsCIEXYZTRIPLE; hProfile: cmsHPROFILE): Boolean; StdCall;
|
|
FUNCTION cmsTakeHeaderFlags(hProfile: cmsHPROFILE): DWord; StdCall;
|
|
|
|
FUNCTION cmsTakeProductName(hProfile: cmsHPROFILE): PChar; StdCall;
|
|
FUNCTION cmsTakeProductDesc(hProfile: cmsHPROFILE): PChar; StdCall;
|
|
|
|
FUNCTION cmsTakeManufacturer(hProfile: cmsHPROFILE): PChar; StdCall;
|
|
FUNCTION cmsTakeModel(hProfile: cmsHPROFILE): PChar; StdCall;
|
|
FUNCTION cmsTakeCopyright(hProfile: cmsHPROFILE): PChar; StdCall;
|
|
FUNCTION cmsTakeProfileID(hProfile: cmsHPROFILE): PByte; StdCall;
|
|
|
|
|
|
|
|
FUNCTION cmsIsTag(hProfile: cmsHPROFILE; sig: icTagSignature): Boolean; StdCall;
|
|
FUNCTION cmsTakeRenderingIntent(hProfile: cmsHPROFILE): Integer; StdCall;
|
|
FUNCTION cmsIsIntentSupported(hProfile: cmsHPROFILE; Intent, UsedDirection : Integer): Integer; StdCall;
|
|
FUNCTION cmsTakeCharTargetData(hProfile: cmsHPROFILE; var Data : PChar; var len: Cardinal): Boolean; StdCall;
|
|
|
|
FUNCTION _cmsICCcolorSpace(OurNotation: Integer) : icColorSpaceSignature; StdCall;
|
|
FUNCTION _cmsLCMScolorSpace(ProfileSpace: icColorSpaceSignature): Integer; StdCall;
|
|
FUNCTION _cmsChannelsOf(ColorSpace: icColorSpaceSignature): Integer; StdCall;
|
|
|
|
|
|
FUNCTION cmsGetPCS(hProfile: cmsHPROFILE): icColorSpaceSignature; StdCall;
|
|
FUNCTION cmsGetColorSpace(hProfile: cmsHPROFILE): icColorSpaceSignature; StdCall;
|
|
FUNCTION cmsGetDeviceClass( hProfile: cmsHPROFILE): icProfileClassSignature; StdCall;
|
|
FUNCTION cmsGetProfileICCversion( hProfile: cmsHPROFILE): DWord; StdCall;
|
|
|
|
// Profile creation
|
|
|
|
PROCEDURE cmsSetDeviceClass(hProfile: cmsHPROFILE; sig: icProfileClassSignature ); StdCall;
|
|
PROCEDURE cmsSetColorSpace(hProfile: cmsHPROFILE; sig: icProfileClassSignature ); StdCall;
|
|
PROCEDURE cmsSetPCS(hProfile: cmsHPROFILE; pcs: icColorSpaceSignature); StdCall;
|
|
PROCEDURE cmsSetRenderingIntent(hProfile: cmsHPROFILE; Intent: Integer); StdCall;
|
|
PROCEDURE cmsSetHeaderFlags(hProfile: cmsHPROFILE; dwFlags: DWord); StdCall;
|
|
PROCEDURE cmsSetProfileID(hProfile: cmsHPROFILE; ProfileID: PByte); StdCall;
|
|
|
|
|
|
|
|
FUNCTION cmsAddTag(hProfile: cmsHPROFILE; Sig: icTagSignature; Data: Pointer): Boolean; StdCall;
|
|
FUNCTION _cmsSaveProfile(hProfile: cmsHPROFILE; FileName: PChar): Boolean; StdCall;
|
|
FUNCTION _cmsSaveProfileToMem(hProfile: cmsHPROFILE; MemPtr: Pointer;
|
|
var BytesNeeded: DWord): Boolean; StdCall;
|
|
|
|
|
|
|
|
CONST
|
|
LCMS_USED_AS_INPUT = 0;
|
|
LCMS_USED_AS_OUTPUT = 1;
|
|
LCMS_USED_AS_PROOF = 2;
|
|
|
|
|
|
|
|
// Transforms
|
|
|
|
FUNCTION cmsCreateTransform(Input: cmsHPROFILE;
|
|
InputFormat: DWORD;
|
|
Output: cmsHPROFILE;
|
|
OutputFormat: DWORD;
|
|
Intent: Integer;
|
|
dwFlags: DWord): cmsHTRANSFORM; StdCall;
|
|
|
|
FUNCTION cmsCreateProofingTransform(Input: cmsHPROFILE;
|
|
InputFormat: DWORD;
|
|
Output: cmsHPROFILE;
|
|
OutputFormat: DWORD;
|
|
Proofing: cmsHPROFILE;
|
|
Intent: Integer;
|
|
ProofingIntent: Integer;
|
|
dwFlags: DWord): cmsHTRANSFORM; StdCall;
|
|
|
|
|
|
FUNCTION cmsCreateMultiprofileTransform(hProfiles : ARRAY OF cmsHPROFILE;
|
|
nProfiles : Integer;
|
|
InputFormat: DWord;
|
|
OutputFormat: DWord;
|
|
Intent: Integer;
|
|
dwFlags: DWord): cmsHTRANSFORM; StdCall;
|
|
|
|
|
|
PROCEDURE cmsDeleteTransform( hTransform: cmsHTRANSFORM); StdCall;
|
|
|
|
PROCEDURE cmsDoTransform( Transform: cmsHTRANSFORM;
|
|
InputBuffer: Pointer;
|
|
OutputBuffer: Pointer;
|
|
Size: LongInt); StdCall;
|
|
|
|
PROCEDURE cmsChangeBuffersFormat(hTransform: cmsHTRANSFORM;
|
|
dwInputFormat, dwOutputFormat: DWord); StdCall;
|
|
|
|
// Devicelink generation
|
|
|
|
FUNCTION cmsTransform2DeviceLink(hTransform: cmsHTRANSFORM;
|
|
dwFlags: DWord): cmsHPROFILE; StdCall;
|
|
|
|
PROCEDURE _cmsSetLUTdepth(hProfile: cmsHPROFILE; depth: Integer); StdCall;
|
|
|
|
// Named color support
|
|
|
|
FUNCTION cmsNamedColorCount(xform: cmsHTRANSFORM): Integer; StdCall;
|
|
FUNCTION cmsNamedColorInfo(xform: cmsHTRANSFORM; nColor: Integer;
|
|
Name, Prefix, Suffix: PChar) : Boolean; StdCall;
|
|
|
|
FUNCTION cmsNamedColorIndex(xform: cmsHTRANSFORM; Name: PChar): Integer; StdCall;
|
|
|
|
|
|
// PostScript ColorRenderingDictionary and ColorSpaceArray
|
|
|
|
FUNCTION cmsGetPostScriptCSA(hProfile: cmsHPROFILE ;
|
|
Intent: Integer;
|
|
Buffer: Pointer;
|
|
dwBufferLen: DWord): DWord; StdCall;
|
|
|
|
FUNCTION cmsGetPostScriptCRD(hProfile: cmsHPROFILE ;
|
|
Intent: Integer;
|
|
Buffer: Pointer;
|
|
dwBufferLen: DWord): DWord; StdCall;
|
|
|
|
FUNCTION cmsGetPostScriptCRDEx(hProfile: cmsHPROFILE ;
|
|
Intent: Integer;
|
|
dwFlags: DWord;
|
|
Buffer: Pointer;
|
|
dwBufferLen: DWord): DWord; StdCall;
|
|
|
|
|
|
|
|
|
|
// Gamut check
|
|
|
|
PROCEDURE cmsSetAlarmCodes(r, g, b: Integer); StdCall;
|
|
PROCEDURE cmsGetAlarmCodes(VAR r, g, b: Integer); StdCall;
|
|
|
|
// Error handling
|
|
CONST
|
|
|
|
LCMS_ERROR_ABORT = 0;
|
|
LCMS_ERROR_SHOW = 1;
|
|
LCMS_ERROR_IGNORE = 2;
|
|
|
|
PROCEDURE cmsErrorAction(nAction: Integer); StdCall;
|
|
|
|
PROCEDURE cmsSetErrorHandler(ErrorHandler: cmsErrorHandler); StdCall;
|
|
|
|
|
|
// CGATS.13 parser
|
|
|
|
FUNCTION cmsIT8Alloc: LCMSHANDLE; StdCall;
|
|
PROCEDURE cmsIT8Free(hIT8: LCMSHANDLE); StdCall;
|
|
|
|
// Tables
|
|
|
|
FUNCTION cmsIT8TableCount(hIT8: LCMSHANDLE): Integer; StdCall;
|
|
FUNCTION cmsIT8SetTable(hIT8: LCMSHANDLE; nTable: Integer): Integer; StdCall;
|
|
|
|
// Persistence
|
|
FUNCTION cmsIT8LoadFromFile(cFileName: PChar): LCMSHANDLE; StdCall;
|
|
FUNCTION cmsIT8LoadFromMem(Ptr: Pointer; size :DWord): LCMSHANDLE; StdCall;
|
|
|
|
FUNCTION cmsIT8SaveToFile(hIT8: LCMSHANDLE; cFileName: PChar): Boolean; StdCall;
|
|
|
|
// Properties
|
|
|
|
FUNCTION cmsIT8GetSheetType(hIT8: LCMSHANDLE): PChar; StdCall;
|
|
FUNCTION cmsIT8SetSheetType(hIT8: LCMSHANDLE; TheType: PChar): Boolean; StdCall;
|
|
|
|
FUNCTION cmsIT8SetComment(hIT8: LCMSHANDLE; cComment: PChar): Boolean; StdCall;
|
|
|
|
FUNCTION cmsIT8SetPropertyStr(hIT8: LCMSHANDLE; cProp, Str: PChar): Boolean; StdCall;
|
|
FUNCTION cmsIT8SetPropertyDbl(hIT8: LCMSHANDLE; cProp: PChar; Val: Double): Boolean; StdCall;
|
|
FUNCTION cmsIT8SetPropertyHex(hIT8: LCMSHANDLE; cProp: PChar; Val: Integer): Boolean; StdCall;
|
|
FUNCTION cmsIT8SetPropertyUncooked(hIT8: LCMSHANDLE; Key, Buffer: PChar): Boolean; StdCall;
|
|
|
|
|
|
FUNCTION cmsIT8GetProperty(hIT8: LCMSHANDLE; cProp: PChar): PChar; StdCall;
|
|
FUNCTION cmsIT8GetPropertyDbl(hIT8: LCMSHANDLE; cProp: PChar): Double; StdCall;
|
|
FUNCTION cmsIT8EnumProperties(hIT8: LCMSHANDLE; var PropertyNames: LCMSARRAYOFPCHAR): Integer; StdCall;
|
|
|
|
// Datasets
|
|
|
|
FUNCTION cmsIT8GetDataRowCol(hIT8: LCMSHANDLE; row, col: Integer): PChar; StdCall;
|
|
FUNCTION cmsIT8GetDataRowColDbl(hIT8: LCMSHANDLE; row, col: Integer): Double; StdCall;
|
|
|
|
FUNCTION cmsIT8SetDataRowCol(hIT8: LCMSHANDLE; row, col: Integer; Val: PChar): Boolean; StdCall;
|
|
FUNCTION cmsIT8SetDataRowColDbl(hIT8: LCMSHANDLE; row, col: Integer; Val: Double): Boolean; StdCall;
|
|
|
|
FUNCTION cmsIT8GetData(hIT8: LCMSHANDLE; cPatch, cSample: PChar): PChar; StdCall;
|
|
|
|
FUNCTION cmsIT8GetDataDbl(hIT8: LCMSHANDLE;cPatch, cSample: PChar): Double; StdCall;
|
|
|
|
FUNCTION cmsIT8SetData(hIT8: LCMSHANDLE; cPatch, cSample, Val: PChar): Boolean; StdCall;
|
|
|
|
FUNCTION cmsIT8SetDataDbl(hIT8: LCMSHANDLE; cPatch, cSample: PChar; Val: Double): Boolean; StdCall;
|
|
|
|
FUNCTION cmsIT8SetDataFormat(hIT8: LCMSHANDLE; n: Integer; Sample: PChar): Boolean; StdCall;
|
|
FUNCTION cmsIT8EnumDataFormat(hIT8: LCMSHANDLE; var SampleNames: LCMSARRAYOFPCHAR): Integer; StdCall;
|
|
FUNCTION cmsIT8GetPatchName(hIT8: LCMSHANDLE; nPatch: Integer; Buffer: PChar): PChar; StdCall;
|
|
|
|
// The LABEL extension
|
|
|
|
FUNCTION cmsIT8SetTableByLabel(hIT8: LCMSHANDLE; cSet, cField, ExpectedType: PChar): Integer; StdCall;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Provided for compatibility with anterior revisions
|
|
|
|
PROCEDURE cmsLabEncoded2Float(Lab: LPcmsCIELab; wLab: Pointer); StdCall;
|
|
PROCEDURE cmsFloat2LabEncoded(wLab: Pointer; Lab: LPcmsCIELab); StdCall;
|
|
PROCEDURE cmsXYZEncoded2Float(fxyz : LPcmsCIEXYZ; XYZ: Pointer); StdCall;
|
|
PROCEDURE cmsFloat2XYZEncoded(XYZ: Pointer; fXYZ: LPcmsCIEXYZ); StdCall;
|
|
|
|
FUNCTION _cmsAddTextTag(hProfile: cmsHPROFILE; sig: icTagSignature; Text: PChar): Boolean; StdCall;
|
|
FUNCTION _cmsAddXYZTag(hProfile: cmsHPROFILE; sig: icTagSignature; XYZ: LPcmsCIEXYZ): Boolean; StdCall;
|
|
FUNCTION _cmsAddLUTTag(hProfile: cmsHPROFILE; sig: icTagSignature; lut: PByte): Boolean; StdCall;
|
|
|
|
|
|
IMPLEMENTATION
|
|
|
|
|
|
// Helping functions to build format descriptors (C uses them as macros)
|
|
|
|
FUNCTION COLORSPACE_SH(e: Integer):Integer; BEGIN COLORSPACE_SH := ((e) shl 16) END;
|
|
FUNCTION SWAPFIRST_SH(e: Integer):Integer; BEGIN SWAPFIRST_SH := ((e) shl 13) END;
|
|
FUNCTION FLAVOR_SH(e: Integer):Integer; BEGIN FLAVOR_SH := ((e) shl 13) END;
|
|
FUNCTION PLANAR_SH(e: Integer):Integer; BEGIN PLANAR_SH := ((e) shl 12) END;
|
|
FUNCTION ENDIAN16_SH(e: Integer):Integer; BEGIN ENDIAN16_SH := ((e) shl 11) END;
|
|
FUNCTION DOSWAP_SH(e: Integer):Integer; BEGIN DOSWAP_SH := ((e) shl 10) END;
|
|
FUNCTION EXTRA_SH(e: Integer):Integer; BEGIN EXTRA_SH := ((e) shl 7) END;
|
|
FUNCTION CHANNELS_SH(c: Integer):Integer; BEGIN CHANNELS_SH := ((c) shl 3) END;
|
|
FUNCTION BYTES_SH(b: Integer):Integer; BEGIN BYTES_SH := (b) END;
|
|
|
|
CONST
|
|
PT_ANY = 0; // Don't check colorspace
|
|
// 1 & 2 are reserved
|
|
PT_GRAY = 3;
|
|
PT_RGB = 4;
|
|
PT_CMY = 5;
|
|
PT_CMYK = 6;
|
|
PT_YCbCr = 7;
|
|
PT_YUV = 8; // Lu'v'
|
|
PT_XYZ = 9;
|
|
PT_Lab = 10;
|
|
PT_YUVK = 11; // Lu'v'K
|
|
PT_HSV = 12;
|
|
PT_HLS = 13;
|
|
PT_Yxy = 14;
|
|
|
|
|
|
FUNCTION cmsOpenProfileFromFile(ICCProfile : PChar; sAccess: PChar) : cmsHPROFILE; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsOpenProfileFromMem(MemPtr: Pointer; dwSize: DWord) : cmsHPROFILE; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsWhitePointFromTemp(TempK: Integer; WhitePoint: LPcmsCIExyY) : Boolean; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsBuildGamma(nEntries : Integer; Gamma: Double) : LPGAMMATABLE; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsAllocGamma(nEntries : Integer): LPGAMMATABLE; EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsFreeGamma(Gamma: LPGAMMATABLE); EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsFreeGammaTriple(Gamma: ARRAY OF LPGAMMATABLE); EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsReverseGamma(nResultSamples : Integer; InGamma : LPGAMMATABLE): LPGAMMATABLE; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsBuildParametricGamma(nEntries: Integer; TheType: Integer; Params: array of Double) : LPGAMMATABLE; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsJoinGamma(InGamma, OutGamma : LPGAMMATABLE): LPGAMMATABLE; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsJoinGammaEx(InGamma, OutGamma: LPGAMMATABLE; nPoints: Integer): LPGAMMATABLE; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsSmoothGamma(Gamma: LPGAMMATABLE; SmoothingLambda: Double): Boolean; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsDupGamma(Src: LPGAMMATABLE): LPGAMMATABLE; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsEstimateGamma(Src: LPGAMMATABLE): Double; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsEstimateGammaEx(Src: LPGAMMATABLE; Thereshold: Double): Double; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsReadICCGamma(hProfile: cmsHPROFILE; Sig: icTagSignature): LPGAMMATABLE; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsReadICCGammaReversed(hProfile: cmsHPROFILE; Sig: icTagSignature): LPGAMMATABLE; EXTERNAL 'lcms.dll';
|
|
|
|
|
|
FUNCTION cmsCreateRGBProfile( WhitePoint : LPcmsCIExyY;
|
|
Primaries: LPcmsCIExyYTRIPLE;
|
|
TransferFunction: ARRAY OF LPGAMMATABLE) : cmsHPROFILE; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsCreateGrayProfile(WhitePoint: LPcmsCIExyY;
|
|
TransferFunction: LPGAMMATABLE) : cmsHPROFILE; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsCreateLinearizationDeviceLink(ColorSpace: icColorSpaceSignature;
|
|
TransferFunction: ARRAY OF LPGAMMATABLE) : cmsHPROFILE; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsCreateInkLimitingDeviceLink(ColorSpace: icColorSpaceSignature;
|
|
Limit: Double) : cmsHPROFILE; EXTERNAL 'lcms.dll';
|
|
|
|
|
|
FUNCTION cmsCreateNULLProfile : cmsHPROFILE; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsCreateLabProfile(WhitePoint: LPcmsCIExyY): cmsHPROFILE; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsCreateLab4Profile(WhitePoint: LPcmsCIExyY): cmsHPROFILE; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsCreateXYZProfile: cmsHPROFILE; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsCreate_sRGBProfile: cmsHPROFILE; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsCreateBCHSWabstractProfile(nLUTPoints: Integer;
|
|
Bright, Contrast, Hue, Saturation: Double;
|
|
TempSrc, TempDest: Integer): cmsHPROFILE; EXTERNAL 'lcms.dll';
|
|
|
|
|
|
FUNCTION cmsCloseProfile( hProfile : cmsHPROFILE) : Boolean; EXTERNAL 'lcms.dll';
|
|
|
|
|
|
PROCEDURE cmsSetLanguage(LanguageCode: Integer; CountryCode: Integer); EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsTakeMediaWhitePoint(Dest: LPcmsCIEXYZ; hProfile: cmsHPROFILE): Boolean; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsTakeMediaBlackPoint(Dest: LPcmsCIEXYZ; hProfile: cmsHPROFILE): Boolean; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsTakeIluminant(Dest: LPcmsCIEXYZ; hProfile: cmsHPROFILE): Boolean; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsTakeColorants(Dest: LPcmsCIEXYZTRIPLE; hProfile: cmsHPROFILE): Boolean; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsTakeHeaderFlags(hProfile: cmsHPROFILE): DWord; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsTakeProductName(hProfile: cmsHPROFILE): PChar; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsTakeProductDesc(hProfile: cmsHPROFILE): PChar; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsTakeManufacturer(hProfile: cmsHPROFILE): PChar; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsTakeModel(hProfile: cmsHPROFILE): PChar; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsTakeCopyright(hProfile: cmsHPROFILE): PChar; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsTakeProfileID(hProfile: cmsHPROFILE): PByte; EXTERNAL 'lcms.dll';
|
|
|
|
|
|
FUNCTION cmsIsTag(hProfile: cmsHPROFILE; sig: icTagSignature): Boolean; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsTakeRenderingIntent( hProfile: cmsHPROFILE): Integer; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsGetPCS(hProfile: cmsHPROFILE): icColorSpaceSignature; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsGetColorSpace(hProfile: cmsHPROFILE): icColorSpaceSignature; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsGetDeviceClass( hProfile: cmsHPROFILE): icProfileClassSignature; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsGetProfileICCversion( hProfile: cmsHPROFILE): DWord; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsTakeCharTargetData(hProfile: cmsHPROFILE; var Data: PChar; var len: Cardinal): Boolean; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION _cmsICCcolorSpace(OurNotation: Integer) : icColorSpaceSignature; EXTERNAL 'lcms.dll';
|
|
FUNCTION _cmsLCMScolorSpace(ProfileSpace: icColorSpaceSignature): Integer; EXTERNAL 'lcms.dll';
|
|
FUNCTION _cmsChannelsOf(ColorSpace: icColorSpaceSignature): Integer; EXTERNAL 'lcms.dll';
|
|
|
|
|
|
|
|
|
|
PROCEDURE cmsSetDeviceClass(hProfile: cmsHPROFILE; sig: icProfileClassSignature ); EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsSetColorSpace(hProfile: cmsHPROFILE; sig: icProfileClassSignature ); EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsSetPCS(hProfile: cmsHPROFILE; pcs: icColorSpaceSignature); EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsSetRenderingIntent(hProfile: cmsHPROFILE; Intent: Integer); EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsSetHeaderFlags(hProfile: cmsHPROFILE; dwFlags: DWord); EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsSetProfileID(hProfile: cmsHPROFILE; ProfileID: PByte); EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsAddTag(hProfile: cmsHPROFILE; Sig: icTagSignature; Data: Pointer): Boolean; EXTERNAL 'lcms.dll';
|
|
|
|
|
|
FUNCTION _cmsSaveProfile(hProfile: cmsHPROFILE; FileName: PChar): Boolean; EXTERNAL 'lcms.dll';
|
|
FUNCTION _cmsSaveProfileToMem(hProfile: cmsHPROFILE; MemPtr: Pointer;
|
|
var BytesNeeded: DWord): Boolean; EXTERNAL 'lcms.dll';
|
|
|
|
|
|
FUNCTION cmsIsIntentSupported(hProfile: cmsHPROFILE; Intent, UsedDirection : Integer): Integer; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsCreateTransform(Input: cmsHPROFILE;
|
|
InputFormat: DWORD;
|
|
Output: cmsHPROFILE;
|
|
OutputFormat: DWORD;
|
|
Intent: Integer;
|
|
dwFlags: DWord): cmsHTRANSFORM; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsCreateProofingTransform(Input: cmsHPROFILE;
|
|
InputFormat: DWORD;
|
|
Output: cmsHPROFILE;
|
|
OutputFormat: DWORD;
|
|
Proofing: cmsHPROFILE;
|
|
Intent: Integer;
|
|
ProofingIntent: Integer;
|
|
dwFlags: DWord): cmsHTRANSFORM; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsCreateMultiprofileTransform(hProfiles : ARRAY OF cmsHPROFILE;
|
|
nProfiles : Integer;
|
|
InputFormat: DWord;
|
|
OutputFormat: DWord;
|
|
Intent: Integer;
|
|
dwFlags: DWord): cmsHTRANSFORM; EXTERNAL 'lcms.dll';
|
|
|
|
|
|
PROCEDURE cmsDeleteTransform( hTransform: cmsHTRANSFORM); EXTERNAL 'lcms.dll';
|
|
|
|
PROCEDURE cmsDoTransform( Transform: cmsHTRANSFORM;
|
|
InputBuffer: Pointer;
|
|
OutputBuffer: Pointer;
|
|
Size: LongInt); EXTERNAL 'lcms.dll';
|
|
|
|
PROCEDURE cmsChangeBuffersFormat(hTransform: cmsHTRANSFORM;
|
|
dwInputFormat, dwOutputFormat: DWord); EXTERNAL 'lcms.dll';
|
|
|
|
|
|
FUNCTION cmsTransform2DeviceLink(hTransform: cmsHTRANSFORM; dwFlags: DWord): cmsHPROFILE; EXTERNAL 'lcms.dll';
|
|
|
|
PROCEDURE _cmsSetLUTdepth(hProfile: cmsHPROFILE; depth: Integer); EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsNamedColorCount(xform: cmsHTRANSFORM): Integer; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsNamedColorInfo(xform: cmsHTRANSFORM; nColor: Integer;
|
|
Name, Prefix, Suffix: PChar) : Boolean; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsNamedColorIndex(xform: cmsHTRANSFORM; Name: PChar): Integer; EXTERNAL 'lcms.dll';
|
|
|
|
|
|
FUNCTION cmsGetPostScriptCSA(hProfile: cmsHPROFILE ;
|
|
Intent: Integer;
|
|
Buffer: Pointer;
|
|
dwBufferLen: DWord): DWord; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsGetPostScriptCRD(hProfile: cmsHPROFILE ;
|
|
Intent: Integer;
|
|
Buffer: Pointer;
|
|
dwBufferLen: DWord): DWord; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsGetPostScriptCRDEx(hProfile: cmsHPROFILE ;
|
|
Intent: Integer;
|
|
dwFlags: DWord;
|
|
Buffer: Pointer;
|
|
dwBufferLen: DWord): DWord; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsCIECAM97sInit(pVC : LPcmsViewingConditions ) : Pointer; EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsCIECAM97sDone(hModel : Pointer); EXTERNAL 'lcms.dll';
|
|
|
|
PROCEDURE cmsCIECAM97sForward(hModel: Pointer; pIn: LPcmsCIEXYZ; pOut: LPcmsJCh ); EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsCIECAM97sReverse(hModel: Pointer; pIn: LPcmsJCh; pOut: LPcmsCIEXYZ ); EXTERNAL 'lcms.dll';
|
|
|
|
// CIECAM02
|
|
|
|
FUNCTION cmsCIECAM02Init(pVC : LPcmsViewingConditions ) : Pointer; EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsCIECAM02Done(hModel : Pointer); EXTERNAL 'lcms.dll';
|
|
|
|
PROCEDURE cmsCIECAM02Forward(hModel: Pointer; pIn: LPcmsCIEXYZ; pOut: LPcmsJCh ); EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsCIECAM02Reverse(hModel: Pointer; pIn: LPcmsJCh; pOut: LPcmsCIEXYZ ); EXTERNAL 'lcms.dll';
|
|
|
|
// Utils
|
|
|
|
PROCEDURE cmsXYZ2xyY(Dest: LPcmsCIExyY; Source: LPcmsCIEXYZ); EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsxyY2XYZ(Dest: LPcmsCIEXYZ; Source: LPcmsCIExyY); EXTERNAL 'lcms.dll';
|
|
|
|
PROCEDURE cmsXYZ2Lab(WhitePoint: LPcmsCIEXYZ; xyz: LPcmsCIEXYZ; Lab: LPcmsCIELab); EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsLab2XYZ(WhitePoint: LPcmsCIEXYZ; Lab: LPcmsCIELab; xyz: LPcmsCIEXYZ); EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsLab2LCh(LCh: LPcmsCIELCh; Lab: LPcmsCIELab); EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsLCh2Lab(Lab: LPcmsCIELab; LCh: LPcmsCIELCh); EXTERNAL 'lcms.dll';
|
|
|
|
|
|
// CIELab handling
|
|
|
|
FUNCTION cmsDeltaE(Lab1, Lab2: LPcmsCIELab): Double; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsCIE94DeltaE(Lab1, Lab2: LPcmsCIELab): Double; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsBFDdeltaE(Lab1, Lab2: LPcmsCIELab): Double; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsCMCdeltaE(Lab1, Lab2: LPcmsCIELab): Double; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsCIE2000DeltaE(Lab1, Lab2: LPcmsCIELab; Kl, Kc, Kh: Double): Double; StdCall; EXTERNAL 'lcms.dll';
|
|
|
|
PROCEDURE cmsClampLab(Lab: LPcmsCIELab; amax, amin, bmax, bmin: Double); EXTERNAL 'lcms.dll';
|
|
|
|
PROCEDURE cmsSetAlarmCodes(r, g, b: Integer); EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsGetAlarmCodes(VAR r, g, b: Integer); EXTERNAL 'lcms.dll';
|
|
|
|
PROCEDURE cmsErrorAction(nAction: Integer); EXTERNAL 'lcms.dll';
|
|
|
|
PROCEDURE cmsSetErrorHandler(ErrorHandler: cmsErrorHandler); EXTERNAL 'lcms.dll';
|
|
|
|
|
|
|
|
FUNCTION cmsIT8Alloc: LCMSHANDLE; EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsIT8Free(hIT8: LCMSHANDLE); EXTERNAL 'lcms.dll';
|
|
|
|
// Tables
|
|
|
|
FUNCTION cmsIT8TableCount(hIT8: LCMSHANDLE): Integer; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsIT8SetTable(hIT8: LCMSHANDLE; nTable: Integer): Integer; EXTERNAL 'lcms.dll';
|
|
|
|
// Persistence
|
|
FUNCTION cmsIT8LoadFromFile(cFileName: PChar): LCMSHANDLE; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsIT8LoadFromMem(Ptr: Pointer; size :DWord): LCMSHANDLE; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsIT8SaveToFile(hIT8: LCMSHANDLE; cFileName: PChar): Boolean; EXTERNAL 'lcms.dll';
|
|
|
|
// Properties
|
|
|
|
FUNCTION cmsIT8GetSheetType(hIT8: LCMSHANDLE): PChar; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsIT8SetSheetType(hIT8: LCMSHANDLE; TheType: PChar): Boolean; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsIT8SetComment(hIT8: LCMSHANDLE; cComment: PChar): Boolean; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsIT8SetPropertyStr(hIT8: LCMSHANDLE; cProp, Str: PChar): Boolean; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsIT8SetPropertyDbl(hIT8: LCMSHANDLE; cProp: PChar; Val: Double): Boolean; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsIT8SetPropertyHex(hIT8: LCMSHANDLE; cProp: PChar; Val: Integer): Boolean; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsIT8SetPropertyUncooked(hIT8: LCMSHANDLE; Key, Buffer: PChar): Boolean; EXTERNAL 'lcms.dll';
|
|
|
|
|
|
FUNCTION cmsIT8GetProperty(hIT8: LCMSHANDLE; cProp: PChar): PChar; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsIT8GetPropertyDbl(hIT8: LCMSHANDLE; cProp: PChar): Double; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsIT8EnumProperties(hIT8: LCMSHANDLE; var PropertyNames: LCMSARRAYOFPCHAR): Integer; EXTERNAL 'lcms.dll';
|
|
|
|
// Datasets
|
|
|
|
FUNCTION cmsIT8GetDataRowCol(hIT8: LCMSHANDLE; row, col: Integer): PChar; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsIT8GetDataRowColDbl(hIT8: LCMSHANDLE; row, col: Integer): Double; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsIT8SetDataRowCol(hIT8: LCMSHANDLE; row, col: Integer; Val: PChar): Boolean; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsIT8SetDataRowColDbl(hIT8: LCMSHANDLE; row, col: Integer; Val: Double): Boolean; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsIT8GetData(hIT8: LCMSHANDLE; cPatch, cSample: PChar): PChar; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsIT8GetDataDbl(hIT8: LCMSHANDLE;cPatch, cSample: PChar): Double; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsIT8SetData(hIT8: LCMSHANDLE; cPatch, cSample, Val: PChar): Boolean; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsIT8SetDataDbl(hIT8: LCMSHANDLE; cPatch, cSample: PChar; Val: Double): Boolean; EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION cmsIT8SetDataFormat(hIT8: LCMSHANDLE; n: Integer; Sample: PChar): Boolean; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsIT8EnumDataFormat(hIT8: LCMSHANDLE; var SampleNames: LCMSARRAYOFPCHAR): Integer; EXTERNAL 'lcms.dll';
|
|
FUNCTION cmsIT8GetPatchName(hIT8: LCMSHANDLE; nPatch: Integer; Buffer: PChar): PChar; EXTERNAL 'lcms.dll';
|
|
|
|
// The LABEL extension
|
|
|
|
FUNCTION cmsIT8SetTableByLabel(hIT8: LCMSHANDLE; cSet, cField, ExpectedType: PChar): Integer; EXTERNAL 'lcms.dll';
|
|
|
|
|
|
|
|
|
|
PROCEDURE cmsLabEncoded2Float(Lab: LPcmsCIELab; wLab: Pointer); EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsFloat2LabEncoded(wLab: Pointer; Lab: LPcmsCIELab); EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsXYZEncoded2Float(fxyz : LPcmsCIEXYZ; XYZ: Pointer); EXTERNAL 'lcms.dll';
|
|
PROCEDURE cmsFloat2XYZEncoded(XYZ: Pointer; fXYZ: LPcmsCIEXYZ); EXTERNAL 'lcms.dll';
|
|
|
|
FUNCTION _cmsAddTextTag(hProfile: cmsHPROFILE; sig: icTagSignature; Text: PChar): Boolean; EXTERNAL 'lcms.dll';
|
|
FUNCTION _cmsAddXYZTag(hProfile: cmsHPROFILE; sig: icTagSignature; XYZ: LPcmsCIEXYZ): Boolean; EXTERNAL 'lcms.dll';
|
|
FUNCTION _cmsAddLUTTag(hProfile: cmsHPROFILE; sig: icTagSignature; lut: PByte): Boolean; EXTERNAL 'lcms.dll';
|
|
|
|
|
|
|
|
END.
|