Term-Graille

 view release on metacpan or  search on metacpan

examples/testanimate.pl  view on Meta::CPAN

#! /usr/bin/env perl
use strict; use warnings;
#use lib "../lib/";
use Term::Graille qw/colour paint printAt clearScreen border/;
use Image::Magick;
use Time::HiRes "sleep";

# convert2grl--converts an image to .grv format.

my $animationFolder=$ARGV[0]||"./animations/cheetah/";
opendir my $dir,$animationFolder or die;
my @files=sort grep !/^(\.|\.\.|.*\.pl)$/,readdir $dir;

my $canvas = Term::Graille->new(
    width  => 120,
    height => 50,
    top=>4,
    left=>10,
    borderStyle => "double",
    borderColour  => "yellow",
    title=>" Animation test ",
  );
my $animation=[];

my $frame=0;
for my $image (@files){
	$canvas->clear();
	print "Loading image ",$animationFolder.$image," ",++$frame,"\n";
	$animation->[$frame]=[];
	loadImage($animationFolder.$image);
	#loadImage("./animations/chimp/chimp$frame.png"); 
	foreach my $row (0..$#{$canvas->{grid}}){
		foreach my $col(0..$#{$canvas->{grid}->[0]}){
			$animation->[$frame]->[$row]->[$col]=$canvas->{grid}->[$row]->[$col];
		}
	}
}

sleep 1;
clearScreen();


foreach (0..100){
	foreach my $frame (1..@$animation){
		next unless ref $animation->[$frame];
		$canvas->{grid}=$animation->[$frame]; 
		$canvas->draw();
		sleep 0.08;
	}
}

sub loadImage{
	my $imgfile=shift;
	my $image = Image::Magick->new();
	my $wh = $image->Read($imgfile); 
	$image->Resize(geometry => "$canvas->{width}x$canvas->{height}");
	die $wh if $wh; 
	$image->set('monochrome'=>'True');
	$image->Negate();
	for (my $x =0;$x<$canvas->{width};$x++){
		for (my $y=0;$y<$canvas->{height};$y++){
			$canvas->set($x,$y) if $image->GetPixel("x"=>$x,"y",$canvas->{height}-$y); 
		}
	}
}



( run in 0.749 second using v1.01-cache-2.11-cpan-39bf76dae61 )