Date: 1-31-2005
Changes from 0.50 to 0.50:
    None! (first release)

Date: 2-14-2005    
Changes from 0.50 to 0.51:
    Added full 32-bit BMP file support (Paul Macklin)

    Took out annoying "colors: " message from BMP8 initialization from 
    scratch (Paul Macklin)

    Added more license and copyright info to each file (Paul Macklin)

    Added change log to library (Paul Macklin)
    
    To do next:
    Should update the error messages for the initializations (Paul Macklin)
    Should simplify the reading and writing code (Paul Macklin)
    
Date: 2-19-2005
Changes from 0.51 to 0.52:
    Fixed a minor bug in the MakeGreyscalePalette function where the 0 
    color turned out to be (255,255,255), rather than (0,0,0) (Paul Macklin)

    Updated standard colors for 4-bit, 8-bit, and 24-bit (Paul Macklin)    
    
Date: 2-27-2005
Changes from 0.52 to 0.53
   Fixed unsigned / signed problem that VS.net shows          
   (Paul Macklin)                                             
                                                              
   Tried fix of line 186 in EasyBMP_BMP4.h file. If it works, 
   I'll apply it consistently. I think that VS.net wants us   
   to clear char* blah, then char = new blah [size], just     
   like the old days for g++. (Paul Macklin)                  
                                                              
   Removed EasyBMP_StandardColors.h from standard package     
   (Paul Macklin)                                             
                                                              
Date: 2-27-2005
Changes from 0.53 to 0.54
   The fix of line 186 in EasyBMP_BMP4.h file appears to have 
   worked. I applied it through the remainder of the code.    
   Hopefully, this should ensure Visual Studio.Net compati-   
   bility. (Paul Macklin)                                     
                                                              
   Fixed some typos in the comment lines (Paul Macklin)       
                                                              
Date: 5-2-2005
Changes from 0.54 to 0.55
   Introduced RGBApixel struct. (Paul Macklin)
   
   Introduced BMFH, BMIH, and BMP classes. (Paul Macklin)
   
   Deprecated all old code to *_legacy.h. (Paul Macklin)
   
   Rewrote EasyBMP_VariousBMPutilities.h to use the new 
   BMP class. (Paul Macklin)
   
Date: 5-4-2005
Changes from 0.55 to 0.56
   Made Width, Height, and BitDepth private members and added 
   functions for accessing them. (Paul Macklin)               
                                                              
   Made a new function, SetBitDepth, as the only means to     
   change the bit depth. It will create/resize a palette as   
   necessary. This simplifies the WriteToFile code, as well as
   any palette altering algorithms. (All algorithms can now   
   assume that a properly-sized palette exists.) This will    
   help improve code stability greatly. (Paul Macklin)        
                                                              
   Made a new function, SetSize, as the only way to change the
   width and height of the image. (Paul Macklin)               
                                                              
   Eliminated useless HasPalette and NumberOfColors members,  
   and added TellNumberOfColors() function. (Paul Macklin)    
                                                              
   Updated EasyBMP_VariousBMPutilities.h to respect privacy   
   of data members. (Paul Macklin)                            

Date: 5-8-2005
Changes from 0.56 to 0.57
   Removed fclose(fp) lines from EasyBMP_BMP.h and 
   EasyBMP_VariousBMPutilities.h whenever ( !fp ) occurs, 
   to avoid a crash when trying to close a non-existant file. 
   (Paul Macklin)
   
   Added a line to set bmfh.bfType = 0; to getBMFH() routine 
   in the case where ( !fp ) occurs, so that a nonexistant file
   doesn't falsely show up as a bitmap file. (Paul Macklin)
   
   Made error messages in BMP::ReadFromFile(char*) more meaningful, 
   since Argh! doesn't help much. :-) (Paul Macklin)
   
   Made ReadFromFile operations safer: can deal more effectively 
   with corrupted and/or truncated files by adding the new 
   SafeFread() wrapper function. (Paul Macklin)
   
   Moved all change-log entries to the change log to make the source
   file tidier. (Paul Macklin)
   
   Removed all references to Palettes; renamed then ColorTables. 
   (Paul Macklin)
   
