On 8 November 2012 21:29, Elle Stone <l.elle.stone@xxxxxxxxx> 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 "gimp_color_display_convert_buffer" * 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 them. * 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 - www.jonnor.com _______________________________________________ gimp-developer-list mailing list gimp-developer-list@xxxxxxxxx https://mail.gnome.org/mailman/listinfo/gimp-developer-list