Some time ago I had a project where I rendered something to a high quality buffer, which I wanted to export as a png. I used libpng++ for that, the downside was that this library allocated the image again (in a different format). But the only thing I wanted to do is convert my format to another format (pixel by pixel), so this allocation seemed redundant. That's why I wanted a image stream library.
For the png format libpng is required. For the jpg format libjpeg or libjpeg-turbo is required. The bmp format does not depend on anything, so you can output images without other libraries :D.