2010-01-01  6.5.9-0 Cristy  <quetzlzacatenango@image...>
  * Add support for compact floating point (i.e. -depth 16 -define
    quantum:format=floating-point).
  * Transparent images no longer flicker on certain system when using the
    display program.
  * Permit interactive resizing with the display program.

2010-01-05  6.5.9-0 Stephan Menzel  <stephan.menzel@gmail...>
  * Add support for the BGRA raw image format.

2010-01-04  6.5.9-0 Anthony Thyssen <A.Thyssen@griffith...>
  * Added Kernel Generator to generate kernels from user strings, which
    allows the generation in many built in kernels for both Convolution
    and other Morphological methods.  New Kernels currently include..
      Convolution: Gaussian, Blur, Comet
      Morphological: Rectangle, Square, Diamond, Disk, Plus
      Distance: Chebyshev, Manhatten, Knight, Euclidean
    And both old and new (rectangular) user defined kernel specifications
    including the use of 'nan' to represent elements which are not part
    of the kernel definition.  List built-in kernel types use "-list kernel"
  * Added -morphology {method}[:{iteration}] {kernel_string}
    Initial methods includes no only the basic morphology methods: Dialate,
    Erode, Open, Close; and a pixel color preserving 'Intensity' version, but
    also the special methods: Convolve, and Distance.  Of course the
    appropriate kernel should be provided for each specific method.

2010-01-01  6.5.9-0 Cristy  <quetzlzacatenango@image...>
  * Add OpenCL-enabled filter (e.g.  convert image.png -process
    "convolve '-1, -1, -1, -1, 9, -1, -1, -1, -1'" image.jpg).
  * Added StringTo...() processing functions

2009-12-27  6.5.8-9 Anthony Thyssen <A.Thyssen@griffith...>
  * Added MxN tile cropping with overlapping and space handling.
    See IM Examples, Cutting and Bordering, Cropping roughly Equal

2009-12-23  6.5.8-8 Anthony Thyssen <A.Thyssen@griffith...>
  * angle bug fix in variable blur composition with vertical ellipses
  * Added ability to have variable angles for ellipses in variable blur
    composition.  See IM Examples, Composition, Variable Blur for details

2009-12-20  6.5.8-8 Cristy  <quetzlzacatenango@image...>
  * JPEG does not grok the HSL colorspace.

2009-12-18  6.5.8-7 Cristy  <quetzlzacatenango@image...>
  * Off by 1 error when allocating the dash-pattern array in PerlMagick.
  * The -gaussian-blur over blurred the opacity channel (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=15218).

2009-12-13  6.5.8-6 Cristy  <quetzlzacatenango@image...>
  * Declare InverseFourierTransformImage in Magick++/Include.h.

2009-12-09  6.5.8-5 Glenn Randers-Pehrson <glennrp@image...>
  * The PNG8 encoder would fail to write a 1-color image, due to
    a bogus MagickFail return from CompressColormapTransFirst().

2009-12-05  6.5.8-4 Cristy  <quetzlzacatenango@image...>
  * SVG images are no longer double sized with the -density option.

2009-12-04  6.5.8-3 Glenn Randers-Pehrson <glennrp@image...>
  * Changed the one instance of PNG_COLOR_TYPE_RGBA to PNG_COLOR_TYPE_RGB_ALPHA
    in coders/png.c

2009-12-03  6.5.8-3 Cristy  <quetzlzacatenango@image...>
  * It's interword-spacing, not interword_spacing (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=1515).
  * All JP2 depths (e.g. 4, 10, 12, 16) are now supported properly.

2009-11-28  6.5.8-2 Glenn Randers-Pehrson <glennrp@image...>
  * Changed the one remaining ping_info->trans to ping_info->trans_values
    in coders/png.c

2009-11-26  6.5.8-1 Chris Madison  <madisonblu@gmail...>
  * Eliminate bogus 'skip to sync byte' exception for PCD image format.
  * -threshold option: threshold to white if the computed intensity of the
	  color channels exceeds the threshold.
  * Add -define jpeg:extent option to restrict the maximum JPEG image file size.

2009-11-26  6.5.8-1 Dr. Ingo Bremer <bremer@wias-...>
  * Escape single quote in when writing the UIL format.

2009-11-25  6.5.8-1 Jee Teck  <jee.teck@cteca...>
  * The mogrify program +opaque option now recognizes its required argument.

2009-11-19  6.5.8-0 Cristy  <quetzlzacatenango@image...>
  * Add magick/morphlogy.{c,h} source templates.
  * Sync image option when reading MPR images.
  * Optimize ping for SVG images.
  * SetLogFormat() no longer causes crash (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=15091).
  * Do not call MagickCoreTerminus() when memory allocation fails inside
    the locale component.

2009-11-18  6.5.7-9 Cristy  <quetzlzacatenango@image...>
  * Read / write 32-bit SUN raster images with a odd width.
  * Cairo format returns pixels with the alpha premultiplied (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=15081).

2009-11-12  6.5.7-8 Cristy  <quetzlzacatenango@image...>
  * Thumb::URI file URI now has the correct number of forward slashes.

2009-11-09  6.5.7-7 Glenn Randers-Pehrson <glennrp@image...>
  * Suppress libpng pedantic warnings and warn about using old libpng-1.4.0
    beta versions.

2009-11-09  6.5.7-7 Cristy  <quetzlzacatenango@image...>
  * Bump library age.
  * Restore -tile-offset functionality (bug report from Anthony).

2009-11-06  6.5.7-6 Cristy  <quetzlzacatenango@image...>
  * Animate command line options are no longer ignored.

2009-11-04  6.5.7-5 Anthony Thyssen <A.Thyssen@griffith...>
  * Bug Fix for Polynomial distortion. which is now working.

2009-11-01  6.5.7-4 Cristy  <quetzlzacatenango@image...>
  * Use -define delegate:bimodal=true to activate any bimodal delegates.
  * Make sure MagickWand semaphore is acquired before locking it.

2009-10-28  6.5.7-3 Cristy  <quetzlzacatenango@image...>
  * Convert SVG clipping path points from unsigned to long.

2009-10-26  6.5.7-2 Chris Madison  <madisonblu@gmail...>
  * Only call InstantiateXComponent() if X11 support is included.
  * Correct hue computation for the HSB colorspace.

2009-10-23  6.5.7-1 Samuel Thibault  <samuel.thibault@ens-l...>
  * Braille coder fix for DirectClass images

2009-10-19  6.5.7-1 Wang Dataton <wang@datat...>
  * Use fdopen() rather than MagickOpenStream() in coders/pict.c.

2009-10-18  6.5.7-1 Cristy  <quetzlzacatenango@image...>
  * Alpha blending is not required for ScaleImage().
  * Gaussian noise operator is not longer discontinuous.

2009-10-14  6.5.7-0 Pino Toscano  <pino@kde...>
  * ImageMagick fails to build in GNU/HURD due to absence of PATH_MAX.

2009-10-14  6.5.7-0 Cristy  <quetzlzacatenango@image...>
  * Black channel is now set properly when resizing CMYKA images.

2009-10-10  6.5.7-0 Anthony Thyssen <A.Thyssen@griffith...>
  * Bug Fixes for degenerate 'affine' cases of BilinearForward distortion.

2009-10-06  6.5.6-10 Cristy  <quetzlzacatenango@image...>
  * Declare the  MagickCore method SpliceImage() in Magick++/Include.h.

    QueueCacheViewAuthenticPixels() for the CopyComposite optimization.
2009-10-04  6.5.6-9 Cristy  <quetzlzacatenango@image...>
  * Use GetCacheViewAuthenticPixels() rather than
    QueueCacheViewAuthenticPixels() for the CopyComposite optimization.

2009-10-03  6.5.6-8 Nick Wellnhofer <wellnhofer@aevum...>
  * Add missing libraries to the LIBADD entries in coders/Makefile.am,
    filters/Makefile.am and wand/Makefile.am.
  * Use LIBS rather than LDFLAGS in configure.ac for the Freetype delegate
    library.

2009-10-01  6.5.6-7 Cristy  <quetzlzacatenango@image...>
  * Don't use group4 compression if the image is truecolor.
  * If image is gray, write grayscale DPX images.
  * We no longer lose a scanline when reading multi-frame raw images
    (Y, R, C, etc.).
  * Properly update the EXIF orientation tag.

2009-09-25  6.5.6-6 Cristy  <quetzlzacatenango@image...>
  * Permit percentage of hue for HSL (e.g. hsl(12%,...)).

2009-09-25  6.5.6-5 Cristy  <quetzlzacatenango@image...>
  * Support -clamp option.
  * Patch for IsMagickColorEqual() for HDRI.
  * Permit non-percentage HSL colors (e.g. hsl(12.6316,134.58339,219.00012)).

2009-09-25  6.5.6-5 Elf  <elf@ephem...>
  * Patch to fix configure's framework's undefinedness (only if the gslib
    tests are run).

2009-09-22  6.5.6-4 Cristy  <quetzlzacatenango@image...>
  * Don't compile Huffman2DEncodeImage() unless the TIFF delegate library
    is enabled.
  * Hue in hsl() format is 0-360 and does not use %.

2009-09-21  6.5.6-3 Cristy  <quetzlzacatenango@image...>
  * Deprecate LevelImageColors(), replace with LevelColorsImage().

2009-09-17  6.5.6-2 Cristy  <quetzlzacatenango@image...>
  * Optimize copy composite operator.

2009-09-15  6.5.6-2 Cristy  <quetzlzacatenango@image...>
  * Use -define jpeg:size to scale a JPEG image to the specified size.

2009-09-13  6.5.6-0 Cristy  <quetzlzacatenango@image...>
  * Fix ICON alpha mask scanline pad.

2009-09-11  6.5.5-10 Cristy  <quetzlzacatenango@image...>
  * Return the global maximum threads to avoid the rare cache view assertions.
  * Throw an end-of-file exception for truncated raw gray images.

2009-09-10  6.5.5-9 Cristy  <quetzlzacatenango@image...>
  * Do not include last line of text in the interline spacing computation.

2009-09-07  6.5.5-8 Cristy  <quetzlzacatenango@image...>
  * Check that quantum_info is defined before destroying it in the PNG coder.
  * Add -interline-spacing option to convert.

2009-09-03  6.5.5-7 Cristy  <quetzlzacatenango@image...>
  * Support multi-page transparent Postscript and PDF.

2009-09-01  6.5.5-6 Cristy  <quetzlzacatenango@image...>
  * A union is required when converting a thread ID to an unsigned long.

2009-08-28  6.5.5-5 Cristy  <quetzlzacatenango@image...>
  * Add support for TIFF 3.9.1.

2009-08-27  6.5.5-4 Cristy  <quetzlzacatenango@image...>
  * Validate with the netscape: reference image.

2009-08-26  6.5.5-3 Cristy  <quetzlzacatenango@image...>
  * Fix memory leak for threaded PerlMagick scripts.

2009-08-24  6.5.5-2 Cristy  <quetzlzacatenango@image...>
  * SVG compile error when if MAGICKCORE_CAIRO_DELEGATE is not defined.

2009-08-23  6.5.5-1 Anthony Thyssen <A.Thyssen@griffith...>
  * Bug Fix for transparency handling in Composite Variable Blur
  * Addition of -auto-level and -auto-gamma  image enhancements
    (under trial not yet final)
  * Addition of a special -channel flag 'sync' which means that the specified
    channels are to be modified together by the same amount.  The flag is
    enabled by default.  This replaces the current 'channels not modified'
    type handling thought IM.
  * Modified -channel parsing to continue looking for words, after handling
    any shorthand channel options.  For example:  -channel RGB,sync

2009-08-10  6.5.5-0 Cristy  <quetzlzacatenango@image...>
  * identify -format %c logo.png returns the image comment as expected.
  * Clone ImageInfo members scene and number_scenes (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=14437).
  * Fix memory leak with the -remote option of the animate program (bug report
    from Anthony).
  * If a grayscale TIFF image has a colormap write it as a colormapped image.
  * MVG partial opacity not set properly (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=6&t=14442).
  * Black channel was not blurring properly (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=14473).

