# NAME

Imager::LineTrace - Line tracer

# SYNOPSIS

   use Imager::LineTrace;

   my $img = Imager::LineTrace->new( file => $ARGV[0] ) or die Imager->errstr;
   my $figures_ref = $img->line_trace();

# DESCRIPTION

   # Tracing clockwise from left top.

Expected Input and Result

   # Enter a figure made up of line vertical or horizontal.
   my $img = Imager::LineTrace->new( xsize => 16, ysize => 16 );
   $img->box( filled => 1, color => 'white' );
   $img->setpixel( x => 3, y => 2, color => '#000000' );
   $img->line( x1 => 6, y1 => 5,
               x2 => 9, y2 => 5, color => '#333333' );
   $img->polyline( points => [
           [ 2,  8 ],
           [ 5,  8 ],
           [ 5, 11 ]
       ], color => '#666666' );
   $img->box( xmin => 10, ymin => 10,
              xmax => 14, ymax => 14, color => '#999999' );

   my $figures_ref = $img->line_trace();

   # from Sample/bmp2figure.pl
   my $i = 0;
   foreach my $figure (@{$figures_ref}) {
       print "-------- [", $i++, "] --------", "\n";
       print "type        : ", $figure->{type}, "\n";
       print "trace_value : ", sprintf("0x%06X", $figure->{value}), "\n";
       print "is_close: ", $figure->{is_closed}, "\n";
       foreach my $p (@{$figure->{points}}) {
           printf( "(%2d,%2d)\n", $p->[0], $p->[1] );
       }
   }

   # -------- [0] --------
   # type        : Point
   # trace_value : 0x000000
   # is_closed   : 0
   # ( 3, 2)
   # -------- [1] --------
   # type        : Line
   # trace_value : 0x333333
   # is_closed   : 0
   # ( 6, 5)
   # ( 9, 5)
   # -------- [2] --------
   # type        : Polyline
   # trace_value : 0x666666
   # is_closed   : 0
   # ( 2, 8)
   # ( 5, 8)
   # ( 5,11)
   # -------- [3] --------
   # type        : Polygon
   # trace_value : 0x999999
   # is_closed   : 1
   # (10,10)
   # (14,10)
   # (14,14)
   # (10,14)

Basic Overview

   my $img = Imager::LineTrace->new( file => $path ) or die Imager->errstr;

   # Trace black line on white.
   my $figures_ref = $img->line_trace();

   # If you want to trace counter-clockwise from left bottom.
   $img->filp( dir => 'v' );
   my $figures_ref = $img->line_trace();

   # If you want to select color. ( 0:R, 1:G, 2:B, 3:Alpha )
   my $figures_ref = $img->line_trace( channels => [0] );

   # Or you want to trace with R,G and B.(this is defalt.)
   my $figures_ref = $img->line_trace( channels => [0,1,2] );

   # If you want to trace not black color.
   my $figures_ref = $img->line_trace( ignore => 0 );

   # If you want to trace many figure. (default "limit" is 1024)
   my $figures_ref = $img->line_trace( limit => 10000 );

# LICENSE

Copyright (C) neko.

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

# AUTHOR

neko <[email protected]>