Contidos dentro
Localizar Mais Documentação
Destaques de Recursos de Suporte
| Fazer download desta apostila em PDF
KCMS Profile Attributes
5
In This Chapter
- This chapter discusses attributes (or tags). Every profile contains a group of attributes that describe the characteristics of that profile. Attributes are specified by name, value, and status (whether they are required or optional).
-
Note - In this guide, you will encounter the terms attribute and tag. These terms are identical. The text in this guide uses the term attribute instead of tag, (but code examples and header files may use tag because the ICC specification and the icc.h header file use this term). Attribute is a KCMS-specific term that existed before the ICC-term tag came into use.
- The ICC specification and icc.h define most attributes. KCMS includes a few additional KCMS CMM-specific attributes, which are registered with the ICC for public use and are defined in the kcstypes.h header file.
- Several KCMS API functions create and modify attributes. Some functions define what is stored in an attribute. See Chapter 4, "Functions," for detailed descriptions of all the API functions.
Using the Attribute Name
- The header file icc.h defines an attribute with the enumerated constant, icTagSignature. icTagSignature is the list of all attribute names in the ICC profile format specification. Note that some of these attributes cannot be
- used by your application, and there are additional ones that can be used. See "List of All Attributes" on page 111 for a complete list of all attribute by name that KCMS allows your application to use as arguments in calls to the API functions KcsGetAttribute() and KcsSetAttribute().
Interpreting the Attribute Value
- An attribute value is defined in the val field of the KcsAttributeValue data structure (see page 29). Since there are many possible data types for val, you need some way of interpreting the value as the correct data type. The KcsAttributeType data type provides this interface (see page 28).
Required and Optional Attributes
- Attributes are either required or optional for all profiles. The color management module (CMM) software that creates a profile must assign required attributes.
Names of CMM-Specific Attributes
- The following CMM-specific attribute names are never stored in a profile. They are used to access portions of an ICC profile that are not covered by ICC attributes (listed in the ICC profile format specification).
- These attributes are not defined in the ICC profile format specification. Instead, they are defined in the kcstypes.h header file. KCMS registered these attributes with the ICC so that they are available for public use.
-
-
icSigHeaderTag
#define icSigHeaderTag (0x69636864UL) /* 'ichd' */
- This attribute is associated with the icHeader data structure and is an ICC header. See "icHeader" on page 138 for the format of icHeader. The header file contains useful attribute information.
-
-
icSigNumTag
#define icSigNumTag (0x6E746167UL) /* 'ntag' */
- This attribute name is associated with a data structure that returns a KcsULong value indicating the number of ICC profile attributes in a file. This is a read-only attribute: it cannot be set. The count includes the icSigHeaderTag, icSigNumTag and icSigListTag entries.
-
-
icSigListTag
#define icSigListTag (0x6C746167UL) /* 'ltag' */
- This attribute name is associated with the icTagList data structure, which is a list of the ICC attributes in a profile. See "icTagList" on page 139 for the format of icTagList.
Example: Using icSigNumTag and icSigListTag
-
Code Example 5-1 shows you how to use icSigNumTag and icSigListTag.
-
Code Example 5-1 icSigNumTag and icSigListTag
-
#include <kcms/kcs.h>
KcsAttributeValue attrValue, *attrPtr;
int i;
char *tmp;
/* Set the value of countSupplied */
attrValue.base.countSupplied = 1;
attrValue.base.type = KcsULong;
/* Get the number of attributes in the profile */
status = KcsGetAttribute(profile, icSigNumTag, &attrValue);
if (status != KCS_SUCCESS) {
KcsFreeProfile(profile);
exit(1);
}
/* Make space to get a list of all tags */
size = sizeof(KcsAttributeBase) + sizeof(long)*attrValue.val.uLongVal[0];
if ((attrPtr = (KcsAttributeValue *)malloc(size)) == NULL) {
perror("malloc failed : ");
KcsFreeProfile(profile);
exit(1);
}
/* Get the list of tags */
attrPtr->base.type = KcsULong;
|
-
Code Example 5-1 icSigNumTag and icSigListTag (Continued)
-
attrPtr->base.sizeOfType = sizeof(long);
attrPtr->base.countSupplied = attrValue.val.uLongVal[0];
status = KcsGetAttribute(profile, icSigListTag, attrPtr);
if (status != KCS_SUCCESS) {
KcsFreeProfile(profile);
free (attrPtr);
exit(1);
}
/* Print the list */
printf("Number of tags = %d\n", attrPtr->base.countSupplied);
for (i=0; i<attrPtr->base.countSupplied; i++) {
tmp = (char *)&attrPtr->val.uLongVal[i];
printf("Tag # = %d, Tag Hex = 0x%x, Tag Ascii = %c%c%c%c\n", i,
attrPtr->val.uLongVal[i]; *tmp, *(tmp+1), *(tmp+2), *(tmp+3));
}
KcsFreeProfile(profile);
free (attrPtr);
|
Required ICC Attributes
- Some attributes in the profile structure are required by the ICC. These attributes provide a common base level of functionality for all CMMs to translate color information. If, for example, a requested CMM is not present, the default CMM information is used, knowing these attributes are present.
- The names of the required attributes discussed in this section are defined in the icc.h header file. The associated data structures are defined in "Attribute Types" on page 113 and are in the icc.h header file. See the ICC profile format specification for more detailed definitions of device profiles, attribute names, and attribute types (data structures). ICC-specification section titles are referenced in each profile class section discussed below. (The ICC profile format specification is located on-line in the SUNWsdk/kcms/doc directory. For the latest version of the specification, see the web site at http://icc.color.org.)
-
Table 5-1 shows attributes that are required depending on the profile type and interpretation. The attributes in the first five table rows can be set using KcsGetAttribute(), KcsSetAttribute(), or KcsUpdateProfile(). The icSigGrayTRCTag attribute is required for input profiles only.
-
Table 5-1
| Profile | Attribute Name | Interpretation |
| Input Profile | icSigAToB0Tag | None |
| Display Profile | icSigAToB0Tag | None |
| Output Profile | icSigBToA0Tag | Perceptual rendering |
| Output Profile | icSigBToA1Tag | Colorimetric rendering |
| Output Profile | icSigBToA2Tag | Saturation rendering |
| Input Profile | icSigGrayTRCTag | Depends on intent |
| Display Profile | icSigGrayTRCTag | Additive |
| Output Profile | icSigGrayTRCTag | Subtractive |
- Note that these tags, once set with KcsSetAttribute(), cannot be accessed and used unless the KcsSaveProfile() function has been called first. The save initiates certain CMM operations to be performed on the luts for future use.
-
Note - This section uses the ICC equivalent names for KCMS profile format classifications (that is, input profile, output profile, and so forth) because the section presents some of the material as you will find it in the ICC profile format specification and in icc.h. See Table 2-1 in Chapter 2, "Profiles," for the corresponding KCMS names.
Input Profile
- The following attributes are required for input devices such as scanners. See "Input Profile" in the ICC specification for more information.
- Monochrome Input Profiles
-
Attribute Name.........Attribute Type
-
-
icSigHeaderTag icHeader
icSigCopyrightTag icText
-
Attribute Name.........Attribute Type
-
-
icSigGrayTRCTag icCurve
icSigMediaWhitePointTag icXYZArray
icSigProfileDescriptionTag icTextDescription
- RGB Input Profiles
-
Attribute Name.........Attribute Type
-
-
icSigHeaderTag icHeader
icSigBlueColorantTag icXYZArray
icSigBlueTRCTag icCurve
icSigCopyrightTag icText
icSigGreeColorantTag icXYZArray
icSigGreenTRCTag icCurve
icSigMediaWhitePointTag icXYZArray
icSigProfileDescriptionTag icTextDescription
icSigRedColorantTag icXYZArray
icSigRedTRCTag icCurve
- N-Component Input Profiles
-
Attribute Name...........Attribute Type
-
-
icSigHeaderTag icHeader
icSigAtoB0Tag icLut8 or icLut16
icSigCopyrightTag icText
icSigMediaWhitePointTag icXYZArray
icSigProfileDescriptionTag icTextDescription
Display Profile
- The following attributes are required for display devices such as monitors. See "Display Profile" in the ICC specification for more information.
- Monochrome Display Profiles
-
Attribute Name...........Attribute Type
-
-
icSigHeaderTag icHeader
icSigCopyrightTag icText
icSigGrayTRCTag icCurve
icSigMediaWhitePointTag icXYZArray
icSigProfileDescriptionTag icTextDescription
- RGB Display Profiles
-
Attribute Name...........Attribute Type
-
-
icSigHeaderTag icHeader
icSigBlueColorantTag icCurve
icSigBlueTRCTag icCurve
icSigCopyrightTag icText
icSigGreenColorantTag icCurve
icSigGreenColorantTag icCurve
icSigGreenTRCTag icCurve
icSigMediaWhitePointTag icXYZArray
icSigProfileDescriptionTag icTextDescription
icSigRedColorantTag icCurve
icSigRedTRCTag icCurve
Output Profile
- The following attributes are required for output devices such as printers. See "Output Profile" in the ICC specification for more information.
- Monochrome Output Profiles
-
Attribute Name...........Attribute Type
-
-
icSigHeaderTag icHeader
icSigCopyrightTag icText
icSigGrayTRCTag icCurve
icSigMediaWhitePointTag icXYZArray
icSigProfileDescriptionTag icTextDescription
- RGB and CMYK Output Profiles
-
Attribute Name...........Attribute Type
-
-
icSigHeaderTag icHeader
icSigAtoB0Tag icLut8 or icLut16
icSigAtoB1Tag icLut8 or icLut16
icSigAtoB2Tag icLut8 or icLut16
icSigBtoA0Tag icLut8 or icLut16
icSigBtoA1Tag icLut8 or icLut16
icSigBtoA2Tag icLut8 or icLut16
icSigCopyrightTag icText
icSigCrdInfoTag icCrdInfo
icSigGamutTag icLut8 or icLut16
icSigMediaWhitePointTag icXYZArray
-
Attribute Name...........Attribute Type
-
-
icSigProfileDescriptionTag icTextDescription
Additional Profile Formats
- In addition to the three basic classifications of device profiles (that is, input, display, and output), the ICC specification defines four other color processing profiles, namely
-
- Device Link
- Color Space Conversion
- Abstract
- These profiles provide a standard implementation for use by the CMM in general color processing. They are for the convenience of CMMs, which may use these types to store calculated transformations.
Device Link Profile
- The device link profile is for a link or connection between devices. The following attributes are for device link profiles.
- See "DeviceLink Profile" in the ICC specification for more information.
-
Attribute Name...........Attribute Type
-
-
icSigHeaderTag icHeader
icSigAToB0Tag icLut8 or icLut16
icSigCopyrightTag icText
icSigProfileDescriptionTag icTextDescription
icSigProfileSequenceDescTag icProfileSequenceDesc
Color Space Conversion Profile
- The color space conversion profile is for color space transformation between non-device color spaces and the profile connection space (PCS). The following attributes are for color space conversion profiles. See "ColorSpaceConversion Profile" in the ICC specification for more information.
-
Attribute Name...........Attribute Type
-
-
icSigHeaderTag icHeader
icSigAToB0Tag icLut8 or icLut16
icSigBToA0Tag icLut8 or icLut16
-
Attribute Name...........Attribute Type
-
-
icSigCopyrightTag icText
icSigMediaWhitePointTag icXYZArray
icSigProfileDescriptionTag icTextDescription
Abstract Profile
- The abstract profile is for color transformations between PCS and PCS. The following attributes are for abstract profiles. See "Abstract Profile" in the ICC specification for more information.
-
Attribute Name...........Attribute Type
-
-
icSigHeaderTag icHeader
icSigAToB0Tag icLut8 or icLut16
icSigCopyrightTag icText
icSigMediaWhitePointTag icXYZArray
icSigProfileDescriptionTag icTextDescription
List of All Attributes
- This is an alphabetical list of all attributes by name that KCMS allows your application to specify in calls to KcsGetAttribute() and KcsSetAttribute(). The list includes attributes from the ICC profile specification as well as the attributes KCMS registered with the ICC for public use.
-
Attribute Name...........Attribute Type
-
-
icSigHeaderTag icHeader
icSigAToB0Tag icLut8 or icLut16
icSigAToB1Tag icLut8 or icLut16
icSigAToB2Tag icLut8 or icLut16
icSigBlueColorantTag icXYZArray
icSigBlueTRCTag icCurve
icSigBToA0Tag icLut8 or icLut16
icSigBToA1Tag icLut8 or icLut16
icSigBToA2Tag icLut8 or icLut16
icSigCalibrationDateTimeTag icSigDateTimeType
icSigCharTargetTag icText
icSigCopyrightTag icText
icSigCrdInfoTag icCrdInfo
icSigDeviceMfgDescTag icTextDescription
icSigDeviceModelDescTag icTextDescription
-
Attribute Name...........Attribute Type
-
-
icSigGamutTag icLut8 or icLut16
icSigGrayTRCTag icCurve
icSigGreenColorantTag icXYZArray
icSigGreenTRCTag icCurve
icSigLuminanceTag icXYZArray
icSigMeasurementTag icMeasurement
icSigMediaBlackPointTag icXYZArray
icSigMediaWhitePointTag icXYZArray
icSigNamedColorTag icNamedColor
icSigNamedColor2Tag icNamedColor2
icSigPreview0Tag icLut8 or icLut16
icSigPreview1Tag icLut8 or icLut16
icSigPreview2Tag icLut8 or icLut16
icSigProfileDescriptionTag icTextDescription
icSigProfileSequenceDescTag icProfileSequenceDesc
icSigPs2CRD0Tag icData
icSigPs2CRD1Tag icData
icSigPs2CRD2Tag icData
icSigPs2CRD3Tag icData
icSigPs2CSATag icData
icSigPs2RenderingIntentTag icData
icSigRedColorantTag icXYZArray
icSigRedTRCTag icSigCurve
icSigScreeningDescTag icTextDescription
icSigScreeningTag icScreening
icSigTechnologyTag icSignature
icSigUcrBgTag icUcrBg
icSigViewingCondDescTag icTextDescription
icSigViewingConditionsTag icViewingConditions
-
Note - The icSigProfileSequence attribute is read only and therefore can't be modified by KcsSetAttribute(); it can be read with KcsGetAttribute(). The attribute is valid for device link (complete color) profiles only.
Attribute Types
- The following data structures are used only with attributes and are defined in the icc.h header file. All other KCMS framework API data structures are defined in Chapter 3, "Data Structures" and in the kcstypes.h header file.
- All icc.h header file entries below are prefixed with "ic" to help avoid name space collisions. Signatures are prefixed with "icSig." Many of the structures contain variable-length arrays. This is represented by the convention
-
-
type data [icAny]
Constants
-
-
#define icMagicNumber 0x61637370L /* 'acsp' */
#define icVersionNumber 0x02000000L /* 2.0, BCD */
Screen Encodings
-
-
#define icPrtrDefaultScreensFalse 0x00000000L /* Bit position 0 */
#define icPrtrDefaultScreensTrue 0x00000001L /* Bit position 0 */
#define icLinesPerInch 0x00000002L /* Bit position 1 */
#define icLinesPerCm 0x00000000L /* Bit position 1 */
Device Attributes
- The defined values correspond to the low 4 bytes of the 8-byte attribute quantity. See icc.h for their location.
-
-
#define icReflective 0x00000000L /* Bit position 0 */
#define icTransparency 0x00000001L /* Bit position 0 */
#define icGlossy 0x00000000L /* Bit position 1 */
#define icMatte 0x00000002L /* Bit position 1 */
Profile Header Flags
- The low 16 bits are reserved for the ICC.
-
-
#define icEmbeddedProfileFalse 0x00000000L /* Bit position 0 */
#define icEmbeddedProfileTrue 0x00000001L /* Bit position 0 */
-
-
#define icUseAnywhere 0x00000000L /* Bit position 1 */
#define icUseWithEmbeddedDataOnly 0x00000002L /* Bit position 1 */
ASCII or Binary Data
-
-
#define icAsciiData 0x00000000L /* Used in dataType */
#define icBinaryData 0x00000001L
Variable-Length Array
- The following is used to indicate that this is a variable-length array.
-
-
#define icAny 1
Signatures
- Signatures are 4-byte identifiers used to translate platform definitions to ic* form and to differentiate between attributes and other items in the profile format. Set icSignature as appropriate for your operating system.
-
-
icSignature
- This icSignature is for the Solaris operating system. Note the number definitions.
-
#if defined(sun) || defined(__sun) /* 32-bit Solaris, SunOS */
typedef long icSignature;
/*
* Number definitions
*/
/* Unsigned Integer Numbers */
typedef unsigned char icUInt8Number;
typedef unsigned short icUInt16Number;
typedef unsigned long icUInt32Number;
typedef unsigned long icUInt64Number[2];
/* Signed Integer Numbers */
typedef char icInt8Number;
typedef short icInt16Number;
typedef long icInt32Number;
typedef long icInt64Number[2];
/* Fixed Numbers */
typedef long icS15Fixed16Number;
typedef unsigned long icU16Fixed16Number;
#endif /* 32-bit Solaris, SunOS */
|
-
-
icTagSignature
- The icTagSignature lists the public attributes and sizes in the ICC specification. The attribute icSigProfileSequenceTag is read only and is valid for device link (complete color) profiles only.
-
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' */
icSigDeviceMfgDescTag = 0x646D6E64L,/* 'dmnd' */
icSigDeviceModelDescTag = 0x646D6464L,/* 'dmdd' */
icSigGamutTag = 0x676d7420L,/* 'gmt ' */
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' */
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' */
icSigNamedColor2Tag = 0x6E636C32L,/* 'ncl2' */
icSigCrdInfoTag = 0x63726469L,/* 'crdi' */
icMaxEnumTag = 0xFFFFFFFFL/* enum = 4 bytes max */
} icTagSignature;
|
-
-
icTagTypeSignature
-
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' */
icMaxEnumType = 0xFFFFFFFFL/* enum = 4 bytes max */
} icTagTypeSignature;
|
-
-
icTechnologySignature
-
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/* enum = 4 bytes max */
} icTechnologySignature;
|
Color Space Signature
-
-
icColorSpaceSignature
-
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 ' */
icMaxEnumData = 0xFFFFFFFFL/* enum = 4 bytes max */
} icColorSpaceSignature;
|
-
Note - Currently, only icSigXYZData and icSigLabData are valid profile connection spaces (PCSs).
-
-
icProfileClassSignature
-
/* 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/* enum = 4 bytes max */
} icProfileClassSignature;
|
-
-
icPlatformSignature
-
/* Platform Signatures */
typedef enum {
icSigMacintosh = 0x4150504CL,/* 'APPL' */
icSigMicrosoft = 0x4D534654L,/* 'MSFT' */
icSigSolaris = 0x53554E57L,/* 'SUNW' */
icSigSGI = 0x53474920L,/* 'SGI ' */
icSigTaligent = 0x54474E54L,/* 'TGNT' */
icMaxEnumPlatform = 0xFFFFFFFFL/* enum = 4 bytes max */
} icPlatformSignature;
|
Other Enums
-
-
icIlluminant
-
icIlluminant is used in the icMeasurement structure.
-
/* 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,/* Equi-Power (E) */
icIlluminantF8 = 0x00000008L,
icMaxEnumIluminant = 0xFFFFFFFFL/* enum = 4 bytes max */
} icIlluminant;
|
-
-
icMeasurementFlare
icMeasurementFlare is used in the icMeasurement structure.
-
/* Measurement Flare, used in the measurmentType tag */
typedef enum {
icFlare0 = 0x00000000L, /* 0% flare */
icFlare100 = 0x00000001L, /* 100% flare */
icMaxFlare = 0xFFFFFFFFL /* enum = 4 bytes max */
} icMeasurementFlare;
|
-
-
icMeasurementGeometry
icMeasurementGeometry is used in the icMeasurement structure.
-
/* Measurement Geometry, used in the measurmentType tag */
typedef enum {
icGeometryUnknown = 0x00000000L,/* Unknown geometry */
icGeometry045or450 = 0x00000001L,/* 0/45 or 45/0 */
icGeometry0dord0 = 0x00000002L,/* 0/d or d/0 */
icMaxGeometry = 0xFFFFFFFFL/* enum = 4 bytes max */
} icMeasurementGeometry;
|
-
-
icRenderingIntent
-
icRenderingIntent is used in the icHeader structure.
-
/* Rendering Intents, used in the profile header */
typedef enum {
icPerceptual = 0,
icRelativeColorimetric = 1,
icSaturation = 2,
icAbsoluteColorimetric = 3,
icMaxEnumIntent = 0xFFFFFFFFL/* enum = 4 bytes max */
} icRenderingIntent;
|
-
-
icSpotShape
icSpotShape is used in the icScreening structure.
-
/* 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/* enum = 4 bytes max */
} icSpotShape;
|
-
-
icStandardObserver
-
icStandardObserver is used in the icMeasurement structure.
-
/* Standard Observer, used in the measurementType tag */
typedef enum {
icStdObsUnknown = 0x00000000L, /* Unknown observer */
icStdObs1931TwoDegrees= 0x00000001L, /* 1931 two degrees */
icStdObs1964TenDegrees= 0x00000002L, /* 1961 ten degrees */
icMaxStdObs = 0xFFFFFFFFL/* enum = 4 bytes max */
} icStandardObserver;
|
Arrays of Numbers
- These arrays are variable in length and type. They are implemented with the icAny constant instead of pointers. The icAny constant is a single-byte array that allows you to extend the data structure by allocating more data.
-
-
icInt8Number
icUInt8Number
icInt16Number
icUInt16Number
icInt32Number
-
typedef struct {
icInt8Number data[icAny];
} icInt8Array;
|
-
typedef struct {
icUInt8Number data[icAny];
} icUInt8Array;
|
-
typedef struct {
icInt16Number data[icAny];
} icInt16Array;
|
-
typedef struct {
icUInt16Number data[icAny];
} icUInt16Array;
|
-
typedef struct {
icInt32Number data[icAny];
} icInt32Array;
|
-
-
icUInt32Number
icInt64Number
icUInt64Number
icS15Fixed16Number
icU16Fixed16Number
icCrdInfo
-
typedef struct {
icUInt32Number data[icAny];
} icUInt32Array;
|
-
typedef struct {
icInt64Number data[icAny];
} icInt64Array;
|
-
typedef struct {
icUInt64Number data[icAny];
} icUInt64Array;
|
-
typedef struct {
icS15Fixed16Number data[icAny];
} icS15Fixed16Array;
|
-
typedef struct {
icU16Fixed16Number data[icAny];
} icU16Fixed16Array;
|
-
typedef struct {
icUInt32Number count; /* Char count includes NULL */
icInt8Number desc[icAny]; /* NULL terminated string */
} icCrdInfo;
|
-
-
icCurve
-
typedef struct {
icUInt32Number count; /* Number of entries */
icUInt16Number data[icAny]; /* The actual table data, real
* number is determined by count
* Interpretation depends on data
* use with a given tag */
} icCurve;
|
-
-
icData
-
typedef struct {
icUInt32Number dataFlag; /* 0 = ascii, 1 = binary */
icInt8Number data[icAny]; /* Data,size determined from tag */
} icData;
|
-
-
icDateTimeNumber
-
/* The base date time number */
typedef struct {
icUInt16Number year;
icUInt16Number month;
icUInt16Number day;
icUInt16Number hours;
icUInt16Number minutes;
icUInt16Number seconds;
} icDateTimeNumber;
|
-
-
icDescStruct
-
typedef struct {
icSignature deviceMfg; /* Device Manufacturer */
icSignature deviceModel; /* Decvice Model */
icUInt64Number attributes; /* Device attributes */
icTechnologySignature technology;/* Technology signature */
icInt8Number data[icAny]; /* Descriptions 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;
|
-
-
icLut8
-
/* lut8, input & output tables are always 256 bytes in length */
typedef struct {
icUInt8NumberinputChan;/* Number of input channels */
icUInt8NumberoutputChan;/* Number of output channels */
icUInt8NumberclutPoints;/* Number of clutTable grid points */
icInt8Numberpad;
icS15Fixed16Numbere00;/* e00 in the 3 * 3 */
icS15Fixed16Numbere01;/* e01 in the 3 * 3 */
icS15Fixed16Numbere02;/* e02 in the 3 * 3 */
icS15Fixed16Numbere10;/* e10 in the 3 * 3 */
icS15Fixed16Numbere11;/* e11 in the 3 * 3 */
icS15Fixed16Numbere12;/* e12 in the 3 * 3 */
icS15Fixed16Numbere20;/* e20 in the 3 * 3 */
icS15Fixed16Numbere21;/* e21 in the 3 * 3 */
icS15Fixed16Numbere22;/* e22 in the 3 * 3 */
icUInt8Numberdata[icAny];/* Data follows see spec for size */
/*
* Data that follows is of this form
*
* icUInt8NumberinputTable[inputChan][256];* The input table
* icUInt8NumberclutTable[icAny];* The clut table
* icUInt8NumberoutputTable[outputChan][256];* The output table
*/
} icLut8;
|
-
-
icLut16
icMeasurement
-
/* lut16 */
typedef struct {
icUInt8NumberinputChan;/* Number of input channels */
icUInt8NumberoutputChan;/* Number of output channels */
icUInt8NumberclutPoints;/* Number of clutTable grid points */
icInt8Numberpad;/* Padding for byte alignment */
icS15Fixed16Numbere00;/* e00 in the 3 * 3 */
icS15Fixed16Numbere01;/* e01 in the 3 * 3 */
icS15Fixed16Numbere02;/* e02 in the 3 * 3 */
icS15Fixed16Numbere10;/* e10 in the 3 * 3 */
icS15Fixed16Numbere11;/* e11 in the 3 * 3 */
icS15Fixed16Numbere12;/* e12 in the 3 * 3 */
icS15Fixed16Numbere20;/* e20 in the 3 * 3 */
icS15Fixed16Numbere21;/* e21 in the 3 * 3 */
icS15Fixed16Numbere22;/* e22 in the 3 * 3 */
icUInt16NumberinputEnt;/* Number of input table entries */
icUInt16NumberoutputEnt;/* Number of output table entries */
icUInt16Numberdata[icAny];/* Data follows see spec for size
*/
/*
* Data that follows is of this form
*
* icUInt16NumberinputTable[inputChan][icAny];* The input table
* icUInt16NumberclutTable[icAny];* The clut table
* icUInt16NumberoutputTable[outputChan][icAny];* The output
table
*/
} icLut16;
|
-
typedef struct {
icStandardObserver stdObserver; /* Standard observer */
icXYZNumber backing; /* XYZ for backing material */
icMeasurementGeometry geometry; /* Measurement geometry */
icMeasurementFlare flare; /* Measurement flare */
icIlluminant illuminant; /* Illuminant */
} icMeasurement;
|
- Each field in icMeasurement is an enumerated type. For details on each field, see the following:
-
-
-
icNamedColor
-
Note - icNamedColor is obsolete. Use icNamedColor2.
-
-
icNamedColor2
-
/*
* icNamedColor2 takes the place of icNamedColor, approved at the
* SIGGRAPH 95, ICC meeting.
*/
typedef struct {
icUInt32Number vendorFlag; /* Bottom 16 bits for IC use */
icUInt32Number count; /* Count of named colors */
icUInt32Number nDeviceCoords; /* Number 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 first color
* icUInt16Number pcsCoords1[icAny]; * PCS coordinates of first color
* icUInt16Number deviceCoords1[icAny]; * Device coordinates of first color
* icInt8Number root2[32]; * Root name for second color
* icUInt16Number pcsCoords2[icAny]; * PCS coordinates of first color
* icUInt16Number deviceCoords2[icAny]; * Device coordinates of first 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 the ICC
* specification. Only 16 bit CIELAB and CIEXYZ 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;
|
-
-
icProfileSequenceDesc
icScreening
icScreeningData
icText
-
typedef struct {
icUInt32Number count; /* Number of descriptions */
icUInt8Number data[icAny];/* Array of description struct */
} icProfileSequenceDesc;
|
-
typedef struct {
icUInt32Number screeningFlag; /* Screening flag */
icUInt32Number channels; /* Number of channels */
icScreeningData data[icAny]; /* Array of screening data */
} icScreening;
|
-
typedef struct {
icS15Fixed16Number frequency; /* Frequency */
icS15Fixed16Number angle; /* Screen angle */
icSpotShape spotShape; /* Spot Shape encodings */
} icScreeningData;
|
-
typedef struct {
icInt8Numberdata[icAny];/* Variable array of chars */
} icText;
|
-
-
icTextDescription
-
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;
|
-
-
icUcrBg
-
typedef struct {
icInt8Number data[icAny]; /* The Ucr BG data */
/*
* Data that follows is of this form. UcrBg is a icInt8Number
* to avoid problems with a compiler as
* these are variable-length arrays.
*
* icUcrBgCurve ucr; * Ucr curve
* icUcrBgCurve bg; * Bg curve
* icInt8Number string; * UcrBg description string
*/
} icUcrBg;
|
-
-
icUcrBgCurve
-
/* Structure describing either a UCR or BG curve */
typedef struct {
icUInt32Number count; /* Curve length */
icUInt16Number curve[icAny];/* The array of curve values */
} icUcrBgCurve;
|
-
-
icViewingCondition
-
typedef struct {
icXYZNumber illuminant;/* In candelas per metre sq'd */
icXYZNumber surround; /* In candelas per metre sq'd */
icIlluminant stdIluminant;/* See icIlluminant defines */
} icViewingCondition;
|
-
-
icXYZArray
-
typedef struct {
icXYZNumberdata[icAny]; /* Variable array of XYZ numbers */
} icXYZArray;
|
-
-
icXYZNumber
-
typedef struct {
icS15Fixed16Number X;
icS15Fixed16Number Y;
icS15Fixed16Number Z;
} icXYZNumber;
|
Attribute Type Definitions
- The following attribute type definitions are in the icc.h header file.
-
-
icCrdInfoType
-
typedef struct {
icTagBase base; /* "crdi" signature */
icCrdInfo info[5]; /* 5 sets of counts/strings */
} icCrdInfoType;
|
-
-
icCurveType
icDataType
icDateTimeType
icLut8Type
icLut16Type
-
typedef struct {
icTagBase base; /* "curv" signature */
icCurve curve; /* curve data */
} icCurveType;
|
-
typedef struct {
icTagBase base; /* "data" signature */
icData data; /* data structure */
} icDataType;
|
-
typedef struct {
icTagBase base; /* "dtim" signature */
icData data; /* date */
} icDateTimeType;
|
-
typedef struct {
icTagBase base; /* "mft1" signature */
icLut8 lut; /* Lut8 data*/
} icLut8Type;
|
-
typedef struct {
icTagBase base; /* "mft2" signature */
icLut16 lut; /* Lut16 data*/
} icLut16Type;
|
-
-
icMeasurementType
-
typedef struct {
icTagBase base; /* "meas" signature */
icMeasurement measurement; /* measurement data*/
} icMeasurementType;
|
-
-
icNamedColor2Type
icNamedColor2Type replaces icNamedColorType, which is obsolete.
-
typedef struct {
icTagBase base; /* "ncl2" signature */
icNamedColor2 ncolor; /* named color data*/
} icNamedColor2Type;
|
-
-
icProfileSequenceType
-
typedef struct {
icTagBase base; /* "pseq" signature */
icProfileSequence desc; /* seq description data*/
} icProfileSequenceType;
|
-
-
icS15Fixed16ArrayType
icScreeningType
-
typedef struct {
icTagBase base; /* "sf32" signature */
icS15Fixed16Array data; /* array of values */
} icS15Fixed16ArrayType;
|
-
typedef struct {
icTagBase base; /* "scrn" signature */
icScreening screen; /* screening structure */
} icScreeningType;
|
-
-
icSignatureType
icTagBase
icTextDescriptionType
icTextType
icU16Fixed16ArrayType
-
typedef struct {
icTagBase base; /* "sig" signature */
icSignature signature; /* signature data */
} icSignatureType;
|
-
typedef struct {
icTagTypeSignature sig; /* Signature */
icInt8Number reserved[4]; /* Reserved, set to 0 */
} icTagBase;
|
-
typedef struct {
icTagBase base; /* "desc" signature */
icTextDescription desc; /* description data*/
} icTextDescriptionType;
|
-
typedef struct {
icTagBase base; /* "text" signature */
icText data; /* variable array of chars */
} icTextType;
|
-
typedef struct {
icTagBase base; /* "uf32" signature */
icU16Fixed16Array data; /* variable array of values */
} icU16Fixed16ArrayType;
|
-
-
icUcrBgType
icUInt8ArrayType
icUInt16ArrayType
icUInt32ArrayType
icUInt64ArrayType
-
typedef struct {
icTagBase base; /* "bfd" signature */
icUcrBg data; /* ucrBg structure*/
} icUcrBgType;
|
-
typedef struct {
icTagBase base; /* "ui08" signature */
icUInt8Array data; /* variable array of values */
} icUInt8ArrayType;
|
-
typedef struct {
icTagBase base; /* "ui16" signature */
icUInt16Array data; /* variable array of values */
} icUInt16ArrayType;
|
-
typedef struct {
icTagBase base; /* "ui32" signature */
icUInt32Array data; /* variable array of values */
} icUInt32ArrayType;
|
-
typedef struct {
icTagBase base; /* "ui64" signature */
icUInt64Array data; /* variable array of values */
} icUInt64ArrayType;
|
-
-
icViewingConditionType
icXYZType
-
typedef struct {
icTagBase base; /* "view" signature */
icViewingCondition view; /* viewing conditions*/
} icViewingConditionType;
|
-
typedef struct {
icTagBase base; /* "XYZ" signature */
icXYZArray data; /* variable array of XYZ numbers */
} icXYZType;
|
CMM-Specific Attribute Definitions
- The following attribute definitions in the icc.h header file are CMM-specific. These definitions are registered with the ICC and are available for public use.
-
-
icHeader
-
typedef struct {
icUInt32Number size; /* Profile size in bytes */
icSignature cmmId; /* CMM for this profile */
icUInt32Number version; /* Format version number */
icProfileClassSignature deviceClass;/* Type of profile */
icColorSpaceSignature colorSpace;/* Color space of data*/
icColorSpaceSignature pcs; /* PCS, XYZ or LAB only */
icDateTimeNumber date; /* Date profile was created */
icSignature magic; /* icMagicNumber */
icPlatformSignature platform; /* Primary Platform */
icUInt32Number flags; /* Various bit settings */
icSignature manufacturer; /* Device manufacturer */
icUInt32Number model; /* Device model number */
icUInt64Number attributes;/* Device attributes */
icUInt32Number renderingIntent; /* Rendering intent */
icXYZNumber illuminant;/* Profile illuminant */
icSignature creator; /* Profile creator */
icInt8Number reserved[48]; /* Reserved for future */
} icHeader;
|
-
-
icProfile
-
typedef struct {
icHeader header; /* header */
icUInt32Number count; /* number of tags in profile */
icInt8Number data[icAny];/* tagTable and tagData */
/* Data the follows is of this form:
* icTag tagTable[icAny]; * tag table
* icInt8Number tagData[icAny]; * tag data
*/
} icProfile;
|
-
-
icTag
-
typedef struct {
icTagSignature sig; /* tag signature */
icUInt32Number offset; /* start of tag relative to start of
* header, See ICC spec, sect 8 */
icUInt32Number size; /* size in bytes */
} icTag;
|
-
-
icTagList
-
typedef struct {
icUInt32Number count; /* number of tags in profile */
icTag tags[icAny]; /* variable array of tags */
} icTagList;
|
|
|