2009-08-06  6.5.4-10 Cristy  <quetzlzacatenango@image...>
  * The display program honors -loop.
  * (ab) of Lab colorspace was not offset correctly.
  * Scale mag/phase and real/imaginary the same for HDRI and non-HDRI builds.
  * SVG permits multiple arc paths with an omitted 'A' (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=6&t=14377).
  * The 'skewY' MVG attribute produced incorrect angles (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=6&t=14144).

2009-08-02  6.5.4-9 Cristy  <quetzlzacatenango@image...>
  * Optimize GammaImage() method.

2009-08-02  6.5.4-8 Cristy  <quetzlzacatenango@image...>
  * OpenMP-enable GetSimilarityMetric().

2009-07-30  6.5.4-7 Bernhard Rosenkraenzer <bero@arkli...>
  * Structure trans_values was renamed to trans_color and trans was
    renamed to trans_alpha in PNG version 1.4.

2009-07-29  6.5.4-7 Cristy  <quetzlzacatenango@image...>
  * Replace color blending in DrawGradientImage() to use Composite Blend.
    this makes Gradients handle transparency correctly!

2009-07-28  6.5.4-7 Cristy  <quetzlzacatenango@image...>
  * The -thumbnail option no longer removes color profiles (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=14312).
  * Do not scale real / imaginary FFT / IFT.
  * Check for localtime() NULL return.
  * import --help requires an X server (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=14323).
  * Fails to load MS Windows icons with compressed PNG elements (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=14324).

2009-07-25  6.5.4-6 Cristy  <quetzlzacatenango@image...>
  * Support the new JPEG version 7 delegate library.

2009-07-24  6.5.4-6 Alexander E. Patrakov <patrakov@gmail...> 
  * Incorrect use of setjmp in coders/png.c.

2009-07-23  6.5.4-5 Cristy  <quetzlzacatenango@image...>
  * We broke -scene when we fixed the -dispose option.  Try again.

2009-07-21  6.5.4-4 Cristy  <quetzlzacatenango@image...>
  * Update autoconf support files.
  * More than one -dispose setting overwrote previous settings (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=14252).
  * Don't use JPEG's color reduction algorithm for less than 8 colors.

2009-07-13  6.5.4-3 Anthony Thyssen <A.Thyssen@griffith...>
  * Final testing and bug fixes for all mathematical compose methods
    Including non-overlapping regions bugs found in in operators Divide,
    ColorDodge,  VividLight.  And the handling of transparency to follow
    standard 'Over' Blending in Divide.  Only math methods not looked at are
    the addition methods Plus, Add, Minus, and Subtract, which do not follow
    normal 'Over' alpha blending behaviour, for the purposes of mask handling.

2009-07-12  6.5.4-3 Anthony Thyssen <A.Thyssen@griffith...>
  * Addition of user definable 'Mathematics' compose method
      -compose Mathematics -set option:compose:args A,B,C,D -composite
    Will implement the formula    f(Sc,Dc) = A*Sc*Dc + B*Sc + C*Dc + D
    this lets you implement most smooth polynomial compose methods.
    (requested by Fred WienHaus)

2009-07-11  6.5.4-3 Anthony Thyssen <A.Thyssen@griffith...>
  * Finished the recoding of Composite methods to allow easier debugging
    and faster access.
  * Added PegtopLight compose method as an alternative simpler Softlight
    alternative.  See notes and comparision to SoftLight in...
       http://www.pegtop.net/delphi/articles/blendmodes/softlight.htm
  * From the notes on Photoshop blend modes at
       http://www.simplefilter.de/en/basics/mixmods.html
    Added extra composition modes:
       VividLight, PinLight, LinearBurn, LinearDodge
    NOTE: 'LinearBurn' the same as 'Plus' but with the normal 'Over' blending.

2009-07-10  6.5.4-3 Anthony Thyssen <A.Thyssen@griffith...>
  * Re-coding of Composite methods HardLight, SoftLight, Overlay, LinearLight,
    ColorBurn, ColorDodge, Multiply, Screen  to make it more readable, easier
    to debug, and directly comparable to SVG specifications.
  * Specifications changed for  SoftLight, ColorBurn, ColorDodge
    Though only SoftLight changed to significantly.
  * However implementation errors were found for  ColorBurn, LinearLight

2009-07-01  6.5.4-3 Cristy  <quetzlzacatenango@image...>
  * Add -blue-shift option.
  * Add compression flag for each channel of a PSD layer.
  * Implement experimental forward and inverse fourier transforms (contributed
    by Sean Burke and Fred Weinhaus).  The -fft / -ifft option is not ready for
    prime time just yet.
  * Support -cdl (color decision list) option.
  * Support breaks in Chinese characters which traditionally do not include
    spaces.
  * Don't process directories as filenames when using wildcard paths
    (i.e. logo[1]/png).

2009-07-01  6.5.4-2 Cristy  <quetzlzacatenango@image...>
  * Can't bit shift a float.

2009-06-25  6.5.4-1 Cristy  <quetzlzacatenango@image...>
  * Off by one error for multi-frame raw grayscale images.
  * Can't stat() a Zip or Bzip opaque structure.
  * DPX user bits are no longer truncated.
  * Return image colorspace for -format [%colorspace] option.
  * ThumbnailImage(): don't subsample if image is already thumbnail size.

2009-06-23  6.5.4-0 Anthony Thyssen <A.Thyssen@griffith...>
  * Automatic determination of B from C and C from B for a 'Keys Filter'
    when using the B,C Cubic Filter Expert options was broken.
    See http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=14037

2009-06-19  6.5.4-0 Anthony Thyssen <A.Thyssen@griffith...>
  * Added -compose 'Blur', variable blur mapping to CompositeImages
    Arguments   X_scale x Y_scale + angle   of the blurring ellipse.
  * Added "-blur" special compose option to "composite"
  * Cleanup of "composite" compose argument handling

2009-06-18  6.5.3-10 Cristy  <quetzlzacatenango@image...>
  * Clone pixel cache when cloning image to prevent RMagick semaphore lock.
  * Set compare similarity image to NULL to prevent double free.

2009-06-16  6.5.3-8 Cristy  <quetzlzacatenango@image...>
  * Set camera formats to require a seekable stream.
  * Do not let display program image window exceed the screen size.

2009-06-14  6.5.3-7 Cristy  <quetzlzacatenango@image...>
  * Improve FITS keyword parser.

2009-06-14  6.5.3-7 Anthony Thyssen <A.Thyssen@griffith...>
  * Cleanup of compose 'displace' of old useless code that is not used.
  * Implement a compose 'distort' mapping method,
    This is basically exactly like 'displace' but relative to a fixed point
    which may be user supplied as +X+Y
  * Default scaling to width/2 and height/2 of overlay (100% scale)
    with a distortion 'center' to the middle of the overlay image
  * If a '%' flag given scale displacement relative to image size
  * If a '!' flag given make scale and center relative to 'background' image 
    instead of the overlay map.
  * If no 'height' scale given, use the X scale.

2009-06-13  6.5.3-6 Anthony Thyssen <A.Thyssen@griffith...>
  * Fixed bug for compose methods, Hue, Saturate, Luminize

2009-06-11  6.5.3-6 Cristy  <quetzlzacatenango@image...>
  * Report the correct transparent pixel values in the display program
    magnify windows.
  * Do not advance when finalizing image settings in the mogrify program.

2009-06-11  6.5.3-5 Anthony Thyssen <A.Thyssen@griffith...>
  * Fixed "convert" to merge the third 'mask' image into the 'source' image
    for correct handling of 2 dimensional -compose "displace".
  * Fixed PerlMagick Composite() for the same thing.
  * Modified compose "Displace" so displacement image's alpha channel can be
    used to mask the transparency of the overlay area.

2009-06-07  6.5.3-4 Cristy  <quetzlzacatenango@image...>
  * Added the HALD image Color LUT, and a no-op HALD: image generator.
    See Introduction at  http://www.quelsolaar.com/technology/clut.html

2009-06-07  6.5.3-4 Anthony Thyssen <A.Thyssen@griffith...>
  * Changed CompositeImageChannel() so that extra compose arguments are
    now passed in the ImageArtifact "compose:args". This can be assigned to
    images using   -set "option:compose:args" 'args'  where args are defined
    using 'geometry' style or 'comma separated numbers'.
  * Declared the special flag needed for Composite Tiling as the ImageArtifact
    "compose:outside-overlay".
  * Documentation update for CompositeImageChannel() in Core Library to
    reflect these changes.
  * Documentation update for DistortImage() in Core Library with the extra
    ImageArtifact controls it can use.
  * Bug correction in normalization of GetOptimalKernelWidth2D() of gem.c

2009-06-06  6.5.3-3 Anthony Thyssen <A.Thyssen@griffith...>
  * Documentation update for CompositeImageChannel() in Core Library.
    This adds the information on how extra compose arguments needed for
    specific compose methods are actually passed to the library function.
    Compose methods such as Blend, Dissolve and Displace.

2009-06-01  6.5.3-3 Priya Hariharan <priya.hariharan@globa...>
  * The target profile in ProfileImage() is no longer accessed after it is
    freed.

2009-06-01  6.5.3-1 Cristy  <quetzlzacatenango@image...>
  * Bug fix for -page.

2009-05-31  6.5.3-1 Anthony Thyssen <A.Thyssen@griffith...>
  * Minor change to -function Arctan to make first argument match slope

2009-05-29  6.5.3-0 Cristy  <quetzlzacatenango@image...>
  * Do not treat -page as a global option (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13864).

2009-05-28  6.5.2-10 Cristy  <quetzlzacatenango@image...>
  * Create thread set for pseudo-random number generator.

2009-05-25  6.5.2-9 Cristy  <quetzlzacatenango@image...>
  * Do not change opacity value for the -alpha background option.
  * Rebuild automake / autoconf scripts.

2009-05-23  6.5.2-8 Cristy  <quetzlzacatenango@image...>
  * Check for XMakeImage() integer overflow vulnerability (Secunia Advisory
    SA35216).

2009-05-23  6.5.2-8 Cristy  <quetzlzacatenango@image...>
  * Permit reading a specific frame of a multi-page TIFF with blobs.

2009-05-22  6.5.2-8 Anthony Thyssen <A.Thyssen@griffith...>
  * Added new -function methods  Arcsin  and Arctan

2009-05-19  6.5.2-8 Glenn Randers-Pehrson <glennrp@image...>
  * Fixed a regression with PNG8: format.

2009-05-19  6.5.2-7 Cristy  <quetzlzacatenango@image...>
  * The -geometry option was improperly applied twice.

2009-05-18  6.5.2-6 Richard Oehlinger <richard.oehlinger@celum...>
  * Set image colorspace to YCbCrColorspace if JPEG color space is JCS_YCbCr.

2009-05-14  6.5.2-5 Glenn Randers-Pehrson <glennrp@image...>
  * Updated help output and command-line options documentation to bring
    the -alpha options up to date with what's actually in the code.

2009-05-13  6.5.2-5 Glenn Randers-Pehrson <glennrp@image...>
  * Change "depreciated" to "deprecated" in several files.

2009-05-10  6.5.2-5 Cristy  <quetzlzacatenango@image...>
  * Change OpenMP schedule from dynamic to static for RenderFreeType().
  * Recognize unicode strings when computing caption word wrapping.
  * New -alpha background option to set fully-transparent pixels to the
    background color.

2009-05-08  6.5.2-4 Cristy  <quetzlzacatenango@image...>
  * Combined layer of transparent PSD image was not being read properly.

2009-05-06  6.5.2-3 Glenn Randers-Pehrson <glennrp@image...>
  * Progress on "-define png:bit-depth=value" and "-define png:color-type=value"
    It is now able to write an opaque black-and-white image in any of the 15
    valid combinations of PNG color-type and bit-depth.
  * Fixed a regression with writing sub-8-bit grayscale PNGs.

2009-05-06  6.5.2-2 Chris Madison  <madisonblu@gmail...>
  * Create 8-bit TIFF images if -depth is set to 8 and HDRI-enable ImageMagick.

2009-05-04  6.5.2-1 Chris Madison  <madisonblu@gmail...>
  * Accept file lists on the command line (e.g. echo "rose: rose.png" | 
	  convert @- ...).
  * Duplicate line in tiff.c breaking read of zip compressed tif (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13688).
  * Support policies to permit or deny any coder, delegate, filter, or file
    path (see policy.xml).

