More flexibility for apply_color_map_to_image_data
.
This commit is contained in:
parent
198532fd3b
commit
0e8a501049
67
init.lua
67
init.lua
|
@ -77,9 +77,33 @@ end
|
||||||
|
|
||||||
palette_swap.get_palette_from_image_data = get_palette_of_image_data
|
palette_swap.get_palette_from_image_data = get_palette_of_image_data
|
||||||
|
|
||||||
function palette_swap.apply_color_map_to_image_data (img_data, map_fn)
|
local function concat_functions (first_fn, ...)
|
||||||
|
--
|
||||||
|
local funcs = {first_fn, ...}
|
||||||
|
|
||||||
|
-- Identity function.
|
||||||
|
if #funcs == 0 then
|
||||||
|
return function (...) return ... end
|
||||||
|
|
||||||
|
-- Only one function
|
||||||
|
elseif #funcs <= 1 then
|
||||||
|
return first_fn
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Generic
|
||||||
|
return function (...)
|
||||||
|
local val = {...}
|
||||||
|
for i = 1, #funcs do
|
||||||
|
val = {funcs[i](unpack(val))}
|
||||||
|
end
|
||||||
|
return unpack(val)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function palette_swap.apply_color_map_to_image_data (img_data, ...)
|
||||||
assert(img_data)
|
assert(img_data)
|
||||||
assert(type(map_fn) == 'function')
|
--
|
||||||
|
local map_fn = concat_functions(...)
|
||||||
--
|
--
|
||||||
return apply_change_palette(img_data, change_palette_from_map(map_fn, get_palette_of_image_data(img_data)))
|
return apply_change_palette(img_data, change_palette_from_map(map_fn, get_palette_of_image_data(img_data)))
|
||||||
end
|
end
|
||||||
|
@ -106,26 +130,43 @@ function palette_swap.color_map.switch_channel (mode)
|
||||||
return loadstring (func_s)()
|
return loadstring (func_s)()
|
||||||
end
|
end
|
||||||
|
|
||||||
function palette_swap.color_map.rotate_hue (rad)
|
local function load_colors ()
|
||||||
|
|
||||||
-- Only need to import colors when needed
|
-- Only need to import colors when needed
|
||||||
local colors = require 'colors'
|
local colors = require 'colors'
|
||||||
assert(type(colors) == 'table')
|
assert(type(colors) == 'table')
|
||||||
assert(type(colors.rgb1_to_rgb255) == 'function')
|
assert(type(colors.rgb1_to_rgb255) == 'function')
|
||||||
assert(type(colors.rgb_to_hsl) == 'function')
|
assert(type(colors.rgb_to_hsl) == 'function')
|
||||||
assert(type(colors.hsl_to_rgb1) == 'function')
|
assert(type(colors.hsl_to_rgb1) == 'function')
|
||||||
|
|
||||||
-- Create function
|
function palette_swap.color_map.increase_saturation (amount)
|
||||||
return function (r, g, b)
|
-- Create function
|
||||||
local hsl = colors.rgb_to_hsl(colors.rgb1_to_rgb255(r, g, b))
|
return function (r, g, b)
|
||||||
--
|
local hsl = colors.rgb_to_hsl(colors.rgb1_to_rgb255(r, g, b))
|
||||||
hsl[1] = (hsl[1] + rad) % 1
|
--
|
||||||
--
|
hsl[2] = math.min(1, math.max(0, hsl[2] + amount))
|
||||||
local rgb1 = colors.hsl_to_rgb1(hsl)
|
--
|
||||||
return unpack(rgb1)
|
return unpack(colors.hsl_to_rgb1(hsl))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function palette_swap.color_map.rotate_hue (rad)
|
||||||
|
return function (r, g, b)
|
||||||
|
local hsl = colors.rgb_to_hsl(colors.rgb1_to_rgb255(r, g, b))
|
||||||
|
--
|
||||||
|
hsl[1] = (hsl[1] + rad) % 1
|
||||||
|
--
|
||||||
|
return unpack(colors.hsl_to_rgb1(hsl))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
for _, key in ipairs {'rotate_hue', 'increase_saturation'} do
|
||||||
|
palette_swap.color_map[key] = function (...)
|
||||||
|
load_colors()
|
||||||
|
return palette_swap.color_map[key](...)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- Return
|
-- Return
|
||||||
|
|
Loading…
Reference in New Issue
Block a user