00001 /* Header file guard bands */ 00002 #ifndef ICC_H 00003 #define ICC_H 00004 00005 /***************************************************************** 00006 Copyright (c) 1994 SunSoft, Inc. 00007 00008 All Rights Reserved 00009 00010 Permission is hereby granted, free of charge, to any person 00011 obtaining a copy of this software and associated documentation 00012 files (the "Software"), to deal in the Software without restrict- 00013 ion, including without limitation the rights to use, copy, modify, 00014 merge, publish distribute, sublicense, and/or sell copies of the 00015 Software, and to permit persons to whom the Software is furnished 00016 to do so, subject to the following conditions: 00017 00018 The above copyright notice and this permission notice shall be 00019 included in all copies or substantial portions of the Software. 00020 00021 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 00022 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 00023 OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON- 00024 INFRINGEMENT. IN NO EVENT SHALL SUNSOFT, INC. OR ITS PARENT 00025 COMPANY BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 00026 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 00027 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 00028 OTHER DEALINGS IN THE SOFTWARE. 00029 00030 Except as contained in this notice, the name of SunSoft, Inc. 00031 shall not be used in advertising or otherwise to promote the 00032 sale, use or other dealings in this Software without written 00033 authorization from SunSoft Inc. 00034 ******************************************************************/ 00035 00036 /* 00037 * This version of the header file corresponds to the profile 00038 * specification version 3.0. 00039 * 00040 * All header file entries are pre-fixed with "ic" to help 00041 * avoid name space collisions. Signatures are pre-fixed with 00042 * icSig. 00043 * 00044 * The structures defined in this header file were created to 00045 * represent a description of an ICC profile on disk. Rather 00046 * than use pointers a technique is used where a single byte array 00047 * was placed at the end of each structure. This allows us in "C" 00048 * to extend the structure by allocating more data than is needed 00049 * to account for variable length structures. 00050 * 00051 * This also ensures that data following is allocated 00052 * contiguously and makes it easier to write and read data from 00053 * the file. 00054 * 00055 * For example to allocate space for a 256 count length UCR 00056 * and BG array, and fill the allocated data. 00057 * 00058 icUcrBgCurve *ucrCurve, *bgCurve; 00059 int ucr_nbytes, bg_nbytes; 00060 icUcrBg *ucrBgWrite; 00061 00062 ucr_nbytes = sizeof(icUInt32Number) + 00063 (UCR_CURVE_SIZE * sizeof(icUInt16Number)); 00064 bg_nbytes = sizeof(icUInt32Number) + 00065 (BG_CURVE_SIZE * sizeof(icUInt16Number)); 00066 00067 ucrBgWrite = (icUcrBg *)malloc((ucr_nbytes + bg_nbytes)); 00068 00069 ucrCurve = (icUcrBgCurve *)ucrBgWrite->data; 00070 ucrCurve->count = UCR_CURVE_SIZE; 00071 for (i=0; i<ucrCurve->count; i++) 00072 ucrCurve->curve[i] = (icUInt16Number)i; 00073 00074 bgCurve = (icUcrBgCurve *)((char *)ucrCurve + ucr_nbytes); 00075 bgCurve->count = BG_CURVE_SIZE; 00076 for (i=0; i<bgCurve->count; i++) 00077 bgCurve->curve[i] = 255 - (icUInt16Number)i; 00078 * 00079 */ 00080 00081 /* 00082 * Many of the structures contain variable length arrays. This 00083 * is represented by the use of the convention. 00084 * 00085 * type data[icAny]; 00086 */ 00087 00088 /*------------------------------------------------------------------------*/ 00089 /* 00090 * Defines used in the specification 00091 */ 00092 #define icMagicNumber 0x61637370 /* 'acsp' */ 00093 #define icVersionNumber 0x02000000 /* 2.0, BCD */ 00094 00095 /* Screening Encodings */ 00096 #define icPrtrDefaultScreensFalse 0x00000000 /* Bit position 0 */ 00097 #define icPrtrDefaultScreensTrue 0x00000001 /* Bit position 0 */ 00098 #define icLinesPerInch 0x00000002 /* Bit position 1 */ 00099 #define icLinesPerCm 0x00000000 /* Bit position 1 */ 00100 00101 /* 00102 * Device attributes, currently defined values correspond 00103 * to the low 4 bytes of the 8 byte attribute quantity, see 00104 * the header for their location. 00105 */ 00106 #define icReflective 0x00000000 /* Bit position 0 */ 00107 #define icTransparency 0x00000001 /* Bit position 0 */ 00108 #define icGlossy 0x00000000 /* Bit position 1 */ 00109 #define icMatte 0x00000002 /* Bit position 1 */ 00110 00111 /* 00112 * Profile header flags, the low 16 bits are reserved for consortium 00113 * use. 00114 */ 00115 #define icEmbeddedProfileFalse 0x00000000 /* Bit position 0 */ 00116 #define icEmbeddedProfileTrue 0x00000001 /* Bit position 0 */ 00117 #define icUseAnywhere 0x00000000 /* Bit position 1 */ 00118 #define icUseWithEmdeddedDataOnly 0x00000002 /* Bit position 1 */ 00119 00120 /* Ascii or Binary data */ 00121 #define icAsciiData 0x00000000 /* Used in dataType */ 00122 #define icBinaryData 0x00000001 00123 00124 /* 00125 * Define used to indicate that this is a variable length array 00126 */ 00127 #define icAny 1 00128 00129 /*------------------------------------------------------------------------*/ 00130 /* 00131 * Signatures, these are basically 4 byte identifiers 00132 * used to differentiate between tags and other items 00133 * in the profile format. 00134 */ 00135 typedef unsigned char icSignature[4]; 00136 00137 typedef unsigned char icTagSignature[4]; 00138 /* public tags and sizes */ 00139 #define icSigAToB0Tag 0x41324230 /* 'A2B0' */ 00140 #define icSigAToB1Tag 0x41324231 /* 'A2B1' */ 00141 #define icSigAToB2Tag 0x41324232 /* 'A2B2' */ 00142 #define icSigAToB3Tag 0x41324233 /* 'A2B2' */ 00143 #define icSigBlueColorantTag 0x6258595A /* 'bXYZ' */ 00144 #define icSigBlueTRCTag 0x62545243 /* 'bTRC' */ 00145 #define icSigBToA0Tag 0x42324130 /* 'B2A0' */ 00146 #define icSigBToA1Tag 0x42324131 /* 'B2A1' */ 00147 #define icSigBToA2Tag 0x42324132 /* 'B2A2' */ 00148 #define icSigBToA3Tag 0x42324133 /* 'B2A3' */ 00149 #define icSigCalibrationDateTimeTag 0x63616C74 /* 'calt' */ 00150 #define icSigCharTargetTag 0x74617267 /* 'targ' */ 00151 #define icSigCopyrightTag 0x63707274 /* 'cprt' */ 00152 #define icSigDeviceMfgDescTag 0x646D6E64 /* 'dmnd' */ 00153 #define icSigDeviceModelDescTag 0x646D6464 /* 'dmdd' */ 00154 #define icSigGamutTag 0x676d7420 /* 'gmt ' */ 00155 #define icSigGrayTRCTag 0x6b545243 /* 'kTRC' */ 00156 #define icSigGreenColorantTag 0x6758595A /* 'gXYZ' */ 00157 #define icSigGreenTRCTag 0x67545243 /* 'gTRC' */ 00158 #define icSigLuminanceTag 0x6C756d69 /* 'lumi' */ 00159 #define icSigMeasurementTag 0x6D656173 /* 'meas' */ 00160 #define icSigMediaBlackPointTag 0x626B7074 /* 'bkpt' */ 00161 #define icSigMediaWhitePointTag 0x77747074 /* 'wtpt' */ 00162 #define icSigNamedColorTag 0x6E636f6C /* 'ncol' */ 00163 #define icSigPreview0Tag 0x70726530 /* 'pre0' */ 00164 #define icSigPreview1Tag 0x70726531 /* 'pre1' */ 00165 #define icSigPreview2Tag 0x70726532 /* 'pre2' */ 00166 #define icSigProfileDescriptionTag 0x64657363 /* 'desc' */ 00167 #define icSigProfileSequenceDescTag 0x70736571 /* 'pseq' */ 00168 #define icSigPs2CRD0Tag 0x70736430 /* 'psd0' */ 00169 #define icSigPs2CRD1Tag 0x70736431 /* 'psd1' */ 00170 #define icSigPs2CRD2Tag 0x70736432 /* 'psd2' */ 00171 #define icSigPs2CRD3Tag 0x70736433 /* 'psd3' */ 00172 #define icSigPs2CSATag 0x70733273 /* 'ps2s' */ 00173 #define icSigPs2Intent0Tag 0x70736930 /* 'psi0' */ 00174 #define icSigPs2Intent1Tag 0x70736931 /* 'psi1' */ 00175 #define icSigPs2Intent2Tag 0x70736932 /* 'psi2' */ 00176 #define icSigPs2Intent3Tag 0x70736933 /* 'psi3' */ 00177 #define icSigRedColorantTag 0x7258595A /* 'rXYZ' */ 00178 #define icSigRedTRCTag 0x72545243 /* 'rTRC' */ 00179 #define icSigScreeningDescTag 0x73637264 /* 'scrd' */ 00180 #define icSigScreeningTag 0x7363726E /* 'scrn' */ 00181 #define icSigTechnologyTag 0x74656368 /* 'tech' */ 00182 #define icSigUcrBgTag 0x62666420 /* 'bfd ' */ 00183 #define icSigViewingCondDescTag 0x76756564 /* 'vued' */ 00184 #define icSigViewingConditionsTag 0x76696577 /* 'view' */ 00185 #define icSigK007Tag 0x4B303037 /* 'K007' */ 00186 #define icMaxEnumTag 0xFFFFFFFF /* enum = 4 00187 bytes max */ 00188 00189 typedef unsigned char icTechnologySignature[4]; 00190 /* technology signature descriptions */ 00191 #define icSigFilmScanner 0x6673636E /* 'fscn' */ 00192 #define icSigReflectiveScanner 0x7273636E /* 'rscn' */ 00193 #define icSigInkJetPrinter 0x696A6574 /* 'ijet' */ 00194 #define icSigThermalWaxPrinter 0x74776178 /* 'twax' */ 00195 #define icSigElectrophotographicPrinter 0x6570686F /* 'epho' */ 00196 #define icSigElectrostaticPrinter 0x65737461 /* 'esta' */ 00197 #define icSigDyeSublimationPrinter 0x64737562 /* 'dsub' */ 00198 #define icSigPhotographicPaperPrinter 0x7270686F /* 'rpho' */ 00199 #define icSigFilmWriter 0x6670726E /* 'fprn' */ 00200 #define icSigVideoMonitor 0x7669646D /* 'vidm' */ 00201 #define icSigVideoCamera 0x76696463 /* 'vidc' */ 00202 #define icSigProjectionTelevision 0x706A7476 /* 'pjtv' */ 00203 #define icSigCRTDisplay 0x43525420 /* 'CRT ' */ 00204 #define icSigPMDisplay 0x504D4420 /* 'PMD ' */ 00205 #define icSigAMDisplay 0x414D4420 /* 'AMD ' */ 00206 #define icSigPhotoCD 0x4B504344 /* 'KPCD' */ 00207 #define icSigPhotoImageSetter 0x696D6773 /* 'imgs' */ 00208 #define icSigGravure 0x67726176 /* 'grav' */ 00209 #define icSigOffsetLithography 0x6F666673 /* 'offs' */ 00210 #define icSigSilkscreen 0x73696C6B /* 'silk' */ 00211 #define icSigFlexography 0x666C6578 /* 'flex' */ 00212 #define icSigMediaType 0x4D533031 /* 'MS01' */ 00213 #define icSigDitherType 0x4D533032 /* 'MS02' */ 00214 #define icSigResolution 0x4D533033 /* 'MS03' */ 00215 #define icMaxEnumTechnology 0xFFFFFFFF /* enum = 4 00216 bytes max */ 00217 00218 typedef unsigned char icTagTypeSignature[4]; 00219 /* type signatures */ 00220 #define icSigCurveType 0x63757276 /* 'curv' */ 00221 #define icSigDataType 0x64617461 /* 'data' */ 00222 #define icSigDateTimeType 0x6474696D /* 'dtim' */ 00223 #define icSigLut16Type 0x6d667432 /* 'mft2' */ 00224 #define icSigLut8Type 0x6d667431 /* 'mft1' */ 00225 #define icSigMeasurementType 0x6D656173 /* 'meas' */ 00226 #define icSigNamedColorType 0x6E636f6C /* 'ncol' */ 00227 #define icSigProfileSequenceDescType 0x70736571 /* 'pseq' */ 00228 #define icSigS15Fixed16ArrayType 0x73663332 /* 'sf32' */ 00229 #define icSigScreeningType 0x7363726E /* 'scrn' */ 00230 #define icSigSignatureType 0x73696720 /* 'sig ' */ 00231 #define icSigTextType 0x74657874 /* 'text' */ 00232 #define icSigTextDescriptionType 0x64657363 /* 'desc' */ 00233 #define icSigU16Fixed16ArrayType 0x75663332 /* 'uf32' */ 00234 #define icSigUcrBgType 0x62666420 /* 'bfd ' */ 00235 #define icSigUInt16ArrayType 0x75693136 /* 'ui16' */ 00236 #define icSigUInt32ArrayType 0x75693332 /* 'ui32' */ 00237 #define icSigUInt64ArrayType 0x75693634 /* 'ui64' */ 00238 #define icSigUInt8ArrayType 0x75693038 /* 'ui08' */ 00239 #define icSigViewingConditionsType 0x76696577 /* 'view' */ 00240 #define icSigXYZType 0x58595A20 /* 'XYZ ' */ 00241 #define icMaxEnumType 0xFFFFFFFF /* enum = 4 00242 bytes max */ 00243 00244 /* 00245 * Color Space Signatures 00246 * Note that only icSigXYZData and icSigLabData are valid 00247 * Profile Connection Spaces (PCSs) 00248 */ 00249 typedef unsigned char icColorSpaceSignature[4]; 00250 #define icSigXYZData 0x58595A20 /* 'XYZ ' */ 00251 #define icSigLabData 0x4C616220 /* 'Lab ' */ 00252 #define icSigLuvData 0x4C757620 /* 'Luv ' */ 00253 #define icSigYCbCrData 0x59436272 /* 'YCbr' */ 00254 #define icSigYxyData 0x59787920 /* 'Yxy ' */ 00255 #define icSigRgbData 0x52474220 /* 'RGB ' */ 00256 #define icSigGrayData 0x47524159 /* 'GRAY' */ 00257 #define icSigHsvData 0x48535620 /* 'HSV ' */ 00258 #define icSigHlsData 0x484C5320 /* 'HLS ' */ 00259 #define icSigCmykData 0x434D594B /* 'CMYK' */ 00260 #define icSigCmyData 0x434D5920 /* 'CMY ' */ 00261 #define icSigDefData 0x44454620 /* 'DEF ' New Definition */ 00262 #define icMaxEnumData 0xFFFFFFFF /* enum = 4 00263 bytes max */ 00264 00265 /* profileClass enumerations */ 00266 typedef unsigned char icProfileClassSignature[4]; 00267 #define icSigInputClass 0x73636E72 /* 'scnr' */ 00268 #define icSigDisplayClass 0x6D6E7472 /* 'mntr' */ 00269 #define icSigOutputClass 0x70727472 /* 'prtr' */ 00270 #define icSigLinkClass 0x6C696E6B /* 'link' */ 00271 #define icSigAbstractClass 0x61627374 /* 'abst' */ 00272 #define icSigColorSpaceClass 0x73706163 /* 'spac' */ 00273 #define icMaxEnumClass 0xFFFFFFFF /* enum = 4 00274 bytes max */ 00275 00276 /* Platform Signatures */ 00277 typedef unsigned char icPlatformSignature[4]; 00278 #define icSigMacintosh 0x4150504C /* 'APPL' */ 00279 #define icSigMicrosoft 0x4D534654 /* 'MSFT' */ 00280 #define icSigSolaris 0x53554E57 /* 'SUNW' */ 00281 #define icSigSGI 0x53474920 /* 'SGI ' */ 00282 #define icSigTaligent 0x54474E54 /* 'TGNT' */ 00283 #define icMaxEnumPlatform 0xFFFFFFFF /* enum = 4 00284 bytes max */ 00285 00286 /*------------------------------------------------------------------------*/ 00287 /* 00288 * Other enums 00289 */ 00290 00291 /* Measurement Flare, used in the measurmentType tag */ 00292 typedef unsigned char icMeasurementFlare[4]; 00293 #define icFlare0 0x00000000 /* 0% flare */ 00294 #define icFlare100 0x00000001 /* 100% flare */ 00295 #define icMaxFlare 0xFFFFFFFF /* enum = 4 bytes max */ 00296 00297 /* Measurement Geometry, used in the measurmentType tag */ 00298 typedef unsigned char icMeasurementGeometry[4]; 00299 #define icGeometryUnknown 0x00000000 /* Unknown geometry */ 00300 #define icGeometry045or450 0x00000001 /* 0/45 or 45/0 */ 00301 #define icGeometry0dord0 0x00000002 /* 0/d or d/0 */ 00302 #define icMaxGeometry 0xFFFFFFFF /* enum = 4 bytes max */ 00303 00304 /* Rendering Intents, used in the profile header */ 00305 typedef unsigned char icRenderingIntent[4]; 00306 #define icPerceptual 0 00307 #define icRelativeColorimetric 1 00308 #define icSaturation 2 00309 #define icAbsoluteColorimetric 3 00310 #define icUseRenderingIntent 0xFFFFFFFF /* New Definition */ 00311 #define icMaxEnumIntent 0xFFFFFFFF /* enum = 4 bytes max */ 00312 00313 /* Different Spot Shapes currently defined, used for screeningType */ 00314 typedef unsigned char icSpotShape[4]; 00315 #define icSpotShapeUnknown 0 00316 #define icSpotShapePrinterDefault 1 00317 #define icSpotShapeRound 2 00318 #define icSpotShapeDiamond 3 00319 #define icSpotShapeEllipse 4 00320 #define icSpotShapeLine 5 00321 #define icSpotShapeSquare 6 00322 #define icSpotShapeCross 7 00323 #define icMaxEnumSpot 0xFFFFFFFF /* enum = 4 bytes max */ 00324 00325 /* Standard Observer, used in the measurmentType tag */ 00326 typedef unsigned char icStandardObserver[4]; 00327 #define icStdObsUnknown 0x00000000 /* Unknown observer */ 00328 #define icStdObs1931TwoDegrees 0x00000001 /* 1931 two degrees */ 00329 #define icStdObs1964TenDegrees 0x00000002 /* 1961 ten degrees */ 00330 #define icMaxStdObs 0xFFFFFFFF /* enum = 4 bytes max */ 00331 00332 /* Pre-defined illuminants, used in measurement and viewing conditions type */ 00333 typedef unsigned char icIlluminant[4]; 00334 #define icIlluminantUnknown = 0x00000000 00335 #define icIlluminantD50 = 0x00000001 00336 #define icIlluminantD65 = 0x00000002 00337 #define icIlluminantD93 = 0x00000003 00338 #define icIlluminantF2 = 0x00000004 00339 #define icIlluminantD55 = 0x00000005 00340 #define icIlluminantA = 0x00000006 00341 #define icIlluminantEquiPowerE = 0x00000007 /* Equi-Power (E) */ 00342 #define icIlluminantF8 = 0x00000008 00343 #define icMaxEnumIluminant = 0xFFFFFFFF /* enum = 4 00344 00345 /*------------------------------------------------------------------------*/ 00346 /* 00347 * Number definitions 00348 */ 00349 00350 /* Unsigned integer numbers */ 00351 typedef unsigned char icUInt8Number; 00352 typedef unsigned char icUInt16Number[2]; 00353 typedef unsigned char icUInt32Number[4]; 00354 typedef unsigned char icUInt64Number[8]; 00355 00356 /* Signed numbers */ 00357 typedef signed char icInt8Number; 00358 typedef signed char icInt16Number[2]; 00359 typedef signed char icInt32Number[4]; 00360 typedef signed char icInt64Number[8]; 00361 00362 /* Fixed numbers */ 00363 typedef signed char icS15Fixed16Number[4]; 00364 typedef unsigned char icU16Fixed16Number[4]; 00365 00366 /*------------------------------------------------------------------------*/ 00367 /* 00368 * Arrays of numbers 00369 */ 00370 00371 /* Int8 Array */ 00372 typedef struct { 00373 icInt8Number data[icAny]; /* Variable array of values */ 00374 } icInt8Array; 00375 00376 /* UInt8 Array */ 00377 typedef struct { 00378 icUInt8Number data[icAny]; /* Variable array of values */ 00379 } icUInt8Array; 00380 00381 /* uInt16 Array */ 00382 typedef struct { 00383 icUInt16Number data[icAny]; /* Variable array of values */ 00384 } icUInt16Array; 00385 00386 /* Int16 Array */ 00387 typedef struct { 00388 icInt16Number data[icAny]; /* Variable array of values */ 00389 } icInt16Array; 00390 00391 /* uInt32 Array */ 00392 typedef struct { 00393 icUInt32Number data[icAny]; /* Variable array of values */ 00394 } icUInt32Array; 00395 00396 /* Int32 Array */ 00397 typedef struct { 00398 icInt32Number data[icAny]; /* Variable array of values */ 00399 } icInt32Array; 00400 00401 /* UInt64 Array */ 00402 typedef struct { 00403 icUInt64Number data[icAny]; /* Variable array of values */ 00404 } icUInt64Array; 00405 00406 /* Int64 Array */ 00407 typedef struct { 00408 icInt64Number data[icAny]; /* Variable array of values */ 00409 } icInt64Array; 00410 00411 /* u16Fixed16 Array */ 00412 typedef struct { 00413 icU16Fixed16Number data[icAny]; /* Variable array of values */ 00414 } icU16Fixed16Array; 00415 00416 /* s15Fixed16 Array */ 00417 typedef struct { 00418 icS15Fixed16Number data[icAny]; /* Variable array of values */ 00419 } icS15Fixed16Array; 00420 00421 /* The base date time number */ 00422 typedef struct { 00423 icUInt16Number year; 00424 icUInt16Number month; 00425 icUInt16Number day; 00426 icUInt16Number hours; 00427 icUInt16Number minutes; 00428 icUInt16Number seconds; 00429 } icDateTimeNumber; 00430 00431 /* XYZ Number */ 00432 typedef struct { 00433 icS15Fixed16Number X; 00434 icS15Fixed16Number Y; 00435 icS15Fixed16Number Z; 00436 } icXYZNumber; 00437 00438 /* XYZ Array */ 00439 typedef struct { 00440 icXYZNumber data[icAny]; /* Variable array of XYZ numbers */ 00441 } icXYZArray; 00442 00443 /* Curve */ 00444 typedef struct { 00445 icUInt32Number count; /* Number of entries */ 00446 icUInt16Number data[icAny]; /* The actual table data, real 00447 * number is determined by count 00448 */ 00449 } icCurve; 00450 00451 /* Data */ 00452 typedef struct { 00453 icUInt32Number dataFlag; /* 0 = ascii, 1 = binary */ 00454 icInt8Number data[icAny]; /* Data, size determined from tag */ 00455 } icData; 00456 00457 /* lut16 */ 00458 typedef struct { 00459 icUInt8Number inputChan; /* Number of input channels */ 00460 icUInt8Number outputChan; /* Number of output channels */ 00461 icUInt8Number clutPoints; /* Number of clutTable grid points */ 00462 icInt8Number pad; /* Padding for byte alignment */ 00463 icS15Fixed16Number e00; /* e00 in the 3 * 3 */ 00464 icS15Fixed16Number e01; /* e01 in the 3 * 3 */ 00465 icS15Fixed16Number e02; /* e02 in the 3 * 3 */ 00466 icS15Fixed16Number e10; /* e10 in the 3 * 3 */ 00467 icS15Fixed16Number e11; /* e11 in the 3 * 3 */ 00468 icS15Fixed16Number e12; /* e12 in the 3 * 3 */ 00469 icS15Fixed16Number e20; /* e20 in the 3 * 3 */ 00470 icS15Fixed16Number e21; /* e21 in the 3 * 3 */ 00471 icS15Fixed16Number e22; /* e22 in the 3 * 3 */ 00472 icUInt16Number inputEnt; /* Number of input table entries */ 00473 icUInt16Number outputEnt; /* Number of output table entries */ 00474 icUInt16Number data[icAny]; /* Data follows see spec for size */ 00475 /* 00476 * Data that follows is of this form 00477 * 00478 * icUInt16Number inputTable[inputChan][icAny]; * The input table 00479 * icUInt16Number clutTable[icAny]; * The clut table 00480 * icUInt16Number outputTable[outputChan][icAny]; * The output table 00481 */ 00482 } icLut16; 00483 00484 /* lut8, input & output tables are always 256 bytes in length */ 00485 typedef struct { 00486 icUInt8Number inputChan; /* Number of input channels */ 00487 icUInt8Number outputChan; /* Number of output channels */ 00488 icUInt8Number clutPoints; /* Number of clutTable grid points */ 00489 icInt8Number pad; 00490 icS15Fixed16Number e00; /* e00 in the 3 * 3 */ 00491 icS15Fixed16Number e01; /* e01 in the 3 * 3 */ 00492 icS15Fixed16Number e02; /* e02 in the 3 * 3 */ 00493 icS15Fixed16Number e10; /* e10 in the 3 * 3 */ 00494 icS15Fixed16Number e11; /* e11 in the 3 * 3 */ 00495 icS15Fixed16Number e12; /* e12 in the 3 * 3 */ 00496 icS15Fixed16Number e20; /* e20 in the 3 * 3 */ 00497 icS15Fixed16Number e21; /* e21 in the 3 * 3 */ 00498 icS15Fixed16Number e22; /* e22 in the 3 * 3 */ 00499 icUInt8Number data[icAny]; /* Data follows see spec for size */ 00500 /* 00501 * Data that follows is of this form 00502 * 00503 * icUInt8Number inputTable[inputChan][256]; * The input table 00504 * icUInt8Number clutTable[icAny]; * The clut table 00505 * icUInt8Number outputTable[outputChan][256]; * The output table 00506 */ 00507 } icLut8; 00508 00509 /* Measurement Data */ 00510 typedef struct { 00511 icStandardObserver stdObserver; /* Standard observer */ 00512 icXYZNumber backing; /* XYZ for backing material */ 00513 icMeasurementGeometry geometry; /* Measurement geometry */ 00514 icMeasurementFlare flare; /* Measurement flare */ 00515 icIlluminant illuminant; /* Illuminant */ 00516 } icMeasurement; 00517 00518 /* Named color */ 00519 typedef struct { 00520 icUInt32Number vendorFlag; /* Bottom 16 bits for IC use */ 00521 icUInt32Number count; /* Count of named colors */ 00522 icInt8Number data[icAny]; /* Named color data follows */ 00523 /* 00524 * Data that follows is of this form 00525 * 00526 * icInt8Number prefix[icAny]; * Prefix for the color name, max = 32 00527 * icInt8Number suffix[icAny]; * Suffix for the color name, max = 32 00528 * icInt8Number root1[icAny]; * Root name for first color, max = 32 00529 * icInt8Number coords1[icAny]; * Color co-ordinates of first color 00530 * icInt8Number root2[icAny]; * Root name for first color, max = 32 00531 * icInt8Number coords2[icAny]; * Color co-ordinates of first color 00532 * : 00533 * : 00534 * Repeat for root name and color co-ordinates up to (count-1) 00535 */ 00536 } icNamedColor; 00537 00538 /* Profile sequence structure */ 00539 typedef struct { 00540 icSignature deviceMfg; /* Device Manufacturer */ 00541 icSignature deviceModel; /* Decvice Model */ 00542 icUInt64Number attributes; /* Device attributes */ 00543 icTechnologySignature technology; /* Technology signature */ 00544 icInt8Number data[icAny]; /* Descriptions text 00545 follows */ 00546 /* 00547 * Data that follows is of this form 00548 * 00549 * icTextDescription deviceMfgDesc[icAny]; * Manufacturer text 00550 * icTextDescription modelDesc[icAny]; * Model text 00551 */ 00552 } icDescStruct; 00553 00554 /* Profile sequence description */ 00555 typedef struct { 00556 icUInt32Number count; /* Number of descriptions */ 00557 icDescStruct data[icAny]; /* Array of description struct */ 00558 } icProfileSequenceDesc; 00559 00560 /* textDescription */ 00561 typedef struct { 00562 icUInt32Number count; /* Description length */ 00563 icInt8Number data[icAny]; /* Descriptions follow */ 00564 /* 00565 * Data that follows is of this form 00566 * 00567 * icInt8Number desc[icAny] * NULL terminated ascii string 00568 * icUInt32Number ucLangCode; * UniCode language code 00569 * icUInt32Number ucCount; * UniCode description length 00570 * icInt8Number ucDesc[icAny; * The UniCode description 00571 * icUInt16Number scCode; * ScriptCode code 00572 * icUInt8Number scCount; * ScriptCode count 00573 * icInt8Number scDesc[64]; * ScriptCode Description 00574 */ 00575 } icTextDescription; 00576 00577 /* Screening Data */ 00578 typedef struct { 00579 icS15Fixed16Number frequency; /* Frequency */ 00580 icS15Fixed16Number angle; /* Screen angle */ 00581 icSpotShape spotShape; /* Spot Shape encodings below */ 00582 } icScreeningData; 00583 00584 typedef struct { 00585 icUInt32Number screeningFlag; /* Screening flag */ 00586 icUInt32Number channels; /* Number of channels */ 00587 icScreeningData data[icAny]; /* Array of screening data */ 00588 } icScreening; 00589 00590 /* Text Data */ 00591 typedef struct { 00592 icInt8Number data[icAny]; /* Variable array of characters */ 00593 } icText; 00594 00595 /* Structure describing either a UCR or BG curve */ 00596 typedef struct { 00597 icUInt32Number count; /* Curve length */ 00598 icUInt16Number curve[icAny]; /* The array of curve values */ 00599 } icUcrBgCurve; 00600 00601 /* Under color removal, black generation */ 00602 typedef struct { 00603 icUInt8Number data[icAny]; /* The Ucr BG data */ 00604 /* 00605 * Data that follows is of this form 00606 * 00607 * icUcrBgCurve ucr; * Ucr curve 00608 * icUcrBgCurve bg; * Bg curve 00609 */ 00610 } icUcrBg; 00611 00612 /* viewingConditionsType */ 00613 typedef struct { 00614 icXYZNumber illuminant; /* In candelas per metre sq'd */ 00615 icXYZNumber surround; /* In candelas per metre sq'd */ 00616 icIlluminant stdIluminant; /* See icIlluminant defines */ 00617 } icViewingCondition; 00618 00619 00620 /*------------------------------------------------------------------------*/ 00621 /* 00622 * Tag Type definitions 00623 */ 00624 00625 /* 00626 * Many of the structures contain variable length arrays. This 00627 * is represented by the use of the convention. 00628 * 00629 * type data[icAny]; 00630 */ 00631 00632 /* The base part of each tag */ 00633 typedef struct { 00634 icTagTypeSignature sig; /* Signature */ 00635 icInt8Number reserved[4]; /* Reserved, set to 0 */ 00636 } icTagBase; 00637 00638 /* curveType */ 00639 typedef struct { 00640 icTagBase base; /* Signature, "curv" */ 00641 icCurve curve; /* The curve data */ 00642 } icCurveType; 00643 00644 /* dataType */ 00645 typedef struct { 00646 icTagBase base; /* Signature, "data" */ 00647 icData data; /* The data structure */ 00648 } icDataType; 00649 00650 /* dateTimeType */ 00651 typedef struct { 00652 icTagBase base; /* Signature, "dtim" */ 00653 icDateTimeNumber date; /* The date */ 00654 } icDateTimeType; 00655 00656 /* lut16Type */ 00657 typedef struct { 00658 icTagBase base; /* Signature, "mft2" */ 00659 icLut16 lut; /* Lut16 data */ 00660 } icLut16Type; 00661 00662 /* lut8Type, input & output tables are always 256 bytes in length */ 00663 typedef struct { 00664 icTagBase base; /* Signature, "mft1" */ 00665 icLut8 lut; /* Lut8 data */ 00666 } icLut8Type; 00667 00668 /* Measurement Type */ 00669 typedef struct { 00670 icTagBase base; /* Signature, "meas" */ 00671 icMeasurement measurement; /* Measurement data */ 00672 } icMeasurementType; 00673 00674 /* Named color type */ 00675 typedef struct { 00676 icTagBase base; /* Signature, "ncol" */ 00677 icNamedColor ncolor; /* Named color data */ 00678 } icNamedColorType; 00679 00680 /* Profile sequence description type */ 00681 typedef struct { 00682 icTagBase base; /* Signature, "pseq" */ 00683 icProfileSequenceDesc desc; /* The seq description */ 00684 } icProfileSequenceDescType; 00685 00686 /* textDescriptionType */ 00687 typedef struct { 00688 icTagBase base; /* Signature, "desc" */ 00689 icTextDescription desc; /* The description */ 00690 } icTextDescriptionType; 00691 00692 /* s15Fixed16Type */ 00693 typedef struct { 00694 icTagBase base; /* Signature, "sf32" */ 00695 icS15Fixed16Array data; /* Array of values */ 00696 } icS15Fixed16ArrayType; 00697 00698 typedef struct { 00699 icTagBase base; /* Signature, "scrn" */ 00700 icScreening screen; /* Screening structure */ 00701 } icScreeningType; 00702 00703 /* sigType */ 00704 typedef struct { 00705 icTagBase base; /* Signature, "sig" */ 00706 icSignature signature; /* The signature data */ 00707 } icSignatureType; 00708 00709 /* textType */ 00710 typedef struct { 00711 icTagBase base; /* Signature, "text" */ 00712 icText data; /* Variable array of characters */ 00713 } icTextType; 00714 00715 /* u16Fixed16Type */ 00716 typedef struct { 00717 icTagBase base; /* Signature, "uf32" */ 00718 icU16Fixed16Array data; /* Variable array of values */ 00719 } icU16Fixed16ArrayType; 00720 00721 /* Under color removal, black generation type */ 00722 typedef struct { 00723 icTagBase base; /* Signature, "bfd " */ 00724 icUcrBg data; /* ucrBg structure */ 00725 } icUcrBgType; 00726 00727 /* uInt16Type */ 00728 typedef struct { 00729 icTagBase base; /* Signature, "ui16" */ 00730 icUInt16Array data; /* Variable array of values */ 00731 } icUInt16ArrayType; 00732 00733 /* uInt32Type */ 00734 typedef struct { 00735 icTagBase base; /* Signature, "ui32" */ 00736 icUInt32Array data; /* Variable array of values */ 00737 } icUInt32ArrayType; 00738 00739 /* uInt64Type */ 00740 typedef struct { 00741 icTagBase base; /* Signature, "ui64" */ 00742 icUInt64Array data; /* Variable array of values */ 00743 } icUInt64ArrayType; 00744 00745 /* uInt8Type */ 00746 typedef struct { 00747 icTagBase base; /* Signature, "ui08" */ 00748 icUInt8Array data; /* Variable array of values */ 00749 } icUInt8ArrayType; 00750 00751 /* viewingConditionsType */ 00752 typedef struct { 00753 icTagBase base; /* Signature, "view" */ 00754 icViewingCondition view; /* Viewing conditions */ 00755 } icViewingConditionType; 00756 00757 /* XYZ Type */ 00758 typedef struct { 00759 icTagBase base; /* Signature, "XYZ" */ 00760 icXYZArray data; /* Variable array of XYZ numbers */ 00761 } icXYZType; 00762 00763 /*------------------------------------------------------------------------*/ 00764 00765 /* 00766 * Lists of tags, tags, profile header and profile strcuture 00767 */ 00768 00769 /* A tag */ 00770 typedef struct { 00771 icTagSignature sig; /* The tag signature */ 00772 icUInt32Number offset; /* Start of tag relative to 00773 * start of header, Spec Section 8 */ 00774 icUInt32Number size; /* Size in bytes */ 00775 } icTag; 00776 00777 /* A Structure that may be used independently for a list of tags */ 00778 typedef struct { 00779 icUInt32Number count; /* Number of tags in the profile */ 00780 icTag tags[icAny]; /* Variable array of tags */ 00781 } icTagList; 00782 00783 /* The Profile header */ 00784 typedef struct { 00785 icUInt32Number size; /* Profile size in bytes */ 00786 icSignature cmmId; /* CMM for this profile */ 00787 icUInt32Number version; /* Format version number */ 00788 icProfileClassSignature deviceClass; /* Type of profile */ 00789 icColorSpaceSignature colorSpace; /* Color space of data */ 00790 icColorSpaceSignature pcs; /* PCS, XYZ or Lab only */ 00791 icDateTimeNumber date; /* Date profile was created */ 00792 icSignature magic; /* icMagicNumber */ 00793 icPlatformSignature platform; /* Primary Platform */ 00794 icUInt32Number flags; /* Various bit settings */ 00795 icSignature manufacturer; /* Device manufacturer */ 00796 icUInt32Number model; /* Device model number */ 00797 icUInt64Number attributes; /* Device attributes */ 00798 icUInt32Number renderingIntent;/* Rendering intent */ 00799 icXYZNumber illuminant; /* Profile illuminant */ 00800 icInt8Number reserved[48]; /* Reserved for future use */ 00801 } icHeader; 00802 00803 /* 00804 * A profile, 00805 * we can't use icTagList here because its not at the end of the structure 00806 */ 00807 typedef struct { 00808 icHeader header; /* The header */ 00809 icUInt32Number count; /* Number of tags in the profile */ 00810 icInt8Number data[icAny]; /* The tagTable and tagData */ 00811 /* 00812 * Data that follows is of the form 00813 * 00814 * icTag tagTable[icAny]; * The tag table 00815 * icInt8Number tagData[icAny]; * The tag data 00816 */ 00817 } icProfile; 00818 00819 /*------------------------------------------------------------------------*/ 00820 #endif 00821