######################rgbtohsv##################### # Umwandeln von rgb (Dezimal) in hsv sub RgbToHsv { #print "Content-Type: text/html; charset=utf-8\n\n
"; my @rgb = @_; my ($h,$s,$v) = (0,0,0); my (@mm,@drgb) = (); @rgb = map{$_ *= 1/255 }@rgb; #RGB values = 0 ÷ 255 @mm = sort{$b<=>$a}@rgb; # Min. Max. Value von RGB $v = $mm[1] = $mm[0]-$mm[2]; # Delta in $mm[1] $v = 1; # @mm[1] brachte Warnung # Daher diese Hilfe #This is a gray, no chroma...HSV results = 0 ÷ 1 if ( $mm[1] == 0 ){$h=$s=0} else { #Chromatic data... $s = $mm[1] /$mm[0]; $drgb[0] = ( ( ( $mm[0] - $rgb[0] ) / 6 ) + ( $mm[1] / 2 ) ) / $mm[1]; #Delta Rot $drgb[1] = ( ( ( $mm[0] - $rgb[1] ) / 6 ) + ( $mm[1] / 2 ) ) / $mm[1]; #Delta Grün $drgb[2] = ( ( ( $mm[0] - $rgb[2] ) / 6 ) + ( $mm[1] / 2 ) ) / $mm[1]; #Delta Blau if ( $rgb[0] == $mm[0] ) {$h = $drgb[2] - $drgb[1] } elsif ( $rgb[1] == $mm[0] ) { $h = ( 1 / 3 ) + $drgb[0] - $drgb[2] } elsif ( $rgb[2] == $mm[0] ) { $h = ( 2 / 3 ) + $drgb[1] - $drgb[0] } if ( $h < 0 ){$h += 1} if ( $h > 1 ){$h -= 1} } return ($h,$s,$v); } ######################hsvtorgb##################### # Umwandeln von hsv in rgb (Dezimal) sub HsvToRgb { my @hsv = @_; my (@rgb) = (); my ($var_i,$var_h,$var_r,$var_g,$var_b,$var_1,$var_2,$var_3) = (0,0,0,0,0,0,0,0); if ( $hsv[1] == 0 ){ #HSV values = 0 ÷ 1 $rgb[0] = $hsv[2]*255; $rgb[1] = $hsv[2]*255; $rgb[2] = $hsv[2]*255; } else{ $var_h = $hsv[0] * 6; if ( $var_h == 6 ){$var_h = 0} #H must be < 1 $var_i = int( $var_h ); #Or ... var_i = floor( var_h ) $var_1 = $hsv[2] * (1 - $hsv[1] ); $var_2 = $hsv[2] * (1 - $hsv[1] * ( $var_h - $var_i )); $var_3 = $hsv[2] * (1 - $hsv[1] * ( 1 - ( $var_h - $var_i ))); if ( $var_i == 0 ) { $var_r = $hsv[2]; $var_g = $var_3; $var_b = $var_1;} elsif ( $var_i == 1 ) { $var_r = $var_2; $var_g = $hsv[2]; $var_b = $var_1;} elsif ( $var_i == 2 ) { $var_r = $var_1; $var_g = $hsv[2]; $var_b = $var_3;} elsif ( $var_i == 3 ) { $var_r = $var_1; $var_g = $var_2; $var_b = $hsv[2];} elsif ( $var_i == 4 ) { $var_r = $var_3; $var_g = $var_1; $var_b = $hsv[2];} else { $var_r = $hsv[2]; $var_g = $var_1; $var_b = $var_2;} $rgb[0] = int($var_r * 255); #RGB results = 0 ÷ 255 $rgb[1] = int($var_g * 255); $rgb[2] = int($var_b * 255); } return @rgb; }