1
0

More flexibility for apply_color_map_to_image_data.

This commit is contained in:
Jon Michael Aanes 2019-06-30 01:26:42 +02:00
parent 198532fd3b
commit 0e8a501049

View File

@ -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,7 +130,7 @@ 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'
@ -115,17 +139,34 @@ function palette_swap.color_map.rotate_hue (rad)
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')
function palette_swap.color_map.increase_saturation (amount)
-- Create function -- Create function
return function (r, g, b)
local hsl = colors.rgb_to_hsl(colors.rgb1_to_rgb255(r, g, b))
--
hsl[2] = math.min(1, math.max(0, hsl[2] + amount))
--
return unpack(colors.hsl_to_rgb1(hsl))
end
end
function palette_swap.color_map.rotate_hue (rad)
return function (r, g, b) return function (r, g, b)
local hsl = colors.rgb_to_hsl(colors.rgb1_to_rgb255(r, g, b)) local hsl = colors.rgb_to_hsl(colors.rgb1_to_rgb255(r, g, b))
-- --
hsl[1] = (hsl[1] + rad) % 1 hsl[1] = (hsl[1] + rad) % 1
-- --
local rgb1 = colors.hsl_to_rgb1(hsl) return unpack(colors.hsl_to_rgb1(hsl))
return unpack(rgb1) 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