use strict;
use warnings;
use GD;


my (@cube, $r, $g, $b, $x, $y);

my $img = new GD::Image(512,200);
make_colorcube($img, 8, 8, 4); # oder 6, 6, 6 oder was auch immer
draw_colorcube($img, 8, 8, 4); # gleiche Parmeter 

# Ausgeben
open(OUTPUT, '>', 'colors.gif') or die "Cannot open colors.gif: $!";
binmode OUTPUT;
print OUTPUT $img->gif;
close OUTPUT;

sub draw_colorcube
  {
  my ($img, $ccr, $ccg, $ccb) = @_;
  my ($r, $g, $b);
  # umcodieren von 1..n --> 0..n-1
  $ccr--; $ccg--; $ccb--;
  $x = 0;
  for $r (0..$ccr)
    {
    for $g (0..$ccg)
      {
      for $b (0..$ccb)
        {
        for $y (0..200)
          {
          $img->setPixel($x,$y,$cube[$r][$g][$b]);
          $img->setPixel($x+1,$y,$cube[$r][$g][$b]);
          }
        $x = $x + 2;
        }
      }
    }
  }

sub make_colorcube
  {
  my ($img, $ccr, $ccg, $ccb) = @_;
  my ($r, $g, $b);
  die "Zuviele Farben\n" if ($ccr*$ccg*$ccb > 256);
  # umcodieren von 1..n --> 0..n-1
  $ccr--; $ccg--; $ccb--;
  for $r (0..$ccr)
    {
    for $g (0..$ccg)
      {
      for $b (0..$ccb)
        {
        $cube[$r][$g][$b] = $img->colorAllocate
                                    ($r*255/$ccr,
                                     $g*255/$ccg,
                                     $b*255/$ccb);
        }
      }
    }
  }
