diff --git a/.gitattributes b/.gitattributes index 2b1b6e0444a723c6c4ce29d05299e4c3969d1995..7f6c875462f934ee41970e71f56ff9e56245d4f6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,7 +2,6 @@ * text ident *.gif binary *.gz binary -*.ppm binary *.rs binary testfont binary @@ -76,7 +75,6 @@ testfont binary /src/modules/Image/colortable.h foreign_ident /src/modules/Image/colortable_lookup.h foreign_ident /src/modules/Image/dct.c foreign_ident -/src/modules/Image/doc/Image.html foreign_ident /src/modules/Image/encodings/gif.c foreign_ident /src/modules/Image/encodings/gif_lzw.c foreign_ident /src/modules/Image/encodings/gif_lzw.h foreign_ident diff --git a/src/modules/Image/doc/Image.GIF.html b/src/modules/Image/doc/Image.GIF.html deleted file mode 100644 index bb445a749923d884e23b72c6b2b7fe3de94d4d15..0000000000000000000000000000000000000000 --- a/src/modules/Image/doc/Image.GIF.html +++ /dev/null @@ -1,439 +0,0 @@ -<title>Pike documentation: module Image.GIF</title> -<h2>module Image.GIF</h2> - - -<blockquote> -This submodule keep the GIF encode/decode capabilities - of the <tt><a href=Image.html>Image</a></tt> module. - -<p> GIF is a common image storage format, - usable for a limited color palette - a GIF image can - only contain as most 256 colors - and animations. - -<p> Simple encoding: - <tt><a href=Image.GIF.html#encode>encode</a></tt>, <tt><a href=Image.GIF.html#encode_trans>encode_trans</a></tt> - -<p> Advanced stuff: - <tt><a href=Image.GIF.html#render_block>render_block</a></tt>, <tt><a href=Image.GIF.html#header_block>header_block</a></tt>, - <tt><a href=Image.GIF.html#end_block>end_block</a></tt>, <tt><a href=Image.GIF.html#netscape_loop_block>netscape_loop_block</a></tt> - -<p> Very advanced stuff: - <tt><a href=Image.GIF.html#_render_block>_render_block</a></tt>, <tt><a href=Image.GIF.html#_gce_block>_gce_block</a></tt> -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.html>Image</a></tt>, - <tt><a href=Image.image.html>Image.image</a></tt>, - <tt><a href=Image.colortable.html>Image.colortable</a></tt> -</blockquote> - -<hr> -<a name=_gce_block> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>_gce_block</b>(int transparency, int transparency_index, int delay, int user_input, int disposal);</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -This function gives back a Graphic Control Extension block. - A GCE block has the scope of the following render block. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int transparency</tt> -<dt><tt>int transparency_index</tt> - <dd>The following image has transparency, marked with this index. -<dt><tt>int delay</tt> - <dd>View the following rendering for this many centiseconds (0..65535). -<dt><tt>int user_input</tt> - <dd>Wait the delay or until user input. If delay is zero, - wait indefinitely for user input. May sound the bell - upon decoding. -<dt><tt>int disposal</tt> - <dd>Disposal method number; - <dl compact> - <dt>0<dd>No disposal specified. The decoder is - not required to take any action. - <dt>1<dd>Do not dispose. The graphic is to be left - in place. - <dt>2<dd>Restore to background color. The area used by the - graphic must be restored to the background color. - <dt>3<dd>Restore to previous. The decoder is required to - restore the area overwritten by the graphic with - what was there prior to rendering the graphic. - <dt compact>4-7<dd>To be defined. - </dl> -</dl></blockquote> - - -<h4>NOTE</h4> -<blockquote> -This is in the very advanced sector of the GIF support; - please read about how GIFs file works. - -<p> Most decoders just ignore some or all of these parameters. -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.GIF.html#_render_block>_render_block</a></tt>, - <tt><a href=Image.GIF.html#render_block>render_block</a></tt> -</blockquote> - -<hr> -<a name=_render_block> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>_render_block</b>(int x, int y, int xsize, int ysize, int bpp, string indices, 0|string colortable, int interlace);</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Advanced (!) method for writing renderblocks for placement - in a GIF file. This method only applies LZW encoding on the - indices and makes the correct headers. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int x</tt> -<dt><tt>int y</tt> - <dd>Position of this image. -<dt><tt>int xsize</tt> -<dt><tt>int ysize</tt> - <dd>Size of the image. Length if the <tt>indices</tt> string - must be xsize*ysize. -<dt><tt>int bpp</tt> - <dd>Bits per pixels in the indices. Valid range 1..8. -<dt><tt>string indices</tt> - <dd>The image indices as an 8bit indices. -<dt><tt>string colortable</tt> - <dd>Colortable with colors to write as palette. - If this argument is zero, no local colortable is written. - Colortable string len must be 1&lt;&lt;bpp. -<dt><tt>int interlace</tt> - <dd>Interlace index data and set interlace bit. The given string - should _not_ be pre-interlaced. -</dl></blockquote> - - -<h4>NOTE</h4> -<blockquote> -This is in the very advanced sector of the GIF support; - please read about how GIFs file works. -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.GIF.html#encode>encode</a></tt>, - <tt><a href=Image.GIF.html#_encode>_encode</a></tt>, - <tt><a href=Image.GIF.html#header_block>header_block</a></tt>, - <tt><a href=Image.GIF.html#end_block>end_block</a></tt> -</blockquote> - -<hr> -<a name=encode> </a> -<a name=encode_trans> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>encode</b>(object img);<br> -string <b>encode</b>(object img, int colors);<br> -string <b>encode</b>(object img, object colortable);<br> -string <b>encode_trans</b>(object img, object alpha);<br> -string <b>encode_trans</b>(object img, int tr_r, int tr_g, int tr_b);<br> -string <b>encode_trans</b>(object img, int colors, object alpha);<br> -string <b>encode_trans</b>(object img, int colors, int tr_r, int tr_g, int tr_b);<br> -string <b>encode_trans</b>(object img, int colors, object alpha, int tr_r, int tr_g, int tr_b);<br> -string <b>encode_trans</b>(object img, object colortable, object alpha);<br> -string <b>encode_trans</b>(object img, object colortable, int tr_r, int tr_g, int tr_b);<br> -string <b>encode_trans</b>(object img, object colortable, object alpha, int a_r, int a_g, int a_b);<br> -string <b>encode_trans</b>(object img, object colortable, int transp_index);</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Create a complete GIF file. - -<p> The latter (<tt><a href=Image.GIF.html#encode_trans>encode_trans</a></tt>) functions - add transparency capabilities. - -<p> Example: - <pre> - img=<tt><a href=Image.image.html>Image.image</a></tt>([...]); - [...] // make your very-nice image - write(<tt><a href=Image.GIF.encode.html>Image.GIF.encode</a></tt>(img)); // write it as GIF on stdout - </pre> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>object img</tt> - <dd>The image which to encode. -<dt><tt>int colors</tt> -<dt><tt>object colortable</tt> - <dd>These arguments decides what colors the image should - be encoded with. If a number is given, a colortable - with be created with (at most) that amount of colors. - Default is '256' (GIF maximum amount of colors). -<dt><tt>object alpha</tt> - <dd>Alpha channel image (defining what is transparent); black - color indicates transparency. GIF has only transparent - or nontransparent (no real alpha channel). - You can always dither a transparency channel: - <tt>Image.colortable(my_alpha, ({({0,0,0}),({255,255,255})}))<wbr> - ->full()<wbr>->floyd_steinberg()<wbr>->map(my_alpha)</tt> -<dt><tt>int tr_r</tt> -<dt><tt>int tr_g</tt> -<dt><tt>int tr_b</tt> - <dd>Use this (or the color closest to this) color as transparent - pixels. -<dt><tt>int a_r</tt> -<dt><tt>int a_g</tt> -<dt><tt>int a_b</tt> - <dd>Encode transparent pixels (given by alpha channel image) - to have this color. This option is for making GIFs for - the decoders that doesn't support transparency. -<dt><tt>int transp_index</tt> - <dd>Use this color no in the colortable as transparent color. -</dl></blockquote> - - -<h4>NOTE</h4> -<blockquote> -For advanced users: - <pre>Image.GIF.encode_trans(img,colortable,alpha);</pre> - is equivalent of using - <pre>Image.GIF.header_block(img->xsize(),img->ysize(),colortable)+ - Image.GIF.render_block(img,colortable,0,0,0,alpha)+ - Image.GIF.end_block();</pre> - and is actually implemented that way. -</blockquote> - -<hr> -<a name=end_block> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>end_block</b>();</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -This function gives back a GIF end (trailer) block. -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the end block as a string. -</blockquote> - - -<h4>NOTE</h4> -<blockquote> -This is in the advanced sector of the GIF support; - please read some about how GIFs are packed. - -<p> The result of this function is always ";" or "\x3b", - but I recommend using this function anyway for code clearity. -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.GIF.html#header_block>header_block</a></tt>, - <tt><a href=Image.GIF.html#end_block>end_block</a></tt> -</blockquote> - -<hr> -<a name=header_block> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>header_block</b>(int xsize, int ysize, int numcolors);<br> -string <b>header_block</b>(int xsize, int ysize, object colortable);<br> -string <b>header_block</b>(int xsize, int ysize, object colortable, int background_color_index, int gif87a, int aspectx, int aspecty);<br> -string <b>header_block</b>(int xsize, int ysize, object colortable, int background_color_index, int gif87a, int aspectx, int aspecty, int r, int g, int b);</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -This function gives back a GIF header block. - -<p> Giving a colortable to this function includes a - global palette in the header block. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int xsize</tt> -<dt><tt>int ysize</tt> - <dd>Size of drawing area. Usually same size as in - the first (or only) render block(s). -<dt><tt>int background_color_index</tt> - <dd>This color in the palette is the background color. - Background is visible if the following render block(s) - doesn't fill the drawing area or are transparent. - Most decoders doesn't use this value, though. -<dt><tt>int gif87a</tt> - <dd>If set, write 'GIF87a' instead of 'GIF89a' (default 0 == 89a). -<dt><tt>int aspectx</tt> -<dt><tt>int aspecty</tt> - <dd>Aspect ratio of pixels, - ranging from 4:1 to 1:4 in increments - of 1/16th. Ignored by most decoders. - If any of <tt>aspectx</tt> or <tt>aspecty</tt> is zero, - aspectratio information is skipped. -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>Add this color as the transparent color. - This is the color used as transparency color in - case of alpha-channel given as image object. - This increases (!) the number of colors by one. -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the created header block as a string -</blockquote> - - -<h4>NOTE</h4> -<blockquote> -This is in the advanced sector of the GIF support; - please read some about how GIFs are packed. - -<p> This GIF encoder doesn't support different size - of colors in global palette and color resolution. -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.GIF.html#header_block>header_block</a></tt>, - <tt><a href=Image.GIF.html#end_block>end_block</a></tt> -</blockquote> - -<hr> -<a name=netscape_loop_block> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>netscape_loop_block</b>();<br> -string <b>netscape_loop_block</b>(int number_of_loops);</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Creates a application-specific extention block; - this block makes netscape and compatible browsers - loop the animation a certain amount of times. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int number_of_loops</tt> - <dd>Number of loops. Max and default is 65535. -</dl></blockquote> - -<hr> -<a name=render_block> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>render_block</b>(object img, object colortable, int x, int y, int localpalette);<br> -string <b>render_block</b>(object img, object colortable, int x, int y, int localpalette, object alpha);<br> -string <b>render_block</b>(object img, object colortable, int x, int y, int localpalette, object alpha, int r, int g, int b);<br> -string <b>render_block</b>(object img, object colortable, int x, int y, int localpalette, int delay, int transp_index, int interlace, int user_input, int disposal);<br> -string <b>render_block</b>(object img, object colortable, int x, int y, int localpalette, object alpha, int r, int g, int b, int delay, int interlace, int user_input, int disposal);</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -This function gives a image block for placement in a GIF file, - with or without transparency. - The some options actually gives two blocks, - the first with graphic control extensions for such things - as delay or transparency. - -<p> Example: - <pre> - img1=<tt><a href=Image.image.html>Image.image</a></tt>([...]); - img2=<tt><a href=Image.image.html>Image.image</a></tt>([...]); - [...] // make your very-nice images - nct=<tt><a href=Image.colortable.html>Image.colortable</a></tt>([...]); // make a nice colortable - write(<tt><a href=Image.GIF.header_block.html>Image.GIF.header_block</a></tt>(xsize,ysize,nct)); // write a GIF header - write(<tt><a href=Image.GIF.render_block.html>Image.GIF.render_block</a></tt>(img1,nct,0,0,0,10)); // write a render block - write(<tt><a href=Image.GIF.render_block.html>Image.GIF.render_block</a></tt>(img2,nct,0,0,0,10)); // write a render block - [...] - write(<tt><a href=Image.GIF.end_block.html>Image.GIF.end_block</a></tt>()); // write end block - // voila! A GIF animation on stdout. - </pre> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>object img</tt> - <dd>The image. -<dt><tt>object colortable</tt> - <dd>Colortable with colors to use and to write as palette. -<dt><tt>int x</tt> -<dt><tt>int y</tt> - <dd>Position of this image. -<dt><tt>int localpalette</tt> - <dd>If set, writes a local palette. -<dt><tt>object alpha</tt> - <dd>Alpha channel image; black is transparent. -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>Color of transparent pixels. Not all decoders understands - transparency. This is ignored if localpalette isn't set. -<dt><tt>int delay</tt> - <dd>View this image for this many centiseconds. Default is zero. -<dt><tt>int transp_index</tt> - <dd>Index of the transparent color in the colortable. - <tt>-1</tt> indicates no transparency. -<dt><tt>int user_input</tt> - <dd>If set: wait the delay or until user input. If delay is zero, - wait indefinitely for user input. May sound the bell - upon decoding. Default is non-set. -<dt><tt>int disposal</tt> - <dd>Disposal method number; - <dl compact> - <dt>0<dd>No disposal specified. The decoder is - not required to take any action. (default) - <dt>1<dd>Do not dispose. The graphic is to be left - in place. - <dt>2<dd>Restore to background color. The area used by the - graphic must be restored to the background color. - <dt>3<dd>Restore to previous. The decoder is required to - restore the area overwritten by the graphic with - what was there prior to rendering the graphic. - <dt compact>4-7<dd>To be defined. - </dl> -</dl></blockquote> - - -<h4>NOTE</h4> -<blockquote> -This is in the advanced sector of the GIF support; - please read some about how GIFs are packed. - -<p> The user_input and disposal method are unsupported - in most decoders. -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.GIF.html#encode>encode</a></tt>, - <tt><a href=Image.GIF.html#header_block>header_block</a></tt>, - <tt><a href=Image.GIF.html#end_block>end_block</a></tt> -</blockquote> diff --git a/src/modules/Image/doc/Image.PNM.html b/src/modules/Image/doc/Image.PNM.html deleted file mode 100644 index 5a059ee95b583392fac0ba56f16587494b1446a4..0000000000000000000000000000000000000000 --- a/src/modules/Image/doc/Image.PNM.html +++ /dev/null @@ -1,104 +0,0 @@ -<title>Pike documentation: module Image.PNM</title> -<h2>module Image.PNM</h2> - - -<blockquote> -This submodule keep the PNM encode/decode capabilities - of the <tt><a href=Image.html>Image</a></tt> module. - -<p> PNM is a common image storage format on unix systems, - and is a very simple format. - -<p> This format doesn't use any color palette. - -<p> The format is divided into seven subformats; - -<p> <pre> - P1(PBM) - ascii bitmap (only two colors) - P2(PGM) - ascii greymap (only grey levels) - P3(PPM) - ascii truecolor - P4(PBM) - binary bitmap - P5(PGM) - binary greymap - P6(PPM) - binary truecolor - </pre> -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.html>Image</a></tt>, - <tt><a href=Image.image.html>Image.image</a></tt>, - <tt><a href=Image.GIF.html>Image.GIF</a></tt> -</blockquote> - -<hr> -<a name=decode> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>decode</b>(string data)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Decodes PNM (PBM/PGM/PPM) data and creates an image object. -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the decoded image as an image object -</blockquote> - - -<h4>NOTE</h4> -<blockquote> -This function may throw errors upon illegal PNM data. -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.PNM.html#encode>encode</a></tt> -</blockquote> - -<hr> -<a name=encode> </a> -<a name=encode_binary> </a> -<a name=encode_P6> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>encode</b>(object image)<br> -string <b>encode_binary</b>(object image)<br> -string <b>encode_P6</b>(object image)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Make a complete PNM file from an image. - -<p> <tt><a href=Image.PNM.html#encode_binary>encode_binary</a></tt>() and <tt><a href=Image.PNM.html#encode_ascii>encode_ascii</a></tt>() - uses the most optimized encoding for this image (bitmap, grey - or truecolor) - P4, P5 or P6 respective P1, P2 or P3. - -<p> <tt><a href=Image.PNM.html#encode>encode</a></tt>() maps to <tt><a href=Image.PNM.html#encode_binary>encode_binary</a></tt>(). -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the encoded image as a string -</blockquote> - - -<h4>KNOWN BUGS</h4> -<blockquote> -Currently only supports type P5 (binary grey) and - P6 (binary truecolor). -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.PNM.html#decode>decode</a></tt> -</blockquote> diff --git a/src/modules/Image/doc/Image.colortable.html b/src/modules/Image/doc/Image.colortable.html deleted file mode 100644 index 8b0d4d38136c195cc96918a4003ca8ba8f55beaf..0000000000000000000000000000000000000000 --- a/src/modules/Image/doc/Image.colortable.html +++ /dev/null @@ -1,682 +0,0 @@ -<title>Pike documentation: Image.colortable</title> -<h2>Image.colortable</h2> - - -<blockquote> -This object keeps colortable information, - mostly for image re-coloring (quantization). - -<p> The object has color reduction, quantisation, - mapping and dithering capabilities. -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.html>Image</a></tt>, - <tt><a href=Image.image.html>Image.image</a></tt>, - <tt><a href=Image.font.html>Image.font</a></tt>, - <tt><a href=Image.GIF.html>Image.GIF</a></tt> -</blockquote> - -<hr> -<a name=%60*> </a> -<a name=%60%60*> </a> -<a name=map> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>map</b>(object image)<br> -object <b>`*</b>(object image)<br> -object <b>``*</b>(object image)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Map colors in an image object to the colors in - the colortable, and creates a new image with the - closest colors. - -<p> <table><tr valign=center> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> - <td>no dither</td> - </tr><tr valign=center> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> - <td><tt><a href=Image.colortable.html#floyd_steinberg>floyd_steinberg</a></tt> dither</td> - </tr><tr valign=center> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> - <td><tt><a href=Image.colortable.html#ordered>ordered</a></tt> dither</td> - </tr><tr valign=center> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> - <td><tt><a href=Image.colortable.html#randomcube>randomcube</a></tt> dither</td> - </tr><tr valign=center> - <td>original</td> - <td>2</td> - <td>4</td> - <td>8</td> - <td>16</td> - <td>32 colors</td> - </tr></table> -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -a new image object -</blockquote> - - -<h4>NOTE</h4> -<blockquote> -Flat (not cube) colortable and not '<tt><a href=Image.colortable.html#full>full</a></tt>' method: - this method does figure out the data needed for - the lookup method, which may take time the first - use of the colortable - the second use is quicker. -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.colortable.html#cubicles>cubicles</a></tt>, - <tt><a href=Image.colortable.html#full>full</a></tt> -</blockquote> - -<hr> -<a name=%60+> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>`+</b>(object with, ...)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -sums colortables -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>object(<ref>colortable</ref>) with</tt> - <dd><tt><a href=Image.colortable.html#colortable>colortable</a></tt> object with colors to add -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the resulting new <ref>colortable</ref> object -</blockquote> - -<hr> -<a name=%60-> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>`-</b>(object with, ...)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -subtracts colortables -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>object(<ref>colortable</ref>) with</tt> - <dd><tt><a href=Image.colortable.html#colortable>colortable</a></tt> object with colors to subtract -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the resulting new <ref>colortable</ref> object -</blockquote> - -<hr> -<a name=add> </a> -<a name=create> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>void <b>create</b>()<br> -void <b>create</b>(array(array(int)) colors)<br> -void <b>create</b>(object(Image.image) image, int number)<br> -void <b>create</b>(object(Image.image) image, int number, array(array(int)) needed)<br> -void <b>create</b>(int r, int g, int b)<br> -void <b>create</b>(int r, int g, int b, array(int) from1, array(int) to1, int steps1, ..., array(int) fromn, array(int) ton, int stepsn)<br> -object <b>add</b>(array(array(int)) colors)<br> -object <b>add</b>(object(Image.image) image, int number)<br> -object <b>add</b>(object(Image.image) image, int number, array(array(int)) needed)<br> -object <b>add</b>(int r, int g, int b)<br> -object <b>add</b>(int r, int g, int b, array(int) from1, array(int) to1, int steps1, ..., array(int) fromn, array(int) ton, int stepsn)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -<tt><a href=Image.colortable.html#create>create</a></tt> initiates a colortable object. - Default is that no colors are in the colortable. - -<p> <tt><a href=Image.colortable.html#add>add</a></tt> takes the same argument(s) as - <tt><a href=Image.colortable.html#create>create</a></tt>, thus adding colors to the colortable. - -<p> The colortable is mostly a list of colors, - or more advanced, colors and weight. - -<p> The colortable could also be a colorcube, with or - without additional scales. A colorcube is the by-far - fastest way to find colors. - -<p> Example: - <pre> - ct=colortable(my_image,256); // the best 256 colors - ct=colortable(my_image,256,({0,0,0})); // black and the best other 255 - -<p> ct=colortable(({({0,0,0}),({255,255,255})})); // black and white - -<p> ct=colortable(6,7,6); // a colortable of 252 colors - ct=colortable(7,7,5, ({0,0,0}),({255,255,255}),11); - // a colorcube of 245 colors, and a greyscale of the rest -> 256 - </pre> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>array(array(int)) colors</tt> - <dd>list of colors -<dt><tt>object(Image.image) image</tt> - <dd>source image - -<p> note: you may not get all colors from image, - max hash size is (probably, set by a <tt>#define</tt>) - 32768 entries, giving - maybe half that number of colors as maximum. -<dt><tt>int number</tt> - <dd>number of colors to get from the image - - 0 (zero) gives all colors in the image. - -<p> Default value is 256. -<dt><tt>array(array(int)) needed</tt> - <dd>needed colors (to optimize selection of others to these given) - - this will add to the total number of colors (see argument 'number') -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>size of sides in the colorcube, must (of course) be equal - or larger than 2 - if smaller, the cube is ignored (no colors). - This could be used to have only scales (like a greyscale) - in the output. -<dt><tt>array(int) fromi</tt> -<dt><tt>array(int) toi</tt> -<dt><tt>int stepi</tt> - <dd>This is to add the possibility of adding a scale - of colors to the colorcube; for instance a grayscale - using the arguments <tt>({0,0,0}),({255,255,255}),17</tt>, - adding a scale from black to white in 17 or more steps. - -<p> Colors already in the cube is used again to add the number - of steps, if possible. - -<p> The total number of colors in the table is therefore - <tt>r*b*g+step1+...+stepn</tt>. -</dl></blockquote> - -<hr> -<a name=cast> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>cast</b>(string to)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -cast the colortable to an array - -<p> example: <tt>(array)Image.colortable(img)</tt> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>string to</tt> - <dd>must be "array". -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the resulting array -</blockquote> - - -<h4>KNOWN BUGS</h4> -<blockquote> -ignores argument (ie <tt>(string)colortable</tt> gives an array) -</blockquote> - -<hr> -<a name=cubicles> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>cubicles</b>()<br> -object <b>cubicles</b>(int r, int g, int b)<br> -object <b>cubicles</b>(int r, int g, int b, int accuracy)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Set the colortable to use the cubicles algorithm to lookup - the closest color. This is a mostly very fast and very - accurate way to find the correct color, and the default - algorithm. - -<p> - The colorspace is divided in small cubes, each cube - containing the colors in that cube. Each cube then gets - a list of the colors in the cube, and the closest from - the corners and midpoints between corners. - -<p> When a color is needed, the algorithm first finds the - correct cube and then compares with all the colors in - the list for that cube. - -<p> example: <tt>colors=Image.colortable(img)->cubicles();</tt> - -<p> algorithm time: between O[m] and O[m * n], - where n is numbers of colors and m is number of pixels - -<p> The arguments can be heavy trimmed for the usage - of your colortable; a large number (10�10�10 or bigger) - of cubicles is recommended when you use the colortable - repeatedly, since the calculation takes much - more time then usage. - -<p> recommended values: - -<p> <pre> - image size setup - 100�100 cubicles(4,5,4) (default) - 1000�1000 cubicles(12,12,12) (factor 2 faster than default) - </pre> - -<p> In some cases, the <tt><a href=Image.colortable.html#full>full</a></tt> method is faster. - -<p> <table><tr valign=center> - <td></td> - <td></td> - <td></td> - </tr><tr valign=center> - <td>original</td> - <td>default cubicles,<br>16 colors</td> - <td>accuracy=200</td> - </tr></table> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>Size, ie how much the colorspace is divided. - Note that the size of each cubicle is at least about 8b, - and that it takes time to calculate them. The number of - cubicles are <tt>r*g*b</tt>, and default is 4,5,4, - ie 80 cubicles. This works good for 200�100 colors. -<dt><tt>int accuracy</tt> - <dd>Accuracy when checking sides of cubicles. - Default is 16. A value of 1 gives complete accuracy, - ie cubicle() method gives exactly the same result - as full(), but takes (in worst case) 16� the time - to calculate. -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the called object -</blockquote> - - -<h4>NOTE</h4> -<blockquote> -this method doesn't figure out the cubicles, this is - done on the first use of the colortable - -<p> Not applicable to colorcube types of colortable. -</blockquote> - -<hr> -<a name=floyd_steinberg> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>floyd_steinberg</b>()<br> -object <b>floyd_steinberg</b>(int dir, int|float forward, int|float downforward, int|float down, int|float downback, int|float factor)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Set dithering method to floyd_steinberg. - - The arguments to this method is for fine-tuning of the - algorithm (for computer graphics wizards). - -<p> <table><tr valign=center> - <td></td> - <td></td> - <td></td> - </tr><tr valign=center> - <td>original</td> - <td>floyd_steinberg to a 4�4�4 colorcube</td> - <td>floyd_steinberg to 16 chosen colors</td> - </tr></table> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int bidir</tt> - <dd>Set algorithm direction of forward. - -1 is backward, 1 is forward, 0 for toggle of direction - each line (default). -<dt><tt>int|float forward</tt> -<dt><tt>int|float downforward</tt> -<dt><tt>int|float down</tt> -<dt><tt>int|float downback</tt> - <dd>Set error correction directions. Default is - forward=7, downforward=1, down=5, downback=3. -<dt><tt>int|float factor</tt> - <dd>Error keeping factor. - Error will increase if more than 1.0 and decrease if less than 1.0. - A value of 0.0 will cancel any dither effects. - Default is 0.95. -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the called object -</blockquote> - -<hr> -<a name=full> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>full</b>()</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Set the colortable to use full scan to lookup the closest color. - -<p> example: <tt>colors=Image.colortable(img)->full();</tt> - -<p> algorithm time: O[n*m], where n is numbers of colors - and m is number of pixels -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the called object -</blockquote> - - -<h4>NOTE</h4> -<blockquote> -Not applicable to colorcube types of colortable. -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.colortable.html#cubicles>cubicles</a></tt>, - <tt><a href=Image.colortable.html#map>map</a></tt> -</blockquote> - -<hr> -<a name=nodither> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>nodither</b>()</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Set no dithering (default). -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the called object -</blockquote> - -<hr> -<a name=ordered> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>ordered</b>()<br> -object <b>ordered</b>(int r, int g, int b)<br> -object <b>ordered</b>(int r, int g, int b, int xsize, int ysize)<br> -object <b>ordered</b>(int r, int g, int b, int xsize, int ysize, int x, int y)<br> -object <b>ordered</b>(int r, int g, int b, int xsize, int ysize, int rx, int ry, int gx, int gy, int bx, int by)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Set ordered dithering, which gives a position-dependent error added - to the pixel values. - -<p> <table><tr valign=center> - <td></td> - <td></td> - <td></td> - <td></td> - </tr><tr valign=top> - <td>original</td> - <td colspan=2>mapped to <br><tt>Image.colortable(6,6,6)-></tt></td> - </tr><tr valign=top> - <td></td> - <td><tt>ordered<br> (42,42,42,2,2)</tt></td> - <td><tt>ordered()</tt></td> - <td><tt>ordered<br> (42,42,42, 8,8,<br> 0,0, 0,1, 1,0)</tt></td> - </tr><tr valign=top> - <td></td> - <td></td> - <td></td> - <td></td> - </tr></table> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>The maximum error. Default is 32, or colorcube steps (256/size). -<dt><tt>int xsize</tt> -<dt><tt>int ysize</tt> - <dd>Size of error matrix. Default is 8�8. - Only values which factors to multiples of 2 and 3 are - possible to choose (2,3,4,6,8,12,...). -<dt><tt>int x</tt> -<dt><tt>int y</tt> -<dt><tt>int rx</tt> -<dt><tt>int ry</tt> -<dt><tt>int gx</tt> -<dt><tt>int gy</tt> -<dt><tt>int bx</tt> -<dt><tt>int by</tt> - <dd>Offset for the error matrix. <tt>x</tt> and <tt>y</tt> is for - both red, green and blue values, the other is individual. -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the called object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.colortable.html#randomcube>randomcube</a></tt>, - <tt><a href=Image.colortable.html#nodither>nodither</a></tt>, - <tt><a href=Image.colortable.html#floyd_steinberg>floyd_steinberg</a></tt>, - <tt><a href=Image.colortable.html#create>create</a></tt> -</blockquote> - -<hr> -<a name=randomcube> </a> -<a name=randomgrey> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>randomcube</b>()<br> -object <b>randomcube</b>(int r, int g, int b)<br> -object <b>randomgrey</b>()<br> -object <b>randomgrey</b>(int err)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Set random cube dithering. - Color choosen is the closest one to color in picture - plus (flat) random error; <tt>color�random(error)</tt>. - -<p> The randomgrey method uses the same random error on red, green - and blue and the randomcube method has three random errors. - -<p> <table><tr valign=center> - <td></td> - <td></td> - <td></td> - </tr><tr valign=top> - <td>original</td> - <td colspan=2>mapped to <br><tt>Image.colortable(4,4,4)-></tt></td> - </tr><tr valign=top> - <td></td> - <td>randomcube()</td> - <td>randomgrey()</td> - </tr><tr valign=top> - <td></td> - <td></td> - <td></td> - </tr></table> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> -<dt><tt>int err</tt> - <dd>The maximum error. Default is 32, or colorcube step. -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the called object -</blockquote> - - -<h4>NOTE</h4> -<blockquote> -<tt><a href=Image.colortable.html#randomgrey>randomgrey</a></tt> method needs colorcube size to be the same on - red, green and blue sides to work properly. It uses the - red colorcube value as default. -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.colortable.html#ordered>ordered</a></tt>, - <tt><a href=Image.colortable.html#nodither>nodither</a></tt>, - <tt><a href=Image.colortable.html#floyd_steinberg>floyd_steinberg</a></tt>, - <tt><a href=Image.colortable.html#create>create</a></tt> -</blockquote> - -<hr> -<a name=reduce> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>reduce</b>(int colors)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -reduces the number of colors - -<p> All needed (see <tt><a href=Image.colortable.html#create>create</a></tt>) colors are kept. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int colors</tt> - <dd>target number of colors -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new <ref>colortable</ref> object -</blockquote> - -<hr> -<a name=spacefactors> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>spacefactors</b>(int r, int g, int b)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Colortable tuning option, this sets the color space - distance factors. This is used when comparing distances - in the colorspace and comparing grey levels. - -<p> Default factors are 3, 4 and 1; blue is much - darker than green. Compare with <tt><a href=Image.image.html#grey>Image.image->grey</a></tt>(). -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the called object -</blockquote> - - -<h4>NOTE</h4> -<blockquote> -This has no sanity check. Some functions may bug - if the factors are to high - color reduction functions - sums grey levels in the image, this could exceed maxint - in the case of high factors. Negative values may - also cause strange effects. *grin* -</blockquote> diff --git a/src/modules/Image/doc/Image.font.html b/src/modules/Image/doc/Image.font.html deleted file mode 100644 index a9824cabdf71ca87bab7713f434d2ed508633327..0000000000000000000000000000000000000000 --- a/src/modules/Image/doc/Image.font.html +++ /dev/null @@ -1,186 +0,0 @@ -<title>Pike documentation: Image.font</title> -<h2>Image.font</h2> - - -<h4>NOTE</h4> -<blockquote> -Short technical documentation on a font file: - This object adds the text-drawing and -creation - capabilities of the <tt><a href=Image.html>Image</a></tt> module. - -<p> For simple usage, see - <tt><a href=Image.font.html#write>write</a></tt> and <tt><a href=Image.font.html#load>load</a></tt>. - -<p> other methods: <tt><a href=Image.font.html#baseline>baseline</a></tt>, - <tt><a href=Image.font.html#height>height</a></tt>, - <tt><a href=Image.font.html#set_xspacing_scale>set_xspacing_scale</a></tt>, - <tt><a href=Image.font.html#set_yspacing_scale>set_yspacing_scale</a></tt>, - <tt><a href=Image.font.html#text_extents>text_extents</a></tt> - - <pre> - struct file_head - { - unsigned INT32 cookie; - 0x464f4e54 - unsigned INT32 version; - 1 - unsigned INT32 chars; - number of chars - unsigned INT32 height; - height of font - unsigned INT32 baseline; - font baseline - unsigned INT32 o[1]; - position of char_head's - } *fh; - struct char_head - { - unsigned INT32 width; - width of this character - unsigned INT32 spacing; - spacing to next character - unsigned char data[1]; - pixmap data (1byte/pixel) - } *ch; - </pre> -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.html>Image</a></tt>, - <tt><a href=Image.image.html>Image.image</a></tt> -</blockquote> - -<hr> -<a name=baseline> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>int <b>baseline</b>()</tt> -</blockquote> - -<h4>RETURNS</h4> - - -<blockquote> -font baseline (pixels from top) -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.font.html#height>height</a></tt>, - <tt><a href=Image.font.html#text_extents>text_extents</a></tt> -</blockquote> - -<hr> -<a name=height> </a> -<a name=text_extents> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>int <b>height</b>()<br> -array(int) <b>text_extents</b>(string text, ...)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Calculate extents of a text-image, - that would be created by calling <tt><a href=Image.font.html#write>write</a></tt> - with the same arguments. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>string text, ...</tt> - <dd>One or more lines of text. -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -an array of width and height -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.font.html#write>write</a></tt>, - <tt><a href=Image.font.html#height>height</a></tt>, - <tt><a href=Image.font.html#baseline>baseline</a></tt> -</blockquote> - -<hr> -<a name=load> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object|int <b>load</b>(string filename)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Loads a font file to this font object. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>string filename</tt> - <dd>Font file -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -zero upon failure, font object upon success -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.font.html#write>write</a></tt> -</blockquote> - -<hr> -<a name=set_xspacing_scale> </a> -<a name=set_yspacing_scale> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>void <b>set_xspacing_scale</b>(float scale)<br> -void <b>set_yspacing_scale</b>(float scale)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Set spacing scale to write characters closer - or more far away. This does not change scale - of character, only the space between them. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>float scale</tt> - <dd>what scale to use -</dl></blockquote> - -<hr> -<a name=write> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>write</b>(string text, ...)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Writes some text; thus creating an image object - that can be used as mask or as a complete picture. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>string text, ...</tt> - <dd>One or more lines of text. -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -an <ref>Image.image</ref> object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.font.html#text_extents>text_extents</a></tt>, - <tt><a href=Image.font.html#load>load</a></tt>, - <tt><a href=Image.image.html#paste_mask>Image.image->paste_mask</a></tt>, - <tt><a href=Image.image.html#paste_alpha_color>Image.image->paste_alpha_color</a></tt> -</blockquote> diff --git a/src/modules/Image/doc/Image.html b/src/modules/Image/doc/Image.html deleted file mode 100644 index b6525554008a90a0eacfd84f7bbb49254b24009a..0000000000000000000000000000000000000000 --- a/src/modules/Image/doc/Image.html +++ /dev/null @@ -1,52 +0,0 @@ -<title>Pike documentation: module Image</title> -<h2>module Image</h2> - - -<blockquote> -This module adds image-drawing and -manipulating - capabilities to pike. - -<p> <table border=0> - <tr> - <td align=left valign=top><tt><a href=Image.image.html>Image.image</a></tt></td> - <td align=left valign=top>Basic image manipulation</td> - </tr> - <tr> - <td align=left valign=top><tt><a href=Image.font.html>Image.font</a></tt></td> - <td align=left valign=top>Creating images from text</td> - </tr> - <tr> - <td align=left valign=top><tt><a href=Image.colortable.html>Image.colortable</a></tt></td> - <td align=left valign=top>Color reduction, quantisation and dither</td> - </tr> - <tr> - <td align=left valign=top><tt><a href=Image.GIF.html>Image.GIF</a></tt></td> - <td align=left valign=top>GIF encoding/decoding capabilities</td> - </tr> - </table> -</blockquote> - - -<h4>NOTE</h4> -<blockquote> -<font size=-1><pre>Image module documentation is based on these file versions: - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - $Id: Image.html,v 1.16 1997/11/10 13:24:27 mirar Exp $ - </pre></font> -</blockquote> diff --git a/src/modules/Image/doc/Image.image.html b/src/modules/Image/doc/Image.image.html deleted file mode 100644 index 1beac4951289aa28f047c8b87175dd7c5cc3115d..0000000000000000000000000000000000000000 --- a/src/modules/Image/doc/Image.image.html +++ /dev/null @@ -1,2275 +0,0 @@ -<title>Pike documentation: Image.image</title> -<h2>Image.image</h2> - - -<blockquote> -The main object of the <tt><a href=Image.html>Image</a></tt> module, this object - is used as drawing area, mask or result of operations. - -<p> init: <tt><a href=Image.image.html#clear>clear</a></tt>, - <tt><a href=Image.image.html#clone>clone</a></tt>, - <tt><a href=Image.image.html#create>create</a></tt>, - <tt><a href=Image.image.html#xsize>xsize</a></tt>, - <tt><a href=Image.image.html#ysize>ysize</a></tt> - -<p> plain drawing: <tt><a href=Image.image.html#box>box</a></tt>, - <tt><a href=Image.image.html#circle>circle</a></tt>, - <tt><a href=Image.image.html#getpixel>getpixel</a></tt>, - <tt><a href=Image.image.html#line>line</a></tt>, - <tt><a href=Image.image.html#setcolor>setcolor</a></tt>, - <tt><a href=Image.image.html#setpixel>setpixel</a></tt>, - <tt><a href=Image.image.html#treshold>treshold</a></tt>, - <tt><a href=Image.image.html#tuned_box>tuned_box</a></tt>, - <tt><a href=Image.image.html#polygone>polygone</a></tt> - -<p> operators: <tt><a href=Image.image.html#%60%26>`&</a></tt>, - <tt><a href=Image.image.html#%60*>`*</a></tt>, - <tt><a href=Image.image.html#%60+>`+</a></tt>, - <tt><a href=Image.image.html#%60->`-</a></tt>, - <tt><a href=Image.image.html#%60|>`|</a></tt> - -<p> pasting images, layers: <tt><a href=Image.image.html#add_layers>add_layers</a></tt>, - <tt><a href=Image.image.html#paste>paste</a></tt>, - <tt><a href=Image.image.html#paste_alpha>paste_alpha</a></tt>, - <tt><a href=Image.image.html#paste_alpha_color>paste_alpha_color</a></tt>, - <tt><a href=Image.image.html#paste_mask>paste_mask</a></tt> - -<p> getting subimages, scaling, rotating: <tt><a href=Image.image.html#autocrop>autocrop</a></tt>, - <tt><a href=Image.image.html#clone>clone</a></tt>, - <tt><a href=Image.image.html#copy>copy</a></tt>, - <tt><a href=Image.image.html#dct>dct</a></tt>, - <tt><a href=Image.image.html#mirrorx>mirrorx</a></tt>, - <tt><a href=Image.image.html#rotate>rotate</a></tt>, - <tt><a href=Image.image.html#rotate_expand>rotate_expand</a></tt>, - <tt><a href=Image.image.html#rotate_ccw>rotate_ccw</a></tt>, - <tt><a href=Image.image.html#rotate_cw>rotate_cw</a></tt>, - <tt><a href=Image.image.html#scale>scale</a></tt>, - <tt><a href=Image.image.html#skewx>skewx</a></tt>, - <tt><a href=Image.image.html#skewx_expand>skewx_expand</a></tt>, - <tt><a href=Image.image.html#skewy>skewy</a></tt>, - <tt><a href=Image.image.html#skewy_expand>skewy_expand</a></tt> - -<p> calculation by pixels: <tt><a href=Image.image.html#apply_matrix>apply_matrix</a></tt>, - <tt><a href=Image.image.html#change_color>change_color</a></tt>, - <tt><a href=Image.image.html#color>color</a></tt>, - <tt><a href=Image.image.html#distancesq>distancesq</a></tt>, - <tt><a href=Image.image.html#grey>grey</a></tt>, - <tt><a href=Image.image.html#invert>invert</a></tt>, - <tt><a href=Image.image.html#map_closest>map_closest</a></tt>, - <tt><a href=Image.image.html#map_fast>map_fast</a></tt>, - <tt><a href=Image.image.html#select_colors>select_colors</a></tt>, - <tt><a href=Image.image.html#modify_by_intensity>modify_by_intensity</a></tt>, - <tt><a href=Image.image.html#select_from>select_from</a></tt>, - <tt><a href=Image.image.html#rgb_to_hsv>rgb_to_hsv</a></tt>, - <tt><a href=Image.image.html#hsv_to_rgb>hsv_to_rgb</a></tt> - -<p> converting to other datatypes: - <tt><a href=Image.GIF.html>Image.GIF</a></tt>, - <tt><a href=Image.PNG.html>Image.PNG</a></tt> - -<p> special pattern drawing: - <tt><a href=Image.image.html#noise>noise</a></tt>, - <tt><a href=Image.image.html#turbulence>turbulence</a></tt> -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.html>Image</a></tt>, - <tt><a href=Image.font.html>Image.font</a></tt> -</blockquote> - -<hr> -<a name=%60%26> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>`&</b>(object operand)<br> -object <b>`&</b>(array(int) color)<br> -object <b>`&</b>(int value)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -makes a new image out of the minimum pixels values -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>object operand</tt> - <dd>the other image to compare with; - the images must have the same size. -<dt><tt>array(int) color</tt> - <dd>an array in format ({r,g,b}), this is equal - to using an uniform-colored image. -<dt><tt>int value</tt> - <dd>equal to ({value,value,value}). -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#%60->`-</a></tt>, - <tt><a href=Image.image.html#%60+>`+</a></tt>, - <tt><a href=Image.image.html#%60|>`|</a></tt>, - <tt><a href=Image.image.html#%60*>`*</a></tt>, - <tt><a href=Image.image.html#add_layers>add_layers</a></tt> -</blockquote> - -<hr> -<a name=%60*> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>`*</b>(object operand)<br> -object <b>`*</b>(array(int) color)<br> -object <b>`*</b>(int value)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Multiplies pixel values and creates a new image. - -<p> This can be useful to lower the values of an image, - making it greyer, for instance: - -<p> <pre>image=image*128+64;</pre> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>object operand</tt> - <dd>the other image to multiply with; - the images must have the same size. -<dt><tt>array(int) color</tt> - <dd>an array in format ({r,g,b}), this is equal - to using an uniform-colored image. -<dt><tt>int value</tt> - <dd>equal to ({value,value,value}). -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#%60->`-</a></tt>, - <tt><a href=Image.image.html#%60+>`+</a></tt>, - <tt><a href=Image.image.html#%60|>`|</a></tt>, - <tt><a href=Image.image.html#%60%26>`&</a></tt>, - <tt><a href=Image.image.html#add_layers>add_layers</a></tt> -</blockquote> - -<hr> -<a name=%60+> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>`+</b>(object operand)<br> -object <b>`+</b>(array(int) color)<br> -object <b>`+</b>(int value)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -adds two images; values are truncated at 255. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>object operand</tt> - <dd>the image which to add. -<dt><tt>array(int) color</tt> - <dd>an array in format ({r,g,b}), this is equal - to using an uniform-colored image. -<dt><tt>int value</tt> - <dd>equal to ({value,value,value}). -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#%60->`-</a></tt>, - <tt><a href=Image.image.html#%60|>`|</a></tt>, - <tt><a href=Image.image.html#%60%26>`&</a></tt>, - <tt><a href=Image.image.html#%60*>`*</a></tt>, - <tt><a href=Image.image.html#add_layers>add_layers</a></tt> -</blockquote> - -<hr> -<a name=%60-> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>`-</b>(object operand)<br> -object <b>`-</b>(array(int) color)<br> -object <b>`-</b>(int value)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -makes a new image out of the difference -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>object operand</tt> - <dd>the other image to compare with; - the images must have the same size. -<dt><tt>array(int) color</tt> - <dd>an array in format ({r,g,b}), this is equal - to using an uniform-colored image. -<dt><tt>int value</tt> - <dd>equal to ({value,value,value}). -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#%60+>`+</a></tt>, - <tt><a href=Image.image.html#%60|>`|</a></tt>, - <tt><a href=Image.image.html#%60%26>`&</a></tt>, - <tt><a href=Image.image.html#%60*>`*</a></tt>, - <tt><a href=Image.image.html#add_layers>add_layers</a></tt> -</blockquote> - -<hr> -<a name=%60|> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>`|</b>(object operand)<br> -object <b>`|</b>(array(int) color)<br> -object <b>`|</b>(int value)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -makes a new image out of the maximum pixels values -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>object operand</tt> - <dd>the other image to compare with; - the images must have the same size. -<dt><tt>array(int) color</tt> - <dd>an array in format ({r,g,b}), this is equal - to using an uniform-colored image. -<dt><tt>int value</tt> - <dd>equal to ({value,value,value}). -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#%60->`-</a></tt>, - <tt><a href=Image.image.html#%60+>`+</a></tt>, - <tt><a href=Image.image.html#%60%26>`&</a></tt>, - <tt><a href=Image.image.html#%60*>`*</a></tt>, - <tt><a href=Image.image.html#add_layers>add_layers</a></tt> -</blockquote> - -<hr> -<a name=add_layers> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>add_layers</b>(array(int|object)) layer0, ...)<br> -object <b>add_layers</b>(int x1, int y1, int x2, int y2, array(int|object)) layer0, ...)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Using the called object as base, adds layers using masks, - opaque channel values and special methods. - -<p> The destination image can also be cropped, thus - speeding up the process. - -<p> Each array in the layers array is one of: - <pre> - ({object image,object|int mask}) - ({object image,object|int mask,int opaque_value}) - ({object image,object|int mask,int opaque_value,int method}) - </pre> - Given 0 as mask means the image is totally opaque. - -<p> Default opaque value is 255, only using the mask. - -<p> Methods for now are: - <pre> - 0 no operation (just paste with mask, default) - 1 maximum (`|) - 2 minimum (`&) - 3 multiply (`*) - 4 add (`+) - 5 diff (`-) - </pre> - The layer image and the current source are calculated - through the given method and then pasted using the mask - and the opaque channel value. - -<p> All given images must be the same size. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>array(int|object) layer0</tt> - <dd>image to paste -<dt><tt>int x1</tt> -<dt><tt>int y1</tt> -<dt><tt>int x2</tt> -<dt><tt>int y2</tt> - <dd>rectangle for cropping -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -a new image object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#paste_mask>paste_mask</a></tt>, - <tt><a href=Image.image.html#paste_alpha>paste_alpha</a></tt>, - <tt><a href=Image.image.html#paste_alpha_color>paste_alpha_color</a></tt>, - <tt><a href=Image.image.html#%60|>`|</a></tt>, - <tt><a href=Image.image.html#%60%26>`&</a></tt>, - <tt><a href=Image.image.html#%60*>`*</a></tt>, - <tt><a href=Image.image.html#%60+>`+</a></tt>, - <tt><a href=Image.image.html#%60->`-</a></tt> -</blockquote> - -<hr> -<a name=apply_matrix> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>apply_matrix</b>(array(array(int|array(int))) matrix)<br> -object <b>apply_matrix</b>(array(array(int|array(int))) matrix, int r, int g, int b)<br> -object <b>apply_matrix</b>(array(array(int|array(int))) matrix, int r, int g, int b, int|float div)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Applies a pixel-transform matrix, or filter, to the image. - - <pre> - 2 2 - pixel(x,y)= base+ k ( sum sum pixel(x+k-1,y+l-1)*matrix(k,l) ) - k=0 l=0 - </pre> - - 1/k is sum of matrix, or sum of matrix multiplied with div. - base is given by r,g,b and is normally black. - -<p> <table><tr><td rowspan=2> - blur (ie a 2d gauss function): - <pre> - ({({1,2,1}), - ({2,5,2}), - ({1,2,1})}) - </pre> - </td><td> - - </td><td> - - </td></tr> - <tr><td></td><td>original</td> - - <tr><td> - sharpen (k>8, preferably 12 or 16): - <pre> - ({({-1,-1,-1}), - ({-1, k,-1}), - ({-1,-1,-1})}) - </pre> - </td><td> - - </td></tr> - -<p> <tr><td> - edge detect: - <pre> - ({({1, 1,1}), - ({1,-8,1}), - ({1, 1,1})}) - </pre> - </td><td> - - </td></tr> - -<p> <tr><td> - horisontal edge detect (get the idea): - <pre> - ({({0, 0,0}), - ({1,-2,1}), - ({0, 0,0})}) - </pre> - </td><td> - - </td></tr> - -<p> <tr><td rowspan=2> - emboss (might prefer to begin with a <tt><a href=Image.image.html#grey>grey</a></tt> image): - <pre> - ({({2, 1, 0}), - ({1, 0,-1}), - ({0,-1,-2})}), 128,128,128, 3 - </pre> - </td><td> - - </td><td> - - </td></tr> - <tr><td></td><td>greyed</td></tr></table> - -<p> This function is not very fast -- and it's hard to - optimize it more, not using assembler. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>array(array(int|array(int)))</tt> - <dd>the matrix; innermost is a value or an array with red, green, blue - values for red, green, blue separation. -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>base level of result, default is zero -<dt><tt>int|float div</tt> - <dd>division factor, default is 1.0. -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - -<hr> -<a name=autocrop> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>autocrop</b>()<br> -object <b>autocrop</b>(int border)<br> -object <b>autocrop</b>(int border, int r, int g, int b)<br> -object <b>autocrop</b>(int border, int left, int right, int top, int bottom)<br> -object <b>autocrop</b>(int border, int left, int right, int top, int bottom, int r, int g, int b)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Removes "unneccesary" borders around the image, adds one of - its own if wanted to, in selected directions. - -<p> "Unneccesary" is all pixels that are equal -- ie if all the same pixels - to the left are the same color, that column of pixels are removed. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int border</tt> - <dd>added border size in pixels -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>color of the new border -<dt><tt>int left</tt> -<dt><tt>int right</tt> -<dt><tt>int top</tt> -<dt><tt>int bottom</tt> - <dd>which borders to scan and cut the image; - a typical example is removing the top and bottom unneccesary - pixels: - <pre>img=img->autocrop(0, 0,0,1,1);</pre> -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#copy>copy</a></tt> -</blockquote> - -<hr> -<a name=box> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>box</b>(int x1, int y1, int x2, int y2)<br> -object <b>box</b>(int x1, int y1, int x2, int y2, int r, int g, int b)<br> -object <b>box</b>(int x1, int y1, int x2, int y2, int r, int g, int b, int alpha)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Draws a filled rectangle on the image. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int x1</tt> -<dt><tt>int y1</tt> -<dt><tt>int x2</tt> -<dt><tt>int y2</tt> - <dd>box corners -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>color of the box -<dt><tt>int alpha</tt> - <dd>alpha value -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the object called -</blockquote> - -<hr> -<a name=cast> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>cast</b>(string type)</tt> -</blockquote> - -<h4>RETURNS</h4> - - -<blockquote> -the image data as a string ("rgbrgbrgb...") -</blockquote> - - -<h4>KNOWN BUGS</h4> -<blockquote> -always casts to string... -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#toppm>toppm</a></tt>, - <tt><a href=Image.image.html#togif>togif</a></tt>, - <tt><a href=Image.image.html#tozbgr>tozbgr</a></tt>, - <tt><a href=Image.image.html#to8bit>to8bit</a></tt>, - <tt><a href=Image.image.html#to8bit_rgbcube>to8bit_rgbcube</a></tt> -</blockquote> - -<hr> -<a name=change_color> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>change_color</b>(int tor, int tog, int tob)<br> -object <b>change_color</b>(int fromr, int fromg, int fromb, int tor, int tog, int tob)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Changes one color (exakt match) to another. - If non-exakt-match is preferred, check <tt><a href=Image.image.html#distancesq>distancesq</a></tt> - and <tt><a href=Image.image.html#paste_alpha_color>paste_alpha_color</a></tt>. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int tor</tt> -<dt><tt>int tog</tt> -<dt><tt>int tob</tt> - <dd>destination color and next current color -<dt><tt>int fromr</tt> -<dt><tt>int fromg</tt> -<dt><tt>int fromb</tt> - <dd>source color, default is current color -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -a new (the destination) image object -</blockquote> - -<hr> -<a name=circle> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>circle</b>(int x, int y, int rx, int ry)<br> -object <b>circle</b>(int x, int y, int rx, int ry, int r, int g, int b)<br> -object <b>circle</b>(int x, int y, int rx, int ry, int r, int g, int b, int alpha)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Draws a line on the image. The line is <i>not</i> antialiased. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int x</tt> -<dt><tt>int y</tt> - <dd>circle center -<dt><tt>int rx</tt> -<dt><tt>int ry</tt> - <dd>circle radius in pixels -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>color -<dt><tt>int alpha</tt> - <dd>alpha value -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the object called -</blockquote> - -<hr> -<a name=clear> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>void <b>clear</b>()<br> -void <b>clear</b>(int r, int g, int b)<br> -void <b>clear</b>(int r, int g, int b, int alpha)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -gives a new, cleared image with the same size of drawing area -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>color of the new image -<dt><tt>int alpha</tt> - <dd>new default alpha channel value -</dl></blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#copy>copy</a></tt>, - <tt><a href=Image.image.html#clone>clone</a></tt> -</blockquote> - -<hr> -<a name=clone> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>clone</b>()<br> -object <b>clone</b>(int xsize, int ysize)<br> -object <b>clone</b>(int xsize, int ysize, int r, int g, int b)<br> -object <b>clone</b>(int xsize, int ysize, int r, int g, int b, int alpha)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Copies to or initialize a new image object. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int xsize</tt> -<dt><tt>int ysize</tt> - <dd>size of (new) image in pixels, called image - is cropped to that size -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>current color of the new image, - default is black. - Will also be the background color if the cloned image - is empty (no drawing area made). -<dt><tt>int alpha</tt> - <dd>new default alpha channel value -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#copy>copy</a></tt>, - <tt><a href=Image.image.html#create>create</a></tt> -</blockquote> - -<hr> -<a name=color> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>color</b>()<br> -object <b>color</b>(int value)<br> -object <b>color</b>(int r, int g, int b)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Colorize an image. - -<p> The red, green and blue values of the pixels are multiplied - with the given value(s). This works best on a grey image... - -<p> The result is divided by 255, giving correct pixel values. - -<p> If no arguments are given, the current color is used as factors. - -<p> <table><tr valign=center> - <td></td> - <td></td> - </tr><tr valign=center> - <td>original</td> - <td>->color(128,128,255);</td> - </tr></table> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>red, green, blue factors -<dt><tt>int value</tt> - <dd>factor -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#grey>grey</a></tt>, - <tt><a href=Image.image.html#%60*>`*</a></tt>, - <tt><a href=Image.image.html#modify_by_intensity>modify_by_intensity</a></tt> -</blockquote> - -<hr> -<a name=copy> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>copy</b>()<br> -object <b>copy</b>(int x1, int y1, int x2, int y2)<br> -object <b>copy</b>(int x1, int y1, int x2, int y2, int r, int g, int b)<br> -object <b>copy</b>(int x1, int y1, int x2, int y2, int r, int g, int b, int alpha)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Copies this part of the image. The requested area can - be smaller, giving a cropped image, or bigger - - the new area will be filled with the given or current color. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int x1</tt> -<dt><tt>int y1</tt> -<dt><tt>int x2</tt> -<dt><tt>int y2</tt> - <dd>The requested new area. Default is the old image size. -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>color of the new image -<dt><tt>int alpha</tt> - <dd>new default alpha channel value -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -a new image object -</blockquote> - - -<h4>NOTE</h4> -<blockquote> -<tt><a href=Image.image.html#clone>clone</a></tt>(void) and <tt><a href=Image.image.html#copy>copy</a></tt>(void) does the same - operation -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#clone>clone</a></tt>, - <tt><a href=Image.image.html#autocrop>autocrop</a></tt> -</blockquote> - -<hr> -<a name=create> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>void <b>create</b>()<br> -void <b>create</b>(int xsize, int ysize)<br> -void <b>create</b>(int xsize, int ysize, int r, int g, int b)<br> -void <b>create</b>(int xsize, int ysize, int r, int g, int b, int alpha)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Initializes a new image object. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int xsize</tt> -<dt><tt>int ysize</tt> - <dd>size of (new) image in pixels -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>background color (will also be current color), - default color is black -<dt><tt>int alpha</tt> - <dd>default alpha channel value -</dl></blockquote> - - -<h4>KNOWN BUGS</h4> -<blockquote> -SIGSEGS can be caused if the size is too big, due - to unchecked overflow - - (xsize*ysize)&MAXINT is small enough to allocate. -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#copy>copy</a></tt>, - <tt><a href=Image.image.html#clone>clone</a></tt>, - <tt><a href=Image.image.html>Image.image</a></tt> -</blockquote> - -<hr> -<a name=dct> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>dct</b>(int newx, int newy)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Scales the image to a new size. - - Method for scaling is rather complex; - the image is transformed via a cosine transform, - and then resampled back. - -<p> This gives a quality-conserving upscale, - but the algorithm used is n*n+n*m, where n - and m is pixels in the original and new image. - -<p> Recommended wrapping algorithm is to scale - overlapping parts of the image-to-be-scaled. - -<p> This functionality is actually added as an - true experiment, but works... -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int newx</tt> -<dt><tt>int newy</tt> - <dd>new image size in pixels -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - - -<h4>NOTE</h4> -<blockquote> -Do NOT use this function if you don't know what - you're dealing with! Read some signal theory first... -</blockquote> - -<hr> -<a name=distancesq> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>distancesq</b>()<br> -object <b>distancesq</b>(int r, int g, int b)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Makes an grey-scale image, for alpha-channel use. - - The given value (or current color) are used for coordinates - in the color cube. Each resulting pixel is the - distance from this point to the source pixel color, - in the color cube, squared, rightshifted 8 steps: - -<p> <pre> - p = pixel color - o = given color - d = destination pixel - d.red=d.blue=d.green= - ((o.red-p.red)�+(o.green-p.green)�+(o.blue-p.blue)�)>>8 - </pre> - -<p> <table><tr valign=center> - <td></td> - <td></td> - </tr><tr valign=center> - <td>original</td> - <td>->distancesq(255,0,128);</td> - </tr></table> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>red, green, blue coordinates -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#select_from>select_from</a></tt> -</blockquote> - -<hr> -<a name=frompnm> </a> -<a name=fromppm> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object|string <b>frompnm</b>(string pnm)<br> -object|string <b>fromppm</b>(string pnm)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -<b>compability method</b> - do not use in new programs. - - See <tt><a href=Image.PNM.decode.html>Image.PNM.decode</a></tt>(). -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>string pnm</tt> - <dd>pnm data, as a string -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the called object or a hint of what wronged. -</blockquote> - -<hr> -<a name=getpixel> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>array(int) <b>getpixel</b>(int x, int y)</tt> -</blockquote> - -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int x</tt> -<dt><tt>int y</tt> - <dd>position of the pixel -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -color of the requested pixel -- ({int red,int green,int blue}) -</blockquote> - -<hr> -<a name=gif_add> </a> -<a name=gif_add*> </a> -<a name=gif_add_fs> </a> -<a name=gif_add_fs_nomap> </a> -<a name=gif_add_nomap> </a> -<a name=gif_begin> </a> -<a name=gif_end> </a> -<a name=gif_netscape_loop> </a> -<a name=togif> </a> -<a name=togif_fs> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>gif_begin</b>()<br> -string <b>gif_begin</b>(int num_colors)<br> -string <b>gif_begin</b>(array(array(int)) colors)<br> -string <b>gif_end</b>()<br> -string <b>gif_netscape_loop</b>(int loops)<br> -string <b>togif</b>()<br> -string <b>togif</b>(int trans_r, int trans_g, int trans_b)<br> -string <b>togif</b>(int num_colors, int trans_r, int trans_g, int trans_b)<br> -string <b>togif</b>(array(array(int)) colors, int trans_r, int trans_g, int trans_b)<br> -string <b>togif_fs</b>()<br> -string <b>togif_fs</b>(int trans_r, int trans_g, int trans_b)<br> -string <b>togif_fs</b>(int num_colors, int trans_r, int trans_g, int trans_b)<br> -string <b>togif_fs</b>(array(array(int)) colors, int trans_r, int trans_g, int trans_b)<br> -string <b>gif_add</b>()<br> -string <b>gif_add_fs</b>()<br> -string <b>gif_add_nomap</b>()<br> -string <b>gif_add_fs_nomap</b>()<br> -string <b>gif_add*</b>(int x, int y)<br> -string <b>gif_add*</b>(int x, int y, int delay_cs)<br> -string <b>gif_add*</b>(int x, int y, int num_colors, int delay_cs)<br> -string <b>gif_add*</b>(int x, int y, array(array(int)) colors, int delay_cs)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -old GIF API compatibility function. Don't use - in any new code. - -<p> <table> - <tr><td></td><td>is replaced by</td></tr> - <tr><td>gif_begin</td><td><tt><a href=Image.GIF.header_block.html>Image.GIF.header_block</a></tt></td></tr> - <tr><td>gif_end</td><td><tt><a href=Image.GIF.end_block.html>Image.GIF.end_block</a></tt></td></tr> - <tr><td>gif_netscape_loop</td><td><tt><a href=Image.GIF.netscape_loop_block.html>Image.GIF.netscape_loop_block</a></tt></td></tr> - <tr><td>togif</td><td><tt><a href=Image.GIF.encode.html>Image.GIF.encode</a></tt></td></tr> - <tr><td>togif_fs</td><td><tt><a href=Image.GIF.encode.html>Image.GIF.encode</a></tt>�</td></tr> - <tr><td>gif_add</td><td><tt><a href=Image.GIF.render_block.html>Image.GIF.render_block</a></tt>��</td></tr> - <tr><td>gif_add_fs</td><td><tt><a href=Image.GIF.render_block.html>Image.GIF.render_block</a></tt>�</td></tr> - <tr><td>gif_add_nomap</td><td><tt><a href=Image.GIF.render_block.html>Image.GIF.render_block</a></tt>�</td></tr> - <tr><td>gif_add_fs_nomap</td><td><tt><a href=Image.GIF.render_block.html>Image.GIF.render_block</a></tt>��</td></tr> - </table> - -<p> � Use <tt><a href=Image.colortable.html>Image.colortable</a></tt> to get whatever dithering - you want. - -<p> � local map toggle is sent as an argument -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -GIF data. -</blockquote> - -<hr> -<a name=grey> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>grey</b>()<br> -object <b>grey</b>(int r, int g, int b)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Makes a grey-scale image (with weighted values). - -<p> - <table><tr valign=center> - <td></td> - <td></td> - <td></td> - </tr><tr valign=center> - <td>original</td> - <td>->grey();</td> - <td>->grey(0,0,255);</td> - </tr></table> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>weight of color, default is r=87,g=127,b=41, - which should be pretty accurate of what the eyes see... -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#color>color</a></tt>, - <tt><a href=Image.image.html#%60*>`*</a></tt>, - <tt><a href=Image.image.html#modify_by_intensity>modify_by_intensity</a></tt> -</blockquote> - -<hr> -<a name=hsv_to_rgb> </a> -<a name=rgb_to_hsv> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>rgb_to_hsv</b>()<br> -object <b>hsv_to_rgb</b>()</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Converts RGB data to HSV data, or the other way around. - When converting to HSV, the resulting data is stored like this: - pixel.r = h; pixel.g = s; pixel.b = v; - -<p> When converting to RGB, the input data is asumed to be placed in - the pixels as above. - -<p> <table><tr valign=center> - <td></td> - <td></td> - <td></td> - </tr><tr valign=center> - <td>original</td> - <td>->hsv_to_rgb();</td> - <td>->rgb_to_hsv();</td> - </tr><tr valign=center> - <td></td> - <td></td> - <td></td> - </tr><tr valign=center> - <td>tuned box (below)</td> - <td>the rainbow (below)</td> - <td>same, but rgb_to_hsv()</td> - </tr></table> - -<p> - HSV to RGB calculation: - <pre> - in = input pixel - out = destination pixel - h=-pos*c_angle*3.1415/(float)NUM_SQUARES; - out.r=(in.b+in.g*cos(in.r)); - out.g=(in.b+in.g*cos(in.r + pi*2/3)); - out.b=(in.b+in.g*cos(in.r + pi*4/3)); - </pre> - -<p> RGB to HSV calculation: Hmm. - <pre> - </pre> - -<p> Example: Nice rainbow. - <pre> - object i = Image.image(200,200); - i = i->tuned_box(0,0, 200,200, - ({ ({ 255,255,128 }), ({ 0,255,128 }), - ({ 255,255,255 }), ({ 0,255,255 })})) - ->hsv_to_rgb(); - </pre> -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - -<hr> -<a name=invert> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>invert</b>()</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Invert an image. Each pixel value gets to be 255-x, where x - is the old value. - -<p> <table><tr valign=center> - <td></td> - <td></td> - <td></td> - </tr><tr valign=center> - <td>original</td> - <td>->invert();</td> - <td>->rgb_to_hsv()->invert()->hsv_to_rgb();</td> - </tr></table> -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - -<hr> -<a name=line> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>line</b>(int x1, int y1, int x2, int y2)<br> -object <b>line</b>(int x1, int y1, int x2, int y2, int r, int g, int b)<br> -object <b>line</b>(int x1, int y1, int x2, int y2, int r, int g, int b, int alpha)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Draws a line on the image. The line is <i>not</i> antialiased. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int x1</tt> -<dt><tt>int y1</tt> -<dt><tt>int x2</tt> -<dt><tt>int y2</tt> - <dd>line endpoints -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>color -<dt><tt>int alpha</tt> - <dd>alpha value -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the object called -</blockquote> - -<hr> -<a name=map_closest> </a> -<a name=map_fast> </a> -<a name=map_fs> </a> -<a name=select_colors> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>map_closest</b>(array(array(int)) colors)<br> -object <b>map_fast</b>(array(array(int)) colors)<br> -object <b>map_fs</b>(array(array(int)) colors)<br> -array <b>select_colors</b>(int num)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Compatibility functions. Do not use! - -<p> Replacement examples: - -<p> Old code: - <pre>img=map_fs(img->select_colors(200));</pre> - New code: - <pre>img=Image.colortable(img,200)->floyd_steinberg()->map(img);</pre> - -<p> Old code: - <pre>img=map_closest(img->select_colors(17)+({({255,255,255}),({0,0,0})}));</pre> - New code: - <pre>img=Image.colortable(img,19,({({255,255,255}),({0,0,0})}))->map(img);</pre> -</blockquote> - -<hr> -<a name=mirrorx> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>mirrorx</b>()</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -mirrors an image: - <table><tr valign=center> - <td></td> - <td></td> - </tr><tr valign=center> - <td>original</td> - <td>->mirrorx();</td> - </tr></table> -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - -<hr> -<a name=mirrory> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>mirrory</b>()</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -mirrors an image: - <table><tr valign=center> - <td></td> - <td></td> - </tr><tr valign=center> - <td>original</td> - <td>->mirrory();</td> - </tr></table> -</blockquote> - -<hr> -<a name=modify_by_intensity> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>modify_by_intensity</b>(int r, int g, int b, int|array(int) v1, ..., int|array(int) vn)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Recolor an image from intensity values. - -<p> For each color an intensity is calculated, from r, g and b factors - (see <tt><a href=Image.image.html#grey>grey</a></tt>), this gives a value between 0 and max. - -<p> The color is then calculated from the values given, v1 representing - the intensity value of 0, vn representing max, and colors between - representing intensity values between, linear. - -<p> <table><tr valign=center> - <td></td> - <td></td> - </tr><tr valign=center> - <td>original</td> - <td>->grey()->modify_by_intensity(1,0,0, 0,({255,0,0}),({0,255,0}));</td> - </tr></table> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>red, green, blue intensity factors -<dt><tt>int|array(int) v1</tt> -<dt><tt>int|array(int) vn</tt> - <dd>destination color -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#grey>grey</a></tt>, - <tt><a href=Image.image.html#%60*>`*</a></tt>, - <tt><a href=Image.image.html#color>color</a></tt> -</blockquote> - -<hr> -<a name=noise> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>void <b>noise</b>(array(float|int|array(int)) colorrange)<br> -void <b>noise</b>(array(float|int|array(int)) colorrange, float scale, float xdiff, float ydiff, float cscale)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Gives a new image with the old image's size, - filled width a 'noise' pattern. - -<p> The random seed may be different with each instance of pike. - -<p> Example: - <tt>->noise( ({0,({255,0,0}), 0.3,({0,255,0}), 0.6,({0,0,255}), 0.8,({255,255,0})}), 0.005,0,0,0.5 );</tt> - <br> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>array(float|int|array(int)) colorrange</tt> - <dd>colorrange table -<dt><tt>float scale</tt> - <dd>default value is 0.1 -<dt><tt>float xdiff</tt> -<dt><tt>float ydiff</tt> - <dd>default value is 0,0 -<dt><tt>float cscale</tt> - <dd>default value is 1 -</dl></blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#turbulence>turbulence</a></tt> -</blockquote> - -<hr> -<a name=paste> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>paste</b>(object image)<br> -object <b>paste</b>(object image, int x, int y)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Pastes a given image over the current image. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>object image</tt> - <dd>image to paste (may be empty, needs to be an image object) -<dt><tt>int x</tt> -<dt><tt>int y</tt> - <dd>where to paste the image; default is 0,0 -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the object called -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#paste_mask>paste_mask</a></tt>, - <tt><a href=Image.image.html#paste_alpha>paste_alpha</a></tt>, - <tt><a href=Image.image.html#paste_alpha_color>paste_alpha_color</a></tt> -</blockquote> - -<hr> -<a name=paste_alpha> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>paste_alpha</b>(object image, int alpha)<br> -object <b>paste_alpha</b>(object image, int alpha, int x, int y)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Pastes a given image over the current image, with - the specified alpha channel value. - - An alpha channel value of 0 leaves nothing of the original - image in the paste area, 255 is meaningless and makes the - given image invisible. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>object image</tt> - <dd>image to paste -<dt><tt>int alpha</tt> - <dd>alpha channel value -<dt><tt>int x</tt> -<dt><tt>int y</tt> - <dd>where to paste the image; default is 0,0 -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the object called -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#paste_mask>paste_mask</a></tt>, - <tt><a href=Image.image.html#paste>paste</a></tt>, - <tt><a href=Image.image.html#paste_alpha_color>paste_alpha_color</a></tt> -</blockquote> - -<hr> -<a name=paste_alpha_color> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>paste_alpha_color</b>(object mask)<br> -object <b>paste_alpha_color</b>(object mask, int x, int y)<br> -object <b>paste_alpha_color</b>(object mask, int r, int g, int b)<br> -object <b>paste_alpha_color</b>(object mask, int r, int g, int b, int x, int y)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Pastes a given color over the current image, - using the given mask as opaque channel. - - A pixel value of 255 makes the result become the color given, - 0 doesn't change anything. - - The masks red, green and blue values are used separately. - If no color are given, the current is used. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>object mask</tt> - <dd>mask image -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>what color to paint with; default is current -<dt><tt>int x</tt> -<dt><tt>int y</tt> - <dd>where to paste the image; default is 0,0 -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the object called -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#paste_mask>paste_mask</a></tt>, - <tt><a href=Image.image.html#paste_alpha>paste_alpha</a></tt>, - <tt><a href=Image.image.html#paste_alpha_color>paste_alpha_color</a></tt> -</blockquote> - -<hr> -<a name=paste_mask> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>paste_mask</b>(object image, object mask)<br> -object <b>paste_mask</b>(object image, object mask, int x, int y)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Pastes a given image over the current image, - using the given mask as opaque channel. - - A pixel value of 255 makes the result become a pixel - from the given image, 0 doesn't change anything. - -<p> The masks red, green and blue values are used separately. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>object image</tt> - <dd>image to paste -<dt><tt>object mask</tt> - <dd>mask image -<dt><tt>int x</tt> -<dt><tt>int y</tt> - <dd>where to paste the image; default is 0,0 -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the object called -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#paste>paste</a></tt>, - <tt><a href=Image.image.html#paste_alpha>paste_alpha</a></tt>, - <tt><a href=Image.image.html#paste_alpha_color>paste_alpha_color</a></tt> -</blockquote> - -<hr> -<a name=polygone> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>polygone</b>(array(int|float) ... curve)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -fills an area with the current color -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>array(int|float) curve</tt> - <dd>curve(s), <tt>({x1,y1,x2,y2,...,xn,yn})</tt>, - automatically closed. - -<p> If any given curve is inside another, it - will make a hole. -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the current object -</blockquote> - - -<h4>NOTE</h4> -<blockquote> -This function is new (april-97) and rather untested. -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#box>box</a></tt>, - <tt><a href=Image.image.html#setcolor>setcolor</a></tt> -</blockquote> - -<hr> -<a name=read_lsb_grey> </a> -<a name=read_lsb_rgb> </a> -<a name=write_lsb_grey> </a> -<a name=write_lsb_rgb> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>write_lsb_rgb</b>(string what)<br> -object <b>write_lsb_grey</b>(string what)<br> -string <b>read_lsb_rgb</b>()<br> -string <b>read_lsb_grey</b>()</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -These functions read/write in the least significant bit - of the image pixel values. The _rgb() functions - read/write on each of the red, green and blue values, - and the grey keeps the same lsb on all three. - -<p> The string is nullpadded or cut to fit. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>string what</tt> - <dd>the hidden message -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the current object or the read string -</blockquote> - -<hr> -<a name=rotate> </a> -<a name=rotate_expand> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>rotate</b>(int|float angle)<br> -object <b>rotate</b>(int|float angle, int r, int g, int b)<br> -object <b>rotate_expand</b>(int|float angle)<br> -object <b>rotate_expand</b>(int|float angle, int r, int g, int b)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Rotates an image a certain amount of degrees (360� is - a complete rotation) counter-clockwise: - -<p> <table><tr valign=center> - <td></td> - <td></td> - <td></td> - </tr><tr valign=center> - <td>original</td> - <td>->rotate(15,255,0,0);</td> - <td>->rotate_expand(15);</td> - </tr></table> - -<p> The "expand" variant of functions stretches the - image border pixels rather then filling with - the given or current color. - -<p> This rotate uses the <tt><a href=Image.image.html#skewx>skewx</a></tt>() and <tt><a href=Image.image.html#skewy>skewy</a></tt>() functions. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int|float angle</tt> - <dd>the number of degrees to rotate -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>color to fill with; default is current -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - -<hr> -<a name=rotate_ccw> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>rotate_ccw</b>()</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -rotates an image counter-clockwise, 90 degrees. - -<p> <table><tr valign=center> - <td></td> - <td></td> - </tr><tr valign=center> - <td>original</td> - <td>->rotate_ccw();</td> - </tr></table> -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - -<hr> -<a name=rotate_cw> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>rotate_cw</b>()</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -rotates an image clockwise, 90 degrees. - -<p> <table><tr valign=center> - <td></td> - <td></td> - </tr><tr valign=center> - <td>original</td> - <td>->rotate_cw();</td> - </tr></table> -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - -<hr> -<a name=scale> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>scale</b>(float factor)<br> -object <b>scale</b>(0.5)<br> -object <b>scale</b>(float xfactor, float yfactor)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -scales the image with a factor, - 0.5 is an optimized case. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>float factor</tt> - <dd>factor to use for both x and y -<dt><tt>float xfactor</tt> -<dt><tt>float yfactor</tt> - <dd>separate factors for x and y -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - -<hr> -<a name=scale> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>scale</b>(int newxsize, int newysize)<br> -object <b>scale</b>(0, int newysize)<br> -object <b>scale</b>(int newxsize, 0)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -scales the image to a specified new size, - if one of newxsize or newysize is 0, - the image aspect ratio is preserved. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int newxsize</tt> -<dt><tt>int newysize</tt> - <dd>new image size in pixels -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - -<hr> -<a name=select_from> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>select_from</b>(int x, int y)<br> -object <b>select_from</b>(int x, int y, int edge_value)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Makes an grey-scale image, for alpha-channel use. - - This is very close to a floodfill. - - The image is scanned from the given pixel, - filled with 255 if the color is the same, - or 255 minus distance in the colorcube, squared, rightshifted - 8 steps (see <tt><a href=Image.image.html#distancesq>distancesq</a></tt>). - -<p> When the edge distance is reached, the scan is stopped. - Default edge value is 30. - This value is squared and compared with the square of the - distance above. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int x</tt> -<dt><tt>int y</tt> - <dd>originating pixel in the image -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#distancesq>distancesq</a></tt> -</blockquote> - -<hr> -<a name=setcolor> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>setcolor</b>(int r, int g, int b)<br> -object <b>setcolor</b>(int r, int g, int b, int alpha)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -set the current color -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>new color -<dt><tt>int alpha</tt> - <dd>new alpha value -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the object called -</blockquote> - -<hr> -<a name=setpixel> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>setpixel</b>(int x, int y)<br> -object <b>setpixel</b>(int x, int y, int r, int g, int b)<br> -object <b>setpixel</b>(int x, int y, int r, int g, int b, int alpha)</tt> -</blockquote> - -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int x</tt> -<dt><tt>int y</tt> - <dd>position of the pixel -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>color -<dt><tt>int alpha</tt> - <dd>alpha value -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the object called -</blockquote> - -<hr> -<a name=skewx> </a> -<a name=skewx_expand> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>skewx</b>(int x)<br> -object <b>skewx</b>(int yfactor)<br> -object <b>skewx</b>(int x, int r, int g, int b)<br> -object <b>skewx</b>(int yfactor, int r, int g, int b)<br> -object <b>skewx_expand</b>(int x)<br> -object <b>skewx_expand</b>(int yfactor)<br> -object <b>skewx_expand</b>(int x, int r, int g, int b)<br> -object <b>skewx_expand</b>(int yfactor, int r, int g, int b)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Skews an image an amount of pixels or a factor; - a skew-x is a transformation: - -<p> <table><tr valign=center> - <td></td> - <td></td> - <td></td> - </tr><tr valign=center> - <td>original</td> - <td>->skewx(15,255,0,0);</td> - <td>->skewx_expand(15);</td> - </tr></table> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int x</tt> - <dd>the number of pixels - The "expand" variant of functions stretches the - image border pixels rather then filling with - the given or current color. -<dt><tt>float yfactor</tt> - <dd>best described as: x=yfactor*this->ysize() -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>color to fill with; default is current -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - -<hr> -<a name=skewy> </a> -<a name=skewy_expand> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>skewy</b>(int y)<br> -object <b>skewy</b>(int xfactor)<br> -object <b>skewy</b>(int y, int r, int g, int b)<br> -object <b>skewy</b>(int xfactor, int r, int g, int b)<br> -object <b>skewy_expand</b>(int y)<br> -object <b>skewy_expand</b>(int xfactor)<br> -object <b>skewy_expand</b>(int y, int r, int g, int b)<br> -object <b>skewy_expand</b>(int xfactor, int r, int g, int b)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Skews an image an amount of pixels or a factor; - a skew-y is a transformation: - -<p> <table><tr valign=center> - <td></td> - <td></td> - <td></td> - </tr><tr valign=center> - <td>original</td> - <td>->skewy(15,255,0,0);</td> - <td>->skewy_expand(15);</td> - </tr></table> - -<p> The "expand" variant of functions stretches the - image border pixels rather then filling with - the given or current color. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int y</tt> - <dd>the number of pixels -<dt><tt>float xfactor</tt> - <dd>best described as: t=xfactor*this->xsize() -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>color to fill with; default is current -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - -<hr> -<a name=threshold> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>threshold</b>()<br> -object <b>threshold</b>(int r, int g, int b)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Makes a black-white image. - -<p> If all red, green, blue parts of a pixel - is larger or equal then the given value, the pixel will become - white, else black. - -<p> This method works fine with the grey method. - -<p> If no arguments are given, the current color is used - for threshold values. - -<p> <table><tr valign=center> - <td></td> - <td></td> - </tr><tr valign=center> - <td>original</td> - <td>->threshold(90,100,110);</td> - </tr></table> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int r</tt> -<dt><tt>int g</tt> -<dt><tt>int b</tt> - <dd>red, green, blue threshold values -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#grey>grey</a></tt> -</blockquote> - -<hr> -<a name=toppm> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>toppm</b>()</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -<b>compability method</b> - do not use in new programs. - - See <tt><a href=Image.PNM.encode.html>Image.PNM.encode</a></tt>(). -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -PPM data -</blockquote> - -<hr> -<a name=tuned_box> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>tuned_box</b>(int x1, int y1, int x2, int y2, array(array(int)) corner_color)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Draws a filled rectangle with colors (and alpha values) tuned - between the corners. - -<p> Tuning function is (1.0-x/xw)*(1.0-y/yw) where x and y is - the distance to the corner and xw and yw are the sides of the - rectangle. - -<p> <table><tr valign=center> - <td></td> - <td></td> - <td></td> - </tr><tr valign=center> - <td>original</td> - <td>solid tuning<br>(blue,red,green,yellow)</td> - <td>tuning transparency<br>(as left + 255,128,128,0)</td> - </tr></table> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int x1</tt> -<dt><tt>int y1</tt> -<dt><tt>int x2</tt> -<dt><tt>int y2</tt> - <dd>rectangle corners -<dt><tt>array(array(int)) corner_color</tt> - <dd>colors of the corners: - <pre> - ({x1y1,x2y1,x1y2,x2y2}) - </pre> - each of these is an array of integeres: - <pre> - ({r,g,b}) or ({r,g,b,alpha}) - </pre> - Default alpha channel value is 0 (opaque). -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the object called -</blockquote> - -<hr> -<a name=turbulence> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>void <b>turbulence</b>(array(float|int|array(int)) colorrange)<br> -void <b>turbulence</b>(array(float|int|array(int)) colorrange, int octaves, float scale, float xdiff, float ydiff, float cscale)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -gives a new image with the old image's size, - filled width a 'turbulence' pattern - -<p> The random seed may be different with each instance of pike. - -<p> Example: <br> - <tt>->turbulence( ({0,({229,204,204}), 0.9,({229,20,20}), 0.9,0}) );</tt> - <br> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>array(float|int|array(int)) colorrange</tt> - <dd>colorrange table -<dt><tt>int octaves</tt> - <dd>default value is 3 -<dt><tt>float scale</tt> - <dd>default value is 0.1 -<dt><tt>float xdiff</tt> -<dt><tt>float ydiff</tt> - <dd>default value is 0,0 -<dt><tt>float cscale</tt> - <dd>default value is 1 -</dl></blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#noise>noise</a></tt> -</blockquote> - -<hr> -<a name=xsize> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>int <b>xsize</b>()</tt> -</blockquote> - -<h4>RETURNS</h4> - - -<blockquote> -the width of the image -</blockquote> - -<hr> -<a name=ysize> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>int <b>ysize</b>()</tt> -</blockquote> - -<h4>RETURNS</h4> - - -<blockquote> -the height of the image -</blockquote> diff --git a/src/modules/Image/doc/illustrations.html b/src/modules/Image/doc/illustrations.html deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/modules/Image/doc/lena.gif b/src/modules/Image/doc/lena.gif deleted file mode 100644 index bb4bb70ad34440bbb5a0165a9bc38e27c59bc52b..0000000000000000000000000000000000000000 Binary files a/src/modules/Image/doc/lena.gif and /dev/null differ diff --git a/src/modules/Image/doc/lena.ppm b/src/modules/Image/doc/lena.ppm deleted file mode 100644 index cf36a9bf0057b6986751438b13c619a22c573941..0000000000000000000000000000000000000000 --- a/src/modules/Image/doc/lena.ppm +++ /dev/null @@ -1,5 +0,0 @@ -P6 -# CREATOR: XV Version 3.10a Rev: 12/29/94 -67 67 -255 -�O<�F;�F;�O<�O<�F;�w�O<qC;�GE�XI�O<�PG�YH�[V�O<�GE�r\�r\�r\�fX��~��~ČČČ��~Ɣ�ČƜ�Ɯ�ؙ�Ȥ�ٵ���~ƣ�Ȥ�ت�Ȥ�Ȥ�Ȥ�ʳ��{e�rX�\G���鷧Ɣ�ٵ�ٵ�ت�Ȥ�ʳ�ʳ�鷧F12F12F12F12F12G74F12qGF�q_�q_�r\�r\�F;�GE�F;�GE�O<qC;ٕo�PI�F;�O<qC;�O<�XI�YH�PG�XI�fX�r\�ga�fX�{e��~��~�{eČ�{e��~��~Ɣ�ČČ�Ɯ�Ɣ�Ɣ�Ɣ��ƣ��ƣ����ě�Ɣ��gNƔ�ت�Čʳ�ت�Ȥ�ʫ�ت�ʫ�ٵ�ٵ�8-+F12G74F12G74F12H9=�[U�fX�r\�r\�{eqC;qC;qC;�O<�O<�[Uٕo�YH�F;�GE�PG�XI�XI�XI�O<�fX�r\�fX�fX�r\�{e�r\��~��~�{e��~DžjČDžj��~Ɣ�ČČƔ�Ɣ�ě�ě�Č���Ɣ�Ɣ����ƣ�Ɯ�Ɯ�ʪ�ت�ʪ�Ȥ�ʪ�ʫ��Ȥ�ʳ��8-+F12F12F12G74F12qTO�q_�r\�r\�r\�r\�GEqC;�O<�F;�O<�r\ֈg�dK�YH�O<�GE�O<�XI�XI�[V�q_�gW�[V�r\�r\�fX�{e��~�r\Č�r\��~Č��~��n��~ČČƔ�Ɯ�Ɣ���~�����~����}zؙ�Čʫ�ت�ت�ƣ�Ȥ�Ȥ�ʫ���q_Ɯ�Ȥ��pa;33F12;33F12H9=H9=�q_�q_�r\�{e�r\�r\�O<qC;�F;�O<qC;�{eֈg�rX�dK�XIqC;�O<�O<�[V�fX�dK�XI�r\�fX�q_�ga�q_�r\�|g�|g�|g�{e�{e�|g�{e�{e��~��~��~Č��~��n��n��oČƜ�ƣ�ʫ�Ȥ�Ɯ�ě�Ȥ�Ȥ�Ȥ�ʫ��|w�{e�q_ě�bC;F12F12F12F12G74�\V�q_�q_�r\�r\�r\�r\qC;qC;�O<qC;�F;��nS�r\�YH�YH�GE�GE�fX�fX�fX�[U�gW�fX�gW�fX�q_�q_�r\�r\�{e�rvDžj�|g�r\��~�{e�{e��~�{e�{e�|w��o��~ČƜ�Ȥ�Ɯ�Ɣ�ƣ�Ȥ�ʪ�ت�Ȥ�ʫ���{i�q_�q_Ȥ�8-+F12F12F12G74X;>�q_�fX�r\�r\�r\�q_�r\qC;qC;qC;�F;t:3˚rٕo�rW�gN�r\�O<�YH�[V�YH�[U�dK�fX�YH�[U�q_�fX�r\�fX�gw�fX�d\�d\�q_�r\�|w�q_�{e�r\�q_�sy�q_��~Ɣ�Ȥ�Ɯ�Ɣ�ě�Ȥ�Ȥ�ت�ت�ʪ�ʫ�ٵ���o�O<qC;����F;;33F12F12G74F12�[U�q_�r\�r\�r\�r\�r\�q_�F;�GE�F;�O<l<=Ɯ��jɃ\�gN�gN�YH�XI�YH�O<�fX�fX�PI�[V�fX�fX�ga�\V�fX�XJ`FHn\w�|w}[uaVdqGF�Q]`FH`FHX;>�pa�|gČƣ�Ɯ�Ȥ�Ɯ�ƣ�Ȥ�Ȥ�Ȥ�ʪ�ٵ���[UqC;qGF�{i��~8-+F12F12F12G74PDB�r\�q_�{e�r\�r\�q_�r\�q_qC;qC;�F;qC;�F;�{i�q�j�[E�cK�O<�XI�GE�fX�YH�PI�fX�[V�XI�fX�XJ�[U�Q]qGF`FH`FHaVd`FHX;>RGYH9=F12F12�d\�r\Ɣ�Ȥ�Ɯ�Ɯ�Ɯ�Ɯ�ě�Ȥ�Ȥ�ت���~�XJbC;qC;�PG��n�{eX;>F12F12F12G74F12�XJ�fX�r\�{e�r\�{e�r\�q_�q_�F;qC;�O<qC;�O<�O<괍�w�dK�q_�fX�GE�cK�fX�O<�[V�[U�YH�fX�[U�[V�XJX;>RGYF12RGY`FHRGY`FH`FHH9=9-5�pa�d\Ɯ�ČƜ�Ɯ�Ɣ�Ɣ�Ɯ�ƣ�ƣ�Ɣ��PGqTOqC;�PG�q_�|g�{eF12F12F12G74F12H9=F12�q_�fX�{e�{e�r\�{i�q_�r\�q_qC;�F;qC;�F;�O<l<=�wٕo�{[�r\�O<�fX�[V�O<�[V�XI�XI�[U�[V�PG`FHH9=H9=H9=H9=oL_H9=`FHRGYF1=`FH�[U�{eȤ�ČƔ������~���Ɣ�Ɯ�Ɣ��d\`FH`FH�oi�{[�{[Džj��~F12;33F12F12F12G74F12�XJ�q_�r\�{e�{e�{e�r\�r\�q_�r\�F;qC;�GE�O<�O<�F;��n�r�}[�{[�GE�fX�GE�YH�O<�[V�fX�O<`FHH9=X;>H9=X;>F12H9=F12X;>RGYRGYF1=�oi��nȤ�Ɯ�Č���������Ɣ����Č�PGX;>`FH}[uqTO�q_ֈg�{[8-+F12H9=F12F12F12F12H9=�d\�[U�{e�{e�{i�r\�{e�{i�r\�r\�O<qC;�F;qC;�O<�GEqC;���ʓq�rX�XI�XI�[U�[U�\V�\V�[UqGFX;>`FHF12;33aVdF1=H9=H9=X;>RGYRGY}[u�paؙ�Ɣ���~�����~���ČƔ�ؙ����n�=>`FH`FH�\V�r\�PG8-+F12F12F12F12;33G74F12qGF�\V�q_�{e�{e�{e�{e�{e�{e�q_�q_qC;qC;�F;�O<�O<�O<�O<Č�r�}[�XI�GE�XI�O<�fX�PG�PGW2=H9=W2=H9=H9=H9=X;>;33F12;33X;>`FH}[u��nČ����{e��~��n��nƜ�圐�ؤ��O<X;>`FHqGF�paX;>F12F12F12G74F12F12F12F12�\V�\V�q_�{e�{e�{e�{e�{e�{e�r\�r\qC;�O<qC;�O<�O<�PG�O<�{e괍�O<�O<�O<�[U�YH�PIl<=H9=H9=;33H9=H9=X;>F12_K_F12;33bC;�XJ�sy�||ČƔ��{e��o���Džj圐章圐章ؤ��dKW11H9=bSQ�q_H9=F12F12F12G74F12F12F12PDB�[U�pa�fX�q_�r\�{i�r\�{i�{e�r\�r\qC;�F;�F;�F;�PI�PG�XI�F;騈�GE�O<�[U�PIqGFW2=H9=PDBF12G74F12H9=H9=RGYCDRF12F12�fXČ�{e�sz�����n����|w�rXDžj�騈圐鷧章騈�|g�=>;33H9=�{iW2=F12F12G74F12F12F12;33�\V�[U��n�q_�q_�q_�pa�q_�q_�r\�q_�{e�F;�F;�F;�GE�XI�PI�XI�O<Džj�O<�XI�YH�XIbC;H9=F12X;>F12H9=F12G74H9=PDB`FHPDB�fX�r\ČČ�oiƔ���o�r\�|gDžj圐騈圐章騈鷧ؙ�qC;H9=F12�syX;>F12F12H9=H9=F12F12X;>�pa�pa�{e�r\�r\�q_�r\�q_�pa�pa�pa�q_qC;�F;�O<�O<�O<�XI�O<�PI�YH�YH�gY�Q]W2=F12RGYF12;33PDBF1=F12H9=H9=X;>;33�[U�{e�{e��nƔ�����ga�r\ֈg圐ؤ�圐章章圐�XIF12H9=�\VqGFF12F12H9=F12F12F12qTO�\V�r\�r\�{e�{i�{e�{e�{i�fX�q_�gY�[U�F;qC;�F;�O<�PI�PI�q_�dKW2=qTO�[VqGFH9=F12aVd8-+H9=F12;33H9=F12PDBH9=�GE�q_Č�{e�����PG�GE�GE�GE�gN圐ؤ�騈ؙ��fXl<=F12F12`FH�\VH9=F12F12F12F12F12�d\�[U�{e�r\�{i�q_�q_�{e�r\�q_�q_�q_�q_qC;�F;�F;�GE�O<�YH�dK�XIH9=�d\qC;X;>RGYH9=RGYF12F12H9=F12;33H9=H9=`FH�pa��~���n����YH�cK�fX�fX�GEqC;�XI�rW�}[ؙ��w�fX�F;l<=�F;g93F12PDB�[UF12G74F12F12F12PDB�[U�q_�r\�q_�r\�q_�q_�q_�r\�q_�q_�q_�q_�F;�O<�F;qC;�q_�gW�r\�rX�fXW2=F12_K_F12RGYF12H9=H9=F12_K_;33F12F12�YH��~Ɯ������og93X;>H9=F12F12F12�YH�[E�gW�}[ؙ�圐�fXW2=F12;33F12H9=F12PDB�[UF12H9=F12F12F12�PG�gY�q_�r\�q_�r\�q_�r\�r\�q_�q_�q_�q_�fXqC;qC;qC;�q_Ƀ\�[E�fX�XIF12G74H9=H9=_K_PDBF12;33_K_;33F12H9=F12qGF��n��ně���n�=>F12X;>H9=W2=ʫ��\VqC;�XI�dK�gN章�{eW2=F12�d\qC;F12H9=F12W2=�paX;>H9=F12F12F12�gY�pa�r\�r\�r\�q_�r\�q_�q_�q_�q_�q_�pa�fX�O<�O<l<=`FH�q_ٵ�qC;F12G74H9=H9=H9=_K_CDRF12F12H9=F12F12F12;33�d\�{eƜ�Č�GE�cK�GE�F;�PG�szٵ��|g�PI�PI�[E�ga�Ĵ�O<�XJoL_��o�GEF12F12F12F12�paX;>F12F12G74bC;�pa�q_�r\�q_�q_�q_�q_�r\�r\�q_�fX�fX�gY�gY�GEF12�\V�q_�q_bC;H9=RGYPDBF1=CDRRGYaVdaVdH9=;33;33F12F12;33�XI�{eČ����PG�gW�r\�r\�[V�YH�[V�fX�|g�ga�YH�fX�rX鷧�|g�fX�PI�GEbC;g93H9=H9=F12�syX;>F12F12F12qTO�XI�r\�q_�r\�q_�q_�q_�q_�q_�fX�q_�pa�[U�pa�cK��o�[UF12H9=;33;33bZwaVdF12H9=aVdH9=aVdF12F12;33F12F12qGF�\VČʳ��F;�YH�gW�ga�|g�tg�rX�|g�}[�|g�ga�fX�\G�gW鷧Ɯ��tg�q_�YH�O<qC;F12F12F12�q_X;>H9=F12F12�\V�pa�r\�r\�r\�q_�r\�q_�fX�fX�q_�gY�fX�q_ٕo�oi�gY}[u`FHH9=H9=RGY`FHCDRF12CDR_K_aVd_K_`FHF12F12F12;33�O<Č�bC;�F;�[E�ga�tg�}[Ƀ\��~Džj�gN�r\�dK�gW鷧��|g�gN�[V�YHqC;W11W2=;33�q_PDBH9=F12H9=�fX�q_�r\�q_�q_�q_�q_�q_�fX�q_�pa�[U�q_ٕo�jqGFqGFF1=F12H9=CDRaVd_K_;33;33F12H9=`FH;33�\VH9=;33F12bSQ�q_Č�d\W2=�XI�[E�r\�rX�}[�tg�ga�gN�gW�gW章章�|g�ga�fX�YHqC;H9=X838-+�fX�XJF1=F12qGF�[U�{e�q_�q_�q_�q_�q_�fX�pa�fX�fX�[Uʓq�jٕobSQaVd`FHRGYX;>F12_K_H9=;33F12;33F12H9=H9=�GE�XJ;33F12�XI���Ɣ�F12X;>�O<�dK�\G�rX�ga�}fֈg�}[�tg�gN�gW�[E�dK��űr\�r\�dK�PIl<=F12X;>F12�oi�\VF12F12�d\�fX�{e�r\�q_�q_�r\�fX�fX�fX�pa�[U��n�q�j�jX;>F1=oL_H9=CDRCDRaVd_K_;33F12;33X;>bC;`FHČqC;;33`FH�PGȤ�F12W11X83�O<�[E�gW�gW�rW�ue�ue�}[�}[�tg�dK�[E�YH�dKDžj��ϱr\�r\�dK�PIW11F12X;>F12�\V�gwF12F12�q_�q_�q_�r\�q_�r\�q_�fX�q_�pa�fX�gYٕo�j�j�jX;>X;>RGYH9=RGYH9=bZwH9=H9=;33F12X;>qGF�PGqTOF12G74�GE��nqTOF12H9=bC;�F;�[E�dK�gW�rX�rW�tg�ue�tg�gN�YH�dK�gW�[EDžj��ɱr\�gW�[V�O<H9=F12X83F12qTO�q_H9=qC;�cK�q_�r\�q_�q_�q_�q_�fX�pa�fX�d\�r\�q�j�j캑;33CDR`FHH9=_K_;33aVdCDRRGYF12F12X;>8-+PDBF1=8-+��nČ�|wF12F12H9=�=>�O<�[E�[E�\G�rX�rX�rX�ue�tg�gN�YH�YH�F;�PI�ga圐�r\�gW�PIl<=F12F12W2=F12`FH�q_X;>�PG�fX�r\�q_�r\�fX�q_�q_�fX�q_�pa�fXɋ[�j�q괍�rW11RGY`FHCDRRGYH9=RGYqg�CDRF12`FH;33PDBX;>X;>`FH�[U��nH9=F12F12H9=qC;�O<�[E�dK�gW�gW�rX�rX�rX�ue�rX�gW�dK�[E�YH��~Ƀ\�ga�[V�XIF12F12F12X;>W2=X;>�q_PDB�pa�fX�{e�q_�q_�q_�fX�q_�pa�pa�cK�[Uٕo�j�r괍騈#(/X;>CDR`FHH9=CDRaVdRGYbZwF12qC;H9=F12qGF�}z�O<���qTOF12F12F12X;>�F;�PG�[E�[E�\G�ga�ga�rW�rX�tg�rX�rX�gN�tgؙ����~�fX�YHqC;F12F12H9=X83W11F12��oqC;�q_�q_�r\�q_�q_�fX�q_�fX�fX�pa�pa�q_�j�r괍괍괍F12RGYPDBH9=F12CDRRGYH9=n\wPDBqGFH9=`FH�{i��oqC;�PG8-+F12H9=W2=G74�PG�O<�[E�dK�gW�\G�\G�gN�rX�gN�ga�gN�r\ؤ�圐Džj�fX�[VF12F12H9=W2=X83X;>8-+�q_�XJ�gW�q_�q_�q_�q_�fX�q_�pa�fX�pa�cK�q_�j�r괍��y괍F12RGYH9=F12H9=X;>H9=RGYH9=qg�;33�gwƔ����l<=�\V9-5X;>F12H9=X;>H9=qC;�F;�YH�dK�dK�\G�r\�gW�[E�gW�gW�gW�\G�OU�gW�[E�PI�YHbC;F12F12H9=W11X;>W11F12�pa�[U�q_�rX�q_�q_�q_�q_�fX�q_�pa�fX�d\�{[�q���괍괍괍H9=H9=F12H9=H9=be�`FHCDRoL_H9=�XJ�q_ٵ�qC;�q_X;>;33H9=F12F12X;>F12bC;qC;�YH�[E�[E�gW�\G�gN�YH�O<�H@�YH�[V�r\�tg�[V�[V�YHF12F12F12F12X;>X83H9=H9=�\V�fX�q_�r\�r\�q_�q_�q_�pa�pa�fX�pa�XIɃ\괍괍괍괍괍H9=RGY;33CDRH9=qv�H9=bZwF12_K_�gw�q_�[U�q_qC;;33F12F12H9=F12W2=F12X;>bC;�O<�PI�YH�[E�gW�ga�\G�[E�[E�dK�\e�ga�\e�fX�r\bC;8-+H9=F12F12bC;X;>W11F12qTO�r\�q_�r\�q_�q_�q_�pa�fX�fX�pa�cK�d\Ƀ\������캑���캑bZwX;>F12H9=_K_aVdbZwF12bZwaVd}[u�r\�fX�XI;33F12F12F12F12F12G74H9=X83W11�F;�O<�PI�YH�[E�dK�r\�dK�[E�[E�YH�[E�fX�r\�F;F12F12F12H9=F12bC;X;>F12X;>`FH�{e�q_�q_�q_�q_�q_�q_�pa�pa�pa�[U�XJDžj�Ø���캑���캑CDRF12H9=H9=_K_aVdbZwaVdH9=}[uPDB�}z�YH8-+F12;33H9=F12F12F12H9=F12X;>H9=bC;qC;�O<�YH�dK�gW�gW�gW�r\�tg�}[�|g�rX�[VF12F12F12H9=F12F12qC;X;>X83X;>`FH�{e�q_�q_�q_�q_�q_�q_�pa�fX�d\�gY�\V˚r�Ø캑���캑���X;>;33F12;33RGYCDRCDRqg�bZwaVd�[UoL_W11;33F12F12F12F12F12F12F12F12F12W11X;>F12l<=�O<�[E�dK�gW�gN�|gɃ\Džj�|g�r\�GEG74F12;33F12H9=F12qC;X;>X;>X;>bC;�{e�fX�q_�q_�gY�q_�gY�pa�pa�[U�d\qTO�r�ԡ괍������괍W2=F12H9=;33CDRn\wH9=_K_bZwaVd}[upZ`;33;33;33H9=F12F12F12F12F12H9=H9=F12X83X;>W11bC;qC;�O<�[U�gW�ga�{e�tg�tg�q_qC;F12F12F12H9=F12H9=qC;X;>X;>X83`FH�q_�PG�XJ�d\�[U�gY�q_�gY�gY�d\�d\�d\���괍괍�r騈�w;8<G74H9=;33H9=qg�RGY;33_K_bZwqg�PDB���F12;33H9=F12H9=;33F12F12F12G74F12F12bC;�O<�YH�gW�gW�gW�fX�rX�r\�ga�{eČ騈��nPDB8-+F12F12F12qGFX;>X;>X;>�\V�fX�PGqTO�O<qTOqTO�PG�XJ�d\�d\�\V�gY����r�r騈�wDžjPDBF12H9=RGYF12bZwaVdCDRqg�H9=aVdRGY~g{bZw8-+W2=F12F12F12F12F12F12F12W2=F12bC;�O<�[V�YH�YH�fX�gW�gN�r\�r\�|gČؤ�ؤ�ؤ���~pZ`;33H9=bC;X;>X83W11�d\�XI�d\�XI�XJ�PGqGFqGFbC;qC;qGFqTO�XJ�r�r騈�wDžjqC;F12RGY8-+bSQH9=;33aVd_K_RGYaVdRGYn\w�XJX;>qegF12F12X;>;33;33F12F12F12H9=X83X;>�GE�XI�YH�YH�gW�gW�dK�gW�rX�|g�wؙ�騈章괍ƣ�F12bC;X;>X;>F12�fX�pa�q_�fX�d\�[U�XJ�XJqTOqC;�PG�PG�XI캑騈�rČX83H9=RGYPDB`FHH9=CDR`FHH9=RGYF12RGY_K_qg�bZwaVdX;>PDB;33H9=F12F12F12F12H9=W11bC;X;>�O<�YH�YH�fX�dK�gW�gW�gN�{eɃ\Čʓqʓq圐騈章鷧Ɯ�F12F12X;>F12�fX�pa�fX�pa�pa�XI�gY�\V�\VqTO�XI�XI��n��y괍˚r�cKG74qC;H9=H9=F12H9=F12;8<;8<RGYH9=H9=_K_qg�bSQbSQ}[u`FH;33G74F12F12F12F12F12X;>�O<F12�O<�XI�dK�gW�gW�\G�gN�rX�|g�}[ֈgČ�wؤ�騈騈鷧ƣ�F12W11F12�r\�pa�fX�gY�fX�gY�gY�d\�\V�XJ�cK�YH�q괍騈DžjqC;bC;bC;F12;33;33_K_F12;33H9=H9=CDRRGYCDRaVdn\wpZ``FH~g{8-+F12H9=F12F12F12F12l<=�O<H9=�F;�[E�dK�dK�gW�r\�gN�rX�rX�{e�}fֈgʓq騈章鷧鷧�Ĵ�d\H9=F12�r\�pa�fX�fX�gY�gY�[U�[U�d\�XI�cKɃ\ۯ�괍�r�q_g93l<=qC;;33;33;33aVdH9=;33;33RGYH9=`FH`FH_K_qg�aVdF12�sz8-+F12X;>;33F12F12G74�F;�O<F12�GE�[E�gW�\G�\G�r\�\G�rX�rX�tg�}[Ƀ\騈騈鷧���鷧Ȥ�F12X;>�r\�pa�fX�q_�gY�gY�d\�d\�XJ�XI�r�r괍괍�j�O<qC;qC;�O<;33;33CDRbSQ;33F12F12;33H9=CDR_K_RGYqg�bZwX;>�r|;33H9=W11F12F12F12H9=�XI�YHH9=�PG�dK�dK�gW�dK�\G�r\�gN�rX�rX�|gɃ\ʓq圐騈章ٵ�鷧�ĴbC;X;>�dK�q_�pa�pa�fX�d\�[U�XI�\V�{[����r����rDžj�F;qC;�O<�GE;33F12H9=PDB;33H9=;33F12H9=H9=_K_bZw~g{bZw���aVdH9=F12F12H9=F12H9=t:3�YH�O<W11�PI�dK�dK�gW�gW�dK�\G�gN�gN�rX�tg�}[ɋ[ؤ�騈章鷧��������nbC;�q_�q_�pa�fX�gY�gY�gY�d\�XIDžj캑�q캑�q�cK�O<qC;�O<qC;;33F12;33X;>;33;33;33F12H9=F12;8<n\waVdPDBH9=X;>bC;`FHbC;X;>F12W11�O<�YH�XIX;>�YH�dK�gW�gN�\G�dK�gW�gN�gN�r\�ue�|gɃ\ʓq圐章鷧鷧鷧ٵ�qC;�pa�fX�gY�gY�gY�[U�gY�d\�XIɃ\�r�q���ֈg�XI�O<l<=�F;bC;G74H9=;33F12;33;33;33;33H9=RGYCDRaVd_K_aVdPDBF12F12F12F12F12F12qC;�O<�YHqC;qC;�dK�gW�\G�r\�\G�dK�dK�gW�gN�gN�tg�|g�|gֈgؙ�ؙ�章章鷧�������pa�fX�d\�pa�pa�pa�gY�d\�[U�pa�cK�r\�r괍�{[�O<qC;qC;l<=bC;;33;33F12;33F12;33F12;8<H9=H9=CDRH9=bZwH9=qg�PDBH9=F12F12F12H9=�F;�PI�YHbC;�PI�dK�\G�r\�\G�gN�gN�\G�gN�gN�gN�rX�tg�}[Ƀ\Č�wؤ�騈鷧鷧鷧��~bC;bC;qTO�O<�\V�[U�gY�pa�r\�cK�q_����q�YHqC;qC;l<=X;>qC;;33;33F12;33G74;33;33F12H9=_K_bZwF12F1=PDBPDBF12F12F128-+F12l<=�O<�PI�O<W11�dK�dK�gW�gN�gN�r\�\G�gN�gW�gN�gN�gN�{[�|gɃ\ֈgƔ�ؤ�章鷧鷧鷧Ɯ�W2=X;>X83X;>X83bC;bC;�[U�q_�{[Ƀ\���Ƀ\�F;X;>l<=X83qC;bC;F12;33F12;33F12;33;33;33;33;8<aVdbZwPDBX;>;33F12;33;33F12W2=�O<�XI�PIX83�XI�dK�dK�dK�gW�gN�gN�gN�\G�gN�dK�r\�gN�rX�tg�|gɃ\ؤ�圐ٵ�鷧鷧鷧bC;qC;qC;X;>W11F12F12F12ٕoɃ\ٕo�r�YHX83X83X;>qC;bC;X;>;33;33;33F12F12H9=;33F12F12G74;33qg�aVdbSQ;33;33;33F12F12qC;�O<�YHX83bC;�[E�dK�dK�gW�\G�gN�gN�gN�gN�dK�dK�\G�r\�rX�rX�|g�}[Džj章章鷧鷧鷧�paqC;qTOqC;X;>X;>F12F12ٕoɋ[ٕo�dKH9=W11H9=bC;bC;X;>X;>;33F12;33;33H9=;33F12;33H9=H9=H9=RGYRGYH9=F12;33;33F12bC;�F;�O<X83bC;�O<�[E�dK�\G�gW�gN�gN�gN�gN�gN�gN�\G�r\�\G�gN�rX�tg�|gɃ\ؙ�ت�騈鷧鷧ت�X;>qGFqGFbC;bC;X;>g93Džjٕo�O<X;>F12X;>X83qGFX;>H9=bC;;33;33;33F12H9=F12CDRF12H9=;8<CDRPDBqg�F128-+;33;33H9=W11F12X;>�O<�PI�YH�[E�dK�gW�\G�r\�\G�gN�gN�gN�rX�gN�dK�gN�gN�rX�rX�}[Džj�wؤ�ت�鷧ٵ����bC;bC;qGFqGFbC;qTOqC;�YH�F;X;>g93X;>X83qGFX;>F12X;>qTO;33;33F12;33H9=;33aVd8-+RGY8-+PDBRGY_K_H9=;33;33F12W11qC;�O<�O<�YH�[E�[E�[E�dK�dK�dK�\G�gN�gN�rX�gN�gN�gN�gN�gN�rX�rX�rX�|g�}[Ƀ\ؙ�ؙ�ؤ�鷧ٵ�鷧�d\bC;qGFqGFqTO�O<�O<�F;qC;qC;qC;X83bC;X;>G74H9=qC;qTO;33H9=H9=9-5PDB;33RGYbZwF12PDBF12H9=RGYH9=;33;33W11�O<�O<�O<�PI�[E�YH�[E�dK�dK�\G�r\�\G�gN�gN�gN�gN�rX�rX�rX�rX�gN�rX�rXɃ\�}[Džjؙ�ؤ�章章ٵ���oX;>bC;`FH�XJ�O<�XI�O<�XI�XIqC;`FHX;>X;>X;>qC;�\V`FHF12H9=F12CDRX;>H9=X;>_K_H9=bSQH9=H9=F12`FHPDBW11qC;�F;�O<�YH�YH�YH�YH�[E�dK�dK�dK�\G�gN�gN�gN�gN�rX�gN�rX�gN�rX�rX�rX�rX�}[�}[�|gʓq�ؤ�章章�`FHbC;`FH�XJ�YH�YH�YH�dK�F;bC;W11X;>X;>bC;�XJaVdX;>F12H9=H9=_K_;33;33CDR_K_H9=bZw;33H9=F12F12W2=qC;�F;�O<�O<�YH�YH�[E�YH�[E�dK�dK�dK�\G�gN�dK�\G�gN�\G�gN�gN�rX�rX�rW�rW�|g�}[DžjɃ\ʓqؤ�圐ت�ٵ�ٵ�l<=�XJ�[U�q_�fX�fX�dK�O<bC;W11H9=X;>qC;qTOqGFbC;;33RGYX;>RGYbSQF12H9=PDB_K_H9=RGYH9=F12PDBH9=h10qC;�F;�O<�YH�YH�YH�YH�YH�[E�dK�\G�dK�dK�\G�gN�gN�dK�gN�dK�\G�rX�rX�rX�}[�}[�}[Ƀ\ʓqؙ��ؤ�章ٵ��\VX;>�YH�gW�dK�r\�PIl<=bC;W2=W11qC;qTOX;>H9=F128-+PDBX;>_K__K_H9=RGYX;>;33H9=F12PDBH9=PDBX;>�=>�O<�O<�O<�PI�YH�[E�YH�Q>�YH�\G�gN�dK�\G�gN�gN�dK�dK�dK�\G�r\�\G�gN�rX�rX�}[�}[�}[Džjؙ�ؙ�圐ت�章章�r\�[U�fX�ga�q_�[VqC;bC;X83bC;qC;qC;W2=F12;33H9=qGF9-5pZ`X;>RGY_K_;33H9=H9=CDRH9=F12H9=X83W11qC;�O<�O<�YH�YH�Q>�YH�YH�[E�dK�dK�\G�gN�gN�gN�dK�\G�dK�Q>�dK�\G�gN�gN�rX�rW�rX�}[ֈgؙ�ؤ�圐ت�ت�ؤ��[V�hu�fX�GEl<=l<=qC;�O<t:3X;>;33;33X;>�XJ�d\�fXH9=F12H9=PDBPDBRGYG74F12H9=F12;33H9=g93�=>�O<�O<�PI�O<�YH�YH�Q>�O<�YH�dK�\G�gN�gN�r\�\G�gN�gN�dK�YH�Q>�dK�dK�gW�rX�rX�rWɃ\�}[�}[ؙ�ؤ�圐ٵ�章ؤ�Č�fX�GE�[VqC;qC;X;>F12F12X;>qC;�XJ�gY�q_�r\��~F12;33H9=RGY`FHH9=;33X;>;33;33H9=W2=g93qC;�O<�YH�YH�YH�Q>�YH�YH�O<�dK�dK�\G�gN�gN�\G�gN�gN�gN�dK�YH�=1�dK�[E�\G�gN�gN�rX�}[�}fDžjֈg圐ت�圐章ت�ؤ�Ɯ��GEbC;�q_�PG�\V�fX�q_�{e��n��~��n��~Ɣ�騈 \ No newline at end of file