2009-05-02  6.5.2-0 Chris Madison  <madisonblu@gmail...>
  * The mogrify -crop option returns multiple images if an x/y offset is not
    specified (e.g. -crop 100x100).
  * Generate a proper file path for -path @filelist.txt (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=13671).

2009-05-01  6.5.2-0 Glenn Randers-Pehrson <glennrp@image...>
  * Accept "-define png:bit-depth=value" and "-define png:color-type=value"
    options.  This is work-in-progress with the objective of being able to
    precisely specify the type of PNG file to be written.  The previously-used
    internal attribute "png:bit-depth" that was used to communicate between
    the PNG writer and the JNG writer is changed to "png:bit-depth-written".
    This feature needs testing.  It is important to note that this feature
    cannot be used to force the PNG to use a bit-depth or color-type that
    does not losslessly represent the image.  You can, however, cause
    the writer to use a larger depth or to use the RGB colorspace when
    grayscale or indexed would have been sufficent.

2009-05-01  6.5.1-10 Anthony Thyssen <A.Thyssen@griffith...>
  * Fixed the Rmin usage in Depolar and Polar distortions
  * The 6th argument (Ato) for Polar/Depolar is now optional and defaults
    to Afrom + 360 degrees (or a fill circle from the given start angle)

2009-04-30  6.5.1-10 Cristy  <quetzlzacatenango@image...>
  * Do not return a black image for -channel RGBA -gaussian (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13669).

2009-04-28  6.5.1-9 Cristy  <quetzlzacatenango@image...>
  * Fix 'conflicting types for Huffman2DEncodeImage' compile exception.

2009-04-25  6.5.1-9 Cristy  <quetzlzacatenango@image...>
  * Generate BMP 32-bit ARGB format for images with transparency (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13633).

2009-04-24  6.5.1-7 Cristy  <quetzlzacatenango@image...>
  * Grok 'image.psd[0]' and 'image.mpg[0]' (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=13609).
  * Normalize similarity based on reconstruction not the original (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13626).
  * Support multiple JPEG images encapsulated within DICOM.

2009-04-23  6.5.1-6 Cristy  <quetzlzacatenango@image...>
  * Msys does not understand NAME_MAX.

2009-04-22  6.5.1-5 Cristy  <quetzlzacatenango@image...>
  * Check for valid linked list before assigning next / previous pointers.

2009-04-21  6.5.1-4 Glenn Randers-Pehrson <glennrp@image...>
  * Check error return from CompressColormapTransFirst() in coders/png.c

2009-04-21  6.5.1-4 Glenn Randers-Pehrson <glennrp@image...>
  * Refrain from modifying image struct members (color, depth, matte)
    while writing PNG datastreams.

2009-04-21  6.5.1-4 Glenn Randers-Pehrson <glennrp@image...>
  * Sometimes the PNG8: format would produce 1-, 2-, or 4-bit PNG datastreams.
    Now it always produces 8-bit datastreams as users probably expect.

2009-04-21  6.5.1-4 Glenn Randers-Pehrson <glennrp@image...>
  * Suppressed "shadowed declaration" warnings in coders/jpeg.c and
    coders/png.c that are triggered by "-Wshadow" gcc compiler flag.

2009-04-17  6.5.1-3 Cristy  <quetzlzacatenango@image...>
  * The display program now returns a 0 exit code on success (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13579).

2009-04-14  6.5.1-3 Glenn Randers-Pehrson <glennrp@image...>
  * Folded some long lines and made other cosmetic changes.in coders/png.c

2009-04-13  6.5.1-3 Cristy  <quetzlzacatenango@image...>
  * MVG autodetection failing (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=13542).

2009-04-11  6.5.1-2 Cristy  <quetzlzacatenango@image...>
  * Image not properly placed when displaying to the X server root (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13532).
  * fmax() is not support on some platforms (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13533).

2009-04-11  6.5.1-2 Anthony Thyssen <A.Thyssen@griffith...>
  * Rename existing "Bilinear" distortion as  "BilinearReverse"
  * Added forward mapped bilinear distort as  "BilinearForward"
  * The "Bilinear" distort is temporarily obsoleted but will eventually
    be added as a  "BilinearReverse" and "BilinearForward" combination
    mapping though a unit square.
  * Sparse Gradient internally uses "BilinearReverse" for its "Bilinear"
    gradient function as that method is the direct use of such equations.

2009-04-01  6.5.1-1 Cristy  <quetzlzacatenango@image...>
  * Default to min-is-white Photometric for fax / group4 compression (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13468).
  * Respect image resolution when setting PDF MediaBox (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=13350).
  * Add SimilarityImage() to return how similar one image is to another.

2009-03-28  6.5.1-0 Cristy  <quetzlzacatenango@image...>
  * Graceful exit in djvu coder when EOF is thrown.
  * Support -unsharp option for the montage program. 

2009-03-28  6.5.0-10 Cristy  <quetzlzacatenango@image...>
  * Reduce deskew blurring: use AffineTransformImage() rather than
    RotateImage().
  * Unexpected end-of-file @ xwd.c/ReadXWDImage/252 (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13430).

2009-03-26  6.5.0-10 Markus Dahms <markus.dahms@progr...>
  * Support for -density & -units options in PSD writer.

2009-03-26  6.5.0-10 Samuel Thibault  <samuel.thibault@ens-l...>
  * Fix bug in the braille coder which makes it always segfault.

2009-03-25  6.5.0-9 Cristy  <quetzlzacatenango@image...>
  * Enhance the compare program to locate a template image within a larger
    image.
  * Eliminate assertion when generating a PDF thumbnail.

2009-03-25  6.5.0-8 Cristy  <quetzlzacatenango@image...>
  * Fix assertion in IntegralRotateImage (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13410).

2009-03-24  6.5.0-7 Cristy  <quetzlzacatenango@image...>
  * Referenced counted blob was incremented incorrectedly in CloneImage().

    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13410).
2009-03-23  6.5.0-6 Chris Madison  <madisonblu@gmail...>
  * Assertion failure reading PSD image (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13397).

2009-03-21  6.5.0-5 Chris Madison  <madisonblu@gmail...>
  * Change -selective-blur to use gaussian kernel.

2009-03-21  6.5.0-4 ERB  <entropy@xebec...>
  * Missing locks in blob - race condition (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13385).

2009-03-19  6.5.0-3 Chris Madison  <madisonblu@gmail...>
  * Use default SVG resolution unless resolution is explicitly set (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13373).
  * Add support for -selective-blur option.

2009-03-19  6.5.0-3 ragesteel  <iimagemagic-org-iapied0o@gt2.r...>
  * ImageToBlob() no longer faults if Jasper compression is wrong (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13372).

2009-03-19  6.5.0-3 ERB  <entropy@xebec...>
  * Check the 8BIM profile resource block length (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13368).
  * Unlocked read in DeleteNodeByValueFromSplayTree (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13370).

2009-03-18  6.5.0-2 ERB  <entropy@xebec...>
  * Eliminate race condition when acquiring a wand (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13357).
  * Use of "localtime" in FormatMagickTime not thread-safe (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13358).

2009-03-18  6.5.0-2 Cristy  <quetzlzacatenango@image...>
  * Fix the image compose operator at OverCompositeOP for shadows (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=13330).

2009-03-14  6.5.0-1 Paul Smedley  <paul@smedl...>
  * Patches to get ImageMagick working under OS2.

2009-03-10  6.5.0-1 Anthony Thyssen <A.Thyssen@griffith...>
  * Expansion of Virtual-Pixel (Cache) handling, to include corrected Mirror,
    plus addition of  CheckerTile, HorizontalTileEdge and VerticalTileEdge

2009-03-10  6.5.0-0 John Cupitt  <jcupitt@gmail...>,
                    Glenn Randers-Pehrson <glennrp@image...>
  * DICOM reader not handling signed pixels properly.

2009-03-09  6.4.9-10 Alexander E. Patrakov <patrakov@gmail...> 
  * Don't call GetValueFromSplayTree() if image properties is NULL.

2009-03-09  6.4.9-10 Anthony Thyssen <A.Thyssen@griffith...>
  * Fix minor size issue with bestfit +distort operation.
  * Enable listing of -distort Polynomial
  * Minor tweeks and center fixes for Polar/Depolar

2009-03-01  6.4.9-9 Cristy  <quetzlzacatenango@image...>
  * Convert returns MagickFalse for the -version option (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=13230).
  * Don't set pixel opacity unless the image alpha channel is active (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13189).

2009-02-27  6.4.9-8 Anthony Thyssen <A.Thyssen@griffith...>
  * Fix old -clut bug for re-coloring gray images using transparent and
    semi-transparent colors.

2009-02-22  6.4.9-7 Rick Mabry  <rick.mabry@anony...>
  * Changes have been made to scores of the files that generate the
    documentation. The most noticeable cosmetic changes are to the command-line
    examples and command-line snippets, which now have a new look: dark blue
    boxes with white/yellow text to indicate sample input/output.  Inclusion of
    current version and release dates in appropriate places are now
    automatically generated. Also, many changes have been made to begin to
    bring the pages into strict W3C compliance with respect to both HTML and
    CSS.

2009-02-21  6.4.9-7 Chris Madison  <madisonblu@gmail...>
  * The identify program reads the image pixels when the -format option is
    asking for image statistics.
  * Much improved ImageMagick validation suite (exercise with 'make check').

2009-02-18  6.4.9-5 Jon  <jon@brick...>
  * Processing the arg list -tile is replaced by -sans0 which is 1 char longer
    and which overwrites the allocated area.

2009-02-16  6.4.9-5 Chris Madison  <madisonblu@gmail...>
  * Add section to license to alert users to third-party licenses in the
    NOTICE file.

2009-02-11  6.4.9-3 Anthony  <A.Thyssen@griffith...>
  * Replaced geometry string parsing using ParseGravityGeometry() in
    "composite" with more direct use of GravityAdjustGeometry();

2009-02-10  6.4.9-3 Cristy  <quetzlzacatenango@image...>
  * Support file descriptors (e.g. convert image.jpg fd:3 ...).
  * The stream utility no longer go into an infinite loop (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=13102).

2009-02-04  6.4.9-2 Cristy  <quetzlzacatenango@image...>
  * JPEG to PDF was not always reversible (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13020).

2009-01-30  6.4.9-0 Cristy  <quetzlzacatenango@image...>
  * Stroking when annotating failed for stroks widths > 2 (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=13009).

2009-01-24  6.4.8-10 Cristy  <quetzlzacatenango@image...>
  * TransformImageColorspace() returns GRAYColorspace when set (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12990).
  * Don;t assume CMYK unless document process colors include Cyan, Magenta,
    or Yellow.

2009-01-23  6.4.8-9 Cristy  <quetzlzacatenango@image...>
  * Increase random angle range for +polaroid from -7..7 to -15..15 degrees.

2009-01-22  6.4.8-8 Anthony  <A.Thyssen@griffith...>
  * Fixed a -evaluate AddModulus 'patch' for correct 'negative' handling

2009-01-20  6.4.8-7 Cristy  <quetzlzacatenango@image...>
  * Removed previous patches for -shear directions.

2009-01-20  6.4.8-8 Thomas Stegemann  <Thomas.Stegemann@mater...>
  * SVG with resolutions other than 72.0 dpi, text is no longer transformed
    twice.

2009-01-20  6.4.8-8 Anthony  <A.Thyssen@griffith...>
  * Renamed -evaluate methods 'sin' and 'cos' to math C math library names
  * Added  "-function polynomial  a,b,c,...."   Eg:  a*x^2 + b*x + c
  * Added  "-function sinusoid freq,phase,amplitude,bias  (all optional)

2009-01-18  6.4.8-7 Anthony  <A.Thyssen@griffith...>
  * Removed "annotate" patches, which causes no end of problems.
    Original coding worked perfectly fine.  Annotate isn't part of SVG!

2009-01-18  6.4.8-7 Cristy  <quetzlzacatenango@image...>
  * Respect mouse wheel movements for display program (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=12938).
  * Grab button in Display Open menu now works consistently (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12942).
  * Patch for problem with opacity in MVG (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12946).