Date: 5-13-2005
Changes from 0.57 to 0.58
   Rewrote ReadFromFile() to fix program crashes on reading 4-bit 
   files. (*grumble* I can't believe there was such a bug in such 
   a late version! */grumble*) (Paul Macklin)

   Added support to ReadFromFile() for reading 1-bit files. 
   (Paul Macklin)

   Rewrote ReadFromFile() to avoid trying to read bitmap files of 
   depths other than 1, 4, 8, 24, and 32 bits. (Paul Macklin)   
   
   Tested reading 4-bit files of width 0,1,2, and 3 (modulo 4),  
   and 1-bit files of width 0,1,2,3,4,5,6, and 7 (modulo 8)   
   (Paul Macklin)

Date: 5-15-2005
Changes from 0.58 to 0.59
   Made ReadFromFile() more robust. Evidently, reading to the 
   same temp variable all the time made it unstable when reading 
   many files. I would never have guessed. I instead declare BMIH 
   and BMFH objects and read directly to their members. This appears 
   to be more stable when dealing with many ReadFromFile() calls.
   (Paul Macklin)

   On a related note, made sure to not call SetSize( Width,Height), 
   which is a bit recursive, as well as SetBitDepth( BitDepth ). 
   This appears to help stability, since these two functions were 
   create precisely for the purpose of setting those variables 
   values safely. (Paul Macklin)

   Made use of the boolean return value in SafeFread() to detect 
   when files are obviously corrupted. Used this to have an early 
   catch in ReadFromFile() and set it to a 1x1 1-bit image and 
   exit. (Paul Macklin)
   
   Made ReadFromFile() stricter, in that it only reads recognized 
   bit depths (1,4,8,24,32). Any other bit depth will prompt the 
   routine to terminate and set it to a 1x1 1-bit file. (Paul Macklin)

   Added write support for 1-bit files. (Paul Macklin)
   
   Rewrote WriteToFile() for 4,8-bit files to match methods used 
   for reading them. (Paul Macklin)
   
   Revised CreateStandardColorTable() and CreateGreyscaleColorTable() 
   to add support for 1-bit files. (Paul Macklin)
   
   Rewrote WriteToFile() to be stricter in only writing known bit 
   depths (1,4,8,24,32) and ignoring all others. (Paul Macklin)

Date: 5-21-2005
Changes from 0.59 to 0.60
   Deprecated *_legacy.h files. (Paul Macklin)

   Tested library extensivey in linux with good results. (Paul Macklin)

   Made CreateGreyscaleColorTable() stricter, in that it exits 
   if supplied a bit depth other than 1, 4, or 8. (Paul Macklin)

   Made cosmetic changes in EasyBMP_DataStructures.h to 
   improve readability. (Paul Macklin)

   Made SetBitDepth() stricter, in that it will never allow a bitmap 
   to be set to an unsupported bit depth. Only bit depths of 1, 4, 
   8, 24, or 32 are accepted. (Paul Macklin)

   Made SetSize() stricter, in that it will not allow negative 
   widths or heights. (Paul Macklin)

   Made cosmetic changes in EasyBMP_BMP.h to improve readability. 
   (Paul Macklin)

   Added a check in ReadFromFile() to see if the requested width or 
   height is negative, a good sign of file corruption. In such a 
   case, the file is set to a blank 1x1 1-bit file. (Paul Macklin)
   
   Added code to ReadFromFile() to set size to 1x1 and bit depth to 
   1-bit if the file was not found. (Paul Macklin)
   
