| /* |
| * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| * |
| * This code is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 only, as |
| * published by the Free Software Foundation. Oracle designates this |
| * particular file as subject to the "Classpath" exception as provided |
| * by Oracle in the LICENSE file that accompanied this code. |
| * |
| * This code is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| * version 2 for more details (a copy is included in the LICENSE file that |
| * accompanied this code). |
| * |
| * You should have received a copy of the GNU General Public License version |
| * 2 along with this work; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| * or visit www.oracle.com if you need additional information or have any |
| * questions. |
| */ |
| |
| /* Header file guard bands */ |
| #ifndef ICC_H |
| #define ICC_H |
| |
| /* |
| * This version of the header file corresponds to the profile |
| * specification version 3.4. |
| * |
| * All header file entries are pre-fixed with "ic" to help |
| * avoid name space collisions. Signatures are pre-fixed with |
| * icSig. |
| * |
| * The structures defined in this header file were created to |
| * represent a description of an ICC profile on disk. Rather |
| * than use pointers a technique is used where a single byte array |
| * was placed at the end of each structure. This allows us in "C" |
| * to extend the structure by allocating more data than is needed |
| * to account for variable length structures. |
| * |
| * This also ensures that data following is allocated |
| * contiguously and makes it easier to write and read data from |
| * the file. |
| * |
| * For example to allocate space for a 256 count length UCR |
| * and BG array, and fill the allocated data. Note strlen + 1 |
| * to remember NULL terminator. |
| * |
| icUcrBgCurve *ucrCurve, *bgCurve; |
| int ucr_nbytes, bg_nbytes, string_bytes; |
| icUcrBg *ucrBgWrite; |
| char ucr_string[100], *ucr_char; |
| |
| strcpy(ucr_string, "Example ucrBG curves"); |
| ucr_nbytes = sizeof(icUInt32Number) + |
| (UCR_CURVE_SIZE * sizeof(icUInt16Number)); |
| bg_nbytes = sizeof(icUInt32Number) + |
| (BG_CURVE_SIZE * sizeof(icUInt16Number)); |
| string_bytes = strlen(ucr_string) + 1; |
| |
| ucrBgWrite = (icUcrBg *)malloc( |
| (ucr_nbytes + bg_nbytes + string_bytes)); |
| |
| ucrCurve = (icUcrBgCurve *)ucrBgWrite->data; |
| ucrCurve->count = UCR_CURVE_SIZE; |
| for (i=0; i<ucrCurve->count; i++) |
| ucrCurve->curve[i] = (icUInt16Number)i; |
| |
| bgCurve = (icUcrBgCurve *)((char *)ucrCurve + ucr_nbytes); |
| bgCurve->count = BG_CURVE_SIZE; |
| for (i=0; i<bgCurve->count; i++) |
| bgCurve->curve[i] = 255 - (icUInt16Number)i; |
| |
| ucr_char = (char *)((char *)bgCurve + bg_nbytes); |
| memcpy(ucr_char, ucr_string, string_bytes); |
| * |
| */ |
| |
| /* |
| * Many of the structures contain variable length arrays. This |
| * is represented by the use of the convention. |
| * |
| * type data[icAny]; |
| */ |
| |
| /*------------------------------------------------------------------------*/ |
| /* |
| * Defines used in the specification |
| */ |
| #define icMagicNumber 0x61637370L /* 'acsp' */ |
| #define icVersionNumber 0x02100000L /* 2.1.0, BCD */ |
| |
| /* Screening Encodings */ |
| #define icPrtrDefaultScreensFalse 0x00000000L /* Bit pos 0 */ |
| #define icPrtrDefaultScreensTrue 0x00000001L /* Bit pos 0 */ |
| #define icLinesPerInch 0x00000002L /* Bit pos 1 */ |
| #define icLinesPerCm 0x00000000L /* Bit pos 1 */ |
| |
| /* |
| * Device attributes, currently defined values correspond |
| * to the low 4 bytes of the 8 byte attribute quantity, see |
| * the header for their location. |
| */ |
| #define icReflective 0x00000000L /* Bit pos 0 */ |
| #define icTransparency 0x00000001L /* Bit pos 0 */ |
| #define icGlossy 0x00000000L /* Bit pos 1 */ |
| #define icMatte 0x00000002L /* Bit pos 1 */ |
| |
| /* |
| * Profile header flags, the low 16 bits are reserved for consortium |
| * use. |
| */ |
| #define icEmbeddedProfileFalse 0x00000000L /* Bit pos 0 */ |
| #define icEmbeddedProfileTrue 0x00000001L /* Bit pos 0 */ |
| #define icUseAnywhere 0x00000000L /* Bit pos 1 */ |
| #define icUseWithEmbeddedDataOnly 0x00000002L /* Bit pos 1 */ |
| |
| /* Ascii or Binary data */ |
| #define icAsciiData 0x00000000L |
| #define icBinaryData 0x00000001L |
| |
| /* |
| * Define used to indicate that this is a variable length array |
| */ |
| #define icAny 1 |
| |
| |
| /*------------------------------------------------------------------------*/ |
| /* |
| * Use this area to translate platform definitions of long |
| * etc into icXXX form. The rest of the header uses the icXXX |
| * typedefs. Signatures are 4 byte quantities. |
| * |
| */ |
| |
| |
| #ifdef PACKAGE_NAME |
| /* |
| June 9, 2003, Adapted for use with configure by Bob Friesenhahn |
| Added the stupid check for autoconf by Marti Maria. |
| PACKAGE_NAME is defined if autoconf is being used |
| */ |
| |
| typedef @UINT8_T@ icUInt8Number; |
| typedef @UINT16_T@ icUInt16Number; |
| typedef @UINT32_T@ icUInt32Number; |
| typedef @UINT32_T@ icUInt64Number[2]; |
| |
| typedef @INT8_T@ icInt8Number; |
| typedef @INT16_T@ icInt16Number; |
| typedef @INT32_T@ icInt32Number; |
| typedef @INT32_T@ icInt64Number[2]; |
| |
| #else |
| |
| /* |
| *Apr-17-2002: Modified by Marti Maria in order to provide wider portability. |
| */ |
| |
| #if defined (__digital__) && defined (__unix__) |
| |
| /* Tru64 */ |
| |
| #include <inttypes.h> |
| |
| typedef uint8_t icUInt8Number; |
| typedef uint16_t icUInt16Number; |
| typedef uint32_t icUInt32Number; |
| typedef uint32_t icUInt64Number[2]; |
| |
| typedef int8_t icInt8Number; |
| typedef int16_t icInt16Number; |
| typedef int32_t icInt32Number; |
| typedef int32_t icInt64Number[2]; |
| |
| #else |
| #ifdef __sgi |
| #include "sgidefs.h" |
| |
| |
| /* |
| * Number definitions |
| */ |
| |
| /* Unsigned integer numbers */ |
| typedef unsigned char icUInt8Number; |
| typedef unsigned short icUInt16Number; |
| typedef __uint32_t icUInt32Number; |
| typedef __uint32_t icUInt64Number[2]; |
| |
| /* Signed numbers */ |
| typedef char icInt8Number; |
| typedef short icInt16Number; |
| typedef __int32_t icInt32Number; |
| typedef __int32_t icInt64Number[2]; |
| |
| |
| #else |
| #if defined(__GNUC__) || defined(__unix__) || defined(__unix) |
| |
| #include <sys/types.h> |
| |
| #if defined(__sun) || defined(__hpux) || defined (__MINGW) || defined(__MINGW32__) |
| |
| #if defined (__MINGW) || defined(__MINGW32__) |
| #include <stdint.h> |
| #endif |
| |
| |
| typedef uint8_t icUInt8Number; |
| typedef uint16_t icUInt16Number; |
| typedef uint32_t icUInt32Number; |
| typedef uint32_t icUInt64Number[2]; |
| |
| #else |
| |
| /* Unsigned integer numbers */ |
| typedef u_int8_t icUInt8Number; |
| typedef u_int16_t icUInt16Number; |
| typedef u_int32_t icUInt32Number; |
| typedef u_int32_t icUInt64Number[2]; |
| |
| #endif |
| |
| |
| /* Signed numbers */ |
| typedef int8_t icInt8Number; |
| typedef int16_t icInt16Number; |
| typedef int32_t icInt32Number; |
| typedef int32_t icInt64Number[2]; |
| |
| |
| #else /* default definitions */ |
| |
| /* |
| * Number definitions |
| */ |
| |
| /* Unsigned integer numbers */ |
| typedef unsigned char icUInt8Number; |
| typedef unsigned short icUInt16Number; |
| typedef unsigned long icUInt32Number; |
| typedef unsigned long icUInt64Number[2]; |
| |
| /* Signed numbers */ |
| typedef char icInt8Number; |
| typedef short icInt16Number; |
| typedef long icInt32Number; |
| typedef long icInt64Number[2]; |
| |
| |
| #endif /* default defs */ |
| #endif |
| #endif |
| #endif |
| |
| /* Base types */ |
| |
| typedef icInt32Number icSignature; |
| typedef icInt32Number icS15Fixed16Number; |
| typedef icUInt32Number icU16Fixed16Number; |
| |
| |
| /*------------------------------------------------------------------------*/ |
| /* public tags and sizes */ |
| typedef enum { |
| icSigAToB0Tag = 0x41324230L, /* 'A2B0' */ |
| icSigAToB1Tag = 0x41324231L, /* 'A2B1' */ |
| icSigAToB2Tag = 0x41324232L, /* 'A2B2' */ |
| icSigBlueColorantTag = 0x6258595AL, /* 'bXYZ' */ |
| icSigBlueTRCTag = 0x62545243L, /* 'bTRC' */ |
| icSigBToA0Tag = 0x42324130L, /* 'B2A0' */ |
| icSigBToA1Tag = 0x42324131L, /* 'B2A1' */ |
| icSigBToA2Tag = 0x42324132L, /* 'B2A2' */ |
| icSigCalibrationDateTimeTag = 0x63616C74L, /* 'calt' */ |
| icSigCharTargetTag = 0x74617267L, /* 'targ' */ |
| icSigCopyrightTag = 0x63707274L, /* 'cprt' */ |
| icSigCrdInfoTag = 0x63726469L, /* 'crdi' */ |
| icSigDeviceMfgDescTag = 0x646D6E64L, /* 'dmnd' */ |
| icSigDeviceModelDescTag = 0x646D6464L, /* 'dmdd' */ |
| icSigGamutTag = 0x67616D74L, /* 'gamt ' */ |
| icSigGrayTRCTag = 0x6b545243L, /* 'kTRC' */ |
| icSigGreenColorantTag = 0x6758595AL, /* 'gXYZ' */ |
| icSigGreenTRCTag = 0x67545243L, /* 'gTRC' */ |
| icSigLuminanceTag = 0x6C756d69L, /* 'lumi' */ |
| icSigMeasurementTag = 0x6D656173L, /* 'meas' */ |
| icSigMediaBlackPointTag = 0x626B7074L, /* 'bkpt' */ |
| icSigMediaWhitePointTag = 0x77747074L, /* 'wtpt' */ |
| icSigNamedColorTag = 0x6E636f6CL, /* 'ncol' |
| * OBSOLETE, use ncl2 */ |
| icSigNamedColor2Tag = 0x6E636C32L, /* 'ncl2' */ |
| icSigPreview0Tag = 0x70726530L, /* 'pre0' */ |
| icSigPreview1Tag = 0x70726531L, /* 'pre1' */ |
| icSigPreview2Tag = 0x70726532L, /* 'pre2' */ |
| icSigProfileDescriptionTag = 0x64657363L, /* 'desc' */ |
| icSigProfileSequenceDescTag = 0x70736571L, /* 'pseq' */ |
| icSigPs2CRD0Tag = 0x70736430L, /* 'psd0' */ |
| icSigPs2CRD1Tag = 0x70736431L, /* 'psd1' */ |
| icSigPs2CRD2Tag = 0x70736432L, /* 'psd2' */ |
| icSigPs2CRD3Tag = 0x70736433L, /* 'psd3' */ |
| icSigPs2CSATag = 0x70733273L, /* 'ps2s' */ |
| icSigPs2RenderingIntentTag = 0x70733269L, /* 'ps2i' */ |
| icSigRedColorantTag = 0x7258595AL, /* 'rXYZ' */ |
| icSigRedTRCTag = 0x72545243L, /* 'rTRC' */ |
| icSigScreeningDescTag = 0x73637264L, /* 'scrd' */ |
| icSigScreeningTag = 0x7363726EL, /* 'scrn' */ |
| icSigTechnologyTag = 0x74656368L, /* 'tech' */ |
| icSigUcrBgTag = 0x62666420L, /* 'bfd ' */ |
| icSigViewingCondDescTag = 0x76756564L, /* 'vued' */ |
| icSigViewingConditionsTag = 0x76696577L, /* 'view' */ |
| icMaxEnumTag = 0xFFFFFFFFL |
| } icTagSignature; |
| |
| /* technology signature descriptions */ |
| typedef enum { |
| icSigDigitalCamera = 0x6463616DL, /* 'dcam' */ |
| icSigFilmScanner = 0x6673636EL, /* 'fscn' */ |
| icSigReflectiveScanner = 0x7273636EL, /* 'rscn' */ |
| icSigInkJetPrinter = 0x696A6574L, /* 'ijet' */ |
| icSigThermalWaxPrinter = 0x74776178L, /* 'twax' */ |
| icSigElectrophotographicPrinter = 0x6570686FL, /* 'epho' */ |
| icSigElectrostaticPrinter = 0x65737461L, /* 'esta' */ |
| icSigDyeSublimationPrinter = 0x64737562L, /* 'dsub' */ |
| icSigPhotographicPaperPrinter = 0x7270686FL, /* 'rpho' */ |
| icSigFilmWriter = 0x6670726EL, /* 'fprn' */ |
| icSigVideoMonitor = 0x7669646DL, /* 'vidm' */ |
| icSigVideoCamera = 0x76696463L, /* 'vidc' */ |
| icSigProjectionTelevision = 0x706A7476L, /* 'pjtv' */ |
| icSigCRTDisplay = 0x43525420L, /* 'CRT ' */ |
| icSigPMDisplay = 0x504D4420L, /* 'PMD ' */ |
| icSigAMDisplay = 0x414D4420L, /* 'AMD ' */ |
| icSigPhotoCD = 0x4B504344L, /* 'KPCD' */ |
| icSigPhotoImageSetter = 0x696D6773L, /* 'imgs' */ |
| icSigGravure = 0x67726176L, /* 'grav' */ |
| icSigOffsetLithography = 0x6F666673L, /* 'offs' */ |
| icSigSilkscreen = 0x73696C6BL, /* 'silk' */ |
| icSigFlexography = 0x666C6578L, /* 'flex' */ |
| icMaxEnumTechnology = 0xFFFFFFFFL |
| } icTechnologySignature; |
| |
| /* type signatures */ |
| typedef enum { |
| icSigCurveType = 0x63757276L, /* 'curv' */ |
| icSigDataType = 0x64617461L, /* 'data' */ |
| icSigDateTimeType = 0x6474696DL, /* 'dtim' */ |
| icSigLut16Type = 0x6d667432L, /* 'mft2' */ |
| icSigLut8Type = 0x6d667431L, /* 'mft1' */ |
| icSigMeasurementType = 0x6D656173L, /* 'meas' */ |
| icSigNamedColorType = 0x6E636f6CL, /* 'ncol' |
| * OBSOLETE, use ncl2 */ |
| icSigProfileSequenceDescType = 0x70736571L, /* 'pseq' */ |
| icSigS15Fixed16ArrayType = 0x73663332L, /* 'sf32' */ |
| icSigScreeningType = 0x7363726EL, /* 'scrn' */ |
| icSigSignatureType = 0x73696720L, /* 'sig ' */ |
| icSigTextType = 0x74657874L, /* 'text' */ |
| icSigTextDescriptionType = 0x64657363L, /* 'desc' */ |
| icSigU16Fixed16ArrayType = 0x75663332L, /* 'uf32' */ |
| icSigUcrBgType = 0x62666420L, /* 'bfd ' */ |
| icSigUInt16ArrayType = 0x75693136L, /* 'ui16' */ |
| icSigUInt32ArrayType = 0x75693332L, /* 'ui32' */ |
| icSigUInt64ArrayType = 0x75693634L, /* 'ui64' */ |
| icSigUInt8ArrayType = 0x75693038L, /* 'ui08' */ |
| icSigViewingConditionsType = 0x76696577L, /* 'view' */ |
| icSigXYZType = 0x58595A20L, /* 'XYZ ' */ |
| icSigXYZArrayType = 0x58595A20L, /* 'XYZ ' */ |
| icSigNamedColor2Type = 0x6E636C32L, /* 'ncl2' */ |
| icSigCrdInfoType = 0x63726469L, /* 'crdi' */ |
| icMaxEnumType = 0xFFFFFFFFL |
| } icTagTypeSignature; |
| |
| /* |
| * Color Space Signatures |
| * Note that only icSigXYZData and icSigLabData are valid |
| * Profile Connection Spaces (PCSs) |
| */ |
| typedef enum { |
| icSigXYZData = 0x58595A20L, /* 'XYZ ' */ |
| icSigLabData = 0x4C616220L, /* 'Lab ' */ |
| icSigLuvData = 0x4C757620L, /* 'Luv ' */ |
| icSigYCbCrData = 0x59436272L, /* 'YCbr' */ |
| icSigYxyData = 0x59787920L, /* 'Yxy ' */ |
| icSigRgbData = 0x52474220L, /* 'RGB ' */ |
| icSigGrayData = 0x47524159L, /* 'GRAY' */ |
| icSigHsvData = 0x48535620L, /* 'HSV ' */ |
| icSigHlsData = 0x484C5320L, /* 'HLS ' */ |
| icSigCmykData = 0x434D594BL, /* 'CMYK' */ |
| icSigCmyData = 0x434D5920L, /* 'CMY ' */ |
| icSig2colorData = 0x32434C52L, /* '2CLR' */ |
| icSig3colorData = 0x33434C52L, /* '3CLR' */ |
| icSig4colorData = 0x34434C52L, /* '4CLR' */ |
| icSig5colorData = 0x35434C52L, /* '5CLR' */ |
| icSig6colorData = 0x36434C52L, /* '6CLR' */ |
| icSig7colorData = 0x37434C52L, /* '7CLR' */ |
| icSig8colorData = 0x38434C52L, /* '8CLR' */ |
| icSig9colorData = 0x39434C52L, /* '9CLR' */ |
| icSig10colorData = 0x41434C52L, /* 'ACLR' */ |
| icSig11colorData = 0x42434C52L, /* 'BCLR' */ |
| icSig12colorData = 0x43434C52L, /* 'CCLR' */ |
| icSig13colorData = 0x44434C52L, /* 'DCLR' */ |
| icSig14colorData = 0x45434C52L, /* 'ECLR' */ |
| icSig15colorData = 0x46434C52L, /* 'FCLR' */ |
| icMaxEnumData = 0xFFFFFFFFL |
| } icColorSpaceSignature; |
| |
| /* profileClass enumerations */ |
| typedef enum { |
| icSigInputClass = 0x73636E72L, /* 'scnr' */ |
| icSigDisplayClass = 0x6D6E7472L, /* 'mntr' */ |
| icSigOutputClass = 0x70727472L, /* 'prtr' */ |
| icSigLinkClass = 0x6C696E6BL, /* 'link' */ |
| icSigAbstractClass = 0x61627374L, /* 'abst' */ |
| icSigColorSpaceClass = 0x73706163L, /* 'spac' */ |
| icSigNamedColorClass = 0x6e6d636cL, /* 'nmcl' */ |
| icMaxEnumClass = 0xFFFFFFFFL |
| } icProfileClassSignature; |
| |
| /* Platform Signatures */ |
| typedef enum { |
| icSigMacintosh = 0x4150504CL, /* 'APPL' */ |
| icSigMicrosoft = 0x4D534654L, /* 'MSFT' */ |
| icSigSolaris = 0x53554E57L, /* 'SUNW' */ |
| icSigSGI = 0x53474920L, /* 'SGI ' */ |
| icSigTaligent = 0x54474E54L, /* 'TGNT' */ |
| icMaxEnumPlatform = 0xFFFFFFFFL |
| } icPlatformSignature; |
| |
| /*------------------------------------------------------------------------*/ |
| /* |
| * Other enums |
| */ |
| |
| /* Measurement Flare, used in the measurmentType tag */ |
| typedef enum { |
| icFlare0 = 0x00000000L, /* 0% flare */ |
| icFlare100 = 0x00000001L, /* 100% flare */ |
| icMaxFlare = 0xFFFFFFFFL |
| } icMeasurementFlare; |
| |
| /* Measurement Geometry, used in the measurmentType tag */ |
| typedef enum { |
| icGeometryUnknown = 0x00000000L, /* Unknown */ |
| icGeometry045or450 = 0x00000001L, /* 0/45, 45/0 */ |
| icGeometry0dord0 = 0x00000002L, /* 0/d or d/0 */ |
| icMaxGeometry = 0xFFFFFFFFL |
| } icMeasurementGeometry; |
| |
| /* Rendering Intents, used in the profile header */ |
| typedef enum { |
| icPerceptual = 0, |
| icRelativeColorimetric = 1, |
| icSaturation = 2, |
| icAbsoluteColorimetric = 3, |
| icMaxEnumIntent = 0xFFFFFFFFL |
| } icRenderingIntent; |
| |
| /* Different Spot Shapes currently defined, used for screeningType */ |
| typedef enum { |
| icSpotShapeUnknown = 0, |
| icSpotShapePrinterDefault = 1, |
| icSpotShapeRound = 2, |
| icSpotShapeDiamond = 3, |
| icSpotShapeEllipse = 4, |
| icSpotShapeLine = 5, |
| icSpotShapeSquare = 6, |
| icSpotShapeCross = 7, |
| icMaxEnumSpot = 0xFFFFFFFFL |
| } icSpotShape; |
| |
| /* Standard Observer, used in the measurmentType tag */ |
| typedef enum { |
| icStdObsUnknown = 0x00000000L, /* Unknown */ |
| icStdObs1931TwoDegrees = 0x00000001L, /* 2 deg */ |
| icStdObs1964TenDegrees = 0x00000002L, /* 10 deg */ |
| icMaxStdObs = 0xFFFFFFFFL |
| } icStandardObserver; |
| |
| /* Pre-defined illuminants, used in measurement and viewing conditions type */ |
| typedef enum { |
| icIlluminantUnknown = 0x00000000L, |
| icIlluminantD50 = 0x00000001L, |
| icIlluminantD65 = 0x00000002L, |
| icIlluminantD93 = 0x00000003L, |
| icIlluminantF2 = 0x00000004L, |
| icIlluminantD55 = 0x00000005L, |
| icIlluminantA = 0x00000006L, |
| icIlluminantEquiPowerE = 0x00000007L, |
| icIlluminantF8 = 0x00000008L, |
| icMaxEnumIluminant = 0xFFFFFFFFL |
| } icIlluminant; |
| |
| |
| /*------------------------------------------------------------------------*/ |
| /* |
| * Arrays of numbers |
| */ |
| |
| /* Int8 Array */ |
| typedef struct { |
| icInt8Number data[icAny]; /* Variable array of values */ |
| } icInt8Array; |
| |
| /* UInt8 Array */ |
| typedef struct { |
| icUInt8Number data[icAny]; /* Variable array of values */ |
| } icUInt8Array; |
| |
| /* uInt16 Array */ |
| typedef struct { |
| icUInt16Number data[icAny]; /* Variable array of values */ |
| } icUInt16Array; |
| |
| /* Int16 Array */ |
| typedef struct { |
| icInt16Number data[icAny]; /* Variable array of values */ |
| } icInt16Array; |
| |
| /* uInt32 Array */ |
| typedef struct { |
| icUInt32Number data[icAny]; /* Variable array of values */ |
| } icUInt32Array; |
| |
| /* Int32 Array */ |
| typedef struct { |
| icInt32Number data[icAny]; /* Variable array of values */ |
| } icInt32Array; |
| |
| /* UInt64 Array */ |
| typedef struct { |
| icUInt64Number data[icAny]; /* Variable array of values */ |
| } icUInt64Array; |
| |
| /* Int64 Array */ |
| typedef struct { |
| icInt64Number data[icAny]; /* Variable array of values */ |
| } icInt64Array; |
| |
| /* u16Fixed16 Array */ |
| typedef struct { |
| icU16Fixed16Number data[icAny]; /* Variable array of values */ |
| } icU16Fixed16Array; |
| |
| /* s15Fixed16 Array */ |
| typedef struct { |
| icS15Fixed16Number data[icAny]; /* Variable array of values */ |
| } icS15Fixed16Array; |
| |
| /* The base date time number */ |
| typedef struct { |
| icUInt16Number year; |
| icUInt16Number month; |
| icUInt16Number day; |
| icUInt16Number hours; |
| icUInt16Number minutes; |
| icUInt16Number seconds; |
| } icDateTimeNumber; |
| |
| /* XYZ Number */ |
| typedef struct { |
| icS15Fixed16Number X; |
| icS15Fixed16Number Y; |
| icS15Fixed16Number Z; |
| } icXYZNumber; |
| |
| /* XYZ Array */ |
| typedef struct { |
| icXYZNumber data[icAny]; /* Variable array of XYZ numbers */ |
| } icXYZArray; |
| |
| /* Curve */ |
| typedef struct { |
| icUInt32Number count; /* Number of entries */ |
| icUInt16Number data[icAny]; /* The actual table data, real |
| * number is determined by count |
| * Interpretation depends on how |
| * data is used with a given tag |
| */ |
| } icCurve; |
| |
| /* Data */ |
| typedef struct { |
| icUInt32Number dataFlag; /* 0 = ascii, 1 = binary */ |
| icInt8Number data[icAny]; /* Data, size from tag */ |
| } icData; |
| |
| /* lut16 */ |
| typedef struct { |
| icUInt8Number inputChan; /* Number of input channels */ |
| icUInt8Number outputChan; /* Number of output channels */ |
| icUInt8Number clutPoints; /* Number of grid points */ |
| icInt8Number pad; /* Padding for byte alignment */ |
| icS15Fixed16Number e00; /* e00 in the 3 * 3 */ |
| icS15Fixed16Number e01; /* e01 in the 3 * 3 */ |
| icS15Fixed16Number e02; /* e02 in the 3 * 3 */ |
| icS15Fixed16Number e10; /* e10 in the 3 * 3 */ |
| icS15Fixed16Number e11; /* e11 in the 3 * 3 */ |
| icS15Fixed16Number e12; /* e12 in the 3 * 3 */ |
| icS15Fixed16Number e20; /* e20 in the 3 * 3 */ |
| icS15Fixed16Number e21; /* e21 in the 3 * 3 */ |
| icS15Fixed16Number e22; /* e22 in the 3 * 3 */ |
| icUInt16Number inputEnt; /* Num of in-table entries */ |
| icUInt16Number outputEnt; /* Num of out-table entries */ |
| icUInt16Number data[icAny]; /* Data follows see spec */ |
| /* |
| * Data that follows is of this form |
| * |
| * icUInt16Number inputTable[inputChan][icAny]; * The in-table |
| * icUInt16Number clutTable[icAny]; * The clut |
| * icUInt16Number outputTable[outputChan][icAny]; * The out-table |
| */ |
| } icLut16; |
| |
| /* lut8, input & output tables are always 256 bytes in length */ |
| typedef struct { |
| icUInt8Number inputChan; /* Num of input channels */ |
| icUInt8Number outputChan; /* Num of output channels */ |
| icUInt8Number clutPoints; /* Num of grid points */ |
| icInt8Number pad; |
| icS15Fixed16Number e00; /* e00 in the 3 * 3 */ |
| icS15Fixed16Number e01; /* e01 in the 3 * 3 */ |
| icS15Fixed16Number e02; /* e02 in the 3 * 3 */ |
| icS15Fixed16Number e10; /* e10 in the 3 * 3 */ |
| icS15Fixed16Number e11; /* e11 in the 3 * 3 */ |
| icS15Fixed16Number e12; /* e12 in the 3 * 3 */ |
| icS15Fixed16Number e20; /* e20 in the 3 * 3 */ |
| icS15Fixed16Number e21; /* e21 in the 3 * 3 */ |
| icS15Fixed16Number e22; /* e22 in the 3 * 3 */ |
| icUInt8Number data[icAny]; /* Data follows see spec */ |
| /* |
| * Data that follows is of this form |
| * |
| * icUInt8Number inputTable[inputChan][256]; * The in-table |
| * icUInt8Number clutTable[icAny]; * The clut |
| * icUInt8Number outputTable[outputChan][256]; * The out-table |
| */ |
| } icLut8; |
| |
| /* Measurement Data */ |
| typedef struct { |
| icStandardObserver stdObserver; /* Standard observer */ |
| icXYZNumber backing; /* XYZ for backing */ |
| icMeasurementGeometry geometry; /* Meas. geometry */ |
| icMeasurementFlare flare; /* Measurement flare */ |
| icIlluminant illuminant; /* Illuminant */ |
| } icMeasurement; |
| |
| /* Named color */ |
| |
| /* |
| * icNamedColor2 takes the place of icNamedColor |
| */ |
| typedef struct { |
| icUInt32Number vendorFlag; /* Bottom 16 bits for IC use */ |
| icUInt32Number count; /* Count of named colors */ |
| icUInt32Number nDeviceCoords; /* Num of device coordinates */ |
| icInt8Number prefix[32]; /* Prefix for each color name */ |
| icInt8Number suffix[32]; /* Suffix for each color name */ |
| icInt8Number data[icAny]; /* Named color data follows */ |
| /* |
| * Data that follows is of this form |
| * |
| * icInt8Number root1[32]; * Root name for 1st color |
| * icUInt16Number pcsCoords1[icAny]; * PCS coords of 1st color |
| * icUInt16Number deviceCoords1[icAny]; * Dev coords of 1st color |
| * icInt8Number root2[32]; * Root name for 2nd color |
| * icUInt16Number pcsCoords2[icAny]; * PCS coords of 2nd color |
| * icUInt16Number deviceCoords2[icAny]; * Dev coords of 2nd color |
| * : |
| * : |
| * Repeat for name and PCS and device color coordinates up to (count-1) |
| * |
| * NOTES: |
| * PCS and device space can be determined from the header. |
| * |
| * PCS coordinates are icUInt16 numbers and are described in Annex A of |
| * the ICC spec. Only 16 bit L*a*b* and XYZ are allowed. The number of |
| * coordinates is consistent with the headers PCS. |
| * |
| * Device coordinates are icUInt16 numbers where 0x0000 represents |
| * the minimum value and 0xFFFF represents the maximum value. |
| * If the nDeviceCoords value is 0 this field is not given. |
| */ |
| } icNamedColor2; |
| |
| /* Profile sequence structure */ |
| typedef struct { |
| icSignature deviceMfg; /* Dev Manufacturer */ |
| icSignature deviceModel; /* Dev Model */ |
| icUInt64Number attributes; /* Dev attributes */ |
| icTechnologySignature technology; /* Technology sig */ |
| icInt8Number data[icAny]; /* Desc text follows */ |
| /* |
| * Data that follows is of this form, this is an icInt8Number |
| * to avoid problems with a compiler generating bad code as |
| * these arrays are variable in length. |
| * |
| * icTextDescription deviceMfgDesc; * Manufacturer text |
| * icTextDescription modelDesc; * Model text |
| */ |
| } icDescStruct; |
| |
| /* Profile sequence description */ |
| typedef struct { |
| icUInt32Number count; /* Number of descriptions */ |
| icUInt8Number data[icAny]; /* Array of desc structs */ |
| } icProfileSequenceDesc; |
| |
| /* textDescription */ |
| typedef struct { |
| icUInt32Number count; /* Description length */ |
| icInt8Number data[icAny]; /* Descriptions follow */ |
| /* |
| * Data that follows is of this form |
| * |
| * icInt8Number desc[count] * NULL terminated ascii string |
| * icUInt32Number ucLangCode; * UniCode language code |
| * icUInt32Number ucCount; * UniCode description length |
| * icInt16Number ucDesc[ucCount];* The UniCode description |
| * icUInt16Number scCode; * ScriptCode code |
| * icUInt8Number scCount; * ScriptCode count |
| * icInt8Number scDesc[67]; * ScriptCode Description |
| */ |
| } icTextDescription; |
| |
| /* Screening Data */ |
| typedef struct { |
| icS15Fixed16Number frequency; /* Frequency */ |
| icS15Fixed16Number angle; /* Screen angle */ |
| icSpotShape spotShape; /* Spot Shape encodings below */ |
| } icScreeningData; |
| |
| typedef struct { |
| icUInt32Number screeningFlag; /* Screening flag */ |
| icUInt32Number channels; /* Number of channels */ |
| icScreeningData data[icAny]; /* Array of screening data */ |
| } icScreening; |
| |
| /* Text Data */ |
| typedef struct { |
| icInt8Number data[icAny]; /* Variable array of chars */ |
| } icText; |
| |
| /* Structure describing either a UCR or BG curve */ |
| typedef struct { |
| icUInt32Number count; /* Curve length */ |
| icUInt16Number curve[icAny]; /* The array of curve values */ |
| } icUcrBgCurve; |
| |
| /* Under color removal, black generation */ |
| typedef struct { |
| icInt8Number data[icAny]; /* The Ucr BG data */ |
| /* |
| * Data that follows is of this form, this is a icInt8Number |
| * to avoid problems with a compiler generating bad code as |
| * these arrays are variable in length. |
| * |
| * icUcrBgCurve ucr; * Ucr curve |
| * icUcrBgCurve bg; * Bg curve |
| * icInt8Number string; * UcrBg description |
| */ |
| } icUcrBg; |
| |
| /* viewingConditionsType */ |
| typedef struct { |
| icXYZNumber illuminant; /* In candelas per sq. meter */ |
| icXYZNumber surround; /* In candelas per sq. meter */ |
| icIlluminant stdIluminant; /* See icIlluminant defines */ |
| } icViewingCondition; |
| |
| /* CrdInfo type */ |
| typedef struct { |
| icUInt32Number count; /* Char count includes NULL */ |
| icInt8Number desc[icAny]; /* Null terminated string */ |
| } icCrdInfo; |
| |
| /*------------------------------------------------------------------------*/ |
| /* |
| * Tag Type definitions |
| */ |
| |
| /* |
| * Many of the structures contain variable length arrays. This |
| * is represented by the use of the convention. |
| * |
| * type data[icAny]; |
| */ |
| |
| /* The base part of each tag */ |
| typedef struct { |
| icTagTypeSignature sig; /* Signature */ |
| icInt8Number reserved[4]; /* Reserved, set to 0 */ |
| } icTagBase; |
| |
| /* curveType */ |
| typedef struct { |
| icTagBase base; /* Signature, "curv" */ |
| icCurve curve; /* The curve data */ |
| } icCurveType; |
| |
| /* dataType */ |
| typedef struct { |
| icTagBase base; /* Signature, "data" */ |
| icData data; /* The data structure */ |
| } icDataType; |
| |
| /* dateTimeType */ |
| typedef struct { |
| icTagBase base; /* Signature, "dtim" */ |
| icDateTimeNumber date; /* The date */ |
| } icDateTimeType; |
| |
| /* lut16Type */ |
| typedef struct { |
| icTagBase base; /* Signature, "mft2" */ |
| icLut16 lut; /* Lut16 data */ |
| } icLut16Type; |
| |
| /* lut8Type, input & output tables are always 256 bytes in length */ |
| typedef struct { |
| icTagBase base; /* Signature, "mft1" */ |
| icLut8 lut; /* Lut8 data */ |
| } icLut8Type; |
| |
| /* Measurement Type */ |
| typedef struct { |
| icTagBase base; /* Signature, "meas" */ |
| icMeasurement measurement; /* Measurement data */ |
| } icMeasurementType; |
| |
| /* Named color type */ |
| /* icNamedColor2Type, replaces icNamedColorType */ |
| typedef struct { |
| icTagBase base; /* Signature, "ncl2" */ |
| icNamedColor2 ncolor; /* Named color data */ |
| } icNamedColor2Type; |
| |
| /* Profile sequence description type */ |
| typedef struct { |
| icTagBase base; /* Signature, "pseq" */ |
| icProfileSequenceDesc desc; /* The seq description */ |
| } icProfileSequenceDescType; |
| |
| /* textDescriptionType */ |
| typedef struct { |
| icTagBase base; /* Signature, "desc" */ |
| icTextDescription desc; /* The description */ |
| } icTextDescriptionType; |
| |
| /* s15Fixed16Type */ |
| typedef struct { |
| icTagBase base; /* Signature, "sf32" */ |
| icS15Fixed16Array data; /* Array of values */ |
| } icS15Fixed16ArrayType; |
| |
| typedef struct { |
| icTagBase base; /* Signature, "scrn" */ |
| icScreening screen; /* Screening structure */ |
| } icScreeningType; |
| |
| /* sigType */ |
| typedef struct { |
| icTagBase base; /* Signature, "sig" */ |
| icSignature signature; /* The signature data */ |
| } icSignatureType; |
| |
| /* textType */ |
| typedef struct { |
| icTagBase base; /* Signature, "text" */ |
| icText data; /* Variable array of chars */ |
| } icTextType; |
| |
| /* u16Fixed16Type */ |
| typedef struct { |
| icTagBase base; /* Signature, "uf32" */ |
| icU16Fixed16Array data; /* Variable array of values */ |
| } icU16Fixed16ArrayType; |
| |
| /* Under color removal, black generation type */ |
| typedef struct { |
| icTagBase base; /* Signature, "bfd " */ |
| icUcrBg data; /* ucrBg structure */ |
| } icUcrBgType; |
| |
| /* uInt16Type */ |
| typedef struct { |
| icTagBase base; /* Signature, "ui16" */ |
| icUInt16Array data; /* Variable array of values */ |
| } icUInt16ArrayType; |
| |
| /* uInt32Type */ |
| typedef struct { |
| icTagBase base; /* Signature, "ui32" */ |
| icUInt32Array data; /* Variable array of values */ |
| } icUInt32ArrayType; |
| |
| /* uInt64Type */ |
| typedef struct { |
| icTagBase base; /* Signature, "ui64" */ |
| icUInt64Array data; /* Variable array of values */ |
| } icUInt64ArrayType; |
| |
| /* uInt8Type */ |
| typedef struct { |
| icTagBase base; /* Signature, "ui08" */ |
| icUInt8Array data; /* Variable array of values */ |
| } icUInt8ArrayType; |
| |
| /* viewingConditionsType */ |
| typedef struct { |
| icTagBase base; /* Signature, "view" */ |
| icViewingCondition view; /* Viewing conditions */ |
| } icViewingConditionType; |
| |
| /* XYZ Type */ |
| typedef struct { |
| icTagBase base; /* Signature, "XYZ" */ |
| icXYZArray data; /* Variable array of XYZ nums */ |
| } icXYZType; |
| |
| /* CRDInfoType where [0] is the CRD product name count and string and |
| * [1] -[5] are the rendering intents 0-4 counts and strings |
| */ |
| typedef struct { |
| icTagBase base; /* Signature, "crdi" */ |
| icCrdInfo info; /* 5 sets of counts & strings */ |
| }icCrdInfoType; |
| /* icCrdInfo productName; PS product count/string */ |
| /* icCrdInfo CRDName0; CRD name for intent 0 */ |
| /* icCrdInfo CRDName1; CRD name for intent 1 */ |
| /* icCrdInfo CRDName2; CRD name for intent 2 */ |
| /* icCrdInfo CRDName3; CRD name for intent 3 */ |
| |
| /*------------------------------------------------------------------------*/ |
| |
| /* |
| * Lists of tags, tags, profile header and profile structure |
| */ |
| |
| /* A tag */ |
| typedef struct { |
| icTagSignature sig; /* The tag signature */ |
| icUInt32Number offset; /* Start of tag relative to |
| * start of header, Spec |
| * Clause 5 */ |
| icUInt32Number size; /* Size in bytes */ |
| } icTag; |
| |
| /* A Structure that may be used independently for a list of tags */ |
| typedef struct { |
| icUInt32Number count; /* Num tags in the profile */ |
| icTag tags[icAny]; /* Variable array of tags */ |
| } icTagList; |
| |
| /* The Profile header */ |
| typedef struct { |
| icUInt32Number size; /* Prof size in bytes */ |
| icSignature cmmId; /* CMM for profile */ |
| icUInt32Number version; /* Format version */ |
| icProfileClassSignature deviceClass; /* Type of profile */ |
| icColorSpaceSignature colorSpace; /* Clr space of data */ |
| icColorSpaceSignature pcs; /* PCS, XYZ or Lab */ |
| icDateTimeNumber date; /* Creation Date */ |
| icSignature magic; /* icMagicNumber */ |
| icPlatformSignature platform; /* Primary Platform */ |
| icUInt32Number flags; /* Various bits */ |
| icSignature manufacturer; /* Dev manufacturer */ |
| icUInt32Number model; /* Dev model number */ |
| icUInt64Number attributes; /* Device attributes */ |
| icUInt32Number renderingIntent;/* Rendering intent */ |
| icXYZNumber illuminant; /* Profile illuminant */ |
| icSignature creator; /* Profile creator */ |
| icInt8Number reserved[44]; /* Reserved */ |
| } icHeader; |
| |
| /* |
| * A profile, |
| * we can't use icTagList here because its not at the end of the structure |
| */ |
| typedef struct { |
| icHeader header; /* The header */ |
| icUInt32Number count; /* Num tags in the profile */ |
| icInt8Number data[icAny]; /* The tagTable and tagData */ |
| /* |
| * Data that follows is of the form |
| * |
| * icTag tagTable[icAny]; * The tag table |
| * icInt8Number tagData[icAny]; * The tag data |
| */ |
| } icProfile; |
| |
| /*------------------------------------------------------------------------*/ |
| /* Obsolete entries */ |
| |
| /* icNamedColor was replaced with icNamedColor2 */ |
| typedef struct { |
| icUInt32Number vendorFlag; /* Bottom 16 bits for IC use */ |
| icUInt32Number count; /* Count of named colors */ |
| icInt8Number data[icAny]; /* Named color data follows */ |
| /* |
| * Data that follows is of this form |
| * |
| * icInt8Number prefix[icAny]; * Prefix |
| * icInt8Number suffix[icAny]; * Suffix |
| * icInt8Number root1[icAny]; * Root name |
| * icInt8Number coords1[icAny]; * Color coordinates |
| * icInt8Number root2[icAny]; * Root name |
| * icInt8Number coords2[icAny]; * Color coordinates |
| * : |
| * : |
| * Repeat for root name and color coordinates up to (count-1) |
| */ |
| } icNamedColor; |
| |
| /* icNamedColorType was replaced by icNamedColor2Type */ |
| typedef struct { |
| icTagBase base; /* Signature, "ncol" */ |
| icNamedColor ncolor; /* Named color data */ |
| } icNamedColorType; |
| |
| #endif /* ICC_H */ |