Hi,
For true colour images, PPM is by far the simplest. For greyscale, PGM is the way to go.
PPM has an ASCII header with the following structure
P6
255
From a C perspective, reading the header is a simple as using
int width, height;
fscanf(fileName, "P6\n%d\n%d\n255\n", &width, &height);
The data is stored as triplets of bytes (red green and blue respectively), one for each pixel and follows immediately on the line after the '255' value.
PGM is very similar:
P5
255
So you could use the following to read the header
int width, height;
fscanf(fileName, "P5\n%d\n%d\n255\n", &width, &height);
Here the data consists of single bytes representing a grayscale value of 0-255.
I can't think of a simpler pair of formats that can be used within any serious image manipulation package.