[Gimp-developer] A possibly easier way to AnyRGB

Hi All,

Currently GIMP uses hard-coded sRGB primaries for many operations, thereby producing wrong results when editing images in RGB color spaces other than sRGB. Also currently GIMP color pickers only pick colors, only allow dialing in colors, only show out of gamut indicators colors using sRGB. Well, it's ridiculous to be editing an image in ClayRGB (aka AdobeRGB) and be told a green color is out of gamut, when it's only out of gamut wrt sRGB.

Based on testing the space invasion for GIMP-2.99, it seems fairly massive changes are required to implement "AnyRGB" one function at a time. But maybe there is an easier way to implement AnyRGB.

*My current workaround for GIMP-2.10:*

Currently I compile GIMP-2.10 in multiple prefixes, one prefix per RGB color space that I actually want to edit in. These prefixes are easy to set up:

For GIMP, only two files need to be modified:

  * libgimpcolor/gimpcolorprofile.c
  * libgimpcolor/gimprgb.h

For babl, only one file needs to be modified:

  * babl/babl-space.c

If anyone wants to set up a ClayRGB prefix, patches can be downloaded here - required modifications for other ICC profiles should be obvious:


This sort of patch merely exchanges one hard-coded color space for another.

*A proposed alternative solution:*

What about writing code that gets the primaries from the user's chosen RGB working space, and then conveys those primaries to the relevant three functions in libgimpcolor/gimpcolorprofile.c, libgimpcolor/gimprgb.h, and babl/babl-space.c , thereby replacing hard-coded sRGB primaries with "AnyRGB" primaries?

"AnyTRC" would need to be considered separately. However, from the point of view of photographic editing, the only really useful TRCs are linear and perceptually uniform. The sRGB TRC is only approximately perceptually uniform. A better hard-coded choice would be the LAB "L" TRC. Though maybe babl already has a way to handle "AnyTRC"?

Elle Stone

Color management and free/libre photography

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