Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- HSL(bi-hexcone) color conversion
- local abs = math.abs
- local min = math.min
- local tiny = -math.huge
- module "color_conv"
- local function max_sel(...)
- local mi, mv = -tiny
- for i,v in ipairs{...} do
- if v > mv then mi = i ; mv = v end
- end
- return mi, mv
- end
- function rgb2hsl(r, g, b)
- local r, g, b = r / 256, g / 256, b / 256
- local m = min(r, g, b)
- local i, M = max_sel(r, g, b)
- local C = M - m
- local l = .5 * (M + m)
- local h,s
- if C == 0 then
- h = 0
- s = 0
- else
- if i == 1 then
- h = (g-b) / C % 6
- elseif i == 2 then
- h = (b-r) / C + 2
- elseif i == 3 then
- h = (r-g) / C + 4
- end
- h = h / 6
- if l <= 1/2 then
- s = C / (2 * l)
- else
- s = C / (2 - 2 * l)
- end
- end
- return h,s,l
- end
- function hsl2rgb(h, s, l)
- if s == 0 then
- return l, l, l
- end
- local C
- if l <= 1/2 then
- C = 2 * l * s
- else
- C = (2 - 2 * l) * s
- end
- local h = h * 6
- local X = C * (1 - abs(h % 2 - 1))
- local m = l - .5 * C
- local r, g, b
- if h < 1 then r = C+m ; g = X+m ; b = m
- elseif h < 2 then g = C+m ; r = X+m ; b = m
- elseif h < 3 then g = C+m ; b = X+m ; r = m
- elseif h < 4 then b = C+m ; g = X+m ; r = m
- elseif h < 5 then b = C+m ; r = X+m ; g = m
- else r = C+m ; b = X+m ; g = m
- end
- return r * 256, g * 256, b * 256
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement