我测试了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)?哪一种是标准的?正确的算法是什么样的?请大家给点提示,谢谢!
             

解决方案 »

  1.   

    public Color(int r,
                 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
      

  2.   

    呵呵,我的意思大家没看懂?
    我是要自己写个算法,不是用Color自身的RGBtoHSB方法!
    讨个算法就可以自己写了撒!
      

  3.   

    这个API里本来就有的,有什么好编的呢?API里的如下:
    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;
        }