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); }