From dbb201d59ead46aec1d280fe753dcb36fdd767a0 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 7 Oct 2014 16:10:11 -0400 Subject: implement P6 --- lib/Image/PNM.pm | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'lib') diff --git a/lib/Image/PNM.pm b/lib/Image/PNM.pm index 4deca51..42121da 100644 --- a/lib/Image/PNM.pm +++ b/lib/Image/PNM.pm @@ -191,6 +191,24 @@ HEADER return $data; } +sub _as_string_P6 { + my $self = shift; + + my $data = <{w} $self->{h} +$self->{max} +HEADER + + for my $row (@{ $self->{pixels} }) { + $data .= pack("C*", map { + ref($_) ? @$_ : ($_, $_, $_) + } @$row); + } + + return $data; +} + sub _parse_string { my $self = shift; my ($string) = @_; @@ -345,6 +363,31 @@ sub _parse_pnm_P5 { } } +sub _parse_pnm_P6 { + my $self = shift; + my ($next_line) = @_; + + chomp (my $max = $next_line->()); + die "Invalid max color value: $max" + unless $max =~ /^[0-9]+$/ && $max > 0; + $self->{max} = $max; + + my $next_word = $self->_make_next_bitfield($next_line, 0); + + $self->{pixels} = []; + for my $i (1..$self->{h}) { + my $row = []; + for my $j (1..$self->{w}) { + push @$row, [ + $next_word->(), + $next_word->(), + $next_word->(), + ]; + } + push @{ $self->{pixels} }, $row; + } +} + sub _make_next_word { my $self = shift; my ($next_line, $ws) = @_; -- cgit v1.2.3-54-g00ecf