CxImage Changelog

What's new in CxImage 6.0

Apr 14, 2009
  • Bugfixes
  • fixed CxImageTIF decoder against bad value from TIFFStripSize
  • typo in CxImage::Create for CXIMAGE_MAX_MEMORY check [philm]
  • fixed png_set_background problem with gamma [philm]
  • fixed DecreaseBpp: “clrimportant” is no longer ignored when copying “ppal” into image palette [vuhrust]
  • fixed exif decoder in ProcessExifDir, creating infinite loops with corrupted header
  • fixed CxImageICO::Decode, for icons with missing color count information
  • fixed TIFF decoder now handles images with PHOTOMETRIC_PALETTE tag
  • fixed CxImageGIF::decoder, stack overflow problem with corrupted gif [yilerwang]
  • fixed BMP decoder problem with RLE_4 bitmaps [ignacio]
  • better BMP decoder for corrupted RLE_8 bitmaps
  • fixed DibReadBitmapInfo for bitfield bitmaps with long header [KitChen]
  • fixed CxImageWMF::Decode rounding error in image width and height
  • fixed CxImageWMF::ConvertEmfFiletoEmf against invalid file header [Carlos_Abraxas]
  • fixed CxImageGIF::Decode, for images with local colour table [debugman]
  • CxImageGIF now loads images with invalid (empty) screen descriptor.
  • fixed boundary effect problems in Erode, Dilate, Edge, Median, Contour, Filter [juicy_emad]
  • fixed Filter behaviour with grayscale case: now the result is the same than the one in generic case.
  • fixed UnsharpMask [Darin Warling]
  • fixed Draw when smoothing is enabled and zoom is lees than 100%
  • fixed SelectionAddPixel: missing info.rSelectionBox update
  • fixed bug in SelectionAdd… functions: wrong value assigned to info.rSelectionBox.top and info.rSelectionBox.right, makes unprocessed pixels on selection boundary [Philosoft]
  • fixed bug in SelectionAddEllipse when the ellipse is bigger than the image dimension
  • SelectionInvert now sets the correct info.rSelectionBox.
  • SetEscape(-1) returns the image dimension for all the formats
  • fixed Bitfield2RGB to decode 32 bit per pixel data
  • fixed CxImageTIF::EncodeBody, when saving 8 bpp images, with TIFFTAG_PREDICTOR==2, the image buffer is corrupted by the tiff encoder. [adnanmn]
  • fixed blur_text: iSrc->head.biWidth, not just head.biWidth
  • Better CxImageMNG error handling (avoid crash with 0 lenght files)
  • fixed cinfo.density_unit handling in CxImageJPG::Decode [andy]
  • fixed CxImage::Copy to preserve DPI information [andy]
  • fixed SetXDPI/SetYDPI to reflect DPI towards CopyToHandle
  • fixed CxImageBMP::Decode if alpha pixels are all zero
  • fixed info.nProgress computation, for images with active selection [zhanghk]
  • fixed SwapIndex: access violation
  • fixed MixFrom: didn’t copy black pixels if the image has no transparency enabled [Matt]
  • Removed unnecessary check in DrawStringEx [rowkajhh]
  • fixed bug in BlindGetPixelColor: alpha was not handled for images with 8 bpp or less
  • fixed bug in Destroy and LayerDeleteAll: info.nNumLayers was not set back to 0. [Matt]
  • fixed bug in LayerDelete, when deleting the last layer, info.nNumLayers and pLayers were not set back to 0
  • fixed CreateFromHANDLE for 16 bit bitmaps [gofame]
  • fixed bug in Flip(): added check whether the temporary image was allocated correctly [Jonathan Marshall]
  • Better parameter check in Encode(CxFile * hFile, CxImage ** pImages, int pagecount) for multipage TIF, ICO, GIF
  • fixed bug in CxMemFile::GetBuffer: can only detach, avoid inadvertantly attaching to memory that may not be ours [Jason De Arte]
  • fixed bug in SetPixelColor: bSetAlpha was ignored for indexed images
  • fixed wrong background comparison in Mix with option OpDstCopy [Marquis.D.J], [Sims]
  • fixed missing ReleaseDC in DrawStringEx [Chris]
  • fixed bug in BlindGetPixelColor: rgb.rgbReserved not assigned in images without alpha layer [Hermann]
  • fixed WBMP encoder/decoder: wrong file header handling if width or height are more than 127 [Gary Yang], [Marcus Ackermann]
  • fixed bug in CreateFromArray and CreateFromMatrix: bFlipImage parameter was ignored for alpha channel [Vitaly Ovchinnikov]
  • fixed Mix with OpScreen option: wrong scaling factor: >>8 -> /255
  • fixed CreateFromHANDLE for the case RLE_4 as for the bmp decoder
  • Better check against possible overfows in CxImage::Create, if requested width and height are huge [Steve Manzuik]
  • fixed RepairChannel: pixels on borders were not processed + fixed rounding error [juicy_emad]
  • fixed wrong coefficient in the Stevenson - Arce error diffusion algorithm [Sam Hocevar]
  • fixed bug in SetStdPalette: info.last_c_isvalid was not set to false
  • fixed bug in Lut: grayscale image without selection, after Lut was no longer a grayscale
  • fixed missing ReleaseDC in DrawString [Chris]
  • CImageIterator::GetRow(BYTE *buf, int n) will not copy more than GetEffWidth() bytes
  • The transparent condition is info.nBkgndIndex>=0, not info.nBkgndIndex!=-1
  • SetTransIndex accepts only indexes less than the number of colors
  • Fixed bug in RGBtoBGR: memory corruption if lenght>3*width
  • info.nAlphaMax no longer affects alpha layer saving TGA and PNG
  • fixed BMP and ICO read and write image with alpha layer and width not a multiple of 4
  • fixed rounding error in Rotate, in computation of new image size
  • typo #define __ixmaJPEG_h -> #define __ximaJPEG_h [wayne]
  • fixed pointer casts to DWORD (/Wp64 compatibility)
  • fixed CxImageICO::Encode saving 4 or 8 bit icons with transparent color
  • Changes and major additions
  • support for UNICODE [Eric Jesover]
  • SetStdPalette works also for 1 bpp images
  • CxImageICO now decodes Vista (png) icons.
  • ximatif.cpp: updated to support images with non standard bitpersamples [Vladimir Kladov]
  • New method: AlphaFromTransparency
  • New method: GaussianBlur, faster than Filter and accepts arbitrary smoothing radius
  • updated CxImageMNG to handle MNGs with alpha layer
  • New method: SwapRGB2BGR
  • Replaced GetPixelColor, GetPixelIndex, AlphaGet, SelectionIsInside with the “blind” version, in the methods where it is safe. Up to +25% speed gain.
  • RotateLeft and RotateRight now preserve the selection layer
  • New method: TextBlur, selective blur on diagonal lines or round borders
  • New methods: SelectionSet, SelectionGet, BlindSelectionGet, BlindSelectionIsInside
  • DrawStringEx now draws strings also with “antialias” option. Updated the CXTEXTINFO structure with a new “smooth” variable.
  • Improved RedEyeRemove
  • Added parameter “level” in SelectionAddRect, SelectionAddEllipse, SelectionAddPixel, SelectionAddPolygon, SelectionAddColor, SelectionClear: multiple selections, remove selection area with level=0.
  • New method: SelectionRebuildBox
  • New method: SelectiveBlur [nipper]
  • CxImageBMP now reads/writes 32 bit images (alpha channel) [f22_storm] [Rasqual]
  • New method: SetType
  • New image format: SKA (built in)
  • ENUM_CXIMAGE_FORMATS: assigned unique integral values for every CXIMAGE_FORMAT_XXX [Alvaro Segura] [Balabasnia]
  • Faster CxImagePCX::Encode
  • CxMemFile increased preallocation from 4kbyte to 64kbyte, for better speed performance
  • CxMemFile::Alloc now returns a bool, to tell if the allocation has been successful
  • New method: GetTransparentMask, works for simple transparency and with alpha channel
  • new file format: CxImageRAW
  • CxImageRAW, decoder quality can be set through SetCodecOption
  • New methods: Dump, UnDump, DumpSize
  • AlphaCreate now returns bool
  • Added support for writing multipage icons, also in vista format, [Alas]
  • CxImageJAS::Decode always force conversion to sRGB. [Nudel]
  • New static methods: GetNumTypes, GetTypeIdFromName, GetTypeIdFromIndex, GetTypeIndexFromId
  • Replaced “catch (char *” with “catch (const char *” for compatibility with linux compilers [Lars Munch]
  • fixed problem with bcc32, in CxImagePNG::user_.. methods; added PNGAPI and removed casts in png_set_write_fn, png_set_read_fn, png_set_error_fn calls [Ivan_A._Krestinin]
  • Faster Flip [qhbo]
  • New methods: SelectionMirror, SelectionFlip
  • Flip and Mirror: added parameters to select if transform also the selection (default=no) and alpha (default=yes) layers
  • Draw and Draw2: added ::SaveDC and ::RestoreDC, to work in MM_ANISOTROPIC, MM_HIENGLISH, and similar modes [Greg Peatfield]
  • CreateFromHANDLE now handles also top-down bitmaps [heavyweight]
  • New options for jpeg encoder: ENCODE_SUBSAMPLE_422 (4:2:2, medium sub sampling), ENCODE_SUBSAMPLE_444 (4:4:4, no sub sampling). If none specified, encoder will use 4:1:1 high sub sampling.
  • CreateFromHICON now works also with 32bit icons [Arlen Albert Keshabian]
  • New methods: GetJpegQualityF, SetJpegQualityF, extended the JPEG quality parameter to use float numbers, necessary for low compression rate in JPEG2000 [Stefan Schürmans]
  • New parameter for QIShrink: bChangeBpp, useful for B/W image thumbnails [Artiom Mirolubov]
  • New method: Threshold2: Filters only the pixels with a lightness less (or more) than the threshold level, and preserves the colors for the unfiltered pixels. [wangsongtao]
  • Faster GrayScale (2x) for 1 and 4 bpp images [Thomas M. Boser]
  • GetVersion and GetVersionNumber now are static members
  • Replaced “memcmp” operations between pixel and background color with IsTransparent(x,y), to avoid wrong behaviour with black pixels or in images with alpha layer. Affected methods: Mix and MixFrom
  • New method: LayerDrawAll
  • New methods: KernelHanning, KernelPower
  • Added CXIMAGE_SUPPORT_DECODE switch for all the formats
  • UnsharpMask now support selections
  • Slightly faster: Resample (in bilinear case), Colorize, AlphaStrip
  • New method: Solarize [Priyank Bolia]
  • New method: GammaRGB
  • New method: SelectionGetPointer
  • Better Expand: now handles alpha and selection channels
  • New methods BlindSetPixelColr and BlindSetPixelIndex
  • New method: FloodFill
  • New method: Saturate
  • New method: ConvertColorSpace
  • New method: OptimalThreshold
  • HistogramStretch added threshold parameter
  • NewMethods: Threshold(CxImage*)
  • NewMethods: AdaptiveThreshold
  • Improved PNG decoder/encoder
  • Better throw/catch message error handling in case of throw””
  • Encode2RGBA: new bFlipY parameter [AMSN]
  • New method: CheckFormat [AMSN]
  • New Methods: Get/SetDisposalMethod, Get/SetRetreiveAllFrames, GetFrame, DestroyFrames [AMSN]
  • CxImageGIF, now can decode all frames in a single pass, if enabled with SetRetreiveAllFrames [AMSN]
  • CxImageGIF::Encode, new option: bLocalDispMeth enables the creation of animated gifs with independent disposal method for each frame
  • New methods: ntohs and ntohl for big little endian conversion in built in formats (bmp, ico, tga, pcx, gif, ska)
  • pLayers : renamed with ppLayers, replaced malloc with new
  • new option for Mix: OpAvg
  • MakeBitmap edited to work also with windows CE [Vincent_RICHOMME]
  • CxImage::Blt now paints the image also in positions different than (0,0). [RT]
  • Defined try, thorw, catch for compilers without exception handling [RT]
  • Project - Libraries - Demo application
  • minor configuration editing for VC8 warnings (_CRT_SECURE_NO_DEPRECATE)
  • Demo, new menu: graph data extraction
  • LibTIFF: tif_getimage.c updated to support images with non standard bitpersamples [Vladimir Kladov]
  • Demoview: fixed crash printing images with DPI=0
  • added libMNG version 1.0.10
  • Updated DlgText to test the “antialias” option in DrawStringEx
  • Demo, new menu: RedEyeRemove
  • Demo, new menu: Blur selection border
  • Demo: DecreaseBpp preserves transparent color
  • Demo: remember last file type used for unknown file type
  • Demo: DlgDataExt preview image
  • defined MNG_ERROR_TELLTALE in libmng
  • Demo: now pastes also metafile pictures
  • Added LibDCR
  • Demo: custom clipboard copy/paste (Dump/Undump testing)
  • Demo: new options for the JPEG format subsampling
  • Updated libpng to version 1.2.24
  • Better console demo (demo2): support UNICODE and batch conversion [Ian Knight]
  • Demo: more options for RAW file format interpolation
  • Demo: removed the unused EditCut menu and toolbar button
  • Removed unnecessary definitions for MBCS and AFXDLL in the projects settings [Pixelpoint]
  • Demo: Erode, Dilate now use a kernel=3
  • Demo: new dialog for custom linear filters [Priyank Bolia]
  • Demo: filter parameters are shared between all documents
  • Demo: added 2nd toolbar for commom operations
  • Demo, new menu: Expand, GammaRGB
  • Demo, new tool: FloodFill
  • Demo, new menu: Saturate, histogram saturation
  • Demo, new menu: HistogramStretch with threshold parameter
  • Demo, new menu: AdaptiveThreshold
  • Better CQuantizer rounding behaviour
  • updated ZLIB to 1.2.3 (no changes)
  • updated jasper to 1.900.1 (casts, minor config)
  • removed CXIMAGE_FORMAT_J2K, and j2k (now openjpeg) -> use jasper for j2k images
  • Demo, new menu: add shadow
  • Demo: display animated GIF
  • working version and demo for Pocket PC 2003 [Vincent_RICHOMME]
  • Updated project configurations to build in VC++express2005 and VC++2008
  • console demo: removed MFC dependencies, now can build with VC++express2005 + PSDK