How do I extract the alternate color values of a separation color?
Estimated Reading Time: 1 MinutesFor Separation colors, the equivalents are retrieved by running the color value through the alternate color function using the PDApplyFunction() API.
float inVal[4], tintTrans[4]; ... /* If this element has a GState, retrieve the Color Information here: */ if (PDEElementHasGState (pdeElement, &graphicState, (sizeof (PDEGraphicState)) )) { if ( !strcmp ( ASAtomGetString(PDEColorSpaceGetName(graphicState.fillColorSpec.space)), N_SEPARATION) ) { DURING /* Get the name of the custom color : */ strcpy (separationColor, ""); PDEColorSpaceGetCosObj (graphicState.fillColorSpec.space, &cosObj); /* Separation Color Space entry has four entries */ arrayEntry = CosArrayGet(cosObj,0); /* First is the family name */ printf("\nFamily Name = %s\n",ASAtomGetString( CosNameValue (arrayEntry)) ); arrayEntry = CosArrayGet(cosObj,1); /* Second is the name parameter */ printf("name parameter = %s\n",ASAtomGetString( CosNameValue (arrayEntry)) ); arrayEntry = CosArrayGet(cosObj,2); /*Third is the alternateSpace (must be array or name object) */ printf("alternateSpace = %s\n",ASAtomGetString( CosNameValue (arrayEntry)) ); arrayEntry = CosArrayGet(cosObj,3); /*Fourth is the tintTransForm */ InVal[0] = FixedToFloat(graphicState.fillColorSpec.value.color[0]); PDApplyFunction(arrayEntry, InVal, tintTrans); printf("TintTrans color0 = %f \n",tintTrans[0]); printf("TintTrans color1 = %f \n",tintTrans[1]); printf("TintTrans color2 = %f \n",tintTrans[2]); printf("TintTrans color3 = %f \n",tintTrans[3]); HANDLER printf ("Error. Can't retrieve colorObj.\n"); handleError (ERRORCODE); END_HANDLER } //#endif foundGState = 1; } /* end hasGState */
For ICC-based colors use the color values returned in an appropriate gray, RGB or CMYK space. ThePDEColorSpaceGetNumComps() API will return the number of color components in the ICC color space:
- DeviceGray, 1
- DeviceRGB, 3
- DeviceCMYK, 4
The PDEColorSpaceGetNumComps() API will always return “1” for Separation color spaces because there is only one component for a Separation color space (by definition).