Difference between revisions of "SpecIccForCairo"
Jump to navigation
Jump to search
m (whitespace) |
|||
Line 34: | Line 34: | ||
void | void | ||
cairo_surface_set_color_intent(cairo_surface_t *surf, | |||
cairo_color_intent_t intent); | |||
cairo_color_intent_t | |||
cairo_surface_get_color_intent(cairo_surface_t *surf); | |||
void | void | ||
cairo_set_source_icc_color(cairo_color_profile_t *profile, | cairo_set_source_icc_color(cairo_color_profile_t *profile, | ||
const double *components, | const double *components, | ||
int num_components); | int num_components); | ||
== Open issues == | |||
- Should surface profile/color rendering changes be allowed once the surface is being actively used? | |||
- How should gradients work in this regime? |
Revision as of 19:12, 23 February 2008
Why
In order for inkscape to produce CMYK PDFs and PSs with cairo, Cairo needs to support ICC. This is an intent to propose a Cairo API that would be suitable with inkscape needs.
Profiles
A set of profiles will apply to the whole Cairo surface. Cairo needs to be able to compute a transform from this set. We can get inspiration from the lcms api [1], in particular the cmsCreateMultiprofileTransform (more generic than cmsCreateTransform that handles only a single pair of color profiles).
So a proposal would be:
typedef enum cairo_color_intent { CAIRO_COLOR_INTENT_PERCEPTUAL, CAIRO_COLOR_INTENT_RELATIVE_COLORIMETRIC, CAIRO_COLOR_INTENT_SATURATION, CAIRO_COLOR_INTENT_ABSOLUTE_COLORIMETRIC } cairo_color_intent_t; typedef struct cairo_color_profile cairo_color_profile_t;
void cairo_surface_set_color_profile(cairo_surface_t *surf, cairo_color_profile_t *profile); cairo_color_profile_t * cairo_surface_get_color_profile(cairo_surface_t *surf); void cairo_surface_add_profile_mapping(cairo_surface_t *surf, cairo_color_profile_t *in, cairo_color_profile_t *out); void cairo_surface_remove_profile_mappings(cairo_surface_t *surf); void cairo_surface_set_color_intent(cairo_surface_t *surf, cairo_color_intent_t intent); cairo_color_intent_t cairo_surface_get_color_intent(cairo_surface_t *surf);
void cairo_set_source_icc_color(cairo_color_profile_t *profile, const double *components, int num_components);
Open issues
- Should surface profile/color rendering changes be allowed once the surface is being actively used?
- How should gradients work in this regime?