"Φοβοῦ τοὺς Δαναοὺς καὶ δῶρα φέροντας."
I tried to make your idea my own, simplifying it as much i could:
#!/usr/bin/env perl
use strict;
use warnings;
use Thread::Queue;
use Data::Dump;
my $width = 10;
my $height = 10;
my $queue = Thread::Queue->new();
for my $y ( 0 .. $width - 1 ) {
my @colors = ();
for my $x ( 0 .. $height - 1 ) {
push @colors, mandelbrot();
}
$queue->enqueue( [ $y, @colors ] );
}
$queue->end;
while ( defined( my $item = $queue->dequeue ) ) {
dd $item;
}
# this is really a fake!
sub mandelbrot {
int rand 20;
}
__END__
karls-mac-mini:monks karl$ ./queue2.pl
[0, 1, 16, 19, 13, 18, 18, 7, 10, 8, 7]
[1, 2, 10, 0, 3, 2, 2, 2, 8, 3, 10]
[2, 12, 5, 10, 5, 0, 14, 10, 10, 18, 5]
[3, 13, 2, 11, 4, 16, 9, 19, 11, 5, 0]
[4, 14, 3, 7, 18, 0, 17, 17, 16, 0, 8]
[5, 4, 13, 3, 3, 10, 17, 13, 16, 11, 17]
[6, 5, 2, 0, 17, 10, 1, 13, 10, 12, 3]
[7, 18, 8, 1, 12, 13, 16, 0, 11, 14, 17]
[8, 5, 10, 5, 19, 6, 17, 3, 10, 18, 16]
[9, 1, 15, 10, 17, 8, 11, 18, 2, 18, 6]
I think $Q->enqueue( [ $Y, @colors ] ); is a typo - it should be $Q->enqueue( [ $y, @colors ] );.
In your while loop i ran into some undefinedness which i tried to fix.
I was quite surprised that $image->setpixel( $_, $y, $colors[ $_ ] ) for 0 .. $#colors; works. Learning never stops.
Here is how i create my image and my palette:
use Imager;
open( URANDOM, "</dev/urandom" ) # NTSC ;-);
read( URANDOM, $_, 4 );
close URANDOM;
srand( unpack( "L", $_ ) );
my $image = Imager->new( xsize => $width, ysize => $height );
my $white = Imager::Color->new( 255, 255, 255 );
my $black = Imager::Color->new( 0, 0, 0 );
my @palette;
for ( 1 .. 20 ) {
my ( $r, $g, $b ) = map { int rand 255 } 1 .. 3;
push @palette, Imager::Color->new( $r, $g, $b );
}
# dd \@palette;
Well, still some omissions but perhaps step-by-step i get the idea.
Update:
...
use Devel::Size qw( total_size );
use Time::HiRes qw ( time );
...
$width = 1280*4;
$height = 1024*4;
...
__END__
Image Size 20 MP
Queue Size 640.627 MByte
Took 8.150 seconds
Best regards, Karl
«The Crux of the Biscuit is the Apostrophe»