最近突然想在android的SurfaceView上实现一个类似windows上画图颜色选择面板那种颜色和彩虹差不多排列的效果,以下是尝试。

HSL的H(hue)分量,代表的是人眼所能感知的颜色范围,这些颜色分布在一个平面的色相环上,取值范围是0°到360°的圆心角,每个角度可以代表一种颜色。色相值的意义在于,我们可以在不改变光感的情况下,通过旋转色相环来改变颜色。在实际应用中,我们需要记住色相环上的六大主色,用作基本参照:360°/0°红、60°黄、120°绿、180°青、240°蓝、300°洋红,它们在色相环上按照60°圆心角的间隔排列。

HSL的S(saturation)分量,指的是色彩的饱和度,它用0%至100%的值描述了相同色相、明度下色彩纯度的变化。数值越大,颜色中的灰色越少,颜色越鲜艳,呈现一种从理性(灰度)到感性(纯色)的变化。

HSL的L(lightness)分量,指的是色彩的明度,作用是控制色彩的明暗变化。它同样使用了0%至100%的取值范围。数值越小,色彩越暗,越接近于黑色;数值越大,色彩越亮,越接近于白色。

a) RGB→HSL
1.把RGB值用(0, 1)表示
2.找出RGB中的最大值。
3.计算L(明度):L=(max(R,G,B) + min(R,G,B))/2
4.如果最大和最小的颜色值相同,即表示灰色,那么S(饱和度)定义为0,而H( 色调)未定义并在程序中通常写成0。
5.否则L (明度)计算S (饱和度):
If L<0.5, S=( max(R,G,B) - min(R,G,B))/( max(R,G,B)  + min(R,G,B))
If L>=0.5, S=( max(R,G,B) - min(R,G,B))/(2.0-maxcolor- min(R,G,B))
6.计算H ( 色调 ):
If R= max(R,G,B)
 H=(G-B)/( max(R,G,B)- min(R,G,B))
If G= max(R,G,B),
H=2.0+(B-R)/( max(R,G,B)- min(R,G,B))
If B= max(R,G,B),
H=4.0+(R-G)/( max(R,G,B)- min(R,G,B))
H=H*60.0
if(H<0) 
H+=360
说明:1,由步骤3的式子可以看出 L(明度)仅与图像的最多颜色成分和最少的颜色成分的总量有关。 L(明度)越小,图像越趋于黑色。 L(明度)越高图像越趋于明亮的白色。
  2,由步骤5的式子可以看出 S(饱和度)与图像的最多颜色成分和最少的颜色成分的差量有关。 S(饱和度)越小,图像越趋于灰度图像。 S(饱和度)越大,图像越鲜艳,给人的感觉是彩色的,而不是黑白灰的图像。
  3, H( 色调 )决定了人对图像的不同的颜色感受。
  4,从第6步的计算看, H( 色调 )分成0~6区域。RGB颜色空间是一个立方体而HSL颜色空间是两个六角形锥体,其中的 H( 色调 )是RGB立方体的主对角线。因此,RGB立方体的顶点:红、黄、绿、青、蓝和 品红就成为HSL六角形的顶点,而数值0~6就告诉我们 H( 色调 )在哪个部分。
以上整理自百度百科
b) HSL→RGB

private void HSL2RGB(double H, double S, double L){//此处HSL均转化到(0, 1)
double var1, var2;
if(S == 0){
R = (int)(L * 255.0);
G = (int)(L * 255.0);
B = (int)(L * 255.0);
}else{
if(L < 0.5)
var2 = L * (1 + S);
else
var2 = (L + S) - (S * L);
var1 = 2.0 * L - var2;

R = (int)(255.0 * Hue2RGB(var1, var2, H + (1.0/3.0)));
G = (int)(255.0 * Hue2RGB(var1, var2, H));
B = (int)(255.0 * Hue2RGB(var1, var2, H - (1.0/3.0)));
}
}

private double Hue2RGB(double v1, double v2, double vH){
if (vH < 0) 
vH += 1;
   if (vH > 1) 
    vH -= 1;
   if (6.0 * vH < 1) 
    return v1 + (v2 - v1) * 6.0 * vH;
   if (2.0 * vH < 1) 
    return v2;
   if (3.0 * vH < 2) 
    return v1 + (v2 - v1) * ((2.0 / 3.0) - vH) * 6.0;
   return (v1);
}

最后实现效果如下(其中L固定为0.5):

