顏色模型RGB,HSV顏色模型的數值之間相互轉換

2021-07-31 14:05:11 字數 3129 閱讀 1663

公式詳解 參考文獻 : 

向作者白哦大十二分的敬意。

因為是做遊戲的,所以才會有這方面的需求,我們的引擎採用的指令碼是 lua, 我是通過lua將資料轉換後為遊戲材質屬性賦值,因為下面的指令碼執行速率並不是太高,所以就先在指令碼中實現,方便除錯。

--[[

* rgb顏色模型轉化為hsv的顏色模型資料

* h,s,v 色相,飽和度, 色調(明度)

* 返回值 hsvvalue h(0-360),s(0-255) v(0-255)

* @param colorrgb 顏色數值, 數值部分0-255

]]function _g.rgbconverttohsv(colorrgb)

local r,g,b = colorrgb.r, colorrgb.g, colorrgb.b;

local h,s,v = 0,0,0;

local max1 = math.max(r, math.max(g,b));

local min1 = math.min(r, math.min(g,b));

if max1 == min1 then

h=0;

else

if r == max1 then

if g >= b then

h = 60 * (g-b) / (max1-min1);

else

h = 60 * (g-b) / (max1-min1) + 360;

end

endif g == max1 then

h = 60 * (b-r)/(max1-min1) + 120;

endif b == max1 then

h = 60 * (r-g)/(max1-min1) + 240;

endend

if max1 == 0 then

s = 0;

else

s = (1- min1 / max1) * 255;

endv = max1;

local hsvvalue = ;

return hsvvalue;

end--[[

* hsv to rgb

* h,s,v 色相,飽和度,明度(色調)

* 返回值 colorvalue 顏色值 (0-1)規範化數值

* @paream colorhsv 顏色數值, h(0-360) s(0-255) v(0-255)

]]function hsvconverttorgb( colorhsv )

local cr,cg,cb = 0,0,0;

colorhsv.s = colorhsv.s /255;

colorhsv.v = colorhsv.v / 255;

if( colorhsv.s == 0 ) then

cr,cg,cb = colorhsv.v, colorhsv.v, colorhsv.v;

else

colorhsv.h = colorhsv.h /60;

local i = math.floor(colorhsv.h);

local f = colorhsv.h - i;

local a = colorhsv.v * ( 1 - colorhsv.s );

local b = colorhsv.v * ( 1 - colorhsv.s * f );

local c = colorhsv.v * ( 1 - colorhsv.s * (1 - f ) );

if i== 0 then

cr,cg,cb = colorhsv.v, c, a;

elseif i == 1 then

cr,cg,cb = b, colorhsv.v, a;

elseif i == 2 then

cr,cg,cb = a, colorhsv.v, c;

elseif i == 3 then

cr,cg,cb = a, b, colorhsv.v;

elseif i == 4 then

cr,cg,cb = c, a, colorhsv.v;

else

cr,cg,cb = colorhsv.v, a, b;

endend

local rgbvalue = ;

return rgbvalue;

end

--[[

*hsl顏色值轉換為rgb.

* h, s, l 色相,飽和度,亮度

* h(0-360) s(0-255) l(0-255);

* 返回的 color 數值 [0,1]

* @param hslvalue

]]function hslconverttorgb(hslvalue)

local h,s,l = hslvalue.h, hslvalue.s, hslvalue.l;

h = h/360;

s = s/255;

l = l/255;

local r, g, b;

if s == 0 then

r, g, b = l, l, l;

else

local hue2rgb = function(p, q, t)

if t < 0 then t = t +1; end

if t > 1 then t = t -1; end

if t < 1/6 then return p + (q - p) * 6 * t; end

if t < 1/2 then return q; end

if t < 2/3 then return p + (q - p) * (2/3 - t) * 6; end

return p;

endlocal q = l < 0.5 and l * (1 + s) or l + s - l * s;

local p = 2 * l - q;

r = hue2rgb(p, q, h + 1/3);

g = hue2rgb(p, q, h);

b = hue2rgb(p, q, h - 1/3);

endlocal rgbvalue = ;

return rgbvalue;

end

HSV顏色模型

hsv是指hue 色相 saturation 飽和度 和value 亮度 色調 或 明度 hsv模型的三維表示從rgb立方體演化而來。設想從rgb沿立方體對角線的白色頂點向黑色頂點觀察,就可以看到立方體的六邊形外形。六邊形邊界表示色彩,水平軸表示純度,明度沿垂直軸測量。hsv六稜錐 h引數表示色彩資...

HSV顏色模型

hsv顏色模型 h 色調 0 360 決定顯示什麼顏色 s 飽和度 0.0 1.0 v 亮度 0 1 圓錐的頂面中心處 s 0,v 1,h無定義,代表白色。在圓錐的頂點 即原點 處,v 0,h和s無定義,代表黑色。在圓錐頂面的圓周上的顏色,v 1,s 1,這種顏色是純色。色調h 用角度度量,取值範圍...

RGB HSV和HSL顏色空間

詳細資訊click 侵刪rgb 是我們接觸最多的顏色空間,由三個通道表示一幅影象,分別為紅色 綠色 g 和藍色 b 這三種顏色的不同組合可以形成幾乎所有的其他顏色。rgb 顏色空間是影象處理中最基本 最常用 面向硬體的顏色空間,比較容易理解。rgb 顏色空間利用三個顏色分量的線性組合來表示顏色,任何...