/* * Construct a new separation color space. */ int gs_cspace_new_Separation( gs_color_space **ppcs, gs_color_space * palt_cspace, gs_memory_t * pmem ) { gs_color_space *pcs; int code; if (palt_cspace == 0 || !palt_cspace->type->can_be_alt_space) return_error(gs_error_rangecheck); pcs = gs_cspace_alloc(pmem, &gs_color_space_type_Separation); if (pcs == NULL) return_error(gs_error_VMerror); pcs->params.separation.map = NULL; code = alloc_device_n_map(&pcs->params.separation.map, pmem, "gs_cspace_build_Separation"); if (code < 0) { gs_free_object(pmem, pcs, "gs_cspace_build_Separation"); return_error(code); } pcs->base_space = palt_cspace; rc_increment_cs(palt_cspace); *ppcs = pcs; return 0; }
RELOC_PTRS_END /* ------ Public procedures ------ */ /* * Create a new DeviceN colorspace. */ int gs_cspace_new_DeviceN( gs_color_space **ppcs, uint num_components, gs_color_space *palt_cspace, gs_memory_t *pmem ) { gs_color_space *pcs; gs_device_n_params *pcsdevn; gs_separation_name *pnames; int code; if (palt_cspace == 0 || !palt_cspace->type->can_be_alt_space) return_error(gs_error_rangecheck); pcs = gs_cspace_alloc(pmem, &gs_color_space_type_DeviceN); if (pcs == NULL) return_error(gs_error_VMerror); pcsdevn = &pcs->params.device_n; pcsdevn->names = NULL; pcsdevn->map = NULL; pcsdevn->colorants = NULL; /* Allocate space for color names list. */ code = alloc_device_n_map(&pcsdevn->map, pmem, "gs_cspace_build_DeviceN"); if (code < 0) { gs_free_object(pmem, pcs, "gs_cspace_new_DeviceN"); return code; } /* Allocate space for color names list. */ pnames = (gs_separation_name *) gs_alloc_byte_array(pmem, num_components, sizeof(gs_separation_name), ".gs_cspace_build_DeviceN(names)"); if (pnames == 0) { gs_free_object(pmem, pcsdevn->map, ".gs_cspace_build_DeviceN(map)"); gs_free_object(pmem, pcs, "gs_cspace_new_DeviceN"); return_error(gs_error_VMerror); } pcs->base_space = palt_cspace; rc_increment_cs(palt_cspace); pcsdevn->names = pnames; pcsdevn->num_components = num_components; *ppcs = pcs; return 0; }