diff --git a/src/modules/Image/image.c b/src/modules/Image/image.c index b91ad00824a94b9433a70fa10ce7e2a66473a099..d0322b03b1ed1a3bf4569750781d607b8aa33c81 100644 --- a/src/modules/Image/image.c +++ b/src/modules/Image/image.c @@ -1,9 +1,9 @@ -/* $Id: image.c,v 1.143 1999/06/07 19:58:08 mirar Exp $ */ +/* $Id: image.c,v 1.144 1999/06/09 19:38:45 mirar Exp $ */ /* **! module Image **! note -**! $Id: image.c,v 1.143 1999/06/07 19:58:08 mirar Exp $ +**! $Id: image.c,v 1.144 1999/06/09 19:38:45 mirar Exp $ **! class Image **! **! The main object of the <ref>Image</ref> module, this object @@ -97,7 +97,7 @@ #include "stralloc.h" #include "global.h" -RCSID("$Id: image.c,v 1.143 1999/06/07 19:58:08 mirar Exp $"); +RCSID("$Id: image.c,v 1.144 1999/06/09 19:38:45 mirar Exp $"); #include "pike_macros.h" #include "object.h" #include "constants.h" @@ -3511,6 +3511,47 @@ void image_cast(INT32 args) SIMPLE_BAD_ARG_ERROR("Image.Image->cast",1,"string(\"array\"|\"string\")"); } +void image_tobitmap(INT32 args) +{ + int xs; + int i,j,left,bit,dbits; + struct pike_string *res; + unsigned char *d; + rgb_group *s; + + pop_n_elems(args); + if (!THIS->img) error("No image.\n"); + + xs=(THIS->xsize+7)>>3; + + res=begin_shared_string(xs*THIS->ysize); + d=(unsigned char *)res->str; + + s=THIS->img; + + j=THIS->ysize; + while (j--) + { + i=THIS->xsize; + while (i) + { + left=8; + bit=1; + dbits=0; + while (left-- && i) + { + if (s->r||s->g||s->b) dbits|=bit; + bit<<=1; + s++; + i--; + } + *(d++)=(unsigned char)dbits; + } + } + + push_string(end_shared_string(res)); +} + /***************** global init etc *****************************/ #define tRGB tOr3(tColor,tVoid,tInt) tOr(tInt,tVoid) tOr(tInt,tVoid) @@ -3532,38 +3573,11 @@ void init_image_image(void) ADD_FUNCTION("clear",image_clear, tFunc(tRGB,tObj),0); -#if 0 ADD_FUNCTION("toppm",image_toppm,tFunc(,tStr),0); - ADD_FUNCTION("frompnm",image_frompnm,tFunc(tStr,tOr(tObj,tStr)),0); - ADD_FUNCTION("fromppm",image_frompnm,tFunc(tStr,tOr(tObj,tStr)),0); - ADD_FUNCTION("togif",image_togif,tFunc(,tStr),0); - ADD_FUNCTION("togif_fs",image_togif_fs,tFunc(,tStr),0); - ADD_FUNCTION("gif_begin",image_gif_begin,tFunc(tInt,tStr),0); - ADD_FUNCTION("gif_add",image_gif_add, - tOr(tFunc(tOr(tInt,tVoid) tOr(tInt,tVoid) - tOr(tInt,tFlt),tStr), - tFunc(tOr(tInt,tVoid) tOr(tInt,tVoid) - tArr(tArr(tInt)) tOr(tInt,tFlt),tStr)),0); - ADD_FUNCTION("gif_add_fs",image_gif_add_fs, - tOr(tFunc(tOr(tInt,tVoid) tOr(tInt,tVoid) tOr(tInt,tFlt),tStr), - tFunc(tOr(tInt,tVoid) tOr(tInt,tVoid) - tArr(tArr(tInt)) tOr(tInt,tFlt),tStr)),0); - ADD_FUNCTION("gif_add_nomap",image_gif_add_nomap, - tOr(tFunc(tOr(tInt,tVoid) tOr(tInt,tVoid) tOr(tInt,tFlt),tStr), - tFunc(tOr(tInt,tVoid) tOr(tInt,tVoid) - tArr(tArr(tInt)) tOr(tInt,tFlt),tStr)),0); - ADD_FUNCTION("gif_add_fs_nomap",image_gif_add_fs_nomap, - tOr(tFunc(tOr(tInt,tVoid) tOr(tInt,tVoid) tOr(tInt,tFlt),tStr), - tFunc(tOr(tInt,tVoid) tOr(tInt,tVoid) - tArr(tArr(tInt)) tOr(tInt,tFlt),tStr)),0); - ADD_FUNCTION("gif_end",image_gif_end, - tFunc(,tStr),0); - ADD_FUNCTION("gif_netscape_loop",image_gif_netscape_loop, - tFunc(,tStr),0); -#endif ADD_FUNCTION("cast",image_cast, tFunc(tStr,tStr),0); + ADD_FUNCTION("tobitmap",image_tobitmap,tFunc(,tStr),0); ADD_FUNCTION("copy",image_copy,