1//--------------------------------------------------------------------------------- 2// 3// Little Color Management System 4// Copyright (c) 1998-2014 Marti Maria Saguer 5// 6// Permission is hereby granted, free of charge, to any person obtaining 7// a copy of this software and associated documentation files (the "Software"), 8// to deal in the Software without restriction, including without limitation 9// the rights to use, copy, modify, merge, publish, distribute, sublicense, 10// and/or sell copies of the Software, and to permit persons to whom the Software 11// is furnished to do so, subject to the following conditions: 12// 13// The above copyright notice and this permission notice shall be included in 14// all copies or substantial portions of the Software. 15// 16// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO 18// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23// 24//--------------------------------------------------------------------------------- 25// 26// Version 2.6 27// 28 29#ifndef _lcms2_H 30 31// ********** Configuration toggles **************************************** 32 33// Uncomment this one if you are using big endian machines 34// #define CMS_USE_BIG_ENDIAN 1 35 36// Uncomment this one if your compiler/machine does NOT support the 37// "long long" type. 38// #define CMS_DONT_USE_INT64 1 39 40// Uncomment this if your compiler doesn't work with fast floor function 41// #define CMS_DONT_USE_FAST_FLOOR 1 42 43// Uncomment this line if you want lcms to use the black point tag in profile, 44// if commented, lcms will compute the black point by its own. 45// It is safer to leave it commented out 46// #define CMS_USE_PROFILE_BLACK_POINT_TAG 1 47 48// Uncomment this line if you are compiling as C++ and want a C++ API 49// #define CMS_USE_CPP_API 50 51// Uncomment this line if you need strict CGATS syntax. Makes CGATS files to 52// require "KEYWORD" on undefined identifiers, keep it comented out unless needed 53// #define CMS_STRICT_CGATS 1 54 55// Uncomment to get rid of the tables for "half" float support 56// #define CMS_NO_HALF_SUPPORT 1 57 58// Uncomment to get rid of pthreads/windows dependency 59// #define CMS_NO_PTHREADS 1 60 61// ********** End of configuration toggles ****************************** 62 63// Needed for streams 64#include <stdio.h> 65 66// Needed for portability (C99 per 7.1.2) 67#include <limits.h> 68#include <time.h> 69#include <stddef.h> 70 71#ifndef CMS_USE_CPP_API 72# ifdef __cplusplus 73extern "C" { 74# endif 75#endif 76 77// Version/release 78#define LCMS_VERSION 2060 79 80// I will give the chance of redefining basic types for compilers that are not fully C99 compliant 81#ifndef CMS_BASIC_TYPES_ALREADY_DEFINED 82 83// Base types 84typedef unsigned char cmsUInt8Number; // That is guaranteed by the C99 spec 85typedef signed char cmsInt8Number; // That is guaranteed by the C99 spec 86 87#if CHAR_BIT != 8 88# error "Unable to find 8 bit type, unsupported compiler" 89#endif 90 91// IEEE float storage numbers 92typedef float cmsFloat32Number; 93typedef double cmsFloat64Number; 94 95// 16-bit base types 96#if (USHRT_MAX == 65535U) 97 typedef unsigned short cmsUInt16Number; 98#elif (UINT_MAX == 65535U) 99 typedef unsigned int cmsUInt16Number; 100#else 101# error "Unable to find 16 bits unsigned type, unsupported compiler" 102#endif 103 104#if (SHRT_MAX == 32767) 105 typedef short cmsInt16Number; 106#elif (INT_MAX == 32767) 107 typedef int cmsInt16Number; 108#else 109# error "Unable to find 16 bits signed type, unsupported compiler" 110#endif 111 112// 32-bit base type 113#if (UINT_MAX == 4294967295U) 114 typedef unsigned int cmsUInt32Number; 115#elif (ULONG_MAX == 4294967295U) 116 typedef unsigned long cmsUInt32Number; 117#else 118# error "Unable to find 32 bit unsigned type, unsupported compiler" 119#endif 120 121#if (INT_MAX == +2147483647) 122 typedef int cmsInt32Number; 123#elif (LONG_MAX == +2147483647) 124 typedef long cmsInt32Number; 125#else 126# error "Unable to find 32 bit signed type, unsupported compiler" 127#endif 128 129// 64-bit base types 130#ifndef CMS_DONT_USE_INT64 131# if (ULONG_MAX == 18446744073709551615U) 132 typedef unsigned long cmsUInt64Number; 133# elif (ULLONG_MAX == 18446744073709551615U) 134 typedef unsigned long long cmsUInt64Number; 135# else 136# define CMS_DONT_USE_INT64 1 137# endif 138# if (LONG_MAX == +9223372036854775807) 139 typedef long cmsInt64Number; 140# elif (LLONG_MAX == +9223372036854775807) 141 typedef long long cmsInt64Number; 142# else 143# define CMS_DONT_USE_INT64 1 144# endif 145#endif 146#endif 147 148// In the case 64 bit numbers are not supported by the compiler 149#ifdef CMS_DONT_USE_INT64 150 typedef cmsUInt32Number cmsUInt64Number[2]; 151 typedef cmsInt32Number cmsInt64Number[2]; 152#endif 153 154// Derivative types 155typedef cmsUInt32Number cmsSignature; 156typedef cmsUInt16Number cmsU8Fixed8Number; 157typedef cmsInt32Number cmsS15Fixed16Number; 158typedef cmsUInt32Number cmsU16Fixed16Number; 159 160// Boolean type, which will be using the native integer 161typedef int cmsBool; 162 163// Try to detect windows 164#if defined (_WIN32) || defined(_WIN64) || defined(WIN32) || defined(_WIN32_) 165# define CMS_IS_WINDOWS_ 1 166#endif 167 168#ifdef _MSC_VER 169# define CMS_IS_WINDOWS_ 1 170#endif 171 172#ifdef __BORLANDC__ 173# define CMS_IS_WINDOWS_ 1 174#endif 175 176// Try to detect big endian platforms. This list can be endless, so only some checks are performed over here. 177// you can pass this toggle to the compiler by using -DCMS_USE_BIG_ENDIAN or something similar 178 179#if defined(__sgi__) || defined(__sgi) || defined(sparc) 180# define CMS_USE_BIG_ENDIAN 1 181#endif 182 183#if defined(__s390__) || defined(__s390x__) 184# define CMS_USE_BIG_ENDIAN 1 185#endif 186 187# ifdef TARGET_CPU_PPC 188# if TARGET_CPU_PPC 189# define CMS_USE_BIG_ENDIAN 1 190# endif 191# endif 192 193#if defined(__powerpc__) || defined(__ppc__) || defined(TARGET_CPU_PPC) 194# define CMS_USE_BIG_ENDIAN 1 195# if defined (__GNUC__) && defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) 196# if __BYTE_ORDER == __LITTLE_ENDIAN 197// // Don't use big endian for PowerPC little endian mode 198# undef CMS_USE_BIG_ENDIAN 199# endif 200# endif 201#endif 202 203// WORDS_BIGENDIAN takes precedence 204#if defined(_HOST_BIG_ENDIAN) || defined(__BIG_ENDIAN__) || defined(WORDS_BIGENDIAN) 205# define CMS_USE_BIG_ENDIAN 1 206#endif 207 208#ifdef macintosh 209# ifdef __BIG_ENDIAN__ 210# define CMS_USE_BIG_ENDIAN 1 211# endif 212# ifdef __LITTLE_ENDIAN__ 213# undef CMS_USE_BIG_ENDIAN 214# endif 215#endif 216 217// Calling convention -- this is hardly platform and compiler dependent 218#ifdef CMS_IS_WINDOWS_ 219# if defined(CMS_DLL) || defined(CMS_DLL_BUILD) 220# ifdef __BORLANDC__ 221# define CMSEXPORT __stdcall _export 222# define CMSAPI 223# else 224# define CMSEXPORT _stdcall 225# ifdef CMS_DLL_BUILD 226# define CMSAPI __declspec(dllexport) 227# else 228# define CMSAPI __declspec(dllimport) 229# endif 230# endif 231# else 232# define CMSEXPORT 233# define CMSAPI 234# endif 235#else 236# define CMSEXPORT 237# define CMSAPI 238#endif 239 240#ifdef HasTHREADS 241# if HasTHREADS == 1 242# undef CMS_NO_PTHREADS 243# else 244# define CMS_NO_PTHREADS 1 245# endif 246#endif 247 248// Some common definitions 249#define cmsMAX_PATH 256 250 251#ifndef FALSE 252# define FALSE 0 253#endif 254#ifndef TRUE 255# define TRUE 1 256#endif 257 258// D50 XYZ normalized to Y=1.0 259#define cmsD50X 0.9642 260#define cmsD50Y 1.0 261#define cmsD50Z 0.8249 262 263// V4 perceptual black 264#define cmsPERCEPTUAL_BLACK_X 0.00336 265#define cmsPERCEPTUAL_BLACK_Y 0.0034731 266#define cmsPERCEPTUAL_BLACK_Z 0.00287 267 268// Definitions in ICC spec 269#define cmsMagicNumber 0x61637370 // 'acsp' 270#define lcmsSignature 0x6c636d73 // 'lcms' 271 272 273// Base ICC type definitions 274typedef enum { 275 cmsSigChromaticityType = 0x6368726D, // 'chrm' 276 cmsSigColorantOrderType = 0x636C726F, // 'clro' 277 cmsSigColorantTableType = 0x636C7274, // 'clrt' 278 cmsSigCrdInfoType = 0x63726469, // 'crdi' 279 cmsSigCurveType = 0x63757276, // 'curv' 280 cmsSigDataType = 0x64617461, // 'data' 281 cmsSigDictType = 0x64696374, // 'dict' 282 cmsSigDateTimeType = 0x6474696D, // 'dtim' 283 cmsSigDeviceSettingsType = 0x64657673, // 'devs' 284 cmsSigLut16Type = 0x6d667432, // 'mft2' 285 cmsSigLut8Type = 0x6d667431, // 'mft1' 286 cmsSigLutAtoBType = 0x6d414220, // 'mAB ' 287 cmsSigLutBtoAType = 0x6d424120, // 'mBA ' 288 cmsSigMeasurementType = 0x6D656173, // 'meas' 289 cmsSigMultiLocalizedUnicodeType = 0x6D6C7563, // 'mluc' 290 cmsSigMultiProcessElementType = 0x6D706574, // 'mpet' 291 cmsSigNamedColorType = 0x6E636f6C, // 'ncol' -- DEPRECATED! 292 cmsSigNamedColor2Type = 0x6E636C32, // 'ncl2' 293 cmsSigParametricCurveType = 0x70617261, // 'para' 294 cmsSigProfileSequenceDescType = 0x70736571, // 'pseq' 295 cmsSigProfileSequenceIdType = 0x70736964, // 'psid' 296 cmsSigResponseCurveSet16Type = 0x72637332, // 'rcs2' 297 cmsSigS15Fixed16ArrayType = 0x73663332, // 'sf32' 298 cmsSigScreeningType = 0x7363726E, // 'scrn' 299 cmsSigSignatureType = 0x73696720, // 'sig ' 300 cmsSigTextType = 0x74657874, // 'text' 301 cmsSigTextDescriptionType = 0x64657363, // 'desc' 302 cmsSigU16Fixed16ArrayType = 0x75663332, // 'uf32' 303 cmsSigUcrBgType = 0x62666420, // 'bfd ' 304 cmsSigUInt16ArrayType = 0x75693136, // 'ui16' 305 cmsSigUInt32ArrayType = 0x75693332, // 'ui32' 306 cmsSigUInt64ArrayType = 0x75693634, // 'ui64' 307 cmsSigUInt8ArrayType = 0x75693038, // 'ui08' 308 cmsSigVcgtType = 0x76636774, // 'vcgt' 309 cmsSigViewingConditionsType = 0x76696577, // 'view' 310 cmsSigXYZType = 0x58595A20 // 'XYZ ' 311 312 313} cmsTagTypeSignature; 314 315// Base ICC tag definitions 316typedef enum { 317 cmsSigAToB0Tag = 0x41324230, // 'A2B0' 318 cmsSigAToB1Tag = 0x41324231, // 'A2B1' 319 cmsSigAToB2Tag = 0x41324232, // 'A2B2' 320 cmsSigBlueColorantTag = 0x6258595A, // 'bXYZ' 321 cmsSigBlueMatrixColumnTag = 0x6258595A, // 'bXYZ' 322 cmsSigBlueTRCTag = 0x62545243, // 'bTRC' 323 cmsSigBToA0Tag = 0x42324130, // 'B2A0' 324 cmsSigBToA1Tag = 0x42324131, // 'B2A1' 325 cmsSigBToA2Tag = 0x42324132, // 'B2A2' 326 cmsSigCalibrationDateTimeTag = 0x63616C74, // 'calt' 327 cmsSigCharTargetTag = 0x74617267, // 'targ' 328 cmsSigChromaticAdaptationTag = 0x63686164, // 'chad' 329 cmsSigChromaticityTag = 0x6368726D, // 'chrm' 330 cmsSigColorantOrderTag = 0x636C726F, // 'clro' 331 cmsSigColorantTableTag = 0x636C7274, // 'clrt' 332 cmsSigColorantTableOutTag = 0x636C6F74, // 'clot' 333 cmsSigColorimetricIntentImageStateTag = 0x63696973, // 'ciis' 334 cmsSigCopyrightTag = 0x63707274, // 'cprt' 335 cmsSigCrdInfoTag = 0x63726469, // 'crdi' 336 cmsSigDataTag = 0x64617461, // 'data' 337 cmsSigDateTimeTag = 0x6474696D, // 'dtim' 338 cmsSigDeviceMfgDescTag = 0x646D6E64, // 'dmnd' 339 cmsSigDeviceModelDescTag = 0x646D6464, // 'dmdd' 340 cmsSigDeviceSettingsTag = 0x64657673, // 'devs' 341 cmsSigDToB0Tag = 0x44324230, // 'D2B0' 342 cmsSigDToB1Tag = 0x44324231, // 'D2B1' 343 cmsSigDToB2Tag = 0x44324232, // 'D2B2' 344 cmsSigDToB3Tag = 0x44324233, // 'D2B3' 345 cmsSigBToD0Tag = 0x42324430, // 'B2D0' 346 cmsSigBToD1Tag = 0x42324431, // 'B2D1' 347 cmsSigBToD2Tag = 0x42324432, // 'B2D2' 348 cmsSigBToD3Tag = 0x42324433, // 'B2D3' 349 cmsSigGamutTag = 0x67616D74, // 'gamt' 350 cmsSigGrayTRCTag = 0x6b545243, // 'kTRC' 351 cmsSigGreenColorantTag = 0x6758595A, // 'gXYZ' 352 cmsSigGreenMatrixColumnTag = 0x6758595A, // 'gXYZ' 353 cmsSigGreenTRCTag = 0x67545243, // 'gTRC' 354 cmsSigLuminanceTag = 0x6C756d69, // 'lumi' 355 cmsSigMeasurementTag = 0x6D656173, // 'meas' 356 cmsSigMediaBlackPointTag = 0x626B7074, // 'bkpt' 357 cmsSigMediaWhitePointTag = 0x77747074, // 'wtpt' 358 cmsSigNamedColorTag = 0x6E636f6C, // 'ncol' // Deprecated by the ICC 359 cmsSigNamedColor2Tag = 0x6E636C32, // 'ncl2' 360 cmsSigOutputResponseTag = 0x72657370, // 'resp' 361 cmsSigPerceptualRenderingIntentGamutTag = 0x72696730, // 'rig0' 362 cmsSigPreview0Tag = 0x70726530, // 'pre0' 363 cmsSigPreview1Tag = 0x70726531, // 'pre1' 364 cmsSigPreview2Tag = 0x70726532, // 'pre2' 365 cmsSigProfileDescriptionTag = 0x64657363, // 'desc' 366 cmsSigProfileDescriptionMLTag = 0x6473636d, // 'dscm' 367 cmsSigProfileSequenceDescTag = 0x70736571, // 'pseq' 368 cmsSigProfileSequenceIdTag = 0x70736964, // 'psid' 369 cmsSigPs2CRD0Tag = 0x70736430, // 'psd0' 370 cmsSigPs2CRD1Tag = 0x70736431, // 'psd1' 371 cmsSigPs2CRD2Tag = 0x70736432, // 'psd2' 372 cmsSigPs2CRD3Tag = 0x70736433, // 'psd3' 373 cmsSigPs2CSATag = 0x70733273, // 'ps2s' 374 cmsSigPs2RenderingIntentTag = 0x70733269, // 'ps2i' 375 cmsSigRedColorantTag = 0x7258595A, // 'rXYZ' 376 cmsSigRedMatrixColumnTag = 0x7258595A, // 'rXYZ' 377 cmsSigRedTRCTag = 0x72545243, // 'rTRC' 378 cmsSigSaturationRenderingIntentGamutTag = 0x72696732, // 'rig2' 379 cmsSigScreeningDescTag = 0x73637264, // 'scrd' 380 cmsSigScreeningTag = 0x7363726E, // 'scrn' 381 cmsSigTechnologyTag = 0x74656368, // 'tech' 382 cmsSigUcrBgTag = 0x62666420, // 'bfd ' 383 cmsSigViewingCondDescTag = 0x76756564, // 'vued' 384 cmsSigViewingConditionsTag = 0x76696577, // 'view' 385 cmsSigVcgtTag = 0x76636774, // 'vcgt' 386 cmsSigMetaTag = 0x6D657461 // 'meta' 387 388} cmsTagSignature; 389 390 391// ICC Technology tag 392typedef enum { 393 cmsSigDigitalCamera = 0x6463616D, // 'dcam' 394 cmsSigFilmScanner = 0x6673636E, // 'fscn' 395 cmsSigReflectiveScanner = 0x7273636E, // 'rscn' 396 cmsSigInkJetPrinter = 0x696A6574, // 'ijet' 397 cmsSigThermalWaxPrinter = 0x74776178, // 'twax' 398 cmsSigElectrophotographicPrinter = 0x6570686F, // 'epho' 399 cmsSigElectrostaticPrinter = 0x65737461, // 'esta' 400 cmsSigDyeSublimationPrinter = 0x64737562, // 'dsub' 401 cmsSigPhotographicPaperPrinter = 0x7270686F, // 'rpho' 402 cmsSigFilmWriter = 0x6670726E, // 'fprn' 403 cmsSigVideoMonitor = 0x7669646D, // 'vidm' 404 cmsSigVideoCamera = 0x76696463, // 'vidc' 405 cmsSigProjectionTelevision = 0x706A7476, // 'pjtv' 406 cmsSigCRTDisplay = 0x43525420, // 'CRT ' 407 cmsSigPMDisplay = 0x504D4420, // 'PMD ' 408 cmsSigAMDisplay = 0x414D4420, // 'AMD ' 409 cmsSigPhotoCD = 0x4B504344, // 'KPCD' 410 cmsSigPhotoImageSetter = 0x696D6773, // 'imgs' 411 cmsSigGravure = 0x67726176, // 'grav' 412 cmsSigOffsetLithography = 0x6F666673, // 'offs' 413 cmsSigSilkscreen = 0x73696C6B, // 'silk' 414 cmsSigFlexography = 0x666C6578, // 'flex' 415 cmsSigMotionPictureFilmScanner = 0x6D706673, // 'mpfs' 416 cmsSigMotionPictureFilmRecorder = 0x6D706672, // 'mpfr' 417 cmsSigDigitalMotionPictureCamera = 0x646D7063, // 'dmpc' 418 cmsSigDigitalCinemaProjector = 0x64636A70 // 'dcpj' 419 420} cmsTechnologySignature; 421 422 423// ICC Color spaces 424typedef enum { 425 cmsSigXYZData = 0x58595A20, // 'XYZ ' 426 cmsSigLabData = 0x4C616220, // 'Lab ' 427 cmsSigLuvData = 0x4C757620, // 'Luv ' 428 cmsSigYCbCrData = 0x59436272, // 'YCbr' 429 cmsSigYxyData = 0x59787920, // 'Yxy ' 430 cmsSigRgbData = 0x52474220, // 'RGB ' 431 cmsSigGrayData = 0x47524159, // 'GRAY' 432 cmsSigHsvData = 0x48535620, // 'HSV ' 433 cmsSigHlsData = 0x484C5320, // 'HLS ' 434 cmsSigCmykData = 0x434D594B, // 'CMYK' 435 cmsSigCmyData = 0x434D5920, // 'CMY ' 436 cmsSigMCH1Data = 0x4D434831, // 'MCH1' 437 cmsSigMCH2Data = 0x4D434832, // 'MCH2' 438 cmsSigMCH3Data = 0x4D434833, // 'MCH3' 439 cmsSigMCH4Data = 0x4D434834, // 'MCH4' 440 cmsSigMCH5Data = 0x4D434835, // 'MCH5' 441 cmsSigMCH6Data = 0x4D434836, // 'MCH6' 442 cmsSigMCH7Data = 0x4D434837, // 'MCH7' 443 cmsSigMCH8Data = 0x4D434838, // 'MCH8' 444 cmsSigMCH9Data = 0x4D434839, // 'MCH9' 445 cmsSigMCHAData = 0x4D434841, // 'MCHA' 446 cmsSigMCHBData = 0x4D434842, // 'MCHB' 447 cmsSigMCHCData = 0x4D434843, // 'MCHC' 448 cmsSigMCHDData = 0x4D434844, // 'MCHD' 449 cmsSigMCHEData = 0x4D434845, // 'MCHE' 450 cmsSigMCHFData = 0x4D434846, // 'MCHF' 451 cmsSigNamedData = 0x6e6d636c, // 'nmcl' 452 cmsSig1colorData = 0x31434C52, // '1CLR' 453 cmsSig2colorData = 0x32434C52, // '2CLR' 454 cmsSig3colorData = 0x33434C52, // '3CLR' 455 cmsSig4colorData = 0x34434C52, // '4CLR' 456 cmsSig5colorData = 0x35434C52, // '5CLR' 457 cmsSig6colorData = 0x36434C52, // '6CLR' 458 cmsSig7colorData = 0x37434C52, // '7CLR' 459 cmsSig8colorData = 0x38434C52, // '8CLR' 460 cmsSig9colorData = 0x39434C52, // '9CLR' 461 cmsSig10colorData = 0x41434C52, // 'ACLR' 462 cmsSig11colorData = 0x42434C52, // 'BCLR' 463 cmsSig12colorData = 0x43434C52, // 'CCLR' 464 cmsSig13colorData = 0x44434C52, // 'DCLR' 465 cmsSig14colorData = 0x45434C52, // 'ECLR' 466 cmsSig15colorData = 0x46434C52, // 'FCLR' 467 cmsSigLuvKData = 0x4C75764B // 'LuvK' 468 469} cmsColorSpaceSignature; 470 471// ICC Profile Class 472typedef enum { 473 cmsSigInputClass = 0x73636E72, // 'scnr' 474 cmsSigDisplayClass = 0x6D6E7472, // 'mntr' 475 cmsSigOutputClass = 0x70727472, // 'prtr' 476 cmsSigLinkClass = 0x6C696E6B, // 'link' 477 cmsSigAbstractClass = 0x61627374, // 'abst' 478 cmsSigColorSpaceClass = 0x73706163, // 'spac' 479 cmsSigNamedColorClass = 0x6e6d636c // 'nmcl' 480 481} cmsProfileClassSignature; 482 483// ICC Platforms 484typedef enum { 485 cmsSigMacintosh = 0x4150504C, // 'APPL' 486 cmsSigMicrosoft = 0x4D534654, // 'MSFT' 487 cmsSigSolaris = 0x53554E57, // 'SUNW' 488 cmsSigSGI = 0x53474920, // 'SGI ' 489 cmsSigTaligent = 0x54474E54, // 'TGNT' 490 cmsSigUnices = 0x2A6E6978 // '*nix' // From argyll -- Not official 491 492} cmsPlatformSignature; 493 494// Reference gamut 495#define cmsSigPerceptualReferenceMediumGamut 0x70726d67 //'prmg' 496 497// For cmsSigColorimetricIntentImageStateTag 498#define cmsSigSceneColorimetryEstimates 0x73636F65 //'scoe' 499#define cmsSigSceneAppearanceEstimates 0x73617065 //'sape' 500#define cmsSigFocalPlaneColorimetryEstimates 0x66706365 //'fpce' 501#define cmsSigReflectionHardcopyOriginalColorimetry 0x72686F63 //'rhoc' 502#define cmsSigReflectionPrintOutputColorimetry 0x72706F63 //'rpoc' 503 504// Multi process elements types 505typedef enum { 506 cmsSigCurveSetElemType = 0x63767374, //'cvst' 507 cmsSigMatrixElemType = 0x6D617466, //'matf' 508 cmsSigCLutElemType = 0x636C7574, //'clut' 509 510 cmsSigBAcsElemType = 0x62414353, // 'bACS' 511 cmsSigEAcsElemType = 0x65414353, // 'eACS' 512 513 // Custom from here, not in the ICC Spec 514 cmsSigXYZ2LabElemType = 0x6C327820, // 'l2x ' 515 cmsSigLab2XYZElemType = 0x78326C20, // 'x2l ' 516 cmsSigNamedColorElemType = 0x6E636C20, // 'ncl ' 517 cmsSigLabV2toV4 = 0x32203420, // '2 4 ' 518 cmsSigLabV4toV2 = 0x34203220, // '4 2 ' 519 520 // Identities 521 cmsSigIdentityElemType = 0x69646E20, // 'idn ' 522 523 // Float to floatPCS 524 cmsSigLab2FloatPCS = 0x64326C20, // 'd2l ' 525 cmsSigFloatPCS2Lab = 0x6C326420, // 'l2d ' 526 cmsSigXYZ2FloatPCS = 0x64327820, // 'd2x ' 527 cmsSigFloatPCS2XYZ = 0x78326420 // 'x2d ' 528 529} cmsStageSignature; 530 531// Types of CurveElements 532typedef enum { 533 534 cmsSigFormulaCurveSeg = 0x70617266, // 'parf' 535 cmsSigSampledCurveSeg = 0x73616D66, // 'samf' 536 cmsSigSegmentedCurve = 0x63757266 // 'curf' 537 538} cmsCurveSegSignature; 539 540// Used in ResponseCurveType 541#define cmsSigStatusA 0x53746141 //'StaA' 542#define cmsSigStatusE 0x53746145 //'StaE' 543#define cmsSigStatusI 0x53746149 //'StaI' 544#define cmsSigStatusT 0x53746154 //'StaT' 545#define cmsSigStatusM 0x5374614D //'StaM' 546#define cmsSigDN 0x444E2020 //'DN ' 547#define cmsSigDNP 0x444E2050 //'DN P' 548#define cmsSigDNN 0x444E4E20 //'DNN ' 549#define cmsSigDNNP 0x444E4E50 //'DNNP' 550 551// Device attributes, currently defined values correspond to the low 4 bytes 552// of the 8 byte attribute quantity 553#define cmsReflective 0 554#define cmsTransparency 1 555#define cmsGlossy 0 556#define cmsMatte 2 557 558// Common structures in ICC tags 559typedef struct { 560 cmsUInt32Number len; 561 cmsUInt32Number flag; 562 cmsUInt8Number data[1]; 563 564} cmsICCData; 565 566// ICC date time 567typedef struct { 568 cmsUInt16Number year; 569 cmsUInt16Number month; 570 cmsUInt16Number day; 571 cmsUInt16Number hours; 572 cmsUInt16Number minutes; 573 cmsUInt16Number seconds; 574 575} cmsDateTimeNumber; 576 577// ICC XYZ 578typedef struct { 579 cmsS15Fixed16Number X; 580 cmsS15Fixed16Number Y; 581 cmsS15Fixed16Number Z; 582 583} cmsEncodedXYZNumber; 584 585 586// Profile ID as computed by MD5 algorithm 587typedef union { 588 cmsUInt8Number ID8[16]; 589 cmsUInt16Number ID16[8]; 590 cmsUInt32Number ID32[4]; 591 592} cmsProfileID; 593 594 595// ---------------------------------------------------------------------------------------------- 596// ICC profile internal base types. Strictly, shouldn't be declared in this header, but maybe 597// somebody want to use this info for accessing profile header directly, so here it is. 598 599// Profile header -- it is 32-bit aligned, so no issues are expected on alignment 600typedef struct { 601 cmsUInt32Number size; // Profile size in bytes 602 cmsSignature cmmId; // CMM for this profile 603 cmsUInt32Number version; // Format version number 604 cmsProfileClassSignature deviceClass; // Type of profile 605 cmsColorSpaceSignature colorSpace; // Color space of data 606 cmsColorSpaceSignature pcs; // PCS, XYZ or Lab only 607 cmsDateTimeNumber date; // Date profile was created 608 cmsSignature magic; // Magic Number to identify an ICC profile 609 cmsPlatformSignature platform; // Primary Platform 610 cmsUInt32Number flags; // Various bit settings 611 cmsSignature manufacturer; // Device manufacturer 612 cmsUInt32Number model; // Device model number 613 cmsUInt64Number attributes; // Device attributes 614 cmsUInt32Number renderingIntent;// Rendering intent 615 cmsEncodedXYZNumber illuminant; // Profile illuminant 616 cmsSignature creator; // Profile creator 617 cmsProfileID profileID; // Profile ID using MD5 618 cmsInt8Number reserved[28]; // Reserved for future use 619 620} cmsICCHeader; 621 622// ICC base tag 623typedef struct { 624 cmsTagTypeSignature sig; 625 cmsInt8Number reserved[4]; 626 627} cmsTagBase; 628 629// A tag entry in directory 630typedef struct { 631 cmsTagSignature sig; // The tag signature 632 cmsUInt32Number offset; // Start of tag 633 cmsUInt32Number size; // Size in bytes 634 635} cmsTagEntry; 636 637// ---------------------------------------------------------------------------------------------- 638 639// Little CMS specific typedefs 640 641typedef void* cmsHANDLE ; // Generic handle 642typedef void* cmsHPROFILE; // Opaque typedefs to hide internals 643typedef void* cmsHTRANSFORM; 644 645#define cmsMAXCHANNELS 16 // Maximum number of channels in ICC profiles 646 647// Format of pixel is defined by one cmsUInt32Number, using bit fields as follows 648// 649// 2 1 0 650// 3 2 10987 6 5 4 3 2 1 098 7654 321 651// A O TTTTT U Y F P X S EEE CCCC BBB 652// 653// A: Floating point -- With this flag we can differentiate 16 bits as float and as int 654// O: Optimized -- previous optimization already returns the final 8-bit value 655// T: Pixeltype 656// F: Flavor 0=MinIsBlack(Chocolate) 1=MinIsWhite(Vanilla) 657// P: Planar? 0=Chunky, 1=Planar 658// X: swap 16 bps endianess? 659// S: Do swap? ie, BGR, KYMC 660// E: Extra samples 661// C: Channels (Samples per pixel) 662// B: bytes per sample 663// Y: Swap first - changes ABGR to BGRA and KCMY to CMYK 664 665#define FLOAT_SH(a) ((a) << 22) 666#define OPTIMIZED_SH(s) ((s) << 21) 667#define COLORSPACE_SH(s) ((s) << 16) 668#define SWAPFIRST_SH(s) ((s) << 14) 669#define FLAVOR_SH(s) ((s) << 13) 670#define PLANAR_SH(p) ((p) << 12) 671#define ENDIAN16_SH(e) ((e) << 11) 672#define DOSWAP_SH(e) ((e) << 10) 673#define EXTRA_SH(e) ((e) << 7) 674#define CHANNELS_SH(c) ((c) << 3) 675#define BYTES_SH(b) (b) 676 677// These macros unpack format specifiers into integers 678#define T_FLOAT(a) (((a)>>22)&1) 679#define T_OPTIMIZED(o) (((o)>>21)&1) 680#define T_COLORSPACE(s) (((s)>>16)&31) 681#define T_SWAPFIRST(s) (((s)>>14)&1) 682#define T_FLAVOR(s) (((s)>>13)&1) 683#define T_PLANAR(p) (((p)>>12)&1) 684#define T_ENDIAN16(e) (((e)>>11)&1) 685#define T_DOSWAP(e) (((e)>>10)&1) 686#define T_EXTRA(e) (((e)>>7)&7) 687#define T_CHANNELS(c) (((c)>>3)&15) 688#define T_BYTES(b) ((b)&7) 689 690 691// Pixel types 692#define PT_ANY 0 // Don't check colorspace 693 // 1 & 2 are reserved 694#define PT_GRAY 3 695#define PT_RGB 4 696#define PT_CMY 5 697#define PT_CMYK 6 698#define PT_YCbCr 7 699#define PT_YUV 8 // Lu'v' 700#define PT_XYZ 9 701#define PT_Lab 10 702#define PT_YUVK 11 // Lu'v'K 703#define PT_HSV 12 704#define PT_HLS 13 705#define PT_Yxy 14 706 707#define PT_MCH1 15 708#define PT_MCH2 16 709#define PT_MCH3 17 710#define PT_MCH4 18 711#define PT_MCH5 19 712#define PT_MCH6 20 713#define PT_MCH7 21 714#define PT_MCH8 22 715#define PT_MCH9 23 716#define PT_MCH10 24 717#define PT_MCH11 25 718#define PT_MCH12 26 719#define PT_MCH13 27 720#define PT_MCH14 28 721#define PT_MCH15 29 722 723#define PT_LabV2 30 // Identical to PT_Lab, but using the V2 old encoding 724 725// Some (not all!) representations 726 727#ifndef TYPE_RGB_8 // TYPE_RGB_8 is a very common identifier, so don't include ours 728 // if user has it already defined. 729 730#define TYPE_GRAY_8 (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(1)) 731#define TYPE_GRAY_8_REV (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(1)|FLAVOR_SH(1)) 732#define TYPE_GRAY_16 (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)) 733#define TYPE_GRAY_16_REV (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)|FLAVOR_SH(1)) 734#define TYPE_GRAY_16_SE (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)|ENDIAN16_SH(1)) 735#define TYPE_GRAYA_8 (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(1)) 736#define TYPE_GRAYA_16 (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)) 737#define TYPE_GRAYA_16_SE (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|ENDIAN16_SH(1)) 738#define TYPE_GRAYA_8_PLANAR (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(1)|PLANAR_SH(1)) 739#define TYPE_GRAYA_16_PLANAR (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|PLANAR_SH(1)) 740 741#define TYPE_RGB_8 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)) 742#define TYPE_RGB_8_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) 743#define TYPE_BGR_8 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)) 744#define TYPE_BGR_8_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|PLANAR_SH(1)) 745#define TYPE_RGB_16 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)) 746#define TYPE_RGB_16_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) 747#define TYPE_RGB_16_SE (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) 748#define TYPE_BGR_16 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)) 749#define TYPE_BGR_16_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|PLANAR_SH(1)) 750#define TYPE_BGR_16_SE (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) 751 752#define TYPE_RGBA_8 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)) 753#define TYPE_RGBA_8_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) 754#define TYPE_RGBA_16 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)) 755#define TYPE_RGBA_16_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) 756#define TYPE_RGBA_16_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) 757 758#define TYPE_ARGB_8 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|SWAPFIRST_SH(1)) 759#define TYPE_ARGB_8_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|SWAPFIRST_SH(1)|PLANAR_SH(1)) 760#define TYPE_ARGB_16 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|SWAPFIRST_SH(1)) 761 762#define TYPE_ABGR_8 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)) 763#define TYPE_ABGR_8_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|PLANAR_SH(1)) 764#define TYPE_ABGR_16 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)) 765#define TYPE_ABGR_16_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|PLANAR_SH(1)) 766#define TYPE_ABGR_16_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) 767 768#define TYPE_BGRA_8 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1)) 769#define TYPE_BGRA_8_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1)|PLANAR_SH(1)) 770#define TYPE_BGRA_16 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|SWAPFIRST_SH(1)) 771#define TYPE_BGRA_16_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1)) 772 773#define TYPE_CMY_8 (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(1)) 774#define TYPE_CMY_8_PLANAR (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) 775#define TYPE_CMY_16 (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)) 776#define TYPE_CMY_16_PLANAR (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) 777#define TYPE_CMY_16_SE (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) 778 779#define TYPE_CMYK_8 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)) 780#define TYPE_CMYKA_8 (COLORSPACE_SH(PT_CMYK)|EXTRA_SH(1)|CHANNELS_SH(4)|BYTES_SH(1)) 781#define TYPE_CMYK_8_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|FLAVOR_SH(1)) 782#define TYPE_YUVK_8 TYPE_CMYK_8_REV 783#define TYPE_CMYK_8_PLANAR (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|PLANAR_SH(1)) 784#define TYPE_CMYK_16 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)) 785#define TYPE_CMYK_16_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1)) 786#define TYPE_YUVK_16 TYPE_CMYK_16_REV 787#define TYPE_CMYK_16_PLANAR (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|PLANAR_SH(1)) 788#define TYPE_CMYK_16_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|ENDIAN16_SH(1)) 789 790#define TYPE_KYMC_8 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|DOSWAP_SH(1)) 791#define TYPE_KYMC_16 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1)) 792#define TYPE_KYMC_16_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) 793 794#define TYPE_KCMY_8 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|SWAPFIRST_SH(1)) 795#define TYPE_KCMY_8_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|FLAVOR_SH(1)|SWAPFIRST_SH(1)) 796#define TYPE_KCMY_16 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|SWAPFIRST_SH(1)) 797#define TYPE_KCMY_16_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1)|SWAPFIRST_SH(1)) 798#define TYPE_KCMY_16_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|ENDIAN16_SH(1)|SWAPFIRST_SH(1)) 799 800#define TYPE_CMYK5_8 (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(1)) 801#define TYPE_CMYK5_16 (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)) 802#define TYPE_CMYK5_16_SE (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)|ENDIAN16_SH(1)) 803#define TYPE_KYMC5_8 (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(1)|DOSWAP_SH(1)) 804#define TYPE_KYMC5_16 (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)|DOSWAP_SH(1)) 805#define TYPE_KYMC5_16_SE (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) 806#define TYPE_CMYK6_8 (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(1)) 807#define TYPE_CMYK6_8_PLANAR (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(1)|PLANAR_SH(1)) 808#define TYPE_CMYK6_16 (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(2)) 809#define TYPE_CMYK6_16_PLANAR (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(2)|PLANAR_SH(1)) 810#define TYPE_CMYK6_16_SE (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(2)|ENDIAN16_SH(1)) 811#define TYPE_CMYK7_8 (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(1)) 812#define TYPE_CMYK7_16 (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)) 813#define TYPE_CMYK7_16_SE (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)|ENDIAN16_SH(1)) 814#define TYPE_KYMC7_8 (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(1)|DOSWAP_SH(1)) 815#define TYPE_KYMC7_16 (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)|DOSWAP_SH(1)) 816#define TYPE_KYMC7_16_SE (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) 817#define TYPE_CMYK8_8 (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(1)) 818#define TYPE_CMYK8_16 (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)) 819#define TYPE_CMYK8_16_SE (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)|ENDIAN16_SH(1)) 820#define TYPE_KYMC8_8 (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(1)|DOSWAP_SH(1)) 821#define TYPE_KYMC8_16 (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)|DOSWAP_SH(1)) 822#define TYPE_KYMC8_16_SE (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) 823#define TYPE_CMYK9_8 (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(1)) 824#define TYPE_CMYK9_16 (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)) 825#define TYPE_CMYK9_16_SE (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)|ENDIAN16_SH(1)) 826#define TYPE_KYMC9_8 (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(1)|DOSWAP_SH(1)) 827#define TYPE_KYMC9_16 (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)|DOSWAP_SH(1)) 828#define TYPE_KYMC9_16_SE (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) 829#define TYPE_CMYK10_8 (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(1)) 830#define TYPE_CMYK10_16 (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)) 831#define TYPE_CMYK10_16_SE (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)|ENDIAN16_SH(1)) 832#define TYPE_KYMC10_8 (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(1)|DOSWAP_SH(1)) 833#define TYPE_KYMC10_16 (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)|DOSWAP_SH(1)) 834#define TYPE_KYMC10_16_SE (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) 835#define TYPE_CMYK11_8 (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(1)) 836#define TYPE_CMYK11_16 (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)) 837#define TYPE_CMYK11_16_SE (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)|ENDIAN16_SH(1)) 838#define TYPE_KYMC11_8 (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(1)|DOSWAP_SH(1)) 839#define TYPE_KYMC11_16 (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)|DOSWAP_SH(1)) 840#define TYPE_KYMC11_16_SE (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) 841#define TYPE_CMYK12_8 (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(1)) 842#define TYPE_CMYK12_16 (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)) 843#define TYPE_CMYK12_16_SE (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)|ENDIAN16_SH(1)) 844#define TYPE_KYMC12_8 (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(1)|DOSWAP_SH(1)) 845#define TYPE_KYMC12_16 (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)|DOSWAP_SH(1)) 846#define TYPE_KYMC12_16_SE (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) 847 848// Colorimetric 849#define TYPE_XYZ_16 (COLORSPACE_SH(PT_XYZ)|CHANNELS_SH(3)|BYTES_SH(2)) 850#define TYPE_Lab_8 (COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(1)) 851#define TYPE_LabV2_8 (COLORSPACE_SH(PT_LabV2)|CHANNELS_SH(3)|BYTES_SH(1)) 852 853#define TYPE_ALab_8 (COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|SWAPFIRST_SH(1)) 854#define TYPE_ALabV2_8 (COLORSPACE_SH(PT_LabV2)|CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|SWAPFIRST_SH(1)) 855#define TYPE_Lab_16 (COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(2)) 856#define TYPE_LabV2_16 (COLORSPACE_SH(PT_LabV2)|CHANNELS_SH(3)|BYTES_SH(2)) 857#define TYPE_Yxy_16 (COLORSPACE_SH(PT_Yxy)|CHANNELS_SH(3)|BYTES_SH(2)) 858 859// YCbCr 860#define TYPE_YCbCr_8 (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(1)) 861#define TYPE_YCbCr_8_PLANAR (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) 862#define TYPE_YCbCr_16 (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(2)) 863#define TYPE_YCbCr_16_PLANAR (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) 864#define TYPE_YCbCr_16_SE (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) 865 866// YUV 867#define TYPE_YUV_8 (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(1)) 868#define TYPE_YUV_8_PLANAR (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) 869#define TYPE_YUV_16 (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(2)) 870#define TYPE_YUV_16_PLANAR (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) 871#define TYPE_YUV_16_SE (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) 872 873// HLS 874#define TYPE_HLS_8 (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(1)) 875#define TYPE_HLS_8_PLANAR (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) 876#define TYPE_HLS_16 (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(2)) 877#define TYPE_HLS_16_PLANAR (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) 878#define TYPE_HLS_16_SE (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) 879 880// HSV 881#define TYPE_HSV_8 (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(1)) 882#define TYPE_HSV_8_PLANAR (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) 883#define TYPE_HSV_16 (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(2)) 884#define TYPE_HSV_16_PLANAR (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) 885#define TYPE_HSV_16_SE (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) 886 887// Named color index. Only 16 bits allowed (don't check colorspace) 888#define TYPE_NAMED_COLOR_INDEX (CHANNELS_SH(1)|BYTES_SH(2)) 889 890// Float formatters. 891#define TYPE_XYZ_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_XYZ)|CHANNELS_SH(3)|BYTES_SH(4)) 892#define TYPE_Lab_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(4)) 893#define TYPE_LabA_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_Lab)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)) 894#define TYPE_GRAY_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(4)) 895#define TYPE_RGB_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(4)) 896 897#define TYPE_RGBA_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)) 898#define TYPE_ARGB_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)|SWAPFIRST_SH(1)) 899#define TYPE_BGR_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(4)|DOSWAP_SH(1)) 900#define TYPE_BGRA_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)|DOSWAP_SH(1)|SWAPFIRST_SH(1)) 901#define TYPE_ABGR_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(4)|DOSWAP_SH(1)) 902 903#define TYPE_CMYK_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(4)) 904 905// Floating point formatters. 906// NOTE THAT 'BYTES' FIELD IS SET TO ZERO ON DLB because 8 bytes overflows the bitfield 907#define TYPE_XYZ_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_XYZ)|CHANNELS_SH(3)|BYTES_SH(0)) 908#define TYPE_Lab_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(0)) 909#define TYPE_GRAY_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(0)) 910#define TYPE_RGB_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(0)) 911#define TYPE_BGR_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(0)|DOSWAP_SH(1)) 912#define TYPE_CMYK_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(0)) 913 914// IEEE 754-2008 "half" 915#define TYPE_GRAY_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)) 916#define TYPE_RGB_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)) 917#define TYPE_RGBA_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)) 918#define TYPE_CMYK_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)) 919 920#define TYPE_RGBA_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)) 921#define TYPE_ARGB_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|SWAPFIRST_SH(1)) 922#define TYPE_BGR_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)) 923#define TYPE_BGRA_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|SWAPFIRST_SH(1)) 924#define TYPE_ABGR_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)) 925 926#endif 927 928// Colorspaces 929typedef struct { 930 cmsFloat64Number X; 931 cmsFloat64Number Y; 932 cmsFloat64Number Z; 933 934 } cmsCIEXYZ; 935 936typedef struct { 937 cmsFloat64Number x; 938 cmsFloat64Number y; 939 cmsFloat64Number Y; 940 941 } cmsCIExyY; 942 943typedef struct { 944 cmsFloat64Number L; 945 cmsFloat64Number a; 946 cmsFloat64Number b; 947 948 } cmsCIELab; 949 950typedef struct { 951 cmsFloat64Number L; 952 cmsFloat64Number C; 953 cmsFloat64Number h; 954 955 } cmsCIELCh; 956 957typedef struct { 958 cmsFloat64Number J; 959 cmsFloat64Number C; 960 cmsFloat64Number h; 961 962 } cmsJCh; 963 964typedef struct { 965 cmsCIEXYZ Red; 966 cmsCIEXYZ Green; 967 cmsCIEXYZ Blue; 968 969 } cmsCIEXYZTRIPLE; 970 971typedef struct { 972 cmsCIExyY Red; 973 cmsCIExyY Green; 974 cmsCIExyY Blue; 975 976 } cmsCIExyYTRIPLE; 977 978// Illuminant types for structs below 979#define cmsILLUMINANT_TYPE_UNKNOWN 0x0000000 980#define cmsILLUMINANT_TYPE_D50 0x0000001 981#define cmsILLUMINANT_TYPE_D65 0x0000002 982#define cmsILLUMINANT_TYPE_D93 0x0000003 983#define cmsILLUMINANT_TYPE_F2 0x0000004 984#define cmsILLUMINANT_TYPE_D55 0x0000005 985#define cmsILLUMINANT_TYPE_A 0x0000006 986#define cmsILLUMINANT_TYPE_E 0x0000007 987#define cmsILLUMINANT_TYPE_F8 0x0000008 988 989typedef struct { 990 cmsUInt32Number Observer; // 0 = unknown, 1=CIE 1931, 2=CIE 1964 991 cmsCIEXYZ Backing; // Value of backing 992 cmsUInt32Number Geometry; // 0=unknown, 1=45/0, 0/45 2=0d, d/0 993 cmsFloat64Number Flare; // 0..1.0 994 cmsUInt32Number IlluminantType; 995 996 } cmsICCMeasurementConditions; 997 998typedef struct { 999 cmsCIEXYZ IlluminantXYZ; // Not the same struct as CAM02, 1000 cmsCIEXYZ SurroundXYZ; // This is for storing the tag 1001 cmsUInt32Number IlluminantType; // viewing condition 1002 1003 } cmsICCViewingConditions; 1004 1005// Support of non-standard functions -------------------------------------------------------------------------------------- 1006 1007CMSAPI int CMSEXPORT cmsstrcasecmp(const char* s1, const char* s2); 1008CMSAPI long int CMSEXPORT cmsfilelength(FILE* f); 1009 1010 1011// Context handling -------------------------------------------------------------------------------------------------------- 1012 1013// Each context holds its owns globals and its own plug-ins. There is a global context with the id = 0 for lecacy compatibility 1014// though using the global context is not recomended. Proper context handling makes lcms more thread-safe. 1015 1016typedef struct _cmsContext_struct* cmsContext; 1017 1018CMSAPI cmsContext CMSEXPORT cmsCreateContext(void* Plugin, void* UserData); 1019CMSAPI void CMSEXPORT cmsDeleteContext(cmsContext ContexID); 1020CMSAPI cmsContext CMSEXPORT cmsDupContext(cmsContext ContextID, void* NewUserData); 1021CMSAPI void* CMSEXPORT cmsGetContextUserData(cmsContext ContextID); 1022 1023// Plug-In registering -------------------------------------------------------------------------------------------------- 1024 1025CMSAPI cmsBool CMSEXPORT cmsPlugin(void* Plugin); 1026CMSAPI cmsBool CMSEXPORT cmsPluginTHR(cmsContext ContextID, void* Plugin); 1027CMSAPI void CMSEXPORT cmsUnregisterPlugins(void); 1028CMSAPI void CMSEXPORT cmsUnregisterPluginsTHR(cmsContext ContextID); 1029 1030// Error logging ---------------------------------------------------------------------------------------------------------- 1031 1032// There is no error handling at all. When a function fails, it returns proper value. 1033// For example, all create functions does return NULL on failure. Other may return FALSE. 1034// It may be interesting, for the developer, to know why the function is failing. 1035// for that reason, lcms2 does offer a logging function. This function will get 1036// an ENGLISH string with some clues on what is going wrong. You can show this 1037// info to the end user if you wish, or just create some sort of log on disk. 1038// The logging function should NOT terminate the program, as this obviously can leave 1039// unfreed resources. It is the programmer's responsibility to check each function 1040// return code to make sure it didn't fail. 1041 1042#define cmsERROR_UNDEFINED 0 1043#define cmsERROR_FILE 1 1044#define cmsERROR_RANGE 2 1045#define cmsERROR_INTERNAL 3 1046#define cmsERROR_NULL 4 1047#define cmsERROR_READ 5 1048#define cmsERROR_SEEK 6 1049#define cmsERROR_WRITE 7 1050#define cmsERROR_UNKNOWN_EXTENSION 8 1051#define cmsERROR_COLORSPACE_CHECK 9 1052#define cmsERROR_ALREADY_DEFINED 10 1053#define cmsERROR_BAD_SIGNATURE 11 1054#define cmsERROR_CORRUPTION_DETECTED 12 1055#define cmsERROR_NOT_SUITABLE 13 1056 1057// Error logger is called with the ContextID when a message is raised. This gives the 1058// chance to know which thread is responsible of the warning and any environment associated 1059// with it. Non-multithreading applications may safely ignore this parameter. 1060// Note that under certain special circumstances, ContextID may be NULL. 1061typedef void (* cmsLogErrorHandlerFunction)(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text); 1062 1063// Allows user to set any specific logger 1064CMSAPI void CMSEXPORT cmsSetLogErrorHandler(cmsLogErrorHandlerFunction Fn); 1065CMSAPI void CMSEXPORT cmsSetLogErrorHandlerTHR(cmsContext ContextID, cmsLogErrorHandlerFunction Fn); 1066 1067// Conversions -------------------------------------------------------------------------------------------------------------- 1068 1069// Returns pointers to constant structs 1070CMSAPI const cmsCIEXYZ* CMSEXPORT cmsD50_XYZ(void); 1071CMSAPI const cmsCIExyY* CMSEXPORT cmsD50_xyY(void); 1072 1073// Colorimetric space conversions 1074CMSAPI void CMSEXPORT cmsXYZ2xyY(cmsCIExyY* Dest, const cmsCIEXYZ* Source); 1075CMSAPI void CMSEXPORT cmsxyY2XYZ(cmsCIEXYZ* Dest, const cmsCIExyY* Source); 1076CMSAPI void CMSEXPORT cmsXYZ2Lab(const cmsCIEXYZ* WhitePoint, cmsCIELab* Lab, const cmsCIEXYZ* xyz); 1077CMSAPI void CMSEXPORT cmsLab2XYZ(const cmsCIEXYZ* WhitePoint, cmsCIEXYZ* xyz, const cmsCIELab* Lab); 1078CMSAPI void CMSEXPORT cmsLab2LCh(cmsCIELCh*LCh, const cmsCIELab* Lab); 1079CMSAPI void CMSEXPORT cmsLCh2Lab(cmsCIELab* Lab, const cmsCIELCh* LCh); 1080 1081// Encoding /Decoding on PCS 1082CMSAPI void CMSEXPORT cmsLabEncoded2Float(cmsCIELab* Lab, const cmsUInt16Number wLab[3]); 1083CMSAPI void CMSEXPORT cmsLabEncoded2FloatV2(cmsCIELab* Lab, const cmsUInt16Number wLab[3]); 1084CMSAPI void CMSEXPORT cmsFloat2LabEncoded(cmsUInt16Number wLab[3], const cmsCIELab* Lab); 1085CMSAPI void CMSEXPORT cmsFloat2LabEncodedV2(cmsUInt16Number wLab[3], const cmsCIELab* Lab); 1086CMSAPI void CMSEXPORT cmsXYZEncoded2Float(cmsCIEXYZ* fxyz, const cmsUInt16Number XYZ[3]); 1087CMSAPI void CMSEXPORT cmsFloat2XYZEncoded(cmsUInt16Number XYZ[3], const cmsCIEXYZ* fXYZ); 1088 1089// DeltaE metrics 1090CMSAPI cmsFloat64Number CMSEXPORT cmsDeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2); 1091CMSAPI cmsFloat64Number CMSEXPORT cmsCIE94DeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2); 1092CMSAPI cmsFloat64Number CMSEXPORT cmsBFDdeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2); 1093CMSAPI cmsFloat64Number CMSEXPORT cmsCMCdeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2, cmsFloat64Number l, cmsFloat64Number c); 1094CMSAPI cmsFloat64Number CMSEXPORT cmsCIE2000DeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2, cmsFloat64Number Kl, cmsFloat64Number Kc, cmsFloat64Number Kh); 1095 1096// Temperature <-> Chromaticity (Black body) 1097CMSAPI cmsBool CMSEXPORT cmsWhitePointFromTemp(cmsCIExyY* WhitePoint, cmsFloat64Number TempK); 1098CMSAPI cmsBool CMSEXPORT cmsTempFromWhitePoint(cmsFloat64Number* TempK, const cmsCIExyY* WhitePoint); 1099 1100// Chromatic adaptation 1101CMSAPI cmsBool CMSEXPORT cmsAdaptToIlluminant(cmsCIEXYZ* Result, const cmsCIEXYZ* SourceWhitePt, 1102 const cmsCIEXYZ* Illuminant, 1103 const cmsCIEXYZ* Value); 1104 1105// CIECAM02 --------------------------------------------------------------------------------------------------- 1106 1107// Viewing conditions. Please note those are CAM model viewing conditions, and not the ICC tag viewing 1108// conditions, which I'm naming cmsICCViewingConditions to make differences evident. Unfortunately, the tag 1109// cannot deal with surround La, Yb and D value so is basically useless to store CAM02 viewing conditions. 1110 1111 1112#define AVG_SURROUND 1 1113#define DIM_SURROUND 2 1114#define DARK_SURROUND 3 1115#define CUTSHEET_SURROUND 4 1116 1117#define D_CALCULATE (-1) 1118 1119typedef struct { 1120 cmsCIEXYZ whitePoint; 1121 cmsFloat64Number Yb; 1122 cmsFloat64Number La; 1123 int surround; 1124 cmsFloat64Number D_value; 1125 1126 } cmsViewingConditions; 1127 1128CMSAPI cmsHANDLE CMSEXPORT cmsCIECAM02Init(cmsContext ContextID, const cmsViewingConditions* pVC); 1129CMSAPI void CMSEXPORT cmsCIECAM02Done(cmsHANDLE hModel); 1130CMSAPI void CMSEXPORT cmsCIECAM02Forward(cmsHANDLE hModel, const cmsCIEXYZ* pIn, cmsJCh* pOut); 1131CMSAPI void CMSEXPORT cmsCIECAM02Reverse(cmsHANDLE hModel, const cmsJCh* pIn, cmsCIEXYZ* pOut); 1132 1133 1134// Tone curves ----------------------------------------------------------------------------------------- 1135 1136// This describes a curve segment. For a table of supported types, see the manual. User can increase the number of 1137// available types by using a proper plug-in. Parametric segments allow 10 parameters at most 1138 1139typedef struct { 1140 cmsFloat32Number x0, x1; // Domain; for x0 < x <= x1 1141 cmsInt32Number Type; // Parametric type, Type == 0 means sampled segment. Negative values are reserved 1142 cmsFloat64Number Params[10]; // Parameters if Type != 0 1143 cmsUInt32Number nGridPoints; // Number of grid points if Type == 0 1144 cmsFloat32Number* SampledPoints; // Points to an array of floats if Type == 0 1145 1146} cmsCurveSegment; 1147 1148// The internal representation is none of your business. 1149typedef struct _cms_curve_struct cmsToneCurve; 1150 1151CMSAPI cmsToneCurve* CMSEXPORT cmsBuildSegmentedToneCurve(cmsContext ContextID, cmsInt32Number nSegments, const cmsCurveSegment Segments[]); 1152CMSAPI cmsToneCurve* CMSEXPORT cmsBuildParametricToneCurve(cmsContext ContextID, cmsInt32Number Type, const cmsFloat64Number Params[]); 1153CMSAPI cmsToneCurve* CMSEXPORT cmsBuildGamma(cmsContext ContextID, cmsFloat64Number Gamma); 1154CMSAPI cmsToneCurve* CMSEXPORT cmsBuildTabulatedToneCurve16(cmsContext ContextID, cmsInt32Number nEntries, const cmsUInt16Number values[]); 1155CMSAPI cmsToneCurve* CMSEXPORT cmsBuildTabulatedToneCurveFloat(cmsContext ContextID, cmsUInt32Number nEntries, const cmsFloat32Number values[]); 1156CMSAPI void CMSEXPORT cmsFreeToneCurve(cmsToneCurve* Curve); 1157CMSAPI void CMSEXPORT cmsFreeToneCurveTriple(cmsToneCurve* Curve[3]); 1158CMSAPI cmsToneCurve* CMSEXPORT cmsDupToneCurve(const cmsToneCurve* Src); 1159CMSAPI cmsToneCurve* CMSEXPORT cmsReverseToneCurve(const cmsToneCurve* InGamma); 1160CMSAPI cmsToneCurve* CMSEXPORT cmsReverseToneCurveEx(cmsInt32Number nResultSamples, const cmsToneCurve* InGamma); 1161CMSAPI cmsToneCurve* CMSEXPORT cmsJoinToneCurve(cmsContext ContextID, const cmsToneCurve* X, const cmsToneCurve* Y, cmsUInt32Number nPoints); 1162CMSAPI cmsBool CMSEXPORT cmsSmoothToneCurve(cmsToneCurve* Tab, cmsFloat64Number lambda); 1163CMSAPI cmsFloat32Number CMSEXPORT cmsEvalToneCurveFloat(const cmsToneCurve* Curve, cmsFloat32Number v); 1164CMSAPI cmsUInt16Number CMSEXPORT cmsEvalToneCurve16(const cmsToneCurve* Curve, cmsUInt16Number v); 1165CMSAPI cmsBool CMSEXPORT cmsIsToneCurveMultisegment(const cmsToneCurve* InGamma); 1166CMSAPI cmsBool CMSEXPORT cmsIsToneCurveLinear(const cmsToneCurve* Curve); 1167CMSAPI cmsBool CMSEXPORT cmsIsToneCurveMonotonic(const cmsToneCurve* t); 1168CMSAPI cmsBool CMSEXPORT cmsIsToneCurveDescending(const cmsToneCurve* t); 1169CMSAPI cmsInt32Number CMSEXPORT cmsGetToneCurveParametricType(const cmsToneCurve* t); 1170CMSAPI cmsFloat64Number CMSEXPORT cmsEstimateGamma(const cmsToneCurve* t, cmsFloat64Number Precision); 1171 1172// Tone curve tabular estimation 1173CMSAPI cmsUInt32Number CMSEXPORT cmsGetToneCurveEstimatedTableEntries(const cmsToneCurve* t); 1174CMSAPI const cmsUInt16Number* CMSEXPORT cmsGetToneCurveEstimatedTable(const cmsToneCurve* t); 1175 1176 1177// Implements pipelines of multi-processing elements ------------------------------------------------------------- 1178 1179// Nothing to see here, move along 1180typedef struct _cmsPipeline_struct cmsPipeline; 1181typedef struct _cmsStage_struct cmsStage; 1182 1183// Those are hi-level pipelines 1184CMSAPI cmsPipeline* CMSEXPORT cmsPipelineAlloc(cmsContext ContextID, cmsUInt32Number InputChannels, cmsUInt32Number OutputChannels); 1185CMSAPI void CMSEXPORT cmsPipelineFree(cmsPipeline* lut); 1186CMSAPI cmsPipeline* CMSEXPORT cmsPipelineDup(const cmsPipeline* Orig); 1187 1188CMSAPI cmsContext CMSEXPORT cmsGetPipelineContextID(const cmsPipeline* lut); 1189CMSAPI cmsUInt32Number CMSEXPORT cmsPipelineInputChannels(const cmsPipeline* lut); 1190CMSAPI cmsUInt32Number CMSEXPORT cmsPipelineOutputChannels(const cmsPipeline* lut); 1191 1192CMSAPI cmsUInt32Number CMSEXPORT cmsPipelineStageCount(const cmsPipeline* lut); 1193CMSAPI cmsStage* CMSEXPORT cmsPipelineGetPtrToFirstStage(const cmsPipeline* lut); 1194CMSAPI cmsStage* CMSEXPORT cmsPipelineGetPtrToLastStage(const cmsPipeline* lut); 1195 1196CMSAPI void CMSEXPORT cmsPipelineEval16(const cmsUInt16Number In[], cmsUInt16Number Out[], const cmsPipeline* lut); 1197CMSAPI void CMSEXPORT cmsPipelineEvalFloat(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsPipeline* lut); 1198CMSAPI cmsBool CMSEXPORT cmsPipelineEvalReverseFloat(cmsFloat32Number Target[], cmsFloat32Number Result[], cmsFloat32Number Hint[], const cmsPipeline* lut); 1199CMSAPI cmsBool CMSEXPORT cmsPipelineCat(cmsPipeline* l1, const cmsPipeline* l2); 1200CMSAPI cmsBool CMSEXPORT cmsPipelineSetSaveAs8bitsFlag(cmsPipeline* lut, cmsBool On); 1201 1202// Where to place/locate the stages in the pipeline chain 1203typedef enum { cmsAT_BEGIN, cmsAT_END } cmsStageLoc; 1204 1205CMSAPI int CMSEXPORT cmsPipelineInsertStage(cmsPipeline* lut, cmsStageLoc loc, cmsStage* mpe); 1206CMSAPI void CMSEXPORT cmsPipelineUnlinkStage(cmsPipeline* lut, cmsStageLoc loc, cmsStage** mpe); 1207 1208// This function is quite useful to analyze the structure of a Pipeline and retrieve the Stage elements 1209// that conform the Pipeline. It should be called with the Pipeline, the number of expected elements and 1210// then a list of expected types followed with a list of double pointers to Stage elements. If 1211// the function founds a match with current pipeline, it fills the pointers and returns TRUE 1212// if not, returns FALSE without touching anything. 1213CMSAPI cmsBool CMSEXPORT cmsPipelineCheckAndRetreiveStages(const cmsPipeline* Lut, cmsUInt32Number n, ...); 1214 1215// Matrix has double precision and CLUT has only float precision. That is because an ICC profile can encode 1216// matrices with far more precision that CLUTS 1217CMSAPI cmsStage* CMSEXPORT cmsStageAllocIdentity(cmsContext ContextID, cmsUInt32Number nChannels); 1218CMSAPI cmsStage* CMSEXPORT cmsStageAllocToneCurves(cmsContext ContextID, cmsUInt32Number nChannels, cmsToneCurve* const Curves[]); 1219CMSAPI cmsStage* CMSEXPORT cmsStageAllocMatrix(cmsContext ContextID, cmsUInt32Number Rows, cmsUInt32Number Cols, const cmsFloat64Number* Matrix, const cmsFloat64Number* Offset); 1220 1221CMSAPI cmsStage* CMSEXPORT cmsStageAllocCLut16bit(cmsContext ContextID, cmsUInt32Number nGridPoints, cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsUInt16Number* Table); 1222CMSAPI cmsStage* CMSEXPORT cmsStageAllocCLutFloat(cmsContext ContextID, cmsUInt32Number nGridPoints, cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsFloat32Number* Table); 1223 1224CMSAPI cmsStage* CMSEXPORT cmsStageAllocCLut16bitGranular(cmsContext ContextID, const cmsUInt32Number clutPoints[], cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsUInt16Number* Table); 1225CMSAPI cmsStage* CMSEXPORT cmsStageAllocCLutFloatGranular(cmsContext ContextID, const cmsUInt32Number clutPoints[], cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsFloat32Number* Table); 1226 1227CMSAPI cmsStage* CMSEXPORT cmsStageDup(cmsStage* mpe); 1228CMSAPI void CMSEXPORT cmsStageFree(cmsStage* mpe); 1229CMSAPI cmsStage* CMSEXPORT cmsStageNext(const cmsStage* mpe); 1230 1231CMSAPI cmsUInt32Number CMSEXPORT cmsStageInputChannels(const cmsStage* mpe); 1232CMSAPI cmsUInt32Number CMSEXPORT cmsStageOutputChannels(const cmsStage* mpe); 1233CMSAPI cmsStageSignature CMSEXPORT cmsStageType(const cmsStage* mpe); 1234CMSAPI void* CMSEXPORT cmsStageData(const cmsStage* mpe); 1235 1236// Sampling 1237typedef cmsInt32Number (* cmsSAMPLER16) (register const cmsUInt16Number In[], 1238 register cmsUInt16Number Out[], 1239 register void * Cargo); 1240 1241typedef cmsInt32Number (* cmsSAMPLERFLOAT)(register const cmsFloat32Number In[], 1242 register cmsFloat32Number Out[], 1243 register void * Cargo); 1244 1245// Use this flag to prevent changes being written to destination 1246#define SAMPLER_INSPECT 0x01000000 1247 1248// For CLUT only 1249CMSAPI cmsBool CMSEXPORT cmsStageSampleCLut16bit(cmsStage* mpe, cmsSAMPLER16 Sampler, void* Cargo, cmsUInt32Number dwFlags); 1250CMSAPI cmsBool CMSEXPORT cmsStageSampleCLutFloat(cmsStage* mpe, cmsSAMPLERFLOAT Sampler, void* Cargo, cmsUInt32Number dwFlags); 1251 1252// Slicers 1253CMSAPI cmsBool CMSEXPORT cmsSliceSpace16(cmsUInt32Number nInputs, const cmsUInt32Number clutPoints[], 1254 cmsSAMPLER16 Sampler, void * Cargo); 1255 1256CMSAPI cmsBool CMSEXPORT cmsSliceSpaceFloat(cmsUInt32Number nInputs, const cmsUInt32Number clutPoints[], 1257 cmsSAMPLERFLOAT Sampler, void * Cargo); 1258 1259// Multilocalized Unicode management --------------------------------------------------------------------------------------- 1260 1261typedef struct _cms_MLU_struct cmsMLU; 1262 1263#define cmsNoLanguage "\0\0" 1264#define cmsNoCountry "\0\0" 1265 1266CMSAPI cmsMLU* CMSEXPORT cmsMLUalloc(cmsContext ContextID, cmsUInt32Number nItems); 1267CMSAPI void CMSEXPORT cmsMLUfree(cmsMLU* mlu); 1268CMSAPI cmsMLU* CMSEXPORT cmsMLUdup(const cmsMLU* mlu); 1269 1270CMSAPI cmsBool CMSEXPORT cmsMLUsetASCII(cmsMLU* mlu, 1271 const char LanguageCode[3], const char CountryCode[3], 1272 const char* ASCIIString); 1273CMSAPI cmsBool CMSEXPORT cmsMLUsetWide(cmsMLU* mlu, 1274 const char LanguageCode[3], const char CountryCode[3], 1275 const wchar_t* WideString); 1276 1277CMSAPI cmsUInt32Number CMSEXPORT cmsMLUgetASCII(const cmsMLU* mlu, 1278 const char LanguageCode[3], const char CountryCode[3], 1279 char* Buffer, cmsUInt32Number BufferSize); 1280 1281CMSAPI cmsUInt32Number CMSEXPORT cmsMLUgetWide(const cmsMLU* mlu, 1282 const char LanguageCode[3], const char CountryCode[3], 1283 wchar_t* Buffer, cmsUInt32Number BufferSize); 1284 1285CMSAPI cmsBool CMSEXPORT cmsMLUgetTranslation(const cmsMLU* mlu, 1286 const char LanguageCode[3], const char CountryCode[3], 1287 char ObtainedLanguage[3], char ObtainedCountry[3]); 1288 1289CMSAPI cmsUInt32Number CMSEXPORT cmsMLUtranslationsCount(const cmsMLU* mlu); 1290 1291CMSAPI cmsBool CMSEXPORT cmsMLUtranslationsCodes(const cmsMLU* mlu, 1292 cmsUInt32Number idx, 1293 char LanguageCode[3], 1294 char CountryCode[3]); 1295 1296// Undercolorremoval & black generation ------------------------------------------------------------------------------------- 1297 1298typedef struct { 1299 cmsToneCurve* Ucr; 1300 cmsToneCurve* Bg; 1301 cmsMLU* Desc; 1302 1303} cmsUcrBg; 1304 1305// Screening ---------------------------------------------------------------------------------------------------------------- 1306 1307#define cmsPRINTER_DEFAULT_SCREENS 0x0001 1308#define cmsFREQUENCE_UNITS_LINES_CM 0x0000 1309#define cmsFREQUENCE_UNITS_LINES_INCH 0x0002 1310 1311#define cmsSPOT_UNKNOWN 0 1312#define cmsSPOT_PRINTER_DEFAULT 1 1313#define cmsSPOT_ROUND 2 1314#define cmsSPOT_DIAMOND 3 1315#define cmsSPOT_ELLIPSE 4 1316#define cmsSPOT_LINE 5 1317#define cmsSPOT_SQUARE 6 1318#define cmsSPOT_CROSS 7 1319 1320typedef struct { 1321 cmsFloat64Number Frequency; 1322 cmsFloat64Number ScreenAngle; 1323 cmsUInt32Number SpotShape; 1324 1325} cmsScreeningChannel; 1326 1327typedef struct { 1328 cmsUInt32Number Flag; 1329 cmsUInt32Number nChannels; 1330 cmsScreeningChannel Channels[cmsMAXCHANNELS]; 1331 1332} cmsScreening; 1333 1334 1335// Named color ----------------------------------------------------------------------------------------------------------------- 1336 1337typedef struct _cms_NAMEDCOLORLIST_struct cmsNAMEDCOLORLIST; 1338 1339CMSAPI cmsNAMEDCOLORLIST* CMSEXPORT cmsAllocNamedColorList(cmsContext ContextID, 1340 cmsUInt32Number n, 1341 cmsUInt32Number ColorantCount, 1342 const char* Prefix, const char* Suffix); 1343 1344CMSAPI void CMSEXPORT cmsFreeNamedColorList(cmsNAMEDCOLORLIST* v); 1345CMSAPI cmsNAMEDCOLORLIST* CMSEXPORT cmsDupNamedColorList(const cmsNAMEDCOLORLIST* v); 1346CMSAPI cmsBool CMSEXPORT cmsAppendNamedColor(cmsNAMEDCOLORLIST* v, const char* Name, 1347 cmsUInt16Number PCS[3], 1348 cmsUInt16Number Colorant[cmsMAXCHANNELS]); 1349 1350CMSAPI cmsUInt32Number CMSEXPORT cmsNamedColorCount(const cmsNAMEDCOLORLIST* v); 1351CMSAPI cmsInt32Number CMSEXPORT cmsNamedColorIndex(const cmsNAMEDCOLORLIST* v, const char* Name); 1352 1353CMSAPI cmsBool CMSEXPORT cmsNamedColorInfo(const cmsNAMEDCOLORLIST* NamedColorList, cmsUInt32Number nColor, 1354 char* Name, 1355 char* Prefix, 1356 char* Suffix, 1357 cmsUInt16Number* PCS, 1358 cmsUInt16Number* Colorant); 1359 1360// Retrieve named color list from transform 1361CMSAPI cmsNAMEDCOLORLIST* CMSEXPORT cmsGetNamedColorList(cmsHTRANSFORM xform); 1362 1363// Profile sequence ----------------------------------------------------------------------------------------------------- 1364 1365// Profile sequence descriptor. Some fields come from profile sequence descriptor tag, others 1366// come from Profile Sequence Identifier Tag 1367typedef struct { 1368 1369 cmsSignature deviceMfg; 1370 cmsSignature deviceModel; 1371 cmsUInt64Number attributes; 1372 cmsTechnologySignature technology; 1373 cmsProfileID ProfileID; 1374 cmsMLU* Manufacturer; 1375 cmsMLU* Model; 1376 cmsMLU* Description; 1377 1378} cmsPSEQDESC; 1379 1380typedef struct { 1381 1382 cmsUInt32Number n; 1383 cmsContext ContextID; 1384 cmsPSEQDESC* seq; 1385 1386} cmsSEQ; 1387 1388CMSAPI cmsSEQ* CMSEXPORT cmsAllocProfileSequenceDescription(cmsContext ContextID, cmsUInt32Number n); 1389CMSAPI cmsSEQ* CMSEXPORT cmsDupProfileSequenceDescription(const cmsSEQ* pseq); 1390CMSAPI void CMSEXPORT cmsFreeProfileSequenceDescription(cmsSEQ* pseq); 1391 1392// Dictionaries -------------------------------------------------------------------------------------------------------- 1393 1394typedef struct _cmsDICTentry_struct { 1395 1396 struct _cmsDICTentry_struct* Next; 1397 1398 cmsMLU *DisplayName; 1399 cmsMLU *DisplayValue; 1400 wchar_t* Name; 1401 wchar_t* Value; 1402 1403} cmsDICTentry; 1404 1405CMSAPI cmsHANDLE CMSEXPORT cmsDictAlloc(cmsContext ContextID); 1406CMSAPI void CMSEXPORT cmsDictFree(cmsHANDLE hDict); 1407CMSAPI cmsHANDLE CMSEXPORT cmsDictDup(cmsHANDLE hDict); 1408 1409CMSAPI cmsBool CMSEXPORT cmsDictAddEntry(cmsHANDLE hDict, const wchar_t* Name, const wchar_t* Value, const cmsMLU *DisplayName, const cmsMLU *DisplayValue); 1410CMSAPI const cmsDICTentry* CMSEXPORT cmsDictGetEntryList(cmsHANDLE hDict); 1411CMSAPI const cmsDICTentry* CMSEXPORT cmsDictNextEntry(const cmsDICTentry* e); 1412 1413// Access to Profile data ---------------------------------------------------------------------------------------------- 1414CMSAPI cmsHPROFILE CMSEXPORT cmsCreateProfilePlaceholder(cmsContext ContextID); 1415 1416CMSAPI cmsContext CMSEXPORT cmsGetProfileContextID(cmsHPROFILE hProfile); 1417CMSAPI cmsInt32Number CMSEXPORT cmsGetTagCount(cmsHPROFILE hProfile); 1418CMSAPI cmsTagSignature CMSEXPORT cmsGetTagSignature(cmsHPROFILE hProfile, cmsUInt32Number n); 1419CMSAPI cmsBool CMSEXPORT cmsIsTag(cmsHPROFILE hProfile, cmsTagSignature sig); 1420 1421// Read and write pre-formatted data 1422CMSAPI void* CMSEXPORT cmsReadTag(cmsHPROFILE hProfile, cmsTagSignature sig); 1423CMSAPI cmsBool CMSEXPORT cmsWriteTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data); 1424CMSAPI cmsBool CMSEXPORT cmsLinkTag(cmsHPROFILE hProfile, cmsTagSignature sig, cmsTagSignature dest); 1425CMSAPI cmsTagSignature CMSEXPORT cmsTagLinkedTo(cmsHPROFILE hProfile, cmsTagSignature sig); 1426 1427// Read and write raw data 1428CMSAPI cmsInt32Number CMSEXPORT cmsReadRawTag(cmsHPROFILE hProfile, cmsTagSignature sig, void* Buffer, cmsUInt32Number BufferSize); 1429CMSAPI cmsBool CMSEXPORT cmsWriteRawTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data, cmsUInt32Number Size); 1430 1431// Access header data 1432#define cmsEmbeddedProfileFalse 0x00000000 1433#define cmsEmbeddedProfileTrue 0x00000001 1434#define cmsUseAnywhere 0x00000000 1435#define cmsUseWithEmbeddedDataOnly 0x00000002 1436 1437CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderFlags(cmsHPROFILE hProfile); 1438CMSAPI void CMSEXPORT cmsGetHeaderAttributes(cmsHPROFILE hProfile, cmsUInt64Number* Flags); 1439CMSAPI void CMSEXPORT cmsGetHeaderProfileID(cmsHPROFILE hProfile, cmsUInt8Number* ProfileID); 1440CMSAPI cmsBool CMSEXPORT cmsGetHeaderCreationDateTime(cmsHPROFILE hProfile, struct tm *Dest); 1441CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderRenderingIntent(cmsHPROFILE hProfile); 1442 1443CMSAPI void CMSEXPORT cmsSetHeaderFlags(cmsHPROFILE hProfile, cmsUInt32Number Flags); 1444CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderManufacturer(cmsHPROFILE hProfile); 1445CMSAPI void CMSEXPORT cmsSetHeaderManufacturer(cmsHPROFILE hProfile, cmsUInt32Number manufacturer); 1446CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderCreator(cmsHPROFILE hProfile); 1447CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderModel(cmsHPROFILE hProfile); 1448CMSAPI void CMSEXPORT cmsSetHeaderModel(cmsHPROFILE hProfile, cmsUInt32Number model); 1449CMSAPI void CMSEXPORT cmsSetHeaderAttributes(cmsHPROFILE hProfile, cmsUInt64Number Flags); 1450CMSAPI void CMSEXPORT cmsSetHeaderProfileID(cmsHPROFILE hProfile, cmsUInt8Number* ProfileID); 1451CMSAPI void CMSEXPORT cmsSetHeaderRenderingIntent(cmsHPROFILE hProfile, cmsUInt32Number RenderingIntent); 1452 1453CMSAPI cmsColorSpaceSignature 1454 CMSEXPORT cmsGetPCS(cmsHPROFILE hProfile); 1455CMSAPI void CMSEXPORT cmsSetPCS(cmsHPROFILE hProfile, cmsColorSpaceSignature pcs); 1456CMSAPI cmsColorSpaceSignature 1457 CMSEXPORT cmsGetColorSpace(cmsHPROFILE hProfile); 1458CMSAPI void CMSEXPORT cmsSetColorSpace(cmsHPROFILE hProfile, cmsColorSpaceSignature sig); 1459CMSAPI cmsProfileClassSignature 1460 CMSEXPORT cmsGetDeviceClass(cmsHPROFILE hProfile); 1461CMSAPI void CMSEXPORT cmsSetDeviceClass(cmsHPROFILE hProfile, cmsProfileClassSignature sig); 1462CMSAPI void CMSEXPORT cmsSetProfileVersion(cmsHPROFILE hProfile, cmsFloat64Number Version); 1463CMSAPI cmsFloat64Number CMSEXPORT cmsGetProfileVersion(cmsHPROFILE hProfile); 1464 1465CMSAPI cmsUInt32Number CMSEXPORT cmsGetEncodedICCversion(cmsHPROFILE hProfile); 1466CMSAPI void CMSEXPORT cmsSetEncodedICCversion(cmsHPROFILE hProfile, cmsUInt32Number Version); 1467 1468// How profiles may be used 1469#define LCMS_USED_AS_INPUT 0 1470#define LCMS_USED_AS_OUTPUT 1 1471#define LCMS_USED_AS_PROOF 2 1472 1473CMSAPI cmsBool CMSEXPORT cmsIsIntentSupported(cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number UsedDirection); 1474CMSAPI cmsBool CMSEXPORT cmsIsMatrixShaper(cmsHPROFILE hProfile); 1475CMSAPI cmsBool CMSEXPORT cmsIsCLUT(cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number UsedDirection); 1476 1477// Translate form/to our notation to ICC 1478CMSAPI cmsColorSpaceSignature CMSEXPORT _cmsICCcolorSpace(int OurNotation); 1479CMSAPI int CMSEXPORT _cmsLCMScolorSpace(cmsColorSpaceSignature ProfileSpace); 1480 1481CMSAPI cmsUInt32Number CMSEXPORT cmsChannelsOf(cmsColorSpaceSignature ColorSpace); 1482 1483// Build a suitable formatter for the colorspace of this profile 1484CMSAPI cmsUInt32Number CMSEXPORT cmsFormatterForColorspaceOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat); 1485CMSAPI cmsUInt32Number CMSEXPORT cmsFormatterForPCSOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat); 1486 1487 1488// Localized info 1489typedef enum { 1490 cmsInfoDescription = 0, 1491 cmsInfoManufacturer = 1, 1492 cmsInfoModel = 2, 1493 cmsInfoCopyright = 3 1494} cmsInfoType; 1495 1496CMSAPI cmsUInt32Number CMSEXPORT cmsGetProfileInfo(cmsHPROFILE hProfile, cmsInfoType Info, 1497 const char LanguageCode[3], const char CountryCode[3], 1498 wchar_t* Buffer, cmsUInt32Number BufferSize); 1499 1500CMSAPI cmsUInt32Number CMSEXPORT cmsGetProfileInfoASCII(cmsHPROFILE hProfile, cmsInfoType Info, 1501 const char LanguageCode[3], const char CountryCode[3], 1502 char* Buffer, cmsUInt32Number BufferSize); 1503 1504// IO handlers ---------------------------------------------------------------------------------------------------------- 1505 1506typedef struct _cms_io_handler cmsIOHANDLER; 1507 1508CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromFile(cmsContext ContextID, const char* FileName, const char* AccessMode); 1509CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromStream(cmsContext ContextID, FILE* Stream); 1510CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromMem(cmsContext ContextID, void *Buffer, cmsUInt32Number size, const char* AccessMode); 1511CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromNULL(cmsContext ContextID); 1512CMSAPI cmsBool CMSEXPORT cmsCloseIOhandler(cmsIOHANDLER* io); 1513 1514// MD5 message digest -------------------------------------------------------------------------------------------------- 1515 1516CMSAPI cmsBool CMSEXPORT cmsMD5computeID(cmsHPROFILE hProfile); 1517CMSAPI cmsBool CMSEXPORT cmsMD5computeIDExt(const void* buf, unsigned long size, unsigned char ProfileID[16]); 1518 1519// Profile high level funtions ------------------------------------------------------------------------------------------ 1520 1521CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromFile(const char *ICCProfile, const char *sAccess); 1522CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromFileTHR(cmsContext ContextID, const char *ICCProfile, const char *sAccess); 1523CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromStream(FILE* ICCProfile, const char* sAccess); 1524CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromStreamTHR(cmsContext ContextID, FILE* ICCProfile, const char* sAccess); 1525CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromMem(const void * MemPtr, cmsUInt32Number dwSize); 1526CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromMemTHR(cmsContext ContextID, const void * MemPtr, cmsUInt32Number dwSize); 1527CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromIOhandlerTHR(cmsContext ContextID, cmsIOHANDLER* io); 1528CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromIOhandler2THR(cmsContext ContextID, cmsIOHANDLER* io, cmsBool write); 1529CMSAPI cmsBool CMSEXPORT cmsCloseProfile(cmsHPROFILE hProfile); 1530 1531CMSAPI cmsBool CMSEXPORT cmsSaveProfileToFile(cmsHPROFILE hProfile, const char* FileName); 1532CMSAPI cmsBool CMSEXPORT cmsSaveProfileToStream(cmsHPROFILE hProfile, FILE* Stream); 1533CMSAPI cmsBool CMSEXPORT cmsSaveProfileToMem(cmsHPROFILE hProfile, void *MemPtr, cmsUInt32Number* BytesNeeded); 1534CMSAPI cmsUInt32Number CMSEXPORT cmsSaveProfileToIOhandler(cmsHPROFILE hProfile, cmsIOHANDLER* io); 1535 1536// Predefined virtual profiles ------------------------------------------------------------------------------------------ 1537 1538CMSAPI cmsHPROFILE CMSEXPORT cmsCreateRGBProfileTHR(cmsContext ContextID, 1539 const cmsCIExyY* WhitePoint, 1540 const cmsCIExyYTRIPLE* Primaries, 1541 cmsToneCurve* const TransferFunction[3]); 1542 1543CMSAPI cmsHPROFILE CMSEXPORT cmsCreateRGBProfile(const cmsCIExyY* WhitePoint, 1544 const cmsCIExyYTRIPLE* Primaries, 1545 cmsToneCurve* const TransferFunction[3]); 1546 1547CMSAPI cmsHPROFILE CMSEXPORT cmsCreateGrayProfileTHR(cmsContext ContextID, 1548 const cmsCIExyY* WhitePoint, 1549 const cmsToneCurve* TransferFunction); 1550 1551CMSAPI cmsHPROFILE CMSEXPORT cmsCreateGrayProfile(const cmsCIExyY* WhitePoint, 1552 const cmsToneCurve* TransferFunction); 1553 1554CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLinearizationDeviceLinkTHR(cmsContext ContextID, 1555 cmsColorSpaceSignature ColorSpace, 1556 cmsToneCurve* const TransferFunctions[]); 1557 1558CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLinearizationDeviceLink(cmsColorSpaceSignature ColorSpace, 1559 cmsToneCurve* const TransferFunctions[]); 1560 1561CMSAPI cmsHPROFILE CMSEXPORT cmsCreateInkLimitingDeviceLinkTHR(cmsContext ContextID, 1562 cmsColorSpaceSignature ColorSpace, cmsFloat64Number Limit); 1563 1564CMSAPI cmsHPROFILE CMSEXPORT cmsCreateInkLimitingDeviceLink(cmsColorSpaceSignature ColorSpace, cmsFloat64Number Limit); 1565 1566 1567CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLab2ProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint); 1568CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLab2Profile(const cmsCIExyY* WhitePoint); 1569CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLab4ProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint); 1570CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLab4Profile(const cmsCIExyY* WhitePoint); 1571 1572CMSAPI cmsHPROFILE CMSEXPORT cmsCreateXYZProfileTHR(cmsContext ContextID); 1573CMSAPI cmsHPROFILE CMSEXPORT cmsCreateXYZProfile(void); 1574 1575CMSAPI cmsHPROFILE CMSEXPORT cmsCreate_sRGBProfileTHR(cmsContext ContextID); 1576CMSAPI cmsHPROFILE CMSEXPORT cmsCreate_sRGBProfile(void); 1577 1578CMSAPI cmsHPROFILE CMSEXPORT cmsCreateBCHSWabstractProfileTHR(cmsContext ContextID, 1579 int nLUTPoints, 1580 cmsFloat64Number Bright, 1581 cmsFloat64Number Contrast, 1582 cmsFloat64Number Hue, 1583 cmsFloat64Number Saturation, 1584 int TempSrc, 1585 int TempDest); 1586 1587CMSAPI cmsHPROFILE CMSEXPORT cmsCreateBCHSWabstractProfile(int nLUTPoints, 1588 cmsFloat64Number Bright, 1589 cmsFloat64Number Contrast, 1590 cmsFloat64Number Hue, 1591 cmsFloat64Number Saturation, 1592 int TempSrc, 1593 int TempDest); 1594 1595CMSAPI cmsHPROFILE CMSEXPORT cmsCreateNULLProfileTHR(cmsContext ContextID); 1596CMSAPI cmsHPROFILE CMSEXPORT cmsCreateNULLProfile(void); 1597 1598// Converts a transform to a devicelink profile 1599CMSAPI cmsHPROFILE CMSEXPORT cmsTransform2DeviceLink(cmsHTRANSFORM hTransform, cmsFloat64Number Version, cmsUInt32Number dwFlags); 1600 1601// Intents ---------------------------------------------------------------------------------------------- 1602 1603// ICC Intents 1604#define INTENT_PERCEPTUAL 0 1605#define INTENT_RELATIVE_COLORIMETRIC 1 1606#define INTENT_SATURATION 2 1607#define INTENT_ABSOLUTE_COLORIMETRIC 3 1608 1609// Non-ICC intents 1610#define INTENT_PRESERVE_K_ONLY_PERCEPTUAL 10 1611#define INTENT_PRESERVE_K_ONLY_RELATIVE_COLORIMETRIC 11 1612#define INTENT_PRESERVE_K_ONLY_SATURATION 12 1613#define INTENT_PRESERVE_K_PLANE_PERCEPTUAL 13 1614#define INTENT_PRESERVE_K_PLANE_RELATIVE_COLORIMETRIC 14 1615#define INTENT_PRESERVE_K_PLANE_SATURATION 15 1616 1617// Call with NULL as parameters to get the intent count 1618CMSAPI cmsUInt32Number CMSEXPORT cmsGetSupportedIntents(cmsUInt32Number nMax, cmsUInt32Number* Codes, char** Descriptions); 1619CMSAPI cmsUInt32Number CMSEXPORT cmsGetSupportedIntentsTHR(cmsContext ContextID, cmsUInt32Number nMax, cmsUInt32Number* Codes, char** Descriptions); 1620 1621// Flags 1622 1623#define cmsFLAGS_NOCACHE 0x0040 // Inhibit 1-pixel cache 1624#define cmsFLAGS_NOOPTIMIZE 0x0100 // Inhibit optimizations 1625#define cmsFLAGS_NULLTRANSFORM 0x0200 // Don't transform anyway 1626 1627// Proofing flags 1628#define cmsFLAGS_GAMUTCHECK 0x1000 // Out of Gamut alarm 1629#define cmsFLAGS_SOFTPROOFING 0x4000 // Do softproofing 1630 1631// Misc 1632#define cmsFLAGS_BLACKPOINTCOMPENSATION 0x2000 1633#define cmsFLAGS_NOWHITEONWHITEFIXUP 0x0004 // Don't fix scum dot 1634#define cmsFLAGS_HIGHRESPRECALC 0x0400 // Use more memory to give better accurancy 1635#define cmsFLAGS_LOWRESPRECALC 0x0800 // Use less memory to minimize resouces 1636 1637// For devicelink creation 1638#define cmsFLAGS_8BITS_DEVICELINK 0x0008 // Create 8 bits devicelinks 1639#define cmsFLAGS_GUESSDEVICECLASS 0x0020 // Guess device class (for transform2devicelink) 1640#define cmsFLAGS_KEEP_SEQUENCE 0x0080 // Keep profile sequence for devicelink creation 1641 1642// Specific to a particular optimizations 1643#define cmsFLAGS_FORCE_CLUT 0x0002 // Force CLUT optimization 1644#define cmsFLAGS_CLUT_POST_LINEARIZATION 0x0001 // create postlinearization tables if possible 1645#define cmsFLAGS_CLUT_PRE_LINEARIZATION 0x0010 // create prelinearization tables if possible 1646 1647// Fine-tune control over number of gridpoints 1648#define cmsFLAGS_GRIDPOINTS(n) (((n) & 0xFF) << 16) 1649 1650// CRD special 1651#define cmsFLAGS_NODEFAULTRESOURCEDEF 0x01000000 1652 1653// Transforms --------------------------------------------------------------------------------------------------- 1654 1655CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateTransformTHR(cmsContext ContextID, 1656 cmsHPROFILE Input, 1657 cmsUInt32Number InputFormat, 1658 cmsHPROFILE Output, 1659 cmsUInt32Number OutputFormat, 1660 cmsUInt32Number Intent, 1661 cmsUInt32Number dwFlags); 1662 1663CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateTransform(cmsHPROFILE Input, 1664 cmsUInt32Number InputFormat, 1665 cmsHPROFILE Output, 1666 cmsUInt32Number OutputFormat, 1667 cmsUInt32Number Intent, 1668 cmsUInt32Number dwFlags); 1669 1670CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateProofingTransformTHR(cmsContext ContextID, 1671 cmsHPROFILE Input, 1672 cmsUInt32Number InputFormat, 1673 cmsHPROFILE Output, 1674 cmsUInt32Number OutputFormat, 1675 cmsHPROFILE Proofing, 1676 cmsUInt32Number Intent, 1677 cmsUInt32Number ProofingIntent, 1678 cmsUInt32Number dwFlags); 1679 1680CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateProofingTransform(cmsHPROFILE Input, 1681 cmsUInt32Number InputFormat, 1682 cmsHPROFILE Output, 1683 cmsUInt32Number OutputFormat, 1684 cmsHPROFILE Proofing, 1685 cmsUInt32Number Intent, 1686 cmsUInt32Number ProofingIntent, 1687 cmsUInt32Number dwFlags); 1688 1689CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateMultiprofileTransformTHR(cmsContext ContextID, 1690 cmsHPROFILE hProfiles[], 1691 cmsUInt32Number nProfiles, 1692 cmsUInt32Number InputFormat, 1693 cmsUInt32Number OutputFormat, 1694 cmsUInt32Number Intent, 1695 cmsUInt32Number dwFlags); 1696 1697 1698CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateMultiprofileTransform(cmsHPROFILE hProfiles[], 1699 cmsUInt32Number nProfiles, 1700 cmsUInt32Number InputFormat, 1701 cmsUInt32Number OutputFormat, 1702 cmsUInt32Number Intent, 1703 cmsUInt32Number dwFlags); 1704 1705 1706CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateExtendedTransform(cmsContext ContextID, 1707 cmsUInt32Number nProfiles, cmsHPROFILE hProfiles[], 1708 cmsBool BPC[], 1709 cmsUInt32Number Intents[], 1710 cmsFloat64Number AdaptationStates[], 1711 cmsHPROFILE hGamutProfile, 1712 cmsUInt32Number nGamutPCSposition, 1713 cmsUInt32Number InputFormat, 1714 cmsUInt32Number OutputFormat, 1715 cmsUInt32Number dwFlags); 1716 1717CMSAPI void CMSEXPORT cmsDeleteTransform(cmsHTRANSFORM hTransform); 1718 1719CMSAPI void CMSEXPORT cmsDoTransform(cmsHTRANSFORM Transform, 1720 const void * InputBuffer, 1721 void * OutputBuffer, 1722 cmsUInt32Number Size); 1723 1724CMSAPI void CMSEXPORT cmsDoTransformStride(cmsHTRANSFORM Transform, 1725 const void * InputBuffer, 1726 void * OutputBuffer, 1727 cmsUInt32Number Size, 1728 cmsUInt32Number Stride); 1729 1730 1731CMSAPI void CMSEXPORT cmsSetAlarmCodes(const cmsUInt16Number NewAlarm[cmsMAXCHANNELS]); 1732CMSAPI void CMSEXPORT cmsGetAlarmCodes(cmsUInt16Number NewAlarm[cmsMAXCHANNELS]); 1733 1734 1735CMSAPI void CMSEXPORT cmsSetAlarmCodesTHR(cmsContext ContextID, 1736 const cmsUInt16Number AlarmCodes[cmsMAXCHANNELS]); 1737CMSAPI void CMSEXPORT cmsGetAlarmCodesTHR(cmsContext ContextID, 1738 cmsUInt16Number AlarmCodes[cmsMAXCHANNELS]); 1739 1740 1741 1742// Adaptation state for absolute colorimetric intent 1743CMSAPI cmsFloat64Number CMSEXPORT cmsSetAdaptationState(cmsFloat64Number d); 1744CMSAPI cmsFloat64Number CMSEXPORT cmsSetAdaptationStateTHR(cmsContext ContextID, cmsFloat64Number d); 1745 1746 1747 1748// Grab the ContextID from an open transform. Returns NULL if a NULL transform is passed 1749CMSAPI cmsContext CMSEXPORT cmsGetTransformContextID(cmsHTRANSFORM hTransform); 1750 1751// Grab the input/output formats 1752CMSAPI cmsUInt32Number CMSEXPORT cmsGetTransformInputFormat(cmsHTRANSFORM hTransform); 1753CMSAPI cmsUInt32Number CMSEXPORT cmsGetTransformOutputFormat(cmsHTRANSFORM hTransform); 1754 1755// For backwards compatibility 1756CMSAPI cmsBool CMSEXPORT cmsChangeBuffersFormat(cmsHTRANSFORM hTransform, 1757 cmsUInt32Number InputFormat, 1758 cmsUInt32Number OutputFormat); 1759 1760 1761 1762// PostScript ColorRenderingDictionary and ColorSpaceArray ---------------------------------------------------- 1763 1764typedef enum { cmsPS_RESOURCE_CSA, cmsPS_RESOURCE_CRD } cmsPSResourceType; 1765 1766// lcms2 unified method to access postscript color resources 1767CMSAPI cmsUInt32Number CMSEXPORT cmsGetPostScriptColorResource(cmsContext ContextID, 1768 cmsPSResourceType Type, 1769 cmsHPROFILE hProfile, 1770 cmsUInt32Number Intent, 1771 cmsUInt32Number dwFlags, 1772 cmsIOHANDLER* io); 1773 1774CMSAPI cmsUInt32Number CMSEXPORT cmsGetPostScriptCSA(cmsContext ContextID, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags, void* Buffer, cmsUInt32Number dwBufferLen); 1775CMSAPI cmsUInt32Number CMSEXPORT cmsGetPostScriptCRD(cmsContext ContextID, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags, void* Buffer, cmsUInt32Number dwBufferLen); 1776 1777 1778// IT8.7 / CGATS.17-200x handling ----------------------------------------------------------------------------- 1779 1780CMSAPI cmsHANDLE CMSEXPORT cmsIT8Alloc(cmsContext ContextID); 1781CMSAPI void CMSEXPORT cmsIT8Free(cmsHANDLE hIT8); 1782 1783// Tables 1784CMSAPI cmsUInt32Number CMSEXPORT cmsIT8TableCount(cmsHANDLE hIT8); 1785CMSAPI cmsInt32Number CMSEXPORT cmsIT8SetTable(cmsHANDLE hIT8, cmsUInt32Number nTable); 1786 1787// Persistence 1788CMSAPI cmsHANDLE CMSEXPORT cmsIT8LoadFromFile(cmsContext ContextID, const char* cFileName); 1789CMSAPI cmsHANDLE CMSEXPORT cmsIT8LoadFromMem(cmsContext ContextID, void *Ptr, cmsUInt32Number len); 1790// CMSAPI cmsHANDLE CMSEXPORT cmsIT8LoadFromIOhandler(cmsContext ContextID, cmsIOHANDLER* io); 1791 1792CMSAPI cmsBool CMSEXPORT cmsIT8SaveToFile(cmsHANDLE hIT8, const char* cFileName); 1793CMSAPI cmsBool CMSEXPORT cmsIT8SaveToMem(cmsHANDLE hIT8, void *MemPtr, cmsUInt32Number* BytesNeeded); 1794 1795// Properties 1796CMSAPI const char* CMSEXPORT cmsIT8GetSheetType(cmsHANDLE hIT8); 1797CMSAPI cmsBool CMSEXPORT cmsIT8SetSheetType(cmsHANDLE hIT8, const char* Type); 1798 1799CMSAPI cmsBool CMSEXPORT cmsIT8SetComment(cmsHANDLE hIT8, const char* cComment); 1800 1801CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyStr(cmsHANDLE hIT8, const char* cProp, const char *Str); 1802CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyDbl(cmsHANDLE hIT8, const char* cProp, cmsFloat64Number Val); 1803CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyHex(cmsHANDLE hIT8, const char* cProp, cmsUInt32Number Val); 1804CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyMulti(cmsHANDLE hIT8, const char* Key, const char* SubKey, const char *Buffer); 1805CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyUncooked(cmsHANDLE hIT8, const char* Key, const char* Buffer); 1806 1807 1808CMSAPI const char* CMSEXPORT cmsIT8GetProperty(cmsHANDLE hIT8, const char* cProp); 1809CMSAPI cmsFloat64Number CMSEXPORT cmsIT8GetPropertyDbl(cmsHANDLE hIT8, const char* cProp); 1810CMSAPI const char* CMSEXPORT cmsIT8GetPropertyMulti(cmsHANDLE hIT8, const char* Key, const char *SubKey); 1811CMSAPI cmsUInt32Number CMSEXPORT cmsIT8EnumProperties(cmsHANDLE hIT8, char ***PropertyNames); 1812CMSAPI cmsUInt32Number CMSEXPORT cmsIT8EnumPropertyMulti(cmsHANDLE hIT8, const char* cProp, const char ***SubpropertyNames); 1813 1814// Datasets 1815CMSAPI const char* CMSEXPORT cmsIT8GetDataRowCol(cmsHANDLE hIT8, int row, int col); 1816CMSAPI cmsFloat64Number CMSEXPORT cmsIT8GetDataRowColDbl(cmsHANDLE hIT8, int row, int col); 1817 1818CMSAPI cmsBool CMSEXPORT cmsIT8SetDataRowCol(cmsHANDLE hIT8, int row, int col, 1819 const char* Val); 1820 1821CMSAPI cmsBool CMSEXPORT cmsIT8SetDataRowColDbl(cmsHANDLE hIT8, int row, int col, 1822 cmsFloat64Number Val); 1823 1824CMSAPI const char* CMSEXPORT cmsIT8GetData(cmsHANDLE hIT8, const char* cPatch, const char* cSample); 1825 1826 1827CMSAPI cmsFloat64Number CMSEXPORT cmsIT8GetDataDbl(cmsHANDLE hIT8, const char* cPatch, const char* cSample); 1828 1829CMSAPI cmsBool CMSEXPORT cmsIT8SetData(cmsHANDLE hIT8, const char* cPatch, 1830 const char* cSample, 1831 const char *Val); 1832 1833CMSAPI cmsBool CMSEXPORT cmsIT8SetDataDbl(cmsHANDLE hIT8, const char* cPatch, 1834 const char* cSample, 1835 cmsFloat64Number Val); 1836 1837CMSAPI int CMSEXPORT cmsIT8FindDataFormat(cmsHANDLE hIT8, const char* cSample); 1838CMSAPI cmsBool CMSEXPORT cmsIT8SetDataFormat(cmsHANDLE hIT8, int n, const char *Sample); 1839CMSAPI int CMSEXPORT cmsIT8EnumDataFormat(cmsHANDLE hIT8, char ***SampleNames); 1840 1841CMSAPI const char* CMSEXPORT cmsIT8GetPatchName(cmsHANDLE hIT8, int nPatch, char* buffer); 1842CMSAPI int CMSEXPORT cmsIT8GetPatchByName(cmsHANDLE hIT8, const char *cPatch); 1843 1844// The LABEL extension 1845CMSAPI int CMSEXPORT cmsIT8SetTableByLabel(cmsHANDLE hIT8, const char* cSet, const char* cField, const char* ExpectedType); 1846 1847CMSAPI cmsBool CMSEXPORT cmsIT8SetIndexColumn(cmsHANDLE hIT8, const char* cSample); 1848 1849// Formatter for double 1850CMSAPI void CMSEXPORT cmsIT8DefineDblFormat(cmsHANDLE hIT8, const char* Formatter); 1851 1852// Gamut boundary description routines ------------------------------------------------------------------------------ 1853 1854CMSAPI cmsHANDLE CMSEXPORT cmsGBDAlloc(cmsContext ContextID); 1855CMSAPI void CMSEXPORT cmsGBDFree(cmsHANDLE hGBD); 1856CMSAPI cmsBool CMSEXPORT cmsGDBAddPoint(cmsHANDLE hGBD, const cmsCIELab* Lab); 1857CMSAPI cmsBool CMSEXPORT cmsGDBCompute(cmsHANDLE hGDB, cmsUInt32Number dwFlags); 1858CMSAPI cmsBool CMSEXPORT cmsGDBCheckPoint(cmsHANDLE hGBD, const cmsCIELab* Lab); 1859 1860// Feature detection ---------------------------------------------------------------------------------------------- 1861 1862// Estimate the black point 1863CMSAPI cmsBool CMSEXPORT cmsDetectBlackPoint(cmsCIEXYZ* BlackPoint, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags); 1864CMSAPI cmsBool CMSEXPORT cmsDetectDestinationBlackPoint(cmsCIEXYZ* BlackPoint, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags); 1865 1866// Estimate total area coverage 1867CMSAPI cmsFloat64Number CMSEXPORT cmsDetectTAC(cmsHPROFILE hProfile); 1868 1869 1870// Poor man's gamut mapping 1871CMSAPI cmsBool CMSEXPORT cmsDesaturateLab(cmsCIELab* Lab, 1872 double amax, double amin, 1873 double bmax, double bmin); 1874 1875#ifndef CMS_USE_CPP_API 1876# ifdef __cplusplus 1877 } 1878# endif 1879#endif 1880 1881#define _lcms2_H 1882#endif 1883