The examples below show how to get and set attributes.
When setting an attribute, the KcsProfile object in the KcsProfile object array passes the setting of the attribute to the KcsAttributeSet object contained in its KcsProfileFormat object. This is illustrated in Figure 3-2 and in the KCMS API code excerpt shown in Example 3-7.
/* double2icFixed converts a double float to a signed 15 16 fixed point * number */ /* Set white point */ test_double[] = 0.2556; test_double[1] = 0.600189; test_double[2] = 0.097794; attrValue.base.countSupplied = 1 attrValue.base.type = icSigXYZType; attrValue.base.sizeof(icXYZNumber); attrValue.val.icXYZ.[0].X = double2icfixed(test_double[0], icSigS15Fixed16ArrayType); attrValue.val.icXYZ.[0].Y = double2icfixed(test_double[1], icSigS15Fixed16ArrayType); attrValue.val.icXYZ.[0].Z = double2icfixed(test_double[2], icSigS15Fixed16ArrayType); rc = KcsSetAttribute(profileid, icSigMediaWhitepointTag, &attrValue); if (rc != KCS_SUCCESS { KcsGetLastError(&errDesc); fprintf(stderr, "unable to set whitepoint: %s\n", errDesc.desc); KcsFreeProfile(profileid); return (-1); }
When getting an attribute, the KcsProfile object in the array passes the getting of the attribute to the KcsAttributeSet object contained in its KcsProfileFormat object (replacing set with get). This is illustrated in Figure 3-2 and in the KCMS API code excerpt shown in Example 3-8.
/* Get the colorants */ /* icfixed2double converts signed 15.16 fixed point number to a double * float */ /*Red */ attrValuePtr = (KcsAttributeValue *) malloc(sizeof(KcsAttributeBase) + sizeof(icXYZNumber)); attrValuePtr->base.type = icSigXYZArrayType; attrValuePtr->base.countSupplied = 1; status = KcsGetAttribute(profileid, icSigRedColorantTag, attrValuePtr); if (status != KCS_SUCCESS) { status = KcsGetLastError(&errDesc); printf("GetAttribute error: $s\n", errDesc.desc); KcsFreeProfile(profileid); exit(1); } XYZval = (icXYZNumber *)attrValuePtr->val.icXYZ.data; printf("Red X=%f Y=%f Z=%f\n", icfixed2double(XYZval->X, icSigS15Fixed16ArrayType), icfixed2double(XYZval->Y, icSigS15Fixed16ArrayType), icfixed2double(XYZval->Z, icSigS15Fixed16ArrayType),