use Cairo;
use Pango;
use MIME::Base64;
+use POSIX;
use vars qw( @ISA @EXPORT );
[ 70, 170, 130 ],
[ 130, 170, 50 ],
];
-
+
$color = $palette->[ $i ];
-
+
map { $_ /= 255 } @{ $color };
return $color;
}
+sub get_distinct_colors
+{
+ # Martin A. Hansen, November 2003.
+
+ # returns a number of distinct colors
+
+ my ( $num_colors
+ ) = @_;
+
+ # returns triplet of colors [ 0, 255, 127 ]
+
+ my ( $num_discrete, @color_vals, $c, @colors, $r_idx, $g_idx, $b_idx, $i );
+
+ $num_discrete = POSIX::ceil( $num_colors ** ( 1 / 3 ) );
+
+ @color_vals = map {
+ $c = 1 - ($_ / ($num_discrete - 1) );
+ $c < 0 ? 0 : ($c > 1 ? 1 : $c);
+ } 0 .. $num_discrete;
+
+ ( $r_idx, $g_idx, $b_idx ) = ( 0, 0, 0 );
+
+ foreach $i ( 1 .. $num_colors )
+ {
+ push @colors, [ @color_vals [ $r_idx, $g_idx, $b_idx ] ];
+
+ if ( ++$b_idx >= $num_discrete )
+ {
+ if ( ++$g_idx >= $num_discrete ) {
+ $r_idx = ( $r_idx + 1 ) % $num_discrete;
+ }
+
+ $g_idx %= $num_discrete;
+ }
+
+ $b_idx %= $num_discrete;
+ }
+
+ @colors = map { [ int( $_->[ 0 ] * 255), int( $_->[ 1 ] * 255), int( $_->[ 2 ] * 255 ) ] } @colors;
+
+ return wantarray ? @colors : \@colors;
+}
+
+
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
1;