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()
Changes
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
iBMP structs BITMAPFILEHEADER, BITMAPCOREHEADER, BITMAPINFOHEADER, BITMAPV4HEADER and BITMAPV5HEADER 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
Removals
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
v0.1.2b - March 23, 2012
Bugfixes
Fixed bug in function iAbstractImage::rotate180() which caused color bytes in each pixel to be reversed
Fixed bug in function iAbstractImage::flipHorizontal() which caused color bytes in each pixel to be reversed, and sometimes caused a crash
Fixed bug which caused developer field to be written to Targa images even if no developer field entries were present
Fixed function iAbstractImage::hasPalette() which returned false when there was a palette, and vice versa
Fixed bug which caused Targa footer to write wrong developer and extension offsets with paletted images
Additions
Added command-line front-end called 'imagenconv'
Added iBMP class, inherited from iAbstractImage, which handles loading and saving of BMP image files
Added extra error-reporting code to class iImage
In gel namespace, added typedef long iLONG and typedef short iSHORT
Added functions setOrigin() and getOrigin() to class iAbstractImage
Added function setPalette() to class iAbstractImage
Added function getClearCol() to class iAbstractImage
Added new private member 'worigin' and accessor functions setWriteOrigin() and getWriteOrigin() to class iAbstractImage
Added function getType() to class iPalette
Added operator= to class iPalette
Added function convertFormat() to class iPalette
Added ability to read and write author name and comment to and from PNG images
Added global functions iGetTitle() and iGetVerString() to get software title and version
Added iPalFormat enumerator iPalRGB16
Changes
Improved the way image origin is handled in class iTGA
Class iPNG can now fully read and write PNG paletted images
Renamed iPalType enumeration to iPalFormat
Renamed iPalFormat enumerators iPalRGB24 and iPalRGBA32 to iPalRGB and iPalRGBA, respectively
Many functions in iAbstractImage now check if image data is NULL before performing an operation
Class iTGA can now read and write 32-bit palettes in Targa images
Targa images don't write the Developer Area nor Extension Area by default anymore
Renamed functions iAbstractImage::setAuthorName() and getAuthorName() to *author()
Renamed functions iAbstractImage::setAuthorComment() and getAuthorComment()to *Comment()
Removals
Removed function iTGA::setTargaOrigin(); iAbstractImage::setWriteOrigin() should be used instead
Removed iPalFormat enumerators iPalBGR24 and iPalBGR32
In gel namespace, removed #define IMAGEN_ID
v0.1.1b - February 18, 2012
Bugfixes
When saving a TGA image loaded from disk, it now saves with same compression options as original image (unless changed by user, of course)
AttributesType member of Targa Extension Area is now set to 0 if no alpha channel exists; (it used to always be set to 3, which means there's an alpha channel
Fixed problem with Linux makefile which caused static library to build improperly
Changes / Additions / Removals
PNG images retain more information such as background color, offset, interlace type, compression, color palette, and creation time; and can write them too
PNG images can now be written to memory buffers
Removed libpng <png.h> header inclusion from iPNG.h header in include directory
Completed read/write support for colormap Targa images with 24/32-bit palettes
Creation time can now be read and retained from Targa Extension Area, if present
Author name and comments can be read from and written to Targa images
Added support for reading and writing developer fields in Targa images
Added iImageFormat enumerator iRGB16 for native 16-bit RGB image data support
Added class iLinkedList
iDataStream renamed to iMemoryStream
Added iDataStream, an abstract base class for data streams
Classes iFileStream and iMemoryStream now inherit iDataStream
New polymorphic design used for I/O streams when reading/writing images
Added copy constructors to iAbstractImage and its inheritance
Overloaded assignment operator in iAbstractImage and its inheritance
Added constructors for using existing data streams in classes inherited from iAbstractImage
Implemented virtual functions loadImage() and saveImage() in classes inherited from iAbstractImage
Removed all load() and save() functions from all classes inherited from iAbstractImage; iAbstractImage now handles loading/saving, calling virtual functions loadImage() and saveImage()
Removed iRawImage constructors iRawImage( const char* ) and iRawImage( Iubyte*, int )
Improved the way images are loaded and saved in class iImage, it now preserves all image attributes
Class iMemoryStream:
Added ability to delete data on destruction
Function write() now takes a const void* instead of void*
Functions read() and write() now contain third parameter 'long size', just like in iFileStream
Added function close() to disassociate memory buffer from stream
Class iPalette:
Completely overhauled class
Added accessor functions getData(), length(), getBpp(), depth(), and dataSize()
Added functions for adding, deleting, and getting palette entries
Added heap allocation
Class iAbstractImage:
Function convertFormat() can now convert from indexed data to any other image color format
Added iDateTime object and accessor functions for storing image's time of creation
Added accessor functions getAuthorName(), setAuthorName(), getAuthorComment(), and setAuthorComment() for setting/getting author name and comment
Added function updateCreationTime() allowing user to choose whether or not to update image creation time when writing images
Moved function init() from private scope to protected
Removed virtual qualifier from functions hasAlpha(), getPixel(), setPixel(), and getPixelIndex()
Removed constructors iAbstractImage(const char*) and iAbstractImage(Iubyte*, len)
Removed virtual qualifier from all load() and save() functions and implemented them
Added protected pure virtual functions loadImage() and saveImage() which will be reimplemented in inheritance to handle image loading/saving
Added load() and save() functions for using existing data streams
Class iPNG:
Added function setCompressLevel() which sets the level of compression to use when writing PNG images
Added function clear()
Class iTGA:
Added struct TargaDevField, to aid in adding developer fields to Targa images
Added function addDevField() which allows you to write custom developer fields to Targa images
Added function enableDevArea() to enable or disable the Developer Area when writing v2.0 Targa images
Removed functions getHeader(), getFooter(), and getExtension()
Class iImage:
Added an additional constructor
Added function clear()
Removed several overloaded load() and save() functions
Class iDateTime:
Added accessor functions to set custom date/time information
Added copy constructor and overloaded operator=
v0.1b - January 13, 2012
Changes
Switched to a more liberal license: The GNU Lesser GPL
Renamed all enumerators in imagen namespace; they are now written in camelCase
Renamed function getSize() to size() in iFileStream and iDataStream
Moved all imagen typedefs into imagen namespace
Additions
Added iFileStream functions getc() and putc()
Added iDateTime class, a cross-platform wrapper for getting local date and time information
Added iAbstractImage class, an abstract base class for storing, reading, and writing image data
Added iTGA class, inherited from iAbstractImage, which handles loading and saving of Targa image files
Added iImage class, inherited from iAbstractImage, which can generically load and save all supported image types
Added iBitMask enumerators
Added iImageOrigin enumerators
Added iImageFormat enumerators iNULL, iMono, iIndex, iBW, and iBWA
Added iRawImage class, inherited from iAbstractImage, which handles raw image data
Added iPNG class, inherited from iAbstractImage, which handles loading and saving of PNG image files
Added iPalette class for storing color palette data
Added iPalType enumerators iPalNull, iPalRGB24, iPalRGBA32, iPalBGR24, and iPalBGRA32
Added iColor class for color storage and vector manipulation
Added global functions iGetPixel(), iAlloc(), and iDeleteData()
Removals
Removed imagenTGA class
Removed imagenPNG class
Removed imagenData structure
Removed function iRoutines::flipVertical(); iAbstractImage now handles image flipping
Removed functions iRoutines::RGBtoBGR() and iRoutines::BGRtoRGB(); use iAbstractImage::swapRGB()
Removed function iRoutines::convColMode(); use iAbstractImage::convertFormat()