PNG read/write functions are available. For the moment:
- they can only read grayscale images (color and alpha images will be available when the color image structures are defined)
- they only read 8bit or 16bit (no monochrome, 2bit or 4bit yet)
- they can write 8bit or 16bit grayscale
- a float image is converted to 16bit integer by multiplying it by 65535 (we assume float values are between 0 and 1)
- a png file is loaded into a float image by dividing it by 255 or 65535 (resulting in values between 0 and 1)
If explicitely requested, the file is converted to the desired
datatype (8bit, 16bit unsigned integer, or float); else, the most
appropriate image structure is selected, in a mw_image
container.

It's not freezed, and some parts are likely to be modified in the future, but the main design is there.
Adding a new image format requires 3 new functions, and 4 changes
in switch statements; adding a new image structure requires 4 changes
in switch statements (and the functions mw_load_xximage() and
mw_save_xximage()).
So, we now have the bare tools to start working on the algorithms:
- grayscale image formats
- native human-readable text i/o formats
- common lossless binary i/o formats