diff --git a/src/modules/image/doc/image.html b/src/modules/image/doc/image.html
index deb62fd637b8b81889f7a54f5ae27922d6095371..9c65500ac01872c13570651fd0ee3cc30a83522e 100644
--- a/src/modules/image/doc/image.html
+++ b/src/modules/image/doc/image.html
@@ -544,4 +544,11 @@ int main()
    write(o->togif_fs());
    return 0;
 }
+</pre>
+
+<h2>Undocumented, yet:</h2>
+<pre>
+object image->select_from(int x,int y);
+object image->distancesq(int r,int g,int b);
+array(int) image->getpixel(int x,int y);
 </pre>
\ No newline at end of file
diff --git a/src/modules/image/image.c b/src/modules/image/image.c
index 62172bd7ed44fbfd1f7db98789fd2c869b97ee71..a79178bc22b2094d628ac92c356f9ce18bb6671d 100644
--- a/src/modules/image/image.c
+++ b/src/modules/image/image.c
@@ -1131,6 +1131,33 @@ void image_setpixel(INT32 args)
    push_object(THISOBJ);
 }
 
+void image_getpixel(INT32 args)
+{
+   INT32 x,y;
+   rgb_group rgb;
+
+   if (args<2||
+       sp[-args].type!=T_INT||
+       sp[1-args].type!=T_INT)
+      error("Illegal arguments to image->getpixel()\n");
+
+   if (!THIS->img) error("No image.\n");
+
+   x=sp[-args].u.integer;
+   y=sp[1-args].u.integer;
+   if (!THIS->img) return;
+   if(x<0||y<0||x>=THIS->xsize||y>=THIS->ysize)
+      rgb=THIS->rgb;
+   else
+      rgb=pixel(THIS,x,y);
+
+   pop_n_elems(args);
+   push_int(rgb.r);
+   push_int(rgb.g);
+   push_int(rgb.b);
+   f_aggregate(3);
+}
+
 void image_line(INT32 args)
 {
    if (args<4||
@@ -2239,6 +2266,8 @@ void init_image_programs()
 		"function(int,int,int:object)",0);
    add_function("setpixel",image_setpixel,
 		"function(int,int,"RGB_TYPE":object)",0);
+   add_function("getpixel",image_getpixel,
+		"function(int,int:array(int))",0);
    add_function("line",image_line,
 		"function(int,int,int,int,"RGB_TYPE":object)",0);
    add_function("circle",image_circle,