## CxImage History

###

### Version 5.99c, 17 - Oct - 2004

Bugfixes

- CxImageTIF::Encode: default compression for 4 bpp image was NONE, now it's LZW.
- CxMemFile::Seek: fixed bug introduced in version 5.99b: seeking beyond file size is legal !!!

### Version 5.99b, 10 - Oct - 2004

Bugfixes

- fixed SetXDPI and SetYDPI to accept only positive dpi values
- fixed EXIF decoder against invalid TAG_EXIF_OFFSET / TAG_INTEROP_OFFSET
- fixed missing definitions in ximawnd.cpp when CXIMAGE_SUPPORT_BMP is 0
- fixed `CxFileJas` constructor to avoid crashes, when Jasper deals with its temporary files, decoding large images <vho>
- removed default `imagetype` value from `CxImage::Save` <Choi Byungtae>
- fixed `Mean()` for images with an active selection <Admir Hodzic>
- fixed GIF decoder for animated images with corrupted frames.
- fixed GIF decoder for images with screen descriptor larger than the first frame.
- fixed GIF decoder to handle the disposal methods correctly.
- CxImageWMF reads images mapped in MM_TEXT, when MM_ANISOTROPIC fails.
- fixed `Clear` for 1 and 4 bpp images.
- fixed typo in ximajpg.cpp: ENTRPY_OPT_SUPPORTED -> ENTROPY_OPT_SUPPORTED <Boum>
- fixed potential memory overflow in RLE decoder reading corrupted bitmaps.
- Better UNICODE support <Cesar M> and fixed TCHAR mappings for Linux.
- fixed bug in `IsTransparent`, for images with a valid alpha layer.
- fixed bug in `Create`: a vaild image was created even if width or height were zero.
- CxMemFile: fixed problem for compilers where malloc(0) returns 0, + improvements in Alloc and Seek.

Changes and major additions

- new functions: `Rotate2()` <BD>, `Resample2()` <BD> `QIShrink()` <BD> , `RedEyeRemove()` <???> , `Edge()`,
  `SelectionSplit()`, `IsSamePalette, BlendPixelColor`, `GetVersionNumber, Encode2RGBA`
- new dithering algorithms: Bayer, Burkes, Stucki, Jarvis-Judice-Ninke, Sierra, Stevenson-Arce <Franco Gerevini>
- renamed `AlphaGetBits` with `AlphaGetPointer` <BD>
- new compiler switch: CXIMAGE_SUPPORT_INTERPOLATION to enable pixel color interpolations,
  implemented in the ximaint.cpp module <BD>
- New bEnableInterpolation parameter for `Skew()`
- New `blend` parameter for `Colorize()`
- color conversion routines now are declared as `static`
- `FFT2` now works also with Borland compilers
- more interpolation kernels <Vladimír Kloucek>
- Smooth stretching parameter for `Draw`, thanks to <Vladimír Kloucek> and <BD>
- Added `FreeMemory` function, to avoid heap problems using `Encode` with memory buffers <livecn>
- new `bMixAlpha` parameter and new `OpScreen` blending mode for `Mix()`
- LZW compression is the default algorithm for GIF compression.
- CxImagePNG now can encode interlaced images
- Get/SetCodecOption now has an "ImageType" parameter, so that each format keeps its specific options
- Faster `RotateLeft` and `RotateRight` <BD>
- CxImageJPG now can write back the EXIF information (verbatim copy).

Project - Libraries - Demo application

- Demo: new dialogs for Resample, Rotate, Skew with more options, JPEG compression
- New license based on zlib/libpng philosophy, see ximage.h and ./doc/license.txt
- Demo: new tool: tracker
- Demo: new View/Smooth menu to test smooth drawing in zoom and stretch modes
- Demo: more CodecOptions on the Options dialog, enabled LZW compression for GIF and TIF formats.
- PNG: updated to libpng 1.2.7
- JBIG: updated to version 1.6
- Better documentation : now using Doxygen.

###

### Version 5.99a, 08 - Feb - 2004

Bugfixes

- fixed bug in AlphaCopy, AlphaSet, SelectionCopy <Tacho>

Changes and major additions

- ---

Project - Libraries - Demo application

- Demo: fixed save/restore window position and options

###

### Version 5.99, 31 - Jan - 2004

Bugfixes

- fixed linking problems when CXIMAGE_SUPPORT_ENCODE is 0 <Schuberth> <Squidge>
- fixed missing in parentheses in CreateFromMatrix and CreateFromArray <sihun> <H.C.Anderson>
- fixed incorrect decoding for 4-bit RLE Windows bitmaps <chupeev>
- Removed unreachable code in Resample <Lucian Ioan>
- CxImagePNG::Encode : removed useless call to iter.GetRow <Chieh An Lu>
- fixed color comparison using long integers (if rgbReserved is not 0) in CxImagePNG and CxImageICO <James Dickson>
- CxExifInfo now reads the exif data also in a second directory <Richard Collins>
- Dither now preserves DPI information
- fixed PNG decoder for interlaced images with transparent layer
- fixed GIF decoder bug for animated images with local color table.
- fixed problem in Draw() with indexed images, when 2 indexes hold the same color and 1 is transparent.
- fixed memory overrun in Crop() for 8 and 24 bpp images. <DT>
- fixed BMP decoder when loading 8 bit resources with less than 256 colors <DT>
- CxImageTIF now handles TIFFTAG_RESOLUTIONUNIT <Trifon>
- Fix for decoding 8 bpp tifs with alpha layer <Nick Holgate>
- fixed error in mymngerror() <Arkadiy Olovyannikov>
- fixed TIFFTAG_PREDICTOR, saving 1 and 4 bpp images with LZW compression <Hermann62>

