All pastes #261377 Raw Edit

Mine

public text v1 · immutable
#261377 ·published 2006-11-29 04:51 UTC
rendered paste body
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);
}