Re: [Gimp-developer] Update on my Gimp color management coding efforts

On 8 November 2012 21:29, Elle Stone <l elle stone gmail com> wrote:
> I was hoping that by removing all the deprecated functions the problem
> with high bit depth color conversion being subverted by the background
> TRC conversions would be resolved, but it wasn't. I am unsure how to
> procede, although I have pinpointed exactly where in the Gimp code the
> Babl functions are called (it's not in the lcms plugin code) and which
> particular Babl functions are being called.
Has your work on replacing the deprecated functions found its way into
git master?

> In the existing "image color space to monitor color space" code, the
> image RGB values are converted to 8 bits *before* the RGB values are
> sent to the code that converts from the image color space to the
> monitor profile. Which means the monitor display of linear gamma color
> space images has severely posterized deep shadow detail (the image
> itself isn't damaged, just the monitor display of the image).
> I've been tracing the "image color space to monitor color space" code
> execution path, looking for a place to intervene to give the
> color-space-to-monitor-space lcms profile conversion 16-bit integer or
> 32-bit floating point values instead of 8-bit values. It turns out
> that the relevant "image color space to monitor display space" code is
> spread out over quite a few gimp, babl, and gegl c-code files, and
> makes heavy use of Cairo-related functions.

I looked into this code a bit earlier. Here is one way of approaching it:
* Change the lcms-based conversion (modules/display-filter-lcms.c)
from being a generic display filter to be something that takes a
GeglBuffer in and blits into a cairo_surface_t.
* Change the display filter interface to accept a GeglBuffer instead
of a cairo_surface_t. As gimp_color_display_convert_surface is public
API, it should probably become a stub and be marked as deprecated. New
interface could for instance be called
* Adapt all the display filter operations (modules/display-filter-*.c)
to the new interface and to working on 32bit floating point. If any of
the operations are no longer useful, now would be the time to drop
* In the use of the display filter stack (in
gimp_display_shell_render), first let the filter stack operate on the
GeglBuffer from the projection (or possibly a copy), and then pass it
to the lcms-based color conversion, and then pass that to cairo.

In the longer term, one can consider making the display filters GEGL
operations and the display filter stack a GEGL subgraph.

Jon Nordby -

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]