Difference between revisions of "SpecIccForCairo"

From Inkscape Wiki
Jump to navigation Jump to search
(→‎Colors: typo)
(Try to match cairo API a little better)
Line 9: Line 9:
So a proposal would be:
So a proposal would be:


  typedef struct {
  typedef enum cairo_color_intent {
  DWORD :size;
  CAIRO_COLOR_INTENT_PERCEPTUAL,
void *:data;
  CAIRO_COLOR_INTENT_RELATIVE_COLORIMETRIC,
  } cairo_color_profile_t
  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_add_profile_pair (cairo_surface_t *surf,  
  void cairo_pattern_add_profile_pair (cairo_pattern_t *pat,  
                                    cairo_color_profile_t in,  
                                      cairo_color_profile_t *in,  
                                    cairo_color_profile_t out);
                                      cairo_color_profile_t *out);
   
   
  void cairo_surface_remove_profiles (cairo_surface_t *surf);
  void cairo_pattern_remove_profiles (cairo_pattern_t *pat);
   
   
  void cairo_surface_set_transformation (cairo_surface_t *surf,  
  void cairo_pattern_set_color_intent(cairo_pattern_t *pat,
                                      DWORD input_format,               
                                    cairo_color_intent_t intent);
                                      DWORD output_format,
                                      int intent,
                                      DWORD flags)


Profiles and transformation must be set '''before''' any call to a cairo function using a color.
== Colors==
== Colors==
All the functions handling colors, like cairo_set_source_rgba and cairo_set_source_rgb, must be complemented (or replaced) with  
All the functions handling colors, like cairo_set_source_rgba and cairo_set_source_rgb, must be complemented (or replaced) with  
  void cairo_set_source_profiled_color  (cairo_t *cr, void* color);
  void cairo_set_source_profiled_color  (cairo_t *cr, void* color);
format of the color is the one defined by DWORD input_format.
format of the color is the one defined by DWORD input_format.

Revision as of 18:53, 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 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_pattern_add_profile_pair (cairo_pattern_t *pat, 
                                     cairo_color_profile_t *in, 
                                     cairo_color_profile_t *out);

void cairo_pattern_remove_profiles (cairo_pattern_t *pat);

void cairo_pattern_set_color_intent(cairo_pattern_t *pat,
                                    cairo_color_intent_t intent);

Colors

All the functions handling colors, like cairo_set_source_rgba and cairo_set_source_rgb, must be complemented (or replaced) with

void cairo_set_source_profiled_color  (cairo_t *cr, void* color);

format of the color is the one defined by DWORD input_format.