#!/usr/bin/perl

use GD::Simple;
use Math::Round;

$width = 500;
$height = 100;



my $img = GD::Simple->new($width,$height,1);
$img->fill(1,1,color(255,255,255));

my($r1,$g1,$b1) = (255,0,0);
my($r2,$g2,$b2) = (0,127,255);

$r1steps = get_steps($r1,$r2,$width,0);
$r2steps = get_steps($r1,$r2,$width,1);

$g1steps = get_steps($g1,$g2,$width,0);
$g2steps = get_steps($g1,$g2,$width,1);

$b1steps = get_steps($b1,$b2,$width,0);
$b2steps = get_steps($b1,$b2,$width,1);

for($x=0;$x<$width;$x++) {
    $img->line($x,0,$x,49,color($r1steps->[$x],$g1steps->[$x],$b1steps->[$x]));
    $img->line($x,50,$x,99,color($r2steps->[$x],$g2steps->[$x],$b2steps->[$x]));
}

print "Content-Type: image/png\n\n";
print $img->png;

sub get_steps {
    my($start,$end,$steps,$method) = @_;
    if($method) {
	$start = $start*$start;
	$end = $end*$end;
    }
    my(@vals) = ();
    my($v) = $start;
    for($i=0;$i<$steps;$i++) {
	if($method) {
	    push @vals,round(sqrt($v));
	} else {
	    push @vals,round($v);
	}
	$v += (($end-$start)/$steps);
    }
    return \@vals;
}

sub color {
    my($r,$g,$b) = @_;
    if(!defined($pal{"$r\_$g\_$b"})) {
        $pal{"$r\_$g\_$b"} = $img->colorAllocate($r,$g,$b);
    }
    return $pal{"$r\_$g\_$b"};
}