Changes and major additions

- Renamed DrawText with DrawString
- New bGetAlpha parameter for GetPixelColor
- CxImageICO now reads also windows cursors (.CUR)
- support for UNICODE <Igor Rosenberg>
- Renamed Get/SetEncodeOption with Get/SetCodecOption <chupeev>
- AlphaCreate also initializes the layer to full opaque.
- new functions: DrawStringEx, InitTextInfo, CropRotatedRectangle <VATI>, MixFrom <Kenneth Ballard>, UnsharpMask <nipper>, Lut
- increased default JPEG quality to 90 <VATI>
- CxImageTIF::Decode saves original compression in info.dwCodecOption <DPR>
- new functions: CxImageTIF::TIFFOpenEx and CxImageTIF::TIFFCloseEx, to handle directly a TIFF directory.
- CxImageJPG::Decode and CxImageJPG::Encode handles more jpeg DECODE_XXX and ENCODE_XXX methods
  (through SetCodecOption and SetJpegQuality) <chupeev>
- new dwRop parameter for Stretch, allows raster-operation codes. <?>
- Faster Filter() for 8bit grayscale images <Thomas M. Boser>
- SetEscape(-1) before Decode returns the image width and height only ( for bmp, jpg, gif, tif ) <ignacio>
- new Set/GetJpegScale() before Decode, to open a resized image (for jpeg only) <ignacio>
- new function : CircleTransform for FishEye, Swirle, Cilinder, bathroom effects <Arkadiy Olovyannikov>
- new methos for HistogramStretch: 0 = luminance <dave>, 1 = linked channels <nipper>, 2 = independent channels <nipper>, and for grayscale images
- faster Light and Gamma <nipper>
- CImageIterator new methods: Get/SetCol() to extract a single column.
- Better error checking in image initialization functions.
- CreateFromHANDLE now reads also RLE compressed bitmaps <Michael Gandyra>

Project - Libraries - Demo application

- Updated zlib to 1.2.1.<Tuncer M. Ayaz>
- Demo: status bar updated after Crop or drag & drop <VATI>
- demoview.h : new Dpoint2d structure <VATI>
- demodoc.h : new LEN2D macro <VATI>
- Demo: save/restore window position <VATI>
- Demo: new DlgText features <VATI>
- Demo: new Selection tool options: CTRL+Rclick = move selection, shift+Lclick= rect selection, Rclick on a rect selection = rotate selection <VATI>
- Moved tif_xfile.cpp from LibTiff to CxImage directory and workspace
- Demo2 : Updated FindFormat
- Demo : new Mix dialog and menus for CircleTransform

###

### Version 5.80, 27 - Sep - 2003

Bugfixes

- Fixed head.biSize initialization: moved from Startup() to Create() <ralphw>
- Fixed problem in SetTransColor when rgbReserved is not 0 and in the image there is an alpha layer.
- CxImageBMP::Decode : force rgbReserved=0 in the palette , to avoid problems with some WinXp bitmaps. <Colin Urquhart>
- Fixed warnings for size_t type in iA64 compiler <Frank Sowinski>
- GrayScale from 1, 4 and 24 bit images now preserves info and selection layer
- CxImageICO::Decode will not create the alpha layer if it's not strictly necessary;
  and reads images embedded inside a file <yuandi>
- CxImageJPG::Decode : check image allocation before further processing.
- Fixed DLL_EXP definition and inlined CxImage destructor for older VC++ compilers <Wassily Gibin>
- Fixed CxFileJas::JasClose() bug with memory files <osamu44>
- Added missing casts in floating point functions in CxExifInfo <Branko Drevenšek> <Tuncer M. Ayaz>
- Fixed memory leak in CreateFromHICON <Sims>
- Fixed access violation in CxImageTIF::Decode with some CieLab images <Vitaly Titov>
- Fixed GDI leak in CxImage::DrawText() <Henry P.>
- Crop now works also with the alpha layer. <oboolo>
- Fixed bias and canvas size in CxImage::Rotate()
- CxImageGIF now stores the comment before the image body.
- Encode() functions now check both file and image handlers with EncodeSafeCheck()
- IncreaseBpp to 24 bit from images with simple transparency, now sets the correct transparent color.
- CxImageBMP::DibReadBitmapInfo accepts non standard headers if the stored information is valid
- CxImage::Decode with CXIMAGE_FORMAT_UNKNOWN, now preserves CxImage::info
- Fixed sizeof(BITMAPFILEHEADER) in CxImageBMP, to avoid struct alignment errors

Changes and major additions

- New functions Get/SetClrImportant()
- Added new clrimportant parameter for DecreaseBpp
- Faster Light() for full RGB images
- GetPixelIndex returns the index of the top-left pixel when the coordinates are out of the image and no background color is selected
- CxImagePNG::Encode saves info.nBkgndColor (or white) as bKGD color, for IE
- Added "bEditAlpha" parameter to DrawText.
- New functions:
  SelectionAddPixel <Anatoly Ivasyuk>,
  DrawLine <JDL>,
  IsTransparent(long x, long y) <Sims>,
  AlphaGetBits(), Expand(), Thumbnail() <Colin Urquhart>
  CreateFromMatrix(), CreateFromArray() , replace CreateFromARGB()