2009-01-14  6.4.8-6 Cristy  <quetzlzacatenango@image...>
  * Don't accept discontinuous shear angles for the -annotate option.
    -- REMOVED

2009-01-14  6.4.8-6 Mark Freeman <mark.freeman@porci...>
  * Apply patch so ImageMagick compiles with Visual Studio 6.

2009-01-12  6.4.8-5 Alexander E. Patrakov <patrakov@gmail...> 
  * Fix small memory leak on truncated PNG images.
  * Do not allocate pixels when pinging a PNG image.

2009-01-11  6.4.8-6 Chris Madison  <madisonblu@gmail...>
  * Set the stroke opacity for "opacity" SVG element (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=10594).

2009-01-10  6.4.8-5 Matthew Litwin <mlitwin@sonic...>
  * Convert to windows .ico format no longer inverts alpha channel.

2009-01-10  6.4.8-5 Cristy  <quetzlzacatenango@image...>
  * Interpret geometry correctly for negative angles (-shear 30x-10).

2009-01-08  6.4.8-4 Eberhard Mattes  <eberhard.mattes@web.d...>
  * Fix GetMagickToken() to accept locales that use "," as radix character.

2009-01-08  6.4.8-4 Anthony  <A.Thyssen@griffith...>
  * Add (and Fix) -evaluate methods   Sine, Cosine, AddModulus

2009-01-05  6.4.8-4 Rick Mabry  <rick.mabry@anony...>
  * Check for negative offsets (bevel widths) for the -frame option.

2009-01-04  6.4.8-4 Alexander E. Patrakov <patrakov@gmail...> 
  * Patch for a memory leak and a logical bug in coders/gif.c.
  * CopyMagickString() now returns the minimum of the source string length
    or the length parameter.
  * Properly set alpha channel in PNGs with palette and tRNS.

2009-01-01  6.4.8-4 Cristy  <quetzlzacatenango@image...>
  * Support %[] embedded filename tag (e.g. convert rose: -set area "%wx%h"
	  'rose-%[area].png').
  * Do not set the fill element when 'opacity' is set (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=10594).
  * Restore support for decoding the DVI format.
  * Add perl and math lib reference to PerlMagick Makefile (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12840).
  * Fix crash on invalid JPEG XML profile.
  * Export libtool symbols in MagickCore.sym and MagickWand.sym.
  * Support sine and cosine as arguments to the -evaluate option.

