/* <dict> .image3 - */ private int zimage3(i_ctx_t *i_ctx_p) { os_ptr op = osp; gs_image3_t image; int interleave_type; ref *pDataDict; ref *pMaskDict; image_params ip_data, ip_mask; int ignored; int code, mcode; check_type(*op, t_dictionary); check_dict_read(*op); if ((code = dict_int_param(op, "InterleaveType", 1, 3, -1, &interleave_type)) < 0 ) return code; gs_image3_t_init(&image, NULL, interleave_type); if (dict_find_string(op, "DataDict", &pDataDict) <= 0 || dict_find_string(op, "MaskDict", &pMaskDict) <= 0 ) return_error(e_rangecheck); if ((code = pixel_image_params(i_ctx_p, pDataDict, (gs_pixel_image_t *)&image, &ip_data, 12, false)) < 0 || (mcode = code = data_image_params(imemory, pMaskDict, &image.MaskDict, &ip_mask, false, 1, 12, false)) < 0 || (code = dict_int_param(pDataDict, "ImageType", 1, 1, 0, &ignored)) < 0 || (code = dict_int_param(pMaskDict, "ImageType", 1, 1, 0, &ignored)) < 0 ) return code; /* * MaskDict must have a DataSource iff InterleaveType == 3. */ if ((ip_data.MultipleDataSources && interleave_type != 3) || ip_mask.MultipleDataSources || mcode != (image.InterleaveType != 3) ) return_error(e_rangecheck); if (image.InterleaveType == 3) { /* Insert the mask DataSource before the data DataSources. */ memmove(&ip_data.DataSource[1], &ip_data.DataSource[0], (countof(ip_data.DataSource) - 1) * sizeof(ip_data.DataSource[0])); ip_data.DataSource[0] = ip_mask.DataSource[0]; } return zimage_setup(i_ctx_p, (gs_pixel_image_t *)&image, &ip_data.DataSource[0], image.CombineWithColor, 1); }
/* <dict> .imagemask1 - */ static int zimagemask1(i_ctx_t *i_ctx_p) { os_ptr op = osp; gs_image_t image; image_params ip; int code; gs_image_t_init_mask_adjust(&image, false, gs_incachedevice(igs) != CACHE_DEVICE_NONE); code = data_image_params(imemory, op, (gs_data_image_t *) & image, &ip, true, 1, 1, false); if (code < 0) return code; return zimage_setup(i_ctx_p, (gs_pixel_image_t *)&image, &ip.DataSource[0], true, 1); }
/* <dict> .image4 - */ static int zimage4(i_ctx_t *i_ctx_p) { os_ptr op = osp; gs_image4_t image; image_params ip; int num_components = gs_color_space_num_components(gs_currentcolorspace(igs)); int colors[countof(image.MaskColor)]; int code; int i; gs_image4_t_init(&image, NULL); code = pixel_image_params(i_ctx_p, op, (gs_pixel_image_t *)&image, &ip, 12, false, gs_currentcolorspace(igs)); if (code < 0) return code; code = dict_int_array_check_param(imemory, op, "MaskColor", num_components * 2, colors, 0, e_rangecheck); /* Clamp the color values to the unsigned range. */ if (code == num_components) { image.MaskColor_is_range = false; for (i = 0; i < code; ++i) image.MaskColor[i] = (colors[i] < 0 ? ~(uint)0 : colors[i]); } else if (code == num_components * 2) { image.MaskColor_is_range = true; for (i = 0; i < code; i += 2) { if (colors[i+1] < 0) /* no match possible */ image.MaskColor[i] = 1, image.MaskColor[i+1] = 0; else { image.MaskColor[i+1] = colors[i+1]; image.MaskColor[i] = max(colors[i], 0); } } } else return_error(code < 0 ? code : gs_note_error(e_rangecheck)); return zimage_setup(i_ctx_p, (gs_pixel_image_t *)&image, &ip.DataSource[0], image.CombineWithColor, 1); }
/* Common code for .image1 and .alphaimage operators */ int image1_setup(i_ctx_t * i_ctx_p, bool has_alpha) { os_ptr op = osp; gs_image_t image; image_params ip; int code; gs_color_space *csp = gs_currentcolorspace(igs); extern bool CPSI_mode; /* Adobe interpreters accept sampled images when the current color * space is a pattern color space using the base color space instead * of the pattern space. CET 12-07a-12 * If all conditions are not met the pattern color space goes through * triggering a rangecheck error. */ if (CPSI_mode && gs_color_space_num_components(csp) < 1) { gs_color_space *bsp = csp->base_space; if (bsp) csp = bsp; } gs_image_t_init(&image, csp); code = pixel_image_params( i_ctx_p, op, (gs_pixel_image_t *)&image, &ip, (level2_enabled ? 16 : 8), has_alpha, csp); if (code < 0) return code; image.Alpha = (has_alpha ? gs_image_alpha_last : gs_image_alpha_none); return zimage_setup( i_ctx_p, (gs_pixel_image_t *)&image, &ip.DataSource[0], image.CombineWithColor, 1 ); }