The goal of our first project is to experiment with image filters. We take an existing image which we modify, usually on a pixel basis, according to simple rules. We'll be using the GIMP's plug-in interface. I've provided example code with two filters, described below.

I suggest you work under linux. The included Makefile should work with the GIMP's standard installation under Redhat. The file gadget.c should need minimal editing; effects.c provides the example plug-ins. The resulting program (gadget) needs to be placed in your ~/.gimp/plug-ins/ directory (Actually I suggest you install a soft-link which points into your development directory - but to each his own.)

If you're uninspired, some things you may want to try: Play with colorspace conversion - I particularly like the HSV colorspace. Perhaps it's interesting to blur only one component, or exchange components, or invert or fix a component. Perhaps you can define a new sort of color space (different than RGB, CMYK, or HSV) and play with its components? Or...

Most importantly - play. Here's the tarfile.
Rainbow creates multicolor effect by altering the hue of the image. Each pixel's original hue is discarded, and replaced by a linear multiple of the pixel's value. The provided functions rgb_to_hsv() and hsv_to_rgb() convert between the color spaces. Parameter 2 controls the multiple (and hence how quickly the hue changes) while Parameter 1 controls the initial offset.
Rubbing creates a charcoal rubbing effect of an image. For each pixel, the average intensity of the neighboring pixels is computed. If the average is greater than the pixels intensity, it is colored black - otherwise it is colored white. Parameter 1 controls the size of the "neighborhood".