- CXIMAGE_MAX_MEMORY prevents huge allocations
- GetBits() returns the pointer to the first byte in a generic row
- New bDetachBuffer parameter in CxMemFile::GetBuffer, to get the buffer for read only purpose <Wassily Gibin>
- Faster (x4!) bicubic interpolation and fixed bias error <Kristian Kratzenstein>
- CxImagePNG::Encode saves only the minimum number of palette colors for small images <Basara>
- Added "hpal" parameter to CxImage::CreateFromHBITMAP, for indexed DCs <Zahi Kapeluto>
- CxImageTGA::Decode now reads also images with illegal packets <Colin Urquhart>

Project - Libraries - Demo application

- Updated CQuantizer to handle color reduction to less than 16 colors
- JAS_IMAGE_INMEMTHRESH increased to avoid jasper temporary file
- Updated JBig library: JBIG-KIT 1.5 (2003-06-11)
- \jpeg\jmorecfg.h : fixed INT32 redefinition for Borland C++ Builder6

###

### Version 5.71, 25 - Apr - 2003

Changes and major additions

- new formats: JP2, JPC, PGX, PNM, RAS (through JasPer)
- new functions: Set/GetFlags( ), LayerCreate( ), LayerDelete( ), LayerDeleteAll( ), GetLayer( ), GetParent( ), GetNumLayers( )

Project - Libraries - Demo application

- New C library : JasPer 1.700.2

### Version 5.70, 19 - Apr - 2003

Bugfixes

- fixed RGB2GRAY macro <H. Muelner> <jurgene>
- SelectionAddPolygon and SelectionAddColor compute correctly info.rSelectionBox
- fixed SelectionAddPolygon when the polygon touches the image borders.
- fixed EXIF reader
- fixed CxImageGIF::DecodeExtension
- CxImageTIF::EncodeBody : better error handling, and switch for different compression tags.
- CImageIterator : fixed friend declaration in ximaiter.h, line 37 <gazzivan>
- fixed DPI default values in CreateFromHANDLE
- CxImageBMP now reads OS2 bitmaps
- fixed cast problem in Histogram functions <Tuncer M. Ayaz>
- fixed memory corruption in RotateLeft( ) RotateRight( ) for 1 bpp images. <Stroupe David R>

Changes and major additions

- New MakeBitmap(hdc) implementation when hdc is 0 <jaslet>
- Light( ) : shifted down the contrast parameter so that the neutral value is 0.
- New filters: Jitter( ), Skew( )
- Negative( ) moved in BASICTRANSFORMATIONS

Project - Libraries - Demo application

- New CxImageCrtDll.dsp project, to build a dll without mfc <Anatoly Ivasyuk>
- fixed bug in Window/Duplicate with no image in the document. <corwinkrisw>
- \jpeg\jdmarker.c line 1091 : skip check for unknown marker, to decode partially corrupted files.

###

### Version 5.61, 10 - Mar - 2003

Bugfixes

- fixed SplitXYZ and floating point constants in ximadsp.cpp <???>

###

###

### Version 5.60, 09 - Mar - 2003

Bugfixes

- CxImagePNG read/save DPI
- SelectionAddRect computes correctly info.rSelectionBox <arnold wittenberg>

Changes and major additions

- better RGB2GRAY macro <dave>
- new functions: HistogramStretch( ), HistogramEqualize( ), HistogramNormalize( ), HistogramRoot( ), HistogramLog( ) <dave>
- GetPixelColor returns the color of the top-left pixel when the coordinates are out of the image and no background color is selected
- new function: Contour( )
- new bicubic spline interpolation for Resample( )
- Faster GetNearestPixel( ) <RJ>

Project - Libraries - Demo application

- Demo: fixed "move" tool

### Version 5.55, 17 - Feb - 2003

Changes and major additions

- fixed bug in CreateFromARGB <Olivier Ansquer>
- CxImageTGA::Decode flips the alpha channel when required <lioucr>
- CxImageGIF::DecodeExtension, fixed problem when extension information is more than 3 bytes. <TomPeakz>

Project - Libraries - Demo application

- jpeg\jdcolor.c, line 384 changed again to permit null conversion if the output space is undefined OR input and output sapaces are the same<DP>

### Version 5.53, 27 - Jan - 2003

Changes and major additions

- New functions: CreateFromHICON
- Replaced SetPaletteIndex with SetPaletteColor and GetRGB with GetPaletteColor

Project - Libraries - Demo application

- Demo : fixed GDI leak in LineDDAProc <jh>
- jpeg\jdcolor.c, line 384 changed to permit null conversion if the output space is undefined (OJPEG) <DP>
- tiff\tif_ojpeg.c from line 1374 to line 1407 : avoid sampling factors check <DP>

###

### Version 5.51, 19 - Jan - 2003

Bugfixes

- fixed GDI leak in CxImage::Draw when pClipRect is not null <Carsten Leue>

Project - Libraries - Demo application

