我有一种颜色,我只在运行时知道。我想使用这种颜色创建两种新颜色,一种非常明亮,一种不明亮。
所以澄清一下,假设我有红色;我想为“浅红色”颜色和“深红色”颜色创建十六进制值。
我该怎么做呢?我的代码是使用 GWT 用 Java 编写的。
最佳答案
将颜色转换为 HSB/HSV(色相-饱和度-亮度/值)空间并调整亮度,向上调亮,调低调暗。然后再转换回来。在 Java 中:
import java.awt.Color;
float hsbVals[] = Color.RGBtoHSB( originalColour.getRed(),
originalColour.getGreen(),
originalColour.getBlue(), null );
Color highlight = Color.getHSBColor( hsbVals[0], hsbVals[1], 0.5f * ( 1f + hsbVals[2] ));
Color shadow = Color.getHSBColor( hsbVals[0], hsbVals[1], 0.5f * hsbVals[2] );
HSB空间就是为这种操作而设计的。
要点是您只需改变亮度项即可获得您想要的变亮/变暗效果。您必须试验变亮/变暗的程度。
上面的代码将 Brightness 移动到白色的一半用于高光,一半用于黑色用于阴影。 (我使用这段代码在按钮上创建了突出显示的边框效果。)
参见:http://en.wikipedia.org/wiki/HSL_and_HSV 和 http://www.acasystems.com/en/color-picker/faq-hsb-hsv-color.htm
编辑:根据评论,java.awt.Color
类不能在 GWT 中使用。由于我们使用的 Color
类的唯一部分是 HSV 到 RGB 和 RGB 到 HSV 的转换,因此当您使用 GWT 时,您可以改为谷歌搜索这些算法的实现: Google HSV RGB conversion algorithm 。例如:
关于java - 动态创建具有不同亮度的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2355157/