http://qs1969.pair.com?node_id=11139959

bliako has asked for the wisdom of the Perl Monks concerning the following question:

I can't find a (reasonably) fast method to create an image from scratch by supplying it an array of raw RGB values (or permutations of A,R,G,B). (note: the array of raw RGB can be modified to suit the scheme supported by the method). The best I could achieve was with Imager but setpixel takes ages obviously:

my $W = 100; my $H = 100; # $result is a 1D array of rgb values for $Wx$H # rgb values may actually be ARGB or RGBA etc. but I can transform # this to suit a module my $imager = Imager-> new( xsize => $W, ysize => $H, channels => 3, ) or die "called to Imager-> new() 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); $imager->setpixel(x=>$x, y=>$y, color => [$R, $G, $B]); } } $imager-> write(file => 'out.png', type=>'png')

Edit: Ideally, I would like a method which just takes in an array of RGB values and creates the image (fastly).