Difference between revisions of "SpecIccForCairo"
(New page: == 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. =...) |
|||
| Line 27: | Line 27: | ||
Profiles and transformation must be set '''before''' any call to a cairo function using a color. | Profiles and transformation must be set '''before''' any call to a cairo function using a color. | ||
== 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_profileded_color (cairo_t *cr, void* color); | void cairo_set_source_profileded_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 19:24, 22 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 struct {
DWORD :size;
void *:data;
} cairo_color_profile_t
void cairo_surface_add_profile_pair (cairo_surface_t *surf,
cairo_color_profile_t in,
cairo_color_profile_t out);
void cairo_surface_remove_profiles (cairo_surface_t *surf);
void cairo_surface_set_transformation (cairo_surface_t *surf,
DWORD input_format,
DWORD output_format,
int intent,
DWORD flags)
Profiles and transformation must be set before any call to a cairo function using a color.
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_profileded_color (cairo_t *cr, void* color);
format of the color is the one defined by DWORD input_format.