[gs-code-review] Re: Accepting images in pattern color space.

Igor V. Melichev igor.melichev at artifex.com
Sun Jan 7 10:03:14 PST 2007


Alex,

You wrote :

+       if (bsp)
+         csp = bsp;

Would you mind to add 'else' here ?

Igor.

----- Original Message ----- 
From: "Alex Cherepanov" <alexcher at quadnet.net>
To: "gs-code-review" <gs-code-review at ghostscript.com>; "Leonardo" 
<leonardo at artifex.com>
Sent: Sunday, January 07, 2007 6:44 PM
Subject: Accepting images in pattern color space. xefitra


> Adobe interpreters appear to accept sampled images in the pattern
> color space using the base color space instead of the pattern space.
> We do the same in the CPSI compatibility mode to meed CET 12-07a-12.
>
> DIFFERENCES:
> None
>
> This hack need a careful review because:
> - it contradicts the published PostScript specification
> - it is not clear (to me) whether the base color space can be
>   always used this way.
>
>


--------------------------------------------------------------------------------


>
> S:\gs_svn>svn diff gs/src/zimage.c gs/src/zimage3.c gs/src/ztrans.c 
> gs/src/iimage.h gs/src/int.mak gs/doc/pscet_status.txt
> Index: gs/src/zimage.c
> ===================================================================
> --- gs/src/zimage.c (revision 7577)
> +++ gs/src/zimage.c (working copy)
> @@ -35,6 +35,7 @@
> #include "stream.h"
> #include "ifilter.h" /* for stream exception handling */
> #include "iimage.h"
> +#include "gxcspace.h"
>
> /* Forward references */
> private int zimage_data_setup(i_ctx_t *i_ctx_p, const gs_pixel_image_t * 
> pim,
> @@ -116,15 +117,15 @@
> int
> pixel_image_params(i_ctx_t *i_ctx_p, const ref *op, gs_pixel_image_t *pim,
>     image_params *pip, int max_bits_per_component,
> -    bool has_alpha)
> +    bool has_alpha, const gs_color_space *csp)
> {
>     int num_components =
> - gs_color_space_num_components(gs_currentcolorspace(igs));
> + gs_color_space_num_components(csp);
>     int code;
>
>     if (num_components < 1)
>  return_error(e_rangecheck); /* Pattern space not allowed */
> -    pim->ColorSpace = gs_currentcolorspace(igs);
> +    pim->ColorSpace = csp;
>     code = data_image_params(imemory, op, (gs_data_image_t *) pim, pip, 
> true,
>       num_components, max_bits_per_component,
>       has_alpha);
> @@ -161,14 +162,26 @@
>     gs_image_t      image;
>     image_params    ip;
>     int             code;
> +    const gs_color_space *csp = gs_currentcolorspace(igs);
> +    extern bool CPSI_mode;
>
> -    gs_image_t_init(&image, gs_currentcolorspace(igs));
> +    /* 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 (CPSI_mode && gs_color_space_num_components(csp) < 1) {
> +       const gs_color_space *bsp = cs_base_space(csp);
> +       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 );
> +                               has_alpha, csp);
>     if (code < 0)
>  return code;
>
> Index: gs/src/zimage3.c
> ===================================================================
> --- gs/src/zimage3.c (revision 7577)
> +++ gs/src/zimage3.c (working copy)
> @@ -52,8 +52,8 @@
>  )
>  return_error(e_rangecheck);
>     if ((code = pixel_image_params(i_ctx_p, pDataDict,
> -    (gs_pixel_image_t *)&image, &ip_data,
> -    12, false)) < 0 ||
> + (gs_pixel_image_t *)&image, &ip_data,
> + 12, false, gs_currentcolorspace(igs))) < 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 ||
> @@ -95,7 +95,7 @@
>
>     gs_image4_t_init(&image, NULL);
>     code = pixel_image_params(i_ctx_p, op, (gs_pixel_image_t *)&image, 
> &ip,
> -       12, false);
> +       12, false, gs_currentcolorspace(igs));
>     if (code < 0)
>  return code;
>     code = dict_int_array_check_param(imemory, op, "MaskColor",
> Index: gs/src/ztrans.c
> ===================================================================
> --- gs/src/ztrans.c (revision 7577)
> +++ gs/src/ztrans.c (working copy)
> @@ -365,8 +365,8 @@
>     if (dict_find_string(op, "DataDict", &pDataDict) <= 0)
>  return_error(e_rangecheck);
>     if ((code = pixel_image_params(i_ctx_p, pDataDict,
> -    (gs_pixel_image_t *)&image, &ip_data,
> -    16, false)) < 0 ||
> +    (gs_pixel_image_t *)&image, &ip_data,
> +    16, false, gs_currentcolorspace(igs))) < 0 ||
>  (code = dict_int_param(pDataDict, "ImageType", 1, 1, 0, &ignored)) < 0
>  )
>  return code;
> Index: gs/src/iimage.h
> ===================================================================
> --- gs/src/iimage.h (revision 7577)
> +++ gs/src/iimage.h (working copy)
> @@ -38,7 +38,8 @@
>                       bool has_alpha);
> int pixel_image_params(i_ctx_t *i_ctx_p, const ref *op,
>                        gs_pixel_image_t *pim, image_params * pip,
> -                       int max_bits_per_component, bool has_alpha);
> +                       int max_bits_per_component, bool has_alpha,
> +                       const gs_color_space *csp);
>
> /* Exported for zimage3.c and ztrans.c */
> int zimage_setup(i_ctx_t *i_ctx_p, const gs_pixel_image_t * pim,
> Index: gs/src/int.mak
> ===================================================================
> --- gs/src/int.mak (revision 7577)
> +++ gs/src/int.mak (working copy)
> @@ -481,7 +481,7 @@
>  $(gscspace_h) $(gscssub_h) $(gsimage_h) $(gsmatrix_h) $(gsstruct_h)\
>  $(gxiparam_h)\
>  $(estack_h) $(ialloc_h) $(ifilter_h) $(igstate_h) $(iimage_h) 
> $(ilevel_h)\
> - $(store_h) $(stream_h)
> + $(store_h) $(stream_h) $(gxcspace_h)
>  $(PSCC) $(PSO_)zimage.$(OBJ) $(C_) $(PSSRC)zimage.c
>
> $(PSOBJ)zmatrix.$(OBJ) : $(PSSRC)zmatrix.c $(OP)\
> Index: gs/doc/pscet_status.txt
> ===================================================================
> --- gs/doc/pscet_status.txt (revision 7577)
> +++ gs/doc/pscet_status.txt (working copy)
> @@ -2168,8 +2168,8 @@
>
> 12-07A-11  OK Minor differences visually reviewed by RJJ
>
> -12-07A-12  DIFF GS reports one more rangecheck in image than CPSI. 
> Square
> - pattern missing in GS output.  assign Alex (initially).
> +12-07A-12  OK  Adobe acceptts images in the pattern color space.
> + Since rev. 7578 we do this too in the compatibility mode. - Alex
>
> 12-07A-13  OK Minor differences in positions and character shapes - ADC
>
> 



More information about the gs-code-review mailing list