Important: The information in this document is obsolete and should not be used for new development.
How ColorSync 1.0 Profiles and Version 2.x Profiles Differ
A ColorSync 1.0 profile is smaller than a version 2.x profile and can therefore reside in memory. It is handle-based. A version 2.x profile as implemented by the ColorSync Manager is commonly file based, but it can also be memory based. You use an abstract internal data structure, called a profile reference, to access a version 2.x profile.A ColorSync 1.0 profile contains a header, a copy of the Apple
CMProfileChromaticities
record, profile response data for the associated device, and a profile name string for use in dialog boxes. Custom profiles may also have additional, private data. ColorSync 1.0 defines the following profile data structure:
struct CMProfile, *CMProfilePtr, **CMProfileHandle { CMHeader header; CMProfileChromaticitiesprofile; CMProfileResponse response; IString profileName;/* variable length */ char customData[anyNumber]; /* optional custom CMM data */ };The response data fields contain nine tables. The first table is for grayscale values. The next three are red, green, and blue values, followed by three for cyan, magenta, and yellow values. The eighth and ninth tables are for CMYK printers requiring undercolor removal and black generation data.The ColorSync 1.0 profile header and the version 2.x profile header contain many fields in common. However, the ColorSync 1.0 profile header contains fields that reflect its table-based structure. ColorSync 1.0 defines the following profile header data structure. For more information, see "Profile Header Structure for ColorSync 1.0" in Advanced Color Imaging Reference.
struct CMHeader { unsigned long size; /* byte size of profile */ OSType CMMType; /* signature of preferred CMM */ unsigned long applProfileVersion;/* Apple profile version */ OSType dataType; /* type of color data, such as rgb */ OSType deviceType; /* device type, such as monitor */ OSType deviceManufacturer;/* device manufacturer */ unsigned long deviceModel; /* as specified by manufacturer */ unsigned long deviceAttributes[2];/* private info on ink, paper, etc. */ unsigned long profileNameOffset;/* offset to name from top of data */ unsigned long customDataOffset; /* offset to custom data from top */ CMMatchFlag flags; /* misc. info used by drivers */ CMMatchOption options; /* matching type, such as perceptual */ CMXYZColor white; /* white point in XYZ space */ CMXYZColor black; /* black point in XYZ space */ };As implemented in the ColorSync Manager, a version 2.x profile is a tagged-element structure that begins with a profile header. A version 2.x profile supports use of lookup table transforms that allow for faster processing. The ColorSync Manager defines the following profile header data structure for version 2.x profiles. For more information, see "Profile Header Structure for ColorSync 2.x" in Advanced Color Imaging Reference.
struct CM2Header { unsigned long size; /* total size of profile */ OSType CMMType; /* CMM signature, registered with CS2 consortium */ unsigned long profileVersion; /* version of the profile format */ OSType profileClass; /* input, display, output, devicelink, abstract, color conversion, or named color profile type */ OSType dataColorSpace; /* color space of data */ OSType profileConnectionSpace;/* profile connection color space */ CMDateTime dateTime; /* date & time of profile creation */ OSType CS2profileSignature;/* 'acsp' constant, required by ICC */ OSType platform; /* signature of primary profile platform, registered with CS2 consortium */ unsigned long flags; /* gives hints for certain options */ OSType deviceManufacturer;/* registered with ICC consortium */ unsigned long deviceModel; /* registered with ICC consortium */ unsigned long deviceAttributes[2];/* attributes such as paper type */ unsigned long renderingIntent; /* preferred rendering intent of object tagged with this profile */ CMFixedXYZColorwhite; /* profile illuminant */ OSType creator; /* signature of profile creator */ char reserved[44]; /* reserved for future use */ };