imagen 0.1.3b Released

This release contains support for JPEG images via libjpeg, several important bugfixes, an implicit data sharing system, and countless additions and improvements across the entire library.

Notable Improvements

  • Support for reading/writing JPEG images
  • Improved unit resolution support
  • Set custom row callback function
  • Implicit data sharing (copy-on-write)
  • Several major bugfixes

Even though the JPEG implementation is completely stable and very usable, it’s still missing a few useful features, namely, support for exif metadata, thumbnails, comments and restart markers.

This is probably the last beta release, as the interface is now very well stabilized. The next release will probably be considered stable and remove the beta qualifier.

Special thanks to the Independent JPEG Group for making JPEG support virtually painless.


Change Log

v0.1.3b – May 4, 2012


  • Fixed bug which caused paletted BMP image file headers to write incorrect offset to image data
  • Fixed bug in function iFileStream::atEnd() which caused a crash when calling it before a stream was opened or after it was closed
  • Fixed bug in class iPNG which caused memory corruption when reading PNG images that did not contain a background chunk
  • Additions

  • Added iJPEG class, inherited from iAbstractImage, which handles loading and saving of JPEG images
  • Added class iSharedData for implicit data sharing
  • Added class iJobTime
  • Added iTypeJPEG enumerator to iImageType enumeration
  • Added functions iPNG::getCompressLvl() and iPNG::getInterlaceType()
  • Added enumeration iUnitType with enumerators iUnit, iCentimeter, iMeter and iInch
  • Added enumeration iWrapMode with enumerators iWrapBackground, iWrapClamp and iWrapRepeat
  • Added static function isValid() to all image classes; use it to test if an image type is valid
  • Added virtual functions getc() and putc() to class iDataStream
  • Overload operator= in iBMP, iJPEG, iPNG and iTGA
  • Class iAbstractImage:

    • Added private data member unitType and public accessor functions setUnitType() and getUnitType()
    • Added private data member jobTime and public accessor function getJobTime() and setJobTime()
    • Added accessor functions set*Res() and get*Res()
    • Added pure virtual function isFormatSupported() and implemented it in all classes inherited from it
    • Added pad() function for padding image data
    • Added functions setReadFunc() and setWriteFunc() that sets functions to be called whenever a row of image data is read or written
    • Added function iAbstractImage::detachData()


  • Significantly improved unit resolution support in all image classes (except iTGA, which doesn’t support it)
  • Added int alpha parameter to functions iAbstractImage::convertFormat() and iPalette::convertFormat()
  • Renamed function iTGA::getVersion() to iTGA::getTargaVersion()
  • iAbstractImage save() functions now make sure image format is supported before saving image
  • Classes iBMP, iJPEG, iPNG and iTGA can now call a user-provided function whenever a row of image data is read or written
  • iImageType enumerators have been assigned different values
  • Compression level in class iPNG is now set to 9 by default
  • Image classes now check if stream is at end before loading images with user-provided stream
  • PNG writer can now save image’s background color
  • TGA writer can now read job time from Extension Area
  • iTGA structs TGA_HEADER, TGA_FOOTER, TGA_EXTENSION and TGA_DEVTAG are now private
  • Class iImage:

    • Private function determineType() can now recognize extensions in ALL CAPS as well as lowercase
    • Load functions now test for image type validity with buffers and streams before reading image; it doesn’t spit out lots of error messages anymore
    • Overloaded all load() and save() functions, including functions for streams

    Class iAbstractImage:

    • Renamed private members XPxPerMeter and YPxPerMeter to XResolution and YResolution
    • Implemented implicit data sharing (copy-on-write)
    • Function resize() now preserves original image, returns bool, and can use X and Y offsets


  • Removed function iTGA::getTargaType()
  • Removed class iRoutines
  • Removed iTypePCX enumerator from iImageType enumeration
  • Removed function iAbstractImage::deleteData()
  • Removed all iTGA::getJob*() and iTGA::setJob*() functions
  • Projects

  • Added libjpeg
  • Added –format option to imagenconv
This entry was posted in imagen. Bookmark the permalink.

Leave a Reply