我测试了RGB转HSL方法:
int crgb[]={0,0,0};
float chsl[]={0,0,0}; chsl=myColor.RGBtoHSB(10, 20, 30, null);//结果是下面的三个float值
System.out.println(chsl[0]+"=="+chsl[1]+"=="+chsl[2]);
myColor=Color.getHSBColor(0.5833333f, 0.6666667f, 0.11764706f);
System.out.println(myColor.getRed()+" "+myColor.getGreen()+" "+myColor.getBlue());//结果是10 20 30
自己在网上搜了一下算法:
H=(max+min)/2,就这一项我就觉得有问题,是范围设定的问题吗(有的是0-1,有的是0-100,有的是0-255)?哪一种是标准的?正确的算法是什么样的?请大家给点提示,谢谢!
int crgb[]={0,0,0};
float chsl[]={0,0,0}; chsl=myColor.RGBtoHSB(10, 20, 30, null);//结果是下面的三个float值
System.out.println(chsl[0]+"=="+chsl[1]+"=="+chsl[2]);
myColor=Color.getHSBColor(0.5833333f, 0.6666667f, 0.11764706f);
System.out.println(myColor.getRed()+" "+myColor.getGreen()+" "+myColor.getBlue());//结果是10 20 30
自己在网上搜了一下算法:
H=(max+min)/2,就这一项我就觉得有问题,是范围设定的问题吗(有的是0-1,有的是0-100,有的是0-255)?哪一种是标准的?正确的算法是什么样的?请大家给点提示,谢谢!
解决方案 »
- 一道关于java的static的知识的问题,请大侠帮助,谢谢
- 怎么样从一个字符串中分离我想要的字符段放入数组中
- 关于Java正则表达 使用的问题?
- 关于JOptionPane.showMessageDialog
- 想和我一样的初学者一起分享知识 大家一起提高!
- 求:一道软件测试面试题
- 线程间通信间通信的问题? 看了一个春节楞没看懂, 求助. 同时祝大家身体健康, 万事大吉.
- 怎样在VisualAge for Java中使用jdk1.4
- 为什么这个程序出现了“不兼容的类型”错误
- 高手帮忙,十万火急
- 请问java中有多少过时的api,以前的代码程序需要做很大的改动吗??
- XML的读取总是出现 #text 和 树Swing形结构的问题
int g,
int b)用指定的红色、绿色和蓝色值创建一种不透明的 sRGB 颜色,这三个颜色值都在 0-255 的范围内。绘制时实际使用的颜色,取决于从给出的可用于给定输出设备的颜色空间中找到的最匹配的颜色。alpha 值的默认值为 255。 参数:
r - 红色分量
g - 绿色分量
b - 蓝色分量 Color类的一个方法:getRGB
public int getRGB()
(24-31 位表示 alpha,16-23 位表示红色,8-15 位表示绿色,0-7 位表示蓝色)
这是JAVA API 文档里的。比如说,红色,23-16+1=8,2^8-1=255
我是要自己写个算法,不是用Color自身的RGBtoHSB方法!
讨个算法就可以自己写了撒!
public static float[] RGBtoHSB(int r, int g, int b, float[] hsbvals) {
float hue, saturation, brightness;//hue:色度,saturation:饱和度,色度和色饱和度合起来称为色饱和度,brightness:亮度
//这个算法很容易读懂,我想就不用多做解释了吧。至于那些色度,饱和度,亮度,为什么这样求,我想这不是JAVA讨论的问题了。建议楼主可以去学习相关知识,比如电视机原理。
if (hsbvals == null) {
hsbvals = new float[3];
}
int cmax = (r > g) ? r : g;
if (b > cmax) cmax = b;
int cmin = (r < g) ? r : g;
if (b < cmin) cmin = b; brightness = ((float) cmax) / 255.0f;
if (cmax != 0)
saturation = ((float) (cmax - cmin)) / ((float) cmax);
else
saturation = 0;
if (saturation == 0)
hue = 0;
else {
float redc = ((float) (cmax - r)) / ((float) (cmax - cmin));
float greenc = ((float) (cmax - g)) / ((float) (cmax - cmin));
float bluec = ((float) (cmax - b)) / ((float) (cmax - cmin));
if (r == cmax)
hue = bluec - greenc;
else if (g == cmax)
hue = 2.0f + redc - bluec;
else
hue = 4.0f + greenc - redc;
hue = hue / 6.0f;
if (hue < 0)
hue = hue + 1.0f;
}
hsbvals[0] = hue;
hsbvals[1] = saturation;
hsbvals[2] = brightness;
return hsbvals;
}