Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

profile.h

Go to the documentation of this file.
00001 /* 00002 File: LHICCProfile.h 00003 00004 Contains: 00005 00006 Version: 00007 00008 Copyright: © see below 00009 */ 00010 00011 /* Header file guard bands */ 00012 #ifndef LHICCProfile_h 00013 #define LHICCProfile_h 00014 00015 /***************************************************************** 00016 Copyright (c) 1994 SunSoft, Inc. 00017 00018 Rights Reserved 00019 00020 Permission is hereby granted, free of charge, to any person 00021 obtaining a copy of this software and associated documentation 00022 files (the "Software"), to deal in the Software without restrict- 00023 ion, including without limitation the rights to use, copy, modify, 00024 merge, publish distribute, sublicense, and/or sell copies of the 00025 Software, and to permit persons to whom the Software is furnished 00026 to do so, subject to the following conditions: 00027 00028 The above copyright notice and this permission notice shall be 00029 included in all copies or substantial portions of the Software. 00030 00031 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 00032 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 00033 OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON- 00034 INFRINGEMENT. IN NO EVENT SHALL SUNSOFT, INC. OR ITS PARENT 00035 COMPANY BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 00036 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 00037 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 00038 OTHER DEALINGS IN THE SOFTWARE. 00039 00040 Except as contained in this notice, the name of SunSoft, Inc. 00041 shall not be used in advertising or otherwise to promote the 00042 sale, use or other dealings in this Software without written 00043 authorization from SunSoft Inc. 00044 ******************************************************************/ 00045 00046 /* 00047 * This version of the header file corresponds to the profile 00048 * specification version 3.0.1, and includes support for the 00049 * Named Color profile type approved August 1995. 00050 * 00051 * All header file entries are pre-fixed with "ic" to help 00052 * avoid name space collisions. Signatures are pre-fixed with 00053 * icSig. 00054 * 00055 * The structures defined in this header file were created to 00056 * represent a description of an ICC profile on disk. Rather 00057 * than use pointers a technique is used where a single byte array 00058 * was placed at the end of each structure. This allows us in "C" 00059 * to extend the structure by allocating more data than is needed 00060 * to account for variable length structures. 00061 * 00062 * This also ensures that data following is allocated 00063 * contiguously and makes it easier to write and read data from 00064 * the file. 00065 * 00066 * For example to allocate space for a 256 count length UCR 00067 * and BG array, and fill the allocated data. Note strlen + 1 00068 * to remember NULL terminator. 00069 * 00070 icUcrBgCurve *ucrCurve, *bgCurve; 00071 int ucr_nbytes, bg_nbytes, string_bytes; 00072 icUcrBg *ucrBgWrite; 00073 char ucr_string[100], *ucr_char; 00074 00075 strcpy(ucr_string, "Example ucrBG curves"); 00076 ucr_nbytes = sizeof(icUInt32Number) + 00077 (UCR_CURVE_SIZE * sizeof(icUInt16Number)); 00078 bg_nbytes = sizeof(icUInt32Number) + 00079 (BG_CURVE_SIZE * sizeof(icUInt16Number)); 00080 string_bytes = strlen(ucr_string) + 1; 00081 00082 ucrBgWrite = (icUcrBg *)malloc( 00083 (ucr_nbytes + bg_nbytes + string_bytes)); 00084 00085 ucrCurve = (icUcrBgCurve *)ucrBgWrite->data; 00086 ucrCurve->count = UCR_CURVE_SIZE; 00087 for (i=0; i<ucrCurve->count; i++) 00088 ucrCurve->curve[i] = (icUInt16Number)i; 00089 00090 bgCurve = (icUcrBgCurve *)((char *)ucrCurve + ucr_nbytes); 00091 bgCurve->count = BG_CURVE_SIZE; 00092 for (i=0; i<bgCurve->count; i++) 00093 bgCurve->curve[i] = 255 - (icUInt16Number)i; 00094 00095 ucr_char = (char *)((char *)bgCurve + bg_nbytes); 00096 memcpy(ucr_char, ucr_string, string_bytes); 00097 * 00098 */ 00099 00100 /*------------------------------------------------------------------------*/ 00101 /* 00102 * Use this area to translate platform definitions of long 00103 * etc into icXXX form. The rest of the header uses the icXXX 00104 * typedefs. Signatures are 4 byte quantities. 00105 */ 00106 00107 #if defined(__MWERKS__) || defined(__PPCC__) || defined(WIN32) || defined(SYM_C) || defined(__MRC__) 00108 00109 /* 00110 * Number definitions 00111 */ 00112 00113 /* Unsigned integer numbers */ 00114 typedef unsigned char icUInt8Number; 00115 typedef unsigned short icUInt16Number; 00116 typedef unsigned long icUInt32Number; 00117 typedef unsigned long icUInt64Number[2]; 00118 00119 typedef icUInt32Number icSignature; 00120 00121 /* Signed numbers */ 00122 typedef char icInt8Number; 00123 typedef short icInt16Number; 00124 typedef long icInt32Number; 00125 typedef long icInt64Number[2]; 00126 00127 /* Fixed numbers */ 00128 typedef icInt32Number icS15Fixed16Number; 00129 typedef icUInt32Number icU16Fixed16Number; 00130 #endif /* __MWERKS__ || WIN32 || SYM_C || __MRC__ */ 00131 00132 #if 0 00133 00134 #ifdef __sgi 00135 /* #include "sgidefs.h" */ 00136 00137 typedef __int32_t icSignature; 00138 00139 /* 00140 * Number definitions 00141 */ 00142 00143 /* Unsigned integer numbers */ 00144 typedef unsigned char icUInt8Number; 00145 typedef unsigned short icUInt16Number; 00146 typedef __uint32_t icUInt32Number; 00147 typedef __uint32_t icUInt64Number[2]; 00148 00149 /* Signed numbers */ 00150 typedef char icInt8Number; 00151 typedef short icInt16Number; 00152 typedef __int32_t icInt32Number; 00153 typedef __int32_t icInt64Number[2]; 00154 00155 /* Fixed numbers */ 00156 typedef __int32_t icS15Fixed16Number; 00157 typedef __uint32_t icU16Fixed16Number; 00158 #endif /* Silicon Graphics */ 00159 00160 #endif 00161 00162 #if defined(unix) || defined(__unix) || defined(__unix__) /* 32-bit UNIX */ 00163 00164 typedef long icSignature; 00165 00166 /* 00167 * Number definitions 00168 */ 00169 00170 /* Unsigned integer numbers */ 00171 typedef unsigned char icUInt8Number; 00172 typedef unsigned short icUInt16Number; 00173 typedef unsigned long icUInt32Number; 00174 typedef unsigned long icUInt64Number[2]; 00175 00176 /* Signed numbers */ 00177 typedef char icInt8Number; 00178 typedef short icInt16Number; 00179 typedef long icInt32Number; 00180 typedef long icInt64Number[2]; 00181 00182 /* Fixed numbers */ 00183 typedef long icS15Fixed16Number; 00184 typedef unsigned long icU16Fixed16Number; 00185 00186 #endif /* 32-bit UNIX */ 00187 00188 00189 /* 00190 * Many of the structures contain variable length arrays. This 00191 * is represented by the use of the convention. 00192 * 00193 * type data[icAny]; 00194 */ 00195 00196 /*------------------------------------------------------------------------*/ 00197 /* 00198 * Defines used in the specification 00199 */ 00200 #define icMagicNumber 0x61637370L /* 'acsp' */ 00201 #define icVersionNumber 0x02000000L /* 2.0, BCD */ 00202 00203 /* Screening Encodings */ 00204 #define icPrtrDefaultScreensFalse 0x00000000L /* Bit position 0 */ 00205 #define icPrtrDefaultScreensTrue 0x00000001L /* Bit position 0 */ 00206 #define icLinesPerInch 0x00000002L /* Bit position 1 */ 00207 #define icLinesPerCm 0x00000000L /* Bit position 1 */ 00208 00209 /* 00210 * Device attributes, currently defined values correspond 00211 * to the low 4 bytes of the 8 byte attribute quantity, see 00212 * the header for their location. 00213 */ 00214 #define icReflective 0x00000000L /* Bit position 0 */ 00215 #define icTransparency 0x00000001L /* Bit position 0 */ 00216 #define icGlossy 0x00000000L /* Bit position 1 */ 00217 #define icMatte 0x00000002L /* Bit position 1 */ 00218 00219 /* 00220 * Profile header flags, the low 16 bits are reserved for consortium 00221 * use. 00222 */ 00223 #define icEmbeddedProfileFalse 0x00000000L /* Bit position 0 */ 00224 #define icEmbeddedProfileTrue 0x00000001L /* Bit position 0 */ 00225 #define icUseAnywhere 0x00000000L /* Bit position 1 */ 00226 #define icUseWithEmbeddedDataOnly 0x00000002L /* Bit position 1 */ 00227 00228 /* Ascii or Binary data */ 00229 #define icAsciiData 0x00000000L /* Used in dataType */ 00230 #define icBinaryData 0x00000001L 00231 00232 /* 00233 * Define used to indicate that this is a variable length array 00234 */ 00235 #define icAny 1 00236 00237 00238 /*------------------------------------------------------------------------*/ 00239 /* public tags and sizes */ 00240 typedef enum { 00241 icSigAToB0Tag = 0x41324230L, /* 'A2B0' */ 00242 icSigAToB1Tag = 0x41324231L, /* 'A2B1' */ 00243 icSigAToB2Tag = 0x41324232L, /* 'A2B2' */ 00244 icSigBlueColorantTag = 0x6258595AL, /* 'bXYZ' */ 00245 icSigBlueTRCTag = 0x62545243L, /* 'bTRC' */ 00246 icSigBToA0Tag = 0x42324130L, /* 'B2A0' */ 00247 icSigBToA1Tag = 0x42324131L, /* 'B2A1' */ 00248 icSigBToA2Tag = 0x42324132L, /* 'B2A2' */ 00249 icSigCalibrationDateTimeTag = 0x63616C74L, /* 'calt' */ 00250 icSigCharTargetTag = 0x74617267L, /* 'targ' */ 00251 icSigCopyrightTag = 0x63707274L, /* 'cprt' */ 00252 icSigDeviceMfgDescTag = 0x646D6E64L, /* 'dmnd' */ 00253 icSigDeviceModelDescTag = 0x646D6464L, /* 'dmdd' */ 00254 icSigGamutTag = 0x67616D74L, /* 'gamt ' */ 00255 icSigGrayTRCTag = 0x6b545243L, /* 'kTRC' */ 00256 icSigGreenColorantTag = 0x6758595AL, /* 'gXYZ' */ 00257 icSigGreenTRCTag = 0x67545243L, /* 'gTRC' */ 00258 icSigLuminanceTag = 0x6C756d69L, /* 'lumi' */ 00259 icSigMeasurementTag = 0x6D656173L, /* 'meas' */ 00260 icSigMediaBlackPointTag = 0x626B7074L, /* 'bkpt' */ 00261 icSigMediaWhitePointTag = 0x77747074L, /* 'wtpt' */ 00262 icSigNamedColorTag = 0x6E636f6CL, /* 'ncol' 00263 * OBSOLETE, use ncl2 */ 00264 icSigPreview0Tag = 0x70726530L, /* 'pre0' */ 00265 icSigPreview1Tag = 0x70726531L, /* 'pre1' */ 00266 icSigPreview2Tag = 0x70726532L, /* 'pre2' */ 00267 icSigProfileDescriptionTag = 0x64657363L, /* 'desc' */ 00268 icSigProfileSequenceDescTag = 0x70736571L, /* 'pseq' */ 00269 icSigPs2CRD0Tag = 0x70736430L, /* 'psd0' */ 00270 icSigPs2CRD1Tag = 0x70736431L, /* 'psd1' */ 00271 icSigPs2CRD2Tag = 0x70736432L, /* 'psd2' */ 00272 icSigPs2CRD3Tag = 0x70736433L, /* 'psd3' */ 00273 icSigPs2CSATag = 0x70733273L, /* 'ps2s' */ 00274 icSigPs2RenderingIntentTag = 0x70733269L, /* 'ps2i' */ 00275 icSigRedColorantTag = 0x7258595AL, /* 'rXYZ' */ 00276 icSigRedTRCTag = 0x72545243L, /* 'rTRC' */ 00277 icSigScreeningDescTag = 0x73637264L, /* 'scrd' */ 00278 icSigScreeningTag = 0x7363726EL, /* 'scrn' */ 00279 icSigTechnologyTag = 0x74656368L, /* 'tech' */ 00280 icSigUcrBgTag = 0x62666420L, /* 'bfd ' */ 00281 icSigViewingCondDescTag = 0x76756564L, /* 'vued' */ 00282 icSigViewingConditionsTag = 0x76696577L, /* 'view' */ 00283 icSigNamedColor2Tag = 0x6E636C32L, /* 'ncl2' */ 00284 icMaxEnumTag = 0xFFFFFFFFL /* enum = 4 bytes max */ 00285 } icTagSignature; 00286 00287 /* technology signature descriptions */ 00288 typedef enum { 00289 icSigDigitalCamera = 0x6463616DL, /* 'dcam' */ 00290 icSigFilmScanner = 0x6673636EL, /* 'fscn' */ 00291 icSigReflectiveScanner = 0x7273636EL, /* 'rscn' */ 00292 icSigInkJetPrinter = 0x696A6574L, /* 'ijet' */ 00293 icSigThermalWaxPrinter = 0x74776178L, /* 'twax' */ 00294 icSigElectrophotographicPrinter = 0x6570686FL, /* 'epho' */ 00295 icSigElectrostaticPrinter = 0x65737461L, /* 'esta' */ 00296 icSigDyeSublimationPrinter = 0x64737562L, /* 'dsub' */ 00297 icSigPhotographicPaperPrinter = 0x7270686FL, /* 'rpho' */ 00298 icSigFilmWriter = 0x6670726EL, /* 'fprn' */ 00299 icSigVideoMonitor = 0x7669646DL, /* 'vidm' */ 00300 icSigVideoCamera = 0x76696463L, /* 'vidc' */ 00301 icSigProjectionTelevision = 0x706A7476L, /* 'pjtv' */ 00302 icSigCRTDisplay = 0x43525420L, /* 'CRT ' */ 00303 icSigPMDisplay = 0x504D4420L, /* 'PMD ' */ 00304 icSigAMDisplay = 0x414D4420L, /* 'AMD ' */ 00305 icSigPhotoCD = 0x4B504344L, /* 'KPCD' */ 00306 icSigPhotoImageSetter = 0x696D6773L, /* 'imgs' */ 00307 icSigGravure = 0x67726176L, /* 'grav' */ 00308 icSigOffsetLithography = 0x6F666673L, /* 'offs' */ 00309 icSigSilkscreen = 0x73696C6BL, /* 'silk' */ 00310 icSigFlexography = 0x666C6578L, /* 'flex' */ 00311 icMaxEnumTechnology = 0xFFFFFFFFL /* enum = 4 bytes max */ 00312 } icTechnologySignature; 00313 00314 /* type signatures */ 00315 typedef enum { 00316 icSigCurveType = 0x63757276L, /* 'curv' */ 00317 icSigDataType = 0x64617461L, /* 'data' */ 00318 icSigDateTimeType = 0x6474696DL, /* 'dtim' */ 00319 icSigLut16Type = 0x6d667432L, /* 'mft2' */ 00320 icSigLut8Type = 0x6d667431L, /* 'mft1' */ 00321 icSigMeasurementType = 0x6D656173L, /* 'meas' */ 00322 icSigNamedColorType = 0x6E636f6CL, /* 'ncol' 00323 * OBSOLETE, use ncl2 */ 00324 icSigProfileSequenceDescType = 0x70736571L, /* 'pseq' */ 00325 icSigS15Fixed16ArrayType = 0x73663332L, /* 'sf32' */ 00326 icSigScreeningType = 0x7363726EL, /* 'scrn' */ 00327 icSigSignatureType = 0x73696720L, /* 'sig ' */ 00328 icSigTextType = 0x74657874L, /* 'text' */ 00329 icSigTextDescriptionType = 0x64657363L, /* 'desc' */ 00330 icSigU16Fixed16ArrayType = 0x75663332L, /* 'uf32' */ 00331 icSigUcrBgType = 0x62666420L, /* 'bfd ' */ 00332 icSigUInt16ArrayType = 0x75693136L, /* 'ui16' */ 00333 icSigUInt32ArrayType = 0x75693332L, /* 'ui32' */ 00334 icSigUInt64ArrayType = 0x75693634L, /* 'ui64' */ 00335 icSigUInt8ArrayType = 0x75693038L, /* 'ui08' */ 00336 icSigViewingConditionsType = 0x76696577L, /* 'view' */ 00337 icSigXYZType = 0x58595A20L, /* 'XYZ ' */ 00338 icSigXYZArrayType = 0x58595A20L, /* 'XYZ ' */ 00339 icSigNamedColor2Type = 0x6E636C32L, /* 'ncl2' */ 00340 icMaxEnumType = 0xFFFFFFFFL /* enum = 4 bytes max */ 00341 } icTagTypeSignature; 00342 00343 /* 00344 * Color Space Signatures 00345 * Note that only icSigXYZData and icSigLabData are valid 00346 * Profile Connection Spaces (PCSs) 00347 */ 00348 typedef enum { 00349 icSigXYZData = 0x58595A20L, /* 'XYZ ' */ 00350 icSigLabData = 0x4C616220L, /* 'Lab ' */ 00351 icSigLuvData = 0x4C757620L, /* 'Luv ' */ 00352 icSigYCbCrData = 0x59436272L, /* 'YCbr' */ 00353 icSigYxyData = 0x59787920L, /* 'Yxy ' */ 00354 icSigRgbData = 0x52474220L, /* 'RGB ' */ 00355 icSigGrayData = 0x47524159L, /* 'GRAY' */ 00356 icSigHsvData = 0x48535620L, /* 'HSV ' */ 00357 icSigHlsData = 0x484C5320L, /* 'HLS ' */ 00358 icSigCmykData = 0x434D594BL, /* 'CMYK' */ 00359 icSigCmyData = 0x434D5920L, /* 'CMY ' */ 00360 00361 icSigMCH2Data = 0x32434C52L, /* '2CLR' */ 00362 icSigMCH3Data = 0x33434C52L, /* '3CLR' */ 00363 icSigMCH4Data = 0x34434C52L, /* '4CLR' */ 00364 icSigMCH5Data = 0x35434C52L, /* '5CLR' */ 00365 icSigMCH6Data = 0x36434C52L, /* '6CLR' */ 00366 icSigMCH7Data = 0x37434C52L, /* '7CLR' */ 00367 icSigMCH8Data = 0x38434C52L, /* '8CLR' */ 00368 icSigMCH9Data = 0x39434C52L, /* '9CLR' */ 00369 icSigMCHAData = 0x41434C52L, /* 'ACLR' */ 00370 icSigMCHBData = 0x42434C52L, /* 'BCLR' */ 00371 icSigMCHCData = 0x43434C52L, /* 'CCLR' */ 00372 icSigMCHDData = 0x44434C52L, /* 'DCLR' */ 00373 icSigMCHEData = 0x45434C52L, /* 'ECLR' */ 00374 icSigMCHFData = 0x46434C52L, /* 'FCLR' */ 00375 icSigNamedData = 0x6e6d636cL, /* 'nmcl' */ 00376 00377 icMaxEnumData = 0xFFFFFFFFL /* enum = 4 bytes max */ 00378 } icColorSpaceSignature; 00379 00380 /* profileClass enumerations */ 00381 typedef enum { 00382 icSigInputClass = 0x73636E72L, /* 'scnr' */ 00383 icSigDisplayClass = 0x6D6E7472L, /* 'mntr' */ 00384 icSigOutputClass = 0x70727472L, /* 'prtr' */ 00385 icSigLinkClass = 0x6C696E6BL, /* 'link' */ 00386 icSigAbstractClass = 0x61627374L, /* 'abst' */ 00387 icSigColorSpaceClass = 0x73706163L, /* 'spac' */ 00388 icSigNamedColorClass = 0x6e6d636cL, /* 'nmcl' */ 00389 icMaxEnumClass = 0xFFFFFFFFL /* enum = 4 bytes max */ 00390 } icProfileClassSignature; 00391 00392 /* Platform Signatures */ 00393 typedef enum { 00394 icSigMacintosh = 0x4150504CL, /* 'APPL' */ 00395 icSigMicrosoft = 0x4D534654L, /* 'MSFT' */ 00396 icSigSolaris = 0x53554E57L, /* 'SUNW' */ 00397 icSigSGI = 0x53474920L, /* 'SGI ' */ 00398 icSigTaligent = 0x54474E54L, /* 'TGNT' */ 00399 icMaxEnumPlatform = 0xFFFFFFFFL /* enum = 4 bytes max */ 00400 } icPlatformSignature; 00401 00402 /*------------------------------------------------------------------------*/ 00403 /* 00404 * Other enums 00405 */ 00406 00407 /* Measurement Flare, used in the measurmentType tag */ 00408 typedef enum { 00409 icFlare0 = 0x00000000L, /* 0% flare */ 00410 icFlare100 = 0x00000001L, /* 100% flare */ 00411 icMaxFlare = 0xFFFFFFFFL /* enum = 4 bytes max */ 00412 } icMeasurementFlare; 00413 00414 /* Measurement Geometry, used in the measurmentType tag */ 00415 typedef enum { 00416 icGeometryUnknown = 0x00000000L, /* Unknown geometry */ 00417 icGeometry045or450 = 0x00000001L, /* 0/45 or 45/0 */ 00418 icGeometry0dord0 = 0x00000002L, /* 0/d or d/0 */ 00419 icMaxGeometry = 0xFFFFFFFFL /* enum = 4 bytes max */ 00420 } icMeasurementGeometry; 00421 00422 /* Rendering Intents, used in the profile header */ 00423 typedef enum { 00424 icPerceptual = 0, 00425 icRelativeColorimetric = 1, 00426 icSaturation = 2, 00427 icAbsoluteColorimetric = 3, 00428 icMaxEnumIntent = 0xFFFFFFFFL /* enum = 4 bytes max */ 00429 } icRenderingIntent; 00430 00431 /* Different Spot Shapes currently defined, used for screeningType */ 00432 typedef enum { 00433 icSpotShapeUnknown = 0, 00434 icSpotShapePrinterDefault = 1, 00435 icSpotShapeRound = 2, 00436 icSpotShapeDiamond = 3, 00437 icSpotShapeEllipse = 4, 00438 icSpotShapeLine = 5, 00439 icSpotShapeSquare = 6, 00440 icSpotShapeCross = 7, 00441 icMaxEnumSpot = 0xFFFFFFFFL /* enum = 4 bytes max */ 00442 } icSpotShape; 00443 00444 /* Standard Observer, used in the measurmentType tag */ 00445 typedef enum { 00446 icStdObsUnknown = 0x00000000L, /* Unknown observer */ 00447 icStdObs1931TwoDegrees = 0x00000001L, /* 1931 two degrees */ 00448 icStdObs1964TenDegrees = 0x00000002L, /* 1961 ten degrees */ 00449 icMaxStdObs = 0xFFFFFFFFL /* enum = 4 bytes max */ 00450 } icStandardObserver; 00451 00452 /* Pre-defined illuminants, used in measurement and viewing conditions type */ 00453 typedef enum { 00454 icIlluminantUnknown = 0x00000000L, 00455 icIlluminantD50 = 0x00000001L, 00456 icIlluminantD65 = 0x00000002L, 00457 icIlluminantD93 = 0x00000003L, 00458 icIlluminantF2 = 0x00000004L, 00459 icIlluminantD55 = 0x00000005L, 00460 icIlluminantA = 0x00000006L, 00461 icIlluminantEquiPowerE = 0x00000007L, /* Equi-Power (E) */ 00462 icIlluminantF8 = 0x00000008L, 00463 icMaxEnumIluminant = 0xFFFFFFFFL /* enum = 4 bytes max */ 00464 } icIlluminant; 00465 00466 00467 /*------------------------------------------------------------------------*/ 00468 /* 00469 * Arrays of numbers 00470 */ 00471 00472 /* Int8 Array */ 00473 typedef struct { 00474 icInt8Number data[icAny]; /* Variable array of values */ 00475 } icInt8Array; 00476 00477 /* UInt8 Array */ 00478 typedef struct { 00479 icUInt8Number data[icAny]; /* Variable array of values */ 00480 } icUInt8Array; 00481 00482 /* uInt16 Array */ 00483 typedef struct { 00484 icUInt16Number data[icAny]; /* Variable array of values */ 00485 } icUInt16Array; 00486 00487 /* Int16 Array */ 00488 typedef struct { 00489 icInt16Number data[icAny]; /* Variable array of values */ 00490 } icInt16Array; 00491 00492 /* uInt32 Array */ 00493 typedef struct { 00494 icUInt32Number data[icAny]; /* Variable array of values */ 00495 } icUInt32Array; 00496 00497 /* Int32 Array */ 00498 typedef struct { 00499 icInt32Number data[icAny]; /* Variable array of values */ 00500 } icInt32Array; 00501 00502 /* UInt64 Array */ 00503 typedef struct { 00504 icUInt64Number data[icAny]; /* Variable array of values */ 00505 } icUInt64Array; 00506 00507 /* Int64 Array */ 00508 typedef struct { 00509 icInt64Number data[icAny]; /* Variable array of values */ 00510 } icInt64Array; 00511 00512 /* u16Fixed16 Array */ 00513 typedef struct { 00514 icU16Fixed16Number data[icAny]; /* Variable array of values */ 00515 } icU16Fixed16Array; 00516 00517 /* s15Fixed16 Array */ 00518 typedef struct { 00519 icS15Fixed16Number data[icAny]; /* Variable array of values */ 00520 } icS15Fixed16Array; 00521 00522 /* The base date time number */ 00523 typedef struct { 00524 icUInt16Number year; 00525 icUInt16Number month; 00526 icUInt16Number day; 00527 icUInt16Number hours; 00528 icUInt16Number minutes; 00529 icUInt16Number seconds; 00530 } icDateTimeNumber; 00531 00532 /* XYZ Number */ 00533 typedef struct { 00534 icS15Fixed16Number X; 00535 icS15Fixed16Number Y; 00536 icS15Fixed16Number Z; 00537 } icXYZNumber; 00538 00539 /* XYZ Array */ 00540 typedef struct { 00541 icXYZNumber data[icAny]; /* Variable array of XYZ numbers */ 00542 } icXYZArray; 00543 00544 /* Curve */ 00545 typedef struct { 00546 icUInt32Number count; /* Number of entries */ 00547 icUInt16Number data[icAny]; /* The actual table data, real 00548 * number is determined by count 00549 * Interpretation depends on how 00550 * data is used with a given tag. 00551 */ 00552 } icCurve; 00553 00554 /* Data */ 00555 typedef struct { 00556 icUInt32Number dataFlag; /* 0 = ascii, 1 = binary */ 00557 icInt8Number data[icAny]; /* Data, size determined from tag */ 00558 } icData; 00559 00560 /* lut16 */ 00561 typedef struct { 00562 icUInt8Number inputChan; /* Number of input channels */ 00563 icUInt8Number outputChan; /* Number of output channels */ 00564 icUInt8Number clutPoints; /* Number of clutTable grid points */ 00565 icInt8Number pad; /* Padding for byte alignment */ 00566 icS15Fixed16Number e00; /* e00 in the 3 * 3 */ 00567 icS15Fixed16Number e01; /* e01 in the 3 * 3 */ 00568 icS15Fixed16Number e02; /* e02 in the 3 * 3 */ 00569 icS15Fixed16Number e10; /* e10 in the 3 * 3 */ 00570 icS15Fixed16Number e11; /* e11 in the 3 * 3 */ 00571 icS15Fixed16Number e12; /* e12 in the 3 * 3 */ 00572 icS15Fixed16Number e20; /* e20 in the 3 * 3 */ 00573 icS15Fixed16Number e21; /* e21 in the 3 * 3 */ 00574 icS15Fixed16Number e22; /* e22 in the 3 * 3 */ 00575 icUInt16Number inputEnt; /* Number of input table entries */ 00576 icUInt16Number outputEnt; /* Number of output table entries */ 00577 icUInt16Number data[icAny]; /* Data follows see spec for size */ 00578 /* 00579 * Data that follows is of this form 00580 * 00581 * icUInt16Number inputTable[inputChan][icAny]; * The input table 00582 * icUInt16Number clutTable[icAny]; * The clut table 00583 * icUInt16Number outputTable[outputChan][icAny]; * The output table 00584 */ 00585 } icLut16; 00586 00587 /* lut8, input & output tables are always 256 bytes in length */ 00588 typedef struct { 00589 icUInt8Number inputChan; /* Number of input channels */ 00590 icUInt8Number outputChan; /* Number of output channels */ 00591 icUInt8Number clutPoints; /* Number of clutTable grid points */ 00592 icInt8Number pad; 00593 icS15Fixed16Number e00; /* e00 in the 3 * 3 */ 00594 icS15Fixed16Number e01; /* e01 in the 3 * 3 */ 00595 icS15Fixed16Number e02; /* e02 in the 3 * 3 */ 00596 icS15Fixed16Number e10; /* e10 in the 3 * 3 */ 00597 icS15Fixed16Number e11; /* e11 in the 3 * 3 */ 00598 icS15Fixed16Number e12; /* e12 in the 3 * 3 */ 00599 icS15Fixed16Number e20; /* e20 in the 3 * 3 */ 00600 icS15Fixed16Number e21; /* e21 in the 3 * 3 */ 00601 icS15Fixed16Number e22; /* e22 in the 3 * 3 */ 00602 icUInt8Number data[icAny]; /* Data follows see spec for size */ 00603 /* 00604 * Data that follows is of this form 00605 * 00606 * icUInt8Number inputTable[inputChan][256]; * The input table 00607 * icUInt8Number clutTable[icAny]; * The clut table 00608 * icUInt8Number outputTable[outputChan][256]; * The output table 00609 */ 00610 } icLut8; 00611 00612 /* Measurement Data */ 00613 typedef struct { 00614 icStandardObserver stdObserver; /* Standard observer */ 00615 icXYZNumber backing; /* XYZ for backing material */ 00616 icMeasurementGeometry geometry; /* Measurement geometry */ 00617 icMeasurementFlare flare; /* Measurement flare */ 00618 icIlluminant illuminant; /* Illuminant */ 00619 } icMeasurement; 00620 00621 /* Named color */ 00622 00623 /* 00624 * icNamedColor2 takes the place of icNamedColor, approved at the 00625 * SIGGRAPH 95, ICC meeting. 00626 */ 00627 typedef struct { 00628 icUInt32Number vendorFlag; /* Bottom 16 bits for IC use */ 00629 icUInt32Number count; /* Count of named colors */ 00630 icUInt32Number nDeviceCoords; /* Number of device coordinates */ 00631 icInt8Number prefix[32]; /* Prefix for each color name */ 00632 icInt8Number suffix[32]; /* Suffix for each color name */ 00633 icInt8Number data[icAny]; /* Named color data follows */ 00634 /* 00635 * Data that follows is of this form 00636 * 00637 * icInt8Number root1[32]; * Root name for first color 00638 * icUInt16Number pcsCoords1[icAny]; * PCS coordinates of first color 00639 * icUInt16Number deviceCoords1[icAny]; * Device coordinates of first color 00640 * icInt8Number root2[32]; * Root name for second color 00641 * icUInt16Number pcsCoords2[icAny]; * PCS coordinates of first color 00642 * icUInt16Number deviceCoords2[icAny]; * Device coordinates of first color 00643 * : 00644 * : 00645 * Repeat for name and PCS and device color coordinates up to (count-1) 00646 * 00647 * NOTES: 00648 * PCS and device space can be determined from the header. 00649 * 00650 * PCS coordinates are icUInt16 numbers and are described in section 2.6 of 00651 * the ICC spec. Only 16 bit L*a*b* and XYZ are allowed. The number of 00652 * coordinates is consistent with the headers PCS. 00653 * 00654 * Device coordinates are icUInt16 numbers where 0x0000 represents 00655 * the minimum value and 0xFFFF represents the maximum value. 00656 * If the nDeviceCoords value is 0 this field is not given. 00657 */ 00658 } icNamedColor2; 00659 00660 /* Profile sequence structure */ 00661 typedef struct { 00662 icSignature deviceMfg; /* Device Manufacturer */ 00663 icSignature deviceModel; /* Decvice Model */ 00664 icUInt64Number attributes; /* Device attributes */ 00665 icTechnologySignature technology; /* Technology signature */ 00666 icInt8Number data[icAny]; /* Descriptions text follows */ 00667 /* 00668 * Data that follows is of this form, this is an icInt8Number 00669 * to avoid problems with a compiler generating bad code as 00670 * these arrays are variable in length. 00671 * 00672 * icTextDescription deviceMfgDesc; * Manufacturer text 00673 * icTextDescription modelDesc; * Model text 00674 */ 00675 } icDescStruct; 00676 00677 /* Profile sequence description */ 00678 typedef struct { 00679 icUInt32Number count; /* Number of descriptions */ 00680 icUInt8Number data[icAny]; /* Array of description struct */ 00681 } icProfileSequenceDesc; 00682 00683 /* textDescription */ 00684 typedef struct { 00685 icUInt32Number count; /* Description length */ 00686 icInt8Number data[icAny]; /* Descriptions follow */ 00687 /* 00688 * Data that follows is of this form 00689 * 00690 * icInt8Number desc[count] * NULL terminated ascii string 00691 * icUInt32Number ucLangCode; * UniCode language code 00692 * icUInt32Number ucCount; * UniCode description length 00693 * icInt16Number ucDesc[ucCount]; * The UniCode description 00694 * icUInt16Number scCode; * ScriptCode code 00695 * icUInt8Number scCount; * ScriptCode count 00696 * icInt8Number scDesc[67]; * ScriptCode Description 00697 */ 00698 } icTextDescription; 00699 00700 /* Screening Data */ 00701 typedef struct { 00702 icS15Fixed16Number frequency; /* Frequency */ 00703 icS15Fixed16Number angle; /* Screen angle */ 00704 icSpotShape spotShape; /* Spot Shape encodings below */ 00705 } icScreeningData; 00706 00707 typedef struct { 00708 icUInt32Number screeningFlag; /* Screening flag */ 00709 icUInt32Number channels; /* Number of channels */ 00710 icScreeningData data[icAny]; /* Array of screening data */ 00711 } icScreening; 00712 00713 /* Text Data */ 00714 typedef struct { 00715 icInt8Number data[icAny]; /* Variable array of characters */ 00716 } icText; 00717 00718 /* Structure describing either a UCR or BG curve */ 00719 typedef struct { 00720 icUInt32Number count; /* Curve length */ 00721 icUInt16Number curve[icAny]; /* The array of curve values */ 00722 } icUcrBgCurve; 00723 00724 /* Under color removal, black generation */ 00725 typedef struct { 00726 icInt8Number data[icAny]; /* The Ucr BG data */ 00727 /* 00728 * Data that follows is of this form, this is a icInt8Number 00729 * to avoid problems with a compiler generating bad code as 00730 * these arrays are variable in length. 00731 * 00732 * icUcrBgCurve ucr; * Ucr curve 00733 * icUcrBgCurve bg; * Bg curve 00734 * icInt8Number string; * UcrBg description 00735 */ 00736 } icUcrBg; 00737 00738 /* viewingConditionsType */ 00739 typedef struct { 00740 icXYZNumber illuminant; /* In candelas per metre sq'd */ 00741 icXYZNumber surround; /* In candelas per metre sq'd */ 00742 icIlluminant stdIluminant; /* See icIlluminant defines */ 00743 } icViewingCondition; 00744 00745 00746 /*------------------------------------------------------------------------*/ 00747 /* 00748 * Tag Type definitions 00749 */ 00750 00751 /* 00752 * Many of the structures contain variable length arrays. This 00753 * is represented by the use of the convention. 00754 * 00755 * type data[icAny]; 00756 */ 00757 00758 /* The base part of each tag */ 00759 typedef struct { 00760 icTagTypeSignature sig; /* Signature */ 00761 icInt8Number reserved[4]; /* Reserved, set to 0 */ 00762 } icTagBase; 00763 00764 /* curveType */ 00765 typedef struct { 00766 icTagBase base; /* Signature, "curv" */ 00767 icCurve curve; /* The curve data */ 00768 } icCurveType; 00769 00770 /* dataType */ 00771 typedef struct { 00772 icTagBase base; /* Signature, "data" */ 00773 icData data; /* The data structure */ 00774 } icDataType; 00775 00776 /* dateTimeType */ 00777 typedef struct { 00778 icTagBase base; /* Signature, "dtim" */ 00779 icDateTimeNumber date; /* The date */ 00780 } icDateTimeType; 00781 00782 /* lut16Type */ 00783 typedef struct { 00784 icTagBase base; /* Signature, "mft2" */ 00785 icLut16 lut; /* Lut16 data */ 00786 } icLut16Type; 00787 00788 /* lut8Type, input & output tables are always 256 bytes in length */ 00789 typedef struct { 00790 icTagBase base; /* Signature, "mft1" */ 00791 icLut8 lut; /* Lut8 data */ 00792 } icLut8Type; 00793 00794 /* Measurement Type */ 00795 typedef struct { 00796 icTagBase base; /* Signature, "meas" */ 00797 icMeasurement measurement; /* Measurement data */ 00798 } icMeasurementType; 00799 00800 /* Named color type */ 00801 /* icNamedColor2Type, replaces icNamedColorType */ 00802 typedef struct { 00803 icTagBase base; /* Signature, "ncl2" */ 00804 icNamedColor2 ncolor; /* Named color data */ 00805 } icNamedColor2Type; 00806 00807 /* Profile sequence description type */ 00808 typedef struct { 00809 icTagBase base; /* Signature, "pseq" */ 00810 icProfileSequenceDesc desc; /* The seq description */ 00811 } icProfileSequenceDescType; 00812 00813 /* textDescriptionType */ 00814 typedef struct { 00815 icTagBase base; /* Signature, "desc" */ 00816 icTextDescription desc; /* The description */ 00817 } icTextDescriptionType; 00818 00819 /* s15Fixed16Type */ 00820 typedef struct { 00821 icTagBase base; /* Signature, "sf32" */ 00822 icS15Fixed16Array data; /* Array of values */ 00823 } icS15Fixed16ArrayType; 00824 00825 typedef struct { 00826 icTagBase base; /* Signature, "scrn" */ 00827 icScreening screen; /* Screening structure */ 00828 } icScreeningType; 00829 00830 /* sigType */ 00831 typedef struct { 00832 icTagBase base; /* Signature, "sig" */ 00833 icSignature signature; /* The signature data */ 00834 } icSignatureType; 00835 00836 /* textType */ 00837 typedef struct { 00838 icTagBase base; /* Signature, "text" */ 00839 icText data; /* Variable array of characters */ 00840 } icTextType; 00841 00842 /* u16Fixed16Type */ 00843 typedef struct { 00844 icTagBase base; /* Signature, "uf32" */ 00845 icU16Fixed16Array data; /* Variable array of values */ 00846 } icU16Fixed16ArrayType; 00847 00848 /* Under color removal, black generation type */ 00849 typedef struct { 00850 icTagBase base; /* Signature, "bfd " */ 00851 icUcrBg data; /* ucrBg structure */ 00852 } icUcrBgType; 00853 00854 /* uInt16Type */ 00855 typedef struct { 00856 icTagBase base; /* Signature, "ui16" */ 00857 icUInt16Array data; /* Variable array of values */ 00858 } icUInt16ArrayType; 00859 00860 /* uInt32Type */ 00861 typedef struct { 00862 icTagBase base; /* Signature, "ui32" */ 00863 icUInt32Array data; /* Variable array of values */ 00864 } icUInt32ArrayType; 00865 00866 /* uInt64Type */ 00867 typedef struct { 00868 icTagBase base; /* Signature, "ui64" */ 00869 icUInt64Array data; /* Variable array of values */ 00870 } icUInt64ArrayType; 00871 00872 /* uInt8Type */ 00873 typedef struct { 00874 icTagBase base; /* Signature, "ui08" */ 00875 icUInt8Array data; /* Variable array of values */ 00876 } icUInt8ArrayType; 00877 00878 /* viewingConditionsType */ 00879 typedef struct { 00880 icTagBase base; /* Signature, "view" */ 00881 icViewingCondition view; /* Viewing conditions */ 00882 } icViewingConditionType; 00883 00884 /* XYZ Type */ 00885 typedef struct { 00886 icTagBase base; /* Signature, "XYZ" */ 00887 icXYZArray data; /* Variable array of XYZ numbers */ 00888 } icXYZType; 00889 00890 /*------------------------------------------------------------------------*/ 00891 00892 /* 00893 * Lists of tags, tags, profile header and profile strcuture 00894 */ 00895 00896 /* A tag */ 00897 typedef struct { 00898 icTagSignature sig; /* The tag signature */ 00899 icUInt32Number offset; /* Start of tag relative to 00900 * start of header, Spec Section 8 */ 00901 icUInt32Number size; /* Size in bytes */ 00902 } icTag; 00903 00904 /* A Structure that may be used independently for a list of tags */ 00905 typedef struct { 00906 icUInt32Number count; /* Number of tags in the profile */ 00907 icTag tags[icAny]; /* Variable array of tags */ 00908 } icTagList; 00909 00910 /* The Profile header */ 00911 typedef struct { 00912 icUInt32Number size; /* Profile size in bytes */ 00913 icSignature cmmId; /* CMM for this profile */ 00914 icUInt32Number version; /* Format version number */ 00915 icProfileClassSignature deviceClass; /* Type of profile */ 00916 icColorSpaceSignature colorSpace; /* Color space of data */ 00917 icColorSpaceSignature pcs; /* PCS, XYZ or Lab only */ 00918 icDateTimeNumber date; /* Date profile was created */ 00919 icSignature magic; /* icMagicNumber */ 00920 icPlatformSignature platform; /* Primary Platform */ 00921 icUInt32Number flags; /* Various bit settings */ 00922 icSignature manufacturer; /* Device manufacturer */ 00923 icUInt32Number model; /* Device model number */ 00924 icUInt64Number attributes; /* Device attributes */ 00925 icUInt32Number renderingIntent; /* Rendering intent */ 00926 icXYZNumber illuminant; /* Profile illuminant */ 00927 icSignature creator; /* profile creator */ 00928 icInt8Number reserved[44]; /* Reserved for future use */ 00929 } icHeader; 00930 00931 /* 00932 * A profile, 00933 * we can't use icTagList here because its not at the end of the structure 00934 */ 00935 typedef struct { 00936 icHeader header; /* The header */ 00937 icTagList tagList; /* WERNER */ 00938 /* Original: 00939 icHeader header; The header 00940 icUInt32Number count; Number of tags in the profile 00941 icInt8Number data[icAny]; The tagTable and tagData */ 00942 /* 00943 * Data that follows is of the form 00944 * 00945 * icTag tagTable[icAny]; * The tag table 00946 * icInt8Number tagData[icAny]; * The tag data 00947 */ 00948 } icProfile; 00949 00950 /*------------------------------------------------------------------------*/ 00951 /* Obsolete entries */ 00952 00953 /* icNamedColor was replaced with icNamedColor2 */ 00954 typedef struct { 00955 icUInt32Number vendorFlag; /* Bottom 16 bits for IC use */ 00956 icUInt32Number count; /* Count of named colors */ 00957 icInt8Number data[icAny]; /* Named color data follows */ 00958 /* 00959 * Data that follows is of this form 00960 * 00961 * icInt8Number prefix[icAny]; * Prefix for the color name, max = 32 00962 * icInt8Number suffix[icAny]; * Suffix for the color name, max = 32 00963 * icInt8Number root1[icAny]; * Root name for first color, max = 32 00964 * icInt8Number coords1[icAny]; * Color coordinates of first color 00965 * icInt8Number root2[icAny]; * Root name for first color, max = 32 00966 * icInt8Number coords2[icAny]; * Color coordinates of first color 00967 * : 00968 * : 00969 * Repeat for root name and color coordinates up to (count-1) 00970 */ 00971 } icNamedColor; 00972 00973 /* icNamedColorType was replaced by icNamedColor2Type */ 00974 typedef struct { 00975 icTagBase base; /* Signature, "ncol" */ 00976 icNamedColor ncolor; /* Named color data */ 00977 } icNamedColorType; 00978 00979 #endif /* ICC_H */ 00980 00981

Generated on Sat May 15 19:41:29 2004 for test by doxygen 1.3.7