my $W = 100; my $W = 100; use GD; # create a new image $im = new GD::Image($W,$W) or die "called to new GD::Image has failed.";; for my $x (0..$W){ for my $y (0..$H){ my $rgb = $result->[$x + $y * $W]; next unless defined $rgb; # ARGB here, or any other scheme my $R = ($rgb & 0x00FF0000) >> 16; my $G = ($rgb & 0x0000FF00) >> 8; my $B = ($rgb & 0x000000FF); my $color = $im->colorAllocate($R, $G, $B); $im->setPixel($x, $y, $color); } } open my $outfile, '>', 'out.png' or die; binmode $outfile; print $outfile $im->png(0); # 0 is no compression. Possible values 0-9