From 884c8093d63402a1ad0b502244b791e3c6782be3 Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Fri, 11 Sep 2020 14:38:47 +0900 Subject: Added debian extra dependency packages. Signed-off-by: Michele Calgaro --- .../lcms-1.19.dfsg2/Delphi/Samples/MAKETEST.BAT | 3 + .../lcms/lcms-1.19.dfsg2/Delphi/Samples/TEST.PAS | 71 ++ .../lcms/lcms-1.19.dfsg2/Delphi/Samples/create.pas | 73 ++ .../lcms-1.19.dfsg2/Delphi/Samples/gamutchk.pas | 51 ++ .../lcms/lcms-1.19.dfsg2/Delphi/Samples/getxyz.pas | 62 ++ .../lcms-1.19.dfsg2/Delphi/Samples/testfrm.pas | 95 ++ .../lcms/lcms-1.19.dfsg2/Delphi/Samples/testwp.pas | 78 ++ debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.cfg | 38 + debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.dof | 136 +++ debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.dpr | 13 + debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.res | Bin 0 -> 876 bytes debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.dcu | Bin 0 -> 9578 bytes debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.ddp | Bin 0 -> 51 bytes debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.dfm | Bin 0 -> 2423 bytes debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.pas | 241 +++++ debian/lcms/lcms-1.19.dfsg2/Delphi/lcmsdll.pas | 991 +++++++++++++++++++++ 16 files changed, 1852 insertions(+) create mode 100755 debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/MAKETEST.BAT create mode 100755 debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/TEST.PAS create mode 100755 debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/create.pas create mode 100755 debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/gamutchk.pas create mode 100755 debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/getxyz.pas create mode 100755 debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/testfrm.pas create mode 100755 debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/testwp.pas create mode 100755 debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.cfg create mode 100755 debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.dof create mode 100755 debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.dpr create mode 100755 debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.res create mode 100755 debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.dcu create mode 100755 debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.ddp create mode 100755 debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.dfm create mode 100755 debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.pas create mode 100755 debian/lcms/lcms-1.19.dfsg2/Delphi/lcmsdll.pas (limited to 'debian/lcms/lcms-1.19.dfsg2/Delphi') diff --git a/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/MAKETEST.BAT b/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/MAKETEST.BAT new file mode 100755 index 00000000..5a8fc9d1 --- /dev/null +++ b/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/MAKETEST.BAT @@ -0,0 +1,3 @@ +dcc32 -CC test +if errorlevel 0 dcc32 -CC testwp + \ No newline at end of file diff --git a/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/TEST.PAS b/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/TEST.PAS new file mode 100755 index 00000000..5530c1a6 --- /dev/null +++ b/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/TEST.PAS @@ -0,0 +1,71 @@ + + + +PROGRAM LcmsTest; +USES lcmsdll, Windows; + +TYPE + ScanLineType = Array[0..255] OF PACKED RECORD + b, g, r: Byte; + END; + +VAR + hInProfile, hOutProfile: cmsHPROFILE; + hTransform: cmsHTRANSFORM; + + ScanLine, ScanLineTranslated: ScanLineType; + r, g, b: Integer; + + +BEGIN + + + hInProfile := cmsOpenProfileFromFile('HPSJTW.ICM', 'r'); + hOutProfile := cmsOpenProfileFromFile('sRGB Color Space Profile.ICM', 'r'); + + + WriteLn('Input profile : ', cmsTakeProductName(hInProfile)); + WriteLn('Output profile : ', cmsTakeProductName(hOutProfile)); + + + hTransform := cmsCreateTransform(hInProfile, + TYPE_BGR_8, + hOutProfile, + TYPE_BGR_8, + INTENT_PERCEPTUAL, 0); + + WriteLn('As speed test, I will transform all spectrum...'); + WriteLn('This implies an image of 255x255x255x3 = 47 MB!!!'); + WriteLn('Each number represents a chunk 255x255x3 = 190.5 Kb! processed'); + + FOR r := 0 TO 255 DO + BEGIN + FOR g := 0 TO 255 DO + BEGIN + FOR b := 0 TO 255 DO + BEGIN + + ScanLine[b].r := r; + ScanLine[b].g := g; + ScanLine[b].b := b; + END; + + cmsDoTransform(hTransform, + @ScanLine, + @ScanLineTranslated, + 255) + + END; + + Write(r:4, #$0d) + END; + WriteLn; WriteLn('Done!!!'); + + + + cmsDeleteTransform(hTransform); + cmsCloseProfile(hInProfile); + cmsCloseProfile(hOutProfile); + +END. + diff --git a/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/create.pas b/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/create.pas new file mode 100755 index 00000000..72914ddd --- /dev/null +++ b/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/create.pas @@ -0,0 +1,73 @@ + +PROGRAM CreateProfile; +USES lcmsdll, Windows; + + +VAR + Primaries: cmsCIExyYTRIPLE; + WhitePoint: cmsCIExyY; + GammaTables: ARRAY [1..3] OF LPGAMMATABLE; + TheProfile: cmsHPROFILE; + + +BEGIN + + WriteLn('Creation of profile TEST.ICM...'); + + {Fill in primaries (Rec709 as example) } + + Primaries.Red.x := 0.6400; + Primaries.Red.y := 0.3300; + Primaries.Red.YY := 1.0; + + Primaries.Green.x := 0.3000; + Primaries.Green.y := 0.6000; + Primaries.Green.YY := 1.0; + + Primaries.Blue.x := 0.1500; + Primaries.Blue.y := 0.0600; + Primaries.Blue.YY := 1.0; + + + {Calculates white point from temperature} + {That is, 6504§K = D65 } + + cmsWhitePointFromTemp(6504, @WhitePoint); + + + + { Compute gamma tables of 2.2 } + + GammaTables[1] := cmsBuildGamma(256, 2.2); + GammaTables[2] := cmsBuildGamma(256, 2.2); + GammaTables[3] := cmsBuildGamma(256, 2.2); + + + { Does create the profile } + + TheProfile := cmsCreateRGBProfile(@WhitePoint, @Primaries, GammaTables); + + + + _cmsAddTextTag(TheProfile, $63707274, 'copyright (c) you'); + _cmsAddTextTag(TheProfile, $646D6E64, 'Manufacturer'); + _cmsAddTextTag(TheProfile, $646D6464, 'Model'); + + + { Save the profile to a file } + + _cmsSaveProfile(TheProfile, 'TEST.ICM'); + + WriteLn('Profile saved'); + + { Free the gamma tables } + + cmsFreeGamma(GammaTables[1]); + cmsFreeGamma(GammaTables[2]); + cmsFreeGamma(GammaTables[3]); + + { And close the handle } + + cmsCloseProfile(TheProfile) +END. + diff --git a/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/gamutchk.pas b/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/gamutchk.pas new file mode 100755 index 00000000..e2975bfa --- /dev/null +++ b/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/gamutchk.pas @@ -0,0 +1,51 @@ +PROGRAM GamutChk; + +USES lcmsdll, Windows; + + +VAR + hLabProfile, hDisplayProfile, hProof: cmsHPROFILE; + ProofTransform : cmsHTRANSFORM; + Lab: cmsCIELab; + wRGB: ARRAY [0..2] OF Byte; + +BEGIN + WriteLn('Gamut check test'); + + hLabProfile := cmsCreateLabProfile(NIL); + hDisplayProfile := cmsCreate_sRGBProfile(); + hProof := cmsOpenProfileFromFile('test.icm', 'r'); + + + ProofTransform:=cmsCreateProofingTransform(hLabProfile, + TYPE_Lab_DBL, + hDisplayProfile, + TYPE_RGB_8, + hProof, + INTENT_RELATIVE_COLORIMETRIC, + INTENT_ABSOLUTE_COLORIMETRIC, + cmsFLAGS_SOFTPROOFING OR cmsFLAGS_GAMUTCHECK OR cmsFLAGS_NOTPRECALC); + + + cmsSetAlarmCodes(255,255,255); + + + Write('L=?'); ReadLn(Lab.L); + Write('a=?'); ReadLn(Lab.a); + Write('b=?'); ReadLn(Lab.b); + + + cmsDoTransform(ProofTransform, @Lab, @wRGB, 1); + + WriteLn('R=', wRGB[0], ' G=', wRGB[1], ' B=', wRGB[2]); + + cmsCloseProfile(hLabProfile); + cmsCloseProfile(hDisplayProfile); + cmsCloseProfile(hProof); + cmsDeleteTransform(ProofTransform); + +END. + + + + \ No newline at end of file diff --git a/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/getxyz.pas b/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/getxyz.pas new file mode 100755 index 00000000..f8eeffe5 --- /dev/null +++ b/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/getxyz.pas @@ -0,0 +1,62 @@ +program TestXYZ; +uses lcmsdll; + + +type + TRGB8 = Packed record + r, g, b : Byte + END; + +var + + InputProfile, OutputProfile : cmsHPROFILE; + Transform: cmsHTRANSFORM; + RGB8: TRGB8; + XYZ: cmsCIEXYZ; + +begin + InputProfile := cmsOpenProfileFromFile('profile.icm','r'); + OutputProfile := cmsCreateXYZProfile(); + + Transform := cmsCreateTransform(InputProfile, + TYPE_RGB_8, + OutputProfile, + TYPE_XYZ_DBL, + INTENT_ABSOLUTE_COLORIMETRIC, cmsFLAGS_NOTPRECALC); + + WriteLn('Enter RGB (0-255) or all 0 to end'); + REPEAT + + Write('R?'); ReadLn(RGB8.r); + Write('G?'); ReadLn(RGB8.g); + Write('B?'); ReadLn(RGB8.b); + + + cmsDoTransform(Transform, + @RGB8, + @XYZ, + 1); + + + {Transport to radiance} + + XYZ.X := XYZ.X * 100.; + XYZ.Y := XYZ.Y * 100.; + XYZ.Z := XYZ.Z * 100.; + + + WriteLn; WriteLn('XYZ (as viewed on D50 box)'); + + Write('X='); WriteLn(XYZ.X:3:2); + Write('Y='); WriteLn(XYZ.Y:3:2); + Write('Z='); WriteLn(XYZ.Z:3:2); + + UNTIL ((RGB8.r = 0) and (RGB8.g = 0) and (RGB8.b = 0)); + + + cmsDeleteTransform(Transform); + cmsCloseProfile(InputProfile); + cmsCloseProfile(OutputProfile) + +END. + diff --git a/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/testfrm.pas b/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/testfrm.pas new file mode 100755 index 00000000..b0311e2a --- /dev/null +++ b/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/testfrm.pas @@ -0,0 +1,95 @@ +program TestFormatting; +uses lcmsdll; + +type + RGB16 = Packed record + r, g, b : Word + END; + +var + InputProfile, OutputProfile : cmsHPROFILE; + Transform1, Transform2: cmsHTRANSFORM; + InRGB16, OutRGB16: RGB16; + OutLab: cmsCIELab; + + +procedure Mult257(var n: Word); + begin + n := n * 257 + end; + + +function Div257(n: Word) : Real; +begin + Div257 := n / 257. +end; + + +begin + + InputProfile := cmsCreate_sRGBProfile(); + OutputProfile := cmsCreateLabProfile(NIL); + + + Transform1 := cmsCreateTransform(InputProfile, + TYPE_RGB_16, + OutputProfile, + TYPE_Lab_DBL, + INTENT_PERCEPTUAL, cmsFLAGS_NOTPRECALC); + + Transform2 := cmsCreateTransform(OutputProfile, + TYPE_Lab_DBL, + InputProfile, + TYPE_RGB_16, + INTENT_PERCEPTUAL, cmsFLAGS_NOTPRECALC); + + REPEAT + + Write('R?'); ReadLn(InRGB16.r); + Write('G?'); ReadLn(InRGB16.g); + Write('B?'); ReadLn(InRGB16.b); + + + { Expand to 16 bits } + + Mult257(InRGB16.r); + Mult257(InRGB16.g); + Mult257(InRGB16.b); + + + { Forward } + + cmsDoTransform(Transform1, + @InRGB16, + @OutLab, + 1); + + + Write('L*='); WriteLn(OutLab.L:3:2); + Write('a*='); WriteLn(OutLab.a:3:2); + Write('b*='); WriteLn(OutLab.b:3:2); + + + { Backwards } + + + cmsDoTransform(Transform2, + @OutLab, + @OutRGB16, + 1); + + Write('R='); WriteLn(Div257(OutRGB16.R) :3:2); + Write('G='); WriteLn(Div257(OutRGB16.G) :3:2); + Write('B='); WriteLn(Div257(OutRGB16.B) :3:2); + + + + UNTIL ((InRGB16.r = 0) and (InRGB16.g = 0) and (InRGB16.b = 0)); + + + cmsDeleteTransform(Transform1); + cmsDeleteTransform(Transform2); + cmsCloseProfile(InputProfile); + cmsCloseProfile(OutputProfile) +END. + diff --git a/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/testwp.pas b/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/testwp.pas new file mode 100755 index 00000000..3804033e --- /dev/null +++ b/debian/lcms/lcms-1.19.dfsg2/Delphi/Samples/testwp.pas @@ -0,0 +1,78 @@ +program TestWhitePoint; +uses lcmsdll; + +type + RGB8 = Packed record + r, g, b : Byte + END; + + CMYK8 = Packed record + c, m, y, k: Byte + end; +var + WhitePoint: cmsCIExyY; + Primaries: cmsCIExyYTRIPLE; + Gamma: Array [1..3] OF LPGAMMATABLE; + InputProfile, OutputProfile : cmsHPROFILE; + Transform: cmsHTRANSFORM; + InRGB8: RGB8; + OutCMYK8: CMYK8; + + +begin + + cmsWhitePointFromTemp(9300, @WhitePoint); + + Primaries.Red.x := 0.67; + Primaries.Red.y := 0.33; + Primaries.Red.YY := 1.0; + Primaries.Green.x := 0.21; + Primaries.Green.y := 0.71; + Primaries.Green.YY := 1.0; + Primaries.Blue.x := 0.14; + Primaries.Blue.y := 0.08; + Primaries.Blue.YY := 1.0; + + + + Gamma[1] := cmsBuildGamma(256, 2.0); + Gamma[2] := cmsBuildGamma(256, 2.0); + Gamma[3] := cmsBuildGamma(256, 2.0); + + InputProfile := cmsCreateRGBProfile(@WhitePoint, @Primaries, Gamma); + OutputProfile := cmsOpenProfileFromFile('CMYK.icm', 'r'); + + + WriteLn('Input profile : ', cmsTakeProductName(InputProfile)); + WriteLn('Output profile : ', cmsTakeProductName(OutputProfile)); + + Transform := cmsCreateTransform(InputProfile, + TYPE_RGB_8, + OutputProfile, + TYPE_CMYK_8, + INTENT_PERCEPTUAL, 0); + + REPEAT + + Write('R?'); ReadLn(InRGB8.r); + Write('G?'); ReadLn(InRGB8.g); + Write('B?'); ReadLn(InRGB8.b); + + cmsDoTransform(Transform, + @InRGB8, + @OutCMYK8, + 1); + + Write('C='); WriteLn(OutCMYK8.c); + Write('M='); WriteLn(OutCMYK8.m); + Write('Y='); WriteLn(OutCMYK8.y); + Write('K='); WriteLn(OutCMYK8.k); + + UNTIL ((InRGB8.r = 0) and (InRGB8.g = 0) and (InRGB8.b = 0)); + + + cmsDeleteTransform(Transform); + cmsCloseProfile(InputProfile); + cmsCloseProfile(OutputProfile) +END. + diff --git a/debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.cfg b/debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.cfg new file mode 100755 index 00000000..08c593d8 --- /dev/null +++ b/debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.cfg @@ -0,0 +1,38 @@ +-$A8 +-$B- +-$C+ +-$D+ +-$E- +-$F- +-$G+ +-$H+ +-$I+ +-$J- +-$K- +-$L+ +-$M- +-$N+ +-$O+ +-$P+ +-$Q- +-$R- +-$S- +-$T- +-$U- +-$V+ +-$W- +-$X+ +-$YD +-$Z1 +-cg +-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +-H+ +-W+ +-M +-$M16384,1048576 +-K$00400000 +-LE"c:\archivos de programa\borland\delphi7\Projects\Bpl" +-LN"c:\archivos de programa\borland\delphi7\Projects\Bpl" +-w-UNSAFE_TYPE +-w-UNSAFE_CODE +-w-UNSAFE_CAST diff --git a/debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.dof b/debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.dof new file mode 100755 index 00000000..34c454b0 --- /dev/null +++ b/debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.dof @@ -0,0 +1,136 @@ +[FileVersion] +Version=7.0 +[Compiler] +A=8 +B=0 +C=1 +D=1 +E=0 +F=0 +G=1 +H=1 +I=1 +J=0 +K=0 +L=1 +M=0 +N=1 +O=1 +P=1 +Q=0 +R=0 +S=0 +T=0 +U=0 +V=1 +W=0 +X=1 +Y=1 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +NamespacePrefix= +SymbolDeprecated=1 +SymbolLibrary=1 +SymbolPlatform=1 +UnitLibrary=1 +UnitPlatform=1 +UnitDeprecated=1 +HResultCompat=1 +HidingMember=1 +HiddenVirtual=1 +Garbage=1 +BoundsError=1 +ZeroNilCompat=1 +StringConstTruncated=1 +ForLoopVarVarPar=1 +TypedConstVarPar=1 +AsgToTypedConst=1 +CaseLabelRange=1 +ForVariable=1 +ConstructingAbstract=1 +ComparisonFalse=1 +ComparisonTrue=1 +ComparingSignedUnsigned=1 +CombiningSignedUnsigned=1 +UnsupportedConstruct=1 +FileOpen=1 +FileOpenUnitSrc=1 +BadGlobalSymbol=1 +DuplicateConstructorDestructor=1 +InvalidDirective=1 +PackageNoLink=1 +PackageThreadVar=1 +ImplicitImport=1 +HPPEMITIgnored=1 +NoRetVal=1 +UseBeforeDef=1 +ForLoopVarUndef=1 +UnitNameMismatch=1 +NoCFGFileFound=1 +MessageDirective=1 +ImplicitVariants=1 +UnicodeToLocale=1 +LocaleToUnicode=1 +ImagebaseMultiple=1 +SuspiciousTypecast=1 +PrivatePropAccessor=1 +UnsafeType=0 +UnsafeCode=0 +UnsafeCast=0 +[Linker] +MapFile=0 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription= +[Directories] +OutputDir= +UnitOutputDir= +PackageDLLOutputDir= +PackageDCPOutputDir= +SearchPath= +Packages= +Conditionals= +DebugSourceDirs= +UsePackages=0 +[Parameters] +RunParams= +HostApplication= +Launcher= +UseLauncher=0 +DebugCWD=d:\lcms-1.13\delphi +[Language] +ActiveLang= +ProjectLang= +RootDir= +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= diff --git a/debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.dpr b/debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.dpr new file mode 100755 index 00000000..a78d56ce --- /dev/null +++ b/debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.dpr @@ -0,0 +1,13 @@ +program delphidemo; + +uses + Forms, + demo1 in 'demo1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.res b/debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.res new file mode 100755 index 00000000..ca4824f8 Binary files /dev/null and b/debian/lcms/lcms-1.19.dfsg2/Delphi/delphidemo.res differ diff --git a/debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.dcu b/debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.dcu new file mode 100755 index 00000000..af795904 Binary files /dev/null and b/debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.dcu differ diff --git a/debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.ddp b/debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.ddp new file mode 100755 index 00000000..4370276c Binary files /dev/null and b/debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.ddp differ diff --git a/debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.dfm b/debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.dfm new file mode 100755 index 00000000..c56466b3 Binary files /dev/null and b/debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.dfm differ diff --git a/debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.pas b/debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.pas new file mode 100755 index 00000000..3b474cf8 --- /dev/null +++ b/debian/lcms/lcms-1.19.dfsg2/Delphi/demo1.pas @@ -0,0 +1,241 @@ +unit demo1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ExtCtrls, StdCtrls, ExtDlgs, lcmsdll, ComCtrls; + +type + TForm1 = class(TForm) + + Image1: TImage; + Image2: TImage; + Panel1: TPanel; + Splitter1: TSplitter; + Button2: TButton; + ComboBoxInput: TComboBox; + ComboBoxOutput: TComboBox; + Label1: TLabel; + Label2: TLabel; + WBCompensation: TCheckBox; + NoTransform: TCheckBox; + RadioGroup1: TRadioGroup; + OpenPictureDialog1: TOpenPictureDialog; + Button1: TButton; + ProgressBar1: TProgressBar; + ComboBoxIntent: TComboBox; + Label3: TLabel; + Button3: TButton; + Button4: TButton; + OpenDialog1: TOpenDialog; + + procedure Button2Click(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button4Click(Sender: TObject); + private + { Private declarations } + function ComputeFlags: DWORD; + + public + constructor Create(Owner: TComponent); Override; + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +CONST +IS_INPUT = $1; +IS_DISPLAY = $2; +IS_COLORSPACE = $4; +IS_OUTPUT = $8; +IS_ABSTRACT = $10; + + +FUNCTION InSignatures(Signature:icProfileClassSignature; dwFlags: DWORD): Boolean; +BEGIN + + if (((dwFlags AND IS_DISPLAY) <> 0) AND (Signature = icSigDisplayClass)) then InSignatures := TRUE + else + if (((dwFlags AND IS_OUTPUT) <> 0) AND (Signature = icSigOutputClass)) then InSignatures := TRUE + else + if (((dwFlags AND IS_INPUT) <> 0) AND (Signature = icSigInputClass)) then InSignatures := TRUE + else + if (((dwFlags AND IS_COLORSPACE) <> 0) AND (Signature = icSigColorSpaceClass)) then InSignatures := TRUE + else + if (((dwFlags AND IS_ABSTRACT) <> 0) AND (Signature = icSigAbstractClass)) then InSignatures := TRUE + else + InSignatures := FALSE +END; + +PROCEDURE FillCombo(var Combo: TComboBox; Signatures: DWORD); +var + Files, Descriptions : TStringList; + Found: Integer; + SearchRec: TSearchRec; + Path, Profile: String; + Dir: ARRAY[0..1024] OF Char; + hProfile : cmsHPROFILE; +begin + Files := TStringList.Create; + Descriptions := TStringList.Create; + GetSystemDirectory(Dir, 1023); + Path := String(Dir) + '\SPOOL\DRIVERS\COLOR\'; + Found := FindFirst(Path + '*.icm', faAnyFile, SearchRec); + while Found = 0 do + begin + Profile := Path + SearchRec.Name; + hProfile := cmsOpenProfileFromFile(PChar(Profile), 'r'); + if (hProfile <> NIL) THEN + begin + + if ((cmsGetColorSpace(hProfile) = icSigRgbData) AND + InSignatures(cmsGetDeviceClass(hProfile), Signatures)) then + begin + Descriptions.Add(cmsTakeProductDesc(hProfile)); + Files.Add(Profile); + end; + cmsCloseProfile(hProfile); + end; + + Found := FindNext(SearchRec); + + end; + FindClose(SearchRec); + Combo.Items := Descriptions; + Combo.Tag := Integer(Files); +end; + + +constructor TForm1.Create(Owner: TComponent); +begin + inherited Create(Owner); + FillCombo(ComboBoxInput, IS_INPUT OR IS_COLORSPACE OR IS_DISPLAY); + FillCombo(ComboBoxOutput, $FFFF {IS_DISPLAY} ); + ComboBoxIntent.ItemIndex := INTENT_PERCEPTUAL; +end; + +procedure TForm1.Button2Click(Sender: TObject); +begin + if OpenPictureDialog1.Execute then begin + Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); + Image1.Picture.Bitmap.PixelFormat := pf24bit; + Image2.Picture.Bitmap := TBitmap.Create; + Image2.Picture.Bitmap.PixelFormat := pf24bit; + Image2.Picture.Bitmap.Dormant; + Image2.Picture.Bitmap.width := Image1.Picture.Bitmap.width; + Image2.Picture.Bitmap.height := Image1.Picture.Bitmap.height; + end +end; + +function SelectedFile(var Combo: TComboBox):string; +var List: TStringList; + n: Integer; +begin + + List := TStringList(Combo.Tag); + n := Combo.ItemIndex; + if (n >= 0) then + SelectedFile := List.Strings[n] + else + SelectedFile := Combo.Text; +end; + + +function TForm1.ComputeFlags: DWORD; +var dwFlags: DWORD; +begin + dwFlags := 0; + if (WBCompensation.Checked) then + begin + dwFlags := dwFlags OR cmsFLAGS_WHITEBLACKCOMPENSATION + end; + + if (NoTransform.Checked) then + begin + dwFlags := dwFlags OR cmsFLAGS_NULLTRANSFORM + end; + + + case RadioGroup1.ItemIndex of + 0: dwFlags := dwFlags OR cmsFLAGS_NOTPRECALC; + 2: dwFlags := dwFlags OR cmsFLAGS_HIGHRESPRECALC; + 3: dwFlags := dwFlags OR cmsFLAGS_LOWRESPRECALC; + end; + + ComputeFlags := dwFlags +end; + +procedure TForm1.Button1Click(Sender: TObject); +var + Source, Dest: String; + hSrc, hDest : cmsHPROFILE; + xform: cmsHTRANSFORM; + i, PicW, PicH: Integer; + Intent: Integer; + dwFlags : DWORD; +begin + + + Source := SelectedFile(ComboBoxInput); + Dest := SelectedFile(ComboBoxOutput); + + dwFlags := ComputeFlags; + + Intent := ComboBoxIntent.ItemIndex; + + if (Source <> '') AND (Dest <> '') then + begin + hSrc := cmsOpenProfileFromFile(PChar(Source), 'r'); + hDest:= cmsOpenProfileFromFile(PChar(Dest), 'r'); + + xform := cmsCreateTransform(hSrc, TYPE_BGR_8, hDest, TYPE_BGR_8, + Intent, dwFlags); + + + PicW := Image2.Picture.Width; + PicH := Image2.Picture.Height; + ProgressBar1.Min := 0; + ProgressBar1.Max := PicH; + ProgressBar1.Step := 1; + + for i:= 0 TO (PicH -1) do + begin + if ((i MOD 100) = 0) then + ProgressBar1.Position := i; + + cmsDoTransform(xform, + Image1.Picture.Bitmap.Scanline[i], + Image2.Picture.Bitmap.Scanline[i], + PicW); + + end; + ProgressBar1.Position := PicH; + + cmsDeleteTransform(xform); + cmsCloseProfile(hSrc); + cmsCloseProfile(hDest); + Image2.Repaint; + ProgressBar1.Position := 0; + end +end; + +procedure TForm1.Button3Click(Sender: TObject); +begin + if OpenDialog1.Execute then + ComboBoxInput.Text:=OpenDialog1.FileName; +end; + +procedure TForm1.Button4Click(Sender: TObject); +begin + if OpenDialog1.Execute then + ComboBoxOutput.Text:=OpenDialog1.FileName; +end; + +end. diff --git a/debian/lcms/lcms-1.19.dfsg2/Delphi/lcmsdll.pas b/debian/lcms/lcms-1.19.dfsg2/Delphi/lcmsdll.pas new file mode 100755 index 00000000..f17ad6bd --- /dev/null +++ b/debian/lcms/lcms-1.19.dfsg2/Delphi/lcmsdll.pas @@ -0,0 +1,991 @@ +// +// 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. -- cgit v1.2.1