/* File: CMICCProfile.h Contains: ICC Profile Format Definitions Version: Technology: ColorSync 2.5 Release: QuickTime 6.0.2 Copyright: (c) 1994-2001 by Apple Computer, Inc., all rights reserved. Bugs?: For bug reports, consult the following page on the World Wide Web: http://developer.apple.com/bugreporter/ */ #ifndef __CMICCPROFILE__ #define __CMICCPROFILE__ #ifndef __MACTYPES__ #include #endif #if PRAGMA_ONCE #pragma once #endif #ifdef __cplusplus extern "C" { #endif #if PRAGMA_IMPORT #pragma import on #endif #if PRAGMA_STRUCT_ALIGN #pragma options align=mac68k #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(push, 2) #elif PRAGMA_STRUCT_PACK #pragma pack(2) #endif /* ICC Profile version constants */ enum { cmICCProfileVersion2 = 0x02000000, cmICCProfileVersion21 = 0x02100000, cmCS2ProfileVersion = cmICCProfileVersion2, cmCS1ProfileVersion = 0x00000100 /* ColorSync 1.0 profile version */ }; /* Current Major version number */ enum { cmProfileMajorVersionMask = (long)0xFF000000, cmCurrentProfileMajorVersion = 0x02000000 }; /* magic cookie number for anonymous file ID */ enum { cmMagicNumber = FOUR_CHAR_CODE('acsp') }; /************************************************************************/ /*************** ColorSync 2.0 profile specification ********************/ /************************************************************************/ /**** flags field ****/ enum { cmICCReservedFlagsMask = 0x0000FFFF, /* these bits of the flags field are defined and reserved by ICC */ cmEmbeddedMask = 0x00000001, /* if bit 0 is 0 then not embedded profile, if 1 then embedded profile */ cmEmbeddedUseMask = 0x00000002, /* if bit 1 is 0 then ok to use anywhere, if 1 then ok to use as embedded profile only */ cmCMSReservedFlagsMask = (long)0xFFFF0000, /* these bits of the flags field are defined and reserved by CMS vendor */ cmQualityMask = 0x00030000, /* if bits 16-17 is 0 then normal, if 1 then draft, if 2 then best */ cmInterpolationMask = 0x00040000, /* if bit 18 is 0 then interpolation, if 1 then lookup only */ cmGamutCheckingMask = 0x00080000 /* if bit 19 is 0 then create gamut checking info, if 1 then no gamut checking info */ }; /* copyright-protection flag options */ enum { cmEmbeddedProfile = 0, /* 0 is not embedded profile, 1 is embedded profile */ cmEmbeddedUse = 1 /* 0 is to use anywhere, 1 is to use as embedded profile only */ }; /* speed and quality flag options */ enum { cmNormalMode = 0, /* it uses the least significent two bits in the high word of flag */ cmDraftMode = 1, /* it should be evaulated like this: right shift 16 bits first, mask off the */ cmBestMode = 2 /* high 14 bits, and then compare with the enum to determine the option value */ }; /**** deviceAttributes fields ****/ /* deviceAttributes[0] is defined by and reserved for device vendors */ /* deviceAttributes[1] is defined by and reserved for ICC */ /* The following bits of deviceAttributes[1] are currently defined */ enum { cmReflectiveTransparentMask = 0x00000001, /* if bit 0 is 0 then reflective media, if 1 then transparency media */ cmGlossyMatteMask = 0x00000002 /* if bit 1 is 0 then glossy, if 1 then matte */ }; /* device/media attributes element values */ enum { cmReflective = 0, /* if bit 0 is 0 then reflective media, if 1 then transparency media */ cmGlossy = 1 /* if bit 1 is 0 then glossy, if 1 then matte */ }; /**** renderingIntent field ****/ enum { cmPerceptual = 0, /* Photographic images */ cmRelativeColorimetric = 1, /* Logo Colors */ cmSaturation = 2, /* Business graphics */ cmAbsoluteColorimetric = 3 /* Logo Colors */ }; /* data type element values */ enum { cmAsciiData = 0, cmBinaryData = 1 }; /* screen encodings */ enum { cmPrtrDefaultScreens = 0, /* Use printer default screens. 0 is false, 1 is ture */ cmLinesPer = 1 /* 0 is LinesPerCm, 1 is LinesPerInch */ }; /* 2.0 tag type information */ enum { cmNumHeaderElements = 10 }; /* public tags */ enum { cmAToB0Tag = FOUR_CHAR_CODE('A2B0'), cmAToB1Tag = FOUR_CHAR_CODE('A2B1'), cmAToB2Tag = FOUR_CHAR_CODE('A2B2'), cmBlueColorantTag = FOUR_CHAR_CODE('bXYZ'), cmBlueTRCTag = FOUR_CHAR_CODE('bTRC'), cmBToA0Tag = FOUR_CHAR_CODE('B2A0'), cmBToA1Tag = FOUR_CHAR_CODE('B2A1'), cmBToA2Tag = FOUR_CHAR_CODE('B2A2'), cmCalibrationDateTimeTag = FOUR_CHAR_CODE('calt'), cmCharTargetTag = FOUR_CHAR_CODE('targ'), cmCopyrightTag = FOUR_CHAR_CODE('cprt'), cmDeviceMfgDescTag = FOUR_CHAR_CODE('dmnd'), cmDeviceModelDescTag = FOUR_CHAR_CODE('dmdd'), cmGamutTag = FOUR_CHAR_CODE('gamt'), cmGrayTRCTag = FOUR_CHAR_CODE('kTRC'), cmGreenColorantTag = FOUR_CHAR_CODE('gXYZ'), cmGreenTRCTag = FOUR_CHAR_CODE('gTRC'), cmLuminanceTag = FOUR_CHAR_CODE('lumi'), cmMeasurementTag = FOUR_CHAR_CODE('meas'), cmMediaBlackPointTag = FOUR_CHAR_CODE('bkpt'), cmMediaWhitePointTag = FOUR_CHAR_CODE('wtpt'), cmNamedColorTag = FOUR_CHAR_CODE('ncol'), cmNamedColor2Tag = FOUR_CHAR_CODE('ncl2'), cmPreview0Tag = FOUR_CHAR_CODE('pre0'), cmPreview1Tag = FOUR_CHAR_CODE('pre1'), cmPreview2Tag = FOUR_CHAR_CODE('pre2'), cmProfileDescriptionTag = FOUR_CHAR_CODE('desc'), cmProfileSequenceDescTag = FOUR_CHAR_CODE('pseq'), cmPS2CRD0Tag = FOUR_CHAR_CODE('psd0'), cmPS2CRD1Tag = FOUR_CHAR_CODE('psd1'), cmPS2CRD2Tag = FOUR_CHAR_CODE('psd2'), cmPS2CRD3Tag = FOUR_CHAR_CODE('psd3'), cmPS2CSATag = FOUR_CHAR_CODE('ps2s'), cmPS2RenderingIntentTag = FOUR_CHAR_CODE('ps2i'), cmRedColorantTag = FOUR_CHAR_CODE('rXYZ'), cmRedTRCTag = FOUR_CHAR_CODE('rTRC'), cmScreeningDescTag = FOUR_CHAR_CODE('scrd'), cmScreeningTag = FOUR_CHAR_CODE('scrn'), cmTechnologyTag = FOUR_CHAR_CODE('tech'), cmUcrBgTag = FOUR_CHAR_CODE('bfd '), cmViewingConditionsDescTag = FOUR_CHAR_CODE('vued'), cmViewingConditionsTag = FOUR_CHAR_CODE('view') }; /* custom tags */ enum { cmPS2CRDVMSizeTag = FOUR_CHAR_CODE('psvm'), cmVideoCardGammaTag = FOUR_CHAR_CODE('vcgt'), cmMakeAndModelTag = FOUR_CHAR_CODE('mmod') }; /* technology tag descriptions */ enum { cmTechnologyFilmScanner = FOUR_CHAR_CODE('fscn'), cmTechnologyReflectiveScanner = FOUR_CHAR_CODE('rscn'), cmTechnologyInkJetPrinter = FOUR_CHAR_CODE('ijet'), cmTechnologyThermalWaxPrinter = FOUR_CHAR_CODE('twax'), cmTechnologyElectrophotographicPrinter = FOUR_CHAR_CODE('epho'), cmTechnologyElectrostaticPrinter = FOUR_CHAR_CODE('esta'), cmTechnologyDyeSublimationPrinter = FOUR_CHAR_CODE('dsub'), cmTechnologyPhotographicPaperPrinter = FOUR_CHAR_CODE('rpho'), cmTechnologyFilmWriter = FOUR_CHAR_CODE('fprn'), cmTechnologyVideoMonitor = FOUR_CHAR_CODE('vidm'), cmTechnologyVideoCamera = FOUR_CHAR_CODE('vidc'), cmTechnologyProjectionTelevision = FOUR_CHAR_CODE('pjtv'), cmTechnologyCRTDisplay = FOUR_CHAR_CODE('CRT '), cmTechnologyPMDisplay = FOUR_CHAR_CODE('PMD '), cmTechnologyAMDisplay = FOUR_CHAR_CODE('AMD '), cmTechnologyPhotoCD = FOUR_CHAR_CODE('KPCD'), cmTechnologyPhotoImageSetter = FOUR_CHAR_CODE('imgs'), cmTechnologyGravure = FOUR_CHAR_CODE('grav'), cmTechnologyOffsetLithography = FOUR_CHAR_CODE('offs'), cmTechnologySilkscreen = FOUR_CHAR_CODE('silk'), cmTechnologyFlexography = FOUR_CHAR_CODE('flex') }; /* public type signatures */ enum { cmSigCurveType = FOUR_CHAR_CODE('curv'), cmSigDataType = FOUR_CHAR_CODE('data'), cmSigDateTimeType = FOUR_CHAR_CODE('dtim'), cmSigLut16Type = FOUR_CHAR_CODE('mft2'), cmSigLut8Type = FOUR_CHAR_CODE('mft1'), cmSigMeasurementType = FOUR_CHAR_CODE('meas'), cmSigNamedColorType = FOUR_CHAR_CODE('ncol'), cmSigNamedColor2Type = FOUR_CHAR_CODE('ncl2'), cmSigProfileDescriptionType = FOUR_CHAR_CODE('desc'), cmSigScreeningType = FOUR_CHAR_CODE('scrn'), cmSigS15Fixed16Type = FOUR_CHAR_CODE('sf32'), cmSigSignatureType = FOUR_CHAR_CODE('sig '), cmSigTextType = FOUR_CHAR_CODE('text'), cmSigU16Fixed16Type = FOUR_CHAR_CODE('uf32'), cmSigU1Fixed15Type = FOUR_CHAR_CODE('uf16'), cmSigUInt32Type = FOUR_CHAR_CODE('ui32'), cmSigUInt64Type = FOUR_CHAR_CODE('ui64'), cmSigUInt8Type = FOUR_CHAR_CODE('ui08'), cmSigUnicodeTextType = FOUR_CHAR_CODE('utxt'), cmSigViewingConditionsType = FOUR_CHAR_CODE('view'), cmSigXYZType = FOUR_CHAR_CODE('XYZ ') }; /* custom type signatures */ enum { cmSigVideoCardGammaType = FOUR_CHAR_CODE('vcgt'), cmSigMakeAndModelType = FOUR_CHAR_CODE('mmod') }; /* Measurement type encodings */ /* Measurement Flare */ enum { cmFlare0 = 0x00000000, cmFlare100 = 0x00000001 }; /* Measurement Geometry */ enum { cmGeometryUnknown = 0x00000000, cmGeometry045or450 = 0x00000001, cmGeometry0dord0 = 0x00000002 }; /* Standard Observer */ enum { cmStdobsUnknown = 0x00000000, cmStdobs1931TwoDegrees = 0x00000001, cmStdobs1964TenDegrees = 0x00000002 }; /* Standard Illuminant */ enum { cmIlluminantUnknown = 0x00000000, cmIlluminantD50 = 0x00000001, cmIlluminantD65 = 0x00000002, cmIlluminantD93 = 0x00000003, cmIlluminantF2 = 0x00000004, cmIlluminantD55 = 0x00000005, cmIlluminantA = 0x00000006, cmIlluminantEquiPower = 0x00000007, cmIlluminantF8 = 0x00000008 }; /* Spot Function Value */ enum { cmSpotFunctionUnknown = 0, cmSpotFunctionDefault = 1, cmSpotFunctionRound = 2, cmSpotFunctionDiamond = 3, cmSpotFunctionEllipse = 4, cmSpotFunctionLine = 5, cmSpotFunctionSquare = 6, cmSpotFunctionCross = 7 }; /* Color Space Signatures */ enum { cmXYZData = FOUR_CHAR_CODE('XYZ '), cmLabData = FOUR_CHAR_CODE('Lab '), cmLuvData = FOUR_CHAR_CODE('Luv '), cmYxyData = FOUR_CHAR_CODE('Yxy '), cmRGBData = FOUR_CHAR_CODE('RGB '), cmGrayData = FOUR_CHAR_CODE('GRAY'), cmHSVData = FOUR_CHAR_CODE('HSV '), cmHLSData = FOUR_CHAR_CODE('HLS '), cmCMYKData = FOUR_CHAR_CODE('CMYK'), cmCMYData = FOUR_CHAR_CODE('CMY '), cmMCH5Data = FOUR_CHAR_CODE('MCH5'), cmMCH6Data = FOUR_CHAR_CODE('MCH6'), cmMCH7Data = FOUR_CHAR_CODE('MCH7'), cmMCH8Data = FOUR_CHAR_CODE('MCH8'), cm3CLRData = FOUR_CHAR_CODE('3CLR'), cm4CLRData = FOUR_CHAR_CODE('4CLR'), cm5CLRData = FOUR_CHAR_CODE('5CLR'), cm6CLRData = FOUR_CHAR_CODE('6CLR'), cm7CLRData = FOUR_CHAR_CODE('7CLR'), cm8CLRData = FOUR_CHAR_CODE('8CLR'), cmNamedData = FOUR_CHAR_CODE('NAME') }; /* profileClass enumerations */ enum { cmInputClass = FOUR_CHAR_CODE('scnr'), cmDisplayClass = FOUR_CHAR_CODE('mntr'), cmOutputClass = FOUR_CHAR_CODE('prtr'), cmLinkClass = FOUR_CHAR_CODE('link'), cmAbstractClass = FOUR_CHAR_CODE('abst'), cmColorSpaceClass = FOUR_CHAR_CODE('spac'), cmNamedColorClass = FOUR_CHAR_CODE('nmcl') }; /* platform enumerations */ enum { cmMacintosh = FOUR_CHAR_CODE('APPL'), cmMicrosoft = FOUR_CHAR_CODE('MSFT'), cmSolaris = FOUR_CHAR_CODE('SUNW'), cmSiliconGraphics = FOUR_CHAR_CODE('SGI '), cmTaligent = FOUR_CHAR_CODE('TGNT') }; /* ColorSync 1.0 elements */ enum { cmCS1ChromTag = FOUR_CHAR_CODE('chrm'), cmCS1TRCTag = FOUR_CHAR_CODE('trc '), cmCS1NameTag = FOUR_CHAR_CODE('name'), cmCS1CustTag = FOUR_CHAR_CODE('cust') }; /* General element data types */ struct CMDateTime { unsigned short year; unsigned short month; unsigned short dayOfTheMonth; unsigned short hours; unsigned short minutes; unsigned short seconds; }; typedef struct CMDateTime CMDateTime; struct CMFixedXYZColor { Fixed X; Fixed Y; Fixed Z; }; typedef struct CMFixedXYZColor CMFixedXYZColor; typedef unsigned short CMXYZComponent; struct CMXYZColor { CMXYZComponent X; CMXYZComponent Y; CMXYZComponent Z; }; typedef struct CMXYZColor CMXYZColor; struct CM2Header { unsigned long size; /* This is the total size of the Profile */ OSType CMMType; /* CMM signature, Registered with CS2 consortium */ unsigned long profileVersion; /* Version of CMProfile format */ OSType profileClass; /* input, display, output, devicelink, abstract, or color conversion profile type */ OSType dataColorSpace; /* color space of data */ OSType profileConnectionSpace; /* profile connection color space */ CMDateTime dateTime; /* date and time of profile creation */ OSType CS2profileSignature; /* 'acsp' constant ColorSync 2.0 file ID */ OSType platform; /* primary profile platform, Registered with CS2 consortium */ unsigned long flags; /* profile flags */ OSType deviceManufacturer; /* Registered with ICC consortium */ unsigned long deviceModel; /* Registered with ICC consortium */ unsigned long deviceAttributes[2]; /* Attributes[0] is for device vendors, [1] is for ICC */ unsigned long renderingIntent; /* preferred rendering intent of tagged object */ CMFixedXYZColor white; /* profile illuminant */ OSType creator; /* profile creator */ char reserved[44]; /* reserved for future use */ }; typedef struct CM2Header CM2Header; struct CMTagRecord { OSType tag; /* Registered with CS2 consortium */ unsigned long elementOffset; /* Relative to start of CMProfile */ unsigned long elementSize; }; typedef struct CMTagRecord CMTagRecord; struct CMTagElemTable { unsigned long count; CMTagRecord tagList[1]; /* Variable size */ }; typedef struct CMTagElemTable CMTagElemTable; /* External 0x02002001 CMProfile */ struct CM2Profile { CM2Header header; CMTagElemTable tagTable; char elemData[1]; /* Tagged element storage. Variable size */ }; typedef struct CM2Profile CM2Profile; typedef CM2Profile * CM2ProfilePtr; typedef CM2ProfilePtr * CM2ProfileHandle; /* Tag Type Definitions */ struct CMCurveType { OSType typeDescriptor; /* 'curv' */ unsigned long reserved; /* fill with 0x00 */ unsigned long countValue; /* number of entries in table that follows */ unsigned short data[1]; /* Tagged element storage. Variable size */ }; typedef struct CMCurveType CMCurveType; struct CMDataType { OSType typeDescriptor; /* 'data' */ unsigned long reserved; /* fill with 0x00 */ unsigned long dataFlag; /* 0 = ASCII, 1 = binary */ char data[1]; /* Tagged element storage. Variable size */ }; typedef struct CMDataType CMDataType; struct CMDateTimeType { OSType typeDescriptor; /* 'dtim' */ unsigned long reserved; CMDateTime dateTime; }; typedef struct CMDateTimeType CMDateTimeType; struct CMLut16Type { OSType typeDescriptor; /* 'mft2' */ unsigned long reserved; /* fill with 0x00 */ unsigned char inputChannels; /* Number of input channels */ unsigned char outputChannels; /* Number of output channels */ unsigned char gridPoints; /* Number of clutTable grid points */ unsigned char reserved2; /* fill with 0x00 */ Fixed matrix[3][3]; /* */ unsigned short inputTableEntries; /* */ unsigned short outputTableEntries; /* */ unsigned short inputTable[1]; /* Variable size */ unsigned short CLUT[1]; /* Variable size */ unsigned short outputTable[1]; /* Variable size */ }; typedef struct CMLut16Type CMLut16Type; struct CMLut8Type { OSType typeDescriptor; /* 'mft1' */ unsigned long reserved; /* fill with 0x00 */ unsigned char inputChannels; /* */ unsigned char outputChannels; /* */ unsigned char gridPoints; /* */ unsigned char reserved2; /* fill with 0x00 */ Fixed matrix[3][3]; /* */ unsigned char inputTable[256]; /* fixed size of 256 */ unsigned char CLUT[2]; /* Variable size */ unsigned char outputTable[256]; /* fixed size of 256 */ }; typedef struct CMLut8Type CMLut8Type; struct CMMeasurementType { OSType typeDescriptor; /* 'meas' */ unsigned long reserved; /* fill with 0x00 */ unsigned long standardObserver; /* 0 : unknown, 1 : CIE 1931, 2 : CIE 1964 */ CMFixedXYZColor backingXYZ; /* absolute XYZ values of backing */ unsigned long geometry; /* 0 : unknown, 1 : 0/45 or 45/0, 2 :0/d or d/0 */ unsigned long flare; /* 0 : 0%, 1 : 100% flare */ unsigned long illuminant; /* standard illuminant */ }; typedef struct CMMeasurementType CMMeasurementType; struct CMNamedColorType { OSType typeDescriptor; /* 'ncol' */ unsigned long reserved; /* fill with 0x00 */ unsigned long vendorFlag; /* */ unsigned long count; /* count of named colors in array that follows */ unsigned char prefixName[1]; /* Variable size, max = 32, to access fields after this one, have to count bytes */ unsigned char suffixName[1]; /* Variable size, max = 32 */ char data[1]; /* varaible size data as explained below */ }; typedef struct CMNamedColorType CMNamedColorType; /* A variable size array of structs appears as the last block of data in the above struct, CMNamedColorType. The data structure is as follows: (example in C) struct { unsigned char rootName[1]; * Variable size, max = 32 unsigned char colorCoords[1]; * Variable size } colorName[1]; * Variable size */ struct CMNamedColor2Type { OSType typeDescriptor; /* 'ncl2' */ unsigned long reserved; /* fill with 0x00 */ unsigned long vendorFlag; /* lower 16 bits reserved for ICC use */ unsigned long count; /* count of named colors in array that follows */ unsigned long deviceChannelCount; /* number of device channels, 0 indicates no device value available */ unsigned char prefixName[32]; /* 32 byte field. 7 bit ASCII null terminated */ unsigned char suffixName[32]; /* 32 byte field. 7 bit ASCII null terminated */ char data[1]; /* varaible size data as definced below */ }; typedef struct CMNamedColor2Type CMNamedColor2Type; struct CMNamedColor2EntryType { unsigned char rootName[32]; /* 32 byte field. 7 bit ASCII null terminated */ unsigned short PCSColorCoords[3]; /* Lab or XYZ color */ unsigned short DeviceColorCoords[1]; /* Variable size */ }; typedef struct CMNamedColor2EntryType CMNamedColor2EntryType; struct CMTextDescriptionType { OSType typeDescriptor; /* 'desc' */ unsigned long reserved; /* fill with 0x00 */ unsigned long ASCIICount; /* the count of "bytes" */ unsigned char ASCIIName[2]; /* Variable size, to access fields after this one, have to count bytes */ unsigned long UniCodeCode; unsigned long UniCodeCount; /* the count of characters, each character has two bytes */ unsigned char UniCodeName[2]; /* Variable size */ short ScriptCodeCode; unsigned char ScriptCodeCount; /* the count of "bytes" */ unsigned char ScriptCodeName[2]; /* Variable size */ }; typedef struct CMTextDescriptionType CMTextDescriptionType; struct CMTextType { OSType typeDescriptor; /* 'text' */ unsigned long reserved; /* fill with 0x00 */ unsigned char text[1]; /* count of text is obtained from tag size element */ }; typedef struct CMTextType CMTextType; struct CMUnicodeTextType { OSType typeDescriptor; /* 'utxt' */ unsigned long reserved; /* fill with 0x00 */ unsigned short text[1]; /* count of text is obtained from tag size element */ }; typedef struct CMUnicodeTextType CMUnicodeTextType; struct CMScreeningType { OSType typeDescriptor; /* 'scrn' */ unsigned long reserved; /* fill with 0x00 */ unsigned long screeningFlag; /* bit 0 : use printer default screens, bit 1 : inch/cm */ unsigned long channelCount; char data[1]; /* varaible size data as explained below */ }; typedef struct CMScreeningType CMScreeningType; /* A variable size array of structs appears as the last block of data in the above struct, CMScreeningType. The data structure is as follows: (example in C) struct { Fixed frequency; Fixed angle; unsigned long sportFunction; } channelScreening[1]; * Variable size */ struct CMSignatureType { OSType typeDescriptor; /* 'sig ' */ unsigned long reserved; /* fill with 0x00 */ OSType signature; }; typedef struct CMSignatureType CMSignatureType; struct CMS15Fixed16ArrayType { OSType typeDescriptor; /* 'sf32' */ unsigned long reserved; /* fill with 0x00 */ Fixed value[1]; /* Variable size */ }; typedef struct CMS15Fixed16ArrayType CMS15Fixed16ArrayType; struct CMU16Fixed16ArrayType { OSType typeDescriptor; /* 'uf32' */ unsigned long reserved; /* fill with 0x00 */ unsigned long value[1]; /* Variable size */ }; typedef struct CMU16Fixed16ArrayType CMU16Fixed16ArrayType; struct CMUInt16ArrayType { OSType typeDescriptor; /* 'ui16' */ unsigned long reserved; /* fill with 0x00 */ unsigned short value[1]; /* Variable size */ }; typedef struct CMUInt16ArrayType CMUInt16ArrayType; struct CMUInt32ArrayType { OSType typeDescriptor; /* 'ui32' */ unsigned long reserved; /* fill with 0x00 */ unsigned long value[1]; /* Variable size */ }; typedef struct CMUInt32ArrayType CMUInt32ArrayType; struct CMUInt64ArrayType { OSType typeDescriptor; /* 'ui64' */ unsigned long reserved; /* fill with 0x00 */ unsigned long value[1]; /* Variable size (x2) */ }; typedef struct CMUInt64ArrayType CMUInt64ArrayType; struct CMUInt8ArrayType { OSType typeDescriptor; /* 'ui08' */ unsigned long reserved; /* fill with 0x00 */ unsigned char value[1]; /* Variable size */ }; typedef struct CMUInt8ArrayType CMUInt8ArrayType; struct CMViewingConditionsType { OSType typeDescriptor; /* 'view' */ unsigned long reserved; /* fill with 0x00 */ CMFixedXYZColor illuminant; /* absolute XYZs of illuminant in cd/m^2 */ CMFixedXYZColor surround; /* absolute XYZs of surround in cd/m^2 */ unsigned long stdIlluminant; /* see definitions of std illuminants */ }; typedef struct CMViewingConditionsType CMViewingConditionsType; struct CMXYZType { OSType typeDescriptor; /* 'XYZ ' */ unsigned long reserved; /* fill with 0x00 */ CMFixedXYZColor XYZ[1]; /* variable size XYZ tristimulus values */ }; typedef struct CMXYZType CMXYZType; /* Profile sequence description type */ struct CMProfileSequenceDescType { OSType typeDescriptor; /* 'pseq ' */ unsigned long reserved; /* fill with 0x00 */ unsigned long count; /* Number of descriptions */ char data[1]; /* varaible size data as explained below */ }; typedef struct CMProfileSequenceDescType CMProfileSequenceDescType; /* A variable size array of structs appears as the last block of data in the above struct, CMProfileSequenceDescType. The data structure is as follows: (example in C) struct { OSType deviceMfg; * Device Manufacturer OSType deviceModel; * Decvice Model unsigned long attributes[2]; * Device attributes OSType technology; * Technology signature unsigned long mfgDescASCIICount; * the count of "bytes" unsigned char mfgDescASCIIName[2]; * Variable size unsigned long mfgDescUniCodeCode; unsigned long mfgDescUniCodeCount; * the count of characters, each character has two bytes unsigned char mfgDescUniCodeName[2]; * Variable size unsigned long mfgDescScriptCodeCode; unsigned long mfgDescScriptCodeCount; * the count of "bytes" unsigned char mfgDescScriptCodeName[2]; * Variable size unsigned long modelDescASCIICount; * the count of "bytes" unsigned char modelDescASCIIName[2]; * Variable size unsigned long modelDescUniCodeCode; unsigned long modelDescUniCodeCount; * the count of characters, each character has two bytes unsigned char modelDescUniCodeName[2]; * Variable size short modelDescScriptCodeCode; unsigned char modelDescScriptCodeCount; * the count of "bytes" SInt8 filler; * For proper alignment across languages unsigned char modelDescScriptCodeName[2]; * Variable size } profileDescription[1]; */ /* Under color removal, black generation type */ struct CMUcrBgType { OSType typeDescriptor; /* 'bfd ' */ unsigned long reserved; /* fill with 0x00 */ unsigned long ucrCount; /* Number of UCR entries */ unsigned short ucrValues[1]; /* variable size */ unsigned long bgCount; /* Number of BG entries */ unsigned short bgValues[1]; /* variable size */ unsigned char ucrbgASCII[1]; /* null terminated ASCII string */ }; typedef struct CMUcrBgType CMUcrBgType; struct CMIntentCRDVMSize { long renderingIntent; /* rendering intent */ unsigned long VMSize; /* VM size taken up by the CRD */ }; typedef struct CMIntentCRDVMSize CMIntentCRDVMSize; struct CMPS2CRDVMSizeType { OSType typeDescriptor; /* 'psvm' */ unsigned long reserved; /* fill with 0x00 */ unsigned long count; /* number of intent entries */ CMIntentCRDVMSize intentCRD[1]; /* variable size */ }; typedef struct CMPS2CRDVMSizeType CMPS2CRDVMSizeType; /* Video Card Gamma type */ enum { cmVideoCardGammaTableType = 0, cmVideoCardGammaFormulaType = 1 }; struct CMVideoCardGammaTable { unsigned short channels; /* # of gamma channels (1 or 3) */ unsigned short entryCount; /* 1-based number of entries per channel */ unsigned short entrySize; /* size on bytes of each entry */ char data[1]; /* variable size data follows */ }; typedef struct CMVideoCardGammaTable CMVideoCardGammaTable; struct CMVideoCardGammaFormula { Fixed redGamma; /* must be > 0.0 */ Fixed redMin; /* must be > 0.0 and < 1.0 */ Fixed redMax; /* must be > 0.0 and < 1.0 */ Fixed greenGamma; /* must be > 0.0 */ Fixed greenMin; /* must be > 0.0 and < 1.0 */ Fixed greenMax; /* must be > 0.0 and < 1.0 */ Fixed blueGamma; /* must be > 0.0 */ Fixed blueMin; /* must be > 0.0 and < 1.0 */ Fixed blueMax; /* must be > 0.0 and < 1.0 */ }; typedef struct CMVideoCardGammaFormula CMVideoCardGammaFormula; struct CMVideoCardGamma { unsigned long tagType; union { CMVideoCardGammaTable table; CMVideoCardGammaFormula formula; } u; }; typedef struct CMVideoCardGamma CMVideoCardGamma; struct CMVideoCardGammaType { OSType typeDescriptor; /* 'vcgt' */ unsigned long reserved; /* fill with 0x00 */ CMVideoCardGamma gamma; }; typedef struct CMVideoCardGammaType CMVideoCardGammaType; struct CMMakeAndModel { OSType manufacturer; unsigned long model; unsigned long serialNumber; unsigned long manufactureDate; unsigned long reserved1; /* fill with 0x00 */ unsigned long reserved2; /* fill with 0x00 */ unsigned long reserved3; /* fill with 0x00 */ unsigned long reserved4; /* fill with 0x00 */ }; typedef struct CMMakeAndModel CMMakeAndModel; struct CMMakeAndModelType { OSType typeDescriptor; /* 'mmod' */ unsigned long reserved; /* fill with 0x00 */ CMMakeAndModel makeAndModel; }; typedef struct CMMakeAndModelType CMMakeAndModelType; /************************************************************************/ /*************** ColorSync 1.0 profile specification ********************/ /************************************************************************/ enum { cmGrayResponse = 0, cmRedResponse = 1, cmGreenResponse = 2, cmBlueResponse = 3, cmCyanResponse = 4, cmMagentaResponse = 5, cmYellowResponse = 6, cmUcrResponse = 7, cmBgResponse = 8, cmOnePlusLastResponse = 9 }; /* Device types */ enum { cmMonitorDevice = FOUR_CHAR_CODE('mntr'), cmScannerDevice = FOUR_CHAR_CODE('scnr'), cmPrinterDevice = FOUR_CHAR_CODE('prtr') }; struct CMIString { ScriptCode theScript; Str63 theString; }; typedef struct CMIString CMIString; /* Profile options */ enum { cmPerceptualMatch = 0x0000, /* Default. For photographic images */ cmColorimetricMatch = 0x0001, /* Exact matching when possible */ cmSaturationMatch = 0x0002 /* For solid colors */ }; /* Profile flags */ enum { cmNativeMatchingPreferred = 0x00000001, /* Default to native not preferred */ cmTurnOffCache = 0x00000002 /* Default to turn on CMM cache */ }; typedef long CMMatchOption; typedef long CMMatchFlag; struct CMHeader { unsigned long size; OSType CMMType; unsigned long applProfileVersion; OSType dataType; OSType deviceType; OSType deviceManufacturer; unsigned long deviceModel; unsigned long deviceAttributes[2]; unsigned long profileNameOffset; unsigned long customDataOffset; CMMatchFlag flags; CMMatchOption options; CMXYZColor white; CMXYZColor black; }; typedef struct CMHeader CMHeader; struct CMProfileChromaticities { CMXYZColor red; CMXYZColor green; CMXYZColor blue; CMXYZColor cyan; CMXYZColor magenta; CMXYZColor yellow; }; typedef struct CMProfileChromaticities CMProfileChromaticities; struct CMProfileResponse { unsigned short counts[9]; unsigned short data[1]; /* Variable size */ }; typedef struct CMProfileResponse CMProfileResponse; struct CMProfile { CMHeader header; CMProfileChromaticities profile; CMProfileResponse response; CMIString profileName; char customData[1]; /* Variable size */ }; typedef struct CMProfile CMProfile; typedef CMProfile * CMProfilePtr; typedef CMProfilePtr * CMProfileHandle; #if OLDROUTINENAMES enum { kCMApplProfileVersion = cmCS1ProfileVersion }; enum { grayResponse = cmGrayResponse, redResponse = cmRedResponse, greenResponse = cmGreenResponse, blueResponse = cmBlueResponse, cyanResponse = cmCyanResponse, magentaResponse = cmMagentaResponse, yellowResponse = cmYellowResponse, ucrResponse = cmUcrResponse, bgResponse = cmBgResponse, onePlusLastResponse = cmOnePlusLastResponse }; enum { rgbData = cmRGBData, cmykData = cmCMYKData, grayData = cmGrayData, xyzData = cmXYZData }; enum { XYZData = cmXYZData }; enum { monitorDevice = cmMonitorDevice, scannerDevice = cmScannerDevice, printerDevice = cmPrinterDevice }; enum { CMNativeMatchingPreferred = cmNativeMatchingPreferred, /* Default to native not preferred */ CMTurnOffCache = cmTurnOffCache /* Default to turn on CMM cache */ }; enum { CMPerceptualMatch = cmPerceptualMatch, /* Default. For photographic images */ CMColorimetricMatch = cmColorimetricMatch, /* Exact matching when possible */ CMSaturationMatch = cmSaturationMatch /* For solid colors */ }; typedef unsigned short XYZComponent; typedef CMXYZColor XYZColor; typedef unsigned short CMResponseData; typedef CMIString IString; typedef long CMResponseColor; typedef CMResponseColor responseColor; #endif /* OLDROUTINENAMES */ #if PRAGMA_STRUCT_ALIGN #pragma options align=reset #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(pop) #elif PRAGMA_STRUCT_PACK #pragma pack() #endif #ifdef PRAGMA_IMPORT_OFF #pragma import off #elif PRAGMA_IMPORT #pragma import reset #endif #ifdef __cplusplus } #endif #endif /* __CMICCPROFILE__ */