diff options
author | Robin Watts <robin.watts@artifex.com> | 2017-07-07 14:27:33 +0100 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2017-09-08 17:46:50 +0100 |
commit | a7f36241cba4d1807ab4664201aa0975755d6772 (patch) | |
tree | 6a15ab1b47af54d9f733915a20c0f609b07bc72f /include | |
parent | d4afa7b72e0b7d774250f13c3c36d04a5e1415d0 (diff) | |
download | mupdf-a7f36241cba4d1807ab4664201aa0975755d6772.tar.xz |
Update draw device to cope with spots.
If draw device is passed a pixmap with disabled separations, it
may have to push an extra group at the top to allow for the
actual rendering to properly happen in cmyk+spots, and then get
folded down at the end.
This pushing cannot happen at create time, due to it being
dependent on the defualt_cs settings. Accordingly, we push it
(just once) on the first drawing operation.
This means we need to be able to convert from "colorspace + set
of spots" to "different colorspace + different set of spots".
This in turn means we need to be able to drive lcms slightly
differently (to tell it whether to copy the spots unchanged
or not), so we have to amend the CMS interface code a bit for
that.
Currently we lack plotters to properly cope with plotting
images and shades with spots, so this will give a warning and
do nothing. To be filled in in future commits.
Ensure fz_get_icc_link accepts NULL to mean default color params.
Incorporates fixes from Michel Vrhel:
With transparency groups we can have RGB + spot pixmaps. When
drawing into those we need a mixture of colorant polarity. Ensure
that fz_convert_separation_colors takes account of this.
Fix C1 of Altona_Technical_1v1_x3.pdf (allow for output intent in
fz_clone_pixmap_area_with_different_seps).
Diffstat (limited to 'include')
-rw-r--r-- | include/mupdf/fitz/color-management.h | 2 | ||||
-rw-r--r-- | include/mupdf/fitz/pixmap.h | 10 | ||||
-rw-r--r-- | include/mupdf/fitz/separation.h | 8 | ||||
-rw-r--r-- | include/mupdf/fitz/store.h | 11 |
4 files changed, 25 insertions, 6 deletions
diff --git a/include/mupdf/fitz/color-management.h b/include/mupdf/fitz/color-management.h index 9ab1d133..a2f20e9d 100644 --- a/include/mupdf/fitz/color-management.h +++ b/include/mupdf/fitz/color-management.h @@ -45,7 +45,7 @@ typedef void (fz_cmm_transform_color_fn)(fz_cmm_instance *ctx, fz_icclink *link, /* fz_cmm_init_link_fn: Create a new link between icc profiles. */ -typedef void (fz_cmm_init_link_fn)(fz_cmm_instance *ctx, fz_icclink *link, const fz_color_params *rend, int cmm_flags, int num_bytes, int extras, const fz_iccprofile *src, const fz_iccprofile *prf, const fz_iccprofile *des); +typedef void (fz_cmm_init_link_fn)(fz_cmm_instance *ctx, fz_icclink *link, const fz_iccprofile *dst, int dst_extras, const fz_iccprofile *src, int src_extras, const fz_iccprofile *prf, const fz_color_params *rend, int cmm_flags, int num_bytes, int copy_spots); /* fz_cmm_fin_link_fn: Drop a link. diff --git a/include/mupdf/fitz/pixmap.h b/include/mupdf/fitz/pixmap.h index 533ff735..580ccdf9 100644 --- a/include/mupdf/fitz/pixmap.h +++ b/include/mupdf/fitz/pixmap.h @@ -401,7 +401,7 @@ void fz_unpack_tile(fz_context *ctx, fz_pixmap *dst, unsigned char * restrict sr fz_pixmap_converter: Color convert a pixmap. The passing of default_cs is needed due to the base cs of the image possibly needing to be treated as being in one of the page default color spaces. */ -typedef void (fz_pixmap_converter)(fz_context *ctx, fz_pixmap *dp, fz_pixmap *sp, fz_colorspace *prf, const fz_default_colorspaces *default_cs, const fz_color_params *color_params); +typedef void (fz_pixmap_converter)(fz_context *ctx, fz_pixmap *dp, fz_pixmap *sp, fz_colorspace *prf, const fz_default_colorspaces *default_cs, const fz_color_params *color_params, int copy_spots); fz_pixmap_converter *fz_lookup_pixmap_converter(fz_context *ctx, fz_colorspace *ds, fz_colorspace *ss); /* @@ -418,4 +418,12 @@ int fz_valgrind_pixmap(const fz_pixmap *pix); #define fz_valgrind_pixmap(pix) do {} while (0) #endif +/* + fz_clone_pixmap_area_with_different_seps: Convert between + different separation results. +*/ +fz_pixmap *fz_clone_pixmap_area_with_different_seps(fz_context *ctx, fz_pixmap *src, const fz_irect *bbox, fz_colorspace *dcs, fz_separations *seps, fz_colorspace *prf, fz_default_colorspaces *default_cs); + +fz_pixmap *fz_copy_pixmap_area_converting_seps(fz_context *ctx, fz_pixmap *dst, fz_pixmap *src, fz_colorspace *prf, fz_default_colorspaces *default_cs); + #endif diff --git a/include/mupdf/fitz/separation.h b/include/mupdf/fitz/separation.h index 4d17fc53..4b4be865 100644 --- a/include/mupdf/fitz/separation.h +++ b/include/mupdf/fitz/separation.h @@ -64,4 +64,12 @@ int fz_separations_controllable(fz_context *ctx, const fz_separations *seps); /* Return the number of active separations. */ int fz_count_active_separations(fz_context *ctx, const fz_separations *seps); +/* If the separations selection is unsuitable for overprint, + * clone it to produce one that is, otherwise return NULL. */ +fz_separations *fz_clone_separations_for_overprint(fz_context *ctx, fz_separations *seps); + +/* Convert a color given in terms of one colorspace, + * to a color in terms of another colorspace/separations. */ +void fz_convert_separation_colors(fz_context *ctx, const fz_color_params *color_params, const fz_colorspace *dst_cs, const fz_separations *dst_sep, float *dst_color, const fz_colorspace *src_cs, const float *src_color); + #endif diff --git a/include/mupdf/fitz/store.h b/include/mupdf/fitz/store.h index 1a0ae87b..9d363c6b 100644 --- a/include/mupdf/fitz/store.h +++ b/include/mupdf/fitz/store.h @@ -139,10 +139,13 @@ typedef struct fz_store_hash_s { unsigned char src_md5[16]; unsigned char dst_md5[16]; - uint8_t ri_bp; - uint8_t depth; - uint8_t extras; - uint8_t proof; + unsigned int ri:2; + unsigned int bp:1; + unsigned int bpp16:1; + unsigned int proof:1; + unsigned int src_extras:5; + unsigned int dst_extras:5; + unsigned int copy_spots:1; } link; /* 36 bytes */ } u; } fz_store_hash; /* 40 or 44 bytes */ |