微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 动态地创建不同亮度的颜色

我有一种颜色,我只在运行时知道.使用这种颜色我想创造两种新的颜色,一个非常明亮,一个没有明亮的版本的颜色.

所以要澄清,说我有颜色红色;我想为“浅红”颜色和“深红色”颜色创建十六进制值.

我该怎么做呢?我的代码是使用GWT编写的.

解决方法

将颜色转换为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],0.5f * hsbVals[2] );

HSB空间专为这种操作而设计.

要点是您只需要改变亮度项来获得所需的亮度/变暗效果.你必须尝试减轻/变暗多少.

上面的代码将亮度转移到白色的中间,用于突出显示,半色变换为黑色. (我使用这个代码在按钮上创建一个突出显示的边框效果.)

参见:http://en.wikipedia.org/wiki/HSL_and_HSVhttp://www.acasystems.com/en/color-picker/faq-hsb-hsv-color.htm

编辑:根据注释,java.awt.Color类不能在GWT中使用.由于我们使用的Color类的唯一部分是HSV到RGB和RGB到HSV转换,因为你使用GWT,而是google可以实现这些算法:Google HSV RGB conversion algorithm.例如:

> javascripter.net
> cs.rit.edu/~ncs
> rapidtables.com (RGB to HSV)
> rapidtables.com (HSV to RGB)
> StackOverflow: Algorithm to convert RGB to HSV and HSV to RGB?

原文地址:https://www.jb51.cc/java/125857.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