mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-23 13:10:04 +08:00
feat(cpicker): add cmyk color space
This commit is contained in:
parent
cd08e2430b
commit
98e67a214c
@ -17,6 +17,9 @@
|
|||||||
" name = 'tools#cpicker'
|
" name = 'tools#cpicker'
|
||||||
" <
|
" <
|
||||||
"
|
"
|
||||||
|
" @subsection layer options
|
||||||
|
" 1. default_spaces: set the default color spaces, the default value is `['rgb', 'hsl']`
|
||||||
|
"
|
||||||
" @subsection Key bindings
|
" @subsection Key bindings
|
||||||
" >
|
" >
|
||||||
" Key Function
|
" Key Function
|
||||||
@ -34,6 +37,13 @@
|
|||||||
" h/<Left> reduce
|
" h/<Left> reduce
|
||||||
" l/<Right> increase
|
" l/<Right> increase
|
||||||
" <
|
" <
|
||||||
|
" @subsection commands
|
||||||
|
" Instead of using key Binding, this layer also provides a Neovim command `:Cpicker` which can be used in cmdline. For example:
|
||||||
|
" >
|
||||||
|
" :Cpicker rgb cmyk
|
||||||
|
" <
|
||||||
|
|
||||||
|
let s:default_spaces = ['rgb', 'hsl']
|
||||||
|
|
||||||
function! SpaceVim#layers#tools#cpicker#plugins() abort
|
function! SpaceVim#layers#tools#cpicker#plugins() abort
|
||||||
|
|
||||||
@ -45,13 +55,13 @@ endfunction
|
|||||||
|
|
||||||
function! SpaceVim#layers#tools#cpicker#config() abort
|
function! SpaceVim#layers#tools#cpicker#config() abort
|
||||||
|
|
||||||
call SpaceVim#mapping#space#def('nnoremap', ['i', 'p', 'c'], 'Cpicker all',
|
call SpaceVim#mapping#space#def('nnoremap', ['i', 'p', 'c'], 'Cpicker ' . join(s:default_spaces, ' '),
|
||||||
\ 'insert-color-with-picker', 1)
|
\ 'insert-color-with-picker', 1)
|
||||||
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! SpaceVim#layers#tools#cpicker#set_variable(var) abort
|
function! SpaceVim#layers#tools#cpicker#set_variable(var) abort
|
||||||
let g:cpicker_default_format = get(a:var, 'default_format', 'hex')
|
let s:default_spaces = get(a:var, 'default_spaces', s:default_spaces)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! SpaceVim#layers#tools#cpicker#loadeable() abort
|
function! SpaceVim#layers#tools#cpicker#loadeable() abort
|
||||||
|
@ -74,7 +74,7 @@ end
|
|||||||
|
|
||||||
local function copy_color()
|
local function copy_color()
|
||||||
local from, to = vim
|
local from, to = vim
|
||||||
.regex([[#[0123456789ABCDEF]\+\|rgb(\d\+,\s\d\+,\s\d\+)\|hsl(\d\+,\s\d\+%,\s\d\+%)\|hsv(\d\+,\s\d\+%,\s\d\+%)]])
|
.regex([[#[0123456789ABCDEF]\+\|rgb(\d\+,\s\d\+,\s\d\+)\|hsl(\d\+,\s\d\+%,\s\d\+%)\|hsv(\d\+,\s\d\+%,\s\d\+%)\|cmyk(\d\+%,\s\d\+%,\s\d\+%,\s\d\+%)]])
|
||||||
:match_str(vim.fn.getline('.'))
|
:match_str(vim.fn.getline('.'))
|
||||||
if from then
|
if from then
|
||||||
vim.fn.setreg('+', string.sub(vim.fn.getline('.'), from, to + 1))
|
vim.fn.setreg('+', string.sub(vim.fn.getline('.'), from, to + 1))
|
||||||
|
126
bundle/cpicker.nvim/lua/cpicker/formats/cmyk.lua
Normal file
126
bundle/cpicker.nvim/lua/cpicker/formats/cmyk.lua
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
--=============================================================================
|
||||||
|
-- cmyk.lua ---
|
||||||
|
-- Copyright (c) 2019-2024 Wang Shidong & Contributors
|
||||||
|
-- Author: Wang Shidong < wsdjeg@outlook.com >
|
||||||
|
-- URL: https://spacevim.org
|
||||||
|
-- License: GPLv3
|
||||||
|
--=============================================================================
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
local color = require('spacevim.api.color')
|
||||||
|
local util = require('cpicker.util')
|
||||||
|
|
||||||
|
local cyan = 0
|
||||||
|
local magenta = 0
|
||||||
|
local yellow = 0
|
||||||
|
local black = 0
|
||||||
|
|
||||||
|
local function on_change_argv()
|
||||||
|
return 'cmyk', { cyan, magenta, yellow, black }
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.buf_text()
|
||||||
|
local rst = {}
|
||||||
|
local c_bar = util.generate_bar(cyan, '+')
|
||||||
|
local m_bar = util.generate_bar(magenta, '+')
|
||||||
|
local y_bar = util.generate_bar(yellow, '+')
|
||||||
|
local k_bar = util.generate_bar(black, '+')
|
||||||
|
table.insert(rst, 'CMYK: C: ' .. string.format('%4s', math.floor(cyan * 100 + 0.5)) .. ' ' .. c_bar)
|
||||||
|
table.insert(rst, ' M: ' .. string.format('%4s', math.floor(magenta * 100 + 0.5)) .. ' ' .. m_bar)
|
||||||
|
table.insert(rst, ' Y: ' .. string.format('%4s', math.floor(yellow * 100 + 0.5)) .. ' ' .. y_bar)
|
||||||
|
table.insert(rst, ' K: ' .. string.format('%4s', math.floor(black * 100 + 0.5)) .. ' ' .. k_bar)
|
||||||
|
return rst
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.color_code()
|
||||||
|
return
|
||||||
|
' =========' .. string.format(
|
||||||
|
' cmyk(%s%%, %s%%, %s%%, %s%%)',
|
||||||
|
math.floor(cyan * 100 + 0.5),
|
||||||
|
math.floor(magenta * 100 + 0.5),
|
||||||
|
math.floor(yellow * 100 + 0.5),
|
||||||
|
math.floor(black * 100 + 0.5)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function increase_cyan()
|
||||||
|
if cyan <= 0.99 then
|
||||||
|
cyan = cyan + 0.01
|
||||||
|
elseif cyan < 1 then
|
||||||
|
cyan = 1
|
||||||
|
end
|
||||||
|
return on_change_argv()
|
||||||
|
end
|
||||||
|
local function reduce_cyan()
|
||||||
|
if cyan > 0.01 then
|
||||||
|
cyan = cyan - 0.01
|
||||||
|
elseif cyan > 0 then
|
||||||
|
cyan = 0
|
||||||
|
end
|
||||||
|
return on_change_argv()
|
||||||
|
end
|
||||||
|
local function increase_magenta()
|
||||||
|
if magenta <= 0.99 then
|
||||||
|
magenta = magenta + 0.01
|
||||||
|
elseif magenta < 1 then
|
||||||
|
magenta = 1
|
||||||
|
end
|
||||||
|
return on_change_argv()
|
||||||
|
end
|
||||||
|
local function reduce_magenta()
|
||||||
|
if magenta > 0.01 then
|
||||||
|
magenta = magenta - 0.01
|
||||||
|
elseif magenta > 0 then
|
||||||
|
magenta = 0
|
||||||
|
end
|
||||||
|
return on_change_argv()
|
||||||
|
end
|
||||||
|
local function increase_yellow()
|
||||||
|
if yellow <= 0.99 then
|
||||||
|
yellow = yellow + 0.01
|
||||||
|
elseif yellow < 1 then
|
||||||
|
yellow = 1
|
||||||
|
end
|
||||||
|
return on_change_argv()
|
||||||
|
end
|
||||||
|
local function reduce_yellow()
|
||||||
|
if yellow > 0.01 then
|
||||||
|
yellow = yellow - 0.01
|
||||||
|
elseif yellow > 0 then
|
||||||
|
yellow = 0
|
||||||
|
end
|
||||||
|
return on_change_argv()
|
||||||
|
end
|
||||||
|
local function increase_black()
|
||||||
|
if black <= 0.99 then
|
||||||
|
black = black + 0.01
|
||||||
|
elseif black < 1 then
|
||||||
|
black = 1
|
||||||
|
end
|
||||||
|
return on_change_argv()
|
||||||
|
end
|
||||||
|
local function reduce_black()
|
||||||
|
if black > 0.01 then
|
||||||
|
black = black - 0.01
|
||||||
|
elseif black > 0 then
|
||||||
|
black = 0
|
||||||
|
end
|
||||||
|
return on_change_argv()
|
||||||
|
end
|
||||||
|
function M.increase_reduce_functions()
|
||||||
|
return {
|
||||||
|
{ increase_cyan, reduce_cyan },
|
||||||
|
{ increase_magenta, reduce_magenta },
|
||||||
|
{ increase_yellow, reduce_yellow },
|
||||||
|
{ increase_black, reduce_black },
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.on_change(f, code)
|
||||||
|
if f == 'cmyk' then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
cyan, magenta, yellow, black = color[f .. '2cmyk'](unpack(code))
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
@ -21,8 +21,8 @@ end
|
|||||||
function M.buf_text()
|
function M.buf_text()
|
||||||
local rst = {}
|
local rst = {}
|
||||||
local h_bar = util.generate_bar(hue, '+', 360)
|
local h_bar = util.generate_bar(hue, '+', 360)
|
||||||
local s_bar = util.generate_bar(saturation, '+', 1)
|
local s_bar = util.generate_bar(saturation, '+')
|
||||||
local l_bar = util.generate_bar(lightness, '+', 1)
|
local l_bar = util.generate_bar(lightness, '+')
|
||||||
table.insert(rst, 'HSL: H: ' .. string.format('%4s', math.floor(hue + 0.5)) .. ' ' .. h_bar)
|
table.insert(rst, 'HSL: H: ' .. string.format('%4s', math.floor(hue + 0.5)) .. ' ' .. h_bar)
|
||||||
table.insert(
|
table.insert(
|
||||||
rst,
|
rst,
|
||||||
@ -46,8 +46,10 @@ function M.color_code()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function increase_hsl_h()
|
local function increase_hsl_h()
|
||||||
if hue < 360 then
|
if hue <= 359 then
|
||||||
hue = hue + 1
|
hue = hue + 1
|
||||||
|
elseif hue < 360 then
|
||||||
|
hue = 360
|
||||||
end
|
end
|
||||||
return on_change_argv()
|
return on_change_argv()
|
||||||
end
|
end
|
||||||
|
@ -22,8 +22,8 @@ function M.buf_text()
|
|||||||
|
|
||||||
local rst = {}
|
local rst = {}
|
||||||
local h_bar = util.generate_bar(hue, '+', 360)
|
local h_bar = util.generate_bar(hue, '+', 360)
|
||||||
local s_bar = util.generate_bar(saturation, '+', 1)
|
local s_bar = util.generate_bar(saturation, '+')
|
||||||
local l_bar = util.generate_bar(value, '+', 1)
|
local l_bar = util.generate_bar(value, '+')
|
||||||
table.insert(rst, 'HSV: H: ' .. string.format('%4s', math.floor(hue + 0.5)) .. ' ' .. h_bar)
|
table.insert(rst, 'HSV: H: ' .. string.format('%4s', math.floor(hue + 0.5)) .. ' ' .. h_bar)
|
||||||
table.insert(
|
table.insert(
|
||||||
rst,
|
rst,
|
||||||
@ -47,8 +47,9 @@ function M.color_code()
|
|||||||
|
|
||||||
end
|
end
|
||||||
local function increase_hsl_h()
|
local function increase_hsl_h()
|
||||||
if hue < 360 then
|
if hue <= 359 then
|
||||||
hue = hue + 1
|
hue = hue + 1
|
||||||
|
elseif hue < 360 then hue = 360
|
||||||
end
|
end
|
||||||
return on_change_argv()
|
return on_change_argv()
|
||||||
end
|
end
|
||||||
|
@ -10,9 +10,9 @@ local M = {}
|
|||||||
local color = require('spacevim.api.color')
|
local color = require('spacevim.api.color')
|
||||||
local util = require('cpicker.util')
|
local util = require('cpicker.util')
|
||||||
|
|
||||||
local red = 0 -- [0, 255]
|
local red = 0 -- [0, 1]
|
||||||
local green = 0 -- [0, 255]
|
local green = 0 -- [0, 1]
|
||||||
local blue = 0 -- [0, 255]
|
local blue = 0 -- [0, 1]
|
||||||
|
|
||||||
local function on_change_argv()
|
local function on_change_argv()
|
||||||
return 'rgb', { red, green, blue }
|
return 'rgb', { red, green, blue }
|
||||||
@ -23,9 +23,18 @@ function M.buf_text()
|
|||||||
local r_bar = util.generate_bar(red, '+')
|
local r_bar = util.generate_bar(red, '+')
|
||||||
local g_bar = util.generate_bar(green, '+')
|
local g_bar = util.generate_bar(green, '+')
|
||||||
local b_bar = util.generate_bar(blue, '+')
|
local b_bar = util.generate_bar(blue, '+')
|
||||||
table.insert(rst, 'RGB: R: ' .. string.format('%4s', red) .. ' ' .. r_bar)
|
table.insert(
|
||||||
table.insert(rst, ' G: ' .. string.format('%4s', green) .. ' ' .. g_bar)
|
rst,
|
||||||
table.insert(rst, ' B: ' .. string.format('%4s', blue) .. ' ' .. b_bar)
|
'RGB: R: ' .. string.format('%4s', math.floor(red * 255 + 0.5)) .. ' ' .. r_bar
|
||||||
|
)
|
||||||
|
table.insert(
|
||||||
|
rst,
|
||||||
|
' G: ' .. string.format('%4s', math.floor(green * 255 + 0.5)) .. ' ' .. g_bar
|
||||||
|
)
|
||||||
|
table.insert(
|
||||||
|
rst,
|
||||||
|
' B: ' .. string.format('%4s', math.floor(blue * 255 + 0.5)) .. ' ' .. b_bar
|
||||||
|
)
|
||||||
return rst
|
return rst
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -33,42 +42,48 @@ function M.color_code()
|
|||||||
return ' =========' .. ' ' .. color.rgb2hex(red, green, blue)
|
return ' =========' .. ' ' .. color.rgb2hex(red, green, blue)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function increase_rgb_red()
|
local function increase(c)
|
||||||
if red < 255 then
|
if c <= 1 - 1 / 255 then
|
||||||
red = red + 1
|
c = c + 1 / 255
|
||||||
|
elseif c < 1 then
|
||||||
|
c = 1
|
||||||
end
|
end
|
||||||
|
return c
|
||||||
|
end
|
||||||
|
|
||||||
|
local function reduce(c)
|
||||||
|
if c >= 1 / 255 then
|
||||||
|
c = c - 1 / 255
|
||||||
|
elseif c > 0 then
|
||||||
|
c = 0
|
||||||
|
end
|
||||||
|
return c
|
||||||
|
end
|
||||||
|
|
||||||
|
local function increase_rgb_red()
|
||||||
|
red = increase(red)
|
||||||
return on_change_argv()
|
return on_change_argv()
|
||||||
end
|
end
|
||||||
local function reduce_rgb_red()
|
local function reduce_rgb_red()
|
||||||
if red > 0 then
|
red = reduce(red)
|
||||||
red = red - 1
|
|
||||||
end
|
|
||||||
return on_change_argv()
|
return on_change_argv()
|
||||||
end
|
end
|
||||||
local function increase_rgb_green()
|
local function increase_rgb_green()
|
||||||
if green < 255 then
|
green = increase(green)
|
||||||
green = green + 1
|
|
||||||
end
|
|
||||||
return on_change_argv()
|
return on_change_argv()
|
||||||
end
|
end
|
||||||
local function reduce_rgb_green()
|
local function reduce_rgb_green()
|
||||||
if green > 0 then
|
green = reduce(green)
|
||||||
green = green - 1
|
|
||||||
end
|
|
||||||
return on_change_argv()
|
return on_change_argv()
|
||||||
end
|
end
|
||||||
|
|
||||||
local function increase_rgb_blue()
|
local function increase_rgb_blue()
|
||||||
if blue < 255 then
|
blue = increase(blue)
|
||||||
blue = blue + 1
|
|
||||||
end
|
|
||||||
return on_change_argv()
|
return on_change_argv()
|
||||||
end
|
end
|
||||||
|
|
||||||
local function reduce_rgb_blue()
|
local function reduce_rgb_blue()
|
||||||
if blue > 0 then
|
blue = reduce(blue)
|
||||||
blue = blue - 1
|
|
||||||
end
|
|
||||||
return on_change_argv()
|
return on_change_argv()
|
||||||
end
|
end
|
||||||
function M.increase_reduce_functions()
|
function M.increase_reduce_functions()
|
||||||
|
@ -12,7 +12,7 @@ local M = {}
|
|||||||
local color = require('spacevim.api.color')
|
local color = require('spacevim.api.color')
|
||||||
|
|
||||||
function M.generate_bar(n, char, m)
|
function M.generate_bar(n, char, m)
|
||||||
return string.rep(char, math.floor(24 * n / (m or 255)))
|
return string.rep(char, math.floor(24 * n / (m or 1)))
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.get_hex_code(t, code)
|
function M.get_hex_code(t, code)
|
||||||
|
@ -5,7 +5,7 @@ let b:current_syntax = 'spacevim_cpicker'
|
|||||||
syntax case ignore
|
syntax case ignore
|
||||||
|
|
||||||
syn match ProcessBar /[?=+]\+/
|
syn match ProcessBar /[?=+]\+/
|
||||||
syn match SpaceVimPickerCode /#[0123456789ABCDEF]\+\|rgb(\d\+,\s\d\+,\s\d\+)\|hsl(\d\+,\s\d\+%,\s\d\+%)\|hsv(\d\+,\s\d\+%,\s\d\+%)/
|
syn match SpaceVimPickerCode /#[0123456789ABCDEF]\+\|rgb(\d\+,\s\d\+,\s\d\+)\|hsl(\d\+,\s\d\+%,\s\d\+%)\|hsv(\d\+,\s\d\+%,\s\d\+%)\|cmyk(\d\+%,\s\d\+%,\s\d\+%,\s\d\+%)/
|
||||||
syn match SpaceVimPickerBackground /=\+/
|
syn match SpaceVimPickerBackground /=\+/
|
||||||
|
|
||||||
highlight ProcessBar ctermfg=Gray ctermbg=Gray guifg=Gray guibg=Gray
|
highlight ProcessBar ctermfg=Gray ctermbg=Gray guifg=Gray guibg=Gray
|
||||||
|
@ -6302,6 +6302,10 @@ configuration file.
|
|||||||
name = 'tools#cpicker'
|
name = 'tools#cpicker'
|
||||||
<
|
<
|
||||||
|
|
||||||
|
LAYER OPTIONS
|
||||||
|
1. default_spaces: set the default color spaces, the default value is
|
||||||
|
`['rgb', 'hsl']`
|
||||||
|
|
||||||
KEY BINDINGS
|
KEY BINDINGS
|
||||||
|
|
||||||
>
|
>
|
||||||
@ -6320,6 +6324,12 @@ Key bindings in cpicker:
|
|||||||
h/<Left> reduce
|
h/<Left> reduce
|
||||||
l/<Right> increase
|
l/<Right> increase
|
||||||
<
|
<
|
||||||
|
COMMANDS
|
||||||
|
Instead of using key Binding, this layer also provides a Neovim command
|
||||||
|
`:Cpicker` which can be used in cmdline. For example:
|
||||||
|
>
|
||||||
|
:Cpicker rgb cmyk
|
||||||
|
<
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
TOOLS#DASH *SpaceVim-layers-tools-dash*
|
TOOLS#DASH *SpaceVim-layers-tools-dash*
|
||||||
|
@ -9,7 +9,9 @@ description: "This layer provides color picker for SpaceVim"
|
|||||||
|
|
||||||
- [Description](#description)
|
- [Description](#description)
|
||||||
- [Install](#install)
|
- [Install](#install)
|
||||||
|
- [Layer options](#layer-options)
|
||||||
- [Key bindings](#key-bindings)
|
- [Key bindings](#key-bindings)
|
||||||
|
- [Commands](#commands)
|
||||||
|
|
||||||
<!-- vim-markdown-toc -->
|
<!-- vim-markdown-toc -->
|
||||||
|
|
||||||
@ -26,8 +28,20 @@ To use this configuration layer, add it to your `~/.SpaceVim.d/init.toml`.
|
|||||||
name = "tools#cpicker"
|
name = "tools#cpicker"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Layer options
|
||||||
|
|
||||||
|
1. default_spaces: set the default color spaces, the default value is `['rgb', 'hsl']`. Available spaces: rgb, hsl, hsv, cmyk.
|
||||||
|
|
||||||
## Key bindings
|
## Key bindings
|
||||||
|
|
||||||
| Key Binding | Description |
|
| Key Binding | Description |
|
||||||
| ----------- | ----------------- |
|
| ----------- | ----------------- |
|
||||||
| `SPC i p c` | open color picker |
|
| `SPC i p c` | open color picker |
|
||||||
|
|
||||||
|
## Commands
|
||||||
|
|
||||||
|
Instead of using key Binding, this layer also provides a Neovim command `:Cpicker` which can be used in cmdline. For example:
|
||||||
|
|
||||||
|
```
|
||||||
|
:Cpicker rgb cmyk
|
||||||
|
```
|
||||||
|
@ -11,9 +11,6 @@ local color = {}
|
|||||||
-- 参考: https://blog.csdn.net/Sunshine_in_Moon/article/details/45131285
|
-- 参考: https://blog.csdn.net/Sunshine_in_Moon/article/details/45131285
|
||||||
|
|
||||||
color.rgb2hsl = function(r, g, b)
|
color.rgb2hsl = function(r, g, b)
|
||||||
r = r / 255
|
|
||||||
g = g / 255
|
|
||||||
b = b / 255
|
|
||||||
local max = math.max(r, g, b)
|
local max = math.max(r, g, b)
|
||||||
local min = math.min(r, g, b)
|
local min = math.min(r, g, b)
|
||||||
local h, s, l
|
local h, s, l
|
||||||
@ -39,7 +36,7 @@ color.rgb2hsl = function(r, g, b)
|
|||||||
s = (max - min) / (2 - 2 * l)
|
s = (max - min) / (2 - 2 * l)
|
||||||
end
|
end
|
||||||
|
|
||||||
return math.floor(h), s, l
|
return h, s, l
|
||||||
end
|
end
|
||||||
|
|
||||||
-- https://stackoverflow.com/questions/68317097/how-to-properly-convert-hsl-colors-to-rgb-colors-in-lua
|
-- https://stackoverflow.com/questions/68317097/how-to-properly-convert-hsl-colors-to-rgb-colors-in-lua
|
||||||
@ -78,16 +75,35 @@ color.hsl2rgb = function(h, s, l)
|
|||||||
b = hue2rgb(p, q, h - 1 / 3)
|
b = hue2rgb(p, q, h - 1 / 3)
|
||||||
end
|
end
|
||||||
|
|
||||||
return math.floor(r * 255 + 0.5), math.floor(g * 255 + 0.5), math.floor(b * 255 + 0.5)
|
return r, g, b
|
||||||
|
end
|
||||||
|
|
||||||
|
-- https://www.rapidtables.com/convert/color/rgb-to-cmyk.html
|
||||||
|
|
||||||
|
color.rgb2cmyk = function(r, g, b)
|
||||||
|
local c, m, y, k
|
||||||
|
k = 1 - math.max(r, g, b)
|
||||||
|
if k ~= 1 then
|
||||||
|
c = (1 - r - k) / (1 - k)
|
||||||
|
m = (1 - g - k) / (1 - k)
|
||||||
|
y = (1 - b - k) / (1 - k)
|
||||||
|
else
|
||||||
|
c, m, y = 0, 0, 0
|
||||||
|
end
|
||||||
|
return c, m, y, k
|
||||||
|
end
|
||||||
|
|
||||||
|
color.cmyk2rgb = function(c, m, y, k)
|
||||||
|
local r, g, b
|
||||||
|
r = (1 - c) * (1 - k)
|
||||||
|
g = (1 - m) * (1 - k)
|
||||||
|
b = (1 - y) * (1 - k)
|
||||||
|
return r, g, b
|
||||||
end
|
end
|
||||||
|
|
||||||
-- https://www.rapidtables.com/convert/color/rgb-to-hsv.html
|
-- https://www.rapidtables.com/convert/color/rgb-to-hsv.html
|
||||||
|
|
||||||
color.rgb2hsv = function(r, g, b)
|
color.rgb2hsv = function(r, g, b)
|
||||||
r = r / 255
|
|
||||||
g = g / 255
|
|
||||||
b = b / 255
|
|
||||||
|
|
||||||
local cmax = math.max(r, g, b)
|
local cmax = math.max(r, g, b)
|
||||||
local cmin = math.min(r, g, b)
|
local cmin = math.min(r, g, b)
|
||||||
local d = cmax - cmin
|
local d = cmax - cmin
|
||||||
@ -112,7 +128,7 @@ color.rgb2hsv = function(r, g, b)
|
|||||||
|
|
||||||
v = cmax
|
v = cmax
|
||||||
|
|
||||||
return math.floor(h), s, v
|
return h, s, v
|
||||||
end
|
end
|
||||||
|
|
||||||
-- https://www.rapidtables.com/convert/color/hsv-to-rgb.html
|
-- https://www.rapidtables.com/convert/color/hsv-to-rgb.html
|
||||||
@ -136,7 +152,7 @@ color.hsv2rgb = function(h, s, v)
|
|||||||
r, g, b = c, 0, x
|
r, g, b = c, 0, x
|
||||||
end
|
end
|
||||||
r, g, b = (r + m), (g + m), (b + m)
|
r, g, b = (r + m), (g + m), (b + m)
|
||||||
return math.floor(r * 255 + 0.5), math.floor(g * 255 + 0.5), math.floor(b * 255 + 0.5)
|
return r, g, b
|
||||||
end
|
end
|
||||||
color.hsv2hsl = function(h, s, v)
|
color.hsv2hsl = function(h, s, v)
|
||||||
return color.rgb2hsl(color.hsv2rgb(h, s, v))
|
return color.rgb2hsl(color.hsv2rgb(h, s, v))
|
||||||
@ -144,6 +160,19 @@ end
|
|||||||
color.hsl2hsv = function(h, s, l)
|
color.hsl2hsv = function(h, s, l)
|
||||||
return color.rgb2hsv(color.hsl2rgb(h, s, l))
|
return color.rgb2hsv(color.hsl2rgb(h, s, l))
|
||||||
end
|
end
|
||||||
|
color.hsl2cmyk = function (h, s, l)
|
||||||
|
return color.rgb2cmyk(color.hsl2rgb(h, s, l))
|
||||||
|
end
|
||||||
|
color.hsv2cmyk = function (h, s, v)
|
||||||
|
return color.rgb2cmyk(color.hsv2rgb(h, s, v))
|
||||||
|
end
|
||||||
|
color.cmyk2hsv = function(c, m, y, k)
|
||||||
|
return color.rgb2hsv(color.cmyk2rgb(c, m, y, k))
|
||||||
|
end
|
||||||
|
|
||||||
|
color.cmyk2hsl = function(c, m, y, k)
|
||||||
|
return color.rgb2hsl(color.cmyk2rgb(c, m, y, k))
|
||||||
|
end
|
||||||
|
|
||||||
local function decimalToHex(decimal)
|
local function decimalToHex(decimal)
|
||||||
local hex = ''
|
local hex = ''
|
||||||
@ -162,9 +191,9 @@ local function decimalToHex(decimal)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
color.rgb2hex = function(r, g, b)
|
color.rgb2hex = function(r, g, b)
|
||||||
r = decimalToHex(r)
|
r = decimalToHex(math.floor(r * 255 + 0.5))
|
||||||
g = decimalToHex(g)
|
g = decimalToHex(math.floor(g * 255 + 0.5))
|
||||||
b = decimalToHex(b)
|
b = decimalToHex(math.floor(b * 255 + 0.5))
|
||||||
return '#' .. r .. g .. b
|
return '#' .. r .. g .. b
|
||||||
end
|
end
|
||||||
color.hsv2hex = function(h, s, v)
|
color.hsv2hex = function(h, s, v)
|
||||||
@ -173,5 +202,8 @@ end
|
|||||||
color.hsl2hex = function(h, s, l)
|
color.hsl2hex = function(h, s, l)
|
||||||
return color.rgb2hex(color.hsl2rgb(h, s, l))
|
return color.rgb2hex(color.hsl2rgb(h, s, l))
|
||||||
end
|
end
|
||||||
|
color.cmyk2hex = function(c, y, m, k)
|
||||||
|
return color.rgb2hex(color.cmyk2rgb(c, y, m, k))
|
||||||
|
end
|
||||||
|
|
||||||
return color
|
return color
|
||||||
|
Loading…
Reference in New Issue
Block a user