From 5379b20e561125834bcba17527be436a90ba4981 Mon Sep 17 00:00:00 2001 From: "Mirar (Pontus Hagland)" <pike@sort.mirar.org> Date: Fri, 30 May 1997 02:21:12 +0200 Subject: [PATCH] forgot these, too Rev: src/modules/Image/doc/Image.colortable.html~:1.2(DEAD) Rev: src/modules/Image/doc/Image.font.html~:1.2(DEAD) Rev: src/modules/Image/doc/Image.html~:1.2(DEAD) Rev: src/modules/Image/doc/Image.image.html~:1.2(DEAD) Rev: src/modules/Image/doc/illustration_43.gif:1.1 Rev: src/modules/Image/doc/illustration_46.gif:1.1 Rev: src/modules/Image/doc/illustration_47.gif:1.1 Rev: src/modules/Image/doc/illustration_48.gif:1.1 Rev: src/modules/Image/doc/illustration_49.gif:1.1 Rev: src/modules/Image/doc/illustration_51.gif:1.1 Rev: src/modules/Image/doc/illustration_53.gif:1.1 Rev: src/modules/Image/doc/illustration_54.gif:1.1 Rev: src/modules/Image/image.c:1.35 --- .gitattributes | 1 - src/modules/Image/doc/Image.colortable.html~ | 15 - src/modules/Image/doc/Image.font.html~ | 186 -- src/modules/Image/doc/Image.html~ | 41 - src/modules/Image/doc/Image.image.html~ | 2737 ------------------ src/modules/Image/doc/illustration_43.gif | Bin 0 -> 2583 bytes src/modules/Image/doc/illustration_46.gif | Bin 0 -> 6013 bytes src/modules/Image/doc/illustration_47.gif | Bin 0 -> 3817 bytes src/modules/Image/doc/illustration_48.gif | Bin 0 -> 5876 bytes src/modules/Image/doc/illustration_49.gif | Bin 0 -> 6145 bytes src/modules/Image/doc/illustration_51.gif | Bin 0 -> 397 bytes src/modules/Image/doc/illustration_53.gif | Bin 0 -> 3817 bytes src/modules/Image/doc/illustration_54.gif | Bin 0 -> 5105 bytes src/modules/Image/image.c | 49 +- 14 files changed, 43 insertions(+), 2986 deletions(-) delete mode 100644 src/modules/Image/doc/Image.colortable.html~ delete mode 100644 src/modules/Image/doc/Image.font.html~ delete mode 100644 src/modules/Image/doc/Image.html~ delete mode 100644 src/modules/Image/doc/Image.image.html~ create mode 100644 src/modules/Image/doc/illustration_43.gif create mode 100644 src/modules/Image/doc/illustration_46.gif create mode 100644 src/modules/Image/doc/illustration_47.gif create mode 100644 src/modules/Image/doc/illustration_48.gif create mode 100644 src/modules/Image/doc/illustration_49.gif create mode 100644 src/modules/Image/doc/illustration_51.gif create mode 100644 src/modules/Image/doc/illustration_53.gif create mode 100644 src/modules/Image/doc/illustration_54.gif diff --git a/.gitattributes b/.gitattributes index 8972ea8477..7265662201 100644 --- a/.gitattributes +++ b/.gitattributes @@ -47,7 +47,6 @@ testfont binary /src/modules/Image/colortable.c foreign_ident /src/modules/Image/dct.c foreign_ident /src/modules/Image/doc/Image.html foreign_ident -/src/modules/Image/doc/Image.html~ foreign_ident /src/modules/Image/font.c foreign_ident /src/modules/Image/illustration.pike foreign_ident /src/modules/Image/image.c foreign_ident diff --git a/src/modules/Image/doc/Image.colortable.html~ b/src/modules/Image/doc/Image.colortable.html~ deleted file mode 100644 index 93f2999072..0000000000 --- a/src/modules/Image/doc/Image.colortable.html~ +++ /dev/null @@ -1,15 +0,0 @@ -<title>Pike documentation: Image.colortable</title> -<h2>Image.colortable</h2> - - -<blockquote> -This object keeps colortable information, - mostly for image re-coloring (quantization). -</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> -</blockquote> diff --git a/src/modules/Image/doc/Image.font.html~ b/src/modules/Image/doc/Image.font.html~ deleted file mode 100644 index 18e05c7c13..0000000000 --- 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::paste_mask</a></tt>, - <tt><a href=Image.image.html#paste_alpha_color>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 d2be4c7a9f..0000000000 --- a/src/modules/Image/doc/Image.html~ +++ /dev/null @@ -1,41 +0,0 @@ -<title>Pike documentation: module Image</title> -<h2>module Image</h2> - - -<blockquote> -This module adds image-drawing and -manipulating - capabilities to pike. -</blockquote> - - -<h4>NOTE</h4> -<blockquote> -$Id: Image.html~,v 1.1 1997/05/30 00:16:48 mirar Exp $<br> - $Id: Image.html~,v 1.1 1997/05/30 00:16:48 mirar Exp $<br> - $Id: Image.html~,v 1.1 1997/05/30 00:16:48 mirar Exp $<br> - $Id: Image.html~,v 1.1 1997/05/30 00:16:48 mirar Exp $<br> - $Id: Image.html~,v 1.1 1997/05/30 00:16:48 mirar Exp $<br> - $Id: Image.html~,v 1.1 1997/05/30 00:16:48 mirar Exp $<br> - -<p> $Id: Image.html~,v 1.1 1997/05/30 00:16:48 mirar Exp $<br> - $Id: Image.html~,v 1.1 1997/05/30 00:16:48 mirar Exp $<br> - $Id: Image.html~,v 1.1 1997/05/30 00:16:48 mirar Exp $<br> - $Id: Image.html~,v 1.1 1997/05/30 00:16:48 mirar Exp $<br> - $Id: Image.html~,v 1.1 1997/05/30 00:16:48 mirar Exp $<br> - $Id: Image.html~,v 1.1 1997/05/30 00:16:48 mirar Exp $<br> - $Id: Image.html~,v 1.1 1997/05/30 00:16:48 mirar Exp $<br> - $Id: Image.html~,v 1.1 1997/05/30 00:16:48 mirar Exp $<br> - $Id: Image.html~,v 1.1 1997/05/30 00:16:48 mirar Exp $<br> - $Id: Image.html~,v 1.1 1997/05/30 00:16:48 mirar Exp $<br> -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.font.html>Image.font</a></tt>, - <tt><a href=Image.image.html>Image.image</a></tt> -</blockquote> -<h3>More documentation:</h3> - <i><tt><a href=Image.colortable.html>Image.colortable</a></tt></tt></i><br> - <i><tt><tt><a href=Image.font.html>Image.font</a></tt></tt></i><br> - <i><tt><tt><a href=Image.image.html>Image.image</a></tt></i> - diff --git a/src/modules/Image/doc/Image.image.html~ b/src/modules/Image/doc/Image.image.html~ deleted file mode 100644 index 8830075919..0000000000 --- a/src/modules/Image/doc/Image.image.html~ +++ /dev/null @@ -1,2737 +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#polyfill>polyfill</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.image.html#cast>cast</a></tt>, - <tt><a href=Image.image.html#fromgif>fromgif</a></tt>, - <tt><a href=Image.image.html#frompnm>frompnm</a></tt>/<tt><a href=Image.image.html#fromppm>fromppm</a></tt>, - <tt><a href=Image.image.html#gif_add>gif_add</a></tt>, - <tt><a href=Image.image.html#gif_add_fs>gif_add_fs</a></tt>, - <tt><a href=Image.image.html#gif_add_fs_nomap>gif_add_fs_nomap</a></tt>, - <tt><a href=Image.image.html#gif_add_nomap>gif_add_nomap</a></tt>, - <tt><a href=Image.image.html#gif_begin>gif_begin</a></tt>, - <tt><a href=Image.image.html#gif_end>gif_end</a></tt>, - <tt><a href=Image.image.html#gif_netscape_loop>gif_netscape_loop</a></tt>, - <tt><a href=Image.image.html#gif_transparency>gif_transparency</a></tt>, - <tt><a href=Image.image.html#to8bit>to8bit</a></tt>, - <tt><a href=Image.image.html#to8bit_closest>to8bit_closest</a></tt>, - <tt><a href=Image.image.html#to8bit_fs>to8bit_fs</a></tt>, - <tt><a href=Image.image.html#to8bit_rgbcube>to8bit_rgbcube</a></tt>, - <tt><a href=Image.image.html#to8bit_rgbcube_rdither>to8bit_rgbcube_rdither</a></tt>, - <tt><a href=Image.image.html#tobitmap>tobitmap</a></tt>, - <tt><a href=Image.image.html#togif>togif</a></tt>, - <tt><a href=Image.image.html#togif_fs>togif_fs</a></tt>, - <tt><a href=Image.image.html#toppm>toppm</a></tt>, - <tt><a href=Image.image.html#tozbgr>tozbgr</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> - <img src=illustration_0.gif width=67 height=67> - </td><td> - <img src=lena.gif width=67 height=67> - </td> - <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> - <img src=illustration_2.gif width=67 height=67> - </td> - -<p> <tr><td> - edge detect: - <pre> - ({({1, 1,1}), - ({1,-8,1}), - ({1, 1,1})}) - </pre> - </td><td> - <img src=illustration_3.gif width=67 height=67> - </td> - -<p> <tr><td> - horisontal edge detect (get the idea): - <pre> - ({({0, 0,0}), - ({1,-2,1}), - ({0, 0,0})}) - </pre> - </td><td> - <img src=illustration_4.gif width=67 height=67> - </td> - -<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> - <img src=illustration_5.gif width=67 height=67> - </td><td> - <img src=illustration_6.gif width=67 height=67> - </td> - <tr><td></td><td>greyed</td></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> -<a name=to8bit> </a> -<a name=to8bit_closest> </a> -<a name=to8bit_fs> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>cast</b>(string type)<br> -string <b>to8bit</b>(array(array(int)) colors)<br> -string <b>to8bit_fs</b>(array(array(int)) colors)<br> -string <b>to8bit_closest</b>(array(array(int)) colors)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Maps the image to the given colors and returns - the 8 bit data. - -<p> to8bit_fs uses floyd-steinberg dithering -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the calculated string -</blockquote> - - -<h4>KNOWN BUGS</h4> -<blockquote> -always casts to string... -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#to8bit_rgbcube>to8bit_rgbcube</a></tt>, - <tt><a href=Image.image.html#tozbgr>tozbgr</a></tt>, - <tt><a href=Image.image.html#map_fast>map_fast</a></tt>, - <tt><a href=Image.image.html#map_closest>map_closest</a></tt>, - <tt><a href=Image.image.html#select_colors>select_colors</a></tt>, - <tt><a href=Image.image.html#tobitmap>tobitmap</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><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_8.gif width=67 height=67></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>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><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_10.gif width=67 height=67></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=fromgif> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>fromgif</b>(string gif)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Reads GIF data to the called image object. - -<p> GIF animation delay or loops are ignored, - and the resulting image is the written result. -</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 -</blockquote> - - -<h4>KNOWN BUGS</h4> -<blockquote> -yes, it does -- it may even do segment overrides... -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#togif>togif</a></tt>, - <tt><a href=Image.image.html#frompnm>frompnm</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> -Reads a PNM (PBM, PGM or PPM in ascii or binary) - to the called image object. - -<p> The method accepts P1 through P6 type of PNM data. - -<p> "fromppm" is an alias for "frompnm". -</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> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#toppm>toppm</a></tt>, - <tt><a href=Image.image.html#fromgif>fromgif</a></tt> -</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_fs> </a> -<a name=gif_add_fs_nomap> </a> -<a name=gif_add_nomap> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>gif_add</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, float delay_s)<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, int num_colors, float delay_s)<br> -string <b>gif_add</b>(int x, int y, array(array(int)) colors, int delay_cs)<br> -string <b>gif_add</b>(int x, int y, array(array(int)) colors, float delay_s)<br> -string <b>gif_add_fs</b>()<br> -string <b>gif_add_fs</b>(int x, int y)<br> -string <b>gif_add_fs</b>(int x, int y, int delay_cs)<br> -string <b>gif_add_fs</b>(int x, int y, float delay_s)<br> -string <b>gif_add_fs</b>(int x, int y, int num_colors, int delay_cs)<br> -string <b>gif_add_fs</b>(int x, int y, int num_colors, float delay_s)<br> -string <b>gif_add_fs</b>(int x, int y, array(array(int)) colors, int delay_cs)<br> -string <b>gif_add_fs</b>(int x, int y, array(array(int)) colors, float delay_s)<br> -string <b>gif_add_nomap</b>()<br> -string <b>gif_add_nomap</b>(int x, int y)<br> -string <b>gif_add_nomap</b>(int x, int y, int delay_cs)<br> -string <b>gif_add_nomap</b>(int x, int y, float delay_s)<br> -string <b>gif_add_nomap</b>(int x, int y, int num_colors, int delay_cs)<br> -string <b>gif_add_nomap</b>(int x, int y, int num_colors, float delay_s)<br> -string <b>gif_add_nomap</b>(int x, int y, array(array(int)) colors, int delay_cs)<br> -string <b>gif_add_nomap</b>(int x, int y, array(array(int)) colors, float delay_s)<br> -string <b>gif_add_fs_nomap</b>()<br> -string <b>gif_add_fs_nomap</b>(int x, int y)<br> -string <b>gif_add_fs_nomap</b>(int x, int y, int delay_cs)<br> -string <b>gif_add_fs_nomap</b>(int x, int y, float delay_s)<br> -string <b>gif_add_fs_nomap</b>(int x, int y, int num_colors, int delay_cs)<br> -string <b>gif_add_fs_nomap</b>(int x, int y, int num_colors, float delay_s)<br> -string <b>gif_add_fs_nomap</b>(int x, int y, array(array(int)) colors, int delay_cs)<br> -string <b>gif_add_fs_nomap</b>(int x, int y, array(array(int)) colors, float delay_s)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Makes a GIF (sub)image data chunk, to be placed - at the given position. - -<p> The "fs" versions uses floyd-steinberg dithering, and the "nomap" - versions have no local colormap. - -<p> Example: - <pre> - object img1 = Image(200,200); - object img2 = Image(200,200); - // load img1 and img2 with stuff - write(img1->gif_begin()+ - img1->gif_netscape_loop()+ - img1->gif_add(0,0,100)+ - img2->gif_add(0,0,100)+ - img1->gif_end()); - // voila, a gif animation... - </pre> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int x</tt> -<dt><tt>int y</tt> - <dd>the location of this subimage -<dt><tt>int delay_cs</tt> - <dd>frame delay in centiseconds -<dt><tt>float delay_s</tt> - <dd>frame delay in seconds -<dt><tt>int num_colors</tt> - <dd>number of colors to quantize to (default is 256) -<dt><tt>array array(array(int)) colors</tt> - <dd>colors to map to, format is ({({r,g,b}),({r,g,b}),...}). -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the GIF data chunk as a string -</blockquote> - - -<h4>NOTE</h4> -<blockquote> -I (Mirar) recommend reading about the GIF file format before - experementing with these. -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#gif_add>gif_add</a></tt>, - <tt><a href=Image.image.html#gif_end>gif_end</a></tt>, - <tt><a href=Image.image.html#gif_netscape_loop>gif_netscape_loop</a></tt>, - <tt><a href=Image.image.html#togif */>togif */</a></tt> -</blockquote> - -<hr> -<a name=gif_begin> </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)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Makes GIF header. With no argument, there is no - global colortable (palette). -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int num_colors</tt> - <dd>number of colors to quantize to (default is 256) - array array(array(int)) colors - colors to map to, format is ({({r,g,b}),({r,g,b}),...}). -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the GIF data -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#gif_add>gif_add</a></tt>, - <tt><a href=Image.image.html#gif_end>gif_end</a></tt>, - <tt><a href=Image.image.html#togif>togif</a></tt>, - <tt><a href=Image.image.html#gif_netscape_loop>gif_netscape_loop</a></tt> -</blockquote> - -<hr> -<a name=gif_end> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>gif_end</b>()</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Ends GIF data. -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the GIF data. -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#gif_begin>gif_begin</a></tt> -</blockquote> - -<hr> -<a name=gif_netscape_loop> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>gif_netscape_loop</b>()<br> -string <b>gif_netscape_loop</b>(int loops)</tt> -</blockquote> - -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int loops</tt> - <dd>number of loops, default is 65535. -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -a gif chunk that defines that the GIF animation should loop -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#gif_add>gif_add</a></tt>, - <tt><a href=Image.image.html#gif_begin>gif_begin</a></tt>, - <tt><a href=Image.image.html#gif_end>gif_end</a></tt> -</blockquote> - -<hr> -<a name=gif_transparency> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>gif_transparency</b>(int color)</tt> -</blockquote> - -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int color</tt> - <dd>index of color in the palette -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -a gif chunk that transparent a color in the next image chunk -</blockquote> - - -<h4>NOTE</h4> -<blockquote> -Yes - i know this function is too hard to use. :/ - The palette _is_ unknown mostly... -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#gif_add>gif_add</a></tt>, - <tt><a href=Image.image.html#gif_begin>gif_begin</a></tt>, - <tt><a href=Image.image.html#gif_end>gif_end</a></tt> -</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><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_12.gif width=67 height=67></td> - <td><img src=illustration_13.gif width=67 height=67></td> - </tr><tr valign=center> - <td>original</td> - <td>->grey();</td> - <td>->grey(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>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><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_15.gif width=67 height=67></td> - <td><img src=illustration_16.gif width=67 height=67></td> - </tr><tr valign=center> - <td>original</td> - <td>->hsv_to_rgb();</td> - <td>->rgb_to_hsv();</td> - </tr><tr valign=center> - <td><img src=illustration_17.gif width=67 height=67></td> - <td><img src=illustration_18.gif width=67 height=67></td> - <td><img src=illustration_19.gif width=67 height=67></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><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_21.gif width=67 height=67></td> - <td><img src=illustration_22.gif width=67 height=67></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> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>map_closest</b>(array(array(int)) colors)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Maps all pixel colors to the colors given. - -<p> Method to find the correct color is linear search - over the colors given, selecting the nearest in the - color cube. Slow... - -<p> <table><tr valign=center> - <td><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_24.gif width=67 height=67></td> - </tr><tr valign=center> - <td>original</td> - <td>->map_closest(({({255,0,0}),({255,255,255}),({0,0,0})}));</td> - </tr></table> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>array(array(int)) color</tt> - <dd>list of destination (available) colors -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <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#map_fs>map_fs</a></tt> -</blockquote> - -<hr> -<a name=map_fast> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>map_fast</b>(array(array(int)) colors)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Maps all pixel colors to the colors given. - -<p> Method to find the correct color is to branch - in a binary space partitioning tree in the - colorcube. This is fast, but in some cases - it gives the wrong color (mostly when few colors - are available). -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>array(array(int)) color</tt> - <dd>list of destination (available) colors -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#map_fast>map_fast</a></tt>, - <tt><a href=Image.image.html#select_colors>select_colors</a></tt> -</blockquote> - -<hr> -<a name=map_fs> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>object <b>map_fs</b>(array(array(int)) colors)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Maps all pixel colors to the colors given. - -<p> Method to find the correct color is linear search - over the colors given, selecting the nearest in the - color cube. Slow... - -<p> Floyd-steinberg error correction is added to create - a better-looking image, in many cases, anyway. - -<p> <table><tr valign=center> - <td><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_26.gif width=67 height=67></td> - </tr><tr valign=center> - <td>original</td> - <td>->map_fs(({({255,0,0}),({255,255,255}),({0,0,0})}));</td> - </tr></table> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>array(array(int)) color</tt> - <dd>list of destination (available) colors -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the new image object -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <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#map_closest>map_closest</a></tt> -</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><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_28.gif width=67 height=67></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><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_30.gif width=67 height=67></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><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_32.gif width=67 height=67></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 -</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 -<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=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><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_34.gif width=87 height=88></td> - <td><img src=illustration_35.gif width=87 height=88></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><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_37.gif width=67 height=67></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><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_39.gif width=67 height=67></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_colors> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>array(array(int)) <b>select_colors</b>(int num_colors)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Selects the best colors to represent the image. - -<p> - <table><tr valign=center> - <td><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_41.gif width=67 height=67></td> - <td><img src=illustration_42.gif width=67 height=67></td> - <td><img src=illustration_43.gif width=67 height=67></td> - </tr><tr valign=center> - <td>original</td> - <td>2</td> - <td>8</td> - <td>32</td> - </tr></table> -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int num_colors</tt> - <dd>number of colors to return -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -an array of colors -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#map_fast>map_fast</a></tt>, - <tt><a href=Image.image.html#select_colors>select_colors</a></tt> -</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><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_45.gif width=82 height=67></td> - <td><img src=illustration_46.gif width=82 height=67></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><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_48.gif width=67 height=82></td> - <td><img src=illustration_49.gif width=67 height=82></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><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_51.gif width=67 height=67></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=to8bit_rgbcube> </a> -<a name=to8bit_rgbcube_rdither> </a> -<a name=tozbgr> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>tozbgr</b>(array(array(int)) colors)<br> -string <b>to8bit_rgbcube</b>(int red, int green, int blue)<br> -string <b>to8bit_rgbcube</b>(int red, int green, int blue, string map)<br> -string <b>to8bit_rgbcube_rdither</b>(int red, int green, int blue)<br> -string <b>to8bit_rgbcube_rdither</b>(int red, int green, int blue, string map)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Maps the image into a colorcube with the given - dimensions. Red is least significant, blue is most. - -<p> The "rdither" type of method uses a random dither algoritm. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int red</tt> -<dt><tt>int green</tt> -<dt><tt>int blue</tt> - <dd>The sides of the colorcube. Not the number of bits! -<dt><tt>string map</tt> - <dd>Map this position in the colorcube to another value, - ie: say we have position red=1,green=2,blue=3 in a colorcube of - 6�6�6, we have the index 1+2*6+3*6*6=121. If the - map-string contains '�' in position 121, the resulting - byte is '�' or 229. -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the calculated string -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <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#tobitmap>tobitmap</a></tt> -</blockquote> - -<hr> -<a name=tobitmap> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>tobitmap</b>();</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Maps the image to a bitmap. - -<p> Bit 0 is the leftmost pixel, and the rows are aligned to - bytes. - -<p> Any pixel value other then black results in a set bit. -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the calculated string -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <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>, - <tt><a href=Image.image.html#cast>cast</a></tt> -</blockquote> - -<hr> -<a name=togif> </a> -<a name=togif_fs> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>togif</b>()<br> -string <b>togif</b>(int num_colors)<br> -string <b>togif</b>(array(array(int)) colors)<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 num_colors)<br> -string <b>togif_fs</b>(array(array(int)) colors)<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)</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Makes GIF data. The togif_fs variant uses floyd-steinberg - dithereing. -</blockquote> -<h4>ARGUMENTS</h4> -<blockquote><dl> -<dt><tt>int num_colors</tt> - <dd>number of colors to quantize to (default is 256) - array array(array(int)) colors - colors to map to (default is to quantize to 256), format is ({({r,g,b}),({r,g,b}),...}). -<dt><tt>int trans_r</tt> -<dt><tt>int trans_g</tt> -<dt><tt>int trans_b</tt> - <dd>one color, that is to be transparent. -</dl></blockquote> -<h4>RETURNS</h4> - - -<blockquote> -the GIF data -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#gif_begin>gif_begin</a></tt>, - <tt><a href=Image.image.html#gif_add>gif_add</a></tt>, - <tt><a href=Image.image.html#gif_end>gif_end</a></tt>, - <tt><a href=Image.image.html#toppm>toppm</a></tt>, - <tt><a href=Image.image.html#fromgif>fromgif</a></tt> -</blockquote> - -<hr> -<a name=toppm> </a> -<h4>SYNOPSIS</h4> -<blockquote> -<tt>string <b>toppm</b>()</tt> -</blockquote> - -<h4>DESCRIPTION</h4> - - -<blockquote> -Returns PPM (P6, binary pixmap) data from the - current image object. -</blockquote> -<h4>RETURNS</h4> - - -<blockquote> -PPM data -</blockquote> - - -<h4>SEE ALSO</h4> -<blockquote> <tt><a href=Image.image.html#frompnm>frompnm</a></tt>, - <tt><a href=Image.image.html#fromgif>fromgif</a></tt> -</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><img src=lena.gif width=67 height=67></td> - <td><img src=illustration_53.gif width=67 height=67></td> - <td><img src=illustration_54.gif width=67 height=67></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 -</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/illustration_43.gif b/src/modules/Image/doc/illustration_43.gif new file mode 100644 index 0000000000000000000000000000000000000000..5315d2f3dd517b3762be6d581b6cce61fa8d157b GIT binary patch literal 2583 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 literal 0 HcmV?d00001 diff --git a/src/modules/Image/doc/illustration_46.gif b/src/modules/Image/doc/illustration_46.gif new file mode 100644 index 0000000000000000000000000000000000000000..fd8c7ff2db60141263cb2439b5f8201ec04493d0 GIT binary patch literal 6013 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 JA|SwE4FDyaeLMgF literal 0 HcmV?d00001 diff --git a/src/modules/Image/doc/illustration_47.gif b/src/modules/Image/doc/illustration_47.gif new file mode 100644 index 0000000000000000000000000000000000000000..ab65b0e929cad7228788d65f9f8361f613943cdd GIT binary patch literal 3817 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 literal 0 HcmV?d00001 diff --git a/src/modules/Image/doc/illustration_48.gif b/src/modules/Image/doc/illustration_48.gif new file mode 100644 index 0000000000000000000000000000000000000000..d0bb94f304c606cea9d0cab57ddb238c57b0b57d GIT binary patch literal 5876 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 W(>n~_*B0>cz5h_U?hPX&gEas?R3GsG literal 0 HcmV?d00001 diff --git a/src/modules/Image/doc/illustration_49.gif b/src/modules/Image/doc/illustration_49.gif new file mode 100644 index 0000000000000000000000000000000000000000..b981a75a88042f3e74bd5a1cc84650e673e2c64f GIT binary patch literal 6145 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 CIp-Jv literal 0 HcmV?d00001 diff --git a/src/modules/Image/doc/illustration_51.gif b/src/modules/Image/doc/illustration_51.gif new file mode 100644 index 0000000000000000000000000000000000000000..5b57303205bb0781ebdf4a0bde0415e26310273f GIT binary patch literal 397 zcmZ?wbhEHbbY^g7C}&{MVPIfj0I?ex7#RNl{}19aFfjdNsVUrkM!;#xq-#}@$3EHq z*Sx=6lk51x^sb32n)^O*I_gx1Z`$+Oq>uSlg-ueS7>`=tdWp}1!kv?3&Kf^SNt>(v z>WdUpdurT@8#Q`C7hk$;dwc9)?fY#)X64UwKiS&ue|9~jeCcKNj_KDfO>DZc<ivGB z&7UqWEL<uxDp#sy-Z+tI&T>>JYq_&qrq;Dj+pDf+9ZlP1*<l*?IVy6u3)}JR-LE-h za+X=Wa{tq@W$Bt}+}S_NYED^2zi9rez3V$`8<#dmUF}-l6YXzflwvLZ)vTK5mHTv^ z_j9}4`+f22>h0hA2kOK#TJuf`4e*}YvR_PTjUd1Gky3_*zDq1VK3JU|bW!Wu>lX#n zkM}E>-g|t_;K{_Q_j-Ownt^k-PtjuUJ@VMd@9Yd7!$UFGCto=it-)AWA{z4ie4OW0 zrWnRfVU0Py$%ppLn0)ins<6$!tWRBCaB@TJ-n^R3Z*M|2B|llhTk7t8X-6zK1A{dH D9QV1$ literal 0 HcmV?d00001 diff --git a/src/modules/Image/doc/illustration_53.gif b/src/modules/Image/doc/illustration_53.gif new file mode 100644 index 0000000000000000000000000000000000000000..ab65b0e929cad7228788d65f9f8361f613943cdd GIT binary patch literal 3817 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 literal 0 HcmV?d00001 diff --git a/src/modules/Image/doc/illustration_54.gif b/src/modules/Image/doc/illustration_54.gif new file mode 100644 index 0000000000000000000000000000000000000000..a5c94ec5b51f20de1d381837385aa4b9d1ad9709 GIT binary patch literal 5105 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 literal 0 HcmV?d00001 diff --git a/src/modules/Image/image.c b/src/modules/Image/image.c index 3e3ce11175..0e6d7a8edc 100644 --- a/src/modules/Image/image.c +++ b/src/modules/Image/image.c @@ -1,4 +1,4 @@ -/* $Id: image.c,v 1.34 1997/05/29 23:36:58 per Exp $ */ +/* $Id: image.c,v 1.35 1997/05/30 00:21:12 mirar Exp $ */ /* **! module Image @@ -6,7 +6,7 @@ **! This module adds image-drawing and -manipulating **! capabilities to pike. **! note -**! $Id: image.c,v 1.34 1997/05/29 23:36:58 per Exp $<br> +**! $Id: image.c,v 1.35 1997/05/30 00:21:12 mirar Exp $<br> **! see also: Image.font, Image.image **! **! class image @@ -107,7 +107,7 @@ #include "stralloc.h" #include "global.h" -RCSID("$Id: image.c,v 1.34 1997/05/29 23:36:58 per Exp $"); +RCSID("$Id: image.c,v 1.35 1997/05/30 00:21:12 mirar Exp $"); #include "pike_macros.h" #include "object.h" #include "constants.h" @@ -1294,6 +1294,16 @@ void image_ysize(INT32 args) **! **! returns the new image object **! +**! <table><tr valign=center> +**! <td><illustration> return lena(); </illustration></td> +**! <td><illustration> return lena()->grey(); </illustration></td> +**! <td><illustration> return lena()->grey(0,0,255); </illustration></td> +**! </tr><tr valign=center> +**! <td>original</td> +**! <td>->grey();</td> +**! <td>->grey(0,0,255);</td> +**! </tr></table> +**! **! arg int r **! arg int g **! arg int b @@ -1361,6 +1371,14 @@ void image_grey(INT32 args) **! **! If no arguments are given, the current color is used as factors. **! +**! <table><tr valign=center> +**! <td><illustration> return lena(); </illustration></td> +**! <td><illustration> return lena()->color(128,128,255); </illustration></td> +**! </tr><tr valign=center> +**! <td>original</td> +**! <td>->color(128,128,255);</td> +**! </tr></table> +**! **! returns the new image object **! **! arg int r @@ -1431,9 +1449,11 @@ void image_color(INT32 args) **! <table><tr valign=center> **! <td><illustration> return lena(); </illustration></td> **! <td><illustration> return lena()->invert(); </illustration></td> +**! <td><illustration> return lena()->rgb_to_hsv()->invert()->hsv_to_rgb(); </illustration></td> **! </tr><tr valign=center> **! <td>original</td> **! <td>->invert();</td> +**! <td>->rgb_to_hsv()->invert()->hsv_to_rgb();</td> **! </tr></table> **! **! returns the new image object @@ -1555,7 +1575,7 @@ void image_threshold(INT32 args) /* -**x method object rgb_to_hsv() +**! method object rgb_to_hsv() **! method object hsv_to_rgb() **! Converts RGB data to HSV data, or the other way around. **! When converting to HSV, the resulting data is stored like this: @@ -1567,16 +1587,33 @@ void image_threshold(INT32 args) **! <table><tr valign=center> **! <td><illustration> return lena(); </illustration></td> **! <td><illustration> return lena()->hsv_to_rgb(); </illustration></td> +**! <td><illustration> return lena()->rgb_to_hsv(); </illustration></td> +**! </tr><tr valign=center> +**! <td>original</td> +**! <td>->hsv_to_rgb();</td> +**! <td>->rgb_to_hsv();</td> +**! </tr><tr valign=center> +**! <td><illustration> +**! return image(67,67)->tuned_box(0,0, 67,67, +**! ({ ({ 255,255,128 }), ({ 0,255,128 }), +**! ({ 255,255,255 }), ({ 0,255,255 })})); +**! </illustration></td> **! <td><illustration> **! return image(67,67)->tuned_box(0,0, 67,67, **! ({ ({ 255,255,128 }), ({ 0,255,128 }), **! ({ 255,255,255 }), ({ 0,255,255 })})) **! ->hsv_to_rgb(); **! </illustration></td> +**! <td><illustration> +**! return image(67,67)->tuned_box(0,0, 67,67, +**! ({ ({ 255,255,128 }), ({ 0,255,128 }), +**! ({ 255,255,255 }), ({ 0,255,255 })})) +**! ->rgb_to_hsv(); +**! </illustration></td> **! </tr><tr valign=center> -**! <td>original</td> -**! <td>->hsv_to_rgb();</td> +**! <td>tuned box (below)</td> **! <td>the rainbow (below)</td> +**! <td>same, but rgb_to_hsv()</td> **! </tr></table> **! **! -- GitLab