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 16     16   285949 use v5.12;
  16         46  
6 16     16   55 use warnings;
  16         19  
  16         765  
7 16     16   479 use Graphics::Toolkit::Color::Space qw/mult_matrix_vector_3/;
  16         27  
  16         3870  
8              
9             sub from_xyz {
10 80     80 0 92 my @xyz = map { $_ / 100 } @{$_[0]};
  240         324  
  80         129  
11 80         319 return [ mult_matrix_vector_3( [[ 3.2404542361, -1.5371385128, -0.4985314095 ],
12             [ -0.9692660305, 1.8760108456, 0.0415560173 ],
13             [ 0.0556434224, -0.2040258530, 1.0572251881 ] ], @xyz) ];
14             }
15             sub to_xyz {
16             my @xyz = mult_matrix_vector_3( [[ 0.41245643909, 0.3575760776, 0.1804374833 ],
17             [ 0.21267285141, 0.7151521858, 0.0721750628 ],
18 124     124 0 406 [ 0.01933389558, 0.1191920257, 0.9503040785 ] ], @{$_[0]});
  124         303  
19 124         273 return [map {$_ * 100} @xyz];
  372         577  
20             }
21              
22             Graphics::Toolkit::Color::Space->new(
23             alias_name => 'CIEXYZ', # name is XYZ
24             family => 'RGB',
25             axis => [qw/X Y Z/],
26             role => [qw/red green blue/],
27             range => [95.047, 100, 108.883],
28             precision => 3,
29             convert => {LinearRGB => [\&from_xyz, \&to_xyz, {from => {in => 1}, to => {out => 1}} ] }, # flags are from and to lrgb
30             );