mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2025-12-21 03:29:22 +01:00
89 lines
1.9 KiB
Lua
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
|