Date: 5-22-2005
Changes from 0.60 to 0.61
   Fixed awIndex typo in WriteToFile(). (Paul Macklin)
   
   Replaced double BestDistance comparisons in WriteToFile() 
   with int BestDistances (so as to do integer operations, 
   rather than double operations). This gave a roughly 100% 
   speedup in 8-bit, 4-bit, and 1-bit write operations on 
   unoptimized (no compiler flags) code and a 30% speedup 
   on optimized code. (Paul Macklin)   

   Removed checks like if( BestDistance < 1 ){ k=256; } .. from 
   WriteToFile(), as they give more overhead than savings in my 
   testing. For 8-bit files, there was a slight gain by putting 
   it back in with another method: while( k < 256 && BestDistance > 0 ). 
   (Paul Macklin)

   Redefined StepSize in CreateGreyscaleColorTable() to give a 
   better range of greys in 4-bit mode. As it was, white was not 
   in the color table. (Colors were spaced by 256/16 = 16). Now, 
   colors are spaced by (255-1)/(16-1) = 17, which gives the full 
   range. (Paul Macklin)

Date: 5-25-2005
Changes from 0.61 to 0.62
   Added endianess check function IsBigEndian() to 
   EasyBMP_DataStructures.h file. (Paul Macklin)
   
   Added functions to swap bytes in WORD and DWORD multibyte 
   variables to EasyBMP_DataStructures.h file for future big-endian 
   support. (Paul Macklin)
   
   Added functions to switch endianess to BMFH and BMIH objects 
   to EasyBMP_DataStructures.h file. (Paul Macklin)
   
   Added endianess checks to ReadFromFile() and WriteToFile() 
   functions in EasyBMP_BMP.h file, along with endianess conversions 
   where necessary. (Paul Macklin) 
   
   Added endianess checks and conversions to GetBMFH() and GetBMIH() 
   functions in EasyBMP_VariousBMPutilities.h file. (Paul Macklin)
   
   Rewrote GetBitmapInfo() function to use GetBMFH() and GetBMIH() 
   functions instead. (In EasyBMP_VariousBMPutilities.h.) This 
   cuts down on the redundancy in the code. (Paul Macklin)

   Renamed GetBitmapInfo() to DisplayBitmapInfo() in the 
   EasyBMP_VariousBMPutilities.h file. (Paul Macklin)
   
   With these changes, big-endian architectures should be supported, 
   including IBM PowerPC, Sun Sparc, Motorola 86k, etc., and including 
   Mac OSX. (Paul Macklin)
   
Date: 7-20-2005
Changes from 0.62 to 0.63
   Added IntPow(int,int) function to help compiling with std namespace. 
   Besides, integer operations are faster and more accurate. 
   (Paul Macklin)
   
   Moved Square(double), IntSquare(int), and IntPow(int,int) to 
   EasyBMP_DataStructures.h (Paul Macklin)
   
   Simplified and cleaned up code in Create4bitColorTable( RGBApixel**).
   (Paul Macklin)
   
   Changed safety check in BMP.ReadFromFile(char*) to set size to 1 x 1 
   if width or height is non-positive, rather than simply negative. 
   (Paul Macklin)
   
   Added bounds checking to BMP.operator()(int,int) to automatically 
   truncate requested pixel if out of bounds. Also added a warning to 
   cue the user in. :-) (Paul Macklin)
   
   Made error messages more consistent in format. (Paul Macklin)
   
   Simplified and cleaned up code in Create4bitColorTable( RGBApixel**).
   (Paul Macklin) 
   
   Added #include <iostream.h> to EasyBMP.h, since EasyBMP uses 
   cout, etc. (Paul Macklin)

   Simplified and cleaned up code in Create1bitColorTable( RGBApixel**).
   (Paul Macklin) 
     
   Changed BMP.SetSize(int,int) to disallow non-positive widths and 
   heights, rather than simply negative widths and heights. Such 
   function calls are now ignored. (Paul Macklin)
