rendered paste bodysub rgb_to_hsv {
my ($r, $g, $b) = shift @_;
my $max = 0;
my $min = 255;
for ($r, $g, $b) { $max = $_ if $max < $_ }
for ($r, $g, $b) { $min = $_ if $min > $_ }
my ($h, $s, $v);
#H
if ($max == $min) {
$h = undef;
}
elsif (($max == $r) && ($g >= $b)) {
$h = 60 * (($g-$b)/($max-$min)) + 0;
}
elsif (($max== $r) && ($g < $b)) {
$h = 60 * (($g-$b)/($max-$min)) + 360;
}
elsif ($max == $g) {
$h = 60 * (($b-$r)/($max-$min)) + 120;
}
elsif ($max == $b) {
$h = 60 * (($r-$g)/($max-$min)) + 240;
}
#S
if ($max == 0) {
$s = 0;
}
else {
$s = 1 - ($min / $max)
}
#V
$v = $max;
return ($h, $s, $v);
}