色相(H)饱和度(S)明度(L)与RGB的转换以及在android上的试验相关推荐

  1. 1 色相、饱和度、明度定义

    色彩三要素(Elements of color)色彩可用的色调(色相).饱和度(纯度)和明度来描述.人眼看到的任一彩色光都是这三个特性的综合效果,这三个特性即是色彩的三要素,其中色调与光波的波长有直接 ...

  2. PS的一些基础概念(分辨率,色相,饱和度,明度,RGB)

    分辨率:每单位大小所包含的像素点 像素点不一定是正方形的,有各种各样的形状 像素图VS矢量图 像素图 :图片的成像效果更好 矢量图:将分辨率改变,而不影响成像效果 像素图可以通过(图层 - 智能对象 ...

  3. 讲一点色相、饱和度、明度

    色相.色轮.饱和度.明度 知道色轮吗? 哈哈其实就是很多种颜色的一个组成表示方法,不同的色彩原理对于三原色的认知也不同,有的说RGB,有的是CMYK,还有的不同.色轮里没白色,那是RGB三种颜色勾搭出 ...

  4. PS 色相、饱和度和明度

    https://www.toutiao.com/i6648045074137481735/?group_id=6648045074137481735&wid=1626089325192 色相: ...

  5. 通俗解释色相和饱和度和明度

    走在大街上,看了一个女生穿着  "红色"  的衣服,这个  红色  就是色相,  上午看这个女生,阳光充足打在她的衣服上 反射到了眼睛里面 感觉好亮,这个就是明度,傍晚觉得没有那么 ...

  6. 图像处理术语解释:灰度、色相、饱和度、亮度、明度、阿尔法通道、HSL、HSV、RGBA、ARGB和PRGBA以及Premultiplied Alpha(Alpha预乘)等基础概念详解

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 由于老猿以前没接触过图像处理,在阅读moviepy代码时,对类的有些处理方法代码看不懂是什么含义,为此花了4天时间查阅了大量资料,并加以自己的理解和 ...

  7. 【计算视觉】理解图像中基本概念:色调、色相、饱和度、对比度、亮度

    理解图像中基本概念:色调.色相.饱和度.对比度.亮度 对比度: 对比度指不同颜色之间的差别.对比度越大,不同颜色之间的反差越大,即所谓黑白分明,对比度过大,图像就会显得很刺眼.对比度越小,不同颜色之间 ...

  8. 基本概念:色调、色相、饱和度、对比度、亮度

    对比度: 对比度指不同颜色之间的差别.对比度越大,不同颜色之间的反差越大,即所谓黑白分明,对比度过大,图像就会显得很刺眼.对比度越小,不同颜色之间的反差就越小. 亮度: 亮度指照射在景物或图像上光线的 ...

  9. 在QT框架下进行仿照PS图像调整功能设计(亮度对比度,色相饱和度及明度)

    原文链接:https://blog.csdn.net/maozefa/article/details/4778934 图像亮度调整分为非线性和线性两种方法. 非线性图像亮度是将图像像素的R.G.B分别 ...

最新文章

  1. Replace函数语法
  2. 华为vrrp默认优先级_华为eNSP配置VRRP协议实验
  3. PPT 下载 | 神策数据刘乐:智能推荐驱动业务增长应用与实践
  4. iOS再现安全漏洞 “1970变砖”问题仍未解决
  5. python制作饼状图
  6. JeecgBoot版本4月份新版即将发布,抢先体验。。
  7. c语言除法在全局区,深入C语言内存区域分配(进程的各个段)详解
  8. mysql 针对table的查看命令行
  9. (传播智客)刘意Java基础班精华版
  10. eclipse中文版
  11. c语言程序调试时无法启动程序,编译没有异常,调试时报错: 无法启动程序“C:Projects\Driver\mydriver_check\HelloDDk.sys...
  12. 硬盘读写性能iozone测试方法及下载
  13. POI 合并单元格后设置列宽自适应的问题
  14. python练习-华氏转摄氏
  15. 【设计模式】【第四章】【订单状态流转】【状态模式 + 享元模式+模板方法模式】
  16. VJ第一周算法题(A - Mud Puddles)
  17. I 帧和 IDR 帧的区别
  18. 69、Android获取每日运动步数
  19. c语言plc库,PLC编程-C语言.ppt
  20. vue-cli cdn方式引入Vue模块

热门文章

  1. 一文整理14道MySQL索引相关面试题
  2. JavaWeb_(SSH论坛)_七、辅助模块
  3. 2021Matlab遗传算法谢菲尔德大学遗传工具箱的使用
  4. psutil详细使用
  5. mongodb的原子性(Atomicity)和事物 (Transactions)
  6. Mock工具Jmockit使用介绍
  7. 【模式识别】SVM核函数
  8. WordPress 严重的远程备份执行代码漏洞
  9. 一物一码二维码营销,让消费者选择更清澈透明
  10. 重启redis服务器的常用命令