| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
|
|
2
|
|
|
|
|
|
|
# CIE LCh(uv) cylindrical color space variant of CIELUV |
|
3
|
|
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
package Graphics::Toolkit::Color::Space::Instance::CIELCHuv; |
|
5
|
16
|
|
|
16
|
|
264620
|
use v5.12; |
|
|
16
|
|
|
|
|
48
|
|
|
6
|
16
|
|
|
16
|
|
83
|
use warnings; |
|
|
16
|
|
|
|
|
52
|
|
|
|
16
|
|
|
|
|
756
|
|
|
7
|
16
|
|
|
16
|
|
519
|
use Graphics::Toolkit::Color::Space qw/round_decimals/; |
|
|
16
|
|
|
|
|
20
|
|
|
|
16
|
|
|
|
|
4796
|
|
|
8
|
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
my $TAU = 6.283185307; |
|
10
|
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
sub from_lch { |
|
12
|
7
|
|
|
7
|
0
|
10
|
my ($lch) = shift; |
|
13
|
7
|
|
|
|
|
60
|
my $u = $lch->[1] * cos($lch->[2] * $TAU) * 261; |
|
14
|
7
|
|
|
|
|
20
|
my $v = $lch->[1] * sin($lch->[2] * $TAU) * 261; |
|
15
|
7
|
|
|
|
|
50
|
return ([$lch->[0], ($u+134) / 354, ($v+140) / 262 ]); |
|
16
|
|
|
|
|
|
|
} |
|
17
|
|
|
|
|
|
|
sub to_lch { |
|
18
|
7
|
|
|
7
|
0
|
15
|
my ($luv) = shift; |
|
19
|
7
|
|
|
|
|
17
|
my $u = $luv->[1] * 354 - 134; |
|
20
|
7
|
|
|
|
|
13
|
my $v = $luv->[2] * 262 - 140; |
|
21
|
7
|
100
|
|
|
|
22
|
$u = 0 if round_decimals($u, 5) == 0; |
|
22
|
7
|
100
|
|
|
|
17
|
$v = 0 if round_decimals($v, 5) == 0; |
|
23
|
7
|
|
|
|
|
28
|
my $c = sqrt( ($u**2) + ($v**2)); |
|
24
|
7
|
|
|
|
|
72
|
my $h = atan2($v, $u); |
|
25
|
7
|
100
|
|
|
|
18
|
$h += $TAU if $h < 0; |
|
26
|
7
|
|
|
|
|
38
|
return ([$luv->[0], $c / 261, $h / $TAU ]); |
|
27
|
|
|
|
|
|
|
} |
|
28
|
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
Graphics::Toolkit::Color::Space->new( |
|
30
|
|
|
|
|
|
|
name => 'CIELCHuv', |
|
31
|
|
|
|
|
|
|
alias_name => 'LCHuv', |
|
32
|
|
|
|
|
|
|
family => 'HSL', |
|
33
|
|
|
|
|
|
|
axis => [qw/luminance chroma hue/], |
|
34
|
|
|
|
|
|
|
role => [qw/lightness saturation hue/], |
|
35
|
|
|
|
|
|
|
type => [qw/linear linear angular/], |
|
36
|
|
|
|
|
|
|
range => [100, 261, 360], |
|
37
|
|
|
|
|
|
|
precision => 3, |
|
38
|
|
|
|
|
|
|
convert => {LUV => [\&from_lch, \&to_lch]}, |
|
39
|
|
|
|
|
|
|
); |