GD
view release on metacpan or search on metacpan
lib/GD/Simple.pm view on Meta::CPAN
Convert a Red/Green/Blue (RGB) value into a Hue/Saturation/Value (HSV)
triple. The hue, saturation and value are integers from 0 to 255.
=back
=cut
sub RGBtoHSV {
my $self = shift;
my ($r, $g ,$bl) = @_;
my ($min,undef,$max) = sort {$a<=>$b} ($r,$g,$bl);
return (0,0,0) unless $max > 0;
my $v = $max;
my $s = 255 * ($max - $min)/$max;
my $h;
my $range = $max - $min;
if ($range == 0) { # all colors are equal, so monochrome
return (0,0,$max);
}
if ($max == $r) {
$h = 60 * ($g-$bl)/$range;
}
elsif ($max == $g) {
$h = 60 * ($bl-$r)/$range + 120;
}
else {
$h = 60 * ($r-$g)/$range + 240;
}
$h += 360 if $h < 0;
$h = int($h*255/360 + 0.5);
return ($h, $s, $v);
}
sub newGroup {
my $self = shift;
return $self->GD::newGroup(@_);
}
1;
=head1 COLORS
This script will create an image showing all the symbolic colors.
#!/usr/bin/perl
use strict;
use GD::Simple;
my @color_names = GD::Simple->color_names;
my $cols = int(sqrt(@color_names));
my $rows = int(@color_names/$cols)+1;
my $cell_width = 100;
my $cell_height = 50;
my $legend_height = 16;
my $width = $cols * $cell_width;
my $height = $rows * $cell_height;
my $img = GD::Simple->new($width,$height);
$img->font(gdSmallFont);
for (my $c=0; $c<$cols; $c++) {
for (my $r=0; $r<$rows; $r++) {
my $color = $color_names[$c*$rows + $r] or next;
my @topleft = ($c*$cell_width,$r*$cell_height);
my @botright = ($topleft[0]+$cell_width,$topleft[1]+$cell_height-$legend_height);
$img->bgcolor($color);
$img->fgcolor($color);
$img->rectangle(@topleft,@botright);
$img->moveTo($topleft[0]+2,$botright[1]+$legend_height-2);
$img->fgcolor('black');
$img->string($color);
}
}
print $img->png;
=head1 AUTHOR
The GD::Simple module is copyright 2004, Lincoln D. Stein. It is
distributed under the same terms as Perl itself. See the "Artistic
License" in the Perl source code distribution for licensing terms.
The latest versions of GD.pm are available at https://github.com/lstein/Perl-GD
=head1 SEE ALSO
L<GD>,
L<GD::Polyline>,
L<GD::SVG>,
L<Image::Magick>
=cut
( run in 2.333 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )