如何在 Java 中使用 HSL 颜色空间?
我查看了 ColorSpace 类,发现了常量 TYPE_HLS(可能只是不同顺序的 HSL)。
我可以使用此常量根据色调、饱和度和亮度创建 Color
吗? 如果没有,是否有任何 Java 类可以实现这一点,或者我需要编写自己的类吗?
I've had a look at the ColorSpace class, and found the constant TYPE_HLS
(which presumably is just HSL in a different order).
Can I use this constant to create a Color
from hue, saturation, and luminosity?
If not, are there any Java classes for this, or do I need to write my own?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
这里给出的大多数答案似乎都假设 HSL == HSB,这是错误的。 HSB 色彩空间在许多情况下都很有用(并且已被使用),但有一个值得注意的例外:CSS。非 RGB css 颜色函数 hsl() 和 hsla() 是 HSL,而不是 HSB。因此,能够在 Java 中与 HSL 相互转换是非常有用的。
关于这个问题有一篇很好的文章: http://tips4java.wordpress .com/2009/07/05/hsl-color/ TL;DR:代码在这里:http://www.camick.com/java/source/HSLColor.java
我已经创建了一个要点备份,以防博客崩溃:https://gist.github.com/Yona-Appletree/0c4b58763f070ae8cdff7db583c82563
如果你不这样做的话,其中的方法很容易提取不想使用整个班级。
许可证
该代码似乎属于公共领域,如博客的“关于”页面所示 (https://tips4java.wordpress.com/about/):
Most of the given answers here seem to assume that HSL == HSB, which is false. The HSB colorspace is useful (and used) in many cases, but there is one notable exception: CSS. The non-RGB css color functions, hsl() and hsla() are HSL, not HSB. As such, it is very useful to be able to convert to and from HSL in java.
There is a good writeup about the problem here: http://tips4java.wordpress.com/2009/07/05/hsl-color/ TL;DR: the code is here: http://www.camick.com/java/source/HSLColor.java
I have created a gist backup, should the blog ever go down: https://gist.github.com/Yona-Appletree/0c4b58763f070ae8cdff7db583c82563
The methods therein are pretty easy to extract if you don't want to use the whole class.
License
The code appears to be in the public domain, as noted on the "About" page of the blog (https://tips4java.wordpress.com/about/):
编辑:我意识到HSB!= HSL,下面的答案是针对HSB的。
我认为这里没有必要使用ColorSpaces。尝试如下操作:
EDIT: I realize HSB != HSL, the answer below is for HSB.
I don't think there is any need to use ColorSpaces here. Try something like the following:
这是一个简单的实现,它将返回基于从 0.0 到 1.0 的色相、饱和度和亮度值的颜色...
由 Yona-Appletree 编辑:
我找到了我认为正确的hue2rgb函数并测试了它的工作情况:
Here is a simple implementation that will return a Color based on hue, saturation, and lightness values from 0.0 to 1.0...
EDIT by Yona-Appletree:
I found what I think is the correct hue2rgb function and tested it as working:
我找到了HSB的内置方法(与HSL不一样,但类似)
I found the built-in method for HSB (which is not the same as HSL, but is similar)
也许这会有所帮助。当想要使用其他颜色空间中的颜色时,JDK 似乎没有太大帮助。
编辑:在
ColorSpace.getName(idx)
中有这个小片段:所以这就是您的想法,但是查看 ColorSpace 的类型层次结构,它似乎没有在任何地方以任何方式使用或实现。 ColorSpace 仅由其他两个类 BogusColorSpace 和 ICC_ColorSpace 扩展,因此我猜测他们希望开发人员为不同的颜色空间创建自己的实现。
Maybe this will help. The JDK doesn't seem to be very helpful when wanting to use colors in another color space.
Edit: In
ColorSpace.getName(idx)
there's this little snippet:so it was what you thought, but looking at the type hierarchy of ColorSpace it doesn't seem to be used or implemented in any way anywhere. ColorSpace is extended by only two other classes BogusColorSpace and ICC_ColorSpace, so I'm guessing they're expecting developers to create their own implementations for different color spaces.
如果您的输入是 swing/awt 小部件,那么使用 Java 7 JColorChooser 您可以通过 HSV 和 HSL 空间获取颜色。 http://java.dzone.com/articles/new-color-chooser -jdk-7
If your input is swing/awt widgets, then with Java 7 JColorChooser you can get Color by HSV and HSL spaces. http://java.dzone.com/articles/new-color-chooser-jdk-7