- Updated LIBPNG to 1.2.5 <Tuncer M. Ayaz>
- added jpeg_reset_huff_decode function in jpeg\jdhuff.c for the broadest possible support for OJPEG files
  (implemented by Scott Marovich at HP <marovich(at)hpl(dot)hp(dot)com>)
  jpeg\jdmarker.c : line 204 and 261 allow SOI and SOF duplicate only if cinfo->global_state == DSTATE_INHEADER
  (should be illegal, but OJPEG files have an illegal structure <DP>)
- tiff\tif_jpeg.c from line 673 to line 697 : avoid sampling factors check <DP>

###

### Version 5.50, 07 - Jan - 2003

Bugfixes

- CxImageTIF : added support for tiled images
- CxImageTIF : faster decoding with TIFFNumberOfDirectories, instead of looping <Robert Abram>
- CxImageTIF : fixed stripsize check when samplesperpixel is more than 1.
- DecreaseBpp( ) and IncreaseBpp( ) preserve info
- Tile( ) fixed when the rectangle is not a multiple of the image dimension. <dock>
- Added missing casts in floating point functions <Tuncer M. Ayaz>
- CxImageGIF : fixed loop counter saving animated gifs <handong>
- CxImageGIF::get_byte : fixed overflow when reading corrupted images.
- CxImageGIF::get_num_frames : fixed undefined TabCol structure.
- CxImageGIF : a palette without white is accepted.
- CxImageGIF : avoid byte order problems with Solaris <candan>
- CxImageTGA : Encode now saves the last palette entry.
- CxImageICO : Decode reads Bpp from the bitmapinfoheader instead of icondirentry <CoreyRLucier>
- CxImageJBG : fixed Encode crash when copying pixels form cximage to the decoder buffer.

Changes and major additions

- Replaced IsAlphaPaletteEnabled with AlphaPaletteIsEnabled, AlphaIsValidPalette with AlphaPaletteIsValid, GetSelectionBox with SelectionGetBox
- New SplitCMYK( ), GetPixelGray( ), AlphaPaletteSplit( )
- Added the bLocalColorMap parameter to CxImageGIF::Encode, for animated gifs with local palettes
- New AlphaSet(CxImage &from): creates the alpha channel from a gray scale image.
- One or more images can be appended directly to a TIF file, using CxImageTIF::Encode(file,true); or Encode(hFile,pImages,pagecount) <RJ>
- Fast RotateLeft( ) and RotateRight( ) for BW images <Robert Abram>
- SetPixelColor( ) and GetPixelColor( ) handle alpha in RGBQUAD::rgbReserved.
- IncreaseBpp is faster for conversion to 4 and 8 bpp, AlphaPalette converted to an alpha channel for conversion to 24 bpp.
- info.nProgress updated in the dsp and transformation functions <Anatoly Ivasyuk>.
- New info.dwEncodeOption parameter to select the compression scheme for GIF and TIF.
- New CxImageWMF::Decode parameters: nForceWidth,nForceHeight to force the final dimension of the image.
- CxImageJ2K::Encode : new formula for compression rate, so the quality for j2k and jpg are similar.
- Added CXIMAGE_FORMAT_UNKNOWN for automatic image type detection.

Project - Libraries - Demo application

- Fixed exception in DlgHisto
- CQuantize handles palettes with alpha information
- better dump of the memory leaks <dave>

###

### Version 5.11, 29 - Sep - 2002

Bugfixes

- ximadefs.h : added pragma pack(1) for BMP structures alignment with Linux compilers

### Version 5.10, 23 - Sep - 2002

Bugfixes

- CxImageGIF : restored lzw algorithm. <Olivier Ansquer>
- CxImageTIFF : added support for CIELAB images.
- CxImageTGA : fixed problem decoding corrupted files.
- CxImageBMP: fixed problem with os2 and 16bit images <Cui Ying Jie>

Changes and major additions

- New DrawText function.
- Added iDst parameter in Resample( ) <CSC>
- New SelectionToHRGN( ) and SelectionAddColor( ) <elrod>
- Replaced HasAlpha with AlphaIsValid, HasSelection with SelectionIsValid, HasAlphaPalette with AlphaIsValidPalette
- New CreateFromARGB( ) <Olivier Ansquer>
- Added DLL_EXP for CxImageTIF and CxImageGIF <Olivier Ansquer>

###

### Version 5.00, 23 - Aug - 2002

Bugfixes

- CxImageTIF::Decode : fixed default orientation. <vho>
- CxImageTIF::Encode saves 1bpp always with PHOTOMETRIC_MINISWHITE <abe>
- CxImageJPG::Encode : fixed jpg encoder for memory files.
- CxImageICO::Encode : fixed problem with 4bpp images with transparency.
- CxImagePNG::Encode : fixed problem when info.bColorType was wrong <Kwyshell>
- removed info.bColorType and changed GetColorType() implementation.
- CxImageBMP::Decode handles TopDown Bitmaps <Flanders>, small bugfix <CSC>
- CxImageTIF::Encode : TIFFSetField(m_tif, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(m_tif, -1)); gives better compression <REC>
- Load( ) returns the correct info.nNumFrame when info.nFrame<0.
- removed bug in tif_xfile.c when encoding memory files.
- CxImageBMP::Decode loads correctly OS2 bmps.
- bugfix in Resample( ) when (newx==width && newy==height)
- better operator= definition <Anatoly Ivasyuk>

Changes and major additions

