MineOS/lib/colorlib.lua
2015-08-04 22:31:41 +03:00

89 lines
1.9 KiB
Lua

local colorlib = {}
--utils
local function check(tVal, tMaxVal, tMinVal, tType)
end
local function isNan(x)
return x~=x
end
--RGB model
function colorlib.HEXtoRGB(color)
color = math.ceil(color)
local rr = bit32.rshift( color, 16 )
local gg = bit32.rshift( bit32.band(color, 0x00ff00), 8 )
local bb = bit32.band(color, 0x0000ff)
return rr, gg, bb
end
function colorlib.RGBtoHEX(rr, gg, bb)
return bit32.lshift(rr, 16) + bit32.lshift(gg, 8) + bb
end
--HSB model
function colorlib.RGBtoHSB(rr, gg, bb)
local max = math.max(rr, math.max(gg, bb))
local min = math.min(rr, math.min(gg, bb))
local delta = max - min
local h = 0
if ( max == rr and gg >= bb) then h = 60*(gg-bb)/delta end
if ( max == rr and gg <= bb ) then h = 60*(gg-bb)/delta + 360 end
if ( max == gg ) then h = 60*(bb-rr)/delta + 120 end
if ( max == bb ) then h = 60*(rr-gg)/delta + 240 end
local s = 0
if ( max ~= 0 ) then s = 1-(min/max) end
local b = max*100/255
if isNan(h) then h = 0 end
return h, s*100, b
end
function colorlib.HSBtoRGB(h, s, v)
if h >359 then h = 0 end
local rr, gg, bb = 0, 0, 0
local const = 255
s = s/100
v = v/100
local i = math.floor(h/60)
local f = h/60 - i
local p = v*(1-s)
local q = v*(1-s*f)
local t = v*(1-(1-f)*s)
if ( i == 0 ) then rr, gg, bb = v, t, p end
if ( i == 1 ) then rr, gg, bb = q, v, p end
if ( i == 2 ) then rr, gg, bb = p, v, t end
if ( i == 3 ) then rr, gg, bb = p, q, v end
if ( i == 4 ) then rr, gg, bb = t, p, v end
if ( i == 5 ) then rr, gg, bb = v, p, q end
return rr*const, gg*const, bb*const
end
function colorlib.HEXtoHSB(color)
local rr, gg, bb = colorlib.HEXtoRGB(color)
local h, s, b = colorlib.RGBtoHSB( rr, gg, bb )
return h, s, b
end
function colorlib.HSBtoHEX(h, s, b)
local rr, gg, bb = colorlib.HSBtoRGB(h, s, b)
local color = colorlib.RGBtoHEX(rr, gg, bb)
return color
end
return colorlib