[cairo] Color space API
Uli Schlachter
psychon at znc.in
Fri Jul 27 09:44:21 PDT 2012
Hi,
On 27.07.2012 16:55, Adrian Johnson wrote:
> In January/February 2010 there was a long thread[1] on adding a color
> space API to cairo.
[...]
> [1] http://lists.cairographics.org/archives/cairo/2009-December/018717.html
Does that link really point at the thread you want it to point to? This thread
is from December 2009 and has only 3 messages.
[...]
> To simplify the implementation, my code currently only supports RGB
> color spaces and only works with the image and PDF surfaces. There is
> nothing in this API that restricts color spaces to RGB other than the
> need to add additional color space constructors and image formats to
> support non RGB color spaces.
Does that mean that other backends (X11, gl, win32, quartz) would have to fall
back to the image backend whenever a color space is involved?
I think I heard something about color spaces with OpenGL. Does something like
this exist? If yes, can someone check if the proposed API would work for OpenGL?
[...]
> The standard cairo functions for referencing, destroying and obtaining
> the status and type.
[...]
> unsigned int
> cairo_color_space_get_reference_count (
> cairo_color_space_t *color_space);
What's the use case for this function?
> cairo_status_t
> cairo_color_space_status (cairo_color_space_t *color_space);
A color space can only be in an error state when it is created, right? Or is
there some API which could cause a color space to get a "non-good" status?
> typedef enum _cairo_color_space_type {
> CAIRO_COLOR_SPACE_TYPE_DEVICE_RGB,
> CAIRO_COLOR_SPACE_TYPE_ICC,
> CAIRO_COLOR_SPACE_TYPE_SRGB,
> CAIRO_COLOR_SPACE_TYPE_LINEAR_SRGB,
> } cairo_color_space_type_t;
>
> cairo_color_space_type_t
> cairo_color_space_get_type (cairo_color_space_t *color_space);
>
> ICC color spaces may contain different types of color spaces. It is
> useful be able to find the type of an ICC color space.
>
> typedef enum _cairo_color_space_class {
> CAIRO_COLOR_SPACE_CLASS_RGB,
> CAIRO_COLOR_SPACE_CLASS_CMYK,
> CAIRO_COLOR_SPACE_CLASS_GRAY,
> } cairo_color_space_class_t;
>
> cairo_color_space_class_t
> cairo_color_space_get_class (cairo_color_space_t *color_space);
What do these two enums have to do with each other? E.g. I doubt that I can
combine SRGB with CMYK. So what's the difference between them and why shouldn't
they be combined into on enum?
Sorry if this was already discussed in 2010.
[...]
> The cairo_surface_set_color_space function allows setting a color space
> of a surface (for use as either a source or destination). The default
> surface color space is device_rgb but if it is to be changed it must
> be done before any drawing operations.
Just to be clear, if I try to modify the color space of a surface which already
was painted to, it goes into an error state?
[...]
> cairo_push_group and cairo_surface_create_similar create a surface with
> the same color space as the existing surface. The following two functions
> allow the similar surface to be created with a different color space.
Should there also be a cairo_surface_create_similar_image_with_color_space()?
[...]
> Antti Lankila has created a pixman patch for linear color space
> processing[4]. In this case the source and destination are converted
> from sRGB to linear rgb, composited, then converted back to sRGB
> before writing to the destination. This could possibly be implemented
> with a function like cairo_set_compositing_color_space() or
> cairo_set_blending_color_space().
Which backends (besides image) could implement this without fallback? Does this
work for PDF, PS and SVG?
Does anyone know how calibrated displays can be used with X11 / Windows / Mac
OS? I don't and I wonder how this API can be supported for those backends.
Cheers,
Uli
--
my $key = "\x49\x03\x93\x08\x19\x94\x96\x94\x28\x93\x83\x04\x68\x28\xa8\xf5".
"\x0a\xb9\x94\x02\x45\x81\x93\x1f\xbc\xd7\xf3\xad\x93\xf5\x32\x93";
my $cipher = Crypt::Rijndael->new( $key, Crypt::Rijndael::MODE_ECB() );
my $plain = $ciper->decrypt($daten);
More information about the cairo
mailing list