- new formats: WBMP, WMF - EMF <vho>, JBIG, JPEG2000.
- new full codec for PCX, with support for RGBA images.
- new methods: GetVersion, IsTransparent <vho>, ShiftRGB, Median, Gamma, Noise, Combine, FFT, Repair, AlphaSplit
- added r/w support for 8bpp TIFFs with alpha layer.
- added support for TrueColor, RLE and uncompressed GIFs.
- added CXIMAGEJPG_SUPPORT_EXIF for JPGs.
- new switches: CXIMAGE_SUPPORT_DECODE, CXIMAGE_SUPPORT_ENCODE,
  CXIMAGE_SUPPORT_WINDOWS, CXIMAGE_SUPPORT_WINCE <T.Peck>
- SetEscape can abort the codecs loops <vho>.
- added ximadefs.h to adjust automatically the switches.
- the codecs for ICO, PNG, TGA and TIF work also with CXIMAGE_SUPPORT_ALPHA = 0 <vho>
- added DPI information support for jpeg <Koray Geçici>
- new CxFile CxMemFile CxIOFile implementations <CSC>
- MakeBitmap( ) creates a real DIB if HDC == 0 <CSC>
- Draw( ) added pClipRect parameter.
- CxImageTIF::Decode : re-enabled error handler for debugging;

Project - Libraries - Demo application

- Zlib : replaced zlib.rc and zlib.def <Tuncer M. Ayaz>.
- Demo: new tools, histogram, palette, replaced xshadebutton with xtargetbutton.
- Updated LIBPNG to 1.2.4
- LibTIFF::tiff_read.c::ln188: commented to decode strange images, it's not dangerous.
- LibTIFF small changes to compile under linux (tiff_xfile.cpp, tiff_jpeg.c, tiff_ojpeg.c, tiffiop.h)
- LibJPEG : small changes to compile under linux (jmorecfg.h)
- Added project for DLL build and console applications.

###

### Version 4.10, 01 - Jun - 2002

Bugfixes

- Fixed PNG error handler.
- Fixed TGA decoder for RLE encoded pictures with alpha channel <Ole Lange> and 15 bit pictures.
- Fixed BMP decoder for 32 bit images.

Changes and major additions

- Added Read/Write support for 24 and 32 bit ICONs.
- new bAppend parameter in CxImageTIF::Encode() for better multi page TIF creation. <Abe>

Project - Libraries - Demo application

- Updated zlib to 1.1.4.<Tuncer M. Ayaz>
- Added OJPEG_SUPPORT (not for Wang).

###

### Version 4.01, 15 - May - 2002

Changes and major additions

- Added some constructors and Encode()/Decode() methods to work with memory buffers directly.

Project - Libraries - Demo application

- Changed URL download dialog.

###

###

### Version 4.00, 12 - May - 2002

Bugfixes

- Fixed JPEG error handler <CSC>
- Fixed _tiffSizeProc in tif_c.c to load images with missing stripcount.
- Transformations preserve info.dwType perameter <CSC>
- Createfromhandle() bugfix for 32bitfield images <JA>
- GetPixelColor bugfix when the coordinates are in the outside of the image <Mpwolski>

Changes and major additions

- New CxFile class to read/write memory files and disk files.
- Added support for Read/Write 32bpp TIFFs with apha channel.
- New methods : Mix() <Mpwolski>, Destroy(), IsIndexed()
- Read/Write support for Multipage TIFF <Abe>
- Read/Write support for Animated GIF (gif89a), with comment, loops and disposal method
- Added xOffset and yOffset in CxImage::info
- Changed names : ReadFile -> Load ; SaveFile -> Save
- LoadResource uses CxFile

Project - Libraries - Demo application

- Updated BCMenu: version 3.03.
- LibTiff : enabled alpha (tif_getimage.c;Ln:212), enabled ZIP_SUPPORT
- Pane view function with "shift+Lbutton"
- Updated LibTiff to 3.5.7
- New URL download dialog; WebGrab class by Chris Maunder

###

### Version 3.21, 11 - Mar - 2002

Bugfixes

- Fixed memory leakage in CxImagePNG::Encode() <Rob Cass>.
- Fixed CxImageICO::Decode() problem with 16 colors icons <Rogier>.

Changes and major additions

- CxImageICO reads/saves icons with transparent pixels.
- CxImageTIF::Decode() now takes care of the orientation tag.
- New RotateLeft(), RotateRight(), Rotate180() functions <MKVY>.
- Faster Draw() implementation for images with transparency <DJT>.

Project - Libraries - Demo application

- Updated BCMenu: version 3.01.
- Replaced CreateThread() with _beginthread() to avoid small memory leaks.

###

### Version 3.09, 21 - Feb - 2002

Bugfixes

- Rotation() and Resample() handle the alpha channel. <MTA>
- CxImagePNG: Encode() merges the transparent color with the alpha channel.
- Fixed exceptions and leaks in Draw() <RG>
- CxImageBMP now reads 32 bpp BITFIELD images.
- Decode() correctly loads multipage ICO and TIF files. <REC>

###

### Version 3.02, 24 - Jan - 2002

Bugfixes

- CxImagePNG: fixed allocation bug in Decode()
- CxImagePNG: cast error saving 8 bpp images.

### Version 3.00, 20 - Jan - 2002

Bugfixes

