Difference between revisions of "SpecIccForCairo"

From Inkscape Wiki
Jump to navigation Jump to search
(More work on matching Cairo API style)
m (whitespace)
Line 15: Line 15:
   CAIRO_COLOR_INTENT_ABSOLUTE_COLORIMETRIC
   CAIRO_COLOR_INTENT_ABSOLUTE_COLORIMETRIC
  } cairo_color_intent_t;
  } cairo_color_intent_t;
 
  typedef struct cairo_color_profile cairo_color_profile_t;
  typedef struct cairo_color_profile cairo_color_profile_t;


Line 21: Line 21:
  cairo_surface_set_color_profile(cairo_surface_t *surf,
  cairo_surface_set_color_profile(cairo_surface_t *surf,
                                 cairo_color_profile_t *profile);
                                 cairo_color_profile_t *profile);
 
  cairo_color_profile_t *
  cairo_color_profile_t *
  cairo_surface_get_color_profile(cairo_surface_t *surf);
  cairo_surface_get_color_profile(cairo_surface_t *surf);
Line 36: Line 36:
  cairo_surface_set_color_rendering(cairo_surface_t *surf,
  cairo_surface_set_color_rendering(cairo_surface_t *surf,
                                   cairo_color_intent_t intent);
                                   cairo_color_intent_t intent);
 
  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);

Revision as of 19:09, 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_rendering(cairo_surface_t *surf,
                                  cairo_color_intent_t intent);

void
cairo_set_source_icc_color(cairo_color_profile_t *profile,
                           const double *components,
                           int num_components);