File Coverage

lib/Graphics/Toolkit/Color/Space/Instance/HunterLAB.pm
Criterion Covered Total %
statement 23 23 100.0
branch 4 4 100.0
condition n/a
subroutine 5 5 100.0
pod 0 2 0.0
total 32 34 94.1


line stmt bran cond sub pod time code
1              
2             # Hunter lab color space, pre CIELAB, for Illuminant D65 and Observer 2 degree
3              
4             package Graphics::Toolkit::Color::Space::Instance::HunterLAB;
5 16     16   257307 use v5.12;
  16         59  
6 16     16   62 use warnings;
  16         23  
  16         854  
7 16     16   498 use Graphics::Toolkit::Color::Space qw/round_decimals/;
  16         28  
  16         5073  
8              
9             my @D65 = (0.95047, 1, 1.08883); # illuminant
10             my %K = ( a => round_decimals(175.0 / 198.04 * ($D65[1] + $D65[0]) * 100, 5),
11             b => round_decimals( 70.0 / 218.11 * ($D65[1] + $D65[2]) * 100, 5), );
12              
13              
14             sub from_lab {
15 5     5 0 12 my ($lab) = shift;
16 5         39 my $l = $lab->[0];
17 5         17 my $a = ($lab->[1] - .5) * 2;
18 5         11 my $b = ($lab->[2] - .5) * 2;
19 5         16 my $y = $l ** 2;
20 5         11 my $x = ($a * $l) + $y;
21 5         11 my $z = $y - ($b * $l);
22 5         40 return ([$x, $y, $z]);
23             }
24             sub to_lab {
25 4     4 0 8 my ($xyz) = shift;
26 4         13 my $l = sqrt $xyz->[1];
27 4 100       15 my $a = $l ? (($xyz->[0] - $xyz->[1])/$l) : 0;
28 4 100       10 my $b = $l ? (($xyz->[1] - $xyz->[2])/$l) : 0;
29 4         8 $a = ($a / 2) + .5;
30 4         8 $b = ($b / 2) + .5;
31 4         19 return ([$l, $a, $b]);
32             }
33              
34             Graphics::Toolkit::Color::Space->new(
35             name => 'HunterLAB',
36             family => 'LAB',
37             axis => [qw/l a b/], # same as short
38             range => [100, [-$K{'a'}, $K{'a'}], [-$K{'b'}, $K{'b'}]], # cyan-orange, magenta-green
39             precision => 3,
40             convert => {XYZ => [\&from_lab, \&to_lab]},
41             );