- fixed HSLtoRGB() conversion <F. Livraghi >
- CxImagePNG: fixed deallocation bug in Encode() <Ranger>
- CxImagePNG: now reads 2 bpp images.
- CxImageBMP: fixed DPI rounding error <DIH>
- CreateFromHANDLE now handles the DPI information <Jeff Hu>

Changes and major additions

- New pixel ALPHA channel, overall opacity. (14 dedicated functions)
- New Alpha Palette. (5 dedicated functions)
- New Region Selection (rectangle, ellipse, polygon - 11 dedicated functions).
- New "copypixels", "copyselection", "copyalpha" options for constructor/Copy()
- New "errordiffusion" option for DecreasBPP().
- New Draw() implementation with support for alpha channel, alpha palette, opacity, transparency.
- New PCX decoder CxImagePCX
- New TGA decoder/encoder CxImageTGA (with alpha channel)
- High resolution shrink for Resample() <Henrik Stellmann>
- CxImagePNG now reads/saves the transparency information (palette and alpha channel)

Project - Libraries - Demo application

- Updated PNG library: Libpng version 1.2.1
- Free-hand selection with the left mouse button.

### Version 2.00, 29 - Dec - 2001

Bugfixes

- fixed deadlock in GIF decoder
- PNG decoder reads 16 bit grayscale images.
- TIF decoder reads 4 bit grayscale images.
- fixed bug in CreateFromHBITMAP() <Wil Stark>
- Fixed PNG encoder bug, buffer allocation error with BW images.

Changes and major additions

- MNG decoder handles the background information.
- TIF encoder now uses COMPRESSION_JPEG for 24 bit images.
- LoadResource(): added new parameter to work with dlls. <Tuncer M. Ayaz>
- LoadResource() now works with network applications. <Tuncer M. Ayaz>
- Changed CxImage() constructors, Copy() and Transfer() interface and implementation <Kirk>
- Added CreateFromHANDLE() and CreateFromHBITMAP() in place of the old constructors.
- Automatic file format recognition in ReadFile() <Patrick Hoffmann>
- Faster Draw() implementation for transparent images. (Thanks to Paul Reynolds and Ron Gery)
- New Get/SetJpegQuality() for JPEG and TIF encoders.
- New Get/SetXDPI(), Get/SetYDPI() for BMP and TIF formats.
- New Dither() function, with Floyd-Steinberg or Ordered-Dithering BW conversion (Thanks to Kenny Hoff and Steve McMahon)
- New functions : Crop(), SplitRGB(), SplitYUV(), SplitHSL().
- New functions : Colorize(), Light(), Threshold(), Mean(), Filter(), Dilate(), Erode().

Project - Libraries - Demo application

- Removed bad pixels from "Capture Window" <Qiang>
- New menus: Blur, Soften, Edge, Sharpen, Emboss, Dilate, Erode, Threshold, Dither, ...

### Version 1.25, 28 - Oct - 2001

Bugfixes

- Added support for 32 bit PNGs and 16 bit TIFs

### Version 1.23, 15 - Oct - 2001

Bugfixes

- Fixed PNG reading interlaced and gray scale images. <DP>
- Fixed PNG saving 1 & 4 bit images. <DP>
- Fixed GIF saving and reading 1 & 4 bit images. <DP>
- Added safe checks in CImageIterator::SetRow() <DP> and in CxImagePNG::Decode() <yeonjun jeong>

Changes and major additions

- + Basic MNG encoder/decoder.
- + Get/SetTransIndex(): on the fly transparency for indexed images (1, 4, 8 bpp) <TRK>
- + Get/SetTransColor(): on the fly transparency for RGB images (24 bpp) <DP>
- + GIF encoder saves transparency information <TRK>
- + PNG encoder saves transparency information <DP>
- + SwapIndex() function for palette operations with transparency <DP>
- + Resample() function <Steve McMahon>
- + Get/SetEscape() to quit the slow loops.
- + Get/SetProgress() to monitor the slow loops.
- + SetStdPalette() to create a standard palette for 256 and 16 colors images.
- + DecreaseBpp()/IncreaseBpp().

Project - Libraries - Demo application

- Transparency handling menu <DP>
- Fixed cast problem in Jcapimin.c, comparing JPEG_LIB_VERSION <F. Livraghi>
- Resample, DecreaseBpp, IncreaseBpp menu <DP>
- Stopwatch and ProgressBar in the status bar <DP>
- Image computations are in a separate thread <DP>
- Added CQuantizer class to implement the color reduction with the octree algorithm. <Jeff Prosise>

### Version 1.10, 23 - Sep - 2001

Bugfixes

- Better exception handling in CxImagePNG & CxImageBMP. <DP>
- Gdi resource leakage and memory corruption in CxImage(HBITMAP). <TRK>
- Rotate() didn't handle transparency. <TRK>
- Fixed TIFF saving 1 & 4 bit images. <DP>

Changes and major additions

