diff --git a/src/modules/Image/encodings/x.c b/src/modules/Image/encodings/x.c
index d0bc918105606a5edbd30f13bf2b33eb1d80e341..b344e2cceeb1fa38bdbf78deb8b78bb6d8a0a916 100644
--- a/src/modules/Image/encodings/x.c
+++ b/src/modules/Image/encodings/x.c
@@ -1,9 +1,9 @@
-/* $Id: x.c,v 1.22 1999/05/23 17:47:01 mirar Exp $ */
+/* $Id: x.c,v 1.23 1999/06/09 19:44:43 mirar Exp $ */
 
 /*
 **! module Image
 **! note
-**!	$Id: x.c,v 1.22 1999/05/23 17:47:01 mirar Exp $
+**!	$Id: x.c,v 1.23 1999/06/09 19:44:43 mirar Exp $
 **! submodule X
 **!
 **!	This submodule handles encoding and decoding of
@@ -29,7 +29,7 @@
 #include <winsock.h>
 #endif
 
-RCSID("$Id: x.c,v 1.22 1999/05/23 17:47:01 mirar Exp $");
+RCSID("$Id: x.c,v 1.23 1999/06/09 19:44:43 mirar Exp $");
 #include "pike_macros.h"
 #include "object.h"
 #include "constants.h"
@@ -1086,6 +1086,56 @@ void image_x_decode_pseudocolor(INT32 args)
    }
 }
 
+void image_x_encode_bitmap(INT32 args)
+{
+   int xs;
+   int i,j,left,bit,dbits;
+   struct pike_string *res;
+   unsigned char *d;
+   rgb_group *s;
+   struct image *img;
+
+   if (!args)
+      SIMPLE_TOO_FEW_ARGS_ERROR("Image.X.encode_bitmap",1);
+
+   if (sp[-args].type!=T_OBJECT ||
+       !(img=(struct image*)get_storage(sp[-args].u.object,image_program)))
+      SIMPLE_BAD_ARG_ERROR("Image.X.encode_bitmap",1,"image object");
+
+   if (!img->img)
+      SIMPLE_BAD_ARG_ERROR("Image.X.encode_bitmap",1,"image object with image");
+
+   xs=(img->xsize+7)>>3;
+
+   res=begin_shared_string(xs*img->ysize);
+   d=(unsigned char *)res->str;
+
+   s=img->img;
+
+   j=img->ysize;
+   while (j--)
+   {
+      i=img->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;
+      }
+   }
+
+   pop_n_elems(args);
+   push_string(end_shared_string(res));
+}
+
 /**** init module ********************************************/
 
 struct program *image_x_module_program=NULL;
@@ -1099,9 +1149,11 @@ void init_image_x(void)
    add_function("encode_pseudocolor",image_x_encode_pseudocolor,
 		"function(object,int,int,int,object,void|string:string)",0);
 
+   add_function("encode_bitmap",image_x_encode_bitmap,
+		"function(object:object)",0);
+
    add_function("examine_mask",image_x_call_examine_mask,
 		"function(int:array(int))",0);
-
 }
 
 void exit_image_x(void)