Java,RGB和HSL颜色转换算法

RGB对象为SWT中的RGB,也可自己定义,HSL对象在我的另一篇博客中[url]http://javahead.iteye.com/blog/295493[/url]

import org.eclipse.swt.graphics.RGB;

/**
* 颜色转换算法
*
*/
public class ColorTools {
public static HSL RGB2HSL(RGB rgb) {
if (rgb == null) {
return null;
}

float H, S, L, var_Min, var_Max, del_Max, del_R, del_G, del_B;
H = 0;
var_Min = Math.min(rgb.red, Math.min(rgb.blue, rgb.green));
var_Max = Math.max(rgb.red, Math.max(rgb.blue, rgb.green));
del_Max = var_Max - var_Min;
L = (var_Max + var_Min) / 2;
if (del_Max == 0) {
H = 0;
S = 0;

} else {
if (L < 128) {
S = 256 * del_Max / (var_Max + var_Min);
} else {
S = 256 * del_Max / (512 - var_Max - var_Min);
}
del_R = ((360 * (var_Max - rgb.red) / 6) + (360 * del_Max / 2))
/ del_Max;
del_G = ((360 * (var_Max - rgb.green) / 6) + (360 * del_Max / 2))
/ del_Max;
del_B = ((360 * (var_Max - rgb.blue) / 6) + (360 * del_Max / 2))
/ del_Max;
if (rgb.red == var_Max) {
H = del_B - del_G;
} else if (rgb.green == var_Max) {
H = 120 + del_R - del_B;
} else if (rgb.blue == var_Max) {
H = 240 + del_G - del_R;
}
if (H < 0) {
H += 360;
}
if (H >= 360) {
H -= 360;
}
if (L >= 256) {
L = 255;
}
if (S >= 256) {
S = 255;
}
}
return new HSL(H, S, L);
}

public static RGB HSL2RGB(HSL hsl) {
if (hsl == null) {
return null;
}
float H = hsl.getH();
float S = hsl.getS();
float L = hsl.getL();

float R, G, B, var_1, var_2;
if (S == 0) {
R = L;
G = L;
B = L;
} else {
if (L < 128) {
var_2 = (L * (256 + S)) / 256;
} else {
var_2 = (L + S) - (S * L) / 256;
}

if (var_2 > 255) {
var_2 = Math.round(var_2);
}

if (var_2 > 254) {
var_2 = 255;
}

var_1 = 2 * L - var_2;
R = RGBFromHue(var_1, var_2, H + 120);
G = RGBFromHue(var_1, var_2, H);
B = RGBFromHue(var_1, var_2, H - 120);
}
R = R < 0 ? 0 : R;
R = R > 255 ? 255 : R;
G = G < 0 ? 0 : G;
G = G > 255 ? 255 : G;
B = B < 0 ? 0 : B;
B = B > 255 ? 255 : B;
return new RGB((int) Math.round(R), (int) Math.round(G), (int) Math
.round(B));
}

public static float RGBFromHue(float a, float b, float h) {
if (h < 0) {
h += 360;
}
if (h >= 360) {
h -= 360;
}
if (h < 60) {
return a + ((b - a) * h) / 60;
}
if (h < 180) {
return b;
}

if (h < 240) {
return a + ((b - a) * (240 - h)) / 60;
}
return a;
}

}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值