2008-12-31  6.4.8-4 Amartyo Banerjee" <amartyo@gmail...>
  * Calculate the kurtosis and skewness of image channels (reference
    http://amartyosscrapbook.blogspot.com/2008/12/formulas-used-to-calculate-kurtosis-and.html).

2008-12-28  6.4.8-4 Rick Mabry  <rick.mabry@anony...>
  * Patch magick/display.c and PerlMagick/ContrastStretchImage() to return the
    same results as the -contrast-stretch option.
  * ContrastStretchImageChannel() no longer interpretted as Contast() by
    MogrifyRegion() in PerlMagick.

2008-12-28  6.4.8-3 Rick Mabry  <rick.mabry@anony...>
  * Reverse argument and option in Throw*InvalidArgumentException()
    macro for proper exception message.
  * Recognize negative geometries for -shear and -annotate (.e.g. 45x-30).
  * Fix Y shear angle for -shear option.

2008-12-26  6.4.8-2 Cristy  <quetzlzacatenango@image...>
  * Use GetImageArtifact() to retrieve -attentuate option value for +noise.
  * Support reading FITS test files (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12799).
  * Replace input.ttf with the public domain Tuffy.ttf font.
  * MagickNewImage() no longer faults when parameters are incorrect (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12817).
  * Allocate strings returned by XGetResourceInstance() (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12818).
  * The -append gravity is relative to the container (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=12821).

2008-12-19  6.4.8-1 Cristy  <quetzlzacatenango@image...>
  * Reference cache rather than acquiring when cloning an image.

2008-12-19  6.4.8-0 Cashish Kulkarni <ashkulz@redif...>
  * Cross-compilation failure using MinGW on Linux for ImageMagick trunk

2008-12-19  6.4.8-0 Cristy  <quetzlzacatenango@image...>
  * Add -interword-spacing option to convert.
  * Initialize the black channel when testing the CMY colorspace (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12685).
  * remove calls to exit() in MagickWand (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=12772).
  * Validate -affine arguments.
  * Accept -attentuate as an option for convert.
  * Properly create RGBA image if colormapped image has transparency.
  * Support X11 geometry like this: +-4+-4;  wierd but X11 supports it.

2008-12-17  6.4.7-10 Chris Madison  <madisonblu@gmail...>
  * Fix off-by-one problem with -shear.
  * Clone pixel cache method when cloning an image.

2008-12-16  6.4.7-9 Anthony  <A.Thyssen@griffith...>
  * Make "-layers Coalesce" work as it should.

2008-12-16  6.4.7-9 Sam Fisher <fisher@image...?
  * Support > 2GB TIFF under Windows.

2008-12-12  6.4.7-8 mootools <help@mooto...>
  * FormatMagickTime() checks to ensure the provided time is valid.

2008-12-12  6.4.7-8 Cristy  <quetzlzacatenango@image...>
  * Add -kerning option to convert.
  * Remove halo effect for the -scale option.

2008-12-11  6.4.7-7 Alan Wright  <alanwright.atex@google...>
  * Fix a 1 byte overrun in Postscript coder.

2008-12-10  6.4.7-6 Cristy  <quetzlzacatenango@image...>
  * Fix small memory leak in ExpandFilenames().

2008-12-09  6.4.7-5 Cristy  <quetzlzacatenango@image...>
  * Fix small memory leak in LoadLocaleList().
  * Fix small memory leak in GetProfilesFromResourceBlock().
  * Don't forget to scale grayscale values when quanum min-is-white is set.

2008-12-08  6.4.7-4 Cristy  <quetzlzacatenango@image...>
  * Include delegate libraries in MagickCore-config script.

2008-12-07  6.4.7-3 Cristy  <quetzlzacatenango@image...>
  * Fix off-by-one error for -chop 0x50%.
  * Performance improvement bilinear interpolation.

2008-12-06  6.4.7-2 Cristy  <quetzlzacatenango@image...>
  * Support absolute paths in the include directive within a configuration
    file.

2008-12-05  6.4.7-1 Chris Madison  <madisonblu@gmail...>
  * Assume Log colorspace if DPX transfer is LogarithmicColorimetric.
  * Another attempt at properly extracting the IPTC profile from a 8BIM
    resource block.

2008-12-04  6.4.7-1 Anthony  <A.Thyssen@griffith...>
  * AppendImage() re-written to respect gravity properly!
    Routine simplified to a single loop for both styles of append

2008-12-03  6.4.6-9 Cristy  <quetzlzacatenango@image...>
  * AppendImage() respects gravity.
  * Protect against circular image list when cropping.
  * The index variable must be long rather than unsigned long for the DCM
	  coder.

2008-12-02  6.4.6-9 Cristy  <quetzlzacatenango@image...>
  * Use ScaleQuantumToMap() to prevent fault in SetGrayscaleImage() when
    quantum depth is 32.

2008-12-01  6.4.6-8 Cristy  <quetzlzacatenango@image...>
  * Global replaced accidently renamed MagickGetImagePixelColor().

2008-11-29  6.4.6-6 Cristy  <quetzlzacatenango@image...>
  * Fixed transient bug in the -white-threshold option.
  * -extent x256+100+100 no longer returns an exception (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=7&t=12583).

2008-11-27  6.4.6-5 Cristy  <quetzlzacatenango@image...>
  * TIFF pad is relative to bits-per-sample (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=12563).

2008-11-27  6.4.6-5 Koshiji Masayuki  <kosiji.masayuki@da.mi...>
  * Support GBR raw image files.

2008-11-26  6.4.6-4 Cristy  <quetzlzacatenango@image...>
  * DPX 10 bit YUV 4:2:2 are now processed properly (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=12443).
  * Default PDF compression to that of the image unless overwritten by
    the -compress option.

2008-11-25  6.4.6-3 Cristy  <quetzlzacatenango@image...>
  * Numerous pixel cache improvements including embeded support for
    OpenMP in a transparent manner.

2008-11-20  6.4.6-2 Cristy  <quetzlzacatenango@image...>
  * Transient bug in encipher / decipher operation (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12540).

2008-11-14  6.4.6-1 Cristy  <quetzlzacatenango@image...>
  * MPC image files working again.
  * coders/wmf.c/lite_font_stringwidth() returns string width (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12528).

2008-11-10  6.4.6-0 Cristy  <quetzlzacatenango@image...>
  * Fix temporary file leak.

2008-11-18  6.4.5-9 Koshiji Masayuki  <kosiji.masayuki@da.mi...>
  * Fix bug for RGBO image @ line, plane and partition interlace.

2008-11-18  6.4.5-9 Chris Madison  <madisonblu@gmail...>
  * Deprecate pixel methods: AcquireImagePixels(), GetImagePixels(), etc.
  * New pixel methods: GetVirtualPixels(), GetAuthenticPixels(), etc.

2008-11-15  6.4.5-7 Alexander E. Patrakov <patrakov@gmail...> 
  * GPS and multivalued EXIF properties support

2008-11-14  6.4.5-6 Manish Aggarwal <manish@circu...>
  * Add TransparentPaintImageChroma() to MagickCore and transparentChroma()
    to Magick++.

2008-11-10  6.4.5-6 Cristy  <quetzlzacatenango@image...>
  * Correct DPX frame position property label (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12440).
  * Textures are no longer painted as the background color.
  * Update both fields of an EXIF resolution.
  * Support query-font-metrics MSL tag.

2008-11-01  6.4.5-4 Cristy  <quetzlzacatenango@image...>
  * Do not set image colorspace for the MSL modulate tag.

2008-11-01  6.4.5-3 Cristy  <quetzlzacatenango@image...>
  * Off by one error when computing affine in DrawAffineImage() (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12391.

2008-10-30  6.4.5-2 Cristy  <quetzlzacatenango@image...>
  * Fixed local adaptive thresholding  when using an offset (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12371.
  * Set SetImagePixels() rather than SyncImagePixelCache() to update
    the pixel cache morphology.

2008-10-26  6.4.5-1 Cristy  <quetzlzacatenango@image...>
  * Set explicit image format for BlobToImage() (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=12340).
  * p_thread_t is an aggregate under MinGW.

2008-10-20  6.4.5-0 Cristy  <quetzlzacatenango@image...>
  * pthread_t can be aggregate so stop treating it like its atomic.
  * default the WPG image size to 1 top avoid "no pixels defined in cache"
    exceptions.

2008-10-17  6.4.4-8 Anthony  <A.Thyssen@griffith...>
  * slight modification of the added "radial-gradient:" image generator
    so the radius goes to an edge rather than the corner, allowing more user
    control based on image size.
  * fix -raise N to mean -raise NxN

2008-10-15  6.4.4-8 Cristy  <quetzlzacatenango@image...>
  * Add support for inline images.

2008-10-10  6.4.4-7 Cristy  <quetzlzacatenango@image...>
  * MinGW supports both Posix threads and Windows critical sections.

2008-10-06  6.4.4-5 Cristy  <quetzlzacatenango@image...>
  * pthread_self() can be an aggregate value.
  * Scale pixel quantum to match PNG tRNS range (i.e. 0-255).

2008-10-06  6.4.4-3 Cristy  <quetzlzacatenango@image...>
  * Set sentinel byte for MVG coder.
  * fx:standard_deviation returns standard deviation now instead of mean.

2008-10-01  6.4.4-1 Florent Monnier  <monnier.florent@gmail...>
  * Support radial gradients in DrawGradientImage().

2008-09-26  6.4.4-1 Cristy  <quetzlzacatenango@image...>
  * Fix memory leak when XMP profile is corrupt.
  * Support filename references (e.g. convert image-%d.jpg[1-5] ...).

2008-09-25  6.4.4-0 Cristy  <quetzlzacatenango@image...>
  * Use -remap rather than -affinity.
  * Don't unregister a module for an image coder signature exception.
  * Don't assume a monochrome image is colormapped.

2008-09-25  6.4.4-0 Anthony <A.Thyssen@griffith...>
  * Attempt to fix three image "composite -displace" while also allowing use
    of seperate X, Y grayscale displacement maps, or a merged X=red Y=green
    (later transparency mask will also be added) as discussed in IM Examples,
    'distortion maps', but for -displace.

2008-09-24  6.4.3-10 Cristy  <quetzlzacatenango@image...>
  * Fix pixel cache race condition.

2008-09-23  6.4.3-10 Cristy  <quetzlzacatenango@image...>
  * Fixed an OTB coder bug (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12119).

2008-09-23  6.4.3-8 Peter Fales <psfales@alcat...>
  * Add NULL terminator to options list to in MontageImageCommand().

2008-09-23  6.4.3-8 Anthony <A.Thyssen@griffith...>
  * Added -layers TrimBounds  which will adjust the offsets and canvas bounds
    to fit the current sequence of layered/animated images. The images
    themselves are not modified only the 'page' meta-data.  As a side-effect
    all offsets will become positive, with a minimal canvas width/height.

2008-09-22  6.4.3-8 Cristy  <quetzlzacatenango@image...>
  * Define _FILE_OFFSET_BITS from MAGICKCORE_FILE_OFFSET_BITS.

2008-09-10  6.4.3-7 Anthony <A.Thyssen@griffith...>
  * String Memory leak from InterpretImageProperties() in "annotate"
    for Command line handling in mogrify.c
  * Allow percent escapes in both -sparse-color and -distort argument strings.
  * Fix -alpha to allow Set, Copy, and Extract from command line
  * Fix -alpha Set so it only clears the alpha when it was previously off
  * Changed 'AllChannels' to be just the 'real' channels (including K).
  * Special handling if  +level-colors is given one color, and no seperator.
  * Fix 'matte' flag in DisposeImages() (for -layer dispose)

2008-09-01  6.4.3-7 Cristy  <quetzlzacatenango@image...>
  * Fix -interpolate / -compose settings.
  * No need to specify -endian for native floating point format.
  * Remove small memory leak when cloning image properties (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11981).
  * The scan delegate requires a device name, not a symbolic link.
  * Report alpha instead of opacity for the TXT image format (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12002).
  * Add channel support to -motion-blur.
  * Set the SVG affine matrix *before* we compute the scale (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12030).
  * Rely on 'omp critical' in the rare case where OpenMP is enabled but
    ImageMagick distribution is built without thread support.
  * Return the correct number of unique colors for colormapped image (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12055).
  * SVG depends on MagickWand for parallel make (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12099).

2008-09-02 6.4.3-7
  * Addition of 'BarrelInverse' Distortion

2008-08-27  6.4.3-6 Cristy  <quetzlzacatenango@image...>
  * Extract / embed namespace for JPEG XMP profiles (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11832).
  * Deprecate -map and replace with -affinity which supports dither methods.
  * Set image depth when -depth is fired.
  * Fix small memory leak in TIFF coder (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11968).

2008-08-24  6.4.3-5 Cristy  <quetzlzacatenango@image...>
  * Parallelize the colorspace transforms.
  * Honor gravity for -extent option (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11944).

2008-08-22  6.4.3-3 Cristy  <quetzlzacatenango@image...>
  * Fixed a memory leak in the TransparentPaintImage() method.

2008-08-20  6.4.3-2 Cristy  <quetzlzacatenango@image...>
  * Treat -compose as a setting.
  * Check for depth == 0 in GetQuantumScale() (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11921).
  * Fix CIN coder scanline length (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11922).

2008-08-20  6.4.3-1 Cristy  <quetzlzacatenango@image...>
  * Add $(MAGICKWAND_LIBS) dependency to the PerlMagick Makefile (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11908).
  * Fix configure script to configure the JBIG delegate library (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11907).
  * Error in indexed PNG output if number of colors <= 16 (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11905).

2008-08-18  6.4.3-0 Cristy  <quetzlzacatenango@image...>
  * Always reinterpret %[fx:] properties.
  * Composite based on the composite image compose operator.

2008-08-14  6.4.2-10 Cristy  <quetzlzacatenango@image...>
  * Add --coder-path and --filter-path options to MagickCore-config to
    support the Magick Coder and Image Filter kits.

2008-08-17  6.4.2-9 Anthony <anthony@griffith...>
  * -sparse-color option completed with inital set of methods.
  * -distort Barrel arguments expanded.

2008-08-14  6.4.2-9 Cristy  <quetzlzacatenango@image...>
  * The -draw option no longer returns an error when for # like .6 (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11879).

2008-08-14  6.4.2-9 Cristy  <quetzlzacatenango@image...>
  * New dithering selection option, -dither Floyd-Steinberg or
    -dither Riemersma.

2008-08-10  6.4.2-8 Anthony <anthony@griffith...>
  * Added new distort "Polar" and "DePolar" due to Forum Discussions

2008-08-07  6.4.2-8 Cristy  <quetzlzacatenango@image...>
  * Change MPEG delegate from mpeg2decode/mpeg2encode to ffmpeg (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11827).
  * Extract embedded XMP and EXIF profiles froma Photoshop resource block.
  * Support -compose option in the compare program.

2008-08-04  6.4.2-7 Cristy  <quetzlzacatenango@image...>
  * Support -fx scientific-notation (e.g. '2.0*3.81469e-06').
  * Substitute DistortImage() with 'AffineProjectionDistortion' for
    the older DrawAffineImage() in AffineTransformImage().
  * Apply Sam Hocevar's patch to replace  Hilbert-Peano curve dithering with
    Floyd Steinberg.
  * Added -virtual-pixel method VerticalTile as a complement to HorizontalTile

2008-08-02  6.4.2-6 Anthony <anthony@griffith...>
  * Added -virtual-pixel method HorizontalTile suitable for generating 360
    degree Arcs and Polar Distorts.

2008-07-31  6.4.2-6 Cristy  <quetzlzacatenango@image...>
  * Patch -fx to properly recognize maxima and minima.
  * Add channel specifier to -fx depth, mean, maxima, minima, and
    standard_deviation (e.g. depth.r).
  * Properly append .magick to the USERPROFILES path (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11806).

2008-07-30  6.4.2-6 Anthony <anthony@griffith...>
  * Added a  "-set option:distort:scale"  which scales the output 'view'
    by the amount given.  This is directly useful for doing 'super-sampled'
    distorts, just set this, the scale the result back to a normal size.

2008-07-27  6.4.2-5 Anthony <anthony@griffith...>
  * Rewrite on coefficent handlig for DistortImages so allow for generation
    by other operators (SparseColor), and addition of verbose output of
    equivelent -fx functions for DistortImages to report of the internal
    coefficents that was calculated, and who they are used.
  * Initial implementation of SparseColor for interpolated gradients from
    sparsely seperated points of color (or posibily other forms of arguments)
  * New distortion Barrel as defined by Helmut Dersch options A,B,C,D
    on his web page  http://www.all-in-one.ee/~dersch/barrel/barrel.html
    And as developed by Fred WeinHaus in his PinBarrel script

2008-07-20  6.4.2-5 Cristy  <quetzlzacatenango@image...>
  * Certain corrupt GIF images no longer hang (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11723).
  * Read more than one image (if they exist) from DJVU image files.
  * Don't set image depth in histogram coder (references
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11752).

2008-07-17  6.4.2-4 Cristy  <quetzlzacatenango@image...>
  * Fixed cache nexus threading problem to avoid spurious assertions when
    calling the DistortImage() method.

2008-07-17  6.4.2-4 Anthony <anthony@griffith...>
  * New distortion  Shepards which provide semi-localized distorts of control
    points within an image, as first developed for IM by Frew Weinhaus in his
    ShapeMorph script.   http://www.fmwconcepts.com/imagemagick/shapemorph/
    It's almost like taffy pulling!

2008-07-12  6.4.2-2 Anthony <anthony@griffith...>
  * Separate coefficient calculation from DistortImages (future development)
  * Perspective and Bilinear Distortions fallback to Affine
    when less than 4 point pairs are provided.
  * Affine Distortion now handles 2 point pairs (SRT of a single line)
    and a simple translation if only a single point pair is provided.
  * Added 'verbose' output of some of the distortion equations generated
  * Initial addition of polynomal distortion (incomplete - not working yet)

2008-06-29  6.4.2-2 Cristy  <quetzlzacatenango@image...>
  * Add log2 and round as -fx operators.
  * Add log and round as -evaluate operator.
  * Add -deskew option to straighten an image.

2008-06-22  6.4.2-1 Cristy  <quetzlzacatenango@image...>
  * Use the source image interpolation method when drawing an affine image.

2008-06-24  6.4.2-1 Anthony <anthony@griffith...>
  * Added new operator  +/-level-colors which will 'level' images based
    on colors to use for the black and white points. This lets to adjust
    the image in terms of mapping the given colors from/to black and white
    respectivally.

2008-06-23  6.4.2-0 Christian Lackas <christian@lacka...>
  * Fix a problem with calling mpeg2encode with parameters (%o/%i) in wrong
    order.

2008-06-22  6.4.2-0 Cristy  <quetzlzacatenango@image...>
  * Refactor additional ImageMagick algorithms for OpenMP support.

2008-06-25  6.4.1-9 Cristy  <quetzlzacatenango@image...>
  * Add pow as an -evaluate operation, using normalized values

2008-06-18  6.4.1-9 Anthony <anthony@griffith...>
  * Added a  LevelizeImageChannels() which is simular to LevelImageChannels()
    Function maps black and white values to the given level values.
    Rather than mapping the given level values to black and white.
    Bacically a 'reverse-level' function, with different input args.
  * Set  +level  or a '!' flag in -level or LevelImage() to call
    the new 'reverse-level' function LevelizeImageChannels().
  * More work on IsMagickColorSimular() to fix relationship between
    transparent-black and opaque-black, which was matched as 'simular'.
    Also attempts to fix 'K' channel handling for CMYK colorspace.
    More work on this to come.

2008-06-25  6.4.1-9 Cristy  <quetzlzacatenango@image...>
  * The TXT format correctly reports alpha channel (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11478).
  * MONOTCHROME1 Dicom images are not longer inverted (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11492).

2008-06-13  6.4.1-8 Anthony <anthony@griffith...>
  * Fixed IsMagickColorSimular() as used by -opauqe and -transparent
    so as to understand that the Hue Channel is cyclic by nature

2008-06-08  6.4.1-8 Cristy  <quetzlzacatenango@image...>
  * The -sketch option is working again (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11454).

2008-06-08  6.4.1-7 Cristy  <quetzlzacatenango@image...>
  * More algorithms refactored to support a threaded cache view.
  * EPS2 output only 1/3 of image when using LZW or rle compress (reference
    http://www.imagemagick.org/discourse-server/viewforum.php?f=3).
  * ISO C++ 1998 does not support 'long long' (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11405).
  * Patch GetMagickMemoryHandlers() to return the properly return the memory
    handler addresses.
  * Generate histogram comment if # unique colors exceed 1024 (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11434).

2008-06-03  6.4.1-6 Marton Bokor  <marton.bokor@gfthu....>
  * Reading EMF files containing non-ascii characters no longer fails for
          UTF8 encoded paths on Windows XP.

2008-06-03  6.4.1-6 Cristy  <quetzlzacatenango@image...>
  * The -colorspace option is an operator, not a setting.

2008-05-31  6.4.1-5 rsnel <rik@snel....>
  * gif.c misreads Gifs in which LZW codes are split across three datablocks.

2008-05-31  6.4.1-4 Matthew Clark <mclark@gorge...>
  * Patches to the JPEG and DCM coders to fix a few problems reading
    certain DCM image types.

2008-05-15  6.4.1-4 Cristy  <quetzlzacatenango@image...>
  * Interpreting the -set option is no longer delayed.
  * Add AcquireCacheViews() and DestroyCachewViews() to the API.
  * Call DrawAffineImage() instead of CompositeImage() (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11288).
  * Throw exception for TIFF compression not support (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11289).
  * The +opaque option now recognizes its required argument (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11298).
  * The -background and -virtual-pixel settings are now applied correctly
    across parenthesis.
  * Only reset the exception signature if the relinquish memory is MagickTrue.
  * Correct recolor equation for computing opacity (referencee
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11346).
  * Set midpoint when scaling JP2 images.
  * Semaphores must be passed by reference when destroyed for reliable thread
    locks.
  * Updated Matlab coder (thanks to Jaroslav Fojtik).

2008-05-13  6.4.1-3 Cristy  <quetzlzacatenango@image...>
  * MagickGetResource(): resources are MagickSizeType not unsigned long.

2008-05-11  6.4.1-2 Cristy  <quetzlzacatenango@image...>
  * Import: properly handle a hierarchy of subwindows under X11.
  * Refactor quantum pixel processor to inprove ease of use and speed.

2008-05-09  6.4.1-2 Leonardo de Paula Rosa Piga <lpiga@terra...>
  * OpenMP patch for sepia-tone effect.

2008-05-08  6.4.1-2 Bruno Cardoso Lopes <bruno.cardoso@gmail...>
  * OpenMP patch for NormalizeImage() & TintImage()

2008-05-06  6.4.1-2 <cristiannomartins@gmail...>
  * OpenMP patch for GetImageChannelDepth().
  * Set depth to 32 when saving MIFF HDRI image files.

2008-05-05  6.4.1-2 <joao.vita@gmail...>
  * OpenMP patch for OilPaintImage Function

2008-05-05  6.4.1-2 Sean Patrick Burke  <seanburk@gmail...>
  * Update IPLab coder (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=11200).

2008-05-02  6.4.1-1 Cristy  <quetzlzacatenango@image...>
  * Return correct result for -fx luminence.
  * Restore missing break so that PGM images remain PGM.
  * Speed up the processing of ASCII PNM files.
  * Return the correct number of MNG images for PingImage().

2008-05-01  6.4.1-0 Cristy  <quetzlzacatenango@image...>
  * Remove C++ style comments from source.
  * Center motion blur kernel.
  * Reenable dithering for -monochrome option.

2008-04-24  6.4.0-11 Cristy  <quetzlzacatenango@image...>
  * For color reduction, use maximum tree depth if image has 1024 or less
    unique colors.
  * Use a uniform convolution filter for motion blur (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11122).
  * Add 'mean' and 'std' symbols to the Fx expression parser.

2008-04-20  6.4.0-10 Chris Madison  <madisonblu@hotma...>
  * Updated to the latest autoconf/automake/libtool scripts.
  * Default to HSL colorspace when modulating (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=11073).
  * The -regard-warnings option properly returns a program status of 1 if and
    only if a warning or error exception is thrown.
  * Report 'no clip path defined' exception for -clip-path option (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11098).

2008-04-16  6.4.0-8 Cristy  <quetzlzacatenango@image...>
  * Distinquish between pre and post processing of image list options.
  * Return MagickTrue if InvokeDynamicImageFilter() does not generate an
    exception (reference
                http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=11065).

2008-04-16  6.4.0-7 Glenn Randers-Pehrson <glennrp@image...>
  * Instead of masking the PNG tRNS values when reducing from 16-bit,
    set image->matte to MagickFalse and emit a warning.  This will produce
    behavior similar to that of libpng-1.2.27 (and libpng-1.2.19 and earlier).

2008-04-12  6.4.0-7 Cristy  <quetzlzacatenango@image...>
  * Fix fault for animate -window root image.gif.
  * Use GetImagePixels() rather than SetImagePixels() when making multiple
    passes and setting image pixels (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=11022).

2008-04-10  6.4.0-6 Cristy  <quetzlzacatenango@image...>
  * Compile error in coders/avi.c when JPEG delegate library is unavailable.

2008-04-09  6.4.0-5 Glenn Randers-Pehrson <glennrp@image...>
  * Mask the PNG tRNS values when reducing from 16-bit, in accordance with
    the PNG specification, instead of scaling them.

2008-04-09  6.4.0-5 Glenn Randers-Pehrson <glennrp@image...>
  * Revised png.c to avoid saving unknown chunk types that will never
    be used later.  This prevents the vulnerability described in
    CVE-2008-1382, with respect to all unknown chunks except vpAg.
    To handle an invalid, zero-length vpAg chunk properly will require
    libpng-1.2.27 or later.

2008-04-04  6.4.0-5 Cristy  <quetzlzacatenango@image...>
  * Use mplayer delegate if ImageMagick does not grok AVI op code.
  * Use proper rounding for the -fx intensity expression.

2008-03-26  6.4.0-4 Cristy  <quetzlzacatenango@image...>
  * Fix +swap option so it no longer throws an assertion.
  * Return correct min/max for grayscale JPEG images (e.g. -format %[min]).

2008-03-26  6.4.0-1 Cristy  <quetzlzacatenango@image...>
 * Rewrote patch so that writing pyramid TIFF images no longer fails if a
   tile size is specified (e.g. ptif:image.tif[128x128]).
 * Malformed use of caption no longer consumes memory (reference
   http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=10914).
 * Don't run Ghostscript twice (reference
   http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=10922).

2008-03-21  6.4.0-0 Cristy  <quetzlzacatenango@image...>
  * SpreadImage() no longer introduces noise into the resulting image (reference
                http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=10892).
  * Properly handle min-is-white TIFF gray scale images.
  * Use CompositeImage() instead of DrawAffineImage() if the affine expansion
    factor is 1.0.

2008-03-20  6.3.9-10 Cristy  <quetzlzacatenango@image...>
  * Writing pyramid TIFF images no longer fails if a tile size is specified
    (e.g. ptif:image.tif[128x128]).
  * Reset page geometry when interactively cropping an image with the display
    program.

2008-03-18  6.3.9-9 Cristy  <quetzlzacatenango@image...>
  * With a single swap argument should swap the image with the *last* image.

2008-03-16  6.3.9-8 Cristy  <quetzlzacatenango@image...>
  * Make sure we don't sync a blob after it has been closed.

2008-03-14  6.3.9-7 Cristy  <quetzlzacatenango@image...>
  * Patch mpeg:encode delegate to properly produce an MPEG image sequence.

2008-03-11  6.3.9-6 Cristy  <quetzlzacatenango@image...>
  * Support both GTK and CAIRO interfaces to RSVG (reference
    ttp://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=10802).
  * Display colormapped PNG images with alpha properly (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=10819).

2008-03-09  6.3.9-5 Cristy  <quetzlzacatenango@image...>
  * Define inline to _magickcore_inline (to satisfy HP's aCC compiler).

2008-03-08  6.3.9-4 Cristy  <quetzlzacatenango@image...>
  * The rsvg delegate library depends on cairo-svg.
  * Account for min-is-white 8-bit gray TIFF images.

2008-02-29  6.3.9-2 Cristy  <quetzlzacatenango@image...>
  * Add support for the Postable Document Archive Format.
  * Add support for Braille images.
  * Add support for DDS images (contributed by Bianca van Schaik).
  * Add GetImageAlphaChannel() method.
  * PSD clipping paths are once again recognized.

2008-02-24  6.3.9-1 Cristy  <quetzlzacatenango@image...>
  * Return the actual image format for HTTP: or FTP: format (reference
        http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=10715).
  * Fix so image.quantize(true) returns error as expected (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=10735).

2008-02-20  6.3.9-0 Cristy  <quetzlzacatenango@image...>
  * Fixed a small memory leak (8 bytes) in TransformImages().
  * Render to Cairo surface rather than a GDK buffer when rendering SVG.
  * Identify now reports both actual and reported image depths (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=10716).

2008-02-17  6.3.8-10 Cristy  <quetzlzacatenango@image...>
  * Speed up converting large PDF/PS images when only selecting a few pages
    (e.g. pdffile.pdf[195-199]).
  * Deprecate HSLTransform() and TransformHSL().

2008-02-16  6.3.8-9 Cristy  <quetzlzacatenango@image...>
  * Fix Magick++-config script to reflect the MagickWand / MagickCore
    dependencies.

2008-02-14  6.3.8-7 Cristy  <quetzlzacatenango@image...>
  * Promote colormapped to truecolor images when enciphering.

2008-02-08  6.3.8-6 Cristy  <quetzlzacatenango@image...>
  * Add EncipherImage() / DecipherImage() methods.
  * Add -encipher / -decipher options to the command-line utilities.

2008-02-03  6.3.8-5 Cristy  <quetzlzacatenango@image...>
  * New Unix/Linux refactoring (should be transparent since changes are
    reflected in Magick-config and ImageMagick.pc pkg-config files):
      /usr/local/include => /usr/local/include/ImageMagick
      libMagick => libMagickCore
      libWand => libMagickWand
      Magick-config (deprecated) => MagickCore-config
      Wand-config (deprecated) => MagickWand-config
      Add Magick++-config, MagickCore.pc, MagickWand.pc, Magick++.pc

2008-01-28  6.3.8-3 Cristy  <quetzlzacatenango@image...>
  * Liquid rescale limits the final size to twice the original size (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=10536).
  * Read EXIF data in TIFF images; writing is pending until we can figure out
    how to use the libtiff delegate library to write EXIF data.

2008-01-24  6.3.8-2 Cristy  <quetzlzacatenango@image...>
  * Add support for liquid rescaling (e.g. -liquid-rescale).
  * Support a ^ meta character in an image geometry (.e.g
    convert 640x480.png -resize 240^ returns a 320x240 result).

2008-01-20  6.3.8-1 Cristy  <quetzlzacatenango@image...>
  * Fix transient bug where "identify -format '%w;%[exif:Model]'" failed to
    return camera model number.

2008-01-14  6.3.8-0 Cristy  <quetzlzacatenango@image...>
  * Monochome EPS3 images are no longer corrupt (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=10422).
  * Eliminate memory corruption with broken PICT image (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=10447).
  * Return a Grayscale colorspace for grayscale DPX image (previously
    returned Log colorspace).
  * Fix -g option for PCL6 support (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=10462).

2008-01-08  6.3.7-10 Cristy  <quetzlzacatenango@image...>
  * Only read ICON alpha mask if BPP is <= 16.
  * Add support for +opaque and +transparent (requested by Anthony).
  * Throw an exception *before* we call wmf_api_destroy() (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=10420).

2008-01-01  6.3.7-9 Cristy  <quetzlzacatenango@image...>
  * Use explicit format specifier to render transparent Adobe Illustrator
    files (i.e. convert ai:image.ai image.png).
  * Set RSVG base URI (patch provided by tsdineen).

2007-12-20  6.3.7-7 Cristy  <quetzlzacatenango@image...>
  * `Magick-config --version` returns Q16 instead of
    Q@MAGICKCORE_QUANTUM_DEPTH@.
  * Permit commas in numbers in certain locales (e.g. german +100,000).

2007-12-13  6.3.7-5 Cristy  <quetzlzacatenango@image...>
  * Added an exception reason to BlobToImage() in the event an image has no
    magic number and neither the image magick or filename is set.
  * Do not pass PhotoYCC data thru gamma-corrected lookup-table.
  * Fix bug in GetEXIFProperty() (reference
    https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=10300).

2007-12-12  6.3.7-4 Cristy  <quetzlzacatenango@image...>
  * Adding comments to your image is now possible with the display program.

2007-12-09  6.3.7-3 Anthony <anthony@griffith...>
  * Adjusted -clut multiplyer for correct handling of
    "-interpolation Integer" in color lookup.

2007-12-01  6.3.7-3 Cristy  <quetzlzacatenango@image...>
  * Fix 'insufficient image data' for DCM format (reference
    https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=10227).
  * Force a colormapped image if Palm bits-per-pixel < 16.
  * Fix multiple problems with Palm Data Base reader (patch from
    1tms@gmx.d...).
  * Do not exit after first image with the display --immutable option.
  * Update autoconf/automake/libtool configuration files.
  * Add support for resource limit units (e.g. -limit memory 16mb).
  * Return original image if gaussian blur sigma is 0.0.
  * Colormapped multi-image PDF's are no longer corrupt (reference
    https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=10258).

2007-11-27  6.3.7-2 Anthony <anthony@griffith...>
  * Finalisation of new resize filters, "Lagrange" self-windowing filter
    now adjusts automatically with different support window size.
  * Added "Bohman" (another 2'rd order cosine function) and "Bartlett"
    (triangluar) resize windowing filters.
  * Adjusted -clut to use a grayscale image (with no alpha) to select colors
    from the Lookup Table image.

2007-11-26  6.3.7-2 Cristy  <quetzlzacatenango@image...>
  * Not all DCM tags were being saved as image attributes (patch provided by
    jcupitt@gmail...).
  * Normalize pixel values when quantum format is floating-point.
  * Initialize the pixel sum to zero when averaging image pixels.

2007-11-23  6.3.7-1 Anthony <anthony@griffith...>
  * Bug fix in height calculation for -layers merge operation

2007-11-02  6.3.7-0 Cristy  <quetzlzacatenango@image...>
  * Add support for SCT grayscale images.
  * Fixed transparancy bug for the ICO image format.
  * Fixed small memory leak in the caption and label coders.
  * Fixed -threshold option to return all white for -threshold 0 (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=10126).

2007-11-06  6.3.6-10 Chris Madison  <madisonblu@hotma...>
  * Corrected CGM delegate command in config/delegate.xml.

2007-11-05  6.3.6-9 Chris Madison  <madisonblu@hotma...>
  * Reclassified X server open error from fatal to non-fatal.
  * New SetImageAlphaChannel() method to activate, deactivate, reset, or
    set the image alpha channel.
  * Patch for Scanalytics IPLab image format for non 8-bit images
    (contributed by Sean Burke).

2007-11-04  6.3.6-8 Chris Madison  <madisonblu@hotma...>
  * Remove ctrl-M characters on in various source files.
  * Fix signature for Magick++ averageImages() regression tests for HDRI.
  * Only invoke PerlMagick x11 regression test if DISPLAY variable is set.

2007-11-03  6.3.6-7 Chris Madison  <madisonblu@hotma...>
  * MAGICK_ERX_SRCS should be MAGICK_EXR_SRCS in coders/Makefile.am.

2007-11-02  6.3.6-6 Cristy  <quetzlzacatenango@image...>
  * Upgrade to FPX version libfpx-1.2.0.14 (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=10041).
  * Modules are searched first in the directories specified by the environment
    variables, and then -- if the desired module is not found -- in the
    compiled-in path.  (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=10039).

2007-11-01  6.3.6-5 Cristy  <quetzlzacatenango@image...>
  * Update FPX regression test reference images.
  * Fixed Magick++ compile error for Sun Studio 10 compiler.

2007-10-25  6.3.6-4 Cristy  <quetzlzacatenango@image...>
  * The -equalize option now respects the -channel option.

2007-10-23  6.3.6-4 Anthony <anthony@griffith...>
  * Additional Filters:  Welsh, Parzen, Lagrangian
  * Addition of Cubic filter B,C controls
  * 'verbose' filter plotting output using  -define "filter:verbose"

2007-10-20  6.3.6-3 Anthony <anthony@griffith...>
  * Further expandsion and handling of filters with expert options.
    -filter selects from a table of standard filter settings, while
    expert options allow complete selection of filter, windowing, support
    and blurring options.  Includes automatic switch from Sinc to Bessel
    for operators using 2 dimentional cylindrical filter, rather than
    two pass 1 dimentional orthogonal filters.

2007-10-14  6.3.6-3 Cristy  <quetzlzacatenango@image...>
  * Obsolete -support (set filter blur factor)
  * Expandsion to add -set/define filter options

2007-10-12  6.3.6-2 Anthony <anthony@griffith...>
  * Least Squares coordinate handling added for -distort methods Affine,
    Perspective, Bilinear.   This allows for more than the minimal number of
    coordinates to be used to 'fit' a distortion function to an image.
    This addition will allow the use of image registration to generate
    panarama overviews and better geographical coordinate correction.
  * Cosolidated the simular methods FlattenImage() and MosaicImage()
    into a new layers function MergeImageLayers() method, adding 'flatten'
    and 'mosaic' layer methods.
  * Addition of another simular layers method 'merge' which 'unlocks' the
    normal flatten/mosaic layer merger from the origin, The resulting image
    will have a virtual canvas of minimal size with an offset. Also images
    with negative offsets will not be clipped by the 'merge' form of the
    command.  This was created for better layering of distorted images, such
    as panarama overlays.
  * Bug fix in handling transparency for EWA resampling.
  * Access to Resize Filter Functions from resize.c (for resample.c)
    with posible future filter sources... Acquire/Destory/Call ResizeFilter()
  * All resize filters added to resampling, but filter handling is incomplete.

2007-10-05  6.3.6-2 Cristy  <quetzlzacatenango@image...>
  * The box filter no longer produces a black grid when resizing an image
    under Mac OS X.
  * Respect cropbox for PDF with a subimage specification (e.g.
        image.pdf[1-3]).
  * Detect proper PDF bounding box when offsets are negative.

2007-10-02  6.3.6-1 Cristy  <quetzlzacatenango@image...>
  * Speed up the Fx interpreter.
  * Use ULL not ui64 for MinGW 64-bit constants.
  * Call SyncCacheView() instead of SyncImagePixels() in WaveImage().
  * Close all references to a pixel cache on disk before removing the temporary
          file as required under Windows.

2007-09-29  6.3.6-0 Anthony <anthony@griffith...>
  * Added Scaling 'derivitives' to -distort Arc, so image arcing is now
    sharp and clear as you approach the center of the distort.
  * Added  " -set option:distort:viewport 'geometry' " special option
    that can be used to override the output image size and offset.
  * Fixed experimental use of -filter and -support in Resampling (more later).
  * Changed order for coordinate arguments in -distort (for later leastsq
    multiple coordinate distortion function fitting)

2007-09-22  6.3.6-0 Cristy  <quetzlzacatenango@image...>
  * Check the API version and quantum depth before loading a coder module or
          image filter (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=9780).
  * Add exception to the image filter signature.
  * Get the execution path under Mac OS X.
  * TIFFTAG_STRIPBYTECOUNTS requires a uint32 pointer (magick/compress.c).
  * Fixed memory leak in CloneString() (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=9763).
  * Set S_IRUSR | S_IWUSR | S_IRGRP mode when writing a file in
    CopyDelegateFile().

2007-09-18  6.3.5-9 Anthony <anthony@griffith...>
  * Bug fix for +distort in Perspective, also effected PerspectiveProjection

2007-09-17  6.3.5-10 Cristy  <quetzlzacatenango@image...>
  * Replace all InterpolatePixelColor() calls to use the ResamplePixelColor()
    method instead.
  * Map the display program pan icon window for each oversized image.
  * The ufraw delegate does not like quotes around the output filename.
  * Adjust the sensitivity of a few PerlMagick tests to pass the validation on
    a 64-bit FreeBSD system.
  * The -level option now works properly for colormapped images.
  * Allow Extrapolated blending of images using -blend
       http://netpbm.sourceforge.net/doc/extendedopacity.html

2007-09-12  6.3.5-9 Anthony <anthony@griffith...>
  * Major Addition,  Area Resampling Functions, (scaled interpolation)
    for pixel lookup in Distortion functions.  This improves the look in
    areas of minification enormousally, especially in situations of infinite
    tiling and horizon views.  All virtual pixel methods have been handled
    to minimise computation time involved with area resampling.  To use the
    new function distortions need to be able to determine scaling vectors
    (distortion function derivitives) for correct working.  All
    -distort methods, except Arc, uses scaled area resampling.
  * Improvements to perspective distort method, to include the correct
    differentation between the 'ground' on which the image lies, and the
    'sky', the color of which can be set using the -mattecolor setting
    (as the distortion invalid pixel color). Background color is retains
    for surrounding ground areas. The horizon is also correct anti-aliased
    and transparent colors are also allowed, allowing you to add backdrops
    of gradients and patterns.

2007-09-04  6.3.5-9 Cristy  <quetzlzacatenango@image...>
  * Read/Write Scanalytics IPLab image format (contributed by Sean Burke).
  * Patched ReadBlobString() to fix a off-by-one vulnerability (alert from
    iDefense).
  * Patched ReadDIBImage() to fix a sign extension vulnerability (alert from
    iDefense).
  * Patched AllocateImageColormap() to fix an integer overflow vulnerability
    (alert from iDefense).
  * Patched ReadDCMImage() to fix an integer overflow vulnerability
    (alert from iDefense).
  * Patched ReadDIBImage() to fix an integer overflow vulnerability
    (alert from iDefense).
  * Patched ReadXBMImage() to fix an integer overflow vulnerability
    (alert from iDefense).
  * Patched ReadDCMImage() to fix an denial of service vulnerability
    (alert from iDefense).
  * Patched ReadXCFImage() to fix an denial of service vulnerability
    (alert from iDefense).
  * If image size changes, don't trust DPX orientation attributes.

2007-09-04  6.3.5-9 Gozer404
  * Add French to the messaging system (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=9601).
  * Add -fopenmp to MAGICK_PCFLAGS (reference
   http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=9608).

2007-08-14  6.3.5-7 Cristy  <quetzlzacatenango@image...>
  * Add -alpha {activate,deactivate,reset} option to activate, deactivate, or
    reset the alpha channel.
  * Render proper image labels for VID coder.
  * Resolved a conflict for the -list option.  Use -list font to list
          ImageMagick fonts and -list type to list image types.
  * Catch any errors returned by pthread_mutex_init() (problem report
    from devman@gmx-t...).
  * TransformHSL() returns a proper hue component.
  * Added -clut option and the ClutImage() method.
  * Fix glyph memory leak in AnnotateImage (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=9523).
  * Rename analyze.c to Analyze.c (reference
    ttp://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=9538).

2007-08-07  6.3.5-6 Anthony  <anthony@griffith...>
  * Enabled use of +distort to auto resize destination image to 'bestfit'
    the distorted input image.  This also enabled the use of virtual canvas
    offsets in source and destination images for most distortion methods.

2007-08-05  6.3.5-6 Cristy  <quetzlzacatenango@image...>
  * Remove atexit in Magick++ code to avoid possible client crash (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=9270).

2007-08-01  6.3.5-5 Cristy  <quetzlzacatenango@image...>
  * Read/Write Scanalytics IPLab image format (contributed by Sean Burke).

2007-07-30  6.3.5-5 Anthony  <anthony@griffith...>
  * Added -distort arc.  This update also allows the destination image
    size and offset to be set according to the specific distortion being
    applied.

2007-07-29  6.3.5-5 Cristy  <quetzlzacatenango@image...>
  * Set the -poloroid border color with the -bordercolor option.

2007-07-25  6.3.5-4 Cristy  <quetzlzacatenango@image...>
  * Remove extranous break statement so -type option properly sets the
    image_info->type member (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=9261).

2007-07-21  6.3.5-4 Anthony  <anthony@griffith...>
  * Allow the use of optional arguments in -distort SRT

2007-06-29  6.3.5-0 Anthony  <anthony@griffith...>
  * Initial addition of three Affine Distortions to -distort with the affine
    mapping defined by the use of;  an Affine Matrix, Coordinates of Triangles,
    or separate Scale-Rotate-Translate actions.

2007-06-18  6.3.5-0 Cristy  <quetzlzacatenango@image...>
  * Fix X11 font ascender.
  * Add -distort option.
  * Add random noise option (e.g. +noise random).
  * Many internal algorithms are now threaded to take advantage of speed-ups
    offered by the new dual and quad-core processor technologies.
    and quad-core processor technology.
  * Tiff images in the LAB colorspace are no longer identified as RGB
    (reference http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=9015).
  * Update image color_profile and iptc_profile members in the JPEG coder
    (reference http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=9063);

2007-06-13  6.3.4-10 Cristy  <quetzlzacatenango@image...>
  * Fix composite mask bug (reference
    http://www.imagemagick.org/Usage/bugs/composite_mask/).
  * Speed up GetPixelOpacity() method (patch from seth@price...).
  * Set icon image width/height before allocating the image colormap.
  * Remove Photoshop string segment from JPEG profile (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=9006).

2007-06-11  6.3.4-9 Cristy  <quetzlzacatenango@image...>
  * Converting a jpg to pdf is creating an empty pdf object (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=8954).
  * Respect the '-set type:hinting off option' (bug report from Richard
    Jones).
  * WritePSDImage vulnerable to exploitable heap corruption (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=8967).

2007-06-09  6.3.4-8 Cristy  <quetzlzacatenango@image...>
  * SetMagickRegistry() post-increment the value 'id' (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=8944).

2007-06-02  6.3.4-6 Cristy  <quetzlzacatenango@image...>
  * Read/write 10 & 12-bit packed DPX images.
  * Reduce stack requirements for messaging system.
  * Small memory leak for raw profiles in the PNG coder.

2007-06-01  6.3.4-5 Glenn <glennrp@image...>
  * Added GIF, JPEG, and PNG interlace types.  For backward compatibility,
    you can continue to use "-interlace Plane" to request these.

2007-04-30  6.3.4-0 Anthony  <anthony@griffith...>
  * Fixed minor bug in the 'curl' for Polaroid of very non-square images.

2007-06-01  6.3.4-5 Cristy  <quetzlzacatenango@image...>
  * Set min-is-white for Group4-compressed PDF.
  * Add PaintFloodfillImage() method.

2007-05-30  6.3.4-4 Cristy  <quetzlzacatenango@image...>
  * Add MEPP metric to compare program.  Returns the mean error per pixel
    along with the normalize mean and maximum error.
  * Attach an XMP profile to an image (e.g.
    convert input.tif -profile xmp:metadata.xmp output.tif).

2007-05-22  6.3.4-3 Cristy  <quetzlzacatenango@image...>
  * Fixed mogrify conversions with -format and -path (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=9127).

2007-05-15  6.3.4-2 Cristy  <quetzlzacatenango@image...>
  * SVG style element was not always parsed properly.
  * Do not dither when the number of unique colors is already less than the
    maximum.
  * Return normalized PAE metric (compare utility).

2007-05-03  6.3.4-1 Cristy  <quetzlzacatenango@image...>
  * Add support for PFM images.
  * Check for corrupt EXIF image profiles.
  * Writing JPEG YCbCr TIFF images no longer faults (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=8896).

2007-04-30  6.3.4-0 Anthony  <anthony@griffith...>
  * Fixed minor bug for crop missed images and 'background' GIF disposal.

2007-04-28  6.3.4-0 Glenn  <glennrp@image...>
  * Added profile support to the GIF decoder/encoder.  They are stored
    as GIF Application Extensions.  Known extensions include existing ICCRGB1
    (for ICC profiles) and new MGKIPTC0 and MGK8BIM0 (for IPTC and 8BIM
    profiles).  Unknown extensions found in GIF files are read as gifappNNN.

2007-04-28  6.3.4-0 Anthony  <anthony@griffith...>
  * Invert Opacity change for user defined ordered dither threshold maps,
    so that 'off' map is transparent, and 'on' is opaque.

2007-04-24  6.3.4-0 Anthony  <anthony@griffith...>
  * Added an initial Coalesce Images, and a final +map local colortable
    optimization to the -layers Optimize method, for a simple to use
    GIF optimization operation.  (more work to come)

2007-04-22  6.3.4-0 Cristy  <quetzlzacatenango@image...>
  * Properly set the virtual canvas of a multi-frame GIF image sequence.
  * Add AcquireOneVirtualPixel() method.
  * Set Log colorspace properly when writing DPX images.
  * Add -tile-offset option.
  * Add support for the EXR image format.
  * Improve support for DPX images.
  * Add --enable-hdri option to the configure script.
  * Add support for high dynamic-range images (HDRI).

2007-04-20  6.3.3-9 Peter Hull  <peterhull90@gmail...>
  * Improve support for writing multiple image icons.

2007-04-18  6.3.3-9 Anthony  <anthony@griffith...>
  * Separated -layers Optimize from -layers OptimizeFrame to allow
    the former expansion into a general (multiple method) optimizer
    of GIF animations
  * merged -layers OptimizeTransparency into -layers Optimize method

2007-04-12  6.3.3-8 Chris Madison  <madisonblu@hotma...>
  * Fix fault whem comparing a colormapped image with a non-colormapped one.
  * Fix race condition when spawning delegate programs.
  * TIFF JPEG now respects the -quality comptression setting.
  * The -fx option now properly groks the logical and operator.
  * DPX tilestamp property should be timestamp.

2007-04-13  6.3.3-7 Anthony  <anthony@griffith...>
  * Added GravityAdjustGeometry() to "geometry.c" to adjust geometry settings
    according to given gravity and canvas area it applies to. This is for
    code simplification thoughout MagickCore.

2007-04-09  6.3.3-6 Anthony  <anthony@griffith...>
  * Fixed CoalesceImages() to reset virtual canvas info on second and later
    frames.   Other animation handlers may also need to reset virtual canvas
    sizes to match the first frame, as well.

2007-04-06  6.3.3-6 Anthony  <anthony@griffith...>
  * Addition of a CompositeImages() "layer.c" function to compose two
    separate image lists together (with a virtual canvas offset) in three
    different ways, depending on the size of the lists.
  * A 'hack' for command line use (the two lists separates by the special
    "NULL" image, which is junked) has also been added. Specifically...
    "-layers Composite".

2007-04-04  6.3.3-6 Anthony  <anthony@griffith...>
  * Add -layers RemoveDups method to remove duplicate sequential images in
    coalesced animations.
  * Add -layers RemoveZero method to remove images with a zero time delay
    (with no action and a warning is all images have zero time delay)

2007-04-01  6.3.3-6 Cristy  <quetzlzacatenango@image...>
  * Permit generic profiles (e.g. -profile name:profile).

2007-03-31  6.3.3-5 Cristy  <quetzlzacatenango@image...>
  * Fixed DCM and XWD buffer overflow vulnerabilities (reference
    http://labs.idefense.com/intelligence/vulnerabilities/display.php?id=496).

2007-03-28  6.3.3-4 Anthony  <anthony@griffith...>
  * Code duplication, simplification, and possible logic faults in "list.c".
  * Added new Composition method, 'ChangeMask' to return pixels
    that have changed or will cause a color change in overlays
  * Used 'ChangeMask' to implement the "-layers" method
    "OptimizeTransparency" to improve the compressibility of
    frame optimized GIF animations. See IM Examples...
      http://www.imagemagick.org/Usage/anim_opt/#opt_trans

2007-03-19  6.3.3-4 Cristy  <quetzlzacatenango@image...>
  * Fixed two memory leaks in wand/magick-image.c and magick/stream.c and made
    some minor changes to the GIF coder to make reading and pinging images
    faster (patch provided by mstemm@cloud...).

2007-03-19  6.3.3-3 Cristy  <quetzlzacatenango@image...>
  * Patch RotateImage() to properly rotate CMYK images.
  * Patch the XWD coder to prevent heap overflow vulnerability (vulnerability
    report from idefense.com [IDEF2108] [IDEF2221] [IDEF2226]).

2007-03-19  6.3.3-3 Anthony <Anthony@griffith...>
  * Fixed bug for GIF Optimization for images without a matte channel.
  * Improved image handling for "-layers" method "Dispose".

2007-03-11  6.3.3-2 Cristy  <quetzlzacatenango@image...>
  * Improve configure script to better support Ghostscript under Mac OSX (
    reference http://www.imagemagick.org/discourse-server/viewtopic.php?t=8557).
  * Force a virtual pixel method of Tile for GetFillColor() and
    GetStrokeColor().
  * Add -reverse option to reverse the image list.

2007-03-08  6.3.3-1 Cristy  <quetzlzacatenango@image...>
  * Support versions 2.1.0 and above (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=8620).
  * Support SVG rotation about a point (e.g. rotate(45 75 75)).
  * Fix fault in DCM coder (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=8618).
  * Check for a NULL parser in SVGReference in coders/svg.c (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=8609).
  * Add --disable-deprecated configure script option.
  * Composite mask now works properly with transparent images.

2007-03-04  Daniel Kobras <kobras@debia...>
  * Fixed additional data-driven faults (reference
    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=412945).
  * Allocate proper scanline length to prevent a PCX overflow.

2007-03-03  6.3.3-1 Cristy  <quetzlzacatenango@image...>
  * Patch ImageMagick to permit referenced labels: -set option:mylabel
    "color = %[pixel:u[0].p{12,26}]" label:'%[mylabel]'

2007-02-24  6.3.3-0 Cristy  <quetzlzacatenango@image...>
  * Escape indirect labels and comments (e.g. -label @file).
  * Added -format %C to return the image compression type.
  * Do not report channel statistics if -ping -format is specified with the
    identify program.
  * Add ResetImagePage() to reset the image page canvas and position.
  * Upgrade to LCMS 1.16
  * Configure Ghostscript for library or framework (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=8557).
  * Add -taint option to convert/mogrify to mark image as ineligible for
  * Fixed various data-driven faults (reference
    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=412945).  The corrupt
    JP2 image faults but its failing in the JP2 jas_image_decode() method,
    not MagickCore.  The corrupt XWD image faults but its failing in
    the X11 XGetPixel() method, not MagickCore.

2007-02-20  6.3.2-8 Cristy  <quetzlzacatenango@image...>
  * Use -define quantum:polarity=min-is-black or -define
    quantum:polarity=min-is-white to toggle the photometric interpretation for
    a bilevel TIFF image.

2007-02-17  6.3.2-8 Cristy  <quetzlzacatenango@image...>
  * Don't interpret embedded format characters when reading comments/labels
    from a file.
  * Reading an image from stdin stopped working.

2007-02-17  6.3.2-7 Cristy  <quetzlzacatenango@image...>
  * PerlMagick Label() no longer faults.
  * Fix double-free when using the display/animate -geometry option.
  * Add GetStringInfoLength() and GetStringInfoDatum(); deprecate
    profile->length and profile->datum.

2007-02-16  6.3.2-6 Cristy  <quetzlzacatenango@image...>
  * Fix file leak in InjectImageBlob().
  * Do not reinterpret image properties (e.g. -comment %%w).

2007-02-14  6.3.2-5 Cristy  <quetzlzacatenango@image...>
  * Don't over-allocate file buffers.

2007-02-12  6.3.2-5 Cristy  <quetzlzacatenango@image...>
  * Format strings in the POSIX locale.
  * Make font metrics invarient to the strokewidth.

2007-02-10  6.3.2-4 Albert Chin  <china@thewr...>
  * Patch to fix configure.ac typo.

2007-02-08  6.3.2-4 Cristy  <quetzlzacatenango@image...>
  * Permit ImageMagick to run as a service under Windows.
  * Remove duplicate EXIF properties.
  * Support strokewidth option for the caption format.
  * Don't use Ghostscript for rendering fonts if Freetype is available.

2007-02-02  6.3.2-3 Cristy  <quetzlzacatenango@image...>
  * Added thumbnail format to write EXIF thumbnails.
  * Move ReadByteImage() out of Min() macro of ReadPALMImage().
  * Move EXIF properties to the EXIF namespace (e.g. exif:XResolution).

2007-01-26  6.3.2-2 Cristy  <quetzlzacatenango@image...>
  * Add interpolate and background options to PerlMagick's AffineTransform().
  * Revert to Postscript rendering if Freetype delegate library is not
    available.

2007-01-20  6.3.2-1 Cristy  <quetzlzacatenango@image...>
  * Accept Fx expressions from a file with -fx @filename.
  * Enhance -fill and -stroke to accept image filenames as patterns.

2007-01-16  6.3.2-0 Cristy  <quetzlzacatenango@image...>
  * Save grayscale images as JPEG-compressed grayscale when writing in the TIFF
    format.
  * Update EXIF resolution fields when image density changes.

2007-01-07  6.3.1-7 Cristy  <quetzlzacatenango@image...>
  * The -polaroid option now respects -gravity.
  * Deprecate Get/SetImageAttribute().  Recommend Get/SetImageProperty()
    instead.
  * Any form of "-crop" with a percentage, implies an offset for the crop.
  * Fixed percent option for -border (e.g. -border 10%x0%).
  * Add -path option to the mogrify program to specify where to write the
    images.

2007-01-06  6.3.1-6 Cristy  <quetzlzacatenango@image...>
  * Fix the -auto-orient to work with an image sequence (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?t=8100).
  * Add -polaroid option to simulate a Polaroid picture.
  * Eliminate double-free bug in GradientImage().
  * Set AppendImage() matte channel only when image has matte attribute set.
  * The -crop with negative offsets do not modify the virtual canvas.
  * Caption: Given both the width and height ("-size") of the area to fill,
    adjust the fonts "-pointsize" until the text just filles the whole space
    without overflowing.
  * Generate proper Windows icon image files (patch provided by
    Robert M. Jansen).
