Tizen 2.0 Release
[external/lcms.git] / utils / delphi / lcms2dll.pas
1 //\r
2 //  Little cms DELPHI wrapper\r
3 //---------------------------------------------------------------------------------\r
4 //\r
5 //  Little Color Management System\r
6 //  Copyright (c) 1998-2010 Marti Maria Saguer\r
7 //\r
8 // Permission is hereby granted, free of charge, to any person obtaining\r
9 // a copy of this software and associated documentation files (the "Software"),\r
10 // to deal in the Software without restriction, including without limitation\r
11 // the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
12 // and/or sell copies of the Software, and to permit persons to whom the Software\r
13 // is furnished to do so, subject to the following conditions:\r
14 //\r
15 // The above copyright notice and this permission notice shall be included in\r
16 // all copies or substantial portions of the Software.\r
17 //\r
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
19 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\r
20 // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
21 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
22 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
23 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
24 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
25 //\r
26 //---------------------------------------------------------------------------------\r
27 //\r
28 // Version 2.1\r
29 //\r
30 \r
31 UNIT lcms2dll;\r
32 \r
33 INTERFACE\r
34 \r
35 USES Windows;\r
36 \r
37  TYPE \r
38 \r
39   Uint8   = Byte;\r
40   Int8    = Shortint;\r
41   UInt16  = Word;\r
42   Int16   = Smallint;\r
43   UInt32  = LongWord;\r
44   Int32   = Longint;\r
45 \r
46  TYPE \r
47      cmsUInt8Number   = Uint8;\r
48      cmsInt8Number    = Int8;\r
49      cmsUInt16Number  = UInt16;\r
50      cmsInt16Number   = Int16;\r
51 \r
52      cmsUInt32Number  = UInt32;\r
53      cmsInt32Number   = Int32;\r
54      cmsInt64Number   = Int64;\r
55      cmsUInt64Number  = UInt64;\r
56 \r
57      cmsFloat32Number = Single;\r
58      cmsFloat64Number = Double;\r
59 \r
60      LPcmsUInt8Number    = ^cmsUInt8Number;\r
61      LPcmsInt8Number     = ^cmsInt8Number;  \r
62      LPcmsUInt16Number   = ^cmsUInt16Number;  \r
63      LPcmsInt16Number    = ^cmsInt16Number;  \r
64      \r
65      LPcmsUInt32Number   = ^cmsUInt32Number;  \r
66      LPcmsInt32Number    = ^cmsInt32Number;  \r
67      LPcmsInt64Number    = ^cmsInt64Number;  \r
68      LPcmsUInt64Number   = ^cmsUInt64Number;  \r
69      \r
70      LPcmsFloat32Number  = ^cmsFloat32Number; \r
71      LPcmsFloat64Number  = ^cmsFloat64Number; \r
72 \r
73 \r
74      // Derivative types\r
75      cmsSignature        = cmsUInt32Number;\r
76      cmsU8Fixed8Number   = cmsUInt16Number;\r
77      cmsS15Fixed16Number = cmsInt32Number;\r
78      cmsU16Fixed16Number = cmsUInt32Number;\r
79 \r
80      // Boolean type, which will be using the native integer\r
81      cmsBool = Boolean;\r
82 \r
83  CONST\r
84 \r
85     // Some common definitions\r
86     cmsMAX_PATH     = 256;\r
87 \r
88     // D50 XYZ normalized to Y=1.0\r
89     cmsD50X             = 0.9642;\r
90     cmsD50Y             = 1.0;\r
91     cmsD50Z             = 0.8249;\r
92 \r
93     // V4 perceptual black\r
94     cmsPERCEPTUAL_BLACK_X  = 0.00336;\r
95     cmsPERCEPTUAL_BLACK_Y  = 0.0034731;\r
96     cmsPERCEPTUAL_BLACK_Z  = 0.00287;\r
97 \r
98     // Definitions in ICC spec\r
99     cmsMagicNumber      = $61637370;     // 'acsp'\r
100     lcmsSignature       = $6c636d73;     // 'lcms'\r
101 \r
102 \r
103 TYPE\r
104 \r
105 // Base ICC type definitions\r
106 cmsTagTypeSignature = (\r
107   cmsSigChromaticityType                  = $6368726D,  // 'chrm'\r
108   cmsSigColorantOrderType                 = $636C726F,  // 'clro'\r
109   cmsSigColorantTableType                 = $636C7274,  // 'clrt'\r
110   cmsSigCrdInfoType                       = $63726469,  // 'crdi'\r
111   cmsSigCurveType                         = $63757276,  // 'curv'\r
112   cmsSigDataType                          = $64617461,  // 'data'\r
113   cmsSigDictType                          = $64696374,  // 'dict'\r
114   cmsSigDateTimeType                      = $6474696D,  // 'dtim'\r
115   cmsSigDeviceSettingsType                = $64657673,  // 'devs'\r
116   cmsSigLut16Type                         = $6d667432,  // 'mft2'\r
117   cmsSigLut8Type                          = $6d667431,  // 'mft1'\r
118   cmsSigLutAtoBType                       = $6d414220,  // 'mAB '\r
119   cmsSigLutBtoAType                       = $6d424120,  // 'mBA '\r
120   cmsSigMeasurementType                   = $6D656173,  // 'meas'\r
121   cmsSigMultiLocalizedUnicodeType         = $6D6C7563,  // 'mluc'\r
122   cmsSigMultiProcessElementType           = $6D706574,  // 'mpet'\r
123   cmsSigNamedColorType                    = $6E636f6C,  // 'ncol' -- DEPRECATED!\r
124   cmsSigNamedColor2Type                   = $6E636C32,  // 'ncl2'\r
125   cmsSigParametricCurveType               = $70617261,  // 'para'\r
126   cmsSigProfileSequenceDescType           = $70736571,  // 'pseq'\r
127   cmsSigProfileSequenceIdType             = $70736964,  // 'psid'\r
128   cmsSigResponseCurveSet16Type            = $72637332,  // 'rcs2'\r
129   cmsSigS15Fixed16ArrayType               = $73663332,  // 'sf32'\r
130   cmsSigScreeningType                     = $7363726E,  // 'scrn'\r
131   cmsSigSignatureType                     = $73696720,  // 'sig '\r
132   cmsSigTextType                          = $74657874,  // 'text'\r
133   cmsSigTextDescriptionType               = $64657363,  // 'desc'\r
134   cmsSigU16Fixed16ArrayType               = $75663332,  // 'uf32'\r
135   cmsSigUcrBgType                         = $62666420,  // 'bfd '\r
136   cmsSigUInt16ArrayType                   = $75693136,  // 'ui16'\r
137   cmsSigUInt32ArrayType                   = $75693332,  // 'ui32'\r
138   cmsSigUInt64ArrayType                   = $75693634,  // 'ui64'\r
139   cmsSigUInt8ArrayType                    = $75693038,  // 'ui08'\r
140   cmsSigViewingConditionsType             = $76696577,  // 'view'\r
141   cmsSigXYZType                           = $58595A20,  // 'XYZ '\r
142   cmsSigVcgtType                          = $76636774   // 'vcgt'\r
143   );\r
144 \r
145 // Base ICC tag definitions\r
146 cmsTagSignature = (\r
147     cmsSigAToB0Tag                          = $41324230,  // 'A2B0'\r
148     cmsSigAToB1Tag                          = $41324231,  // 'A2B1'\r
149     cmsSigAToB2Tag                          = $41324232,  // 'A2B2'\r
150     cmsSigBlueColorantTag                   = $6258595A,  // 'bXYZ'\r
151     cmsSigBlueMatrixColumnTag               = $6258595A,  // 'bXYZ'\r
152     cmsSigBlueTRCTag                        = $62545243,  // 'bTRC'\r
153     cmsSigBToA0Tag                          = $42324130,  // 'B2A0'\r
154     cmsSigBToA1Tag                          = $42324131,  // 'B2A1'\r
155     cmsSigBToA2Tag                          = $42324132,  // 'B2A2'\r
156     cmsSigCalibrationDateTimeTag            = $63616C74,  // 'calt'\r
157     cmsSigCharTargetTag                     = $74617267,  // 'targ'\r
158     cmsSigChromaticAdaptationTag            = $63686164,  // 'chad'\r
159     cmsSigChromaticityTag                   = $6368726D,  // 'chrm'\r
160     cmsSigColorantOrderTag                  = $636C726F,  // 'clro'\r
161     cmsSigColorantTableTag                  = $636C7274,  // 'clrt'\r
162     cmsSigColorantTableOutTag               = $636C6F74,  // 'clot'\r
163     cmsSigColorimetricIntentImageStateTag   = $63696973,  // 'ciis'\r
164     cmsSigCopyrightTag                      = $63707274,  // 'cprt'\r
165     cmsSigCrdInfoTag                        = $63726469,  // 'crdi'\r
166     cmsSigDataTag                           = $64617461,  // 'data'\r
167     cmsSigDateTimeTag                       = $6474696D,  // 'dtim'\r
168     cmsSigDeviceMfgDescTag                  = $646D6E64,  // 'dmnd'\r
169     cmsSigDeviceModelDescTag                = $646D6464,  // 'dmdd'\r
170     cmsSigDeviceSettingsTag                 = $64657673,  // 'devs'\r
171     cmsSigDToB0Tag                          = $44324230,  // 'D2B0'\r
172     cmsSigDToB1Tag                          = $44324231,  // 'D2B1'\r
173     cmsSigDToB2Tag                          = $44324232,  // 'D2B2'\r
174     cmsSigDToB3Tag                          = $44324233,  // 'D2B3'\r
175     cmsSigBToD0Tag                          = $42324430,  // 'B2D0'\r
176     cmsSigBToD1Tag                          = $42324431,  // 'B2D1'\r
177     cmsSigBToD2Tag                          = $42324432,  // 'B2D2'\r
178     cmsSigBToD3Tag                          = $42324433,  // 'B2D3'\r
179     cmsSigGamutTag                          = $67616D74,  // 'gamt'\r
180     cmsSigGrayTRCTag                        = $6b545243,  // 'kTRC'\r
181     cmsSigGreenColorantTag                  = $6758595A,  // 'gXYZ'\r
182     cmsSigGreenMatrixColumnTag              = $6758595A,  // 'gXYZ'\r
183     cmsSigGreenTRCTag                       = $67545243,  // 'gTRC'\r
184     cmsSigLuminanceTag                      = $6C756d69,  // 'lumi'\r
185     cmsSigMeasurementTag                    = $6D656173,  // 'meas'\r
186     cmsSigMediaBlackPointTag                = $626B7074,  // 'bkpt'\r
187     cmsSigMediaWhitePointTag                = $77747074,  // 'wtpt'\r
188     cmsSigNamedColorTag                     = $6E636f6C,  // 'ncol' // Deprecated by the ICC\r
189     cmsSigNamedColor2Tag                    = $6E636C32,  // 'ncl2'\r
190     cmsSigOutputResponseTag                 = $72657370,  // 'resp'\r
191     cmsSigPerceptualRenderingIntentGamutTag = $72696730,  // 'rig0'\r
192     cmsSigPreview0Tag                       = $70726530,  // 'pre0'\r
193     cmsSigPreview1Tag                       = $70726531,  // 'pre1'\r
194     cmsSigPreview2Tag                       = $70726532,  // 'pre2'\r
195     cmsSigProfileDescriptionTag             = $64657363,  // 'desc'\r
196     cmsSigProfileSequenceDescTag            = $70736571,  // 'pseq'\r
197     cmsSigProfileSequenceIdTag              = $70736964,  // 'psid'\r
198     cmsSigPs2CRD0Tag                        = $70736430,  // 'psd0'\r
199     cmsSigPs2CRD1Tag                        = $70736431,  // 'psd1'\r
200     cmsSigPs2CRD2Tag                        = $70736432,  // 'psd2'\r
201     cmsSigPs2CRD3Tag                        = $70736433,  // 'psd3'\r
202     cmsSigPs2CSATag                         = $70733273,  // 'ps2s'\r
203     cmsSigPs2RenderingIntentTag             = $70733269,  // 'ps2i'\r
204     cmsSigRedColorantTag                    = $7258595A,  // 'rXYZ'\r
205     cmsSigRedMatrixColumnTag                = $7258595A,  // 'rXYZ'\r
206     cmsSigRedTRCTag                         = $72545243,  // 'rTRC'\r
207     cmsSigSaturationRenderingIntentGamutTag = $72696732,  // 'rig2'\r
208     cmsSigScreeningDescTag                  = $73637264,  // 'scrd'\r
209     cmsSigScreeningTag                      = $7363726E,  // 'scrn'\r
210     cmsSigTechnologyTag                     = $74656368,  // 'tech'\r
211     cmsSigUcrBgTag                          = $62666420,  // 'bfd '\r
212     cmsSigViewingCondDescTag                = $76756564,  // 'vued'\r
213     cmsSigViewingConditionsTag              = $76696577,  // 'view'\r
214     cmsSigVcgtTag                           = $76636774,  // 'vcgt'\r
215     cmsSigMetaTag                           = $6D657461   // 'meta'\r
216 );\r
217 \r
218 // ICC Technology tag\r
219 cmsTechnologySignature = (\r
220     cmsSigDigitalCamera                     = $6463616D,  // 'dcam'\r
221     cmsSigFilmScanner                       = $6673636E,  // 'fscn'\r
222     cmsSigReflectiveScanner                 = $7273636E,  // 'rscn'\r
223     cmsSigInkJetPrinter                     = $696A6574,  // 'ijet'\r
224     cmsSigThermalWaxPrinter                 = $74776178,  // 'twax'\r
225     cmsSigElectrophotographicPrinter        = $6570686F,  // 'epho'\r
226     cmsSigElectrostaticPrinter              = $65737461,  // 'esta'\r
227     cmsSigDyeSublimationPrinter             = $64737562,  // 'dsub'\r
228     cmsSigPhotographicPaperPrinter          = $7270686F,  // 'rpho'\r
229     cmsSigFilmWriter                        = $6670726E,  // 'fprn'\r
230     cmsSigVideoMonitor                      = $7669646D,  // 'vidm'\r
231     cmsSigVideoCamera                       = $76696463,  // 'vidc'\r
232     cmsSigProjectionTelevision              = $706A7476,  // 'pjtv'\r
233     cmsSigCRTDisplay                        = $43525420,  // 'CRT '\r
234     cmsSigPMDisplay                         = $504D4420,  // 'PMD '\r
235     cmsSigAMDisplay                         = $414D4420,  // 'AMD '\r
236     cmsSigPhotoCD                           = $4B504344,  // 'KPCD'\r
237     cmsSigPhotoImageSetter                  = $696D6773,  // 'imgs'\r
238     cmsSigGravure                           = $67726176,  // 'grav'\r
239     cmsSigOffsetLithography                 = $6F666673,  // 'offs'\r
240     cmsSigSilkscreen                        = $73696C6B,  // 'silk'\r
241     cmsSigFlexography                       = $666C6578,  // 'flex'\r
242     cmsSigMotionPictureFilmScanner          = $6D706673,  // 'mpfs'\r
243     cmsSigMotionPictureFilmRecorder         = $6D706672,  // 'mpfr'\r
244     cmsSigDigitalMotionPictureCamera        = $646D7063,  // 'dmpc'\r
245     cmsSigDigitalCinemaProjector            = $64636A70   // 'dcpj'\r
246 );\r
247 \r
248 \r
249 // ICC Color spaces\r
250 cmsColorSpaceSignature = (\r
251     cmsSigXYZData                           = $58595A20,  // 'XYZ '\r
252     cmsSigLabData                           = $4C616220,  // 'Lab '\r
253     cmsSigLuvData                           = $4C757620,  // 'Luv '\r
254     cmsSigYCbCrData                         = $59436272,  // 'YCbr'\r
255     cmsSigYxyData                           = $59787920,  // 'Yxy '\r
256     cmsSigRgbData                           = $52474220,  // 'RGB '\r
257     cmsSigGrayData                          = $47524159,  // 'GRAY'\r
258     cmsSigHsvData                           = $48535620,  // 'HSV '\r
259     cmsSigHlsData                           = $484C5320,  // 'HLS '\r
260     cmsSigCmykData                          = $434D594B,  // 'CMYK'\r
261     cmsSigCmyData                           = $434D5920,  // 'CMY '\r
262     cmsSigMCH1Data                          = $4D434831,  // 'MCH1'\r
263     cmsSigMCH2Data                          = $4D434832,  // 'MCH2'\r
264     cmsSigMCH3Data                          = $4D434833,  // 'MCH3'\r
265     cmsSigMCH4Data                          = $4D434834,  // 'MCH4'\r
266     cmsSigMCH5Data                          = $4D434835,  // 'MCH5'\r
267     cmsSigMCH6Data                          = $4D434836,  // 'MCH6'\r
268     cmsSigMCH7Data                          = $4D434837,  // 'MCH7'\r
269     cmsSigMCH8Data                          = $4D434838,  // 'MCH8'\r
270     cmsSigMCH9Data                          = $4D434839,  // 'MCH9'\r
271     cmsSigMCHAData                          = $4D43483A,  // 'MCHA'\r
272     cmsSigMCHBData                          = $4D43483B,  // 'MCHB'\r
273     cmsSigMCHCData                          = $4D43483C,  // 'MCHC'\r
274     cmsSigMCHDData                          = $4D43483D,  // 'MCHD'\r
275     cmsSigMCHEData                          = $4D43483E,  // 'MCHE'\r
276     cmsSigMCHFData                          = $4D43483F,  // 'MCHF'\r
277     cmsSigNamedData                         = $6e6d636c,  // 'nmcl'\r
278     cmsSig1colorData                        = $31434C52,  // '1CLR'\r
279     cmsSig2colorData                        = $32434C52,  // '2CLR'\r
280     cmsSig3colorData                        = $33434C52,  // '3CLR'\r
281     cmsSig4colorData                        = $34434C52,  // '4CLR'\r
282     cmsSig5colorData                        = $35434C52,  // '5CLR'\r
283     cmsSig6colorData                        = $36434C52,  // '6CLR'\r
284     cmsSig7colorData                        = $37434C52,  // '7CLR'\r
285     cmsSig8colorData                        = $38434C52,  // '8CLR'\r
286     cmsSig9colorData                        = $39434C52,  // '9CLR'\r
287     cmsSig10colorData                       = $41434C52,  // 'ACLR'\r
288     cmsSig11colorData                       = $42434C52,  // 'BCLR'\r
289     cmsSig12colorData                       = $43434C52,  // 'CCLR'\r
290     cmsSig13colorData                       = $44434C52,  // 'DCLR'\r
291     cmsSig14colorData                       = $45434C52,  // 'ECLR'\r
292     cmsSig15colorData                       = $46434C52,  // 'FCLR'\r
293     cmsSigLuvKData                          = $4C75764B   // 'LuvK'\r
294 );\r
295 \r
296 // ICC Profile Class\r
297 cmsProfileClassSignature = (\r
298     cmsSigInputClass                        = $73636E72,  // 'scnr'\r
299     cmsSigDisplayClass                      = $6D6E7472,  // 'mntr'\r
300     cmsSigOutputClass                       = $70727472,  // 'prtr'\r
301     cmsSigLinkClass                         = $6C696E6B,  // 'link'\r
302     cmsSigAbstractClass                     = $61627374,  // 'abst'\r
303     cmsSigColorSpaceClass                   = $73706163,  // 'spac'\r
304     cmsSigNamedColorClass                   = $6e6d636c   // 'nmcl'\r
305 );\r
306 \r
307 \r
308 // ICC Platforms\r
309 cmsPlatformSignature = (\r
310     cmsSigMacintosh                         = $4150504C,  // 'APPL'\r
311     cmsSigMicrosoft                         = $4D534654,  // 'MSFT'\r
312     cmsSigSolaris                           = $53554E57,  // 'SUNW'\r
313     cmsSigSGI                               = $53474920,  // 'SGI '\r
314     cmsSigTaligent                          = $54474E54,  // 'TGNT'\r
315     cmsSigUnices                            = $2A6E6978   // '*nix'   // From argyll -- Not official\r
316 );\r
317 \r
318 CONST \r
319 \r
320     // Reference gamut\r
321     cmsSigPerceptualReferenceMediumGamut         = $70726d67;  //'prmg'\r
322 \r
323     // For cmsSigColorimetricIntentImageStateTag\r
324     cmsSigSceneColorimetryEstimates              = $73636F65;  //'scoe'\r
325     cmsSigSceneAppearanceEstimates               = $73617065;  //'sape'\r
326     cmsSigFocalPlaneColorimetryEstimates         = $66706365;  //'fpce'\r
327     cmsSigReflectionHardcopyOriginalColorimetry  = $72686F63;  //'rhoc'\r
328     cmsSigReflectionPrintOutputColorimetry       = $72706F63;  //'rpoc'\r
329 \r
330 TYPE\r
331 \r
332 // Multi process elements types\r
333 cmsStageSignature = (\r
334     cmsSigCurveSetElemType              = $63767374,  //'cvst'\r
335     cmsSigMatrixElemType                = $6D617466,  //'matf'\r
336     cmsSigCLutElemType                  = $636C7574,  //'clut'\r
337 \r
338     cmsSigBAcsElemType                  = $62414353,  // 'bACS'\r
339     cmsSigEAcsElemType                  = $65414353,  // 'eACS'\r
340 \r
341     // Custom from here, not in the ICC Spec\r
342     cmsSigXYZ2LabElemType               = $6C327820,  // 'l2x '\r
343     cmsSigLab2XYZElemType               = $78326C20,  // 'x2l '\r
344     cmsSigNamedColorElemType            = $6E636C20,  // 'ncl '\r
345     cmsSigLabV2toV4                     = $32203420,  // '2 4 '\r
346     cmsSigLabV4toV2                     = $34203220,  // '4 2 '\r
347 \r
348     // Identities\r
349     cmsSigIdentityElemType              = $69646E20   // 'idn '\r
350 );\r
351 \r
352 // Types of CurveElements\r
353 cmsCurveSegSignature = (\r
354 \r
355     cmsSigFormulaCurveSeg               = $70617266, // 'parf'\r
356     cmsSigSampledCurveSeg               = $73616D66, // 'samf'\r
357     cmsSigSegmentedCurve                = $63757266  // 'curf'\r
358 );\r
359 \r
360 CONST \r
361 \r
362     // Used in ResponseCurveType\r
363     cmsSigStatusA                    = $53746141; //'StaA'\r
364     cmsSigStatusE                    = $53746145; //'StaE'\r
365     cmsSigStatusI                    = $53746149; //'StaI'\r
366     cmsSigStatusT                    = $53746154; //'StaT'\r
367     cmsSigStatusM                    = $5374614D; //'StaM'\r
368     cmsSigDN                         = $444E2020; //'DN  '\r
369     cmsSigDNP                        = $444E2050; //'DN P'\r
370     cmsSigDNN                        = $444E4E20; //'DNN '\r
371     cmsSigDNNP                       = $444E4E50; //'DNNP'\r
372 \r
373     // Device attributes, currently defined values correspond to the low 4 bytes\r
374     // of the 8 byte attribute quantity\r
375     cmsReflective     = 0;\r
376     cmsTransparency   = 1;\r
377     cmsGlossy         = 0;\r
378     cmsMatte          = 2;\r
379 \r
380 TYPE\r
381 \r
382 // Common structures in ICC tags\r
383 cmsICCData = PACKED RECORD\r
384      len  :    cmsUInt32Number;\r
385      flag :    cmsUInt32Number;\r
386      data : Array [0..1] of cmsUInt8Number;\r
387     END;\r
388 \r
389 // ICC date time\r
390 cmsDateTimeNumber = PACKED RECORD\r
391     year:     cmsUInt16Number;     \r
392     month:    cmsUInt16Number;     \r
393     day:      cmsUInt16Number;     \r
394     hours:    cmsUInt16Number;     \r
395     minutes:  cmsUInt16Number;     \r
396     seconds:  cmsUInt16Number;                 \r
397 END;\r
398 \r
399 // ICC XYZ\r
400 \r
401 cmsEncodedXYZNumber = PACKED RECORD\r
402       X: cmsS15Fixed16Number;\r
403       Y: cmsS15Fixed16Number;\r
404       Z: cmsS15Fixed16Number;\r
405 END;\r
406 \r
407 \r
408 // Profile ID as computed by MD5 algorithm\r
409 cmsProfileID = PACKED RECORD\r
410     CASE Integer OF\r
411     1: (ID8: Array[0..15] OF cmsUInt8Number);\r
412     2: (ID16: Array[0..7] OF cmsUInt16Number);\r
413     3: (ID32: Array[0..3] OF cmsUInt32Number);\r
414 END;\r
415 \r
416 \r
417 \r
418 // ----------------------------------------------------------------------------------------------\r
419 // ICC profile internal base types. Strictly, shouldn't be declared in this unit, but maybe\r
420 // somebody want to use this info for accessing profile header directly, so here it is.\r
421 \r
422 // Profile header -- it is 32-bit aligned, so no issues are expected on alignment\r
423 cmsICCHeader = PACKED RECORD\r
424          size:           cmsUInt32Number;          // Profile size in bytes\r
425          cmmId:          cmsSignature;             // CMM for this profile\r
426          version:        cmsUInt32Number;          // Format version number\r
427          deviceClass:    cmsProfileClassSignature; // Type of profile\r
428          colorSpace:     cmsColorSpaceSignature;   // Color space of data\r
429          pcs:            cmsColorSpaceSignature;   // PCS, XYZ or Lab only\r
430          date:           cmsDateTimeNumber;        // Date profile was created\r
431          magic:          cmsSignature;             // Magic Number to identify an ICC profile\r
432          platform:       cmsPlatformSignature;     // Primary Platform\r
433          flags:          cmsUInt32Number;          // Various bit settings\r
434          manufacturer:   cmsSignature;             // Device manufacturer\r
435          model:          cmsUInt32Number;          // Device model number\r
436          attributes:     cmsUInt64Number;          // Device attributes\r
437          renderingIntent:cmsUInt32Number;          // Rendering intent\r
438          illuminant:     cmsEncodedXYZNumber;      // Profile illuminant\r
439          creator:        cmsSignature;             // Profile creator\r
440          profileID:      cmsProfileID;             // Profile ID using MD5\r
441          reserved: array [0..27] of cmsInt8Number; // Reserved for future use\r
442 END;\r
443 \r
444 // ICC base tag\r
445 cmsTagBase = PACKED RECORD\r
446      sig:         cmsTagTypeSignature; \r
447      reserved:    array[0..3] of cmsInt8Number;       \r
448 END;\r
449 \r
450 // A tag entry in directory\r
451 cmsTagEntry = PACKED RECORD\r
452     sig:    cmsTagSignature;   // The tag signature\r
453     offset: cmsUInt32Number;   // Start of tag\r
454     size:   cmsUInt32Number;   // Size in bytes\r
455 END;\r
456 \r
457 \r
458 cmsContext    = Pointer;              // Context identifier for multithreaded environments\r
459 cmsHANDLE     = Pointer;              // Generic handle\r
460 cmsHPROFILE   = Pointer;             // Opaque typedefs to hide internals\r
461 cmsHTRANSFORM = Pointer;\r
462 \r
463 \r
464 CONST\r
465 \r
466      cmsMAXCHANNELS  = 16;                // Maximum number of channels in ICC profiles\r
467 \r
468 // Format of pixel is defined by one cmsUInt32Number, using bit fields as follows\r
469 //\r
470 //            A O TTTTT U Y F P X S EEE CCCC BBB\r
471 //\r
472 //            A: Floating point -- With this flag we can differentiate 16 bits as float and as int\r
473 //            O: Optimized -- previous optimization already returns the final 8-bit value\r
474 //            T: Pixeltype\r
475 //            F: Flavor  0=MinIsBlack(Chocolate) 1=MinIsWhite(Vanilla)\r
476 //            P: Planar? 0=Chunky, 1=Planar\r
477 //            X: swap 16 bps endianess?\r
478 //            S: Do swap? ie, BGR, KYMC\r
479 //            E: Extra samples\r
480 //            C: Channels (Samples per pixel)\r
481 //            B: bytes per sample\r
482 //            Y: Swap first - changes ABGR to BGRA and KCMY to CMYK\r
483 \r
484     FUNCTION FLOAT_SH(a: cmsUInt32Number): cmsUInt32Number;\r
485     FUNCTION OPTIMIZED_SH(s: cmsUInt32Number): cmsUInt32Number;\r
486     FUNCTION COLORSPACE_SH(s: cmsUInt32Number):cmsUInt32Number;\r
487     FUNCTION SWAPFIRST_SH(s: cmsUInt32Number):cmsUInt32Number;\r
488     FUNCTION FLAVOR_SH(s: cmsUInt32Number):cmsUInt32Number;\r
489     FUNCTION PLANAR_SH(p: cmsUInt32Number):cmsUInt32Number;\r
490     FUNCTION ENDIAN16_SH(e: cmsUInt32Number):cmsUInt32Number;\r
491     FUNCTION DOSWAP_SH(e: cmsUInt32Number):cmsUInt32Number;\r
492     FUNCTION EXTRA_SH(e: cmsUInt32Number):cmsUInt32Number;\r
493     FUNCTION CHANNELS_SH(c: cmsUInt32Number):cmsUInt32Number;\r
494     FUNCTION BYTES_SH(b: cmsUInt32Number):cmsUInt32Number;\r
495 \r
496 \r
497     FUNCTION T_FLOAT(a: cmsUInt32Number): cmsUInt32Number;          \r
498     FUNCTION T_OPTIMIZED(o: cmsUInt32Number): cmsUInt32Number;      \r
499     FUNCTION T_COLORSPACE(s: cmsUInt32Number): cmsUInt32Number;     \r
500     FUNCTION T_SWAPFIRST(s: cmsUInt32Number): cmsUInt32Number;      \r
501     FUNCTION T_FLAVOR(s: cmsUInt32Number): cmsUInt32Number;         \r
502     FUNCTION T_PLANAR(p: cmsUInt32Number): cmsUInt32Number;         \r
503     FUNCTION T_ENDIAN16(e: cmsUInt32Number): cmsUInt32Number;       \r
504     FUNCTION T_DOSWAP(e: cmsUInt32Number): cmsUInt32Number;         \r
505     FUNCTION T_EXTRA(e: cmsUInt32Number): cmsUInt32Number;          \r
506     FUNCTION T_CHANNELS(c: cmsUInt32Number): cmsUInt32Number;       \r
507     FUNCTION T_BYTES(b: cmsUInt32Number): cmsUInt32Number;          \r
508 \r
509 CONST\r
510 \r
511 \r
512 // Pixel types\r
513 \r
514     PT_ANY     =  0;    // Don't check colorspace\r
515                       // 1 & 2 are reserved\r
516     PT_GRAY    =  3;\r
517     PT_RGB     =  4;\r
518     PT_CMY     =  5;\r
519     PT_CMYK    =  6;\r
520     PT_YCbCr   =  7;\r
521     PT_YUV     =  8;      // Lu'v'\r
522     PT_XYZ     =  9;\r
523     PT_Lab     =  10;\r
524     PT_YUVK    =  11;     // Lu'v'K\r
525     PT_HSV     =  12;\r
526     PT_HLS     =  13;\r
527     PT_Yxy     =  14;\r
528                 \r
529     PT_MCH1    =  15;\r
530     PT_MCH2    =  16;\r
531     PT_MCH3    =  17;\r
532     PT_MCH4    =  18;\r
533     PT_MCH5    =  19;\r
534     PT_MCH6    =  20;\r
535     PT_MCH7    =  21;\r
536     PT_MCH8    =  22;\r
537     PT_MCH9    =  23;\r
538     PT_MCH10   =  24;\r
539     PT_MCH11   =  25;\r
540     PT_MCH12   =  26;\r
541     PT_MCH13   =  27;\r
542     PT_MCH14   =  28;\r
543     PT_MCH15   =  29;\r
544 \r
545     PT_LabV2   =  30;     // Identical to PT_Lab, but using the V2 old encoding\r
546 \r
547     \r
548     // Format descriptors\r
549     TYPE_GRAY_8          = $030009;\r
550     TYPE_GRAY_8_REV      = $032009;\r
551     TYPE_GRAY_16         = $03000a;\r
552     TYPE_GRAY_16_REV     = $03200a;\r
553     TYPE_GRAY_16_SE      = $03080a;\r
554     TYPE_GRAYA_8         = $030089;\r
555     TYPE_GRAYA_16        = $03008a;\r
556     TYPE_GRAYA_16_SE     = $03088a;\r
557     TYPE_GRAYA_8_PLANAR  = $031089;\r
558     TYPE_GRAYA_16_PLANAR = $03108a;\r
559     TYPE_RGB_8           = $040019;\r
560     TYPE_RGB_8_PLANAR    = $041019;\r
561     TYPE_BGR_8           = $040419;\r
562     TYPE_BGR_8_PLANAR    = $041419;\r
563     TYPE_RGB_16          = $04001a;\r
564     TYPE_RGB_16_PLANAR   = $04101a;\r
565     TYPE_RGB_16_SE       = $04081a;\r
566     TYPE_BGR_16          = $04041a;\r
567     TYPE_BGR_16_PLANAR   = $04141a;\r
568     TYPE_BGR_16_SE       = $040c1a;\r
569     TYPE_RGBA_8          = $040099;\r
570     TYPE_RGBA_8_PLANAR   = $041099;\r
571     TYPE_RGBA_16         = $04009a;\r
572     TYPE_RGBA_16_PLANAR  = $04109a;\r
573     TYPE_RGBA_16_SE      = $04089a;\r
574     TYPE_ARGB_8          = $044099;\r
575     TYPE_ARGB_16         = $04409a;\r
576     TYPE_ABGR_8          = $040499;\r
577     TYPE_ABGR_16         = $04049a;\r
578     TYPE_ABGR_16_PLANAR  = $04149a;\r
579     TYPE_ABGR_16_SE      = $040c9a;\r
580     TYPE_BGRA_8          = $044499;\r
581     TYPE_BGRA_16         = $04449a;\r
582     TYPE_BGRA_16_SE      = $04489a;\r
583     TYPE_CMY_8           = $050019;\r
584     TYPE_CMY_8_PLANAR    = $051019;\r
585     TYPE_CMY_16          = $05001a;\r
586     TYPE_CMY_16_PLANAR   = $05101a;\r
587     TYPE_CMY_16_SE       = $05081a;\r
588     TYPE_CMYK_8          = $060021;\r
589     TYPE_CMYKA_8         = $0600a1;\r
590     TYPE_CMYK_8_REV      = $062021;\r
591     TYPE_YUVK_8          = $062021;\r
592     TYPE_CMYK_8_PLANAR   = $061021;\r
593     TYPE_CMYK_16         = $060022;\r
594     TYPE_CMYK_16_REV     = $062022;\r
595     TYPE_YUVK_16         = $062022;\r
596     TYPE_CMYK_16_PLANAR  = $061022;\r
597     TYPE_CMYK_16_SE      = $060822;\r
598     TYPE_KYMC_8          = $060421;\r
599     TYPE_KYMC_16         = $060422;\r
600     TYPE_KYMC_16_SE      = $060c22;\r
601     TYPE_KCMY_8          = $064021;\r
602     TYPE_KCMY_8_REV      = $066021;\r
603     TYPE_KCMY_16         = $064022;\r
604     TYPE_KCMY_16_REV     = $066022;\r
605     TYPE_KCMY_16_SE      = $064822;\r
606     TYPE_CMYK5_8         = $130029;\r
607     TYPE_CMYK5_16        = $13002a;\r
608     TYPE_CMYK5_16_SE     = $13082a;\r
609     TYPE_KYMC5_8         = $130429;\r
610     TYPE_KYMC5_16        = $13042a;\r
611     TYPE_KYMC5_16_SE     = $130c2a;\r
612     TYPE_CMYK6_8         = $140031;\r
613     TYPE_CMYK6_8_PLANAR  = $141031;\r
614     TYPE_CMYK6_16        = $140032;\r
615     TYPE_CMYK6_16_PLANAR = $141032;\r
616     TYPE_CMYK6_16_SE     = $140832;\r
617     TYPE_CMYK7_8         = $150039;\r
618     TYPE_CMYK7_16        = $15003a;\r
619     TYPE_CMYK7_16_SE     = $15083a;\r
620     TYPE_KYMC7_8         = $150439;\r
621     TYPE_KYMC7_16        = $15043a;\r
622     TYPE_KYMC7_16_SE     = $150c3a;\r
623     TYPE_CMYK8_8         = $160041;\r
624     TYPE_CMYK8_16        = $160042;\r
625     TYPE_CMYK8_16_SE     = $160842;\r
626     TYPE_KYMC8_8         = $160441;\r
627     TYPE_KYMC8_16        = $160442;\r
628     TYPE_KYMC8_16_SE     = $160c42;\r
629     TYPE_CMYK9_8         = $170049;\r
630     TYPE_CMYK9_16        = $17004a;\r
631     TYPE_CMYK9_16_SE     = $17084a;\r
632     TYPE_KYMC9_8         = $170449;\r
633     TYPE_KYMC9_16        = $17044a;\r
634     TYPE_KYMC9_16_SE     = $170c4a;\r
635     TYPE_CMYK10_8        = $180051;\r
636     TYPE_CMYK10_16       = $180052;\r
637     TYPE_CMYK10_16_SE    = $180852;\r
638     TYPE_KYMC10_8        = $180451;\r
639     TYPE_KYMC10_16       = $180452;\r
640     TYPE_KYMC10_16_SE    = $180c52;\r
641     TYPE_CMYK11_8        = $190059;\r
642     TYPE_CMYK11_16       = $19005a;\r
643     TYPE_CMYK11_16_SE    = $19085a;\r
644     TYPE_KYMC11_8        = $190459;\r
645     TYPE_KYMC11_16       = $19045a;\r
646     TYPE_KYMC11_16_SE    = $190c5a;\r
647     TYPE_CMYK12_8        = $1a0061;\r
648     TYPE_CMYK12_16       = $1a0062;\r
649     TYPE_CMYK12_16_SE    = $1a0862;\r
650     TYPE_KYMC12_8        = $1a0461;\r
651     TYPE_KYMC12_16       = $1a0462;\r
652     TYPE_KYMC12_16_SE    = $1a0c62;\r
653     TYPE_XYZ_16          = $09001a;\r
654     TYPE_Lab_8           = $0a0019;\r
655     TYPE_ALab_8          = $0a0499;\r
656     TYPE_Lab_16          = $0a001a;\r
657     TYPE_Yxy_16          = $0e001a;\r
658     TYPE_YCbCr_8         = $070019;\r
659     TYPE_YCbCr_8_PLANAR  = $071019;\r
660     TYPE_YCbCr_16        = $07001a;\r
661     TYPE_YCbCr_16_PLANAR = $07101a;\r
662     TYPE_YCbCr_16_SE     = $07081a;\r
663     TYPE_YUV_8           = $080019;\r
664     TYPE_YUV_8_PLANAR    = $081019;\r
665     TYPE_YUV_16          = $08001a;\r
666     TYPE_YUV_16_PLANAR   = $08101a;\r
667     TYPE_YUV_16_SE       = $08081a;\r
668     TYPE_HLS_8           = $0d0019;\r
669     TYPE_HLS_8_PLANAR    = $0d1019;\r
670     TYPE_HLS_16          = $0d001a;\r
671     TYPE_HLS_16_PLANAR   = $0d101a;\r
672     TYPE_HLS_16_SE       = $0d081a;\r
673     TYPE_HSV_8           = $0c0019;\r
674     TYPE_HSV_8_PLANAR    = $0c1019;\r
675     TYPE_HSV_16          = $0c001a;\r
676     TYPE_HSV_16_PLANAR   = $0c101a;\r
677     TYPE_HSV_16_SE       = $0c081a;\r
678 \r
679     TYPE_NAMED_COLOR_INDEX = $000A;\r
680 \r
681     TYPE_XYZ_FLT         = $49001c;\r
682     TYPE_Lab_FLT         = $4a001c;\r
683     TYPE_GRAY_FLT        = $43000c;\r
684     TYPE_RGB_FLT         = $44001c;\r
685     TYPE_CMYK_FLT        = $460024;\r
686     TYPE_XYZA_FLT        = $49009c;\r
687     TYPE_LabA_FLT        = $4a009c;\r
688     TYPE_RGBA_FLT        = $44009c;\r
689     TYPE_XYZ_DBL         = $490018;\r
690     TYPE_Lab_DBL         = $4a0018;\r
691     TYPE_GRAY_DBL        = $430008;\r
692     TYPE_RGB_DBL         = $440018;\r
693     TYPE_CMYK_DBL        = $460020;\r
694     TYPE_LabV2_8         = $1e0019;\r
695     TYPE_ALabV2_8        = $1e0499;\r
696     TYPE_LabV2_16        = $1e001a;\r
697 \r
698     \r
699 TYPE\r
700 \r
701 \r
702   // Colorimetric spaces\r
703 \r
704       cmsCIEXYZ = PACKED RECORD\r
705                         X, Y, Z : cmsFloat64Number;\r
706                     END;\r
707       LPcmsCIEXYZ = ^cmsCIEXYZ;\r
708 \r
709       cmsCIExyY = PACKED RECORD\r
710                         x, y, YY : cmsFloat64Number\r
711                         END;\r
712       LPcmsCIExyY = ^cmsCIEXYY;\r
713 \r
714       cmsCIELab = PACKED RECORD\r
715                   L, a, b: cmsFloat64Number\r
716                   END;\r
717       LPcmsCIELab = ^cmsCIELab;\r
718 \r
719      cmsCIELCh = PACKED RECORD\r
720                   L, C, h : cmsFloat64Number\r
721                   END;\r
722      LPcmsCIELCh = ^cmsCIELCh;\r
723 \r
724      cmsJCh = PACKED RECORD\r
725                   J, C, h : cmsFloat64Number\r
726                   END;\r
727      LPcmsJCh = ^cmsJCH;\r
728 \r
729 \r
730      cmsCIEXYZTRIPLE = PACKED RECORD\r
731                         Red, Green, Blue : cmsCIEXYZ\r
732                         END;\r
733      LPcmsCIEXYZTRIPLE = ^cmsCIEXYZTRIPLE;\r
734 \r
735 \r
736       cmsCIExyYTRIPLE = PACKED RECORD\r
737                         Red, Green, Blue : cmsCIExyY\r
738                         END;\r
739       LPcmsCIExyYTRIPLE = ^cmsCIExyYTRIPLE;\r
740 \r
741 \r
742 CONST\r
743 \r
744     // Illuminant types for structs below\r
745     cmsILLUMINANT_TYPE_UNKNOWN = $0000000;\r
746     cmsILLUMINANT_TYPE_D50     = $0000001;\r
747     cmsILLUMINANT_TYPE_D65     = $0000002;\r
748     cmsILLUMINANT_TYPE_D93     = $0000003;\r
749     cmsILLUMINANT_TYPE_F2      = $0000004;\r
750     cmsILLUMINANT_TYPE_D55     = $0000005;\r
751     cmsILLUMINANT_TYPE_A       = $0000006;\r
752     cmsILLUMINANT_TYPE_E       = $0000007;\r
753     cmsILLUMINANT_TYPE_F8      = $0000008;\r
754     \r
755 TYPE\r
756 \r
757     cmsICCMeasurementConditions = PACKED RECORD\r
758 \r
759         Observer: cmsUInt32Number;       // 0 = unknown, 1=CIE 1931, 2=CIE 1964\r
760         Backing:  cmsCIEXYZ;             // Value of backing\r
761         Geometry: cmsUInt32Number;       // 0=unknown, 1=45/0, 0/45 2=0d, d/0\r
762         Flare:    cmsFloat64Number;      // 0..1.0\r
763         IlluminantType: cmsUInt32Number;\r
764 \r
765     END;\r
766 \r
767    cmsICCViewingConditions = PACKED RECORD\r
768         IlluminantXYZ: cmsCIEXYZ;         // Not the same struct as CAM02,\r
769         SurroundXYZ: cmsCIEXYZ;           // This is for storing the tag\r
770         IlluminantType: cmsUInt32Number;  // viewing condition\r
771     END;\r
772 \r
773 \r
774 // Plug-In registering  ---------------------------------------------------------------------------------------------------\r
775 \r
776 FUNCTION  cmsPlugin(Plugin: Pointer): cmsBool; StdCall;\r
777 PROCEDURE cmsUnregisterPlugins; StdCall;\r
778 \r
779 // Error logging ----------------------------------------------------------------------------------------------------------\r
780 \r
781 // There is no error handling at all. When a function fails, it returns proper value.\r
782 // For example, all create functions does return NULL on failure. Other may return FALSE.\r
783 // It may be interesting, for the developer, to know why the function is failing.\r
784 // for that reason, lcms2 does offer a logging function. This function will get\r
785 // an ENGLISH string with some clues on what is going wrong. You can show this\r
786 // info to the end user if you wish, or just create some sort of log on disk.\r
787 // The logging function should NOT terminate the program, as this obviously can leave\r
788 // unfreed resources. It is the programmer's responsibility to check each function\r
789 // return code to make sure it didn't fail.\r
790 \r
791 CONST\r
792 \r
793     cmsERROR_UNDEFINED                  =  0;\r
794     cmsERROR_FILE                       =  1;\r
795     cmsERROR_RANGE                      =  2;\r
796     cmsERROR_INTERNAL                   =  3;\r
797     cmsERROR_NULL                       =  4;\r
798     cmsERROR_READ                       =  5;\r
799     cmsERROR_SEEK                       =  6;\r
800     cmsERROR_WRITE                      =  7;\r
801     cmsERROR_UNKNOWN_EXTENSION          =  8;\r
802     cmsERROR_COLORSPACE_CHECK           =  9;\r
803     cmsERROR_ALREADY_DEFINED            =  10;\r
804     cmsERROR_BAD_SIGNATURE              =  11;\r
805     cmsERROR_CORRUPTION_DETECTED        =  12;\r
806     cmsERROR_NOT_SUITABLE               =  13;\r
807 \r
808 // Error logger is called with the ContextID when a message is raised. This gives the\r
809 // chance to know which thread is responsible of the warning and any environment associated\r
810 // with it. Non-multithreading applications may safely ignore this parameter.\r
811 // Note that under certain special circumstances, ContextID may be NULL.\r
812 \r
813 TYPE\r
814 \r
815     cmsLogErrorHandlerFunction = PROCEDURE( ContextID: cmsContext; ErrorCode: cmsUInt32Number; Text: PAnsiChar); CDecl;\r
816 \r
817     // Allows user to set any specific logger\r
818     PROCEDURE cmsSetLogErrorHandler(Fn: cmsLogErrorHandlerFunction); StdCall;\r
819 \r
820 \r
821 // Conversions --------------------------------------------------------------------------------------------------------------\r
822 \r
823 \r
824 // Returns pointers to constant structs\r
825 FUNCTION cmsD50_XYZ: LPcmsCIEXYZ; StdCall;\r
826 FUNCTION cmsD50_xyY: LPcmsCIExyY; StdCall;\r
827 \r
828 // Colorimetric space conversions\r
829 PROCEDURE cmsXYZ2xyY(Dest: LPcmsCIExyY; Source: LPcmsCIEXYZ); StdCall;\r
830 PROCEDURE cmsxyY2XYZ(Dest: LPcmsCIEXYZ; Source: LPcmsCIExyY); StdCall;\r
831 PROCEDURE cmsLab2XYZ(WhitePoint: LPcmsCIEXYZ; xyz: LPcmsCIEXYZ; Lab: LPcmsCIELab); StdCall;\r
832 PROCEDURE cmsXYZ2Lab(WhitePoint: LPcmsCIEXYZ; Lab: LPcmsCIELab; xyz: LPcmsCIEXYZ); StdCall;\r
833 PROCEDURE cmsLab2LCh(LCh: LPcmsCIELCh; Lab: LPcmsCIELab); StdCall;\r
834 PROCEDURE cmsLCh2Lab(Lab: LPcmsCIELab; LCh: LPcmsCIELCh); StdCall;\r
835 \r
836 // Encoding /Decoding on PCS\r
837 PROCEDURE cmsLabEncoded2Float(Lab: LPcmsCIELab; wLab: Pointer); StdCall;\r
838 PROCEDURE cmsLabEncoded2FloatV2(Lab: LPcmsCIELab; wLab: Pointer); StdCall;\r
839 PROCEDURE cmsFloat2LabEncoded(wLab: Pointer; Lab: LPcmsCIELab); StdCall;\r
840 PROCEDURE cmsFloat2LabEncodedV2(wLab: Pointer; Lab: LPcmsCIELab); StdCall;\r
841 PROCEDURE cmsXYZEncoded2Float(fxyz : LPcmsCIEXYZ; XYZ: Pointer); StdCall;\r
842 PROCEDURE cmsFloat2XYZEncoded(XYZ: Pointer; fXYZ: LPcmsCIEXYZ); StdCall;\r
843 \r
844 \r
845 // DeltaE metrics\r
846 FUNCTION cmsDeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall;\r
847 FUNCTION cmsCIE94DeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall;\r
848 FUNCTION cmsBFDdeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall;\r
849 FUNCTION cmsCMCdeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall;\r
850 FUNCTION cmsCIE2000DeltaE(Lab1, Lab2: LPcmsCIELab; Kl, Kc, Kh: Double): Double; StdCall;\r
851 \r
852 \r
853 // Temperature <-> Chromaticity (Black body)\r
854 FUNCTION  cmsWhitePointFromTemp(var WhitePoint: cmsCIExyY; TempK: cmsFloat64Number) : cmsBool; StdCall;\r
855 FUNCTION  cmsTempFromWhitePoint(var TeampK: cmsFloat64Number; var WhitePoint: cmsCIExyY) : cmsBool; StdCall;\r
856 \r
857 \r
858 // Chromatic adaptation\r
859 FUNCTION cmsAdaptToIlluminant(Result: LPcmsCIEXYZ; SourceWhitePt: LPcmsCIEXYZ;\r
860                               Illuminant: LPcmsCIEXYZ; Value: LPcmsCIEXYZ): cmsBool; StdCall;\r
861 \r
862 \r
863 // CIECAM02 ---------------------------------------------------------------------------------------------------\r
864 \r
865 // Viewing conditions. Please note those are CAM model viewing conditions, and not the ICC tag viewing\r
866 // conditions, which I'm naming cmsICCViewingConditions to make differences evident. Unfortunately, the tag\r
867 // cannot deal with surround La, Yb and D value so is basically useless to store CAM02 viewing conditions.\r
868 \r
869  CONST\r
870 \r
871     AVG_SURROUND       = 1;\r
872     DIM_SURROUND       = 2;\r
873     DARK_SURROUND      = 3;\r
874     CUTSHEET_SURROUND  = 4;\r
875 \r
876     D_CALCULATE        = -1;\r
877 \r
878   TYPE\r
879 \r
880     cmsViewingConditions = PACKED RECORD\r
881 \r
882                 WhitePoint: cmsCIEXYZ;\r
883                 Yb        : cmsFloat64Number;\r
884                 La        : cmsFloat64Number;\r
885                 surround  : Integer;\r
886                 D_value   : cmsFloat64Number\r
887               END;\r
888 \r
889 \r
890     LPcmsViewingConditions = ^cmsViewingConditions;\r
891         \r
892 FUNCTION    cmsCIECAM02Init(pVC : LPcmsViewingConditions ) : Pointer; StdCall;\r
893 PROCEDURE   cmsCIECAM02Done(hModel : Pointer); StdCall;\r
894 PROCEDURE   cmsCIECAM02Forward(hModel: Pointer; pIn: LPcmsCIEXYZ; pOut: LPcmsJCh ); StdCall;\r
895 PROCEDURE   cmsCIECAM02Reverse(hModel: Pointer; pIn: LPcmsJCh;   pOut: LPcmsCIEXYZ ); StdCall;\r
896 \r
897 // Tone curves -----------------------------------------------------------------------------------------\r
898 \r
899 // This describes a curve segment. For a table of supported types, see the manual. User can increase the number of\r
900 // available types by using a proper plug-in. Parametric segments allow 10 parameters at most\r
901 \r
902 TYPE \r
903 cmsCurveSegment = PACKED RECORD\r
904        x0, x1: cmsFloat32Number;                       // Domain; for x0 < x <= x1\r
905          PType: cmsInt32Number;                        // Parametric type, Type == 0 means sampled segment. Negative values are reserved\r
906        Params: array [0..9] of cmsFloat64Number;       // Parameters if Type != 0\r
907     nGridPoints: cmsUInt32Number;                      // Number of grid points if Type == 0\r
908     SampledPoints: LPcmsFloat32Number;                 // Points to an array of floats if Type == 0\r
909 END;\r
910 \r
911 LPcmsToneCurve = Pointer;\r
912 LPcmsCurveSegmentArray = ^cmsCurveSegmentArray;\r
913 cmsCurveSegmentArray = array[0..0] of cmsCurveSegment;\r
914 \r
915 LPcmsFloat64NumberArray = ^cmsFloat64NumberArray;\r
916 cmsFloat64NumberArray = array[0..0] of cmsFloat64Number;\r
917 \r
918 LPcmsUInt16NumberArray = ^cmsUInt16NumberArray;\r
919 cmsUInt16NumberArray = array[0..0] of cmsUInt16Number;\r
920 \r
921 LPcmsFloat32NumberArray = ^cmsFloat32NumberArray;\r
922 cmsFloat32NumberArray = array[0..0] of cmsFloat32Number;\r
923 \r
924 LPLPcmsToneCurveArray = ^LPcmsToneCurveArray;\r
925 LPcmsToneCurveArray = array[0..0] of LPcmsToneCurve;\r
926 \r
927 LPcmsUInt32NumberArray = ^cmsUInt32NumberArray;\r
928 cmsUInt32NumberArray = array[0..0] of cmsUInt32Number;\r
929 \r
930 FUNCTION  cmsBuildSegmentedToneCurve(ContextID: cmsContext; nSegments: cmsInt32Number; Segments: LPcmsCurveSegmentArray): LPcmsToneCurve; StdCall;\r
931 FUNCTION  cmsBuildParametricToneCurve(ContextID: cmsContext;  CType: cmsInt32Number; Params: LPcmsFloat64NumberArray): LPcmsToneCurve; StdCall;\r
932 FUNCTION  cmsBuildGamma(ContextID: cmsContext; Gamma: cmsFloat64Number): LPcmsToneCurve; StdCall;\r
933 FUNCTION  cmsBuildTabulatedToneCurve16(ContextID: cmsContext; nEntries: cmsInt32Number; values: LPcmsUInt16NumberArray): LPcmsToneCurve; StdCall;\r
934 FUNCTION  cmsBuildTabulatedToneCurveFloat(ContextID: cmsContext; nEntries: cmsUInt32Number; values: LPcmsFloat32NumberArray): LPcmsToneCurve; StdCall;\r
935 PROCEDURE cmsFreeToneCurve(Curve: LPcmsToneCurve); StdCall;\r
936 PROCEDURE cmsFreeToneCurveTriple(Curve: LPLPcmsToneCurveArray); StdCall;\r
937 FUNCTION  cmsDupToneCurve(Src: LPcmsToneCurve): LPcmsToneCurve; StdCall;\r
938 FUNCTION  cmsReverseToneCurve(InGamma: LPcmsToneCurve): LPcmsToneCurve; StdCall;\r
939 FUNCTION  cmsReverseToneCurveEx(nResultSamples: cmsInt32Number; InGamma: LPcmsToneCurve): LPcmsToneCurve; StdCall;\r
940 FUNCTION  cmsJoinToneCurve(ContextID: cmsContext; X, Y: LPcmsToneCurve; nPoints: cmsUInt32Number ): LPcmsToneCurve; StdCall;\r
941 FUNCTION  cmsSmoothToneCurve(Tab: LPcmsToneCurve; lambda: cmsFloat64Number): cmsBool; StdCall;\r
942 FUNCTION  cmsEvalToneCurveFloat(Curve: LPcmsToneCurve; v: cmsFloat32Number):cmsFloat32Number; StdCall;\r
943 FUNCTION  cmsEvalToneCurve16(Curve: LPcmsToneCurve; v:cmsUInt16Number):cmsUInt16Number; StdCall;\r
944 FUNCTION  cmsIsToneCurveMultisegment(InGamma: LPcmsToneCurve):cmsBool; StdCall;\r
945 FUNCTION  cmsIsToneCurveLinear(Curve: LPcmsToneCurve):cmsBool; StdCall;\r
946 FUNCTION  cmsIsToneCurveMonotonic(t: LPcmsToneCurve):cmsBool; StdCall;\r
947 FUNCTION  cmsIsToneCurveDescending(t: LPcmsToneCurve):cmsBool; StdCall;\r
948 FUNCTION  cmsGetToneCurveParametricType(t: LPcmsToneCurve):cmsInt32Number; StdCall;\r
949 FUNCTION  cmsEstimateGamma(t: LPcmsToneCurve; Precision:cmsFloat64Number):cmsFloat64Number; StdCall;\r
950 \r
951 \r
952 // Implements pipelines of multi-processing elements -------------------------------------------------------------\r
953 \r
954 TYPE\r
955     LPcmsPipeline = Pointer;\r
956     LPcmsStage    = Pointer;\r
957     LPLPcmsStage   = ^LPcmsStage;\r
958  \r
959 // Those are hi-level pipelines\r
960 FUNCTION  cmsPipelineAlloc(ContextID: cmsContext; InputChannels, OutputChannels: cmsUInt32Number): LPcmsPipeline; StdCall;\r
961 PROCEDURE cmsPipelineFree(lut: LPcmsPipeline); StdCall;\r
962 FUNCTION  cmsPipelineDup(Orig: LPcmsPipeline): LPcmsPipeline; StdCall; \r
963 FUNCTION  cmsPipelineInputChannels(lut: LPcmsPipeline): cmsUInt32Number; StdCall;\r
964 FUNCTION  cmsPipelineOutputChannels(lut: LPcmsPipeline): cmsUInt32Number; StdCall;\r
965 \r
966 FUNCTION cmsPipelineStageCount(lut: LPcmsPipeline): cmsUInt32Number; StdCall;\r
967 FUNCTION cmsPipelineGetPtrToFirstStage(lut: LPcmsPipeline): LPcmsStage; StdCall;\r
968 FUNCTION cmsPipelineGetPtrToLastStage(lut: LPcmsPipeline): LPcmsStage; StdCall;\r
969 \r
970 PROCEDURE cmsPipelineEval16(Inv, Outv: LPcmsUInt16NumberArray; lut: LPcmsPipeline); StdCall;\r
971 PROCEDURE cmsPipelineEvalFloat(Inv, Outv: LPcmsFloat32NumberArray; lut: LPcmsPipeline); StdCall;\r
972 \r
973 FUNCTION cmsPipelineEvalReverseFloat(Target, Result, Hint: LPcmsFloat32NumberArray; lut: LPcmsPipeline): cmsBool; StdCall;\r
974 FUNCTION cmsPipelineCat(l1, l2: LPcmsPipeline): cmsBool; StdCall;\r
975 FUNCTION cmsPipelineSetSaveAs8bitsFlag(lut: LPcmsPipeline; On: cmsBool): cmsBool; StdCall;\r
976 \r
977 // Where to place/locate the stages in the pipeline chain\r
978 TYPE\r
979     cmsStageLoc = (cmsAT_BEGIN = 0, cmsAT_END = 1 );\r
980 \r
981 PROCEDURE cmsPipelineInsertStage(lut: LPcmsPipeline; loc: cmsStageLoc; mpe: LPcmsStage); StdCall;\r
982 PROCEDURE cmsPipelineUnlinkStage(lut: LPcmsPipeline; loc: cmsStageLoc; mpe: LPLPcmsStage); StdCall;\r
983 \r
984 // This function is quite useful to analyze the structure of a Pipeline and retrieve the Stage elements\r
985 // that conform the Pipeline. It should be called with the Pipeline, the number of expected elements and\r
986 // then a list of expected types followed with a list of double pointers to Stage elements. If\r
987 // the function founds a match with current pipeline, it fills the pointers and returns TRUE\r
988 // if not, returns FALSE without touching anything.\r
989 // FUNCTION cmsPipelineCheckAndRetreiveStages(const cmsPipeline* Lut, n: cmsUInt32Number, ...): cmsBool; StdCall;\r
990 \r
991 // Matrix has double precision and CLUT has only float precision. That is because an ICC profile can encode\r
992 // matrices with far more precision that CLUTS\r
993 FUNCTION  cmsStageAllocIdentity(ContextID: cmsContext; nChannels: cmsUInt32Number): LPcmsStage; StdCall;\r
994 FUNCTION  cmsStageAllocToneCurves(ContextID: cmsContext; nChannels: cmsUInt32Number; Curves: LPLPcmsToneCurveArray): LPcmsStage; StdCall;\r
995 FUNCTION  cmsStageAllocMatrix(ContextID: cmsContext; Rows, Cols: cmsUInt32Number; Matrix, Offset: LPcmsFloat64NumberArray): LPcmsStage; StdCall;\r
996 \r
997 FUNCTION  cmsStageAllocCLut16bit(ContextID: cmsContext; nGridPoints: cmsUInt32Number; inputChan, outputChan: cmsUInt32Number; Table: LPcmsUInt16NumberArray): LPcmsStage; StdCall;\r
998 FUNCTION  cmsStageAllocCLutFloat(ContextID: cmsContext; nGridPoints: cmsUInt32Number; inputChan, outputChan: cmsUInt32Number; Table: LPcmsFloat32NumberArray): LPcmsStage; StdCall;\r
999 \r
1000 FUNCTION  cmsStageAllocCLut16bitGranular(ContextID: cmsContext; nGridPoints: LPcmsUInt32NumberArray; inputChan, outputChan: cmsUInt32Number; Table: LPcmsUInt16NumberArray): LPcmsStage; StdCall;\r
1001 FUNCTION  cmsStageAllocCLutFloatGranular(ContextID: cmsContext; nGridPoints: LPcmsUInt32NumberArray; inputChan, outputChan: cmsUInt32Number; Table: LPcmsFloat32NumberArray): LPcmsStage; StdCall;\r
1002 \r
1003 \r
1004 FUNCTION  cmsStageDup(mpe: LPcmsStage): LPcmsStage; StdCall;\r
1005 PROCEDURE cmsStageFree(mpe: LPcmsStage); StdCall;\r
1006 FUNCTION  cmsStageNext(mpe: LPcmsStage): LPcmsStage; StdCall;\r
1007 \r
1008 FUNCTION cmsStageInputChannels(mpe: LPcmsStage): cmsUInt32Number; StdCall;\r
1009 FUNCTION cmsStageOutputChannels(mpe: LPcmsStage): cmsUInt32Number; StdCall;\r
1010 FUNCTION cmsStageType(mpe: LPcmsStage): cmsStageSignature; StdCall;\r
1011 FUNCTION cmsStageData(mpe: LPcmsStage): Pointer; StdCall;\r
1012 \r
1013 // Sampling\r
1014  \r
1015 Type\r
1016     cmsSAMPLER16    = FUNCTION (Inp, Outp: LPcmsUInt16NumberArray; Cargo: Pointer): cmsInt32Number; CDecl;\r
1017     cmsSAMPLERFLOAT = FUNCTION (Inp, Outp: LPcmsFloat32NumberArray; Cargo: Pointer): cmsInt32Number; CDecl;\r
1018 \r
1019 // Use this flag to prevent changes being written to destination\r
1020 \r
1021 Const\r
1022 \r
1023 SAMPLER_INSPECT     = $01000000;\r
1024 \r
1025 \r
1026 // For CLUT only\r
1027 FUNCTION cmsStageSampleCLut16bit(mpe: LPcmsStage;  Sampler: cmsSAMPLER16;    Cargo: Pointer; dwFlags: cmsUInt32Number): cmsBool; StdCall;\r
1028 FUNCTION cmsStageSampleCLutFloat(mpe: LPcmsStage;  Sampler: cmsSAMPLERFLOAT; Cargo: Pointer; dwFlags: cmsUInt32Number): cmsBool; StdCall;\r
1029 \r
1030 \r
1031 // Slicers\r
1032 FUNCTION  cmsSliceSpace16(nInputs: cmsUInt32Number; clutPoints: LPcmsUInt32NumberArray;\r
1033                                                    Sampler: cmsSAMPLER16; Cargo: Pointer): cmsBool; StdCall;\r
1034 \r
1035 FUNCTION cmsSliceSpaceFloat(nInputs: cmsUInt32Number; clutPoints: LPcmsUInt32NumberArray;\r
1036                                                    Sampler: cmsSAMPLERFLOAT; Cargo: Pointer): cmsBool; StdCall;\r
1037 \r
1038 // Multilocalized Unicode management ---------------------------------------------------------------------------------------\r
1039 \r
1040 Type\r
1041    LPcmsMLU = Pointer;\r
1042 \r
1043 Const\r
1044 \r
1045 cmsNoLanguage = #0#0#0;\r
1046 cmsNoCountry  = #0#0#0;\r
1047 \r
1048 \r
1049 FUNCTION  cmsMLUalloc(ContextID: cmsContext; nItems: cmsUInt32Number): LPcmsMLU; StdCall; \r
1050 PROCEDURE cmsMLUfree(mlu: LPcmsMLU); StdCall;\r
1051 FUNCTION  cmsMLUdup(mlu: LPcmsMLU): LPcmsMLU; StdCall; \r
1052 \r
1053 FUNCTION  cmsMLUsetASCII(mlu: LPcmsMLU; LanguageCode, CountryCode, ASCIIString: PAnsiChar): cmsBool; StdCall;\r
1054 FUNCTION  cmsMLUsetWide(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; WideString: PWChar): cmsBool; StdCall;\r
1055 \r
1056 FUNCTION cmsMLUgetASCII(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; Buffer: PAnsiChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall;\r
1057 \r
1058 FUNCTION cmsMLUgetWide(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; Buffer: PWChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall;\r
1059                                                  \r
1060 FUNCTION cmsMLUgetTranslation(mlu: LPcmsMLU; LanguageCode, CountryCode, ObtainedLanguage, ObtainedCountry: PAnsiChar): cmsBool; StdCall;\r
1061 \r
1062 // Undercolorremoval & black generation -------------------------------------------------------------------------------------\r
1063 \r
1064 Type\r
1065 \r
1066 cmsUcrBg = PACKED RECORD\r
1067             Ucr, Bg: LPcmsToneCurve;\r
1068             Desc: LPcmsMLU;\r
1069             END;\r
1070 \r
1071 \r
1072 // Screening ----------------------------------------------------------------------------------------------------------------\r
1073 \r
1074 Const\r
1075 \r
1076  cmsPRINTER_DEFAULT_SCREENS    = $0001;\r
1077  cmsFREQUENCE_UNITS_LINES_CM   = $0000;\r
1078  cmsFREQUENCE_UNITS_LINES_INCH = $0002;\r
1079 \r
1080  cmsSPOT_UNKNOWN         = 0;\r
1081  cmsSPOT_PRINTER_DEFAULT = 1;\r
1082  cmsSPOT_ROUND           = 2;\r
1083  cmsSPOT_DIAMOND         = 3;\r
1084  cmsSPOT_ELLIPSE         = 4;\r
1085  cmsSPOT_LINE            = 5;\r
1086  cmsSPOT_SQUARE          = 6;\r
1087  cmsSPOT_CROSS           = 7;\r
1088                             \r
1089 \r
1090 Type\r
1091 \r
1092 cmsScreeningChannel = PACKED RECORD\r
1093 \r
1094       Frequency, \r
1095       ScreenAngle: cmsFloat64Number;\r
1096       SpotShape: cmsUInt32Number;\r
1097 \r
1098 END;\r
1099 \r
1100 cmsScreening = PACKED RECORD\r
1101 \r
1102     Flag,\r
1103     nChannels : cmsUInt32Number;\r
1104     Channels: Array [0..cmsMAXCHANNELS-1] OF cmsScreeningChannel;\r
1105 END;\r
1106 \r
1107 \r
1108 // Named color -----------------------------------------------------------------------------------------------------------------\r
1109 \r
1110 \r
1111 LPcmsNAMEDCOLORLIST = Pointer;\r
1112 \r
1113 FUNCTION cmsAllocNamedColorList(ContextID: cmsContext; n, ColorantCount :cmsUInt32Number;\r
1114                                                            Prefix, Suffix: PAnsiChar): LPcmsNAMEDCOLORLIST; StdCall;\r
1115 \r
1116 PROCEDURE cmsFreeNamedColorList(v: LPcmsNAMEDCOLORLIST); StdCall;\r
1117 FUNCTION  cmsDupNamedColorList(v: LPcmsNAMEDCOLORLIST): LPcmsNAMEDCOLORLIST; StdCall;\r
1118 FUNCTION  cmsAppendNamedColor(v: LPcmsNAMEDCOLORLIST; Name: PAnsiChar;\r
1119                                                              PCS, Colorant : LPcmsUInt16NumberArray): cmsBool; StdCall;\r
1120 \r
1121 FUNCTION cmsNamedColorCount(v: LPcmsNAMEDCOLORLIST): cmsUInt32Number; StdCall;\r
1122 FUNCTION cmsNamedColorIndex(v: LPcmsNAMEDCOLORLIST; Name: PAnsiChar): cmsInt32Number; StdCall;\r
1123 \r
1124 FUNCTION cmsNamedColorInfo(v: LPcmsNAMEDCOLORLIST; nColor : cmsUInt32Number;\r
1125                                                       Name,Prefix, Suffix : PAnsiChar;\r
1126                                                        PCS, Colorant : LPcmsUInt16NumberArray): cmsBool; StdCall;\r
1127 \r
1128 // Retrieve named color list from transform\r
1129 FUNCTION cmsGetNamedColorList(xform: cmsHTRANSFORM ): LPcmsNAMEDCOLORLIST; StdCall;\r
1130 \r
1131 // Profile sequence -----------------------------------------------------------------------------------------------------\r
1132 \r
1133 Type\r
1134 \r
1135 // Profile sequence descriptor. Some fields come from profile sequence descriptor tag, others\r
1136 // come from Profile Sequence Identifier Tag\r
1137 \r
1138 cmsPSEQDESC = PACKED RECORD\r
1139    deviceMfg, deviceModel: cmsSignature;\r
1140     \r
1141    attributes: cmsUInt64Number;\r
1142    technology: cmsTechnologySignature;\r
1143    ProfileID: cmsProfileID;\r
1144    Manufacturer, \r
1145    Model, \r
1146    Description : LPcmsMLU;\r
1147  END;\r
1148 \r
1149  LPcmsSEQDESC = ^cmsPSEQDESC;\r
1150 \r
1151 cmsSEQ = PACKED RECORD\r
1152 \r
1153     n: cmsUInt32Number;\r
1154     ContextID: cmsContext;\r
1155     seq: LPcmsSEQDESC;\r
1156 END;\r
1157 \r
1158 LPcmsSEQ = ^cmsSEQ;\r
1159 \r
1160 FUNCTION   cmsAllocProfileSequenceDescription(ContextID: cmsContext; n: cmsUInt32Number):LPcmsSEQ; StdCall;\r
1161 FUNCTION   cmsDupProfileSequenceDescription(pseq: LPcmsSEQ):LPcmsSEQ; StdCall;\r
1162 PROCEDURE  cmsFreeProfileSequenceDescription(pseq: LPcmsSEQ); StdCall;\r
1163 \r
1164 // Dictionaries --------------------------------------------------------------------------------------------------------\r
1165 \r
1166 TYPE\r
1167 \r
1168  LPcmsDICTentry = ^cmsDICTentry;\r
1169 \r
1170 cmsDICTentry = PACKED RECORD \r
1171 \r
1172     Next: LPcmsDICTentry;\r
1173 \r
1174     DisplayName, DisplayValue: LPcmsMLU;    \r
1175     Name, Value : PWChar;\r
1176 END;\r
1177 \r
1178 FUNCTION  cmsDictAlloc(ContextID: cmsContext): cmsHANDLE; StdCall;\r
1179 PROCEDURE cmsDictFree(hDict: cmsHANDLE);  StdCall;\r
1180 FUNCTION  cmsDictDup(hDict: cmsHANDLE): cmsHANDLE;  StdCall;\r
1181 \r
1182 FUNCTION cmsDictAddEntry(hDict: cmsHANDLE; Name, Value: PWChar; DisplayName, DisplayValue : LPcmsMLU): cmsBool;  StdCall;\r
1183 FUNCTION cmsDictGetEntryList(hDict: cmsHANDLE): LPcmsDICTentry; StdCall;\r
1184 FUNCTION cmsDictNextEntry(e : LPcmsDICTentry): LPcmsDICTentry;  StdCall;\r
1185 \r
1186 // Access to Profile data ----------------------------------------------------------------------------------------------\r
1187 FUNCTION cmsCreateProfilePlaceholder(ContextID: cmsContext): cmsHPROFILE; StdCall;\r
1188 \r
1189 FUNCTION cmsGetProfileContextID(hProfile: cmsHPROFILE):cmsContext; StdCall;\r
1190 FUNCTION cmsGetTagCount(hProfile: cmsHPROFILE): cmsInt32Number; StdCall;\r
1191 FUNCTION cmsGetTagSignature(hProfile: cmsHPROFILE; n: cmsUInt32Number): cmsTagSignature; StdCall;\r
1192 FUNCTION cmsIsTag(hProfile: cmsHPROFILE; sig: cmsTagSignature ): cmsBool; StdCall;\r
1193 \r
1194 // Read and write pre-formatted data\r
1195 FUNCTION cmsReadTag(hProfile: cmsHPROFILE; sig: cmsTagSignature ): Pointer; StdCall;\r
1196 FUNCTION cmsWriteTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; data: Pointer): cmsBool; StdCall;\r
1197 FUNCTION cmsLinkTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; dest: cmsTagSignature): cmsBool; StdCall;\r
1198 FUNCTION cmsTagLinkedTo(hProfile: cmsHPROFILE; sig: cmsTagSignature):cmsTagSignature; StdCall;\r
1199 \r
1200 // Read and write raw data\r
1201 FUNCTION cmsReadRawTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; Buffer: Pointer; BufferSize: cmsUInt32Number): cmsInt32Number; StdCall;\r
1202 FUNCTION cmsWriteRawTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; data: Pointer; Size: cmsUInt32Number): cmsBool; StdCall;\r
1203 \r
1204 // Access header data\r
1205 Const\r
1206 \r
1207    cmsEmbeddedProfileFalse    = $00000000;\r
1208    cmsEmbeddedProfileTrue     = $00000001;\r
1209    cmsUseAnywhere             = $00000000;\r
1210    cmsUseWithEmbeddedDataOnly = $00000002;\r
1211 \r
1212 FUNCTION  cmsGetHeaderFlags(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall;\r
1213 PROCEDURE cmsGetHeaderAttributes(hProfile: cmsHPROFILE; Flags: LPcmsUInt64Number); StdCall;\r
1214 PROCEDURE cmsGetHeaderProfileID(hProfile: cmsHPROFILE; ProfileID: LPcmsUInt8Number); StdCall;\r
1215 \r
1216 // TODO:\r
1217 // FUNCTION  cmsGetHeaderCreationDateTime(hProfile: cmsHPROFILE; struct tm *Dest): cmsBool; StdCall;\r
1218 \r
1219 FUNCTION  cmsGetHeaderRenderingIntent(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall;\r
1220 PROCEDURE cmsSetHeaderFlags(hProfile: cmsHPROFILE; Flags: cmsUInt32Number); StdCall;\r
1221 FUNCTION  cmsGetHeaderManufacturer(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall;\r
1222 PROCEDURE cmsSetHeaderManufacturer(hProfile: cmsHPROFILE; manufacturer: cmsUInt32Number ); StdCall;\r
1223 FUNCTION  cmsGetHeaderModel(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall;\r
1224 PROCEDURE cmsSetHeaderModel(hProfile: cmsHPROFILE; model: cmsUInt32Number ); StdCall;\r
1225 PROCEDURE cmsSetHeaderAttributes(hProfile: cmsHPROFILE; Flags: cmsUInt64Number); StdCall;\r
1226 PROCEDURE cmsSetHeaderProfileID(hProfile: cmsHPROFILE; ProfileID: LPcmsUInt8Number); StdCall;\r
1227 PROCEDURE cmsSetHeaderRenderingIntent(hProfile: cmsHPROFILE; RenderingIntent: cmsUInt32Number ); StdCall;\r
1228 \r
1229 FUNCTION  cmsGetPCS(hProfile: cmsHPROFILE):cmsColorSpaceSignature; StdCall;\r
1230 PROCEDURE cmsSetPCS(hProfile: cmsHPROFILE; pcs: cmsColorSpaceSignature); StdCall;\r
1231 FUNCTION  cmsGetColorSpace(hProfile: cmsHPROFILE): cmsColorSpaceSignature; StdCall;\r
1232 PROCEDURE cmsSetColorSpace(hProfile: cmsHPROFILE; sig: cmsColorSpaceSignature); StdCall;\r
1233 FUNCTION  cmsGetDeviceClass(hProfile: cmsHPROFILE): cmsProfileClassSignature; StdCall;\r
1234 PROCEDURE cmsSetDeviceClass(hProfile: cmsHPROFILE; sig: cmsProfileClassSignature); StdCall;\r
1235 PROCEDURE cmsSetProfileVersion(hProfile: cmsHPROFILE; Version: cmsFloat64Number); StdCall;\r
1236 FUNCTION  cmsGetProfileVersion(hProfile: cmsHPROFILE): cmsFloat64Number; StdCall;\r
1237 \r
1238 FUNCTION  cmsGetEncodedICCversion(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall;\r
1239 PROCEDURE cmsSetEncodedICCversion(hProfile: cmsHPROFILE; Version: cmsUInt32Number); StdCall;\r
1240 \r
1241 \r
1242 Const\r
1243 \r
1244     // How profiles may be used\r
1245     LCMS_USED_AS_INPUT     = 0;\r
1246     LCMS_USED_AS_OUTPUT    = 1;\r
1247     LCMS_USED_AS_PROOF     = 2;\r
1248 \r
1249 FUNCTION   cmsIsIntentSupported(hProfile: cmsHPROFILE; Intent: cmsUInt32Number; UsedDirection: cmsUInt32Number): cmsBool; StdCall;\r
1250 FUNCTION   cmsIsMatrixShaper(hProfile: cmsHPROFILE): cmsBool; StdCall;\r
1251 FUNCTION   cmsIsCLUT(hProfile: cmsHPROFILE; Intent: cmsUInt32Number; UsedDirection: cmsUInt32Number): cmsBool; StdCall;\r
1252 \r
1253 // Translate form/to our notation to ICC\r
1254 FUNCTION _cmsICCcolorSpace(OurNotation: Integer): cmsColorSpaceSignature; StdCall;\r
1255 FUNCTION _cmsLCMScolorSpace(ProfileSpace: cmsColorSpaceSignature): Integer; StdCall;\r
1256 \r
1257 FUNCTION cmsChannelsOf( ColorSpace: cmsColorSpaceSignature): cmsUInt32Number; StdCall;\r
1258 \r
1259 // Build a suitable formatter for the colorspace of this profile\r
1260 FUNCTION cmsFormatterForColorspaceOfProfile(hProfile: cmsHPROFILE; nBytes: cmsUInt32Number; lIsFloat: cmsBool): cmsUInt32Number; StdCall;\r
1261 FUNCTION cmsFormatterForPCSOfProfile(hProfile: cmsHPROFILE; nBytes: cmsUInt32Number; lIsFloat: cmsBool): cmsUInt32Number; StdCall;\r
1262 \r
1263 Type\r
1264 \r
1265 // Localized info\r
1266 cmsInfoType = (\r
1267              cmsInfoDescription  = 0,\r
1268              cmsInfoManufacturer = 1,\r
1269              cmsInfoModel        = 2,\r
1270              cmsInfoCopyright    = 3\r
1271 );\r
1272 \r
1273 FUNCTION cmsGetProfileInfo(hProfile: cmsHPROFILE; Info: cmsInfoType; LanguageCode, CountryCode: PAnsiChar;\r
1274                                                             Buffer: PWChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall;\r
1275 \r
1276 FUNCTION cmsGetProfileInfoASCII(hProfile: cmsHPROFILE; Info: cmsInfoType; LanguageCode, CountryCode: PAnsiChar;\r
1277                                                             Buffer: PAnsiChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall;\r
1278 \r
1279 // IO handlers ----------------------------------------------------------------------------------------------------------\r
1280 \r
1281 Type\r
1282 \r
1283 LPcmsIOHANDLER = Pointer;\r
1284 \r
1285 FUNCTION cmsOpenIOhandlerFromFile(ContextID: cmsContext; FileName, AccessMode: PAnsiChar): LPcmsIOHANDLER; StdCall;\r
1286 // FUNCTION cmsOpenIOhandlerFromStream(ContextID: cmsContext; FILE* Stream): LPcmsIOHANDLER; StdCall;\r
1287 FUNCTION cmsOpenIOhandlerFromMem(ContextID: cmsContext; Buffer: Pointer; size: cmsUInt32Number; AccessMode: PAnsiChar): LPcmsIOHANDLER; StdCall;\r
1288 FUNCTION cmsOpenIOhandlerFromNULL(ContextID: cmsContext): LPcmsIOHANDLER; StdCall;\r
1289 FUNCTION cmsCloseIOhandler(io: LPcmsIOHANDLER): cmsBool; StdCall;\r
1290 \r
1291 // MD5 message digest --------------------------------------------------------------------------------------------------\r
1292 \r
1293 FUNCTION cmsMD5computeID(hProfile: cmsHPROFILE): cmsBool; StdCall;\r
1294 \r
1295 // Profile high level funtions ------------------------------------------------------------------------------------------\r
1296 \r
1297 FUNCTION   cmsOpenProfileFromFile(ICCProfile : PAnsiChar; sAccess: PAnsiChar): cmsHPROFILE; StdCall;\r
1298 FUNCTION   cmsOpenProfileFromFileTHR(ContextID: cmsContext; ICCProfile, sAccess: PAnsiChar): cmsHPROFILE; StdCall;\r
1299 // FUNCTION      CMSEXPORT cmsOpenProfileFromStream(FILE* ICCProfile, const char* sAccess): cmsHPROFILE; StdCall;\r
1300 // FUNCTION      CMSEXPORT cmsOpenProfileFromStreamTHR(ContextID: cmsContext; FILE* ICCProfile, const char* sAccess): cmsHPROFILE; StdCall;\r
1301 FUNCTION   cmsOpenProfileFromMem(MemPtr: Pointer; dwSize: cmsUInt32Number): cmsHPROFILE; StdCall;\r
1302 FUNCTION   cmsOpenProfileFromMemTHR(ContextID: cmsContext; MemPtr: Pointer; dwSize: cmsUInt32Number): cmsHPROFILE; StdCall;\r
1303 FUNCTION   cmsOpenProfileFromIOhandlerTHR(ContextID: cmsContext; io: LPcmsIOHANDLER): cmsHPROFILE; StdCall;\r
1304 FUNCTION   cmsCloseProfile(hProfile: cmsHPROFILE): cmsBool; StdCall;\r
1305 \r
1306 FUNCTION   cmsSaveProfileToFile(hProfile: cmsHPROFILE; FileName: PAnsiChar): cmsBool; StdCall;\r
1307 // FUNCTION         CMSEXPORT cmsSaveProfileToStream(hProfile: cmsHPROFILE, FILE* Stream): cmsBool; StdCall;\r
1308 FUNCTION   cmsSaveProfileToMem(hProfile: cmsHPROFILE; MemPtr: Pointer; BytesNeeded: LPcmsUInt32Number): cmsBool; StdCall;\r
1309 FUNCTION   cmsSaveProfileToIOhandler(hProfile: cmsHPROFILE; io: LPcmsIOHANDLER):cmsUInt32Number; StdCall;\r
1310 \r
1311 // Predefined virtual profiles ------------------------------------------------------------------------------------------\r
1312 \r
1313 FUNCTION  cmsCreateRGBProfileTHR(ContextID: cmsContext;\r
1314                                                    WhitePoint: LPcmsCIExyY;\r
1315                                                    Primaries: LPcmsCIExyYTRIPLE;\r
1316                                                    TransferFunction: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall;\r
1317 \r
1318 FUNCTION  cmsCreateRGBProfile(WhitePoint: LPcmsCIExyY;\r
1319                                                    Primaries: LPcmsCIExyYTRIPLE;\r
1320                                                    TransferFunction: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall;\r
1321 \r
1322 FUNCTION cmsCreateGrayProfileTHR(ContextID: cmsContext;\r
1323                                                     WhitePoint: LPcmsCIExyY;\r
1324                                                     TransferFunction: LPcmsToneCurve): cmsHPROFILE; StdCall;\r
1325 \r
1326 FUNCTION cmsCreateGrayProfile(WhitePoint: LPcmsCIExyY;\r
1327                                                      TransferFunction: LPcmsToneCurve): cmsHPROFILE; StdCall;\r
1328 \r
1329 FUNCTION cmsCreateLinearizationDeviceLinkTHR(ContextID: cmsContext;\r
1330                                                                  ColorSpace: cmsColorSpaceSignature;\r
1331                                                                  TransferFunctions: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall;\r
1332 \r
1333 FUNCTION cmsCreateLinearizationDeviceLink(ColorSpace: cmsColorSpaceSignature;\r
1334                                                                  TransferFunctions: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall;\r
1335 \r
1336 FUNCTION cmsCreateInkLimitingDeviceLinkTHR(ContextID: cmsContext;\r
1337                                                               ColorSpace: cmsColorSpaceSignature; Limit: cmsFloat64Number): cmsHPROFILE; StdCall;\r
1338 \r
1339 FUNCTION cmsCreateInkLimitingDeviceLink(ColorSpace: cmsColorSpaceSignature; Limit: cmsFloat64Number): cmsHPROFILE; StdCall;\r
1340 \r
1341 \r
1342 FUNCTION cmsCreateLab2ProfileTHR(ContextID: cmsContext; WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall;\r
1343 FUNCTION cmsCreateLab2Profile(WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall;\r
1344 FUNCTION cmsCreateLab4ProfileTHR(ContextID: cmsContext; WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall;\r
1345 FUNCTION cmsCreateLab4Profile(WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall;\r
1346 \r
1347 FUNCTION cmsCreateXYZProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall;\r
1348 FUNCTION cmsCreateXYZProfile: cmsHPROFILE; StdCall;\r
1349 \r
1350 FUNCTION cmsCreate_sRGBProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall;\r
1351 FUNCTION cmsCreate_sRGBProfile: cmsHPROFILE; StdCall;\r
1352 \r
1353 FUNCTION cmsCreateBCHSWabstractProfileTHR(ContextID: cmsContext;\r
1354                                                              nLUTPoints: Integer;\r
1355                                                              Bright,\r
1356                                                              Contrast,\r
1357                                                              Hue,\r
1358                                                              Saturation: cmsFloat64Number;\r
1359                                                              TempSrc,\r
1360                                                              TempDest: Integer): cmsHPROFILE; StdCall;\r
1361 \r
1362 FUNCTION cmsCreateBCHSWabstractProfile(   nLUTPoints: Integer;\r
1363                                                              Bright,\r
1364                                                              Contrast,\r
1365                                                              Hue,\r
1366                                                              Saturation: cmsFloat64Number;\r
1367                                                              TempSrc,\r
1368                                                              TempDest: Integer): cmsHPROFILE; StdCall;\r
1369 \r
1370 FUNCTION  cmsCreateNULLProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall;\r
1371 FUNCTION  cmsCreateNULLProfile: cmsHPROFILE; StdCall;\r
1372 \r
1373 // Converts a transform to a devicelink profile\r
1374 FUNCTION  cmsTransform2DeviceLink(hTransform: cmsHTRANSFORM; Version: cmsFloat64Number; dwFlags: cmsUInt32Number): cmsHPROFILE; StdCall;\r
1375 \r
1376 // Intents ----------------------------------------------------------------------------------------------\r
1377 \r
1378 Const\r
1379 \r
1380 // ICC Intents\r
1381 INTENT_PERCEPTUAL                              = 0;\r
1382 INTENT_RELATIVE_COLORIMETRIC                   = 1;\r
1383 INTENT_SATURATION                              = 2;\r
1384 INTENT_ABSOLUTE_COLORIMETRIC                   = 3;\r
1385 \r
1386 // Non-ICC intents\r
1387 INTENT_PRESERVE_K_ONLY_PERCEPTUAL             = 10;\r
1388 INTENT_PRESERVE_K_ONLY_RELATIVE_COLORIMETRIC  = 11;\r
1389 INTENT_PRESERVE_K_ONLY_SATURATION             = 12;\r
1390 INTENT_PRESERVE_K_PLANE_PERCEPTUAL            = 13;\r
1391 INTENT_PRESERVE_K_PLANE_RELATIVE_COLORIMETRIC = 14;\r
1392 INTENT_PRESERVE_K_PLANE_SATURATION            = 15;\r
1393                                                   \r
1394 Type\r
1395 LPPAnsiChar = ^PAnsiChar;\r
1396 \r
1397 // Call with NULL as parameters to get the intent count\r
1398 FUNCTION cmsGetSupportedIntents(nMax: cmsUInt32Number; Codes: LPcmsUInt32Number; Descriptions: LPPAnsiChar): cmsUInt32Number; StdCall;\r
1399 \r
1400 Const\r
1401 \r
1402 // Flags\r
1403 \r
1404 cmsFLAGS_NOCACHE                  = $0040;    // Inhibit 1-pixel cache\r
1405 cmsFLAGS_NOOPTIMIZE               = $0100;    // Inhibit optimizations\r
1406 cmsFLAGS_NULLTRANSFORM            = $0200;    // Don't transform anyway\r
1407 \r
1408 // Proofing flags\r
1409 cmsFLAGS_GAMUTCHECK               = $1000;    // Out of Gamut alarm\r
1410 cmsFLAGS_SOFTPROOFING             = $4000;    // Do softproofing\r
1411 \r
1412 // Misc\r
1413 cmsFLAGS_BLACKPOINTCOMPENSATION   = $2000;\r
1414 cmsFLAGS_NOWHITEONWHITEFIXUP      = $0004;    // Don't fix scum dot\r
1415 cmsFLAGS_HIGHRESPRECALC           = $0400;    // Use more memory to give better accurancy\r
1416 cmsFLAGS_LOWRESPRECALC            = $0800;    // Use less memory to minimize resouces\r
1417 \r
1418 // For devicelink creation\r
1419 cmsFLAGS_8BITS_DEVICELINK         = $0008;   // Create 8 bits devicelinks\r
1420 cmsFLAGS_GUESSDEVICECLASS         = $0020;   // Guess device class (for transform2devicelink)\r
1421 cmsFLAGS_KEEP_SEQUENCE            = $0080;   // Keep profile sequence for devicelink creation\r
1422 \r
1423 // Specific to a particular optimizations\r
1424 cmsFLAGS_FORCE_CLUT               = $0002;    // Force CLUT optimization\r
1425 cmsFLAGS_CLUT_POST_LINEARIZATION  = $0001;    // create postlinearization tables if possible\r
1426 cmsFLAGS_CLUT_PRE_LINEARIZATION   = $0010;    // create prelinearization tables if possible\r
1427 \r
1428 // CRD special\r
1429 cmsFLAGS_NODEFAULTRESOURCEDEF     = $01000000;\r
1430 \r
1431 // Fine-tune control over number of gridpoints\r
1432 FUNCTION cmsFLAGS_GRIDPOINTS(n: Integer): Integer;\r
1433 \r
1434 \r
1435 // Transforms ---------------------------------------------------------------------------------------------------\r
1436 \r
1437 type\r
1438   LPcmsHPROFILEArray = ^cmsHPROFILEArray;\r
1439   cmsHPROFILEArray = array[0..0] of cmsHPROFILE;\r
1440 \r
1441   LPcmsBoolArray = ^cmsBoolArray;\r
1442   cmsBoolArray = array[0..0] of cmsBool;\r
1443 \r
1444 FUNCTION   cmsCreateTransformTHR(ContextID: cmsContext;\r
1445                                                   Input: cmsHPROFILE;\r
1446                                                   InputFormat: cmsUInt32Number;\r
1447                                                   Output: cmsHPROFILE;\r
1448                                                   OutputFormat: cmsUInt32Number;\r
1449                                                   Intent: cmsUInt32Number;\r
1450                                                   dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall;\r
1451 \r
1452 FUNCTION   cmsCreateTransform(Input: cmsHPROFILE;\r
1453                                                   InputFormat: cmsUInt32Number;\r
1454                                                   Output: cmsHPROFILE;\r
1455                                                   OutputFormat: cmsUInt32Number;\r
1456                                                   Intent: cmsUInt32Number;\r
1457                                                   dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall;\r
1458 \r
1459 FUNCTION   cmsCreateProofingTransformTHR(ContextID: cmsContext;\r
1460                                                   Input: cmsHPROFILE;\r
1461                                                   InputFormat: cmsUInt32Number;\r
1462                                                   Output: cmsHPROFILE;\r
1463                                                   OutputFormat: cmsUInt32Number;\r
1464                                                   Proofing: cmsHPROFILE;\r
1465                                                   Intent: cmsUInt32Number;\r
1466                                                   ProofingIntent: cmsUInt32Number;\r
1467                                                   dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall;\r
1468 \r
1469 FUNCTION   cmsCreateProofingTransform(Input: cmsHPROFILE;\r
1470                                                   InputFormat: cmsUInt32Number;\r
1471                                                   Output: cmsHPROFILE;\r
1472                                                   OutputFormat: cmsUInt32Number;\r
1473                                                   Proofing: cmsHPROFILE;\r
1474                                                   Intent: cmsUInt32Number;\r
1475                                                   ProofingIntent: cmsUInt32Number;\r
1476                                                   dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall;\r
1477 \r
1478 FUNCTION   cmsCreateMultiprofileTransformTHR(ContextID: cmsContext;\r
1479                                                   hProfiles: LPcmsHPROFILEArray;\r
1480                                                   nProfiles: cmsUInt32Number;\r
1481                                                   InputFormat: cmsUInt32Number;\r
1482                                                   OutputFormat: cmsUInt32Number;\r
1483                                                   Intent: cmsUInt32Number;\r
1484                                                   dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall;\r
1485 \r
1486 \r
1487 FUNCTION   cmsCreateMultiprofileTransform( hProfiles: LPcmsHPROFILEArray;\r
1488                                                   nProfiles: cmsUInt32Number;\r
1489                                                   InputFormat: cmsUInt32Number;\r
1490                                                   OutputFormat: cmsUInt32Number;\r
1491                                                   Intent: cmsUInt32Number;\r
1492                                                   dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall;\r
1493 \r
1494 \r
1495 FUNCTION   cmsCreateExtendedTransform(ContextID: cmsContext;\r
1496                                                    nProfiles: cmsUInt32Number;\r
1497                                                    hProfiles: LPcmsHPROFILEArray;\r
1498                                                    BPC: LPcmsBoolArray;\r
1499                                                    Intents: LPcmsUInt32NumberArray;\r
1500                                                    AdaptationStates: LPcmsFloat64NumberArray;\r
1501                                                    hGamutProfile: cmsHPROFILE;\r
1502                                                    nGamutPCSposition: cmsUInt32Number;\r
1503                                                    InputFormat,\r
1504                                                    OutputFormat: cmsUInt32Number;\r
1505                                                    dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall;\r
1506 \r
1507 PROCEDURE  cmsDeleteTransform(hTransform: cmsHTRANSFORM); StdCall;\r
1508 \r
1509 PROCEDURE  cmsDoTransform(Transform: cmsHTRANSFORM; InputBuffer, OutputBuffer: Pointer; size: cmsUInt32Number);  StdCall;\r
1510 \r
1511 PROCEDURE  cmsSetAlarmCodes( NewAlarm: LPcmsUInt16NumberArray);  StdCall;\r
1512 PROCEDURE  cmsGetAlarmCodes(NewAlarm: LPcmsUInt16NumberArray); StdCall;\r
1513 \r
1514 // Adaptation state for absolute colorimetric intent\r
1515 FUNCTION  cmsSetAdaptationState(d: cmsFloat64Number):cmsFloat64Number; StdCall;\r
1516 \r
1517 // Grab the ContextID from an open transform. Returns NULL if a NULL transform is passed\r
1518 FUNCTION  cmsGetTransformContextID(hTransform: cmsHTRANSFORM):cmsContext; StdCall;\r
1519 \r
1520 // For backwards compatibility\r
1521 FUNCTION  cmsChangeBuffersFormat(hTransform: cmsHTRANSFORM; InputFormat, OutputFormat: cmsUInt32Number): cmsBool; StdCall;\r
1522 \r
1523 \r
1524 \r
1525 // PostScript ColorRenderingDictionary and ColorSpaceArray ----------------------------------------------------\r
1526 \r
1527 Type\r
1528 \r
1529 cmsPSResourceType = (cmsPS_RESOURCE_CSA, cmsPS_RESOURCE_CRD ) ;\r
1530 \r
1531 // lcms2 unified method to access postscript color resources\r
1532 FUNCTION cmsGetPostScriptColorResource(ContextID: cmsContext;   RType: cmsPSResourceType;\r
1533                                                                 hProfile: cmsHPROFILE;\r
1534                                                                 Intent: cmsUInt32Number;\r
1535                                                                 dwFlags: cmsUInt32Number;\r
1536                                                                 io: LPcmsIOHANDLER): cmsUInt32Number; StdCall;\r
1537 \r
1538 FUNCTION cmsGetPostScriptCSA(ContextID: cmsContext; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number; Buffer: Pointer; dwBufferLen: cmsUInt32Number ): cmsUInt32Number; StdCall;\r
1539 FUNCTION cmsGetPostScriptCRD(ContextID: cmsContext; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number; Buffer: Pointer; dwBufferLen: cmsUInt32Number): cmsUInt32Number; StdCall;\r
1540 \r
1541 \r
1542 // IT8.7 / CGATS.17-20$ handling -----------------------------------------------------------------------------\r
1543 \r
1544 \r
1545 // CGATS.13 parser\r
1546 \r
1547 FUNCTION  cmsIT8Alloc: cmsHANDLE; StdCall;\r
1548 PROCEDURE cmsIT8Free(hIT8: cmsHANDLE); StdCall;\r
1549 \r
1550 // Tables\r
1551 \r
1552 FUNCTION  cmsIT8TableCount(hIT8: cmsHANDLE): Integer; StdCall;\r
1553 FUNCTION  cmsIT8SetTable(hIT8: cmsHANDLE; nTable: Integer): Integer; StdCall;\r
1554 \r
1555 // Persistence\r
1556 FUNCTION  cmsIT8LoadFromFile(cFileName: PAnsiChar): cmsHANDLE; StdCall;\r
1557 FUNCTION  cmsIT8LoadFromMem(Ptr: Pointer; size :DWord): cmsHANDLE; StdCall;\r
1558 \r
1559 FUNCTION cmsIT8SaveToFile(hIT8: cmsHANDLE; cFileName: PAnsiChar): cmsBool; StdCall;\r
1560 FUNCTION cmsIT8SaveToMem(hIT8: cmsHANDLE; MemPtr: Pointer; BytesNeeded: LPcmsUInt32Number): cmsBool; StdCall;\r
1561 // Properties\r
1562 \r
1563 FUNCTION cmsIT8GetSheetType(hIT8: cmsHANDLE): PAnsiChar; StdCall;\r
1564 FUNCTION cmsIT8SetSheetType(hIT8: cmsHANDLE; TheType: PAnsiChar): cmsBool; StdCall;\r
1565 \r
1566 FUNCTION cmsIT8SetComment(hIT8: cmsHANDLE; cComment: PAnsiChar): cmsBool; StdCall;\r
1567 \r
1568 FUNCTION cmsIT8SetPropertyStr(hIT8: cmsHANDLE; cProp, Str: PAnsiChar): cmsBool; StdCall;\r
1569 FUNCTION cmsIT8SetPropertyDbl(hIT8: cmsHANDLE; cProp: PAnsiChar; Val: Double): cmsBool; StdCall;\r
1570 FUNCTION cmsIT8SetPropertyHex(hIT8: cmsHANDLE; cProp: PAnsiChar; Val: Integer): cmsBool; StdCall;\r
1571 FUNCTION cmsIT8SetPropertyUncooked(hIT8: cmsHANDLE; Key, Buffer: PAnsiChar): cmsBool; StdCall;\r
1572 \r
1573 \r
1574 FUNCTION cmsIT8GetProperty(hIT8: cmsHANDLE; cProp: PAnsiChar): PAnsiChar; StdCall;\r
1575 FUNCTION cmsIT8GetPropertyDbl(hIT8: cmsHANDLE; cProp: PAnsiChar): Double; StdCall;\r
1576 FUNCTION cmsIT8EnumProperties(hIT8: cmsHANDLE; var PropertyNames: LPPAnsiChar): Integer; StdCall;\r
1577 \r
1578 // Datasets\r
1579 \r
1580 FUNCTION cmsIT8GetDataRowCol(hIT8: cmsHANDLE; row, col: Integer): PAnsiChar; StdCall;\r
1581 FUNCTION cmsIT8GetDataRowColDbl(hIT8: cmsHANDLE; row, col: Integer): Double; StdCall;\r
1582 \r
1583 FUNCTION cmsIT8SetDataRowCol(hIT8: cmsHANDLE; row, col: Integer; Val: PAnsiChar): cmsBool; StdCall;\r
1584 FUNCTION cmsIT8SetDataRowColDbl(hIT8: cmsHANDLE; row, col: Integer; Val: Double): cmsBool; StdCall;\r
1585 \r
1586 FUNCTION cmsIT8GetData(hIT8: cmsHANDLE; cPatch, cSample: PAnsiChar): PAnsiChar; StdCall;\r
1587 \r
1588 FUNCTION cmsIT8GetDataDbl(hIT8: cmsHANDLE;cPatch, cSample: PAnsiChar): Double; StdCall;\r
1589 \r
1590 FUNCTION cmsIT8SetData(hIT8: cmsHANDLE; cPatch, cSample, Val: PAnsiChar): cmsBool; StdCall;\r
1591 \r
1592 FUNCTION cmsIT8SetDataDbl(hIT8: cmsHANDLE; cPatch, cSample: PAnsiChar; Val: Double): cmsBool; StdCall;\r
1593 \r
1594 FUNCTION cmsIT8SetDataFormat(hIT8: cmsHANDLE; n: Integer; Sample: PAnsiChar): cmsBool; StdCall;\r
1595 FUNCTION cmsIT8EnumDataFormat(hIT8: cmsHANDLE; var SampleNames: LPPAnsiChar): Integer; StdCall;\r
1596 FUNCTION cmsIT8GetPatchName(hIT8: cmsHANDLE; nPatch: Integer; Buffer: PAnsiChar): PAnsiChar; StdCall;\r
1597 \r
1598 // The LABEL extension\r
1599 FUNCTION cmsIT8SetTableByLabel(hIT8: cmsHANDLE; cSet, cField, ExpectedType: PAnsiChar): Integer; StdCall;\r
1600 \r
1601 FUNCTION cmsIT8FindDataFormat(hIT8: cmsHANDLE; cSample: PAnsiChar): Integer; StdCall;\r
1602 \r
1603 // Formatter for double\r
1604 PROCEDURE  cmsIT8DefineDblFormat(hIT8: cmsHANDLE; Formatter: PAnsiChar);  StdCall;\r
1605 \r
1606 // Gamut boundary description routines ------------------------------------------------------------------------------\r
1607 \r
1608 FUNCTION  cmsGBDAlloc(ContextID: cmsContext):cmsHANDLE; StdCall;\r
1609 PROCEDURE cmsGBDFree(hGBD: cmsHANDLE); StdCall;\r
1610 FUNCTION  cmsGDBAddPoint(hGBD: cmsHANDLE; Lab: LPcmsCIELab): cmsBool; StdCall;\r
1611 FUNCTION  cmsGDBCompute(hGDB: cmsHANDLE; dwFlags: cmsUInt32Number): cmsBool; StdCall;\r
1612 FUNCTION  cmsGDBCheckPoint(hGBD: cmsHANDLE; Lab: LPcmsCIELab): cmsBool; StdCall;\r
1613 \r
1614 // Feature detection  ----------------------------------------------------------------------------------------------\r
1615 \r
1616 // Estimate the black point\r
1617 FUNCTION cmsDetectBlackPoint( BlackPoint: LPcmsCIEXYZ; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsBool; StdCall;\r
1618 \r
1619 // Estimate total area coverage\r
1620 FUNCTION cmsDetectTAC(hProfile: cmsHPROFILE): cmsFloat64Number; StdCall;\r
1621 \r
1622 \r
1623 // Poor man's gamut mapping\r
1624 FUNCTION  cmsDesaturateLab(Lab: LPcmsCIELab; amax, amin, bmax, bmin: cmsFloat64Number): cmsBool; StdCall;\r
1625                                                    \r
1626 \r
1627 IMPLEMENTATION\r
1628 \r
1629 \r
1630 \r
1631     FUNCTION FLOAT_SH(a: cmsUInt32Number): cmsUInt32Number;        begin  FLOAT_SH :=       ((a)  shl  22) end;\r
1632     FUNCTION OPTIMIZED_SH(s: cmsUInt32Number): cmsUInt32Number;    begin  OPTIMIZED_SH :=   ((s)  shl  21) end;\r
1633     FUNCTION COLORSPACE_SH(s: cmsUInt32Number):cmsUInt32Number;    begin  COLORSPACE_SH :=  ((s)  shl  16) end;\r
1634     FUNCTION SWAPFIRST_SH(s: cmsUInt32Number):cmsUInt32Number;     begin  SWAPFIRST_SH :=   ((s)  shl  14) end;\r
1635     FUNCTION FLAVOR_SH(s: cmsUInt32Number):cmsUInt32Number;        begin  FLAVOR_SH :=      ((s)  shl  13) end;\r
1636     FUNCTION PLANAR_SH(p: cmsUInt32Number):cmsUInt32Number;        begin  PLANAR_SH :=      ((p)  shl  12) end;\r
1637     FUNCTION ENDIAN16_SH(e: cmsUInt32Number):cmsUInt32Number;      begin  ENDIAN16_SH :=    ((e)  shl  11) end;\r
1638     FUNCTION DOSWAP_SH(e: cmsUInt32Number):cmsUInt32Number;        begin  DOSWAP_SH :=      ((e)  shl  10) end;\r
1639     FUNCTION EXTRA_SH(e: cmsUInt32Number):cmsUInt32Number;         begin  EXTRA_SH :=       ((e)  shl  7) end;\r
1640     FUNCTION CHANNELS_SH(c: cmsUInt32Number):cmsUInt32Number;      begin  CHANNELS_SH :=    ((c)  shl  3) end;\r
1641     FUNCTION BYTES_SH(b: cmsUInt32Number):cmsUInt32Number;         begin  BYTES_SH :=       (b) end;\r
1642 \r
1643 \r
1644     FUNCTION T_FLOAT(a: cmsUInt32Number): cmsUInt32Number;          begin  T_FLOAT :=        (((a) shr 22) and 1) end;  \r
1645     FUNCTION T_OPTIMIZED(o: cmsUInt32Number): cmsUInt32Number;      begin  T_OPTIMIZED :=    (((o) shr 21) and 1) end;    \r
1646     FUNCTION T_COLORSPACE(s: cmsUInt32Number): cmsUInt32Number;     begin  T_COLORSPACE :=   (((s) shr 16) and 31) end;   \r
1647     FUNCTION T_SWAPFIRST(s: cmsUInt32Number): cmsUInt32Number;      begin  T_SWAPFIRST :=    (((s) shr 14) and 1) end;    \r
1648     FUNCTION T_FLAVOR(s: cmsUInt32Number): cmsUInt32Number;         begin  T_FLAVOR :=       (((s) shr 13) and 1) end;\r
1649     FUNCTION T_PLANAR(p: cmsUInt32Number): cmsUInt32Number;         begin  T_PLANAR :=       (((p) shr 12) and 1) end;  \r
1650     FUNCTION T_ENDIAN16(e: cmsUInt32Number): cmsUInt32Number;       begin  T_ENDIAN16 :=     (((e) shr 11) and 1) end;  \r
1651     FUNCTION T_DOSWAP(e: cmsUInt32Number): cmsUInt32Number;         begin  T_DOSWAP :=       (((e) shr 10) and 1) end; \r
1652     FUNCTION T_EXTRA(e: cmsUInt32Number): cmsUInt32Number;          begin  T_EXTRA :=        (((e) shr 7) and 7) end;   \r
1653     FUNCTION T_CHANNELS(c: cmsUInt32Number): cmsUInt32Number;       begin  T_CHANNELS :=     (((c) shr 3) and 15) end; \r
1654     FUNCTION T_BYTES(b: cmsUInt32Number): cmsUInt32Number;          begin  T_BYTES :=        ((b) and 7) end;\r
1655 \r
1656 \r
1657 \r
1658 // \r
1659 \r
1660 \r
1661 FUNCTION  cmsPlugin(Plugin: Pointer): cmsBool; StdCall; external 'lcms2.dll';\r
1662 PROCEDURE cmsUnregisterPlugins; StdCall; external 'lcms2.dll';\r
1663 PROCEDURE cmsSetLogErrorHandler(Fn: cmsLogErrorHandlerFunction); StdCall; external 'lcms2.dll';\r
1664 FUNCTION cmsD50_XYZ: LPcmsCIEXYZ; StdCall; external 'lcms2.dll';\r
1665 FUNCTION cmsD50_xyY: LPcmsCIExyY; StdCall; external 'lcms2.dll';\r
1666 PROCEDURE cmsXYZ2xyY(Dest: LPcmsCIExyY; Source: LPcmsCIEXYZ); StdCall; external 'lcms2.dll';\r
1667 PROCEDURE cmsxyY2XYZ(Dest: LPcmsCIEXYZ; Source: LPcmsCIExyY); StdCall; external 'lcms2.dll';\r
1668 PROCEDURE cmsLab2XYZ(WhitePoint: LPcmsCIEXYZ; xyz: LPcmsCIEXYZ; Lab: LPcmsCIELab); StdCall; external 'lcms2.dll';\r
1669 PROCEDURE cmsXYZ2Lab(WhitePoint: LPcmsCIEXYZ; Lab: LPcmsCIELab; xyz: LPcmsCIEXYZ); StdCall; external 'lcms2.dll';\r
1670 PROCEDURE cmsLab2LCh(LCh: LPcmsCIELCh; Lab: LPcmsCIELab); StdCall; external 'lcms2.dll';\r
1671 PROCEDURE cmsLCh2Lab(Lab: LPcmsCIELab; LCh: LPcmsCIELCh); StdCall; external 'lcms2.dll';\r
1672 PROCEDURE cmsLabEncoded2Float(Lab: LPcmsCIELab; wLab: Pointer); StdCall; external 'lcms2.dll';\r
1673 PROCEDURE cmsLabEncoded2FloatV2(Lab: LPcmsCIELab; wLab: Pointer); StdCall; external 'lcms2.dll';\r
1674 PROCEDURE cmsFloat2LabEncoded(wLab: Pointer; Lab: LPcmsCIELab); StdCall; external 'lcms2.dll';\r
1675 PROCEDURE cmsFloat2LabEncodedV2(wLab: Pointer; Lab: LPcmsCIELab); StdCall; external 'lcms2.dll';\r
1676 PROCEDURE cmsXYZEncoded2Float(fxyz : LPcmsCIEXYZ; XYZ: Pointer); StdCall; external 'lcms2.dll';\r
1677 PROCEDURE cmsFloat2XYZEncoded(XYZ: Pointer; fXYZ: LPcmsCIEXYZ); StdCall; external 'lcms2.dll';\r
1678 FUNCTION cmsDeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall; external 'lcms2.dll';\r
1679 FUNCTION cmsCIE94DeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall; external 'lcms2.dll';\r
1680 FUNCTION cmsBFDdeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall; external 'lcms2.dll';\r
1681 FUNCTION cmsCMCdeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall; external 'lcms2.dll';\r
1682 FUNCTION cmsCIE2000DeltaE(Lab1, Lab2: LPcmsCIELab; Kl, Kc, Kh: Double): Double; StdCall; external 'lcms2.dll';\r
1683 FUNCTION  cmsWhitePointFromTemp(var WhitePoint: cmsCIExyY; TempK: cmsFloat64Number) : cmsBool; StdCall; external 'lcms2.dll';\r
1684 FUNCTION  cmsTempFromWhitePoint(var TeampK: cmsFloat64Number; var WhitePoint: cmsCIExyY) : cmsBool; StdCall; external 'lcms2.dll';\r
1685 FUNCTION cmsAdaptToIlluminant(Result: LPcmsCIEXYZ; SourceWhitePt: LPcmsCIEXYZ;\r
1686                               Illuminant: LPcmsCIEXYZ; Value: LPcmsCIEXYZ): cmsBool; StdCall; external 'lcms2.dll';        \r
1687 FUNCTION    cmsCIECAM02Init(pVC : LPcmsViewingConditions ) : Pointer; StdCall; external 'lcms2.dll';\r
1688 PROCEDURE   cmsCIECAM02Done(hModel : Pointer); StdCall; external 'lcms2.dll';\r
1689 PROCEDURE   cmsCIECAM02Forward(hModel: Pointer; pIn: LPcmsCIEXYZ; pOut: LPcmsJCh ); StdCall; external 'lcms2.dll';\r
1690 PROCEDURE   cmsCIECAM02Reverse(hModel: Pointer; pIn: LPcmsJCh;   pOut: LPcmsCIEXYZ ); StdCall; external 'lcms2.dll';\r
1691 FUNCTION  cmsBuildSegmentedToneCurve(ContextID: cmsContext; nSegments: cmsInt32Number; Segments: LPcmsCurveSegmentArray): LPcmsToneCurve; StdCall; external 'lcms2.dll';\r
1692 FUNCTION  cmsBuildParametricToneCurve(ContextID: cmsContext;  CType: cmsInt32Number; Params: LPcmsFloat64NumberArray): LPcmsToneCurve; StdCall; external 'lcms2.dll';\r
1693 FUNCTION  cmsBuildGamma(ContextID: cmsContext; Gamma: cmsFloat64Number): LPcmsToneCurve; StdCall; external 'lcms2.dll';\r
1694 FUNCTION  cmsBuildTabulatedToneCurve16(ContextID: cmsContext; nEntries: cmsInt32Number; values: LPcmsUInt16NumberArray): LPcmsToneCurve; StdCall; external 'lcms2.dll';\r
1695 FUNCTION  cmsBuildTabulatedToneCurveFloat(ContextID: cmsContext; nEntries: cmsUInt32Number; values: LPcmsFloat32NumberArray): LPcmsToneCurve; StdCall; external 'lcms2.dll';\r
1696 PROCEDURE cmsFreeToneCurve(Curve: LPcmsToneCurve); StdCall; external 'lcms2.dll';\r
1697 PROCEDURE cmsFreeToneCurveTriple(Curve: LPLPcmsToneCurveArray); StdCall; external 'lcms2.dll';\r
1698 FUNCTION  cmsDupToneCurve(Src: LPcmsToneCurve): LPcmsToneCurve; StdCall; external 'lcms2.dll';\r
1699 FUNCTION  cmsReverseToneCurve(InGamma: LPcmsToneCurve): LPcmsToneCurve; StdCall; external 'lcms2.dll';\r
1700 FUNCTION  cmsReverseToneCurveEx(nResultSamples: cmsInt32Number; InGamma: LPcmsToneCurve): LPcmsToneCurve; StdCall; external 'lcms2.dll';\r
1701 FUNCTION  cmsJoinToneCurve(ContextID: cmsContext; X, Y: LPcmsToneCurve; nPoints: cmsUInt32Number ): LPcmsToneCurve; StdCall; external 'lcms2.dll';\r
1702 FUNCTION  cmsSmoothToneCurve(Tab: LPcmsToneCurve; lambda: cmsFloat64Number): cmsBool; StdCall; external 'lcms2.dll';\r
1703 FUNCTION  cmsEvalToneCurveFloat(Curve: LPcmsToneCurve; v: cmsFloat32Number):cmsFloat32Number; StdCall; external 'lcms2.dll';\r
1704 FUNCTION  cmsEvalToneCurve16(Curve: LPcmsToneCurve; v:cmsUInt16Number):cmsUInt16Number; StdCall; external 'lcms2.dll';\r
1705 FUNCTION  cmsIsToneCurveMultisegment(InGamma: LPcmsToneCurve):cmsBool; StdCall; external 'lcms2.dll';\r
1706 FUNCTION  cmsIsToneCurveLinear(Curve: LPcmsToneCurve):cmsBool; StdCall; external 'lcms2.dll';\r
1707 FUNCTION  cmsIsToneCurveMonotonic(t: LPcmsToneCurve):cmsBool; StdCall; external 'lcms2.dll';\r
1708 FUNCTION  cmsIsToneCurveDescending(t: LPcmsToneCurve):cmsBool; StdCall; external 'lcms2.dll';\r
1709 FUNCTION  cmsGetToneCurveParametricType(t: LPcmsToneCurve):cmsInt32Number; StdCall; external 'lcms2.dll';\r
1710 FUNCTION  cmsEstimateGamma(t: LPcmsToneCurve; Precision:cmsFloat64Number):cmsFloat64Number; StdCall; external 'lcms2.dll';\r
1711 FUNCTION  cmsPipelineAlloc(ContextID: cmsContext; InputChannels, OutputChannels: cmsUInt32Number): LPcmsPipeline; StdCall; external 'lcms2.dll';\r
1712 PROCEDURE cmsPipelineFree(lut: LPcmsPipeline); StdCall; external 'lcms2.dll';\r
1713 FUNCTION  cmsPipelineDup(Orig: LPcmsPipeline): LPcmsPipeline; StdCall; external 'lcms2.dll'; \r
1714 FUNCTION  cmsPipelineInputChannels(lut: LPcmsPipeline): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1715 FUNCTION  cmsPipelineOutputChannels(lut: LPcmsPipeline): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1716 FUNCTION cmsPipelineStageCount(lut: LPcmsPipeline): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1717 FUNCTION cmsPipelineGetPtrToFirstStage(lut: LPcmsPipeline): LPcmsStage; StdCall; external 'lcms2.dll';\r
1718 FUNCTION cmsPipelineGetPtrToLastStage(lut: LPcmsPipeline): LPcmsStage; StdCall; external 'lcms2.dll';\r
1719 \r
1720 PROCEDURE cmsPipelineEval16(Inv, Outv: LPcmsUInt16NumberArray; lut: LPcmsPipeline); StdCall; external 'lcms2.dll';\r
1721 PROCEDURE cmsPipelineEvalFloat(Inv, Outv: LPcmsFloat32NumberArray; lut: LPcmsPipeline); StdCall; external 'lcms2.dll';\r
1722 \r
1723 FUNCTION cmsPipelineEvalReverseFloat(Target, Result, Hint: LPcmsFloat32NumberArray; lut: LPcmsPipeline): cmsBool; StdCall; external 'lcms2.dll';\r
1724 FUNCTION cmsPipelineCat(l1, l2: LPcmsPipeline): cmsBool; StdCall; external 'lcms2.dll';\r
1725 FUNCTION cmsPipelineSetSaveAs8bitsFlag(lut: LPcmsPipeline; On: cmsBool): cmsBool; StdCall; external 'lcms2.dll';\r
1726 PROCEDURE cmsPipelineInsertStage(lut: LPcmsPipeline; loc: cmsStageLoc; mpe: LPcmsStage); StdCall; external 'lcms2.dll';\r
1727 PROCEDURE cmsPipelineUnlinkStage(lut: LPcmsPipeline; loc: cmsStageLoc; mpe: LPLPcmsStage); StdCall; external 'lcms2.dll';\r
1728 FUNCTION  cmsStageAllocIdentity(ContextID: cmsContext; nChannels: cmsUInt32Number): LPcmsStage; StdCall; external 'lcms2.dll';\r
1729 FUNCTION  cmsStageAllocToneCurves(ContextID: cmsContext; nChannels: cmsUInt32Number; Curves: LPLPcmsToneCurveArray): LPcmsStage; StdCall; external 'lcms2.dll';\r
1730 FUNCTION  cmsStageAllocMatrix(ContextID: cmsContext; Rows, Cols: cmsUInt32Number; Matrix, Offset: LPcmsFloat64NumberArray): LPcmsStage; StdCall; external 'lcms2.dll';\r
1731 FUNCTION  cmsStageAllocCLut16bit(ContextID: cmsContext; nGridPoints: cmsUInt32Number; inputChan, outputChan: cmsUInt32Number; Table: LPcmsUInt16NumberArray): LPcmsStage; StdCall; external 'lcms2.dll';\r
1732 FUNCTION  cmsStageAllocCLutFloat(ContextID: cmsContext; nGridPoints: cmsUInt32Number; inputChan, outputChan: cmsUInt32Number; Table: LPcmsFloat32NumberArray): LPcmsStage; StdCall; external 'lcms2.dll';\r
1733 FUNCTION  cmsStageAllocCLut16bitGranular(ContextID: cmsContext; nGridPoints: LPcmsUInt32NumberArray; inputChan, outputChan: cmsUInt32Number; Table: LPcmsUInt16NumberArray): LPcmsStage; StdCall; external 'lcms2.dll';\r
1734 FUNCTION  cmsStageAllocCLutFloatGranular(ContextID: cmsContext; nGridPoints: LPcmsUInt32NumberArray; inputChan, outputChan: cmsUInt32Number; Table: LPcmsFloat32NumberArray): LPcmsStage; StdCall; external 'lcms2.dll';\r
1735 FUNCTION  cmsStageDup(mpe: LPcmsStage): LPcmsStage; StdCall; external 'lcms2.dll';\r
1736 PROCEDURE cmsStageFree(mpe: LPcmsStage); StdCall; external 'lcms2.dll';\r
1737 FUNCTION  cmsStageNext(mpe: LPcmsStage): LPcmsStage; StdCall; external 'lcms2.dll';\r
1738 FUNCTION cmsStageInputChannels(mpe: LPcmsStage): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1739 FUNCTION cmsStageOutputChannels(mpe: LPcmsStage): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1740 FUNCTION cmsStageType(mpe: LPcmsStage): cmsStageSignature; StdCall; external 'lcms2.dll';\r
1741 FUNCTION cmsStageData(mpe: LPcmsStage): Pointer; StdCall; external 'lcms2.dll';\r
1742 FUNCTION cmsStageSampleCLut16bit(mpe: LPcmsStage;  Sampler: cmsSAMPLER16;    Cargo: Pointer; dwFlags: cmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll';\r
1743 FUNCTION cmsStageSampleCLutFloat(mpe: LPcmsStage;  Sampler: cmsSAMPLERFLOAT; Cargo: Pointer; dwFlags: cmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll';\r
1744 FUNCTION  cmsSliceSpace16(nInputs: cmsUInt32Number; clutPoints: LPcmsUInt32NumberArray;\r
1745                                                    Sampler: cmsSAMPLER16; Cargo: Pointer): cmsBool; StdCall; external 'lcms2.dll';\r
1746 \r
1747 FUNCTION cmsSliceSpaceFloat(nInputs: cmsUInt32Number; clutPoints: LPcmsUInt32NumberArray;\r
1748                                                    Sampler: cmsSAMPLERFLOAT; Cargo: Pointer): cmsBool; StdCall; external 'lcms2.dll';\r
1749 FUNCTION  cmsMLUalloc(ContextID: cmsContext; nItems: cmsUInt32Number): LPcmsMLU; StdCall; external 'lcms2.dll'; \r
1750 PROCEDURE cmsMLUfree(mlu: LPcmsMLU); StdCall; external 'lcms2.dll';\r
1751 FUNCTION  cmsMLUdup(mlu: LPcmsMLU): LPcmsMLU; StdCall; external 'lcms2.dll'; \r
1752 \r
1753 FUNCTION  cmsMLUsetASCII(mlu: LPcmsMLU; LanguageCode, CountryCode, ASCIIString: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll';\r
1754 FUNCTION  cmsMLUsetWide(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; WideString: PWChar): cmsBool; StdCall; external 'lcms2.dll';\r
1755 \r
1756 FUNCTION cmsMLUgetASCII(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; Buffer: PAnsiChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1757 \r
1758 FUNCTION cmsMLUgetWide(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; Buffer: PWChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1759                                                  \r
1760 FUNCTION cmsMLUgetTranslation(mlu: LPcmsMLU; LanguageCode, CountryCode, ObtainedLanguage, ObtainedCountry: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll';\r
1761 \r
1762 FUNCTION cmsAllocNamedColorList(ContextID: cmsContext; n, ColorantCount :cmsUInt32Number;\r
1763                                                            Prefix, Suffix: PAnsiChar): LPcmsNAMEDCOLORLIST; StdCall; external 'lcms2.dll';\r
1764 \r
1765 PROCEDURE cmsFreeNamedColorList(v: LPcmsNAMEDCOLORLIST); StdCall; external 'lcms2.dll';\r
1766 FUNCTION  cmsDupNamedColorList(v: LPcmsNAMEDCOLORLIST): LPcmsNAMEDCOLORLIST; StdCall; external 'lcms2.dll';\r
1767 FUNCTION  cmsAppendNamedColor(v: LPcmsNAMEDCOLORLIST; Name: PAnsiChar;\r
1768                                                              PCS, Colorant : LPcmsUInt16NumberArray): cmsBool; StdCall; external 'lcms2.dll';\r
1769 \r
1770 FUNCTION cmsNamedColorCount(v: LPcmsNAMEDCOLORLIST): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1771 FUNCTION cmsNamedColorIndex(v: LPcmsNAMEDCOLORLIST; Name: PAnsiChar): cmsInt32Number; StdCall; external 'lcms2.dll';\r
1772 \r
1773 FUNCTION cmsNamedColorInfo(v: LPcmsNAMEDCOLORLIST; nColor : cmsUInt32Number;\r
1774                                                       Name,Prefix, Suffix : PAnsiChar;\r
1775                                                        PCS, Colorant : LPcmsUInt16NumberArray): cmsBool; StdCall; external 'lcms2.dll';\r
1776 \r
1777 FUNCTION cmsGetNamedColorList(xform: cmsHTRANSFORM ): LPcmsNAMEDCOLORLIST; StdCall; external 'lcms2.dll';\r
1778 \r
1779 FUNCTION   cmsAllocProfileSequenceDescription(ContextID: cmsContext; n: cmsUInt32Number):LPcmsSEQ; StdCall; external 'lcms2.dll';\r
1780 FUNCTION   cmsDupProfileSequenceDescription(pseq: LPcmsSEQ):LPcmsSEQ; StdCall; external 'lcms2.dll';\r
1781 PROCEDURE  cmsFreeProfileSequenceDescription(pseq: LPcmsSEQ); StdCall; external 'lcms2.dll';\r
1782 \r
1783 FUNCTION  cmsDictAlloc(ContextID: cmsContext): cmsHANDLE; StdCall; external 'lcms2.dll';\r
1784 PROCEDURE cmsDictFree(hDict: cmsHANDLE);  StdCall; external 'lcms2.dll';\r
1785 FUNCTION  cmsDictDup(hDict: cmsHANDLE): cmsHANDLE;  StdCall; external 'lcms2.dll';\r
1786 \r
1787 FUNCTION cmsDictAddEntry(hDict: cmsHANDLE; Name, Value: PWChar; DisplayName, DisplayValue : LPcmsMLU): cmsBool;  StdCall; external 'lcms2.dll';\r
1788 FUNCTION cmsDictGetEntryList(hDict: cmsHANDLE): LPcmsDICTentry; StdCall; external 'lcms2.dll';\r
1789 FUNCTION cmsDictNextEntry(e : LPcmsDICTentry): LPcmsDICTentry;  StdCall; external 'lcms2.dll';\r
1790 \r
1791 FUNCTION cmsCreateProfilePlaceholder(ContextID: cmsContext): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1792 \r
1793 FUNCTION cmsGetProfileContextID(hProfile: cmsHPROFILE):cmsContext; StdCall; external 'lcms2.dll';\r
1794 FUNCTION cmsGetTagCount(hProfile: cmsHPROFILE): cmsInt32Number; StdCall; external 'lcms2.dll';\r
1795 FUNCTION cmsGetTagSignature(hProfile: cmsHPROFILE; n: cmsUInt32Number): cmsTagSignature; StdCall; external 'lcms2.dll';\r
1796 FUNCTION cmsIsTag(hProfile: cmsHPROFILE; sig: cmsTagSignature ): cmsBool; StdCall; external 'lcms2.dll';\r
1797 \r
1798 FUNCTION cmsReadTag(hProfile: cmsHPROFILE; sig: cmsTagSignature ): Pointer; StdCall; external 'lcms2.dll';\r
1799 FUNCTION cmsWriteTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; data: Pointer): cmsBool; StdCall; external 'lcms2.dll';\r
1800 FUNCTION cmsLinkTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; dest: cmsTagSignature): cmsBool; StdCall; external 'lcms2.dll';\r
1801 FUNCTION cmsTagLinkedTo(hProfile: cmsHPROFILE; sig: cmsTagSignature):cmsTagSignature; StdCall; external 'lcms2.dll';\r
1802 \r
1803 FUNCTION cmsReadRawTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; Buffer: Pointer; BufferSize: cmsUInt32Number): cmsInt32Number; StdCall; external 'lcms2.dll';\r
1804 FUNCTION cmsWriteRawTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; data: Pointer; Size: cmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll';\r
1805 \r
1806 FUNCTION  cmsGetHeaderFlags(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1807 PROCEDURE cmsGetHeaderAttributes(hProfile: cmsHPROFILE; Flags: LPcmsUInt64Number); StdCall; external 'lcms2.dll';\r
1808 PROCEDURE cmsGetHeaderProfileID(hProfile: cmsHPROFILE; ProfileID: LPcmsUInt8Number); StdCall; external 'lcms2.dll';\r
1809 \r
1810 FUNCTION  cmsGetHeaderRenderingIntent(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1811 PROCEDURE cmsSetHeaderFlags(hProfile: cmsHPROFILE; Flags: cmsUInt32Number); StdCall; external 'lcms2.dll';\r
1812 FUNCTION  cmsGetHeaderManufacturer(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1813 PROCEDURE cmsSetHeaderManufacturer(hProfile: cmsHPROFILE; manufacturer: cmsUInt32Number ); StdCall; external 'lcms2.dll';\r
1814 FUNCTION  cmsGetHeaderModel(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1815 PROCEDURE cmsSetHeaderModel(hProfile: cmsHPROFILE; model: cmsUInt32Number ); StdCall; external 'lcms2.dll';\r
1816 PROCEDURE cmsSetHeaderAttributes(hProfile: cmsHPROFILE; Flags: cmsUInt64Number); StdCall; external 'lcms2.dll';\r
1817 PROCEDURE cmsSetHeaderProfileID(hProfile: cmsHPROFILE; ProfileID: LPcmsUInt8Number); StdCall; external 'lcms2.dll';\r
1818 PROCEDURE cmsSetHeaderRenderingIntent(hProfile: cmsHPROFILE; RenderingIntent: cmsUInt32Number ); StdCall; external 'lcms2.dll';\r
1819 \r
1820 FUNCTION  cmsGetPCS(hProfile: cmsHPROFILE):cmsColorSpaceSignature; StdCall; external 'lcms2.dll';\r
1821 PROCEDURE cmsSetPCS(hProfile: cmsHPROFILE; pcs: cmsColorSpaceSignature); StdCall; external 'lcms2.dll';\r
1822 FUNCTION  cmsGetColorSpace(hProfile: cmsHPROFILE): cmsColorSpaceSignature; StdCall; external 'lcms2.dll';\r
1823 PROCEDURE cmsSetColorSpace(hProfile: cmsHPROFILE; sig: cmsColorSpaceSignature); StdCall; external 'lcms2.dll';\r
1824 FUNCTION  cmsGetDeviceClass(hProfile: cmsHPROFILE): cmsProfileClassSignature; StdCall; external 'lcms2.dll';\r
1825 PROCEDURE cmsSetDeviceClass(hProfile: cmsHPROFILE; sig: cmsProfileClassSignature); StdCall; external 'lcms2.dll';\r
1826 PROCEDURE cmsSetProfileVersion(hProfile: cmsHPROFILE; Version: cmsFloat64Number); StdCall; external 'lcms2.dll';\r
1827 FUNCTION  cmsGetProfileVersion(hProfile: cmsHPROFILE): cmsFloat64Number; StdCall; external 'lcms2.dll';\r
1828 \r
1829 FUNCTION  cmsGetEncodedICCversion(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1830 PROCEDURE cmsSetEncodedICCversion(hProfile: cmsHPROFILE; Version: cmsUInt32Number); StdCall; external 'lcms2.dll';\r
1831 \r
1832 \r
1833 FUNCTION   cmsIsIntentSupported(hProfile: cmsHPROFILE; Intent: cmsUInt32Number; UsedDirection: cmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll';\r
1834 FUNCTION   cmsIsMatrixShaper(hProfile: cmsHPROFILE): cmsBool; StdCall; external 'lcms2.dll';\r
1835 FUNCTION   cmsIsCLUT(hProfile: cmsHPROFILE; Intent: cmsUInt32Number; UsedDirection: cmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll';\r
1836 FUNCTION _cmsICCcolorSpace(OurNotation: Integer): cmsColorSpaceSignature; StdCall; external 'lcms2.dll';\r
1837 FUNCTION _cmsLCMScolorSpace(ProfileSpace: cmsColorSpaceSignature): Integer; StdCall; external 'lcms2.dll';\r
1838 \r
1839 FUNCTION cmsChannelsOf( ColorSpace: cmsColorSpaceSignature): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1840 \r
1841 FUNCTION cmsFormatterForColorspaceOfProfile(hProfile: cmsHPROFILE; nBytes: cmsUInt32Number; lIsFloat: cmsBool): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1842 FUNCTION cmsFormatterForPCSOfProfile(hProfile: cmsHPROFILE; nBytes: cmsUInt32Number; lIsFloat: cmsBool): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1843 \r
1844 \r
1845 FUNCTION cmsGetProfileInfo(hProfile: cmsHPROFILE; Info: cmsInfoType; LanguageCode, CountryCode: PAnsiChar;\r
1846                                                             Buffer: PWChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1847 \r
1848 FUNCTION cmsGetProfileInfoASCII(hProfile: cmsHPROFILE; Info: cmsInfoType; LanguageCode, CountryCode: PAnsiChar;\r
1849                                                             Buffer: PAnsiChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1850 \r
1851 \r
1852 FUNCTION cmsOpenIOhandlerFromFile(ContextID: cmsContext; FileName, AccessMode: PAnsiChar): LPcmsIOHANDLER; StdCall; external 'lcms2.dll';\r
1853 // FUNCTION cmsOpenIOhandlerFromStream(ContextID: cmsContext; FILE* Stream): LPcmsIOHANDLER; StdCall; external 'lcms2.dll';\r
1854 FUNCTION cmsOpenIOhandlerFromMem(ContextID: cmsContext; Buffer: Pointer; size: cmsUInt32Number; AccessMode: PAnsiChar): LPcmsIOHANDLER; StdCall; external 'lcms2.dll';\r
1855 FUNCTION cmsOpenIOhandlerFromNULL(ContextID: cmsContext): LPcmsIOHANDLER; StdCall; external 'lcms2.dll';\r
1856 FUNCTION cmsCloseIOhandler(io: LPcmsIOHANDLER): cmsBool; StdCall; external 'lcms2.dll';\r
1857 \r
1858 FUNCTION cmsMD5computeID(hProfile: cmsHPROFILE): cmsBool; StdCall; external 'lcms2.dll';\r
1859 \r
1860 FUNCTION   cmsOpenProfileFromFile(ICCProfile : PAnsiChar; sAccess: PAnsiChar): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1861 FUNCTION   cmsOpenProfileFromFileTHR(ContextID: cmsContext; ICCProfile, sAccess: PAnsiChar): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1862 // FUNCTION      CMSEXPORT cmsOpenProfileFromStream(FILE* ICCProfile, const char* sAccess): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1863 // FUNCTION      CMSEXPORT cmsOpenProfileFromStreamTHR(ContextID: cmsContext; FILE* ICCProfile, const char* sAccess): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1864 FUNCTION   cmsOpenProfileFromMem(MemPtr: Pointer; dwSize: cmsUInt32Number): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1865 FUNCTION   cmsOpenProfileFromMemTHR(ContextID: cmsContext; MemPtr: Pointer; dwSize: cmsUInt32Number): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1866 FUNCTION   cmsOpenProfileFromIOhandlerTHR(ContextID: cmsContext; io: LPcmsIOHANDLER): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1867 FUNCTION   cmsCloseProfile(hProfile: cmsHPROFILE): cmsBool; StdCall; external 'lcms2.dll';\r
1868 \r
1869 FUNCTION   cmsSaveProfileToFile(hProfile: cmsHPROFILE; FileName: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll';\r
1870 // FUNCTION         CMSEXPORT cmsSaveProfileToStream(hProfile: cmsHPROFILE, FILE* Stream): cmsBool; StdCall; external 'lcms2.dll';\r
1871 FUNCTION   cmsSaveProfileToMem(hProfile: cmsHPROFILE; MemPtr: Pointer; BytesNeeded: LPcmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll';\r
1872 FUNCTION   cmsSaveProfileToIOhandler(hProfile: cmsHPROFILE; io: LPcmsIOHANDLER):cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1873 \r
1874 FUNCTION  cmsCreateRGBProfileTHR(ContextID: cmsContext;\r
1875                                                    WhitePoint: LPcmsCIExyY;\r
1876                                                    Primaries: LPcmsCIExyYTRIPLE;\r
1877                                                    TransferFunction: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1878 \r
1879 FUNCTION  cmsCreateRGBProfile(WhitePoint: LPcmsCIExyY;\r
1880                                                    Primaries: LPcmsCIExyYTRIPLE;\r
1881                                                    TransferFunction: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1882 \r
1883 FUNCTION cmsCreateGrayProfileTHR(ContextID: cmsContext;\r
1884                                                     WhitePoint: LPcmsCIExyY;\r
1885                                                     TransferFunction: LPcmsToneCurve): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1886 \r
1887 FUNCTION cmsCreateGrayProfile(WhitePoint: LPcmsCIExyY;\r
1888                                                      TransferFunction: LPcmsToneCurve): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1889 \r
1890 FUNCTION cmsCreateLinearizationDeviceLinkTHR(ContextID: cmsContext;\r
1891                                                                  ColorSpace: cmsColorSpaceSignature;\r
1892                                                                  TransferFunctions: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1893 \r
1894 FUNCTION cmsCreateLinearizationDeviceLink(ColorSpace: cmsColorSpaceSignature;\r
1895                                                                  TransferFunctions: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1896 \r
1897 FUNCTION cmsCreateInkLimitingDeviceLinkTHR(ContextID: cmsContext;\r
1898                                                               ColorSpace: cmsColorSpaceSignature; Limit: cmsFloat64Number): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1899 \r
1900 FUNCTION cmsCreateInkLimitingDeviceLink(ColorSpace: cmsColorSpaceSignature; Limit: cmsFloat64Number): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1901 \r
1902 \r
1903 FUNCTION cmsCreateLab2ProfileTHR(ContextID: cmsContext; WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1904 FUNCTION cmsCreateLab2Profile(WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1905 FUNCTION cmsCreateLab4ProfileTHR(ContextID: cmsContext; WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1906 FUNCTION cmsCreateLab4Profile(WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1907 \r
1908 FUNCTION cmsCreateXYZProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1909 FUNCTION cmsCreateXYZProfile: cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1910 \r
1911 FUNCTION cmsCreate_sRGBProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1912 FUNCTION cmsCreate_sRGBProfile: cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1913 \r
1914 FUNCTION cmsCreateBCHSWabstractProfileTHR(ContextID: cmsContext;\r
1915                                                              nLUTPoints: Integer;\r
1916                                                              Bright,\r
1917                                                              Contrast,\r
1918                                                              Hue,\r
1919                                                              Saturation: cmsFloat64Number;\r
1920                                                              TempSrc,\r
1921                                                              TempDest: Integer): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1922 \r
1923 FUNCTION cmsCreateBCHSWabstractProfile(   nLUTPoints: Integer;\r
1924                                                              Bright,\r
1925                                                              Contrast,\r
1926                                                              Hue,\r
1927                                                              Saturation: cmsFloat64Number;\r
1928                                                              TempSrc,\r
1929                                                              TempDest: Integer): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1930 \r
1931 FUNCTION  cmsCreateNULLProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1932 FUNCTION  cmsCreateNULLProfile: cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1933 \r
1934 // Converts a transform to a devicelink profile\r
1935 FUNCTION  cmsTransform2DeviceLink(hTransform: cmsHTRANSFORM; Version: cmsFloat64Number; dwFlags: cmsUInt32Number): cmsHPROFILE; StdCall; external 'lcms2.dll';\r
1936 \r
1937 // Call with NULL as parameters to get the intent count\r
1938 FUNCTION cmsGetSupportedIntents(nMax: cmsUInt32Number; Codes: LPcmsUInt32Number; Descriptions: LPPAnsiChar): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
1939 \r
1940 FUNCTION cmsFLAGS_GRIDPOINTS(n: Integer): Integer; begin cmsFLAGS_GRIDPOINTS :=  (((n) and $FF) shl 16) end;\r
1941 \r
1942 \r
1943 FUNCTION   cmsCreateTransformTHR(ContextID: cmsContext;\r
1944                                                   Input: cmsHPROFILE;\r
1945                                                   InputFormat: cmsUInt32Number;\r
1946                                                   Output: cmsHPROFILE;\r
1947                                                   OutputFormat: cmsUInt32Number;\r
1948                                                   Intent: cmsUInt32Number;\r
1949                                                   dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external 'lcms2.dll';\r
1950 \r
1951 FUNCTION   cmsCreateTransform(Input: cmsHPROFILE;\r
1952                                                   InputFormat: cmsUInt32Number;\r
1953                                                   Output: cmsHPROFILE;\r
1954                                                   OutputFormat: cmsUInt32Number;\r
1955                                                   Intent: cmsUInt32Number;\r
1956                                                   dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external 'lcms2.dll';\r
1957 \r
1958 FUNCTION   cmsCreateProofingTransformTHR(ContextID: cmsContext;\r
1959                                                   Input: cmsHPROFILE;\r
1960                                                   InputFormat: cmsUInt32Number;\r
1961                                                   Output: cmsHPROFILE;\r
1962                                                   OutputFormat: cmsUInt32Number;\r
1963                                                   Proofing: cmsHPROFILE;\r
1964                                                   Intent: cmsUInt32Number;\r
1965                                                   ProofingIntent: cmsUInt32Number;\r
1966                                                   dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external 'lcms2.dll';\r
1967 \r
1968 FUNCTION   cmsCreateProofingTransform(Input: cmsHPROFILE;\r
1969                                                   InputFormat: cmsUInt32Number;\r
1970                                                   Output: cmsHPROFILE;\r
1971                                                   OutputFormat: cmsUInt32Number;\r
1972                                                   Proofing: cmsHPROFILE;\r
1973                                                   Intent: cmsUInt32Number;\r
1974                                                   ProofingIntent: cmsUInt32Number;\r
1975                                                   dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external 'lcms2.dll';\r
1976 \r
1977 FUNCTION   cmsCreateMultiprofileTransformTHR(ContextID: cmsContext;\r
1978                                                   hProfiles: LPcmsHPROFILEArray;\r
1979                                                   nProfiles: cmsUInt32Number;\r
1980                                                   InputFormat: cmsUInt32Number;\r
1981                                                   OutputFormat: cmsUInt32Number;\r
1982                                                   Intent: cmsUInt32Number;\r
1983                                                   dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external 'lcms2.dll';\r
1984 \r
1985 \r
1986 FUNCTION   cmsCreateMultiprofileTransform( hProfiles: LPcmsHPROFILEArray;\r
1987                                                   nProfiles: cmsUInt32Number;\r
1988                                                   InputFormat: cmsUInt32Number;\r
1989                                                   OutputFormat: cmsUInt32Number;\r
1990                                                   Intent: cmsUInt32Number;\r
1991                                                   dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external 'lcms2.dll';\r
1992 \r
1993 \r
1994 FUNCTION   cmsCreateExtendedTransform(ContextID: cmsContext;\r
1995                                                    nProfiles: cmsUInt32Number;\r
1996                                                    hProfiles: LPcmsHPROFILEArray;\r
1997                                                    BPC: LPcmsBoolArray;\r
1998                                                    Intents: LPcmsUInt32NumberArray;\r
1999                                                    AdaptationStates: LPcmsFloat64NumberArray;\r
2000                                                    hGamutProfile: cmsHPROFILE;\r
2001                                                    nGamutPCSposition: cmsUInt32Number;\r
2002                                                    InputFormat,\r
2003                                                    OutputFormat: cmsUInt32Number;\r
2004                                                    dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external 'lcms2.dll';\r
2005 \r
2006 PROCEDURE  cmsDeleteTransform(hTransform: cmsHTRANSFORM); StdCall; external 'lcms2.dll';\r
2007 \r
2008 PROCEDURE  cmsDoTransform(Transform: cmsHTRANSFORM; InputBuffer, OutputBuffer: Pointer; size: cmsUInt32Number);  StdCall; external 'lcms2.dll';\r
2009 \r
2010 PROCEDURE  cmsSetAlarmCodes( NewAlarm: LPcmsUInt16NumberArray);  StdCall; external 'lcms2.dll';\r
2011 PROCEDURE  cmsGetAlarmCodes(NewAlarm: LPcmsUInt16NumberArray); StdCall; external 'lcms2.dll';\r
2012 \r
2013 // Adaptation state for absolute colorimetric intent\r
2014 FUNCTION  cmsSetAdaptationState(d: cmsFloat64Number):cmsFloat64Number; StdCall; external 'lcms2.dll';\r
2015 \r
2016 // Grab the ContextID from an open transform. Returns NULL if a NULL transform is passed\r
2017 FUNCTION  cmsGetTransformContextID(hTransform: cmsHTRANSFORM):cmsContext; StdCall; external 'lcms2.dll';\r
2018 \r
2019 // For backwards compatibility\r
2020 FUNCTION  cmsChangeBuffersFormat(hTransform: cmsHTRANSFORM; InputFormat, OutputFormat: cmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll';\r
2021 \r
2022 \r
2023 // lcms2 unified method to access postscript color resources\r
2024 FUNCTION cmsGetPostScriptColorResource(ContextID: cmsContext;   RType: cmsPSResourceType;\r
2025                                                                 hProfile: cmsHPROFILE;\r
2026                                                                 Intent: cmsUInt32Number;\r
2027                                                                 dwFlags: cmsUInt32Number;\r
2028                                                                 io: LPcmsIOHANDLER): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
2029 \r
2030 FUNCTION cmsGetPostScriptCSA(ContextID: cmsContext; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number; Buffer: Pointer; dwBufferLen: cmsUInt32Number ): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
2031 FUNCTION cmsGetPostScriptCRD(ContextID: cmsContext; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number; Buffer: Pointer; dwBufferLen: cmsUInt32Number): cmsUInt32Number; StdCall; external 'lcms2.dll';\r
2032 \r
2033 \r
2034 // CGATS.13 parser\r
2035 \r
2036 FUNCTION  cmsIT8Alloc: cmsHANDLE; StdCall; external 'lcms2.dll';\r
2037 PROCEDURE cmsIT8Free(hIT8: cmsHANDLE); StdCall; external 'lcms2.dll';\r
2038 \r
2039 // Tables\r
2040 \r
2041 FUNCTION  cmsIT8TableCount(hIT8: cmsHANDLE): Integer; StdCall; external 'lcms2.dll';\r
2042 FUNCTION  cmsIT8SetTable(hIT8: cmsHANDLE; nTable: Integer): Integer; StdCall; external 'lcms2.dll';\r
2043 \r
2044 // Persistence\r
2045 FUNCTION  cmsIT8LoadFromFile(cFileName: PAnsiChar): cmsHANDLE; StdCall; external 'lcms2.dll';\r
2046 FUNCTION  cmsIT8LoadFromMem(Ptr: Pointer; size :DWord): cmsHANDLE; StdCall; external 'lcms2.dll';\r
2047 \r
2048 FUNCTION cmsIT8SaveToFile(hIT8: cmsHANDLE; cFileName: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll';\r
2049 FUNCTION cmsIT8SaveToMem(hIT8: cmsHANDLE; MemPtr: Pointer; BytesNeeded: LPcmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll';\r
2050 // Properties\r
2051 \r
2052 FUNCTION cmsIT8GetSheetType(hIT8: cmsHANDLE): PAnsiChar; StdCall; external 'lcms2.dll';\r
2053 FUNCTION cmsIT8SetSheetType(hIT8: cmsHANDLE; TheType: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll';\r
2054 \r
2055 FUNCTION cmsIT8SetComment(hIT8: cmsHANDLE; cComment: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll';\r
2056 \r
2057 FUNCTION cmsIT8SetPropertyStr(hIT8: cmsHANDLE; cProp, Str: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll';\r
2058 FUNCTION cmsIT8SetPropertyDbl(hIT8: cmsHANDLE; cProp: PAnsiChar; Val: Double): cmsBool; StdCall; external 'lcms2.dll';\r
2059 FUNCTION cmsIT8SetPropertyHex(hIT8: cmsHANDLE; cProp: PAnsiChar; Val: Integer): cmsBool; StdCall; external 'lcms2.dll';\r
2060 FUNCTION cmsIT8SetPropertyUncooked(hIT8: cmsHANDLE; Key, Buffer: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll';\r
2061 \r
2062 \r
2063 FUNCTION cmsIT8GetProperty(hIT8: cmsHANDLE; cProp: PAnsiChar): PAnsiChar; StdCall; external 'lcms2.dll';\r
2064 FUNCTION cmsIT8GetPropertyDbl(hIT8: cmsHANDLE; cProp: PAnsiChar): Double; StdCall; external 'lcms2.dll';\r
2065 FUNCTION cmsIT8EnumProperties(hIT8: cmsHANDLE; var PropertyNames: LPPAnsiChar): Integer; StdCall; external 'lcms2.dll';\r
2066 \r
2067 // Datasets\r
2068 \r
2069 FUNCTION cmsIT8GetDataRowCol(hIT8: cmsHANDLE; row, col: Integer): PAnsiChar; StdCall; external 'lcms2.dll';\r
2070 FUNCTION cmsIT8GetDataRowColDbl(hIT8: cmsHANDLE; row, col: Integer): Double; StdCall; external 'lcms2.dll';\r
2071 \r
2072 FUNCTION cmsIT8SetDataRowCol(hIT8: cmsHANDLE; row, col: Integer; Val: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll';\r
2073 FUNCTION cmsIT8SetDataRowColDbl(hIT8: cmsHANDLE; row, col: Integer; Val: Double): cmsBool; StdCall; external 'lcms2.dll';\r
2074 \r
2075 FUNCTION cmsIT8GetData(hIT8: cmsHANDLE; cPatch, cSample: PAnsiChar): PAnsiChar; StdCall; external 'lcms2.dll';\r
2076 \r
2077 FUNCTION cmsIT8GetDataDbl(hIT8: cmsHANDLE;cPatch, cSample: PAnsiChar): Double; StdCall; external 'lcms2.dll';\r
2078 \r
2079 FUNCTION cmsIT8SetData(hIT8: cmsHANDLE; cPatch, cSample, Val: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll';\r
2080 \r
2081 FUNCTION cmsIT8SetDataDbl(hIT8: cmsHANDLE; cPatch, cSample: PAnsiChar; Val: Double): cmsBool; StdCall; external 'lcms2.dll';\r
2082 \r
2083 FUNCTION cmsIT8SetDataFormat(hIT8: cmsHANDLE; n: Integer; Sample: PAnsiChar): cmsBool; StdCall; external 'lcms2.dll';\r
2084 FUNCTION cmsIT8EnumDataFormat(hIT8: cmsHANDLE; var SampleNames: LPPAnsiChar): Integer; StdCall; external 'lcms2.dll';\r
2085 FUNCTION cmsIT8GetPatchName(hIT8: cmsHANDLE; nPatch: Integer; Buffer: PAnsiChar): PAnsiChar; StdCall; external 'lcms2.dll';\r
2086 \r
2087 // The LABEL extension\r
2088 \r
2089 FUNCTION cmsIT8SetTableByLabel(hIT8: cmsHANDLE; cSet, cField, ExpectedType: PAnsiChar): Integer; StdCall; external 'lcms2.dll';\r
2090 \r
2091 FUNCTION cmsIT8FindDataFormat(hIT8: cmsHANDLE; cSample: PAnsiChar): Integer; StdCall; external 'lcms2.dll';\r
2092 \r
2093 // Formatter for double\r
2094 PROCEDURE  cmsIT8DefineDblFormat(hIT8: cmsHANDLE; Formatter: PAnsiChar);  StdCall; external 'lcms2.dll';\r
2095 \r
2096 FUNCTION  cmsGBDAlloc(ContextID: cmsContext):cmsHANDLE; StdCall; external 'lcms2.dll';\r
2097 PROCEDURE cmsGBDFree(hGBD: cmsHANDLE); StdCall; external 'lcms2.dll';\r
2098 FUNCTION  cmsGDBAddPoint(hGBD: cmsHANDLE; Lab: LPcmsCIELab): cmsBool; StdCall; external 'lcms2.dll';\r
2099 FUNCTION  cmsGDBCompute(hGDB: cmsHANDLE; dwFlags: cmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll';\r
2100 FUNCTION  cmsGDBCheckPoint(hGBD: cmsHANDLE; Lab: LPcmsCIELab): cmsBool; StdCall; external 'lcms2.dll';\r
2101 \r
2102 FUNCTION cmsDetectBlackPoint( BlackPoint: LPcmsCIEXYZ; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsBool; StdCall; external 'lcms2.dll';\r
2103 \r
2104 FUNCTION cmsDetectTAC(hProfile: cmsHPROFILE): cmsFloat64Number; StdCall; external 'lcms2.dll';\r
2105 \r
2106 FUNCTION  cmsDesaturateLab(Lab: LPcmsCIELab; amax, amin, bmax, bmin: cmsFloat64Number): cmsBool; StdCall; external 'lcms2.dll';\r
2107                                                    \r
2108 END.\r