sub process { my $image = shift @_; my $bmp = Image::BMP->new(); $bmp->open_file($image); print $bmp->xy(3,3); my $width = $bmp->{Width}; my $height = $bmp->{Height}; my $total_pixels = $width * $height; # my $pixels[$width][$height]; my @pixels; #Read it into an array for my $x ($width) { for my $y ($height) { my @hsv = rgb_to_hsv(( $bmp->xy_rgb( $x, $y ))); print Dumper(@hsv); $pixels[$x]->[$y] = \@hsv; } } print Dumper(@pixels); return ( $total_pixels, \@pixels ); } sub rgb_to_hsv { my ($r, $g, $b) = @_; my ($max, $min) = (0, 255); for ($r, $g, $b) { $max = $_ if $max < $_ } for ($r, $g, $b) { $min = $_ if $min > $_ } my ($h, $s, $v); #H my $denom = ($max - $min) * 6; if ($denom == 0) { $h = 0; } elsif ($max == $r) { $h = ($g-$b) / $denom; } elsif ($max == $g) { $h = ($b-$r) / $denom + 1/3; } else { $h = ($r-$g) / $denom + 2/3; } $h *= 255; $h += 255 * ($h < 0); #S if ($max == 0) { $s = 0; } else { $s = 255 - 255 * $min / $max; } #V $v = $max; return ($h, $s, $v); }