/* return SRGB color space to the client */ int pl_cspace_init_SRGB(gs_color_space **ppcs, const gs_state *pgs) { int code; /* make sure we have a crd set up */ #ifdef DEVICE_DOES_COLOR_CONVERSION *ppcs = gs_cspace_new_DeviceRGB(pgs->memory); return 0; #endif code = pl_build_crd((gs_state *)pgs); if ( code < 0 ) return code; code = gs_cspace_build_CIEABC(ppcs, NULL, gs_state_memory(pgs)); if ( code < 0 ) return code; *(gs_cie_DecodeLMN(*ppcs)) = pl_DecodeLMN; *(gs_cie_MatrixLMN(*ppcs)) = pl_MatrixLMN; (gs_cie_WhitePoint(*ppcs)) = pl_WhitePoint; (gs_cie_BlackPoint(*ppcs)) = pl_BlackPoint; return 0; }
static int test6(gs_state * pgs, gs_memory_t * mem) { gs_color_space *pcs; gs_cie_abc *pabc; gs_cie_render *pcrd; static const gs_vector3 white_point = {1, 1, 1}; static const gs_cie_render_proc3 encode_abc = { {render_abc, render_abc, render_abc} }; int code; gs_color_space *rgb_cs; rgb_cs = gs_cspace_new_DeviceRGB(mem); gs_scale(pgs, 150.0, 150.0); gs_translate(pgs, 0.5, 0.5); gs_setcolorspace(pgs, rgb_cs); spectrum(pgs, 5); gs_translate(pgs, 1.2, 0.0); /* We must set the CRD before the color space. */ code = gs_cie_render1_build(&pcrd, mem, "test6"); if (code < 0) return code; gs_cie_render1_initialize(mem, pcrd, NULL, &white_point, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &encode_abc, NULL, NULL); gs_setcolorrendering(pgs, pcrd); gs_cspace_build_CIEABC(&pcs, NULL, mem); /* There should be an API for initializing CIE color spaces too.... */ pabc = pcs->params.abc; pabc->common.points.WhitePoint = white_point; gs_cie_abc_complete(pabc); /* End of initializing the color space. */ gs_setcolorspace(pgs, pcs); spectrum(pgs, 5); gs_free_object(mem, rgb_cs, "test6 rgb_cs"); return 0; }