diff --git a/src/modules/Image/colors.c b/src/modules/Image/colors.c index 883c38d894be2ba033c2e19f309fb6df63690852..1387155098cbb919a23595c02ab0189b65ee54ec 100644 --- a/src/modules/Image/colors.c +++ b/src/modules/Image/colors.c @@ -1,7 +1,7 @@ /* **! module Image **! note -**! $Id: colors.c,v 1.2 1999/01/23 20:57:31 mirar Exp $ +**! $Id: colors.c,v 1.3 1999/01/24 00:47:33 mirar Exp $ **! submodule color **! **! This module keeps names and easy handling @@ -10,21 +10,83 @@ **! **! A color is here an object, containing color **! information and methods for conversion, see below. +**! +**! <ref>Image.color</ref> can be called to make a color object. +**! <ref>Image.color()</ref> takes the following arguments: +**! <pre> +**! Image.color(string name) +**! Image.color(string hex_name) +**! Image.color(string prefix_string) +**! Image.color(int red, int green, int blue) +**! </pre> +**! +**! The color names available can be listed by using indices +**! on Image.color. The colors are available by name directly +**! as <tt>Image.color.name</tt>, too: +**! <pre> +**! ...Image.color.red... +**! ...Image.color.green... +**! or, maybe +**! import Image.color; +**! ...red... +**! ...green... +**! ...lightgreen... +**! </pre> +**! +**! Giving red, green and blue values is equal to calling +**! <ref>Image.color.rgb</ref>(). +**! +**! The <tt>hex_name</tt> form is a simple +**! <tt>#rrggbb</tt> form, as in HTML or X-program argument. +**! A shorter form (<tt>#rgb</tt>) is also accepted. This +**! is the inverse to the <ref>Image.color.color->hex</ref>() +**! method. +**! +**! The prefix_string method is a form for getting modified +**! colors, it understands all modifiers +**! (<ref to=Image.color.color->light>light</ref>, +**! <ref to=Image.color.color->dark>dark</ref>, +**! <ref to=Image.color.color->bright>bright</ref>, +**! <ref to=Image.color.color->dull>dull</ref> and +**! <ref to=Image.color.color->neon>neon</ref>). Simply use +**! <method><color> (as in <tt>lightgreen</tt>, +**! <tt>dullmagenta</tt>, <tt>lightdullorange</tt>). +**! +**! see also: Image.color.color->name, Image.color.color->rgb +**! +**! added: +**! pike 0.7 +**! +**! note: +**! <tt>Image.color["something"]</tt> will never(!) generate an error, +**! but a zero_type 0, if the color is unknown. This is enough +**! to give the error "not present in module", if used +**! as <tt>Image.color.something</tt>, though. +**! +**! If you are using colors from for instance a webpage, you might +**! want to create the color from <ref>Image.color.guess</ref>(), +**! since that method is more tolerant for mistakes and errors. +**! +**! <tt>Image.color</tt>() is case- and space-sensitive. +**! Use <ref>Image.color.guess</ref>() to catch all variants. +**! +**! and subtract with a space (lower_case(x)-" ") to make +**! sure you get all variants. **! +**! see also: Image.color.color, Image.color.guess, Image, Image.colortable +**! **! class color **! This is the color object. It has six readable variables, **! <tt>r</tt>, <tt>g</tt>, <tt>b</tt>, for the <i>red</i>, **! <i>green</i> and <i>blue</i> values, **! and <tt>h</tt>, <tt>s</tt>, <tt>v</tt>, for **! the <i>hue</i>, <i>saturation</i> anv <i>value</i> values. -**! -**! see also: Image, Image.image, Image.font, Image.GIF */ #include "global.h" #include <config.h> -RCSID("$Id: colors.c,v 1.2 1999/01/23 20:57:31 mirar Exp $"); +RCSID("$Id: colors.c,v 1.3 1999/01/24 00:47:33 mirar Exp $"); #include "config.h" @@ -71,6 +133,21 @@ struct color_struct void image_make_hsv_color(INT32 args); /* forward */ +struct html_color +{ + int r,g,b; + char *name; + struct pike_string *pname; +} html_color[]= +{{0,0,0,"black",NULL}, {255,255,255,"white",NULL}, + {0,128,0,"green",NULL}, {192,192,192,"silver",NULL}, + {0,255,0,"lime",NULL}, {128,128,128,"gray",NULL}, + {128,128,0,"olive",NULL}, {255,255,0,"yellow",NULL}, + {128,0,0,"maroon",NULL}, {0,0,128,"navy",NULL}, + {255,0,0,"red",NULL}, {0,0,255,"blue",NULL}, + {128,0,128,"purple",NULL}, {0,128,128,"teal",NULL}, + {255,255,0,"fuchsia",NULL}, {0,255,255,"aqua",NULL}}; + static void make_colors(void) { static struct color @@ -87,6 +164,9 @@ static void make_colors(void) int i; const int n=sizeof(c)/sizeof(c[0]); + for (i=0; (size_t)i<sizeof(html_color)/sizeof(html_color[0]); i++) + html_color[i].pname=make_shared_string(html_color[i].name); + for (i=0;i<n;i++) { push_text(c[i].name); @@ -193,7 +273,7 @@ void image_color_create(INT32 args) if (args==4) /* r,g,b,name */ { INT32 r,g,b; - get_all_args("Image.color->create()",args,"%i%i%i%W", + get_all_args("Image.color.color->create()",args,"%i%i%i%W", &r,&g,&b,&(THIS->name)); if (r<0) r=0; else if (r>COLORMAX) r=COLORMAX; @@ -211,7 +291,7 @@ void image_color_create(INT32 args) else if (args==3) /* r,g,b */ { INT32 r,g,b; - get_all_args("Image.color->create()",args,"%i%i%i", + get_all_args("Image.color.color->create()",args,"%i%i%i", &r,&g,&b); if (r<0) r=0; else if (r>COLORMAX) r=COLORMAX; @@ -226,7 +306,7 @@ void image_color_create(INT32 args) try_find_name(); } - else error("Image.color->create(): Illegal argument(s)\n"); + else error("Image.color.color->create(): Illegal argument(s)\n"); push_int(0); } @@ -271,7 +351,7 @@ void image_color_greylevel(INT32 args) } else { - get_all_args("Image.color->grey()",args,"%i%i%i",&r,&g,&b); + get_all_args("Image.color.color->greylevel()",args,"%i%i%i",&r,&g,&b); } pop_n_elems(args); if (r+g+b==0) r=g=b=1; @@ -342,24 +422,65 @@ void image_color_grey(INT32 args) } /* +**! method string hex() +**! method string hex(int n) **! method string name() -**! Information method, gives the name of this color, -**! if it exists in the database, or color of format -**! <tt>"#rrggbb"</tt>, where rr, gg, bb is the hexadecimal -**! representation of the red, green and blue values, respectively. +**! method string html() +**! Information methods. +**! +**! <ref>hex</ref>() simply gives a string on the <tt>#rrggbb</tt> +**! format. If <tt>n</tt> is given, the number of significant +**! digits is set to this number. +**! (Ie, <tt>n=3</tt> gives <tt>#rrrgggbbb</tt>.) +**! +**! <ref>name</ref>() is a simplified method; +**! if the color exists in the database, the name is returned, +**! per default is the <ref>hex</ref>() method use. +**! +**! <ref>html</ref>() gives the <tt>HTML</tt> name of +**! the color, or the <ref>hex</ref>(2) if it isn't one +**! of the 16 <tt>HTML</tt> colors. +**! **! returns a new <ref>Image.color.color</ref> object **! see also: rgb, hsv, Image.color */ -void image_color_name(INT32 args) +void image_color_hex(INT32 args) { - if (THIS->name) + char buf[80]; + INT32 i=sizeof(COLORTYPE)*2; + + if (args) + get_all_args("Image.color.color->hex()",args,"%i",&i); + + pop_n_elems(args); + if (i<1) { - ref_push_string(THIS->name); + push_text("#"); /* stupid */ + return; } - else + else if (i!=sizeof(COLORTYPE)*2) { - char buf[20]; + int sh; + if (i>8) i=8; + + sh=4*(sizeof(COLORTYPE)*2-i); + if (sh>0) + sprintf(buf,"#%0*x%0*x%0*x",i,THIS->rgb.r>>sh, + i,THIS->rgb.g>>sh,i,THIS->rgb.b>>sh); + else + { + unsigned INT32 r=THIS->rgb.r; + unsigned INT32 g=THIS->rgb.g; + unsigned INT32 b=THIS->rgb.b; + const int q= + ((sizeof(COLORTYPE)==1)?0x01010101: + (sizeof(COLORTYPE)==2)?0x00010001:1); + sh=32-i*4; + sprintf(buf,"#%0*x%0*x%0*x",i,(r*q)>>sh,i,(g*q)>>sh,i,(b*q)>>sh); + } + } + else switch (sizeof(COLORTYPE)) { case 1: @@ -371,9 +492,40 @@ void image_color_name(INT32 args) case 4: sprintf(buf,"#%08x%08x%08x",THIS->rgb.r,THIS->rgb.g,THIS->rgb.b); break; + default: + error("unknown size of colortype\n"); } - push_text(buf); - } + push_text(buf); +} + +void image_color_html(INT32 args) +{ + int i; + + if (!colors) make_colors(); + + pop_n_elems(args); + + for (i=0; (size_t)i<sizeof(html_color)/sizeof(html_color[0]); i++) + if (THIS->rgb.r==html_color[i].r && + THIS->rgb.g==html_color[i].g && + THIS->rgb.b==html_color[i].b) + { + ref_push_string(html_color[i].pname); + return; + } + + push_int(2); + image_color_hex(1); +} + +void image_color_name(INT32 args) +{ + pop_n_elems(args); + if (THIS->name) + ref_push_string(THIS->name); + else + image_color_hex(0); } /* @@ -389,7 +541,7 @@ void image_color_cast(INT32 args) { if (args!=1 || sp[-1].type!=T_STRING) - error("Image.color->cast(): Illegal argument(s)\n"); + error("Image.color.color->cast(): Illegal argument(s)\n"); if (sp[-1].u.string==str_array) { @@ -401,7 +553,7 @@ void image_color_cast(INT32 args) image_color_name(args); return; } - error("Image.color->cast(): Can't cast to that\n"); + error("Image.color.color->cast(): Can't cast to that\n"); } void image_color_index(INT32 args) @@ -463,18 +615,33 @@ void image_color_index(INT32 args) } /* -**! method array|string cast() -**! cast the object to an array, representing red, green -**! and blue (equal to <tt>-><ref>rgb</ref>()</tt>), or -**! to a string, giving the name (equal to <tt>-><ref>name</ref>()</tt>). -**! returns the name as string or rgb as array -**! see also: rgb, name +**! method int `==(object other_color) +**! method int `==(array(int) rgb) +**! method int `==(int greylevel) +**! method int `==(string name) +**! Compares this object to another color, +**! or color name. Example: +**! <pre> +**! object red=Image.color.red; +**! object other=Image.color. ...; +**! object black=Image.color.black; +**! +**! if (red==other) ... +**! if (red==({255,0,0})) ... +**! if (black==0) ... +**! if (red=="red") ... +**! </pre> +**! +**! returns 1 or 0 +**! see also: rgb, grey, name +**! note: +**! The other datatype (not color object) must be to the right! */ void image_color_equal(INT32 args) { if (args!=1) - error("Image.color->`==: illegal number of arguments"); + error("Image.color.color->`==: illegal number of arguments"); if (sp[-1].type==T_OBJECT) { @@ -517,11 +684,72 @@ void image_color_equal(INT32 args) return; } } + else if (sp[-1].type==T_STRING) + { + if (sp[-1].u.string==THIS->name) + { + pop_stack(); + push_int(1); + return; + } + } pop_stack(); push_int(0); } +/* +**! method object light() +**! method object dark() +**! method object neon() +**! method object bright() +**! method object dull() +**! Color modification methods. These returns +**! a new color. +**! <table> +**! <tr><th>method</th><th width=50%>effect</th> +**! <th>h</th><th>s</th><th>v</th><th>as</th></tr> +**! <tr><td>light </td><td>raise light level</td><td>�0</td><td> �0</td> +**! <td><illustration>return Image.image(20,20,@(array)Image.color["#693e3e"])</illustration> +**! <illustration>return Image.image(20,20,@(array)Image.color["#693e3e"]->light())</illustration> +**! <illustration>return Image.image(20,20,@(array)Image.color["#693e3e"]->light()->light())</illustration> +**! <illustration>return Image.image(20,20,@(array)Image.color["#693e3e"]->light()->light()->light())</illustration></td></tr> +**! +**! <tr><td>dark </td><td>lower light level</td><td>�0</td><td> �0</td> +**! <td><illustration>return Image.image(20,20,@(array)Image.color["#693e3e"])</illustration> +**! <illustration>return Image.image(20,20,@(array)Image.color["#693e3e"]->dark())</illustration> +**! <illustration>return Image.image(20,20,@(array)Image.color["#693e3e"]->dark()->dark())</illustration> +**! <illustration>return Image.image(20,20,@(array)Image.color["#693e3e"]->dark()->dark()->dark())</illustration></td></tr> +**! +**! <tr><td>bright</td><td>brighter color </td><td>�0</td><td>+50</td> +**! <td><illustration>return Image.image(20,20,@(array)Image.color["#693e3e"])</illustration> +**! <illustration>return Image.image(20,20,@(array)Image.color["#693e3e"]->bright())</illustration> +**! <illustration>return Image.image(20,20,@(array)Image.color["#693e3e"]->bright()->bright())</illustration> +**! <illustration>return Image.image(20,20,@(array)Image.color["#693e3e"]->bright()->bright()->bright())</illustration></td></tr> +**! +**! <tr><td>dull </td><td>greyer color </td><td>�0</td><td>-50</td> +**! <td><illustration>return Image.image(20,20,@(array)Image.color.red)</illustration> +**! <illustration>return Image.image(20,20,@(array)Image.color.red->dull())</illustration> +**! <illustration>return Image.image(20,20,@(array)Image.color.red->dull()->dull())</illustration> +**! <illustration>return Image.image(20,20,@(array)Image.color.red->dull()->dull()->dull())</illustration></td></tr> +**! +**! <tr><td>neon </td><td>set to extreme </td><td>�0</td><td>max</td> +**! <td><illustration>return Image.image(20,20,@(array)Image.color["#693e3e"])</illustration> +**! <illustration>return Image.image(20,20,@(array)Image.color["#693e3e"]->neon())</illustration></td></tr> +**! +**! </table> +**! returns the new color object +**! note: +**! The opposites may not always take each other out. +**! The color is maximised at white and black levels, +**! so, for instance +**! <ref>Image.color</ref>.white-><ref>light</ref>()-><ref>dark</ref>() +**! doesn't give the white color back, but the equal to +**! <ref>Image.color</ref>.white-><ref>dark</ref>(), since +**! white can't get any <ref>light</ref>er. +*/ + + void image_color_light(INT32 args) { pop_n_elems(args); @@ -560,6 +788,7 @@ void image_color_dull(INT32 args) sp--; push_array_items(sp->u.array); /* frees */ sp[-2].u.integer-=50; + sp[-1].u.integer-=50; image_make_hsv_color(3); } @@ -570,6 +799,7 @@ void image_color_bright(INT32 args) sp--; push_array_items(sp->u.array); /* frees */ sp[-2].u.integer+=50; + sp[-1].u.integer+=50; image_make_hsv_color(3); } @@ -581,6 +811,8 @@ void image_color_bright(INT32 args) void image_get_color(INT32 args) { struct svalue s; + int n; + static char *callables[]={"light","dark","neon","dull","bright"}; if (args!=1) error("Image.color[]: illegal number of args"); @@ -614,11 +846,16 @@ void image_get_color(INT32 args) i/=3; for (j=0; j<3; j++) { - int z=0; + unsigned INT32 z=0; for (k=0; k<i; k++) { if (HEXTONUM(*src)==-1) - error("Image.color[]: no such color (trying hexadecimal number)\n"); + { + pop_stack(); + push_int(0); + sp[-1].subtype=NUMBER_UNDEFINED; + return; + } z=z*16+HEXTONUM(*src),src++; } switch (i) @@ -626,6 +863,11 @@ void image_get_color(INT32 args) case 1: z=(z<<12)+(z<<8)+(z<<4)+(z<<0); break; case 2: z=(z<<8)+(z<<0); break; case 3: z=(z<<4)+(z>>8); break; + + case 5: z=(z>>4); break; + case 6: z=(z>>8); break; + case 7: z=(z>>12); break; + case 8: z=(z>>16); break; } switch (sizeof(COLORTYPE)) { @@ -643,73 +885,16 @@ void image_get_color(INT32 args) return; } } - if (sp[-1].u.string->len>5 && - memcmp(sp[-1].u.string->str,"light",5)==0) - { - fprintf(stderr,"light\n"); - push_int(5); - push_int(1000000); - f_index(3); - image_get_color(1); - if (sp[-1].type!=T_OBJECT) - error("no such color (internal wierdness)\n"); - safe_apply(sp[-1].u.object,"light",0); - stack_swap(); - pop_stack(); - return; - } - if (sp[-1].u.string->len>4 && - memcmp(sp[-1].u.string->str,"dark",4)==0) - { - push_int(4); - push_int(1000000); - f_index(3); - image_get_color(1); - if (sp[-1].type!=T_OBJECT) - error("no such color (internal wierdness)\n"); - safe_apply(sp[-1].u.object,"dark",0); - stack_swap(); - pop_stack(); - return; - } - if (sp[-1].u.string->len>4 && - memcmp(sp[-1].u.string->str,"neon",4)==0) - { - push_int(4); - push_int(1000000); - f_index(3); - image_get_color(1); - if (sp[-1].type!=T_OBJECT) - error("no such color (internal wierdness)\n"); - safe_apply(sp[-1].u.object,"neon",0); - stack_swap(); - pop_stack(); - return; - } - if (sp[-1].u.string->len>6 && - memcmp(sp[-1].u.string->str,"bright",4)==0) - { - push_int(6); - push_int(1000000); - f_index(3); - image_get_color(1); - if (sp[-1].type!=T_OBJECT) - error("no such color (internal wierdness)\n"); - safe_apply(sp[-1].u.object,"bright",0); - stack_swap(); - pop_stack(); - return; - } - if (sp[-1].u.string->len>4 && - memcmp(sp[-1].u.string->str,"dull",4)==0) + for (n=0; (size_t)n<sizeof(callables)/sizeof(callables[0]); n++) + if (sp[-1].u.string->len>(INT32)strlen(callables[n]) && + memcmp(sp[-1].u.string->str,callables[n],strlen(callables[n]))==0) { - push_int(4); + push_int(strlen(callables[n])); push_int(1000000); f_index(3); image_get_color(1); - if (sp[-1].type!=T_OBJECT) - error("no such color (internal wierdness)\n"); - safe_apply(sp[-1].u.object,"dull",0); + if (sp[-1].type!=T_OBJECT) return; /* no way */ + safe_apply(sp[-1].u.object,callables[n],0); stack_swap(); pop_stack(); return; @@ -717,13 +902,44 @@ void image_get_color(INT32 args) } /* try other stuff here */ - error("Image.color[]: no such color\n"); + + pop_stack(); + push_int(0); + sp[-1].subtype=NUMBER_UNDEFINED; + return; } pop_stack(); *(sp++)=s; } +void image_guess_color(INT32 args) +{ + struct svalue s; + + if (args!=1 && sp[-args].type!=T_STRING) + error("Image.color->guess(): illegal argument(s)\n"); + + f_lower_case(1); + push_text(" "); + o_subtract(); + + stack_dup(); + image_get_color(1); + if (sp[-1].type==T_OBJECT) + { + stack_swap(); + pop_stack(); + return; + } + pop_stack(); + push_text("#"); + stack_swap(); + f_add(2); + + image_get_color(1); +} + void image_make_color(INT32 args) { struct svalue s; @@ -737,6 +953,35 @@ void image_make_color(INT32 args) push_object(clone_object(image_color_program,args)); } + +/* +**! module Image +**! submodule color +**! +**! method object guess(string) +**! This is equivalent to +**! <tt><ref>Image.color</ref>(lower_case(str)-" ")</tt>, +**! and tries the color with a prepending '#' if no +**! corresponding color is found. +**! +**! returns a color object or zero_type +*/ + +/* +**! method object rgb(int red, int green, int blue) +**! method object hsv(int hue, int saturation, int value) +**! method object greylevel(int level) +**! method object html(string html_color) +**! Creates a new color object from given red, green and blue, +**! hue, saturation and value, or greylevel. +**! +**! The <ref>html</ref>() +**! method only understands the HTML color names, +**! or the <tt>#rrggbb</tt> form. +**! +**! returns the created object. +*/ + void image_make_rgb_color(INT32 args) { if (args!=3) @@ -811,6 +1056,49 @@ void image_make_greylevel_color(INT32 args) push_object(clone_object(image_color_program,3)); } +void image_make_html_color(INT32 args) +{ + int i; + + if (args!=1 || + sp[-1].type!=T_STRING) + { + error("Image.color.html(): illegal arguments\n"); + return; + } + + f_lower_case(1); + for (i=0; (size_t)i<sizeof(html_color)/sizeof(html_color[0]); i++) + if (html_color[i].pname==sp[-1].u.string) + { + push_int(html_color[i].r); + push_int(html_color[i].g); + push_int(html_color[i].b); + push_object(clone_object(image_color_program,3)); + return; + } + + if (sp[-1].u.string->len>0 && + sp[-1].u.string->str[0]=='#') + push_object(clone_object(image_color_program,1)); + else + { + push_text("#"); + stack_swap(); + f_add(2); + push_object(clone_object(image_color_program,1)); + } +} + +/* +**! method array(string) _indices() +**! method array(object) _values() +**! (ie as <tt>indices(Image.color)</tt> or <tt>values(Image.color)</tt>) +**! <tt>indices</tt> gives a list of all the known color names, +**! <tt>values</tt> gives there corresponding objects. +**! see also: Image.color +*/ + void image_colors_indices(INT32 args) { pop_n_elems(args); @@ -858,11 +1146,16 @@ void init_image_colors(void) "function(string|int:int|function)",OPT_TRY_OPTIMIZE); add_function("`->",image_color_index, "function(string|int:int|function)",OPT_TRY_OPTIMIZE); - add_function("name",image_color_name, - "function(:string)",OPT_TRY_OPTIMIZE); add_function("`==",image_color_equal, "function(object|int:int)",OPT_TRY_OPTIMIZE); + add_function("name",image_color_name, + "function(:string)",OPT_TRY_OPTIMIZE); + add_function("hex",image_color_hex, + "function(:string)",OPT_TRY_OPTIMIZE); + add_function("html",image_color_html, + "function(:string)",OPT_TRY_OPTIMIZE); + add_function("rgb",image_color_rgb, "function(:array)",OPT_TRY_OPTIMIZE); add_function("hsv",image_color_hsv, @@ -898,6 +1191,10 @@ void init_image_colors(void) "function(int,int,int:object)",OPT_TRY_OPTIMIZE); add_function("hsv",image_make_hsv_color, "function(int,int,int:object)",OPT_TRY_OPTIMIZE); + add_function("html",image_make_html_color, + "function(string:object)",OPT_TRY_OPTIMIZE); + add_function("guess",image_guess_color, + "function(string:object)",OPT_TRY_OPTIMIZE); add_function("greylevel",image_make_greylevel_color, "function(int:object)",OPT_TRY_OPTIMIZE); add_function("_indices",image_colors_indices, @@ -925,6 +1222,8 @@ void exit_image_colors(void) } if (colors) { + int i; + free_mapping(colors); free_object(colortable); free_array(colornames); @@ -932,6 +1231,9 @@ void exit_image_colors(void) colors=NULL; colortable=NULL; colornames=NULL; + + for (i=0; (size_t)i<sizeof(html_color)/sizeof(html_color[0]); i++) + free_string(html_color[i].pname); } free_string(str_array); free_string(str_string); @@ -941,4 +1243,5 @@ void exit_image_colors(void) free_string(str_h); free_string(str_s); free_string(str_v); + } diff --git a/src/modules/Image/colors.h b/src/modules/Image/colors.h index 6e5e29bdd85ab6ca5ad67f9f10311bdbd2364775..4110a8eec8b25940480827a5f6cbf698d8b97ecc 100644 --- a/src/modules/Image/colors.h +++ b/src/modules/Image/colors.h @@ -1,450 +1,450 @@ - COLOR("red" ,255,0,0); - COLOR("aliceblue" ,240,248,255); - COLOR("antiquewhite" ,250,235,215); - COLOR("antiquewhite1" ,255,239,219); - COLOR("antiquewhite2" ,238,223,204); - COLOR("antiquewhite3" ,205,192,176); - COLOR("antiquewhite4" ,139,131,120); - COLOR("aquamarine" ,127,255,212); - COLOR("aquamarine1" ,127,255,212); - COLOR("aquamarine2" ,118,238,198); - COLOR("aquamarine3" ,102,205,170); - COLOR("aquamarine4" ,69,139,116); - COLOR("azure" ,240,255,255); - COLOR("azure1" ,240,255,255); - COLOR("azure2" ,224,238,238); - COLOR("azure3" ,193,205,205); - COLOR("azure4" ,131,139,139); - COLOR("beige" ,245,245,220); - COLOR("bisque" ,255,228,196); - COLOR("bisque1" ,255,228,196); - COLOR("bisque2" ,238,213,183); - COLOR("bisque3" ,205,183,158); - COLOR("bisque4" ,139,125,107); - COLOR("black" ,0,0,0); - COLOR("blanchedalmond" ,255,235,205); - COLOR("blue" ,0,0,255); - COLOR("blue1" ,0,0,255); - COLOR("blue2" ,0,0,238); - COLOR("blue3" ,0,0,205); - COLOR("blue4" ,0,0,139); - COLOR("blueviolet" ,138,43,226); - COLOR("brown" ,165,42,42); - COLOR("brown1" ,255,64,64); - COLOR("brown2" ,238,59,59); - COLOR("brown3" ,205,51,51); - COLOR("brown4" ,139,35,35); - COLOR("burlywood" ,222,184,135); - COLOR("burlywood1" ,255,211,155); - COLOR("burlywood2" ,238,197,145); - COLOR("burlywood3" ,205,170,125); - COLOR("burlywood4" ,139,115,85); - COLOR("cadetblue" ,95,158,160); - COLOR("cadetblue1" ,152,245,255); - COLOR("cadetblue2" ,142,229,238); - COLOR("cadetblue3" ,122,197,205); - COLOR("cadetblue4" ,83,134,139); - COLOR("chartreuse" ,127,255,0); - COLOR("chartreuse1" ,127,255,0); - COLOR("chartreuse2" ,118,238,0); - COLOR("chartreuse3" ,102,205,0); - COLOR("chartreuse4" ,69,139,0); - COLOR("chocolate" ,210,105,30); - COLOR("chocolate1" ,255,127,36); - COLOR("chocolate2" ,238,118,33); - COLOR("chocolate3" ,205,102,29); - COLOR("chocolate4" ,139,69,19); - COLOR("coral" ,255,127,80); - COLOR("coral1" ,255,114,86); - COLOR("coral2" ,238,106,80); - COLOR("coral3" ,205,91,69); - COLOR("coral4" ,139,62,47); - COLOR("cornflowerblue" ,100,149,237); - COLOR("cornsilk" ,255,248,220); - COLOR("cornsilk1" ,255,248,220); - COLOR("cornsilk2" ,238,232,205); - COLOR("cornsilk3" ,205,200,177); - COLOR("cornsilk4" ,139,136,120); - COLOR("cyan" ,0,255,255); - COLOR("cyan1" ,0,255,255); - COLOR("cyan2" ,0,238,238); - COLOR("cyan3" ,0,205,205); - COLOR("cyan4" ,0,139,139); - COLOR("darkblue" ,0,0,139); - COLOR("darkcyan" ,0,139,139); - COLOR("darkgoldenrod" ,184,134,11); - COLOR("darkgoldenrod1" ,255,185,15); - COLOR("darkgoldenrod2" ,238,173,14); - COLOR("darkgoldenrod3" ,205,149,12); - COLOR("darkgoldenrod4" ,139,101,8); - COLOR("darkgreen" ,0,100,0); - COLOR("darkgrey" ,169,169,169); - COLOR("darkkhaki" ,189,183,107); - COLOR("darkmagenta" ,139,0,139); - COLOR("darkolivegreen" ,85,107,47); - COLOR("darkolivegreen1" ,202,255,112); - COLOR("darkolivegreen2" ,188,238,104); - COLOR("darkolivegreen3" ,162,205,90); - COLOR("darkolivegreen4" ,110,139,61); - COLOR("darkorange" ,255,140,0); - COLOR("darkorange1" ,255,127,0); - COLOR("darkorange2" ,238,118,0); - COLOR("darkorange3" ,205,102,0); - COLOR("darkorange4" ,139,69,0); - COLOR("darkorchid" ,153,50,204); - COLOR("darkorchid1" ,191,62,255); - COLOR("darkorchid2" ,178,58,238); - COLOR("darkorchid3" ,154,50,205); - COLOR("darkorchid4" ,104,34,139); - COLOR("darkred" ,139,0,0); - COLOR("darksalmon" ,233,150,122); - COLOR("darkseagreen" ,143,188,143); - COLOR("darkseagreen1" ,193,255,193); - COLOR("darkseagreen2" ,180,238,180); - COLOR("darkseagreen3" ,155,205,155); - COLOR("darkseagreen4" ,105,139,105); - COLOR("darkslateblue" ,72,61,139); - COLOR("darkslategrey" ,47,79,79); - COLOR("darkslategrey1" ,151,255,255); - COLOR("darkslategrey2" ,141,238,238); - COLOR("darkslategrey3" ,121,205,205); - COLOR("darkslategrey4" ,82,139,139); - COLOR("darkturquoise" ,0,206,209); - COLOR("darkviolet" ,148,0,211); - COLOR("deeppink" ,255,20,147); - COLOR("deeppink1" ,255,20,147); - COLOR("deeppink2" ,238,18,137); - COLOR("deeppink3" ,205,16,118); - COLOR("deeppink4" ,139,10,80); - COLOR("deepskyblue" ,0,191,255); - COLOR("deepskyblue1" ,0,191,255); - COLOR("deepskyblue2" ,0,178,238); - COLOR("deepskyblue3" ,0,154,205); - COLOR("deepskyblue4" ,0,104,139); - COLOR("dimgrey" ,105,105,105); - COLOR("dodgerblue" ,30,144,255); - COLOR("dodgerblue1" ,30,144,255); - COLOR("dodgerblue2" ,28,134,238); - COLOR("dodgerblue3" ,24,116,205); - COLOR("dodgerblue4" ,16,78,139); - COLOR("firebrick" ,178,34,34); - COLOR("firebrick1" ,255,48,48); - COLOR("firebrick2" ,238,44,44); - COLOR("firebrick3" ,205,38,38); - COLOR("firebrick4" ,139,26,26); - COLOR("floralwhite" ,255,250,240); - COLOR("forestgreen" ,34,139,34); - COLOR("gainsboro" ,220,220,220); - COLOR("ghostwhite" ,248,248,255); - COLOR("gold" ,255,215,0); - COLOR("gold1" ,255,215,0); - COLOR("gold2" ,238,201,0); - COLOR("gold3" ,205,173,0); - COLOR("gold4" ,139,117,0); - COLOR("goldenrod" ,218,165,32); - COLOR("goldenrod1" ,255,193,37); - COLOR("goldenrod2" ,238,180,34); - COLOR("goldenrod3" ,205,155,29); - COLOR("goldenrod4" ,139,105,20); - COLOR("green" ,0,255,0); - COLOR("green1" ,0,255,0); - COLOR("green2" ,0,238,0); - COLOR("green3" ,0,205,0); - COLOR("green4" ,0,139,0); - COLOR("greenyellow" ,173,255,47); - COLOR("grey" ,190,190,190); - COLOR("honeydew" ,240,255,240); - COLOR("honeydew1" ,240,255,240); - COLOR("honeydew2" ,224,238,224); - COLOR("honeydew3" ,193,205,193); - COLOR("honeydew4" ,131,139,131); - COLOR("hotpink" ,255,105,180); - COLOR("hotpink1" ,255,110,180); - COLOR("hotpink2" ,238,106,167); - COLOR("hotpink3" ,205,96,144); - COLOR("hotpink4" ,139,58,98); - COLOR("indianred" ,205,92,92); - COLOR("indianred1" ,255,106,106); - COLOR("indianred2" ,238,99,99); - COLOR("indianred3" ,205,85,85); - COLOR("indianred4" ,139,58,58); - COLOR("ivory" ,255,255,240); - COLOR("ivory1" ,255,255,240); - COLOR("ivory2" ,238,238,224); - COLOR("ivory3" ,205,205,193); - COLOR("ivory4" ,139,139,131); - COLOR("khaki" ,240,230,140); - COLOR("khaki1" ,255,246,143); - COLOR("khaki2" ,238,230,133); - COLOR("khaki3" ,205,198,115); - COLOR("khaki4" ,139,134,78); - COLOR("lavender" ,230,230,250); - COLOR("lavenderblush" ,255,240,245); - COLOR("lavenderblush1" ,255,240,245); - COLOR("lavenderblush2" ,238,224,229); - COLOR("lavenderblush3" ,205,193,197); - COLOR("lavenderblush4" ,139,131,134); - COLOR("lawngreen" ,124,252,0); - COLOR("lemonchiffon" ,255,250,205); - COLOR("lemonchiffon1" ,255,250,205); - COLOR("lemonchiffon2" ,238,233,191); - COLOR("lemonchiffon3" ,205,201,165); - COLOR("lemonchiffon4" ,139,137,112); - COLOR("lightblue" ,173,216,230); - COLOR("lightblue1" ,191,239,255); - COLOR("lightblue2" ,178,223,238); - COLOR("lightblue3" ,154,192,205); - COLOR("lightblue4" ,104,131,139); - COLOR("lightcoral" ,240,128,128); - COLOR("lightcyan" ,224,255,255); - COLOR("lightcyan1" ,224,255,255); - COLOR("lightcyan2" ,209,238,238); - COLOR("lightcyan3" ,180,205,205); - COLOR("lightcyan4" ,122,139,139); - COLOR("lightgoldenrod" ,238,221,130); - COLOR("lightgoldenrod1" ,255,236,139); - COLOR("lightgoldenrod2" ,238,220,130); - COLOR("lightgoldenrod3" ,205,190,112); - COLOR("lightgoldenrod4" ,139,129,76); - COLOR("lightgoldenrodyellow",250,250,210); - COLOR("lightgreen" ,144,238,144); - COLOR("lightgrey" ,211,211,211); - COLOR("lightpink" ,255,182,193); - COLOR("lightpink1" ,255,174,185); - COLOR("lightpink2" ,238,162,173); - COLOR("lightpink3" ,205,140,149); - COLOR("lightpink4" ,139,95,101); - COLOR("lightsalmon" ,255,160,122); - COLOR("lightsalmon1" ,255,160,122); - COLOR("lightsalmon2" ,238,149,114); - COLOR("lightsalmon3" ,205,129,98); - COLOR("lightsalmon4" ,139,87,66); - COLOR("lightseagreen" ,32,178,170); - COLOR("lightskyblue" ,135,206,250); - COLOR("lightskyblue1" ,176,226,255); - COLOR("lightskyblue2" ,164,211,238); - COLOR("lightskyblue3" ,141,182,205); - COLOR("lightskyblue4" ,96,123,139); - COLOR("lightslateblue" ,132,112,255); - COLOR("lightslategrey" ,119,136,153); - COLOR("lightsteelblue" ,176,196,222); - COLOR("lightsteelblue1" ,202,225,255); - COLOR("lightsteelblue2" ,188,210,238); - COLOR("lightsteelblue3" ,162,181,205); - COLOR("lightsteelblue4" ,110,123,139); - COLOR("lightyellow" ,255,255,224); - COLOR("lightyellow1" ,255,255,224); - COLOR("lightyellow2" ,238,238,209); - COLOR("lightyellow3" ,205,205,180); - COLOR("lightyellow4" ,139,139,122); - COLOR("limegreen" ,50,205,50); - COLOR("linen" ,250,240,230); - COLOR("magenta" ,255,0,255); - COLOR("magenta1" ,255,0,255); - COLOR("magenta2" ,238,0,238); - COLOR("magenta3" ,205,0,205); - COLOR("magenta4" ,139,0,139); - COLOR("maroon" ,176,48,96); - COLOR("maroon1" ,255,52,179); - COLOR("maroon2" ,238,48,167); - COLOR("maroon3" ,205,41,144); - COLOR("maroon4" ,139,28,98); - COLOR("mediumaquamarine" ,102,205,170); - COLOR("mediumblue" ,0,0,205); - COLOR("mediumorchid" ,186,85,211); - COLOR("mediumorchid1" ,224,102,255); - COLOR("mediumorchid2" ,209,95,238); - COLOR("mediumorchid3" ,180,82,205); - COLOR("mediumorchid4" ,122,55,139); - COLOR("mediumpurple" ,147,112,219); - COLOR("mediumpurple1" ,171,130,255); - COLOR("mediumpurple2" ,159,121,238); - COLOR("mediumpurple3" ,137,104,205); - COLOR("mediumpurple4" ,93,71,139); - COLOR("mediumseagreen" ,60,179,113); - COLOR("mediumslateblue" ,123,104,238); - COLOR("mediumspringgreen" ,0,250,154); - COLOR("mediumturquoise" ,72,209,204); - COLOR("mediumvioletred" ,199,21,133); - COLOR("midnightblue" ,25,25,112); - COLOR("mintcream" ,245,255,250); - COLOR("mistyrose" ,255,228,225); - COLOR("mistyrose1" ,255,228,225); - COLOR("mistyrose2" ,238,213,210); - COLOR("mistyrose3" ,205,183,181); - COLOR("mistyrose4" ,139,125,123); - COLOR("moccasin" ,255,228,181); - COLOR("navajowhite" ,255,222,173); - COLOR("navajowhite1" ,255,222,173); - COLOR("navajowhite2" ,238,207,161); - COLOR("navajowhite3" ,205,179,139); - COLOR("navajowhite4" ,139,121,94); - COLOR("navy" ,0,0,128); - COLOR("navyblue" ,0,0,128); - COLOR("oldlace" ,253,245,230); - COLOR("olivedrab" ,107,142,35); - COLOR("olivedrab1" ,192,255,62); - COLOR("olivedrab2" ,179,238,58); - COLOR("olivedrab3" ,154,205,50); - COLOR("olivedrab4" ,105,139,34); - COLOR("orange" ,255,165,0); - COLOR("orange1" ,255,165,0); - COLOR("orange2" ,238,154,0); - COLOR("orange3" ,205,133,0); - COLOR("orange4" ,139,90,0); - COLOR("orangered" ,255,69,0); - COLOR("orangered1" ,255,69,0); - COLOR("orangered2" ,238,64,0); - COLOR("orangered3" ,205,55,0); - COLOR("orangered4" ,139,37,0); - COLOR("orchid" ,218,112,214); - COLOR("orchid1" ,255,131,250); - COLOR("orchid2" ,238,122,233); - COLOR("orchid3" ,205,105,201); - COLOR("orchid4" ,139,71,137); - COLOR("palegoldenrod" ,238,232,170); - COLOR("palegreen" ,152,251,152); - COLOR("palegreen1" ,154,255,154); - COLOR("palegreen2" ,144,238,144); - COLOR("palegreen3" ,124,205,124); - COLOR("palegreen4" ,84,139,84); - COLOR("paleturquoise" ,175,238,238); - COLOR("paleturquoise1" ,187,255,255); - COLOR("paleturquoise2" ,174,238,238); - COLOR("paleturquoise3" ,150,205,205); - COLOR("paleturquoise4" ,102,139,139); - COLOR("palevioletred" ,219,112,147); - COLOR("palevioletred1" ,255,130,171); - COLOR("palevioletred2" ,238,121,159); - COLOR("palevioletred3" ,205,104,137); - COLOR("palevioletred4" ,139,71,93); - COLOR("papayawhip" ,255,239,213); - COLOR("peachpuff" ,255,218,185); - COLOR("peachpuff1" ,255,218,185); - COLOR("peachpuff2" ,238,203,173); - COLOR("peachpuff3" ,205,175,149); - COLOR("peachpuff4" ,139,119,101); - COLOR("peru" ,205,133,63); - COLOR("pink" ,255,192,203); - COLOR("pink1" ,255,181,197); - COLOR("pink2" ,238,169,184); - COLOR("pink3" ,205,145,158); - COLOR("pink4" ,139,99,108); - COLOR("plum" ,221,160,221); - COLOR("plum1" ,255,187,255); - COLOR("plum2" ,238,174,238); - COLOR("plum3" ,205,150,205); - COLOR("plum4" ,139,102,139); - COLOR("powderblue" ,176,224,230); - COLOR("purple" ,160,32,240); - COLOR("purple1" ,155,48,255); - COLOR("purple2" ,145,44,238); - COLOR("purple3" ,125,38,205); - COLOR("purple4" ,85,26,139); - COLOR("red" ,255,0,0); - COLOR("red1" ,255,0,0); - COLOR("red2" ,238,0,0); - COLOR("red3" ,205,0,0); - COLOR("red4" ,139,0,0); - COLOR("rosybrown" ,188,143,143); - COLOR("rosybrown1" ,255,193,193); - COLOR("rosybrown2" ,238,180,180); - COLOR("rosybrown3" ,205,155,155); - COLOR("rosybrown4" ,139,105,105); - COLOR("royalblue" ,65,105,225); - COLOR("royalblue1" ,72,118,255); - COLOR("royalblue2" ,67,110,238); - COLOR("royalblue3" ,58,95,205); - COLOR("royalblue4" ,39,64,139); - COLOR("saddlebrown" ,139,69,19); - COLOR("salmon" ,250,128,114); - COLOR("salmon1" ,255,140,105); - COLOR("salmon2" ,238,130,98); - COLOR("salmon3" ,205,112,84); - COLOR("salmon4" ,139,76,57); - COLOR("sandybrown" ,244,164,96); - COLOR("seagreen" ,46,139,87); - COLOR("seagreen1" ,84,255,159); - COLOR("seagreen2" ,78,238,148); - COLOR("seagreen3" ,67,205,128); - COLOR("seagreen4" ,46,139,87); - COLOR("seashell" ,255,245,238); - COLOR("seashell1" ,255,245,238); - COLOR("seashell2" ,238,229,222); - COLOR("seashell3" ,205,197,191); - COLOR("seashell4" ,139,134,130); - COLOR("sienna" ,160,82,45); - COLOR("sienna1" ,255,130,71); - COLOR("sienna2" ,238,121,66); - COLOR("sienna3" ,205,104,57); - COLOR("sienna4" ,139,71,38); - COLOR("skyblue" ,135,206,235); - COLOR("skyblue1" ,135,206,255); - COLOR("skyblue2" ,126,192,238); - COLOR("skyblue3" ,108,166,205); - COLOR("skyblue4" ,74,112,139); - COLOR("slateblue" ,106,90,205); - COLOR("slateblue1" ,131,111,255); - COLOR("slateblue2" ,122,103,238); - COLOR("slateblue3" ,105,89,205); - COLOR("slateblue4" ,71,60,139); - COLOR("slategrey" ,112,128,144); - COLOR("slategrey1" ,198,226,255); - COLOR("slategrey2" ,185,211,238); - COLOR("slategrey3" ,159,182,205); - COLOR("slategrey4" ,108,123,139); - COLOR("snow" ,255,250,250); - COLOR("snow1" ,255,250,250); - COLOR("snow2" ,238,233,233); - COLOR("snow3" ,205,201,201); - COLOR("snow4" ,139,137,137); - COLOR("springgreen" ,0,255,127); - COLOR("springgreen1" ,0,255,127); - COLOR("springgreen2" ,0,238,118); - COLOR("springgreen3" ,0,205,102); - COLOR("springgreen4" ,0,139,69); - COLOR("steelblue" ,70,130,180); - COLOR("steelblue1" ,99,184,255); - COLOR("steelblue2" ,92,172,238); - COLOR("steelblue3" ,79,148,205); - COLOR("steelblue4" ,54,100,139); - COLOR("tan" ,210,180,140); - COLOR("tan1" ,255,165,79); - COLOR("tan2" ,238,154,73); - COLOR("tan3" ,205,133,63); - COLOR("tan4" ,139,90,43); - COLOR("thistle" ,216,191,216); - COLOR("thistle1" ,255,225,255); - COLOR("thistle2" ,238,210,238); - COLOR("thistle3" ,205,181,205); - COLOR("thistle4" ,139,123,139); - COLOR("tomato" ,255,99,71); - COLOR("tomato1" ,255,99,71); - COLOR("tomato2" ,238,92,66); - COLOR("tomato3" ,205,79,57); - COLOR("tomato4" ,139,54,38); - COLOR("turquoise" ,64,224,208); - COLOR("turquoise1" ,0,245,255); - COLOR("turquoise2" ,0,229,238); - COLOR("turquoise3" ,0,197,205); - COLOR("turquoise4" ,0,134,139); - COLOR("violet" ,238,130,238); - COLOR("violetred" ,208,32,144); - COLOR("violetred1" ,255,62,150); - COLOR("violetred2" ,238,58,140); - COLOR("violetred3" ,205,50,120); - COLOR("violetred4" ,139,34,82); - COLOR("wheat" ,245,222,179); - COLOR("wheat1" ,255,231,186); - COLOR("wheat2" ,238,216,174); - COLOR("wheat3" ,205,186,150); - COLOR("wheat4" ,139,126,102); - COLOR("white" ,255,255,255); - COLOR("whitesmoke" ,245,245,245); - COLOR("yellow" ,255,255,0); - COLOR("yellow1" ,255,255,0); - COLOR("yellow2" ,238,238,0); - COLOR("yellow3" ,205,205,0); - COLOR("yellow4" ,139,139,0); - COLOR("yellowgreen" ,154,205,50); - + COLOR("red" ,255,0,0) + COLOR("black" ,0,0,0) + COLOR("blue" ,0,0,255) + COLOR("cyan" ,0,255,255) + COLOR("green" ,0,255,0) + COLOR("magenta" ,255,0,255) + COLOR("yellow" ,255,255,0) + COLOR("white" ,255,255,255) +#if 1 + COLOR("aliceblue" ,240,248,255) + COLOR("antiquewhite" ,250,235,215) + COLOR("antiquewhite1" ,255,239,219) + COLOR("antiquewhite2" ,238,223,204) + COLOR("antiquewhite3" ,205,192,176) + COLOR("antiquewhite4" ,139,131,120) + COLOR("aquamarine" ,127,255,212) + COLOR("aquamarine1" ,127,255,212) + COLOR("aquamarine2" ,118,238,198) + COLOR("aquamarine3" ,102,205,170) + COLOR("aquamarine4" ,69,139,116) + COLOR("azure" ,240,255,255) + COLOR("azure1" ,240,255,255) + COLOR("azure2" ,224,238,238) + COLOR("azure3" ,193,205,205) + COLOR("azure4" ,131,139,139) + COLOR("beige" ,245,245,220) + COLOR("bisque" ,255,228,196) + COLOR("bisque1" ,255,228,196) + COLOR("bisque2" ,238,213,183) + COLOR("bisque3" ,205,183,158) + COLOR("bisque4" ,139,125,107) + COLOR("blanchedalmond" ,255,235,205) + COLOR("blue1" ,0,0,255) + COLOR("blue2" ,0,0,238) + COLOR("blue3" ,0,0,205) + COLOR("blue4" ,0,0,139) + COLOR("blueviolet" ,138,43,226) + COLOR("brown" ,165,42,42) + COLOR("brown1" ,255,64,64) + COLOR("brown2" ,238,59,59) + COLOR("brown3" ,205,51,51) + COLOR("brown4" ,139,35,35) + COLOR("burlywood" ,222,184,135) + COLOR("burlywood1" ,255,211,155) + COLOR("burlywood2" ,238,197,145) + COLOR("burlywood3" ,205,170,125) + COLOR("burlywood4" ,139,115,85) + COLOR("cadetblue" ,95,158,160) + COLOR("cadetblue1" ,152,245,255) + COLOR("cadetblue2" ,142,229,238) + COLOR("cadetblue3" ,122,197,205) + COLOR("cadetblue4" ,83,134,139) + COLOR("chartreuse" ,127,255,0) + COLOR("chartreuse1" ,127,255,0) + COLOR("chartreuse2" ,118,238,0) + COLOR("chartreuse3" ,102,205,0) + COLOR("chartreuse4" ,69,139,0) + COLOR("chocolate" ,210,105,30) + COLOR("chocolate1" ,255,127,36) + COLOR("chocolate2" ,238,118,33) + COLOR("chocolate3" ,205,102,29) + COLOR("chocolate4" ,139,69,19) + COLOR("coral" ,255,127,80) + COLOR("coral1" ,255,114,86) + COLOR("coral2" ,238,106,80) + COLOR("coral3" ,205,91,69) + COLOR("coral4" ,139,62,47) + COLOR("cornflowerblue" ,100,149,237) + COLOR("cornsilk" ,255,248,220) + COLOR("cornsilk1" ,255,248,220) + COLOR("cornsilk2" ,238,232,205) + COLOR("cornsilk3" ,205,200,177) + COLOR("cornsilk4" ,139,136,120) + COLOR("cyan1" ,0,255,255) + COLOR("cyan2" ,0,238,238) + COLOR("cyan3" ,0,205,205) + COLOR("cyan4" ,0,139,139) + COLOR("darkblue" ,0,0,139) + COLOR("darkcyan" ,0,139,139) + COLOR("darkgoldenrod" ,184,134,11) + COLOR("darkgoldenrod1" ,255,185,15) + COLOR("darkgoldenrod2" ,238,173,14) + COLOR("darkgoldenrod3" ,205,149,12) + COLOR("darkgoldenrod4" ,139,101,8) + COLOR("darkgreen" ,0,100,0) + COLOR("darkgrey" ,169,169,169) + COLOR("darkkhaki" ,189,183,107) + COLOR("darkmagenta" ,139,0,139) + COLOR("darkolivegreen" ,85,107,47) + COLOR("darkolivegreen1" ,202,255,112) + COLOR("darkolivegreen2" ,188,238,104) + COLOR("darkolivegreen3" ,162,205,90) + COLOR("darkolivegreen4" ,110,139,61) + COLOR("darkorange" ,255,140,0) + COLOR("darkorange1" ,255,127,0) + COLOR("darkorange2" ,238,118,0) + COLOR("darkorange3" ,205,102,0) + COLOR("darkorange4" ,139,69,0) + COLOR("darkorchid" ,153,50,204) + COLOR("darkorchid1" ,191,62,255) + COLOR("darkorchid2" ,178,58,238) + COLOR("darkorchid3" ,154,50,205) + COLOR("darkorchid4" ,104,34,139) + COLOR("darkred" ,139,0,0) + COLOR("darksalmon" ,233,150,122) + COLOR("darkseagreen" ,143,188,143) + COLOR("darkseagreen1" ,193,255,193) + COLOR("darkseagreen2" ,180,238,180) + COLOR("darkseagreen3" ,155,205,155) + COLOR("darkseagreen4" ,105,139,105) + COLOR("darkslateblue" ,72,61,139) + COLOR("darkslategrey" ,47,79,79) + COLOR("darkslategrey1" ,151,255,255) + COLOR("darkslategrey2" ,141,238,238) + COLOR("darkslategrey3" ,121,205,205) + COLOR("darkslategrey4" ,82,139,139) + COLOR("darkturquoise" ,0,206,209) + COLOR("darkviolet" ,148,0,211) + COLOR("deeppink" ,255,20,147) + COLOR("deeppink1" ,255,20,147) + COLOR("deeppink2" ,238,18,137) + COLOR("deeppink3" ,205,16,118) + COLOR("deeppink4" ,139,10,80) + COLOR("deepskyblue" ,0,191,255) + COLOR("deepskyblue1" ,0,191,255) + COLOR("deepskyblue2" ,0,178,238) + COLOR("deepskyblue3" ,0,154,205) + COLOR("deepskyblue4" ,0,104,139) + COLOR("dimgrey" ,105,105,105) + COLOR("dodgerblue" ,30,144,255) + COLOR("dodgerblue1" ,30,144,255) + COLOR("dodgerblue2" ,28,134,238) + COLOR("dodgerblue3" ,24,116,205) + COLOR("dodgerblue4" ,16,78,139) + COLOR("firebrick" ,178,34,34) + COLOR("firebrick1" ,255,48,48) + COLOR("firebrick2" ,238,44,44) + COLOR("firebrick3" ,205,38,38) + COLOR("firebrick4" ,139,26,26) + COLOR("floralwhite" ,255,250,240) + COLOR("forestgreen" ,34,139,34) + COLOR("gainsboro" ,220,220,220) + COLOR("ghostwhite" ,248,248,255) + COLOR("gold" ,255,215,0) + COLOR("gold1" ,255,215,0) + COLOR("gold2" ,238,201,0) + COLOR("gold3" ,205,173,0) + COLOR("gold4" ,139,117,0) + COLOR("goldenrod" ,218,165,32) + COLOR("goldenrod1" ,255,193,37) + COLOR("goldenrod2" ,238,180,34) + COLOR("goldenrod3" ,205,155,29) + COLOR("goldenrod4" ,139,105,20) + COLOR("green1" ,0,255,0) + COLOR("green2" ,0,238,0) + COLOR("green3" ,0,205,0) + COLOR("green4" ,0,139,0) + COLOR("greenyellow" ,173,255,47) + COLOR("grey" ,190,190,190) + COLOR("honeydew" ,240,255,240) + COLOR("honeydew1" ,240,255,240) + COLOR("honeydew2" ,224,238,224) + COLOR("honeydew3" ,193,205,193) + COLOR("honeydew4" ,131,139,131) + COLOR("hotpink" ,255,105,180) + COLOR("hotpink1" ,255,110,180) + COLOR("hotpink2" ,238,106,167) + COLOR("hotpink3" ,205,96,144) + COLOR("hotpink4" ,139,58,98) + COLOR("indianred" ,205,92,92) + COLOR("indianred1" ,255,106,106) + COLOR("indianred2" ,238,99,99) + COLOR("indianred3" ,205,85,85) + COLOR("indianred4" ,139,58,58) + COLOR("ivory" ,255,255,240) + COLOR("ivory1" ,255,255,240) + COLOR("ivory2" ,238,238,224) + COLOR("ivory3" ,205,205,193) + COLOR("ivory4" ,139,139,131) + COLOR("khaki" ,240,230,140) + COLOR("khaki1" ,255,246,143) + COLOR("khaki2" ,238,230,133) + COLOR("khaki3" ,205,198,115) + COLOR("khaki4" ,139,134,78) + COLOR("lavender" ,230,230,250) + COLOR("lavenderblush" ,255,240,245) + COLOR("lavenderblush1" ,255,240,245) + COLOR("lavenderblush2" ,238,224,229) + COLOR("lavenderblush3" ,205,193,197) + COLOR("lavenderblush4" ,139,131,134) + COLOR("lawngreen" ,124,252,0) + COLOR("lemonchiffon" ,255,250,205) + COLOR("lemonchiffon1" ,255,250,205) + COLOR("lemonchiffon2" ,238,233,191) + COLOR("lemonchiffon3" ,205,201,165) + COLOR("lemonchiffon4" ,139,137,112) + COLOR("lightblue" ,173,216,230) + COLOR("lightblue1" ,191,239,255) + COLOR("lightblue2" ,178,223,238) + COLOR("lightblue3" ,154,192,205) + COLOR("lightblue4" ,104,131,139) + COLOR("lightcoral" ,240,128,128) + COLOR("lightcyan" ,224,255,255) + COLOR("lightcyan1" ,224,255,255) + COLOR("lightcyan2" ,209,238,238) + COLOR("lightcyan3" ,180,205,205) + COLOR("lightcyan4" ,122,139,139) + COLOR("lightgoldenrod" ,238,221,130) + COLOR("lightgoldenrod1" ,255,236,139) + COLOR("lightgoldenrod2" ,238,220,130) + COLOR("lightgoldenrod3" ,205,190,112) + COLOR("lightgoldenrod4" ,139,129,76) + COLOR("lightgoldenrodyellow",250,250,210) + COLOR("lightgreen" ,144,238,144) + COLOR("lightgrey" ,211,211,211) + COLOR("lightpink" ,255,182,193) + COLOR("lightpink1" ,255,174,185) + COLOR("lightpink2" ,238,162,173) + COLOR("lightpink3" ,205,140,149) + COLOR("lightpink4" ,139,95,101) + COLOR("lightsalmon" ,255,160,122) + COLOR("lightsalmon1" ,255,160,122) + COLOR("lightsalmon2" ,238,149,114) + COLOR("lightsalmon3" ,205,129,98) + COLOR("lightsalmon4" ,139,87,66) + COLOR("lightseagreen" ,32,178,170) + COLOR("lightskyblue" ,135,206,250) + COLOR("lightskyblue1" ,176,226,255) + COLOR("lightskyblue2" ,164,211,238) + COLOR("lightskyblue3" ,141,182,205) + COLOR("lightskyblue4" ,96,123,139) + COLOR("lightslateblue" ,132,112,255) + COLOR("lightslategrey" ,119,136,153) + COLOR("lightsteelblue" ,176,196,222) + COLOR("lightsteelblue1" ,202,225,255) + COLOR("lightsteelblue2" ,188,210,238) + COLOR("lightsteelblue3" ,162,181,205) + COLOR("lightsteelblue4" ,110,123,139) + COLOR("lightyellow" ,255,255,224) + COLOR("lightyellow1" ,255,255,224) + COLOR("lightyellow2" ,238,238,209) + COLOR("lightyellow3" ,205,205,180) + COLOR("lightyellow4" ,139,139,122) + COLOR("limegreen" ,50,205,50) + COLOR("linen" ,250,240,230) + COLOR("magenta1" ,255,0,255) + COLOR("magenta2" ,238,0,238) + COLOR("magenta3" ,205,0,205) + COLOR("magenta4" ,139,0,139) + COLOR("maroon" ,176,48,96) + COLOR("maroon1" ,255,52,179) + COLOR("maroon2" ,238,48,167) + COLOR("maroon3" ,205,41,144) + COLOR("maroon4" ,139,28,98) + COLOR("mediumaquamarine" ,102,205,170) + COLOR("mediumblue" ,0,0,205) + COLOR("mediumorchid" ,186,85,211) + COLOR("mediumorchid1" ,224,102,255) + COLOR("mediumorchid2" ,209,95,238) + COLOR("mediumorchid3" ,180,82,205) + COLOR("mediumorchid4" ,122,55,139) + COLOR("mediumpurple" ,147,112,219) + COLOR("mediumpurple1" ,171,130,255) + COLOR("mediumpurple2" ,159,121,238) + COLOR("mediumpurple3" ,137,104,205) + COLOR("mediumpurple4" ,93,71,139) + COLOR("mediumseagreen" ,60,179,113) + COLOR("mediumslateblue" ,123,104,238) + COLOR("mediumspringgreen" ,0,250,154) + COLOR("mediumturquoise" ,72,209,204) + COLOR("mediumvioletred" ,199,21,133) + COLOR("midnightblue" ,25,25,112) + COLOR("mintcream" ,245,255,250) + COLOR("mistyrose" ,255,228,225) + COLOR("mistyrose1" ,255,228,225) + COLOR("mistyrose2" ,238,213,210) + COLOR("mistyrose3" ,205,183,181) + COLOR("mistyrose4" ,139,125,123) + COLOR("moccasin" ,255,228,181) + COLOR("navajowhite" ,255,222,173) + COLOR("navajowhite1" ,255,222,173) + COLOR("navajowhite2" ,238,207,161) + COLOR("navajowhite3" ,205,179,139) + COLOR("navajowhite4" ,139,121,94) + COLOR("navy" ,0,0,128) + COLOR("navyblue" ,0,0,128) + COLOR("oldlace" ,253,245,230) + COLOR("olivedrab" ,107,142,35) + COLOR("olivedrab1" ,192,255,62) + COLOR("olivedrab2" ,179,238,58) + COLOR("olivedrab3" ,154,205,50) + COLOR("olivedrab4" ,105,139,34) + COLOR("orange" ,255,165,0) + COLOR("orange1" ,255,165,0) + COLOR("orange2" ,238,154,0) + COLOR("orange3" ,205,133,0) + COLOR("orange4" ,139,90,0) + COLOR("orangered" ,255,69,0) + COLOR("orangered1" ,255,69,0) + COLOR("orangered2" ,238,64,0) + COLOR("orangered3" ,205,55,0) + COLOR("orangered4" ,139,37,0) + COLOR("orchid" ,218,112,214) + COLOR("orchid1" ,255,131,250) + COLOR("orchid2" ,238,122,233) + COLOR("orchid3" ,205,105,201) + COLOR("orchid4" ,139,71,137) + COLOR("palegoldenrod" ,238,232,170) + COLOR("palegreen" ,152,251,152) + COLOR("palegreen1" ,154,255,154) + COLOR("palegreen2" ,144,238,144) + COLOR("palegreen3" ,124,205,124) + COLOR("palegreen4" ,84,139,84) + COLOR("paleturquoise" ,175,238,238) + COLOR("paleturquoise1" ,187,255,255) + COLOR("paleturquoise2" ,174,238,238) + COLOR("paleturquoise3" ,150,205,205) + COLOR("paleturquoise4" ,102,139,139) + COLOR("palevioletred" ,219,112,147) + COLOR("palevioletred1" ,255,130,171) + COLOR("palevioletred2" ,238,121,159) + COLOR("palevioletred3" ,205,104,137) + COLOR("palevioletred4" ,139,71,93) + COLOR("papayawhip" ,255,239,213) + COLOR("peachpuff" ,255,218,185) + COLOR("peachpuff1" ,255,218,185) + COLOR("peachpuff2" ,238,203,173) + COLOR("peachpuff3" ,205,175,149) + COLOR("peachpuff4" ,139,119,101) + COLOR("peru" ,205,133,63) + COLOR("pink" ,255,192,203) + COLOR("pink1" ,255,181,197) + COLOR("pink2" ,238,169,184) + COLOR("pink3" ,205,145,158) + COLOR("pink4" ,139,99,108) + COLOR("plum" ,221,160,221) + COLOR("plum1" ,255,187,255) + COLOR("plum2" ,238,174,238) + COLOR("plum3" ,205,150,205) + COLOR("plum4" ,139,102,139) + COLOR("powderblue" ,176,224,230) + COLOR("purple" ,160,32,240) + COLOR("purple1" ,155,48,255) + COLOR("purple2" ,145,44,238) + COLOR("purple3" ,125,38,205) + COLOR("purple4" ,85,26,139) + COLOR("red1" ,255,0,0) + COLOR("red2" ,238,0,0) + COLOR("red3" ,205,0,0) + COLOR("red4" ,139,0,0) + COLOR("rosybrown" ,188,143,143) + COLOR("rosybrown1" ,255,193,193) + COLOR("rosybrown2" ,238,180,180) + COLOR("rosybrown3" ,205,155,155) + COLOR("rosybrown4" ,139,105,105) + COLOR("royalblue" ,65,105,225) + COLOR("royalblue1" ,72,118,255) + COLOR("royalblue2" ,67,110,238) + COLOR("royalblue3" ,58,95,205) + COLOR("royalblue4" ,39,64,139) + COLOR("saddlebrown" ,139,69,19) + COLOR("salmon" ,250,128,114) + COLOR("salmon1" ,255,140,105) + COLOR("salmon2" ,238,130,98) + COLOR("salmon3" ,205,112,84) + COLOR("salmon4" ,139,76,57) + COLOR("sandybrown" ,244,164,96) + COLOR("seagreen" ,46,139,87) + COLOR("seagreen1" ,84,255,159) + COLOR("seagreen2" ,78,238,148) + COLOR("seagreen3" ,67,205,128) + COLOR("seagreen4" ,46,139,87) + COLOR("seashell" ,255,245,238) + COLOR("seashell1" ,255,245,238) + COLOR("seashell2" ,238,229,222) + COLOR("seashell3" ,205,197,191) + COLOR("seashell4" ,139,134,130) + COLOR("sienna" ,160,82,45) + COLOR("sienna1" ,255,130,71) + COLOR("sienna2" ,238,121,66) + COLOR("sienna3" ,205,104,57) + COLOR("sienna4" ,139,71,38) + COLOR("skyblue" ,135,206,235) + COLOR("skyblue1" ,135,206,255) + COLOR("skyblue2" ,126,192,238) + COLOR("skyblue3" ,108,166,205) + COLOR("skyblue4" ,74,112,139) + COLOR("slateblue" ,106,90,205) + COLOR("slateblue1" ,131,111,255) + COLOR("slateblue2" ,122,103,238) + COLOR("slateblue3" ,105,89,205) + COLOR("slateblue4" ,71,60,139) + COLOR("slategrey" ,112,128,144) + COLOR("slategrey1" ,198,226,255) + COLOR("slategrey2" ,185,211,238) + COLOR("slategrey3" ,159,182,205) + COLOR("slategrey4" ,108,123,139) + COLOR("snow" ,255,250,250) + COLOR("snow1" ,255,250,250) + COLOR("snow2" ,238,233,233) + COLOR("snow3" ,205,201,201) + COLOR("snow4" ,139,137,137) + COLOR("springgreen" ,0,255,127) + COLOR("springgreen1" ,0,255,127) + COLOR("springgreen2" ,0,238,118) + COLOR("springgreen3" ,0,205,102) + COLOR("springgreen4" ,0,139,69) + COLOR("steelblue" ,70,130,180) + COLOR("steelblue1" ,99,184,255) + COLOR("steelblue2" ,92,172,238) + COLOR("steelblue3" ,79,148,205) + COLOR("steelblue4" ,54,100,139) + COLOR("tan" ,210,180,140) + COLOR("tan1" ,255,165,79) + COLOR("tan2" ,238,154,73) + COLOR("tan3" ,205,133,63) + COLOR("tan4" ,139,90,43) + COLOR("thistle" ,216,191,216) + COLOR("thistle1" ,255,225,255) + COLOR("thistle2" ,238,210,238) + COLOR("thistle3" ,205,181,205) + COLOR("thistle4" ,139,123,139) + COLOR("tomato" ,255,99,71) + COLOR("tomato1" ,255,99,71) + COLOR("tomato2" ,238,92,66) + COLOR("tomato3" ,205,79,57) + COLOR("tomato4" ,139,54,38) + COLOR("turquoise" ,64,224,208) + COLOR("turquoise1" ,0,245,255) + COLOR("turquoise2" ,0,229,238) + COLOR("turquoise3" ,0,197,205) + COLOR("turquoise4" ,0,134,139) + COLOR("violet" ,238,130,238) + COLOR("violetred" ,208,32,144) + COLOR("violetred1" ,255,62,150) + COLOR("violetred2" ,238,58,140) + COLOR("violetred3" ,205,50,120) + COLOR("violetred4" ,139,34,82) + COLOR("wheat" ,245,222,179) + COLOR("wheat1" ,255,231,186) + COLOR("wheat2" ,238,216,174) + COLOR("wheat3" ,205,186,150) + COLOR("wheat4" ,139,126,102) + COLOR("whitesmoke" ,245,245,245) + COLOR("yellow1" ,255,255,0) + COLOR("yellow2" ,238,238,0) + COLOR("yellow3" ,205,205,0) + COLOR("yellow4" ,139,139,0) + COLOR("yellowgreen" ,154,205,50) +#endif diff --git a/src/modules/Image/image.h b/src/modules/Image/image.h index fcb35c0fea8f2fa72814cafad982f23035870a41..5af9e30e6b660b6f4380b7e30fce0704a3162e89 100644 --- a/src/modules/Image/image.h +++ b/src/modules/Image/image.h @@ -1,7 +1,7 @@ /* **! module Image **! note -**! $Id: image.h,v 1.21 1998/04/16 04:32:36 mirar Exp $ +**! $Id: image.h,v 1.22 1999/01/24 00:47:36 mirar Exp $ */ #ifdef PIKE_IMAGE_IMAGE_H @@ -16,6 +16,8 @@ #define QUANT_SELECT_CACHE 6 #define COLORTYPE unsigned char +#define COLORSIZE 1 +#define COLORMAX 255 #define FS_SCALE 1024 diff --git a/src/modules/Image/module_testsuite.in b/src/modules/Image/module_testsuite.in index 4360f7d1f2b6adf19c4b80b8a80a0378936c1aa0..9d69d24cf8dc2ac83d038c8fa33be929dc332364 100644 --- a/src/modules/Image/module_testsuite.in +++ b/src/modules/Image/module_testsuite.in @@ -376,7 +376,7 @@ img->polygone(({10+x,15+y,15+x,10+y,15+x,15+y}), object img1=Image.GIF.decode(MIME.decode_base64( "R0lGODlhZABkAMQAAAAAAAICAgUFBQoKChYWFigoKC0tLTAwMDIyMjMyMj8/P1lYWFFRUHJycXp5eYyLi6OioaWlpK2srLW0s8vLyszLytbV1Ojn5vTz8vn49/z7+v/+/QAAAAAAAAAAAAAAACwAAAAAZABkAAQF/yAAiONYmiaapivLuu8byzJd1zeO6/ve+z5gMDgkEo3HY1KpZDabTyhUOp1WrVZsNrvlcr3fb1gsJpfLZzRafWSw3Osd4bF7EOLtDCsDx6fmGBs7Gxh2fjgMGYIpG3yHAIAbG4s1k4SGjyaJkyyTjnGRlpQyopd3j5ucjJ59X6Glg6WmhwYICLYst7cGaAW6uro7wMAIBZmZx8jIysvLzc7O0GUOFBTVLNbWDmgKE9nZ1jvg4BMKhwISlp2TEgJrAw0XsrGiFw0DmeiqJuzuePDy1OGod8+Zvk7tMgHcR2qDPXzRAKBjkXAZwB0PI6bwZ4KjM4g1QGrUOJIkSZMnT+6mVKmSZcuWL2HClDlzZk2bNnHmzLmTJ0+fP38GFSqUaNGiR5EiVbp0aVOnTqFGjTqV6hdjKbBadRaBRdetywpoYKFBK9hDEUYB2PD1rB+xajeUdesnbVy2dOPAvTs3bxm7d/H6vapBIL9JfQdbARxYsOIpBxIkkMxi8uQDjx9n1qyZc+fOn0GDFj169CMI4LBlg2D6yAJR6yYtaE0kgAXDIyxZCECbyGuGa2X3rn377u7hvoELRx7EdtzjzIO87jQ7enMLLKBb91HdRPftO3inEA8efHnz5tGnT7+ePXv379/Hly+ffv369/HjPxQCADs=")); -if (img-img1>16) do { werror("failure; Image.image/advanced drawing/Image.image->polyfill 1 (right triangle 0.0, 0.2): "+( "differ too much" )+"\n"); return 0; } while (0); +if (!(img-img1<16)) do { werror("failure; Image.image/advanced drawing/Image.image->polyfill 1 (right triangle 0.0, 0.2): "+( "differ too much" )+"\n"); return 0; } while (0); if (!equal(img->max(),({255,254,253}))) do { werror("failure; Image.image/advanced drawing/Image.image->polyfill 1 (right triangle 0.0, 0.2): "+( "wrong maxcolor" )+"\n"); return 0; } while (0); return 1; @@ -410,7 +410,7 @@ img->polygone(({10+x,15+y,15+x,10+y,15+x,15+y}), object img1=Image.GIF.decode(MIME.decode_base64( "R0lGODlhZABkANUAAAAAAAICAgUFBQcHBwoKChQUFBYWFh4eHiMjIyYmJS0tLTAwMDMyMigoKFFRUFlYWHp5eX9+fnJycYyLi56dnDIyMqOioaWlpMHBwMvLyszLytHQz9bV1Orp6Ojn5vTz8vz7+v/+/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAZABkAAUG/0AAQDgcFo1GZDK5ZDKdz2dUKqVWq1csVrvddr1ecDg8JpPN53NarWa32284XD6f1+12fD6/5/P9f3+BgoKEhYVqAkmKiGQEWAMBjW0FFEkMEZNYBhMYWBUcD5KaWwUbGZchmaRGnB8hqFUVISGho6xJprCpqqyutLuywLWiuEO6wUMMwKuIv8OxUrPDxLeTAhQZGRkWSQ3b2w6FAQ8Y4ODcWN/o4BYNxsbw8fHz9PT29/f5ggIMDP7vjBD49w/BuAUECf4LKGWgQoUHWEUAFg3AMlodFCBqcAEEtWRPplHzIOGRRFoVL2bUxNEjxU8jS9KbmDLESlYtUcKkRdLkvf8IKW8aa1mRyaye+pKIM4JAo74GELAkkJk0aVWrVrFmzbqVK1evX7+GFSuWbNmyZ9GiVbt2bVu3buHGjTuXLl27d+/m1auXb9++fwEDFjx4cGHDhvlYs5b43oMkCxg2jmfAkxEGFybfm5AShGTNmgx8qJkZNKsJIJd5Nh36Vc0QpVkjQp2a1mrZgkTrvAwsNu48tGvb/vxbDQFz27oZWbctavHiz6FDlz59enXr1rFnz152QIUK3yUTAA8+AfczATi85A1MwvkzD9YrA+bB5/st6XfPp+X+Ppn4wtXnHxn5vdbfgGHEV5OACIaRXk0HNujFAykxKKEXASinTIQXbiEk2QH2ddihiCOOWKKJJqKYYoorssiiiy++GKOMMtJYY4034hYEADs=")); -if (img-img1>16) do { werror("failure; Image.image/advanced drawing/Image.image->polyfill 2 (right triangle -0.2, -0.2): "+( "differ too much" )+"\n"); return 0; } while (0); +if (!(img-img1<16)) do { werror("failure; Image.image/advanced drawing/Image.image->polyfill 2 (right triangle -0.2, -0.2): "+( "differ too much" )+"\n"); return 0; } while (0); if (!equal(img->max(),({255,254,253}))) do { werror("failure; Image.image/advanced drawing/Image.image->polyfill 2 (right triangle -0.2, -0.2): "+( "wrong maxcolor" )+"\n"); return 0; } while (0); return 1; @@ -451,20 +451,20 @@ a+=({ 50+50*sin(i*2*3.1415926535/7+0.11), 50+50*cos(i*2*3.1415926535/7+0.11) }); a+=({ 50+19*sin((i+0.5)*2*3.1415926535/7+0.11), 50+19*cos((i+0.5)*2*3.1415926535/7+0.11) }); -b+=({ 50+0.9*50*sin(i*2*3.1415926535/7+0.1), -50+0.9*50*cos(i*2*3.1415926535/7+0.1) }); -b+=({ 50+0.5*19*sin((i+0.5)*2*3.1415926535/7+0.1), -50+0.5*19*cos((i+0.5)*2*3.1415926535/7+0.1) }); +b+=({ 50+0.9*50*sin(i*2*3.1415926535/7+0.11), +50+0.9*50*cos(i*2*3.1415926535/7+0.11) }); +b+=({ 50+0.5*19*sin((i+0.5)*2*3.1415926535/7+0.11), +50+0.5*19*cos((i+0.5)*2*3.1415926535/7+0.11) }); } img->setcolor(255,128,0); img->polyfill(a,b); object img1=Image.GIF.decode(MIME.decode_base64( -"R0lGODlhZABkAPcAAAAAAAEAAAIAAAMAAAQAAAMBAAUAAAYAAAcAAAUCAAYDAAcDAAIBAAgAAQkAAQgEAAkEAAsAAQsBAAoAAQwAAQ4AAQoFAAwGAAsFAA0GAA4HAAQCAA8AARAAAhIAAhMAAhUAAhQAAhADABEAAhYAAhgAAxoAAxsAAxwAAx0AAxAEABEIABAIABIJAA8HABcAAh0EARMKABQKABUKABULABYLABcLABgMABkMABsNABwOAB0OAB0PAA0AAR4AAx8AAyAABCIABCEABCMGAiQAAyUABCQAAycABCgABSkABSoABSsABSwABS4ABS8ABTAABjEABjIABjMABjUABjYABjcABjkABzoABzkHBD4ABzwAB0AACD0ABz0HBR4PACAQAB8PACEQACIRACMRACQSACUSACYTACgTACcUACgUACkUACoVACwWAC0WAC0XADEPAS4XADAYADEYADIZADQaADUaADYbADgbADodADgcADweAD0eAD8fAEAgAEEgAEEhAEYACEcCBksACFAACVUACVgACl0AC2IADFkAC2gADGsBC3IADnEADXgBDXwADn0BDkcACEwaAkQfAFEdAk4mAFIoAFMpAFspAHAPCXYZBl4sAHQrAmUyAGw1AHA3AHo5AH8AD4AAD4AAEIEBD4ICD4ABD4MDD4QED4QFDoAIDYcGDowKDo0LDpAPDZISDJQUDZcWDJkaC5wcDJ4eDKEiCqUlC6gnCpYzBKsqCaswCLAuCbIyCbM0CbY4CLo5CLw8CGAHCYFBAIpFAIxIAJFKAJlNAKFQAKRTAMBBB7hOBMRFBshKBq1XALhdALteAMVjAMxNBtBPBdJWBNlYBNpbBNZjAuBgA+RlAtVrANpuAORuAeVzAOpsAu9xAet2APB2APF4ALNZAPR1AfN0AfV2AfZ2AfN6APR6APV6APZ4APZ7APZ3Afl5APl6APh5APd8APh8APl7APp7APp8APl9APp9APV7APt8APx9APx+APt+AP1/AP1+AP5/APd4AP+AACwAAAAAZABkAAcI/wABABA4cGBBgwYRJky4kCFDhw8fRpQokWLFihcxYtS4cWNHjx5Bhgw5kqTEACZNplSpkiXGDZpatpQ5c6bKT59s2tS5c2fCNfBi+vQ5lCjJAs/+SZI4wajRhBqetvz07x+ch0UASZVqp9PW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")); +"R0lGODlhZABkAPcAAAAAAAEAAAIBAAQAAAIAAAMBAAUAAAQCAAUCAAMAAAcAAAgAAQYAAAcDAAkAAQsAAQwAAQsBAAoAAQkEAAoFAAsFAAwGAAgEAA0AAQ4AAQ8AARAAAhIAAhMAAhADABEAAhQAAhUAAhYAAhgAAxoAAxsAAw0GAA8HABEIABAIABEJABIJABMKAA4HABcAAhcIABUKABQKABYLABcLABkMABgMABoNABsNABwAAx0AAx4AAx8AAx0EASAABCEABCIABCQABCUABCYAAyQCAiYABCcABCgABSkABSsABSoABSwABS4ABS8ABTAABjEABjIABjAEBDMABjUABjcABjgABzcCBTYABjkABzoABzsABz0ABz4ABxwOAB0OAB4PAB0PAB8PACAQACEQACIRACMRACQSACcPACYTACcTACUSACgUACkUACkVACsWACoVACwWAC0WAC0XADEPAS4XAC8XADEYADIZADkHBDMaADUaADcbADYbADodADgcADweAD0eAEMACEQLBUkACE4ACU8ACFcAClkACmAACmAAC2gADGkADHAADXUADncADnkADnwAD0IXAUEfAEMhAEolAEokAFAnAFgnAFksAFcpAF4vAHQVB3QeBGEwAGYyAGkzAHY3AEoACX4AD38ADn8AD4AAEIAAD4EBD4ICD4MDD4MEDoUFD4cIDYoLDosKDosIDo4NDpEQDZMUDJYVDZkZDJsdC58fDKEgC6QgC6cnCqkpCqAvBqwrCq0yCLMyCbQzCLg3CHY7AH1AAH9BAIhFAI1IAJRKAJpGAp5QAHk8AKxLArw9B79GBapWALNbAL5bAb9hAMdHBs1NBs9RBNVWBNJTBM1kANtcBOJjAtBpANhsANpuAOFwAOhpAuptAeZzAOt2AadTAO9vAfBxAfByAfB4AO92APF5APNzAfN0AfV2AfF3APN6APN5APV6APd4APh5APd8APh7APl6APp7APl9APt8APp9APt+APx9APx+AP1+AP1/AO93AP5/AP5+AP+AACwAAAAAZABkAAcI/wABABA4cGBBgwYRJky4kCFDhw8fRpQokWLFihcxYtS4cWNHjx5Bhgw5kqTEACZNplSpkiXGA5datpQ5c6ZKZMBs2tS5c2dCN/Ay+fQ5lKjJAtX+SZIowajRhC2etgQG79+ch0EASZW6x9PWkGraPfsng+GSR0u+Gg2wLadaiQKemSN2T0BCKqNIgXhLtFi/YHwZfvo3rJm3hIDyNgrsM9K/fsMYA0jTbl0NctgGBhhEihQpRJJtCvBWrV8xlG/j/iM2518zAAMKefasNXRFIkYkFvNW7N8xu2o9/YNnQ/gxBYhme85tWyKDRohcMJT0z5Ozf+AKfB2z7l8xAOAIJ/9S7jlD84qASIUC1XQgAn7bamz7xwyB1ABj7YEBMJ8XeVKMnFcRBI941ggWCQx0zD+Z1NGOaw08JZxvANjQzz+7/FeIgBURotwiRQBQyT/ZCJDJhc5QQFQY5vyTTxoAdPLPP7X8pwWHEoWQl3KI8NBiJQD09s8zJvh0HXYAGAHNjLH89wOOEhnyXyjXVQPAAWP9U00KNsn4zz5tPBHKNTOuQt4oC0D5UA//kZLLjJQAIMN8WsbQ0hct0pfFKKrg8888pZC3iJoSjUeeKvP8Y00QAOxR1T/Y1KBSMzP2o4lntswYzn+EEPqQEm1OM2MthoTQyYUkckESJzP+M81sysz/eM1/U3jKEAGL/LfLjNaQ8oggxrS6jRge3UBOpbTMZs2Mr5KXg60MUfHfKvU8NotnjiQ14zZnbEQpr7OVks6M0ZD3yADQJvTcf8u6Otsr47TqzRsVZdLqP7bMJkurypCXSLoMpUdeLzP606RntPg54zd1PFQDP61eE6hnvrTqC3mgAJwQgeS1os+M0ihXcav89MHQtzPeopw0reJCnhMaJ+Qhee3iA0u4LLdqTiQGXXKvxMqF02qyykkX80A6kjfyP+XOlgqZrbaz1Azl3OvybKyg+s/NszmC2tEASKncK6jOw8rY6NxbjyVHzsjNxJ69WWkqPIJtkA//Qf0PNOTZ//Jxq3+3mqFyS87oDnm12Q2AobP90uo7rZDn+L33dmMKeXp3Qx4Sig8EqnKwaN2vcqVQQ3mrvZCXisL/zKrcB2ux4EYkk2j3Fa6Yt5qOKodyc3o4p5BHy73UKBegRwfUUIckmQAzzDHNYOONPTM24wVf0ioXa6u//AfLuPderFwowbbK92yGAHCBF3lMwgkyxIDzDDbf7HP6P94w80w7/HDC2LqziYXWxpEr8twicONABeJE1SprKCMa07jGNsihtfu16h7YKMYlyoCJpDRDUpIR2Gx81ypdMA5W3POXEMBnQQuSrBnBkIQFrpSJbPzjGzGxDQYKhMJWhaMKySGdqP/QwbuudUATLrTgPrJxDE6s4WsN8MR8+gEOO51nZqQoRabuxYsRiG02quDG6GYTBRwQLIkzWoczhDEJFTykAp/wxoy8AaTmTGANk/gENKbBjXecrhuKUIBsQFdEz6SvEDk7XT+6AQ5P1MF2D0lBML5RqWNw6S0BuIEfMiGMYzzDG/ZD44xyAYrNtMkzjJCAjrqhtmtAIxeswMJGZDCMPP1jG0t5ignmUIlPFKMZ2XiQKF3IDVEoAQCCaNMoGEWIrJ1jGr+ghQJng4gQSKQLxRDml4pRpJYUIAyS4MQwwFGNb1RwmMO8hSM4AIAt7Gg2GdvAI1YBC7j95xGgcIBB0nD/DHrcSxs8awk2H3UPbWhDG9vYRkIVqlCGNtQb3oBoRL3xDXSgw6IXRUc60pGOVyUCXVd4pyLQBYpTtqkRV6ADOPJxr3wQYwI+8UIwtNEPbRyjE274WktwZ1LPZAwAYvLVCADwAB72dDa0mMY5saGHrfzhGHn6RjOQ8YcLqOQDBezpKDgHACQ8IgsDEWFPtWiNc9pDGBFSSwUy8YxQDqcaxKhEWTAyAkYcdTaNYCcAcIASBTTiqKXAhd7uxQ1NPEAyYZgp5Wp60ycmpAd/vetsEpEgg2ihp6bYBQkpVw9lBM8RWUAXYwIQiWN053RSBYYfoGBUyZLCET5IiAOYUAhH/5DnFL1g5f2uIQtBcVUyFuDEM87Zqnq4EheROyo+IVCRARBhEIxIxS/EYcF5/OJybUIECZpDBmHQyYKLjEYvYmFPUoyiEHthyABEa5AAQOK7lLsG10w6CkKYxzYBkAQ4tOnCjiqjFqhAhA4M8gAp/PQIo1gEIggBCCf0YAMraBvgaiRZR2zBAM0ZwCF6cQ3i3s8ZA3FAFBARCl8RIEmnfMQiknFOd1zLtYtIi2QWEERSwGIZ1HWhNl7QBEO0lhTSIcJRdyEPyqWjt64lRSKexRcMKOI/prAFNRJFOXZo4sezYQIAgHBXWQjtXuiYr2TPuwG1dCCrbZpFBfuRi54KAv8AP5BsK9rVKnGIWbKPAAQDpFICu5q0FHSe0TKOChq8SdYU0KhgOM6WZFQ+QaczAYJte4oLylkDu/+Z2GJ2MJtpUNiku6Cy25LbaCXH1iZnOWoqvjyjbpipTay4tGc0kIPZzKMf17BFeZUzC1b/gxuvLvV59WqSkN51Gfd6B5L/MwvqvrgIJZhNtWSFi117JtY/KyR9G6GIBQMiCkGwpkkSc1dYTPsxbW5TL6Ytvi2QQNqU40YuMK0cRGvNGnQzLyMSYQhQbKEJPwDBnn1CACyONdCD/g8qoqG14pGiECOA9x93ETzyhEIX8WiVM4bwgcqqxQBfPKrceEVvz7xisP//2BQpFiGC2bDuj7oQxBSOUIIMoKQO32UGJL/igBP2VBWsdvV/anEORZ5tFLX2zMvvtw1PwDQhMMiSbyBtFA082bXInpGyyVOKXyy9VemOgsuH6Q1gdHMgByAGqr6zFRGg+aixmHY/rjYbUUQjiecrqWcCpw9bQEOO9ytHMFCQkEwIkxhS0UFkJQtofjFYCkQYgRm0da8Kuq7GgROHeSPgB2LAV2fDgIFB8EAnYRilCFhWjooRUQhAWMFLrgHOQCRBycpLYxaBq4cC/UyKwPVqUJrpg+dPtw5i3GAgMhhLP9xik6CqZxGJKIQgqJCEEmBApxWgUzZOkBBg3INy1YhE/4ECTbTZaK1cG3pIHoahDcrBoxhhuJJf+uGVmWwAC0rIgQZOHJJhzMgcbmAQFRAe98IPnmAXHrIrKaQcokMKYIURdTAMNtQq9nAMaAAAnAAP+yAUtqEG/rQPdQQAZYAN97IPx2BFACACfOJHzEI6WpMhp+YRcSAME+gi4BAHebAN94AJtnEkpjcQkwAxrVINefAQUnJ3M4IOcFMK9zILaNISbhAM2HAh+9AMk/AM9DAJkuEzsQcAARAMLLUwnSB7CRFntXAv88WElbIKwGcTZ4AMU9gP8yM1gWEBcrR9ANACKJMPxUB4GKEIpcBqg5NFuvNwT0EGwFAa/bAOfMAX/v9nDmwAAGtQg8/QMB7BBKSwPUwzG6YQMaRABV8RBp9QDfxgiVvhBvYAgiKSJ96QCVQnEQnACKHjNpzYKsUzYG/RBZmQVlIxFsIgAMNwIfdADNynEpcFNfpQRJ0oaKGAYZ0zED7TDDHwLc8ABzbhAI5wRvjiGaeAOorwjANhAt6QDX/Qft6QQzsBCqpQZP8wOt04Kp0CjsRgDsKwDvRADGe3Ex8QCqajKNzYKq8gBeD4BvawDf3gDJEoFYWwRe4QKKgwI4BSAuA4FtvAg1+RA6aQY731kP/QDY/gcXaTCfAwDBXAF4mQdanDkdPwL53TAsfQLYGRBAL0DyGTCjMCDT+epTgqIhkBsAhkojk2+Q+/8ATgaBtTUDH90ApBiQtDVZSSwQCpUC24oAozAgv855SMAQiisgxUqQ8siZWMkQGVdg1UGQ5vBpaSUQjoMA+roChahpaMMQJLkinRIG5wGRia0A+xogyveJdSEQTcsCy64JeSwQvu8A+aQJiMEQj40A93oJiBMQDTkA7EBplqsQnXYJmB4QHLoJmBIQe2EhAAOw==")); -if (img-img1>16) do { werror("failure; Image.image/advanced drawing/Image.image->polyfill 3 (hollow stars): "+( "differ too much" )+"\n"); return 0; } while (0); +if (!(img-img1<16)) do { werror("failure; Image.image/advanced drawing/Image.image->polyfill 3 (hollow stars): "+( "differ too much" )+"\n"); return 0; } while (0); @@ -498,11 +498,240 @@ img->polyfill(a); object img1=Image.GIF.decode(MIME.decode_base64( "R0lGODlhZABkAOYAAAAAAAIAAAEAAAQAAAUAAAYAAAMAAAgAAQkAAQoAAQsAAQwAAQ0AAQ4AAQ8AAQcAABAAAhEAAhIAAhMAAhUAAhQAAhYAAhcAAhgAAxkAAxoAAxsAAxwAAx0AAx4AAx8AAyAABCEABCIABCMABCQABCUABCYABCcABCgABSkABSoABSsABSwABS0ABS4ABS8ABTAABjEABjIABjMABjQABjUABjYABjcABjgABzkABzoABzsABzwABz0ABz4ABz8AB0AACEMACEIACEYACEcACEgACUkACUoACUsACUwACU0ACU4ACU8ACVAAClIAClEAClMAClUAClgAC1cAClkAC1YAClsAC1wAC10AC14AC18AC2AADGEADGIADGMADGQADGUADGYADGcADGgADWkADWoADWsADWwADW0ADW4ADW8ADXAADnEADnMADnQADnUADnIADncADngAD3kAD3YADnoAD3sAD3wAD0EACH0AD38AD34AD4AAEAAAAAAAAAAAACwAAAAAZABkAAYH/4AAAIKDg4WGhoiJiYuMjI6Pj5GSkpSVlZeYmJqbm52enqChoaOkpKanp6mqqqytra+wsLKzs7W2tri5ubu8hgq+vsHClSpFxMTIxDl6NMnJz7YCRnx8HNDQ2KoEUtV6BdnZ4Z4KX9V8aOLi6pUTaud8UeukKC3zsx508Hw9954HdcKI8EdqxZ19fEoQ3ISEj54rFxZW2qEHIZ8GEitRqMhnzxMHGQcJaGiRTshKWeDdGXJAIgEqFqtlOSnpBMI4Owb4UxAmZrUhNB8JeIeQzQsB6yoQ9eki6CMdPsmQyPYhjs9zEZ0mAnhViwZiLQ5e5XMngFZGSsbqgRKBFw+OY//FnGVkAa7PO0USwBo5Fh6TuYy09K0mpweBUwWsDD6HA3AiFIurwZGBdNMCMZGrgXBsSMCazHzMnMBE4XNmPS05D9oBuhqXa4xAyGm9RrUhBHZaO6wywZALsaCl2Da0RHe1PEgU+LCbGc/wQReYg85jvFqK54O2VK9+ri12Fdy5z8E+KACb8Ma5kB/EA73uI+sBJMjtPrOM+ACY1M/8NT4G6ftZtIdO+HURYF9l4DfICgeOBYWCAAQAR4M+7QAhAD1QGNN1ECYAnIbn1MGDARA2AaJFZ4yg4H8nIqRHFSDF50WLFtXRA4nYdTAbjRahMdVwItTBo096SAGBaid8OKT/RXb8QOBZLVC3ZF9pmHDWDHtMGRkV3p3EjJaZ2QHEkwv9ACCYY6kx2kJDoFmdFRLcw5eb1d0hxGHZBOAEneitwSExBnTDp3tX9OYLAVgMut8dQeA5ywMGKhogGyrMkkBPkjaYRQWqMFBGpvXdgcYVSOigggWnQJAGqK3p0UYXT+ABwwcNVAZLBROyetUcY0hBhA0lUECmLxi8oes5eaiRhRI8sLCBXv5wYFWmaUARhAwhQGDWSSHMwaqVZ5lAX6Z6IHDWClJyZ8caX1ChhBA2nFGdGWfFkGVfetSRhhdTIAFEDSl4IMEDkrxQ3RJa3QCXHnKgwUUVR/wwAwocROCo1ioBmNZaDE5F0IMMJmzgwLDJ1GAcpxfOMoAbrZmUsi2sgUbFy7YUMG1kPNBsCx6gfaCzpUIulgfJP4dCRGRfFD0LA0r6RITSs6Q1WKVQtyLBvVfpwUDVsEDRlxpcwxLdWE6EDQtMV9VgdisdnFkNBmu3ol1Mc9gadygj+ITF3a2AERMQfKuSQkwqBn6KGQjtQbDhpBi8zxiMnxLAUtUgEfkpJsPT1OWhrAzPkZyHEjMfbYROis3VVGE6KTzzkcPqoSAgJGywb0KEHTjWjgkDM+nuCQVzBQIAOw==")); -if (img-img1>16) do { werror("failure; Image.image/advanced drawing/Image.image->polyfill 4 (star): "+( "differ too much" )+"\n"); return 0; } while (0); +if (!(img-img1<16)) do { werror("failure; Image.image/advanced drawing/Image.image->polyfill 4 (star): "+( "differ too much" )+"\n"); return 0; } while (0); if (!equal(img->max(),({128,0,16}))) do { werror("failure; Image.image/advanced drawing/Image.image->polyfill 4 (star): "+( "wrong maxcolor ("+img->max()[0]+","+img->max()[1]+","+img->max()[2]+")" )+"\n"); return 0; } while (0); return 1; + +} +mixed b() { return 1; } + +.... +test 24, expected result: EQ +mixed a(){ +# 1 "-" + + +#324 "testsuite.in.in" +object img=Image.image(200,200)->test(); +img->tuned_box(50,50,150,150,({({0,0,0}),({255,0,0}),({0,255,0}),({0,0,255})})); +object c=Image.colortable(img,1000)->cubicles(16,16,16,4); +if (sizeof(c)<200) do { werror("failure; Image.image/colortable/colortable - standard: "+( "too few colors" )+"\n"); return 0; } while (0); +object img1=(c*img); +if (!(img-img1<50)) do { werror("failure; Image.image/colortable/colortable - standard: "+( "differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0); +return 1; + +} +mixed b() { return 1; } + +.... +test 25, expected result: EQ +mixed a(){ +# 1 "-" + + +#333 "testsuite.in.in" +object img=Image.image(200,200)->test(); +img->tuned_box(50,50,150,150,({({0,0,0}),({255,0,0}),({0,255,0}),({0,0,255})})); +object c=Image.colortable(32,32,32)->floyd_steinberg(); +object img1=(c*img); +if (!(img-img1<50)) do { werror("failure; Image.image/colortable/colortable - floyd-steinberg: "+( "differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0); +return 1; + +} +mixed b() { return 1; } + +.... +test 26, expected result: EQ +mixed a(){ +# 1 "-" + + +#341 "testsuite.in.in" +object img=Image.image(200,200)->test(); +img->tuned_box(50,50,150,150,({({0,0,0}),({255,0,0}),({0,255,0}),({0,0,255})})); +object c=Image.colortable(32,32,32)->ordered(); +object img1=(c*img); +if (!(img-img1<32)) do { werror("failure; Image.image/colortable/colortable - ordered: "+( "differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0); +return 1; + + + +} +mixed b() { return 1; } + +.... +test 27, expected result: EQ +mixed a(){ +# 1 "-" + + +#353 "testsuite.in.in" +object img=Image.image(100,100)->test(); +object img1=Image.PNM.decode(Image.PNM.encode(img)); +if (img!=img1) do { werror("failure; Image.image/encoding/decoding/Image.PNM.encode/decode: "+( "differ" )+"\n"); return 0; } while (0); +return 1; + +} +mixed b() { return 1; } + +.... +test 28, expected result: EQ +mixed a(){ +# 1 "-" + + +#359 "testsuite.in.in" +object img=Image.image(100,100)->test(); +object c=Image.colortable(img,250)->cubicles(10,10,10,1)->floyd_steinberg(); +img=c*img; +object img1=Image.GIF.decode(Image.GIF.encode(img)); +if (img!=img1) do { werror("failure; Image.image/encoding/decoding/Image.GIF.encode/decode: "+( "differ ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0); +return 1; + +} +mixed b() { return 1; } + +.... +test 29, expected result: EQ +mixed a(){ +# 1 "-" + + +#367 "testsuite.in.in" +object img=Image.image(100,100)->test(); +object c=Image.colortable(img,256)->cubicles(16,16,16,1); +img=c*img; +object img1=Image.GIF.decode(Image.GIF.encode(img,c)); +if (img!=img1) do { werror("failure; Image.image/encoding/decoding/Image.GIF.encode/decode colortable : "+( "differ ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0); +return 1; + +} +mixed b() { return 1; } + +.... +test 30, expected result: EQ +mixed a(){ +# 1 "-" + + +#375 "testsuite.in.in" +object img=Image.image(100,100)->test(); +object c=Image.colortable(img,256)->floyd_steinberg()->cubicles(16,16,16); +img=c*img; +object img1=Image.GIF.decode(Image.GIF.encode(img,c)); +if (!(img-img1<50)) do { werror("failure; Image.image/encoding/decoding/Image.GIF.encode/decode colortable w/ floyd-steinberg: "+( "differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0); +return 1; + + +} +mixed b() { return 1; } + +.... +test 31, expected result: EQ +mixed a(){ +# 1 "-" + + +#386 "testsuite.in.in" +foreach ( +({ ({ "black", ({ 0, 0, 0 }), ({ 0, 0, 0 }), 0 }), +({ "blue", ({ 0, 0, 255 }), ({ 170, 255, 255 }), 41 }), +({ "cyan", ({ 0, 255, 255 }), ({ 128, 255, 255 }), 168 }), +({ "green", ({ 0, 255, 0 }), ({ 85, 255, 255 }), 127 }), +({ "magenta", ({ 255, 0, 255 }), ({ 213, 255, 255 }), 128 }), +({ "red", ({ 255, 0, 0 }), ({ 0, 255, 255 }), 87 }), +({ "white", ({ 255, 255, 255 }), ({ 0, 0, 255 }), 255 }), +({ "yellow", ({ 255, 255, 0 }), ({ 43, 255, 255 }), 214 }) }), +array i) +{ +object c1=Image.color(i[0]); +object c2=Image.color(@i[1]); +object c3=Image.color.rgb(@i[1]); + +if (c1!=c2) + + +do { werror("failure; Image.image/Image.color/Image.color: "+( "color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " "by values != by name" )+"\n"); return 0; } while (0); +if (c1!=c3) + + +do { werror("failure; Image.image/Image.color/Image.color: "+( "color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " "by rgb() != by name|values" )+"\n"); return 0; } while (0); + +if (c1->r!=i[1][0] || +c1->g!=i[1][1] || +c1->b!=i[1][2]) + + +do { werror("failure; Image.image/Image.color/Image.color: "+( "color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " "wrong ->r("+c1->r+"), ->g, ->b reported" )+"\n"); return 0; } while (0); + +if (c1->rgb()[0]!=i[1][0] || +c1->rgb()[1]!=i[1][1] || +c1->rgb()[2]!=i[1][2]) + + + +do { werror("failure; Image.image/Image.color/Image.color: "+( "color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " "wrong ->rgb() (" +c1->rgb()[0]+","+c1->rgb()[1]+","+c1->rgb()[2]+") reported" )+"\n"); return 0; } while (0); + +if (c1->hsv()[0]!=i[2][0] || +c1->hsv()[1]!=i[2][1] || +c1->hsv()[2]!=i[2][2]) + + + +do { werror("failure; Image.image/Image.color/Image.color: "+( "color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " "wrong ->hsv() (" +c1->hsv()[0]+","+c1->hsv()[1]+","+c1->hsv()[2]+") reported" )+"\n"); return 0; } while (0); + +if (c1->greylevel()!=i[3]) + + + +do { werror("failure; Image.image/Image.color/Image.color: "+( "color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " "wrong ->greylevel() ("+c1->greylevel()+", should be " +i[3]+") reported" )+"\n"); return 0; } while (0); + +if (c1->grey()->r!=i[3]) + + + +do { werror("failure; Image.image/Image.color/Image.color: "+( "color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " "wrong ->grey()->r ("+c1->grey()->r+", should be " +i[3]+") reported" )+"\n"); return 0; } while (0); +}; +return 1; + +} +mixed b() { return 1; } + +.... +test 32, expected result: EQ +mixed a(){ +# 1 "-" + + +#448 "testsuite.in.in" +if (!arrayp(indices(Image.color))) +do { werror("failure; Image.image/Image.color/indices(Image.color): "+( "wrong type\n" )+"\n"); return 0; } while (0); +if (!stringp(indices(Image.color)[0])) +do { werror("failure; Image.image/Image.color/indices(Image.color): "+( "wrong type of elements\n" )+"\n"); return 0; } while (0); +if (sizeof(indices(Image.color))<8) +do { werror("failure; Image.image/Image.color/indices(Image.color): "+( "too few colors\n" )+"\n"); return 0; } while (0); +return 1; + +} +mixed b() { return 1; } + +.... +test 33, expected result: EQ +mixed a(){ +# 1 "-" + + +#457 "testsuite.in.in" +if (!arrayp(values(Image.color))) +do { werror("failure; Image.image/Image.color/values(Image.color): "+( "wrong type\n" )+"\n"); return 0; } while (0); +if (!objectp(values(Image.color)[0])) +do { werror("failure; Image.image/Image.color/values(Image.color): "+( "wrong type of elements\n" )+"\n"); return 0; } while (0); +if (sizeof(indices(Image.color))!=sizeof(values(Image.color))) +do { werror("failure; Image.image/Image.color/values(Image.color): "+( "not the same size of indices() and values()\n" )+"\n"); return 0; } while (0); +return 1; + } mixed b() { return 1; }