|
|
/*
File: CMICCProfile.h Contains: ICC Profile Format Definitions Version: QuickTime 7.3 Copyright: (c) 2007 (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 <MacTypes.h>
#endif
#if PRAGMA_ONCE
#pragma once
#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 { cmICCProfileVersion4 = 0x04000000, 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'), cmChromaticAdaptationTag = FOUR_CHAR_CODE('chad'), 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'), cmProfileDescriptionMLTag = FOUR_CHAR_CODE('dscm'), cmNativeDisplayInfoTag = FOUR_CHAR_CODE('ndin') };
/* public type signatures */ enum { cmSigCrdInfoType = FOUR_CHAR_CODE('crdi'), 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'), cmSigMultiFunctA2BType = FOUR_CHAR_CODE('mAB '), cmSigMultiFunctB2AType = FOUR_CHAR_CODE('mBA '), cmSigNamedColorType = FOUR_CHAR_CODE('ncol'), cmSigNamedColor2Type = FOUR_CHAR_CODE('ncl2'), cmSigParametricCurveType = FOUR_CHAR_CODE('para'), cmSigProfileDescriptionType = FOUR_CHAR_CODE('desc'), cmSigProfileSequenceDescType = FOUR_CHAR_CODE('pseq'), 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'), cmSigUInt8Type = FOUR_CHAR_CODE('ui08'), cmSigUInt16Type = FOUR_CHAR_CODE('ui16'), cmSigUInt32Type = FOUR_CHAR_CODE('ui32'), cmSigUInt64Type = FOUR_CHAR_CODE('ui64'), cmSigUcrBgType = FOUR_CHAR_CODE('bfd '), cmSigUnicodeTextType = FOUR_CHAR_CODE('utxt'), cmSigViewingConditionsType = FOUR_CHAR_CODE('view'), cmSigXYZType = FOUR_CHAR_CODE('XYZ ') };
/* custom type signatures */ enum { cmSigPS2CRDVMSizeType = FOUR_CHAR_CODE('psvm'), cmSigVideoCardGammaType = FOUR_CHAR_CODE('vcgt'), cmSigMakeAndModelType = FOUR_CHAR_CODE('mmod'), cmSigNativeDisplayInfoType = FOUR_CHAR_CODE('ndin'), cmSigMultiLocalizedUniCodeType = FOUR_CHAR_CODE('mluc') };
/* technology tag descriptions */ enum { cmTechnologyDigitalCamera = FOUR_CHAR_CODE('dcam'), 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') };
/* 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 '), cmYCbCrData = FOUR_CHAR_CODE('YCbr'), cmYxyData = FOUR_CHAR_CODE('Yxy '), cmRGBData = FOUR_CHAR_CODE('RGB '), cmSRGBData = FOUR_CHAR_CODE('sRGB'), 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'), cm9CLRData = FOUR_CHAR_CODE('9CLR'), cm10CLRData = FOUR_CHAR_CODE('ACLR'), cm11CLRData = FOUR_CHAR_CODE('BCLR'), cm12CLRData = FOUR_CHAR_CODE('CCLR'), cm13CLRData = FOUR_CHAR_CODE('DCLR'), cm14CLRData = FOUR_CHAR_CODE('ECLR'), cm15CLRData = FOUR_CHAR_CODE('FCLR'), 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') };
/* parametric curve type enumerations */ enum { cmParametricType0 = 0, /* Y = X^gamma */ cmParametricType1 = 1, /* Y = (aX+b)^gamma [X>=-b/a], Y = 0 [X<-b/a] */ cmParametricType2 = 2, /* Y = (aX+b)^gamma + c [X>=-b/a], Y = c [X<-b/a] */ cmParametricType3 = 3, /* Y = (aX+b)^gamma [X>=d], Y = cX [X<d] */ cmParametricType4 = 4 /* Y = (aX+b)^gamma + e [X>=d], Y = cX+f [X<d] */ };
/* 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 { UInt16 year; UInt16 month; UInt16 dayOfTheMonth; UInt16 hours; UInt16 minutes; UInt16 seconds; }; typedef struct CMDateTime CMDateTime; struct CMFixedXYColor { Fixed x; Fixed y; }; typedef struct CMFixedXYColor CMFixedXYColor; struct CMFixedXYZColor { Fixed X; Fixed Y; Fixed Z; }; typedef struct CMFixedXYZColor CMFixedXYZColor;
typedef UInt16 CMXYZComponent; struct CMXYZColor { CMXYZComponent X; CMXYZComponent Y; CMXYZComponent Z; }; typedef struct CMXYZColor CMXYZColor; /* Typedef for Profile MD5 message digest */ /* Derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm */
typedef unsigned char CMProfileMD5[16]; typedef CMProfileMD5 * CMProfileMD5Ptr;
/*
* CMProfileMD5AreEqual() * * Availability: available as macro/inline */ #ifdef __cplusplus
inline Boolean CMProfileMD5AreEqual(CMProfileMD5 a, CMProfileMD5 b) { return ((long*)a)[0]==((long*)b)[0] && ((long*)a)[1]==((long*)b)[1] && ((long*)a)[2]==((long*)b)[2] && ((long*)a)[3]==((long*)b)[3]; } #else
#define CMProfileMD5AreEqual(a, b) (\
((long*)a)[0]==((long*)b)[0] && ((long*)a)[1]==((long*)b)[1] && \ ((long*)a)[2]==((long*)b)[2] && ((long*)a)[3]==((long*)b)[3]) #endif
struct CM2Header { UInt32 size; /* This is the total size of the Profile */ OSType CMMType; /* CMM signature, Registered with CS2 consortium */ UInt32 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 */ UInt32 flags; /* profile flags */ OSType deviceManufacturer; /* Registered with ICC consortium */ UInt32 deviceModel; /* Registered with ICC consortium */ UInt32 deviceAttributes[2]; /* Attributes[0] is for device vendors, [1] is for ICC */ UInt32 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 CM4Header { UInt32 size; /* This is the total size of the Profile */ OSType CMMType; /* CMM signature, Registered with CS2 consortium */ UInt32 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 */ UInt32 flags; /* profile flags */ OSType deviceManufacturer; /* Registered with ICC consortium */ UInt32 deviceModel; /* Registered with ICC consortium */ UInt32 deviceAttributes[2]; /* Attributes[0] is for device vendors, [1] is for ICC */ UInt32 renderingIntent; /* preferred rendering intent of tagged object */ CMFixedXYZColor white; /* profile illuminant */ OSType creator; /* profile creator */ CMProfileMD5 digest; /* Profile message digest */ char reserved[28]; /* reserved for future use */ }; typedef struct CM4Header CM4Header; struct CMTagRecord { OSType tag; /* Registered with CS2 consortium */ UInt32 elementOffset; /* Relative to start of CMProfile */ UInt32 elementSize; }; typedef struct CMTagRecord CMTagRecord; struct CMTagElemTable { UInt32 count; CMTagRecord tagList[1]; /* variable size, determined by count */ }; typedef struct CMTagElemTable CMTagElemTable; struct CM2Profile { CM2Header header; CMTagElemTable tagTable; char elemData[1]; /* variable size data for tagged element storage */ }; typedef struct CM2Profile CM2Profile; typedef CM2Profile * CM2ProfilePtr; typedef CM2ProfilePtr * CM2ProfileHandle; /* Tag Type Definitions */ struct CMAdaptationMatrixType { OSType typeDescriptor; /* 'sf32' = cmSigS15Fixed16Type */ unsigned long reserved; /* fill with 0x00 */ Fixed adaptationMatrix[9]; /* fixed size of nine matrix entries */ }; typedef struct CMAdaptationMatrixType CMAdaptationMatrixType; struct CMCurveType { OSType typeDescriptor; /* 'curv' = cmSigCurveType */ UInt32 reserved; /* fill with 0x00 */ UInt32 countValue; /* number of entries in table that follows */ UInt16 data[1]; /* variable size, determined by countValue */ }; typedef struct CMCurveType CMCurveType; struct CMDataType { OSType typeDescriptor; /* 'data' = cmSigDataType*/ UInt32 reserved; /* fill with 0x00 */ UInt32 dataFlag; /* 0 = ASCII, 1 = binary */ char data[1]; /* variable size, determined by tag element size */ }; typedef struct CMDataType CMDataType; struct CMDateTimeType { OSType typeDescriptor; /* 'dtim' = cmSigDateTimeType */ UInt32 reserved; /* fill with 0x00 */ CMDateTime dateTime; /* */ }; typedef struct CMDateTimeType CMDateTimeType; struct CMLut16Type { OSType typeDescriptor; /* 'mft2' = cmSigLut16Type */ UInt32 reserved; /* fill with 0x00 */ UInt8 inputChannels; /* Number of input channels */ UInt8 outputChannels; /* Number of output channels */ UInt8 gridPoints; /* Number of clutTable grid points */ UInt8 reserved2; /* fill with 0x00 */ Fixed matrix[3][3]; /* */ UInt16 inputTableEntries; /* Number of entries in 1-D input luts */ UInt16 outputTableEntries; /* Number of entries in 1-D output luts */ UInt16 inputTable[1]; /* variable size, determined by inputChannels*inputTableEntries */ #if 0 /* NOTE: Field offsets are variable from here on. */
/* In order to correctly reflect the actual format of this tag, some of the fields in */ /* this structure have been removed because they follow an array field of variable size. */ /* As a result, the size of this structure has changed from previous versions of this interface. */ /* Code that relies on sizeof(CMLut16Type) should be changed. */ UInt16 CLUT[]; /* variable size, determined by (gridPoints^inputChannels)*outputChannels */ UInt16 outputTable[]; /* variable size, determined by outputChannels*outputTableEntries */ #endif
}; typedef struct CMLut16Type CMLut16Type; struct CMLut8Type { OSType typeDescriptor; /* 'mft1' = cmSigLut8Type */ UInt32 reserved; /* fill with 0x00 */ UInt8 inputChannels; /* Number of input channels */ UInt8 outputChannels; /* Number of output channels */ UInt8 gridPoints; /* Number of clutTable grid points */ UInt8 reserved2; /* fill with 0x00 */ Fixed matrix[3][3]; /* */ UInt8 inputTable[1]; /* variable size, determined by inputChannels*256 */ #if 0 /* NOTE: Field offsets are variable from here on. */
/* In order to correctly reflect the actual format of this tag, some of the fields in */ /* this structure have been removed because they follow an array field of variable size. */ /* As a result, the size of this structure has changed from previous versions of this interface. */ /* Code that relies on sizeof(CMLut8Type) should be changed. */ UInt8 CLUT[]; /* variable size, determined by (gridPoints^inputChannels)*outputChannels */ UInt8 outputTable[]; /* variable size, determined by outputChannels*256 */ #endif
}; typedef struct CMLut8Type CMLut8Type; struct CMMultiFunctLutType { OSType typeDescriptor; /* 'mAB ' = cmSigMultiFunctA2BType or 'mBA ' = cmSigMultiFunctB2AType */ UInt32 reserved; /* fill with 0x00 */ UInt8 inputChannels; /* Number of input channels */ UInt8 outputChannels; /* Number of output channels */ UInt16 reserved2; /* fill with 0x00 */ UInt32 offsetBcurves; /* offset to first "B" curve */ UInt32 offsetMatrix; /* offset to 3x4 matrix */ UInt32 offsetMcurves; /* offset to first "M" curve */ UInt32 offsetCLUT; /* offset to multi-dimensional LUT of type CMMultiFunctCLUTType */ UInt32 offsetAcurves; /* offset to first "A" curve */ UInt8 data[1]; /* variable size */ }; typedef struct CMMultiFunctLutType CMMultiFunctLutType; typedef CMMultiFunctLutType CMMultiFunctLutA2BType; typedef CMMultiFunctLutType CMMultiFunctLutB2AType; struct CMMultiFunctCLUTType { UInt8 gridPoints[16]; /* grigpoints for each input channel dimension (remaining are 0) */ UInt8 entrySize; /* bytes per lut enrty (1 or 2) */ UInt8 reserved[3]; /* fill with 0x00 */ UInt8 data[1]; /* variable size, determined by above */ }; typedef struct CMMultiFunctCLUTType CMMultiFunctCLUTType; struct CMMeasurementType { OSType typeDescriptor; /* 'meas' = cmSigMeasurementType */ UInt32 reserved; /* fill with 0x00 */ UInt32 standardObserver; /* cmStdobsUnknown, cmStdobs1931TwoDegrees, cmStdobs1964TenDegrees */ CMFixedXYZColor backingXYZ; /* absolute XYZ values of backing */ UInt32 geometry; /* cmGeometryUnknown, cmGeometry045or450 (0/45), cmGeometry0dord0 (0/d or d/0) */ UInt32 flare; /* cmFlare0, cmFlare100 */ UInt32 illuminant; /* cmIlluminantUnknown, cmIlluminantD50, ... */ }; typedef struct CMMeasurementType CMMeasurementType; struct CMNamedColorType { OSType typeDescriptor; /* 'ncol' = cmSigNamedColorType */ UInt32 reserved; /* fill with 0x00 */ UInt32 vendorFlag; /* */ UInt32 count; /* count of named colors in array that follows */ UInt8 prefixName[1]; /* variable size, max = 32 */ #if 0 /* NOTE: Field offsets are variable from here on. */
/* In order to correctly reflect the actual format of this tag, some of the fields in */ /* this structure have been removed because they follow an array field of variable size. */ /* As a result, the size of this structure has changed from previous versions of this interface. */ /* Code that relies on sizeof(CMNamedColorType) should be changed. */ UInt8 suffixName[]; /* variable size, max = 32 */ struct { UInt8 rootName[]; /* variable size, max = 32 */ UInt8 colorCoords[]; /* variable size */ } colorName[]; /* variable size */ #endif
}; typedef struct CMNamedColorType CMNamedColorType; struct CMNamedColor2EntryType { UInt8 rootName[32]; /* 32 byte field. 7 bit ASCII null terminated */ UInt16 PCSColorCoords[3]; /* Lab or XYZ color */ UInt16 DeviceColorCoords[1]; /* variable size */ }; typedef struct CMNamedColor2EntryType CMNamedColor2EntryType; struct CMNamedColor2Type { OSType typeDescriptor; /* 'ncl2' = cmSigNamedColor2Type */ UInt32 reserved; /* fill with 0x00 */ UInt32 vendorFlag; /* lower 16 bits reserved for ICC use */ UInt32 count; /* count of named colors in array that follows */ UInt32 deviceChannelCount; /* number of device channels, 0 indicates no device value available */ UInt8 prefixName[32]; /* Fixed 32 byte size. 7 bit ASCII null terminated */ UInt8 suffixName[32]; /* Fixed 32 byte size. 7 bit ASCII null terminated */ char data[1]; /* variable size data for CMNamedColor2EntryType */ }; typedef struct CMNamedColor2Type CMNamedColor2Type; struct CMNativeDisplayInfo { UInt32 dataSize; /* Size of this structure */ CMFixedXYColor redPhosphor; /* Phosphors - native cromaticity values of the display */ CMFixedXYColor greenPhosphor; CMFixedXYColor bluePhosphor; CMFixedXYColor whitePoint; Fixed redGammaValue; /* Gammas - native gamma values of the display */ Fixed greenGammaValue; Fixed blueGammaValue; /* Gamma tables - if if gammaChannels is not zero, */ /* native gamma tables are preferred over values */ /* redGammaValue, greenGammaValue, blueGammaValue */ UInt16 gammaChannels; /* # of gamma channels (1 or 3) */ UInt16 gammaEntryCount; /* 1-based number of entries per channel */ UInt16 gammaEntrySize; /* size in bytes of each entry */ char gammaData[1]; /* variable size, determined by channels*entryCount*entrySize */ }; typedef struct CMNativeDisplayInfo CMNativeDisplayInfo; struct CMNativeDisplayInfoType { OSType typeDescriptor; /* 'ndin' = cmSigNativeDisplayInfoType */ unsigned long reserved; /* fill with 0x00 */ CMNativeDisplayInfo nativeDisplayInfo; /* data of type CMNativeDisplayInfo */ }; typedef struct CMNativeDisplayInfoType CMNativeDisplayInfoType; struct CMParametricCurveType { OSType typeDescriptor; /* 'para' = cmSigParametricCurveType */ UInt32 reserved; /* fill with 0x00 */ UInt16 functionType; /* cmParametricType0, cmParametricType1, etc. */ UInt16 reserved2; /* fill with 0x00 */ Fixed value[1]; /* variable size, determined by functionType */ }; typedef struct CMParametricCurveType CMParametricCurveType; struct CMTextDescriptionType { OSType typeDescriptor; /* 'desc' = cmSigProfileDescriptionType */ UInt32 reserved; /* fill with 0x00 */ UInt32 ASCIICount; /* Count of bytes (including null terminator) */ UInt8 ASCIIName[2]; /* variable size, determined by ASCIICount. 7 bit ASCII null terminated */ #if 0 /* NOTE: Field offsets are variable from here on. */
/* In order to correctly reflect the actual format of this tag, some of the fields in */ /* this structure have been removed because they follow an array field of variable size. */ /* As a result, the size of this structure has changed from previous versions of this interface. */ /* Code that relies on sizeof(CMTextDescriptionType) should be changed. */ UInt32 UniCodeCode; /* Unused */ UInt32 UniCodeCount; /* Count of 2-byte characters (including null terminator) */ UInt8 UniCodeName[]; /* variable size, determined by UniCodeCount */ SInt16 ScriptCodeCode; /* Mac-defined script code */ UInt8 ScriptCodeCount; /* Count of bytes (including null terminator) */ UInt8 ScriptCodeName[]; /* variable size, determined by ScriptCodeCount */ #endif
}; typedef struct CMTextDescriptionType CMTextDescriptionType; struct CMTextType { OSType typeDescriptor; /* 'text' = cmSigTextType */ UInt32 reserved; /* fill with 0x00 */ UInt8 text[1]; /* variable size, determined by tag element size */ }; typedef struct CMTextType CMTextType; struct CMUnicodeTextType { OSType typeDescriptor; /* 'utxt' = cmSigUnicodeTextType */ UInt32 reserved; /* fill with 0x00 */ UniChar text[1]; /* variable size, determined by tag element size */ }; typedef struct CMUnicodeTextType CMUnicodeTextType; struct CMScreeningChannelRec { Fixed frequency; Fixed angle; UInt32 spotFunction; }; typedef struct CMScreeningChannelRec CMScreeningChannelRec; struct CMScreeningType { OSType typeDescriptor; /* 'scrn' = cmSigScreeningType */ UInt32 reserved; /* fill with 0x00 */ UInt32 screeningFlag; /* bit 0 : use printer default screens, bit 1 : inch/cm */ UInt32 channelCount; /* */ CMScreeningChannelRec channelInfo[1]; /* variable size, determined by channelCount */ }; typedef struct CMScreeningType CMScreeningType; struct CMSignatureType { OSType typeDescriptor; /* 'sig ' = cmSigSignatureType */ UInt32 reserved; /* fill with 0x00 */ OSType signature; }; typedef struct CMSignatureType CMSignatureType; struct CMS15Fixed16ArrayType { OSType typeDescriptor; /* 'sf32' = cmSigS15Fixed16Type */ UInt32 reserved; /* fill with 0x00 */ Fixed value[1]; /* variable size, determined by tag element size */ }; typedef struct CMS15Fixed16ArrayType CMS15Fixed16ArrayType; struct CMU16Fixed16ArrayType { OSType typeDescriptor; /* 'uf32' = cmSigU16Fixed16Type */ UInt32 reserved; /* fill with 0x00 */ UInt32 value[1]; /* variable size, determined by tag element size */ }; typedef struct CMU16Fixed16ArrayType CMU16Fixed16ArrayType; struct CMUInt8ArrayType { OSType typeDescriptor; /* 'ui08' = cmSigUInt8Type */ UInt32 reserved; /* fill with 0x00 */ UInt8 value[1]; /* variable size, determined by tag element size */ }; typedef struct CMUInt8ArrayType CMUInt8ArrayType; struct CMUInt16ArrayType { OSType typeDescriptor; /* 'ui16' = cmSigUInt16Type */ UInt32 reserved; /* fill with 0x00 */ UInt16 value[1]; /* variable size, determined by tag element size */ }; typedef struct CMUInt16ArrayType CMUInt16ArrayType; struct CMUInt32ArrayType { OSType typeDescriptor; /* 'ui32' = cmSigUInt32Type */ UInt32 reserved; /* fill with 0x00 */ UInt32 value[1]; /* variable size, determined by tag element size */ }; typedef struct CMUInt32ArrayType CMUInt32ArrayType; struct CMUInt64ArrayType { OSType typeDescriptor; /* 'ui64' = cmSigUInt64Type */ UInt32 reserved; /* fill with 0x00 */ UInt32 value[1]; /* variable size, determined by tag element size */ }; typedef struct CMUInt64ArrayType CMUInt64ArrayType; struct CMViewingConditionsType { OSType typeDescriptor; /* 'view' = cmSigViewingConditionsType */ UInt32 reserved; /* fill with 0x00 */ CMFixedXYZColor illuminant; /* absolute XYZs of illuminant in cd/m^2 */ CMFixedXYZColor surround; /* absolute XYZs of surround in cd/m^2 */ UInt32 stdIlluminant; /* see definitions of std illuminants */ }; typedef struct CMViewingConditionsType CMViewingConditionsType; struct CMXYZType { OSType typeDescriptor; /* 'XYZ ' = cmSigXYZType */ UInt32 reserved; /* fill with 0x00 */ CMFixedXYZColor XYZ[1]; /* variable size, determined by tag element size */ }; typedef struct CMXYZType CMXYZType; struct CMProfileSequenceDescType { OSType typeDescriptor; /* 'pseq' = cmProfileSequenceDescTag */ UInt32 reserved; /* fill with 0x00 */ UInt32 count; /* Number of descriptions */ char data[1]; /* variable size data explained in ICC spec */ }; typedef struct CMProfileSequenceDescType CMProfileSequenceDescType; struct CMUcrBgType { OSType typeDescriptor; /* 'bfd ' = cmSigUcrBgType */ UInt32 reserved; /* fill with 0x00 */ UInt32 ucrCount; /* Number of UCR entries */ UInt16 ucrValues[1]; /* variable size, determined by ucrCount */ #if 0 /* NOTE: Field offsets are variable from here on. */
/* In order to correctly reflect the actual format of this tag, some of the fields in */ /* this structure have been removed because they follow an array field of variable size. */ /* As a result, the size of this structure has changed from previous versions of this interface. */ /* Code that relies on sizeof(CMUcrBgType) should be changed. */ UInt32 bgCount; /* Number of BG entries */ UInt16 bgValues[]; /* variable size, determined by bgCount */ UInt8 ucrbgASCII[]; /* null terminated ASCII string */ #endif
}; typedef struct CMUcrBgType CMUcrBgType; /* Private Tag Type Definitions */ struct CMIntentCRDVMSize { long renderingIntent; /* rendering intent */ UInt32 VMSize; /* VM size taken up by the CRD */ }; typedef struct CMIntentCRDVMSize CMIntentCRDVMSize; struct CMPS2CRDVMSizeType { OSType typeDescriptor; /* 'psvm' = cmSigPS2CRDVMSizeType */ UInt32 reserved; /* fill with 0x00 */ UInt32 count; /* number of intent entries */ CMIntentCRDVMSize intentCRD[1]; /* variable size, determined by count */ }; typedef struct CMPS2CRDVMSizeType CMPS2CRDVMSizeType; enum { cmVideoCardGammaTableType = 0, cmVideoCardGammaFormulaType = 1 };
struct CMVideoCardGammaTable { UInt16 channels; /* # of gamma channels (1 or 3) */ UInt16 entryCount; /* 1-based number of entries per channel */ UInt16 entrySize; /* size in bytes of each entry */ char data[1]; /* variable size, determined by channels*entryCount*entrySize */ }; 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 { UInt32 tagType; union { CMVideoCardGammaTable table; CMVideoCardGammaFormula formula; } u; }; typedef struct CMVideoCardGamma CMVideoCardGamma; struct CMVideoCardGammaType { OSType typeDescriptor; /* 'vcgt' = cmSigVideoCardGammaType */ UInt32 reserved; /* fill with 0x00 */ CMVideoCardGamma gamma; }; typedef struct CMVideoCardGammaType CMVideoCardGammaType; struct CMMakeAndModel { OSType manufacturer; UInt32 model; UInt32 serialNumber; UInt32 manufactureDate; UInt32 reserved1; /* fill with 0x00 */ UInt32 reserved2; /* fill with 0x00 */ UInt32 reserved3; /* fill with 0x00 */ UInt32 reserved4; /* fill with 0x00 */ }; typedef struct CMMakeAndModel CMMakeAndModel; struct CMMakeAndModelType { OSType typeDescriptor; /* 'mmod' = cmSigMakeAndModelType */ UInt32 reserved; /* fill with 0x00 */ CMMakeAndModel makeAndModel; }; typedef struct CMMakeAndModelType CMMakeAndModelType; struct CMMultiLocalizedUniCodeEntryRec { char languageCode[2]; /* language code from ISO-639 */ char regionCode[2]; /* region code from ISO-3166 */ UInt32 textLength; /* the length in bytes of the string */ UInt32 textOffset; /* the offset from the start of tag in bytes */ }; typedef struct CMMultiLocalizedUniCodeEntryRec CMMultiLocalizedUniCodeEntryRec; struct CMMultiLocalizedUniCodeType { OSType typeDescriptor; /* 'mluc' = cmSigMultiLocalizedUniCodeType */ UInt32 reserved; /* fill with 0x00 */ UInt32 entryCount; /* 1-based number of name records that follow */ UInt32 entrySize; /* size in bytes of name records that follow */
/* variable-length data for storage of CMMultiLocalizedUniCodeEntryRec */
/* variable-length data for storage of Unicode strings*/ }; typedef struct CMMultiLocalizedUniCodeType CMMultiLocalizedUniCodeType; /************************************************************************/ /*************** 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 { UInt32 size; OSType CMMType; UInt32 applProfileVersion; OSType dataType; OSType deviceType; OSType deviceManufacturer; UInt32 deviceModel; UInt32 deviceAttributes[2]; UInt32 profileNameOffset; UInt32 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 { UInt16 counts[9]; UInt16 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 UInt16 XYZComponent; typedef CMXYZColor XYZColor; typedef UInt16 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
#endif /* __CMICCPROFILE__ */
|