`
javahead
  • 浏览: 16957 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java,RGB和HSL颜色转换算法

阅读更多
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;
	}

}
分享到:
评论
1 楼 vwpolo 2010-02-01  
Thank you!

相关推荐

    RGB和HSL色彩空间转换

    `.m`文件是MATLAB编程语言的源代码文件,`rgb2hsl.m`和`hsl2rgb.m`很可能是两个函数,分别实现了RGB到HSL和HSL到RGB的转换算法。MATLAB是一种强大的数学计算和可视化工具,常用于科学计算和工程领域,包括图像处理。...

    ColorCode_java.zip_颜色转换

    在某些情况下,我们可能需要将RGB颜色转换为其他颜色空间,如CMYK(青、洋红、黄、黑)用于印刷,HSV(色调、饱和度、亮度)或HSL(色相、饱和度、亮度)用于色彩分析和调整,或者XYZ、Lab等色彩空间用于色彩匹配和...

    一个使用Typescript编写的颜色工具库,你可以使用此进行颜色空间的转换,或进行颜色操作

    开发者可以根据需求自定义颜色模型,添加新的颜色转换算法或操作方法。 三、使用示例 在实际使用中,我们可以这样调用工具库进行颜色操作: ```typescript import { Color } from 'colorsea'; // 创建一个RGB...

    屏幕取色工具(附源码)

    修复RGB到HSL转换的Bug意味着工具现在能更准确地将屏幕上看到的颜色转换为HSL表示,这对于设计师进行色彩搭配或开发者实现色彩算法有着重要意义。转换过程中可能存在的问题包括但不限于色相偏移、饱和度计算错误或...

    基于java的数字图像出来灰度变换源代码资料

    - 图像的色彩模型:除了RGB,还有CMYK、HSV、HSL等多种色彩模型,理解它们之间的转换有助于处理不同类型的图像。 - Java的图像处理库:如Apache Commons Imaging (以前称为Sanselan)、OpenCV的Java接口等,可以提供...

    java记事本小程序源代码

    程序可能首先读取一张图片,然后通过色彩空间转换(如从RGB到L*a*b*或HSL),分析图像中的颜色分布。接着,它可以应用特定的算法来模拟不同类型的色盲(如红绿色盲、蓝黄色盲)所看到的颜色。通过比较原图与模拟色盲...

    由三基色值转换成对应的颜色

    4. 可能还有其他扩展功能,如颜色选择器,或者将RGB值转换为其他颜色模型,如CMYK(青色、洋红、黄色、黑色)或HSL(色相、饱和度、亮度)。 提供的文件“颜色获取软件”可能是这个软件的源代码,通过分析和学习这...

    java色盲检测图识别程序

    2. 颜色空间转换:为了模拟不同的色盲视觉,程序需要将图像从RGB颜色空间转换到其他颜色空间,如CIE L*a*b*或HSL,这些颜色空间更适合于模拟人类视觉感知的颜色差异。 3. 色盲模型:程序需要实现不同的色盲模型,如...

    java图像处理教程源码.zip

    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标准库虽然...

    c语言数字图像处理.zip

    - RGB到其他颜色空间:如HSV、HSL、YUV等,便于进行特定的图像分析和处理。 8. **图像增强**: - 对比度调整:通过线性或非线性变换改变图像的整体亮度和对比度。 - 锐化:增强图像边缘,常用算法有拉普拉斯锐化...

    SuccessColor:在这里获取您喜欢的颜色!

    `Color`类还提供了方法来获取颜色的RGB(红绿蓝)值,HSV(色相、饱和度、亮度)值,以及进行颜色转换等功能。 SuccessColor库可能扩展了这些功能,提供了更丰富的颜色选择、颜色模式(如HSL、CMYK)、颜色搭配算法...

    color-background-源码.rar

    2. **颜色模式**:RGB、CMYK、HSL和HSV等,了解它们的区别和转换方法。 3. **CSS3新特性**:如渐变(linear-gradient和radial-gradient)、图案(重复和不重复的背景图像)、透明度(opacity和rgba())和颜色函数...

    拾色器

    3. **颜色编辑**:除了简单的取色,拾色器往往还允许用户手动调整颜色参数,如调节红绿蓝(RGB)分量或色调、饱和度、亮度(HSL)。这需要实现相应的颜色调整算法。 4. **预览和保存**:用户可以预览颜色效果,并将其...

    Color-Flip

    在计算机图形学中,颜色翻转通常涉及到图像处理和色彩空间转换,这是一门涉及广泛的技术,包括颜色模型、图像操作以及算法实现。在Java中,我们可以利用Java的丰富的图形库,如Java AWT(Abstract Window Toolkit)...

    20类343个特效.rar

    4. **色彩类**:色彩管理涉及到RGB、HSV、HSL色彩模型、颜色转换、色彩搭配原则等,常用于界面设计和动态效果。 5. **样式类与样式表**:CSS(层叠样式表)用于控制网页元素的样式,包括选择器、盒模型、布局、响应...

    unit-8-lab-3-AazibAbdullah:由GitHub Classroom创建的unit-8-lab-3-AazibAbdullah

    - **色彩空间转换**:首先,可能需要将RGB色彩空间转换为HSV(色相、饱和度、亮度)或HSL(色相、饱和度、亮度)色彩空间,因为这两个色彩模型更适合调整色彩的饱和度和色调。 - **调整饱和度**:减少图像的饱和度...

    BitmapChange_android_

    在Android中,我们可以通过遍历Bitmap的每个像素,将RGB三个颜色通道的值转换为一个灰度值来实现。灰度值通常通过以下公式计算: ```java int gray = (R + G + B) / 3; ``` 其中R、G、B分别是像素的红、绿、蓝分量...

    ImageProcessing

    6. **颜色空间转换**:在不同颜色模型之间转换,如从 RGB 转换到 HSV 或 HSL,可以改变图像的色彩表现。 7. **图像分析**:可能涉及物体识别、特征提取、模板匹配等,这些高级任务可能需要用到机器学习或深度学习...

Global site tag (gtag.js) - Google Analytics