RGB对象为SWT中的RGB,也可自己定义,HSL对象在我的另一篇博客中
http://javahead.iteye.com/blog/295493
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;
}
}
分享到:
相关推荐
`.m`文件是MATLAB编程语言的源代码文件,`rgb2hsl.m`和`hsl2rgb.m`很可能是两个函数,分别实现了RGB到HSL和HSL到RGB的转换算法。MATLAB是一种强大的数学计算和可视化工具,常用于科学计算和工程领域,包括图像处理。...
在某些情况下,我们可能需要将RGB颜色转换为其他颜色空间,如CMYK(青、洋红、黄、黑)用于印刷,HSV(色调、饱和度、亮度)或HSL(色相、饱和度、亮度)用于色彩分析和调整,或者XYZ、Lab等色彩空间用于色彩匹配和...
开发者可以根据需求自定义颜色模型,添加新的颜色转换算法或操作方法。 三、使用示例 在实际使用中,我们可以这样调用工具库进行颜色操作: ```typescript import { Color } from 'colorsea'; // 创建一个RGB...
修复RGB到HSL转换的Bug意味着工具现在能更准确地将屏幕上看到的颜色转换为HSL表示,这对于设计师进行色彩搭配或开发者实现色彩算法有着重要意义。转换过程中可能存在的问题包括但不限于色相偏移、饱和度计算错误或...
- 图像的色彩模型:除了RGB,还有CMYK、HSV、HSL等多种色彩模型,理解它们之间的转换有助于处理不同类型的图像。 - Java的图像处理库:如Apache Commons Imaging (以前称为Sanselan)、OpenCV的Java接口等,可以提供...
程序可能首先读取一张图片,然后通过色彩空间转换(如从RGB到L*a*b*或HSL),分析图像中的颜色分布。接着,它可以应用特定的算法来模拟不同类型的色盲(如红绿色盲、蓝黄色盲)所看到的颜色。通过比较原图与模拟色盲...
4. 可能还有其他扩展功能,如颜色选择器,或者将RGB值转换为其他颜色模型,如CMYK(青色、洋红、黄色、黑色)或HSL(色相、饱和度、亮度)。 提供的文件“颜色获取软件”可能是这个软件的源代码,通过分析和学习这...
2. 颜色空间转换:为了模拟不同的色盲视觉,程序需要将图像从RGB颜色空间转换到其他颜色空间,如CIE L*a*b*或HSL,这些颜色空间更适合于模拟人类视觉感知的颜色差异。 3. 色盲模型:程序需要实现不同的色盲模型,如...
5. **颜色模型**: 在Java中,颜色可以通过 `Color` 类表示,它可以使用RGB、CMYK、HSL等颜色模型。理解这些模型对于处理图像的色彩至关重要。 6. **图像滤镜和效果**: 使用 `java.awt.image.BufferedImageOp` 接口...
- `ColorHSL.java` 和 `ColorRGB.java`:这两个文件分别可能实现了HSL和RGB颜色空间的转换和操作。在图像处理中,不同的颜色空间可以提供不同的调整方式,HSL更适合于色彩调整,而RGB则是数字图像处理的基础。 - `...
4. **颜色转换算法**: - RGB到HSV/HSL:可以使用数学公式或查找表进行转换,例如,将RGB值归一化后映射到HSV空间。 - HSV/HSL到RGB:同样,反向转换也需要相应的数学计算。 5. **第三方库**: - Java标准库虽然...
- RGB到其他颜色空间:如HSV、HSL、YUV等,便于进行特定的图像分析和处理。 8. **图像增强**: - 对比度调整:通过线性或非线性变换改变图像的整体亮度和对比度。 - 锐化:增强图像边缘,常用算法有拉普拉斯锐化...
`Color`类还提供了方法来获取颜色的RGB(红绿蓝)值,HSV(色相、饱和度、亮度)值,以及进行颜色转换等功能。 SuccessColor库可能扩展了这些功能,提供了更丰富的颜色选择、颜色模式(如HSL、CMYK)、颜色搭配算法...
2. **颜色模式**:RGB、CMYK、HSL和HSV等,了解它们的区别和转换方法。 3. **CSS3新特性**:如渐变(linear-gradient和radial-gradient)、图案(重复和不重复的背景图像)、透明度(opacity和rgba())和颜色函数...
3. **颜色编辑**:除了简单的取色,拾色器往往还允许用户手动调整颜色参数,如调节红绿蓝(RGB)分量或色调、饱和度、亮度(HSL)。这需要实现相应的颜色调整算法。 4. **预览和保存**:用户可以预览颜色效果,并将其...
在计算机图形学中,颜色翻转通常涉及到图像处理和色彩空间转换,这是一门涉及广泛的技术,包括颜色模型、图像操作以及算法实现。在Java中,我们可以利用Java的丰富的图形库,如Java AWT(Abstract Window Toolkit)...
4. **色彩类**:色彩管理涉及到RGB、HSV、HSL色彩模型、颜色转换、色彩搭配原则等,常用于界面设计和动态效果。 5. **样式类与样式表**:CSS(层叠样式表)用于控制网页元素的样式,包括选择器、盒模型、布局、响应...
- **色彩空间转换**:首先,可能需要将RGB色彩空间转换为HSV(色相、饱和度、亮度)或HSL(色相、饱和度、亮度)色彩空间,因为这两个色彩模型更适合调整色彩的饱和度和色调。 - **调整饱和度**:减少图像的饱和度...
在Android中,我们可以通过遍历Bitmap的每个像素,将RGB三个颜色通道的值转换为一个灰度值来实现。灰度值通常通过以下公式计算: ```java int gray = (R + G + B) / 3; ``` 其中R、G、B分别是像素的红、绿、蓝分量...
6. **颜色空间转换**:在不同颜色模型之间转换,如从 RGB 转换到 HSV 或 HSL,可以改变图像的色彩表现。 7. **图像分析**:可能涉及物体识别、特征提取、模板匹配等,这些高级任务可能需要用到机器学习或深度学习...