File Coverage

blib/lib/Convert/Color/LCh.pm
Criterion Covered Total %
statement 41 41 100.0
branch 6 6 100.0
condition n/a
subroutine 15 15 100.0
pod 6 9 66.6
total 68 71 95.7


line stmt bran cond sub pod time code
1             package Convert::Color::LCh;
2              
3 2     2   26 use 5.008009;
  2         4  
4 2     2   18 use strict;
  2         2  
  2         32  
5 2     2   5 use warnings;
  2         1  
  2         67  
6 2     2   6 use parent qw/Convert::Color/;
  2         2  
  2         6  
7              
8             our $VERSION = '1.000';
9              
10 2     2   98 use Convert::Color::LUV;
  2         2  
  2         32  
11 2     2   995 use Math::Trig ':pi';
  2         17629  
  2         719  
12              
13             __PACKAGE__->register_color_space('lch');
14              
15             sub new {
16 3585     3585 1 3338 my ($class, $l, $c, $h) = @_;
17 3585 100       4962 ($l, $c, $h) = split /,/s, $l unless defined $c;
18 3585         9880 bless [$l, $c, $h], $class
19             }
20              
21 1     1 1 7 sub L { shift->[0] }
22 1     1 1 4 sub C { shift->[1] }
23 1     1 1 4 sub h { shift->[2] }
24              
25 1     1 1 1 sub lch { @{$_[0]} }
  1         6  
26              
27             sub convert_to_luv {
28 1024     1024 0 768 my ($self) = @_;
29 1024         895 my ($l, $c, $h) = @$self;
30 1024         787 my $hrad = $h / 180 * pi;
31 1024         961 my $u = $c * cos $hrad;
32 1024         879 my $v = $c * sin $hrad;
33 1024         1825 Convert::Color::LUV->new($l, $u, $v)
34             }
35              
36             sub new_from_luv {
37 2560     2560 0 2150 my ($class, $luv) = @_;
38 2560         2142 my ($l, $u, $v) = @$luv;
39 2560         2356 my $c = sqrt $u * $u + $v * $v;
40 2560 100       4149 return $class->new($l, $c, 0) if $c < 0.00000001;
41 2520         3593 my $hrad = atan2 $v, $u;
42 2520         2515 my $h = $hrad * 180 / pi;
43 2520 100       3292 $h += 360 if $h < 0;
44 2520         3233 $class->new($l, $c, $h)
45             }
46              
47 1024     1024 1 1240 sub rgb { shift->convert_to_luv->rgb }
48 2560     2560 0 145225 sub new_rgb { shift->new_from_luv(Convert::Color::LUV->new_rgb(@_)) }
49              
50             1;
51             __END__