LinearGradient only interpolates in RGB under the covers so it won't
help you for interpolating in the other color spaces.
The regular Java ColorSpace has built-in support for a couple of color
spaces, but their implementations are not in the base classes, they farm
out the actual conversions to a plug-in library. If you need other
color spaces and can obtain their ICC profile data then you can
instantiate any color space from that.
If those solutions aren't sufficient then you may have to roll your own
(at least for now).
I don't think we have a feature request for color space support (beyond
the HSB conversions we provide) so you should file one so we can track
this issue...
...jim
On 9/30/15 2:04 AM, Benjamin Gudehus wrote:
java.awt.color.ColorSpace (and ICC_ColorSpace) only provide an empty
implementation and constants for the conversion between color spaces,
but no specific implementation (at least for HSL, LAB, et cetera).
Conversion: Interestingly the implementations in the wild rarely
reference the source of the algorithms. So I searched through our
university's library and found different algorithms for HSV, HSL and HSI
(Smith 1978, Metrick 1979, Foley and van Dam 1982, Fishkin 1990, Travis
1991, Gonzalez and Woods 1992).
Interpolation: JavaFX has LinearGradient. But it's rather complicated to
retrieve a color ramp from it; we need to fill a Rectangle with a
LinearGradient, make a snapshot and use PixelReader to extract the
integer color values, and the implemention uses some padding for the
colors at start and end. Then the implementation is in
com.sun.prism.impl.paint so I can't access it directly.
Seems I have to implement this library by myself.
On Fri, Sep 25, 2015 at 9:33 PM, Jim Graham <[email protected]
<mailto:[email protected]>> wrote:
JavaFX has no color conversion libraries. The classes in
java.awt.color are the only alternative that ships standard with the
JDK...
...jim
On 9/25/15 7:42 AM, Benjamin Gudehus wrote:
Hey!
I want to convert colors between different color spaces and
interpolate
them within the specific color space (sRGB and its cylindrical
transformations HSL/HLS, HSV/HSB, and HSI. LAB and its cylindrical
transformations LCH, and HCL).
javafx.scene.paint.Color only accepts (s)RGB and HSB and seems
to support
interpolate() within RGB only. Should I use
java.awt.color.ICC_ColorSpace
(which lacks support for HSI, LCH and HCL) or is there a more
complete
library for Java or JavaFX?
Regards,
Benjamin