I have been looking into bug #325564 the past few days and I know how this should be solved, and I'm looking for advice on how best to implement this in GIMP.
The problem is this: The layer mode "Color" in GIMP works differently from Photoshop's "Color" blend mode. If you load a Photoshop PSD file with layers that are set to "Color", they will look different in GIMP than in Photoshop. The cause of the bug is the following: The "Color" layer mode is implemented in the method gimp_composite_color_only_any_any_any_generic in app/composite/gimp- composite-generic.c (lines 533-591). This method converts the RGB data of both source layers to HSL and then determines the output by taking the Hue and Saturation components from source 1 and Lightness from source 2 and converting this back to RGB. Photoshop works differently: it converts the RGB data of both source layers to CIE Lab and then determines the output by taking the a and b (chromaticity, color) components from source 1 and Luminance from source 2 and converting this back to RGB. I looked up some documentation about color models and it turns out that Lightness from the HSL model is something entirely different than Luminance from the CIE Lab model, and therefore you get different results. In fact, according to the Poynton Color FAQ , HSL is not very useful at all for accurately specifying color information. The solution is this: Instead of doing the calculations by converting to HSL and back, they should be done by converting to CIE Lab and back, taking ab from src1 and L from src2, just like Photoshop does. I've hacked a bit in the GIMP code and doing this indeed returns the expected result. Problem #1: As already suggested in the bug report, I should probably not just repair GIMP's "Color" mode, because people may have used the current "Color" mode and are relying on its effect. So for compatibility I should leave the current "Color" mode and add a new mode. The old mode should be renamed to "Hue and Saturation" or "Color (HSL)", and the new mode should be called "Color" to not confuse people who are familiar with Photoshop. The enum value of the old "Color" mode should stay the same for compatibility. Is this OK? Problem #2: The solution described above seems simple enough, but it becomes more complicated because there is no single, fixed formula for converting RGB to Lab and back. The conversion depends on the ICC color profile of the RGB data. I noticed that GIMP's decompose plug-in does it wrong: it uses some fixed formulas that are only valid for sRGB (added a new bug report for this: bug #499794). The conversion can easily be done using the lcms library, but using lcms in app/composite/gimp-composite-generic.c means adding a dependency to the GIMP application itself (I had to add lcms to two Makefile.am libraries to make it compile). Is adding this dependency a problem? If it is, where should I put the RGB <-> Lab conversion code that uses lcms? : http://www.poynton.com/ColorFAQ.html -- Jesper de Jong [EMAIL PROTECTED]
_______________________________________________ Gimp-developer mailing list Gimp-developer@lists.XCF.Berkeley.EDU https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer