File Coverage

lib/Graphics/Toolkit/Color/Space/Instance/CIEXYZ.pm
Criterion Covered Total %
statement 16 16 100.0
branch n/a
condition n/a
subroutine 5 5 100.0
pod 0 2 0.0
total 21 23 91.3


line stmt bran cond sub pod time code
1              
2             # CIEXYZ color space specific code for Illuminant D65 and Observer 2°
3              
4             package Graphics::Toolkit::Color::Space::Instance::CIEXYZ;
5 15     15   448517 use v5.12;
  15         61  
6 15     15   94 use warnings;
  15         41  
  15         1034  
7 15     15   669 use Graphics::Toolkit::Color::Space qw/mult_matrix_vector_3/;
  15         30  
  15         4875  
8              
9             sub from_Lrgb {
10             my @xyz = mult_matrix_vector_3(
11             [[ 0.41245643909, 0.3575760776, 0.1804374833 ],
12             [ 0.21267285141, 0.7151521858, 0.0721750628 ],
13 28     28 0 87 [ 0.01933389558, 0.1191920257, 0.9503040785 ] ], @{$_[0]});
  28         91  
14 28         78 return [map {$_ * 100} @xyz];
  84         162  
15             }
16             sub to_Lrgb {
17 30     30 0 48 my @xyz = map { $_ / 100 } @{$_[0]};
  90         156  
  30         64  
18 30         125 [ mult_matrix_vector_3(
19             [[ 3.2404542361, -1.5371385128, -0.4985314095 ],
20             [ -0.9692660305, 1.8760108456, 0.0415560173 ],
21             [ 0.0556434224, -0.2040258530, 1.0572251881 ] ], @xyz) ];
22             }
23              
24             Graphics::Toolkit::Color::Space->new(
25             alias => 'CIEXYZ', # name is XYZ
26             axis => [qw/X Y Z/],
27             range => [95.047, 100, 108.883],
28             precision => 3,
29             convert => {LinearRGB => [\&to_Lrgb, \&from_Lrgb, {from => {in => 1}, to => {out => 1}} ] },
30             );