我可以将
java.awt.Color
转换为 HSL 颜色,并使其变浅或变深 - 也就是说,将 L 值增加或减少十个点(显然,在 0 到 100 的范围内)?
如果是这样,怎么办?
代码越少越好。如果 Apache 或 Guava 可以提供帮助,请随意使用它们
我可以使用 HSB 代替(参见下面的代码),但它不会产生相同的结果(例如,将 B 增加 10 与将 L 增加 10 不同)
package demos.color;
import java.awt.Color;
public class ColorUtils {
public static Color brighterBy(Color color, float factor) {
return adjustBrightness(color, factor);
}
public static Color darkerBy(Color color, float factor) {
return adjustBrightness(color, -factor);
}
private static Color adjustBrightness(Color color, float factor) {
float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), null);
hsb[2] = Math.min(Math.max(hsb[2] + factor, 0.0f), 1.0f);
return new Color(Color.HSBtoRGB(hsb[0], hsb[1], hsb[2]));
}
public static void main(String[] args) {
Color originalColor = new Color(184, 207, 229);
Color lighterColor = brighterBy(originalColor, 0.2f);
Color darkerColor = darkerBy(originalColor, 0.2f);
System.out.println("Original Color: " + originalColor);
System.out.println("Lighter Color: " + lighterColor);
System.out.println("Darker Color: " + darkerColor);
}
}
Rob Camick 就 Java 的 RGB 颜色使用和到 HSL 的转换写了一篇出色的文章。它似乎专门用于调整颜色的明/暗。
这是文章:HSL 颜色
他还提供了一个HSLColor类,你可以在Github上查看: HSLColor.java
在他出色的文章和提供的类示例之间,我认为这应该可以满足您所要求的一切。