关于java颜色转化的问题!!

lwtprogress 2010-04-11 12:34:06
我测试了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)?哪一种是标准的?正确的算法是什么样的?请大家给点提示,谢谢!
...全文
127 8 打赏 收藏 转发到动态 举报
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
afunx 2010-04-18
  • 打赏
  • 举报
回复
这个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;
}
lwtprogress 2010-04-17
  • 打赏
  • 举报
回复
呵呵,我的意思大家没看懂?
我是要自己写个算法,不是用Color自身的RGBtoHSB方法!
讨个算法就可以自己写了撒!
wjz748305545 2010-04-17
  • 打赏
  • 举报
回复
顶楼上
afunx 2010-04-16
  • 打赏
  • 举报
回复
不明白楼主所谓的正确的算法,是怎么定义的?楼主要这个的用途是什么呢?
lwtprogress 2010-04-15
  • 打赏
  • 举报
回复
关键是谁能提供个正确的算法?
24K純帥 2010-04-11
  • 打赏
  • 举报
回复
额,帮顶下~
afunx 2010-04-11
  • 打赏
  • 举报
回复
有的是0-1,有的是0-100,有的是0-255,
这里的1,100,255都是对应标准下的最大值。
比如说,对应于在0-1中的0.5
在0-100中对应值为50
在0-255中对应值为127.5
afunx 2010-04-11
  • 打赏
  • 举报
回复
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
相关推荐

62,567

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告