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