- Extended LoadResource() to TIFF format. <DP>
- - Removed info.szFileName : never used, and it's not an image related information. <TRK>
- Reduced fopen/fclose clutter. <TRK><DP>
- Extended constructors with "imagetype" (for future use). <TRK>
- Replaced GetPaletteIndex() with GetPaletteColor() : the function returns a color, not an index.
- Replaced GetFileType() with GetType() : to avoid confusion with the file extension.
- GrayScale() now always create an 8 bit gray scale image. <DP>
- + Implemented transparency in CxImage::Draw(). Now Draw() can also stretch the image, so Stretch() became obsolete. <TRK>
- + CxImage(FILE * stream) constructor. <TRK>
- + JPEG read CMYK format (adobe). <DP>
- + Transparency for PNG. <DP>
- + Enabled reading of RLE-compressed <TRK> and 16 & 32 bit BITFIELD <DP> bitmaps.
- + Unicode version for ReadFile/SaveFile.
- + MakeBitmap() function <Kurt Diesch>
- + JPEG can save 8 bit GrayScale images. <DP>

Project - Libraries - Demo application

- Removed MFC-dependency (#include <afxwin.h>) <TRK>
- Changed jconfig.h with HAVE_BOOLEAN stuff <TRK>
- + new tiff_c.c module in theTIFF library, for straight C Runtime Library file functions. <TRK>
- Demo : now using Project|Dependencies.
- + Zoomin/Zoomout menu <DP>
- + Capture window menu <DP>
- + Acquire from TWAIN source <DP>

### Version 1.01, 27 - Aug - 2001

Bugfixes

- PNG Read/Save exceptions with non dword aligned scan lines.
- Mirror() doesn't handle the last column. <Brian R. Zielinski>

Changes and major additions

- + GrayScale(). <TRK>
- + Rotate().
- + Read Multiple Image for TIFFs & ICONs
- + LoadResource(). <DP>
- Changed GIF read implementation. Added animation handling. <TRK>

Project - Libraries - Demo application

- + Demo: added hatched background and Print functionality. <TRK>
- + Undo/Redo menu. <DP>

### Version 1.00, 07 - Aug - 2001

### PEOPLE:

<DP> : Davide Pizzolato (www(dot)xdp(dot)it)
<TRK> : Troels Knakkergaard (TRK(at)lyngsoe(dot)com)
<Brian R(dot) Zielinski> : Brian R. Zielinski (brianz(at)digital(dot)risserimaging(dot)com)
<Kurt Diesch> : Kurt Diesch (kdiesch(at)enjoysoft(dot)com)
<F. Livraghi > : Francesco Livraghi (info(at)ceccoing(dot)it)
<Steve McMahon> : Steve McMahon (steve(at)dogma(dot)demon(dot)co(dot)uk)
<Tuncer M. Ayaz> : Tuncer M. Ayaz (tuncer(dot)ayaz(at)gmx(dot)de)
<Kirk> : Kirk Korver (kirk(at)the-right-stuff(dot)com)
<Qiang> : Qiang Liu (liuq(at)ee(dot)washington(dot)edu)
<Patrick Hoffmann> : Patrick Hoffmann (hoffmann(at)novacom(dot)net)
<Wil Stark> : Wil Stark (wil_stark(at)agilent(dot)com)
<DIH> : Dominic I. Holmes (DIH(dot)Junk(at)DigitalFormation(dot)com)
<Henrik Stellmann> : Henrik Stellmann (henrik(dot)stellmann(at)volleynet(dot)de)
<Ranger> : Ranger (RangerMail(at)mail(dot)ru)
<Jeff Hu> : Jeff Hu (v120160(at)yahoo(dot)com(dot)tw)
<MTA> : Matthew Armstrong (ArmstroM(at)faro(dot)com)
<REC> : Robert Edward Caldecott (rec(at)kerridge(dot)com)
<RG> : Roberto Guerzoni (r(dot)guerzoni(at)infomotion(dot)mo(dot)it)
<MKVY> : Murali Krishna V Yelchuru (muralikrishnayv(at)yahoo(dot)com)
<Rogier> Rogier Reedijk (xs4free(at)wish(dot)net)
<Rob Cass> : Rob Cass (rcass(at)compusult(dot)nf(dot)ca)
<DJT> : Dave Turnbull (Camel) (dave(at)camel(dot)co(dot)uk)
<JA> : Jörgen Alfredsson (jorgen(dot)alfredsson(at)kamera(dot)com)
<Mpwolski> : Mwolski (mpwolski(at)hotmail(dot)com)
<CSC> : Chris Shearer Cooper (cscooper(at)frii(dot)com)
<Abe> : Abe (God(dot)bless(at)marihuana(dot)com)
<Ole Lange> : Ole Lange (ol(at)ams-soft(dot)de)
<vho> : Volker Horch (vhorch(at)gmx(dot)de)
<Kwyshell> : Kwyshell (kwyshell(at)yahoo(dot)com(dot)tw)
<Flanders> : Flanders (flanders(at)2moors(dot)freeserve(dot)co(dot)uk)
<Anatoly Ivasyuk> : Anatoly Ivasyuk (aivasyuk(at)dtlink(dot)com)
<T.Peck> : T. Peck (tpeck(at)roundwave(dot)com)
<Koray Geçici> : Koray Geçici (kgecici(at)tam(dot)net(dot)tr)
<Olivier Ansquer> : Olivier Ansquer (olivier(dot)ansquer(at)freesbee(dot)fr)
<elrod> : Mark B. Elrod (elrod(at)bluedoor(dot)com)
<Cui Ying Jie> : Cui Ying Jie (cuiyj(at)163(dot)net)
<dock> : dock (dock(at)cmmail(dot)com)
<handong> : handong (jhandong(at)netian(dot)com)
<candan> : candan (candan(at)mail(dot)pagic(dot)net)
<RJ> : Roger Jane (roger(dot)jane(at)microtest(dot)co(dot)uk)
<Robert Abram> : Robert Abram (robert(dot)abram(at)prgx(dot)com)
<dave> : dave(at)posortho(dot)com)
<CoreyRLucier> : CoreyRLucier(at)aol(dot)com)
<Carsten Leue> : Carsten Leue (carsten(dot)leue(at)iwr(dot)uni-heidelberg(dot)de)
<jh> : jh (jhprivate(at)fescomail(dot)net)
<lioucr> : lioucr (lioucr(at)yahoo(dot)ca)
<TomPeakz> : TomPeakz (topman(at)vip(dot)sina(dot)com)
<arnold wittenberg> : Arnold Wittenberg (a(dot)wittenberg(at)eramco(dot)nl)
<H. Muelner> : Helmut Muelner (hmuelner(at)iicm(dot)edu)
<jurgene> : Jürgen Eidt (jurgene(at)hotmail(dot)com)
<W. Morrison> : William Morrison (Bill(at)rosinante(dot)com)
<jaslet> : Bertrand Jaslet (jaslet(at)hotmail(dot)com)
<corwinkrisw> : corwinkrisw (corwinkrisw(at)yahoo(dot)com)
<gazzivan> : gazzivan (gazzivan(at)libero(dot)it)
<Stroupe David R> : Stroupe David R (x5011) (David(dot)Stroupe(at)siemens(dot)com)
<Frank Sowinski> : Frank Sowinski (Frank(dot)Sowinski(at)fujitsu-siemens(dot)com)
<JDL> : Jordan DeLozier (support(at)triosade(dot)com)
<Wassily Gibin> : Wassily Gibin (vasily(at)gibin(dot)net)
<osamu44> : osamu44 (osamu44(at)juno(dot)ocn(dot)ne(dot)jp)
<Sims> : Sims (siminfrance(at)hotmail(dot)com)
<Vitaly Titov> : Vitaly Titov (vitalyt(at)scanvecamiable(dot)com)
<Branko Drevenšek> / <BD> : Branko Drevenšek (branko(dot)drevensek(at)uni-mb(dot)si)
<Henry P.>: Henry P. (hdpham(at)allersoft(dot)com)
<Kristian Kratzenstein> : Kristian Kratzenstein (kristian(at)kratzenstein(dot)dyndns(dot)org)
<Basara> : Alexey Silinov (basara(at)in-cubus(dot)com)
<ralphw> : Ralph Walden (ralphw(at)exmsft(dot)com)
<Zahi Kapeluto> : Zahi Kapeluto (zahi(at)locationet(dot)com)
<Colin Urquhart> : Colin Urquhart (colin(dot)urquhart(at)primetv(dot)com(dot)au)
<oboolo> : Ludovic Baillet (oboolo(at)baillet(dot)org)
<yuandi> : yuandi (yuandi(at)www(dot)ps2love(dot)com)
<Schuberth> : Sebastian Schuberth (s(dot)schuberth(at)tu-bs(dot)de)
<Squidge> : Squidge (paulc(at)ibiblio(dot)org)
<sihun> : sihun (shsung(at)mbc(dot)co(dot)kr)
<H.C.Anderson> : Howard C. Anderson (howard(dot)anderson(at)anadigm(dot)com)
<chupeev> : alexander chupeev (chupeev(at)tmn(dot)ru)
<Lucian Ioan> : Lucian Ioan (xtndd(at)yahoo(dot)com)
<Chieh An Lu> : Chieh An Lu (calu(at)interactiveedge(dot)com)
<James Dickson> : James Dickson (Jamie(at)jdnet(dot)co(dot)uk)
<Richard Collins> : Richard Collins (rtc(at)steel-connections(dot)com)
<Igor Rosenberg> : Igor Rosenberg (rosenberg(at)infotrust.sk)
<DT> : Diego Tartara (dtartara(at)hotmail(dot)com)
<VATI> : Varga Attila (attila_varga(at)freemail(dot)hu)
<DPR> : DPR (info(at)brutzler(dot)de)
<Trifon> : Trifon (trifon(dot)alekov(at)dotrix(dot)be)
<Nick Holgate> : Nick Holgate (nick(at)barhop(dot)co(dot)uk)
<Kenneth Ballard> : Kenneth Ballard (ken_ballard(at)hotmail(dot)com)
<Thomas M. Boser> : Thomas M. Boser (tom(dot)boser(at)olimllc(dot)com)
<ignacio> : Ignacio Alvarez (ignacio(at)xentient(dot)com)
<Arkadiy Olovyannikov> : Arkadiy Olovyannikov (ark(at)msun(dot)ru)
<nipper> : nipper (nipper(at)rpnet(dot)cz)
<Hermann62> : Hermann62 (hild(at)smi-software)
<Michael Gandyra> : Michael Gandyra (M(dot)Gandyra(at)steinbichler(dot)de)
<Tacho> : Tacho (tacho_fortin(at)hotmail(dot)com )
<Franco Gerevini> : Franco Gerevini
<Admir Hodzic> : Admir Hodzic (fathsoft(at)fathsoft(dot)com)
<Vladimír Kloucek> : Vladimír Kloucek (vladimir(dot)kloucek(at)samo(dot)cz)
<Cesar M> : Cesar Mello (cmello(at)gmail(dot)com)