各个颜色空间原始值的取值范围:
RGB:[0,255]
H:[0,360],S:[0,1],V:[0,1]
CMYK:[0,1]
灰度:[0,255]
以下给出各个颜色空间转换的伪代码。
RGB转HSV
r=R/255
g=G/255
b=B/255
max=Max(r,g,b)
min=Min(r,g,b)
d=max-min
if(d=0)
H=S=V=0
else
if(max=r)
H=60*(g-b)/d
else if(max=g)
H=60*(b-r)/d+120
else if(max=b)
H=60*(r-g)/d+240
if(H<0)
H=H+360
S=1-min/max
V=max
HSV转RGB
if(S=0)
r=g=b=V
else
H=H/60
h=Int(H)
f=H-h
p1=V*(1-S)
p2=V*(1-S*f)
p3=V*(1-S*(1-f))
switch(h)
case 0:
r=V
g=p3
b=p1
case 1:
r=p2
g=V
b=p1
case 2:
r=p1
g=V
b=p3
case 3:
r=p1
g=p2
b=V
case 4:
r=p3
g=p1
b=V
case 5:
r=V
g=p1
b=p2
R=r*255
G=g*255
B=b*255
RGB转CMYK
r=R/255
g=G/255
b=B/255
K=1-Max(r,g,b)
if(K=0)
C=M=Y=0
else
C=(1-r-K)/(1-K)
M=(1-g-K)/(1-K)
Y=(1-b-K)/(1-K)
CMYK转RGB
R=255*(1-C)*(1-K)
G=255*(1-M)*(1-K)
B=255*(1-Y)*(1-K)
RGB转灰度图
Gray=R*0.299+G*0.587+B*0.114