猫史档案馆


论HSV【或H喵】到RGB的转换

用户:IysthingraphicsIysthingraphics查看:10 回复:2 评论:10 创建时间:2020-12-08T14:18:31


我们都知道

HSV或者说H喵是【Hue,Saturation,Brightness】的缩写,而RGB是【Red,Green,Blue】的缩写

前者通过调整色相,饱和度和亮度产生颜色,也就是加色原理

色相在你们的美术课上来混合颜色

后者直接利用人类视锥细胞的原理刺激视觉可能有学过,但色相环总是被分成很多个小块,而不是平滑的对吧,但这里的色相是平滑的,连续的而饱和度也就是所说的鲜艳程度。

HSV的值用(H°,%S,%V)来表示,RGB同上,不过不带角度符号和百分号(这里提醒一下,计算机使用24bit真彩色标准显示颜色,每8bit存储一个通道的信息,每个通道可以有2^8=256个值,从0到255,所以RGB的最大值只能是255,不能出现负数和小数,而HSV三个值的最大值分别是360,100,100)

现在就开始讲解转换部分

RGB>>H喵

注意,R,G,B,H,S,V分别对应这两种颜色空间中的六个值,MAX对应某颜色空间中最大值,MIN反之

这下面的算式可能会有亿点点难,请仔细看

色相:

如果MAX=MIN则h=0||如果MAX=r且g≥b则h=60°×((g-b)/(MAX-MIN))||如果MAX=r且g<b则h=60°×((g-b)/(MAX-MIN))+360°||如果MAX=g则h=60°×((g-b)/(MAX-MIN))+120°||如果MAX=b则h=60°×((g-b)/(MAX-MIN))+240°

饱和度:

如果MAX=0则s=0||其他情况下s=1-(MIN/MAX)

亮度:

v=MAX

接下来就是HSV>>RGB的部分了

由于有一些是我从网上扒拉下来的图片对照着写上去的,所以可能我不懂一些变量的名称请见谅(注意h,s,v三个字母,别混淆了)

floor(x) 向下取整x

h1=floor(h/60) mod 6||f=(h/60)-h1||p=v(1-s)||q=v(1-fs)||t=v(1-4(1-f))

以下是h1从0-5的情况

(r,g,b)=(v,t,p)||(r,g,b)=(q,v,p)||(r,g,b)=(p,v,t)||(r,g,b)=(p,q,v)||(r,g,b)=(t,p,v)||(r,g,b)=(v,p,q)

如果错了哪里请在评论区指出


回复

上一页1 页 / 共 1下一页
IysthingraphicsIysthingraphics

console.log("为什么HS B也是屏蔽词???")

点赞0


评论


JSR代码喵JSR代码喵

S​B​是​骂​人​的​词​语​啊​,​屏​蔽​词​系​统​很​坑​的​,​建​议​下​载​防​屏​蔽​系​统​

点赞0


评论