3 Imager::Draw - Draw primitives to images
11 $blue = Imager::Color->new( 0, 0, 255 );
12 $fill = Imager::Fill->new(hatch=>'stipple');
14 $img->line(color=>$blue, x1=>10, x2=>100,
15 y1=>20, y2=>50, aa=>1, endp=>1 );
17 $img->polyline(points=>[[$x0,$y0], [$x1,$y1], [$x2,$y2]],
19 $img->polyline(x=>[$x0,$x1,$x2], y=>[$y0,$y1,$y2], aa=>1);
21 $img->box(color=> $blue, xmin=> 10, ymin=>30,
22 xmax=>200, ymax=>300, filled=>1);
23 $img->box(fill=>$fill);
25 $img->arc(color=>$blue, r=>20, x=>200, y=>100,
28 $img->circle(color=>$blue, r=>50, x=>200, y=>100);
30 $img->polygon(points=>[[$x0,$y0], [$x1,$y1], [$x2,$y2]],
33 $img->polygon(x=>[$x0,$x1,$x2], y=>[$y0,$y1,$y2]);
35 $img->flood_fill(x=>50, y=>50, color=>$color);
37 $img->setpixel(x=>50, y=>70, color=>$color);
39 $img->setpixel(x=>[ 50, 60, 70 ], y=>[20, 30, 40], color=>$color);
41 my $color = $img->getpixel(x=>50, y=>70);
43 my @colors = $img->getpixel(x=>[ 50, 60, 70 ], y=>[20, 30, 40]);
46 my $font = Imager::Font->new(...) or die;
47 $img->string(x => 50, y => 70,
49 string => "Hello, World!",
54 # bottom right-hand corner of the image
55 $img->align_string(x => $img->getwidth() - 1,
56 y => $img->getheight() - 1,
64 my @colors = $img->getscanline(y=>50, x=>10, width=>20);
66 $img->setscanline(y=>60, x=>20, pixels=>\@colors);
68 my @samples = $img->getsamples(y=>50, x=>10, width=>20,
73 It is possible to draw with graphics primitives onto images. Such
74 primitives include boxes, arcs, circles, polygons and lines. The
75 coordinate system in Imager has the origin C<(0,0)> in the upper left
76 corner of an image with co-ordinates increasing to the right and
77 bottom. For non antialiasing operation all coordinates are rounded
78 towards the nearest integer. For antialiased operations floating
79 point coordinates are used.
81 Drawing is assumed to take place in a coordinate system of infinite
82 resolution. This is the typical convention and really only matters when
83 it is necessary to check for off-by-one cases. Typically it's useful to
84 think of C<(10, 20)> as C<(10.00, 20.00)> and consider the consiquences.
86 =head2 Color Parameters
88 X<color parameters>The C<color> parameter for any of the drawing
89 methods can be an L<Imager::Color> object, a simple scalar that
90 Imager::Color can understand, a hashref of parameters that
91 Imager::Color->new understands, or an arrayref of red, green, blue
94 $image->box(..., color=>'red');
95 $image->line(..., color=>'#FF0000');
96 $image->flood_fill(..., color=>[ 255, 0, 255 ]);
98 =head2 Fill Parameters
100 X<fill parameters>All filled primitives, i.e. C<arc()>, C<box()>,
101 C<circle()>, C<polygon()> and the C<flood_fill()> method can take a
102 C<fill> parameter instead of a C<color> parameter which can either be
103 an Imager::Fill object, or a reference to a hash containing the
104 parameters used to create the fill, for example:
106 $image->box(..., fill=>{ hatch => 'check1x1' });
107 my $fillimage = Imager->new;
108 $fillimage->read(file=>$somefile) or die;
109 $image->flood_fill(..., fill=>{ image=>$fillimage });
111 Currently you can create opaque or transparent plain color fills,
112 hatched fills, image based fills and fountain fills. See
113 L<Imager::Fill> for more information.
115 =head2 List of primitives
121 $img->line(color=>$green, x1=>10, x2=>100,
122 y1=>20, y2=>50, aa=>1, endp=>1 );
124 X<line method>Draws a line from (x1,y1) to (x2,y2). The endpoint
125 (x2,y2) is drawn by default. If endp of 0 is specified then the
126 endpoint will not be drawn. If C<aa> is set then the line will be
127 drawn antialiased. The I<antialias> parameter is still available for
128 backwards compatibility.
136 x1, y1 - starting point of the line. Required.
140 x2, y2 - end point of the line. Required.
144 color - the color of the line. See L<"Color Parameters">. Default:
149 endp - if zero the end point of the line is not drawn. Default: 1 -
150 the end point is drawn. This is useful to set to 0 when drawning a
151 series of connected lines.
155 aa - if true the line is drawn anti-aliased. Default: 0.
161 $img->polyline(points=>[[$x0,$y0],[$x1,$y1],[$x2,$y2]],color=>$red);
162 $img->polyline(x=>[$x0,$x1,$x2], y=>[$y0,$y1,$y2], aa=>1);
164 X<polyline method>Polyline is used to draw multilple lines between a
165 series of points. The point set can either be specified as an
166 arrayref to an array of array references (where each such array
167 represents a point). The other way is to specify two array
170 The I<antialias> parameter is still available for backwards compatibility.
176 points - a reference to an array of references to arrays containing
177 the co-ordinates of the points in the line, for example:
179 my @points = ( [ 0, 0 ], [ 100, 0 ], [ 100, 100 ], [ 0, 100 ] );
180 $img->polyline(points => \@points);
184 x, y - each is an array of x or y ordinates. This is an alternative
185 to supplying the C<points> parameter.
187 # same as the above points example
188 my @x = ( 0, 100, 100, 0 );
189 my @y = ( 0, 0, 100, 100 );
190 $img->polyline(x => \@x, y => \@y);
194 color - the color of the line. See L<"Color Parameters">. Default:
199 aa - if true the line is drawn anti-aliased. Default: 0. Can also be
200 supplied as C<antialias> for backward compatibility.
206 $blue = Imager::Color->new( 0, 0, 255 );
207 $img->box(color => $blue, xmin=>10, ymin=>30, xmax=>200, ymax=>300,
210 X<box method>If any of the edges of the box are ommited it will snap
211 to the outer edge of the image in that direction. If C<filled> is
212 ommited the box is drawn as an outline. Instead of a color it is
213 possible to use a C<fill> pattern:
215 $fill = Imager::Fill->new(hatch=>'stipple');
216 $img->box(fill=>$fill); # fill entire image with a given fill pattern
218 $img->box(xmin=>10, ymin=>30, xmax=>150, ymax=>60,
219 fill => { hatch=>'cross2' });
221 Also if a color is omitted a color with (255,255,255,255) is used
222 instead. [NOTE: This may change to use C<$img-E<gt>fgcolor()> in the future].
224 Box does not support fractional coordinates yet.
232 xmin - left side of the box. Default: 0 (left edge of the image)
236 ymin - top side of the box. Default: 0 (top edge of the image)
240 xmax - right side of the box. Default: $img->getwidth-1. (right edge
245 ymax - bottom side of the box. Default: $img->getheight-1. (bottom
248 Note: xmax and ymax are I<inclusive> - the number of pixels drawn for
249 a filled box is (xmax-xmin+1) * (ymax-ymin+1).
253 box - a reference to an array of (left, top, right, bottom)
254 co-ordinates. This is an alternative to supplying xmin, ymin, xmax,
255 ymax and overrides their values.
259 color - the color of the line. See L<"Color Parameters">. Default:
260 white. This is ignored if the filled parameter
264 filled - if non-zero the box is filled with I<color> instead of
265 outlined. Default: an outline is drawn.
269 fill - the fill for the box. If this is supplied then the box will be
270 filled. See L<"Fill Parameters">.
276 $img->arc(color=>$red, r=>20, x=>200, y=>100, d1=>10, d2=>20 );
278 This creates a filled red arc with a 'center' at (200, 100) and spans
279 10 degrees and the slice has a radius of 20.
281 It's also possible to supply a C<fill> parameter.
283 To draw just an arc outline - just the curve, not the radius lines,
288 $img->arc(color=>$red, r=>20, x=>200, y=>100, d1=>10, d2=>20, filled=>0 );
294 x, y - center of the filled arc. Default: center of the image.
298 r - radius of the arc. Default: 1/3 of min(image height, image width).
302 d1 - starting angle of the arc, in degrees. Default: 0
306 d2 - ending angle of the arc, in degrees. Default: 361.
310 color - the color of the filled arc. See L<"Color Parameters">.
311 Default: white. Overridden by C<fill>.
315 fill - the fill for the filled arc. See L<"Fill Parameters">
319 aa - if true the filled arc is drawn anti-aliased. Default: false.
321 Anti-aliased arc() is experimental for now, I'm not entirely happy
322 with the results in some cases.
326 filled - set to 0 to draw only an outline.
330 # arc going through angle zero:
331 $img->arc(d1=>320, d2=>40, x=>100, y=>100, r=>50, color=>'blue');
334 $img->arc(d1=>135, d2=>45, x=>100, y=>150, r=>50,
335 fill=>{ solid=>'red', combine=>'diff' });
337 # draw an anti-aliased circle outline
338 $img->arc(x => 100, y => 150, r => 150, filled => 0,
339 color => '#F00', aa => 1);
341 # draw an anti-aliased arc
342 $img->arc(x => 100, y => 150, r => 90, filled => 0,
343 color => '#0f0', aa => 1, d1 => 90, d2 => 180);
347 $img->circle(color=>$green, r=>50, x=>200, y=>100, aa=>1, filled=>1);
349 This creates an antialiased green circle with its center at (200, 100)
350 and has a radius of 50. It's also possible to supply a C<fill> parameter
351 instead of a color parameter.
353 $img->circle(r => 50, x=> 150, y => 150, fill=>{ hatch => 'stipple' });
355 To draw a circular outline, set C<filled> to 0:
357 $img->circle(color=>$green, r=>50, x=>200, y=>100, aa=>1, filled=>0);
363 x, y - center of the filled circle. Default: center of the image.
367 r - radius of the circle. Default: 1/3 of min(image height, image width).
371 color - the color of the filled circle. See L<"Color Parameters">.
372 Default: white. Overridden by C<fill>.
376 fill - the fill for the filled circle. See L<"Fill Parameters">
380 aa - if true the filled circle is drawn anti-aliased. Default: false.
384 filled - set to 0 to just draw an outline.
390 $img->polygon(points=>[[$x0,$y0],[$x1,$y1],[$x2,$y2]],color=>$red);
391 $img->polygon(x=>[$x0,$x1,$x2], y=>[$y0,$y1,$y2], fill=>$fill);
393 Polygon is used to draw a filled polygon. Currently the polygon is
394 always drawn antialiased, although that will change in the future.
395 Like other antialiased drawing functions its coordinates can be
396 specified with floating point values. As with other filled shapes
397 it's possible to use a C<fill> instead of a color.
403 points - a reference to an array of references to arrays containing
404 the co-ordinates of the points in the line, for example:
406 my @points = ( [ 0, 0 ], [ 100, 0 ], [ 100, 100 ], [ 0, 100 ] );
407 $img->polygon(points => \@points);
411 x, y - each is an array of x or y ordinates. This is an alternative
412 to supplying the C<points> parameter.
414 # same as the above points example
415 my @x = ( 0, 100, 100, 0 );
416 my @y = ( 0, 0, 100, 100 );
417 $img->polygon(x => \@x, y => \@y);
421 color - the color of the filled polygon. See L<"Color Parameters">.
422 Default: black. Overridden by C<fill>.
426 fill - the fill for the filled circle. See L<"Fill Parameters">
432 X<flood_fill>You can fill a region that all has the same color using
433 the flood_fill() method, for example:
435 $img->flood_fill(x=>50, y=>50, color=>$color);
437 will fill all regions the same color connected to the point (50, 50).
439 Alternatively you can fill a region limited by a given border color:
441 # stop at the red border
442 $im->flood_fill(x=>50, y=>50, color=>$color, border=>"red");
444 You can also fill with a complex fill:
446 $img->flood_fill(x=>50, y=>50, fill=>{ hatch=>'cross1x1' });
454 x, y - the start point of the fill.
458 color - the color of the filled area. See L<"Color Parameters">.
459 Default: white. Overridden by C<fill>.
463 fill - the fill for the filled area. See L<"Fill Parameters">
467 border - the border color of the region to be filled. If this
468 parameter is supplied flood_fill() will stop when it finds this color.
469 If this is not supplied then a normal fill is done. C<border> can be
470 supplied as a L<"Color Parameter">.
476 $img->setpixel(x=>50, y=>70, color=>$color);
477 $img->setpixel(x=>[ 50, 60, 70 ], y=>[20, 30, 40], color=>$color);
479 setpixel() is used to set one or more individual pixels.
487 x, y - either integers giving the co-ordinates of the pixel to set or
488 array references containing a set of pixels to be set.
492 color - the color of the pixels drawn. See L<"Color Parameters">.
497 When called with array parameters, returns the number of pixels
498 successfully set, or false if none.
500 When called with scalars for x and y, return $img on success, false on
505 my $color = $img->getpixel(x=>50, y=>70);
506 my @colors = $img->getpixel(x=>[ 50, 60, 70 ], y=>[20, 30, 40]);
507 my $colors_ref = $img->getpixel(x=>[ 50, 60, 70 ], y=>[20, 30, 40]);
509 getpixel() is used to retrieve one or more individual pixels.
511 For either method you can supply a single set of co-ordinates as
512 scalar x and y parameters, or set each to an arrayref of ordinates.
514 When called with arrays, getpixel() will return a list of colors in
515 list context, and an arrayref in scalar context.
517 To receive floating point colors from getpixel, set the C<type>
518 parameter to 'float'.
526 x, y - either integers giving the co-ordinates of the pixel to set or
527 array references containing a set of pixels to be set.
531 type - the type of color object to return, either C<'8bit'> for
532 Imager::Color objects or C<'float'> for Imager::Color::Float objects.
539 my $font = Imager::Font->new(file=>"foo.ttf");
540 $img->string(x => 50, y => 70,
541 string => "Hello, World!",
547 Draws text on the image.
555 x, y - the point to draw the text from. If C<align> is 0 this is the
556 top left of the string. If C<align> is 1 (the default) then this is
557 the left of the string on the baseline. Required.
561 string - the text to draw. Required unless you supply the C<text>
566 font - an L<Imager::Font> object representing the font to draw the
571 aa - if non-zero the output will be anti-aliased. Default: the value
572 set in Imager::Font->new() or 0 if not set.
576 align - if non-zero the point supplied in (x,y) will be on the
577 base-line, if zero then (x,y) will be at the top-left of the string.
579 ie. if drawing the string "yA" and align is 0 the point (x,y) will
580 aligned with the top of the A. If align is 1 (the default) it will be
581 aligned with the baseline of the font, typically bottom of the A,
582 depending on the font used.
584 Default: the value set in Imager::Font->new, or 1 if not set.
588 channel - if present, the text will be written to the specified
589 channel of the image and the color parameter will be ignore.
593 color - the color to draw the text in. Default: the color supplied to
594 Imager::Font->new, or red if none.
598 size - the point size to draw the text at. Default: the size supplied
599 to Imager::Font->new, or 15.
603 sizew - the width scaling to draw the text at. Default: the value of
608 utf8 - for drivers that support it, treat the string as UTF8 encoded.
609 For versions of perl that support Unicode (5.6 and later), this will
610 be enabled automatically if the C<string> parameter is already a UTF8
611 string. See L<Imager::Font/"UTF8"> for more information.
615 vlayout - for drivers that support it, draw the text vertically.
616 Note: I haven't found a font that has the appropriate metrics yet.
620 text - alias for the C<string> parameter.
624 On error, string() returns false and you can use $img->errstr to get
625 the reason for the error.
629 Draws text aligned around a point on the image.
631 # "Hello" centered at 100, 100 in the image.
632 my ($left, $top, $right, $bottom) =
633 $img->align_string(string=>"Hello",
635 halign=>'center', valign=>'center',
644 x, y - the point to draw the text from. If C<align> is 0 this is the
645 top left of the string. If C<align> is 1 (the default) then this is
646 the left of the string on the baseline. Required.
650 string - the text to draw. Required unless you supply the C<text> parameter.
654 font - an L<Imager::Font> object representing the font to draw the
659 aa - if non-zero the output will be anti-aliased
663 valign - vertical alignment of the text against (x,y)
669 top - Point is at the top of the text.
673 bottom - Point is at the bottom of the text.
677 baseline - Point is on the baseline of the text. This is the default.
681 center - Point is vertically centered within the text.
687 halign - horizontal alignment of the text against (x,y)
693 left - The point is at the left of the text. This is the default.
697 start - The point is at the start point of the text.
701 center - The point is horizontally centered within the text.
705 right - The point is at the right end of the text.
709 end - The point is at the end point of the text.
715 channel - if present, the text will be written to the specified
716 channel of the image and the color parameter will be ignore.
720 color - the color to draw the text in. Default: the color supplied to
721 Imager::Font->new, or red if none.
725 size - the point size to draw the text at. Default: the size supplied
726 to Imager::Font->new, or 15.
730 sizew - the width scaling to draw the text at. Default: the value of
735 utf8 - for drivers that support it, treat the string as UTF8 encoded.
736 For versions of perl that support Unicode (5.6 and later), this will
737 be enabled automatically if the C<string> parameter is already a UTF8
738 string. See L<Imager::Font/"UTF8"> for more information.
742 vlayout - for drivers that support it, draw the text vertically.
743 Note: I haven't found a font that has the appropriate metrics yet.
747 text - alias for the C<string> parameter.
751 On success returns a list of bounds of the drawn text, in the order
752 left, top, right, bottom.
754 On error, align_string() returns an empty list and you can use
755 $img->errstr to get the reason for the error.
759 Set all or part of a horizontal line of pixels to an image. This
760 method is most useful in conjuction with L</getscanline>.
762 The parameters you can pass are:
768 y - vertical position of the scanline. This parameter is required.
772 x - position to start on the scanline. Default: 0
776 pixels - either a reference to an array containing Imager::Color
777 objects, an reference to an array containing Imager::Color::Float
778 objects or a scalar containing packed color data.
780 If C<type> is C<index> then this can either be a reference to an array
781 of palette color indexes or a scalar containing packed indexes.
783 See L</"Packed Color Data"> for information on the format of packed
788 type - the type of pixel data supplied. If you supply an array
789 reference of object then this is determined automatically. If you
790 supply packed color data this defaults to '8bit', if your data is
791 packed floating point color data then set this to 'float'.
793 You can use float or 8bit samples with any image.
795 If this is 'index' then pixels should be either an array of palette
796 color indexes or a packed string of color indexes.
800 Returns the number of pixels set.
802 Each of the following sets 5 pixels from (5, 10) through (9, 10) to
803 blue, red, blue, red, blue:
805 my $red_color = Imager::Color->new(255, 0, 0);
806 my $blue_color = Imager::Color->new(0, 0, 255);
808 $image->setscanline(y=>10, x=>5, pixels=>
809 [ ($blue_color, $red_color) x 2, $blue_color ]);
811 # use floating point color instead, for 16-bit plus images
812 my $red_colorf = Imager::Color::Float->new(1.0, 0, 0);
813 my $blue_colorf = Imager::Color::Float->new(0, 0, 1.0);
815 $image->setscanline(y=>10, x=>5, pixels=>
816 [ ($blue_colorf, $red_colorf) x 2, $blue_colorf ]);
819 $image->setscanline(y=>10, x=>5, pixels=>
820 pack("C*", ((0, 0, 255, 255), (255, 0, 0, 255)) x 2,
823 # packed floating point samples
824 $image->setscanline(y=>10, x=>5, type=>'float', pixels=>
825 pack("d*", ((0, 0, 1.0, 1.0), (1.0, 0, 0, 1.0)) x 2,
829 Copy even rows from one image to another:
831 for (my $y = 0; $y < $im2->getheight; $y+=2) {
832 $im1->setscanline(y=>$y,
833 pixels=>scalar($im2->getscanline(y=>$y)));
837 Set the blue channel to 0 for all pixels in an image. This could be
838 done with convert too:
840 for my $y (0..$im->getheight-1) {
841 my $row = $im->getscanline(y=>$y);
842 $row =~ s/(..).(.)/$1\0$2/gs;
843 $im->setscanline(y=>$y, pixels=>$row);
848 Read all or part of a horizontal line of pixels from an image. This
849 method is most useful in conjunction with L</setscanline>.
851 The parameters you can pass are:
857 y - vertical position of the scanline. This parameter is required.
861 x - position to start on the scanline. Default: 0
865 width - number of pixels to read. Default: $img->getwidth - x
869 type - the type of pixel data to return. Default: C<8bit>.
871 Permited values are C<8bit> and C<float> and C<index>.
875 In list context this method will return a list of Imager::Color
876 objects when I<type> is C<8bit>, or a list of Imager::Color::Float
877 objects when I<type> if C<float>, or a list of integers when I<type>
880 In scalar context this returns a packed 8-bit pixels when I<type> is
881 C<8bit>, or a list of packed floating point pixels when I<type> is
882 C<float>, or packed palette color indexes when I<type> is C<index>.
884 The values of samples for which the image does not have channels is
885 undefined. For example, for a single channel image the values of
886 channels 1 through 3 are undefined.
888 Check image for a given color:
891 YLOOP: for my $y (0..$img->getheight-1) {
892 my @colors = $img->getscanline(y=>$y);
893 for my $color (@colors) {
894 my ($red, $green, $blue, $alpha) = $color->rgba;
895 if ($red == $test_red && $green == $test_green && $blue == $test_blue
896 && $alpha == $test_alpha) {
903 Or do it using packed data:
906 my $test_packed = pack("CCCC", $test_red, $test_green, $test_blue,
908 YLOOP: for my $y (0..$img->getheight-1) {
909 my $colors = $img->getscanline(y=>$y);
910 while (length $colors) {
911 if (substr($colors, 0, 4, '') eq $test_packed) {
918 Some of the examples for L</setscanline> for more examples.
922 Read specified channels from all or part of a horizontal line of
923 pixels from an image.
925 The parameters you can pass are:
931 y - vertical position of the scanline. This parameter is required.
935 x - position to start on the scanline. Default: 0
939 width - number of pixels to read. Default: $img->getwidth - x
943 type - the type of sample data to return. Default: C<8bit>.
945 Permited values are C<8bit> and C<float>.
947 As of Imager 0.61 this can be C<16bit> only for 16 bit images.
951 channels - a reference to an array of channels to return, where 0 is
952 the first channel. Default: C<< [ 0 .. $self->getchannels()-1 ] >>
956 target - if an array reference is supplied in target then the samples
957 will be stored here instead of being returned.
961 offset - the offset within the array referenced by I<target>
965 In list context this will return a list of integers between 0 and 255
966 inclusive when I<type> is C<8bit>, or a list of floating point numbers
967 between 0.0 and 1.0 inclusive when I<type> is C<float>.
969 In scalar context this will return a string of packed bytes, as with
970 C< pack("C*", ...) > when I<type> is C<8bit> or a string of packed
971 doubles as with C< pack("d*", ...) > when I<type> is C<float>.
973 If the I<target> option is supplied then only a count of samples is
976 Example: Check if any pixels in an image have a non-zero alpha
980 for my $y (0 .. $img->getheight()-1) {
981 my $alpha = $img->getsamples(y=>$y, channels=>[0]);
982 if ($alpha =~ /[^\0]/) {
988 Example: Convert a 2 channel grey image into a 4 channel RGBA image:
990 # this could be done with convert() instead
991 my $out = Imager->new(xsize => $src->getwidth(),
992 ysize => $src->getheight(),
994 for my $y ( 0 .. $src->getheight()-1 ) {
995 my $data = $src->getsamples(y=>$y, channels=>[ 0, 0, 0, 1 ]);
996 $out->setscanline(y=>$y, pixels=>$data);
999 Retrieve 16-bit samples:
1001 if ($img->bits == 16) {
1003 $img->getsamples(x => 0, y => $y, target => \@samples, type => '16bit');
1008 This allows writing of samples back to some images. Currently this is
1009 only supported for 16-bit/sample images.
1017 y - vertical position of the scanline. This parameter is required.
1021 x - position to start on the scanline. Default: 0
1025 width - number of pixels to write. Default: $img->getwidth - x. The
1026 minimum of this and the number of pixels represented by the samples
1027 provided will be written.
1031 type - the type of sample data to write. This parameter is required.
1033 As of Imager 0.61 this can only be C<16bit> only for 16 bit images.
1037 channels - a reference to an array of channels to return, where 0 is
1038 the first channel. Default: C<< [ 0 .. $self->getchannels()-1 ] >>
1042 data - a reference to an array of samples to write. Required.
1046 offset - the starting offset within the array referenced by I<data>
1050 Returns the number of samples written.
1054 =head1 Packed Color Data
1056 The getscanline() and setscanline() functions can work with pixels
1057 packed into scalars. This is useful to remove the cost of creating
1058 color objects, but should only be used when performance is an issue.
1060 Packed data can either be 1 byte per sample or 1 double per sample.
1062 Each pixel returned by getscanline() or supplied to setscanline()
1063 contains 4 samples, even if the image has fewer then 4 channels. The
1064 values of the extra samples as returned by getscanline() is not
1065 specified. The extra samples passed to setscanline() are ignored.
1067 To produce packed 1 byte/sample pixels, use the pack C<C> template:
1069 my $packed_8bit_pixel = pack("CCCC", $red, $blue, $green, $alpha);
1071 To produce packed double/sample pixels, use the pack C<d> template:
1073 my $packed_float_pixel = pack("dddd", $red, $blue, $green, $alpha);
1075 If you use a I<type> parameter of C<index> then the values are palette
1076 color indexes, not sample values:
1078 my $im = Imager->new(xsize => 100, ysize => 100, type => 'paletted');
1079 my $black_index = $im->addcolors(colors => [ 'black' ]);
1080 my $red_index = $im->addcolors(colors => [ 'red' ]);
1082 my $packed_index_data = pack("C*", $black_index, $red_index);
1083 $im->setscanline(y => $y, pixels => $packed_index_data, type => 'index');
1085 =head1 Combine Types
1087 Some methods accept a C<combine> parameter, this can be any of the
1094 The fill pixel replaces the target pixel.
1098 The fill pixels alpha value is used to combine it with the target pixel.
1104 Each channel of fill and target is multiplied, and the result is
1105 combined using the alpha channel of the fill pixel.
1109 If the alpha of the fill pixel is greater than a random number, the
1110 fill pixel is alpha combined with the target pixel.
1114 The channels of the fill and target are added together, clamped to the range of the samples and alpha combined with the target.
1118 The channels of the fill are subtracted from the target, clamped to be
1119 >= 0, and alpha combined with the target.
1123 The channels of the fill are subtracted from the target and the
1124 absolute value taken this is alpha combined with the target.
1128 The higher value is taken from each channel of the fill and target
1129 pixels, which is then alpha combined with the target.
1133 The higher value is taken from each channel of the fill and target
1134 pixels, which is then alpha combined with the target.
1138 The combination of the saturation and value of the target is combined
1139 with the hue of the fill pixel, and is then alpha combined with the
1144 The combination of the hue and value of the target is combined
1145 with the saturation of the fill pixel, and is then alpha combined with the
1150 The combination of the hue and value of the target is combined
1151 with the value of the fill pixel, and is then alpha combined with the
1156 The combination of the value of the target is combined with the hue
1157 and saturation of the fill pixel, and is then alpha combined with the
1166 Returns a list of possible combine types.
1172 box() does not support antialiasing yet. Arc, is only filled as of
1173 yet. Default color is not unified yet.
1177 Tony Cook <tony@imager.perl.org>, Arnar M. Hrafnkelsson.
1181 L<Imager>(3), L<Imager::Cookbook>(3)