2010-12-17  6.6.6-6 Chris Madison  <madisonblu@gmail...>
  * Add LZMA compression support to ImageMagick.

2010-12-17  6.6.6-6 Glenn Randers-Pehrson <glennrp@image...>
  * Eliminated a redundant quantization step in the PNG encoder.
  * Untangled a confusing but apparently harmless improper loop nesting
    in the PNG encoder.
  * Eliminated redundant "IsGray()" tests from the PNG encoder.

2010-12-14  6.6.6-6 Cristy  <quetzlzacatenango@image...>
  * -format "%[fx:u.p{5,5}]" no longer reports parse exception (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17678).

2010-12-10  6.6.6-5 Glenn Randers-Pehrson <glennrp@image...>
  * Make the PNG encoder always rebuild the palette, to avoid losing
    transparency when it is out of sync with the pixel data (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17655).
  * Eliminated CompressColormapTransFirst() since the palette is already
    compressed and sorted by opacty now when it's recreated.

2010-12-10  6.6.6-5 Cristy  <quetzlzacatenango@image...>
  * Account for virtual canvas for the -flip / -flop options (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=17626).
  * Also for -transpose and transverse options
  * Support -metric fuzz option.

2010-12-09  6.6.6-4 Anthony Thyssen <A.Thyssen@griffith...>
  * Replace IsMagickColorSimilar() which provides the Fuzz Factor threshold
    function.  Note function does not calculate 'distance' in total but
    short-circuits when threshold is reached for faster processing.
  * Ordered Dithered handling of Alpha channel was incorrect - fixing
    Bug was introduced v6.6.5-6

2010-12-03  6.6.6-3 Glenn Randers-Pehrson <glennrp@image...>
  * Fixed two more cases where the PNG encoder lost transparency (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17516).

2010-12-01  6.6.6-2 Cristy  <quetzlzacatenango@image...>
  * Affine multiplication reversed when translating (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17570).

2010-11-26  6.6.6-2 Glenn Randers-Pehrson <glennrp@image...>
  * Revised the "c7x7b" and "c7x7w" ordered-dither maps to be complementary
    to each other.

2010-11-27  6.6.6-1 Cristy  <quetzlzacatenango@image...>
  * Add support for -evaluate-sequence median.

2010-11-26  6.6.6-0 Glenn Randers-Pehrson <glennrp@image...>
  * Fixed two more cases where the PNG encoder lost transparency (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17516).

2010-11-23  6.6.6-0 Cristy  <quetzlzacatenango@image...>
  * The policy.xml sets not-to-exceed resource values (e.g. policy memory limit
    1GB, -limit 2GB exceeds policy maximum so memory limit is 1GB).
  * Support NCC (normalized cross correlation) compare metric.

2010-11-21  6.6.5-10 Cristy  <quetzlzacatenango@image...>
  * Fix png coder compile error when HDRI is enabled.

2010-11-17  6.6.5-9 Glenn Randers-Pehrson <glennrp@image...>
  * Many of the problems with the PNG encoder have been fixed (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16490).
  * The "-type Optimize" option is now deprecated.  If present, it is treated
    by the PNG encoder the same as if the type were undefined.  Optimization
    is now always performed.  No other formats used the "type Optimize" option.
  * Merged redundant code into LosslessReduceDepth() function in the PNG codec.

2010-11-14  6.6.5-9 Cristy  <quetzlzacatenango@image...>
  * The splice option no longer throws spurious "pixels are not authentic"
    exceptions.
  * Thread the -adaptive-resize option.
  * Set XBM coder height to height not width.

2010-11-14  6.6.5-9 Nicolas Robidoux <nicolas.robidoux@gmai...>
  * Lanczos2Sharp blur tweaked. New blur = 0.9549963639785485.

2010-11-13  6.6.5-9 Nicolas Robidoux <nicolas.robidoux@gmai...>
  * LanczosSharp blur tweaked to minimize worst case deviation from "perfect
    preservation of images which only vary horizontally (or vertically)" under
    no-op. New blur = 0.9812505644269356.

2010-11-08  6.6.5-8 Nicolas Robidoux <nicolas.robidoux@gmai...>
  * Missing logical operator in tiff.c.

2010-11-08  6.6.5-8 Cristy  <quetzlzacatenango@image...>
  * Only save TIFF image with 1-bit depth if there is no alpha channel.
  * Abandon PSD composite if layer is available.
  * %[fx:mean] is the mean of the default channels (all but opacity) (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=17432).

2010-10-29  6.6.5-6 Glenn Randers-Pehrson <glennrp@image...>
  * Added 5x5, 6x6, and 7x7 ordered-dither level maps.

2010-10-30  6.6.5-5 Cristy  <quetzlzacatenango@image...>
  * Do not read configure files in the current directory for the "installed"
    version of ImageMagick.
  * Allow numeric characters in the XPM basename (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17385).

2010-10-29  6.6.5-4 Glenn Randers-Pehrson <glennrp@image...>
  * Revised PNG palette optimization
  * Added some debug logging in coders/png.c.

2010-10-28  6.6.5-3 Nicolas Robidoux <nicolas.robidoux@gmai...>
  * More precise blur values for Lanczos2Sharp and LanczosSharp.
  * Added location of first Mitchell crossing (=8/7) to the filters data
    structure.

2010-10-28  6.6.5-2 Anthony Thyssen <A.Thyssen@griffith...>
  * Added Lanczos2D* filters now named Lanczos2*
  * Reorganization of AcquireFilter() to make it work better

2010-10-25  6.6.5-1 Nicolas Robidoux <nicolas.robidoux@gmai...>
  * Clearer EWA filters (LanczosSharp etc) comments.

2010-10-25  6.6.5-1 Anthony Thyssen <A.Thyssen@griffith...>
  * Added LanczosSharp  (3-lobe Lanczos with sharpening)
  * Filter sharpening factors are also always applied regardless of usage.

2010-10-24  6.6.5-1 Nicolas Robidoux <nicolas.robidoux@gmai...>
  * CubicBC filter formulas simplified by constant folding. In
    particular, P1 coefficient (always zero) removed from coeff.

2010-10-22  6.6.5-1 Nicolas Robidoux <nicolas.robidoux@gmai...>
  * Revert the Robidoux filter to a Keys cubic with C=(108 sqrt 2-29)/398
    (as already specified in the documentation).

2010-10-14  6.6.5-1 Cristy  <quetzlzacatenango@image...>
  * Ignore PS bounding box offsets if -page is set.
  * Use #pragma omp master for dumping single threaded debugging information
    (single caused a fault).
  * Add support for -evaluate exp.

2010-10-12  6.6.5-0 Anthony Thyssen <A.Thyssen@griffith...>
  * Added "filter:sigma" expert setting defining the 'sigma' for the Gaussian
    filter only.  This is similar in action to 'blur' but only for Gaussians,
    and does not modify the filters support, allowing you to set a very small
    sigma, without the function 'missing' all pixels.
    (This will allow future adjustment of Gaussians for variable blur mapping)

2010-10-10  6.6.5-0 Cristy  <quetzlzacatenango@image...>
  * Patch for  DrawableRotation() and DrawableTranslation() (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17246).
  * The webp format requires the webpconv delegate program (experimental).

2010-10-05  6.6.5-0 Anthony Thyssen <A.Thyssen@griffith...>
  * Replaced "Robidoux" with Cubic 'Keys' filter that is near equivelent to
    the previous sharped "Lanczos2D" filter. (C=0.31089212245300069)
    This also is very similer to a Mitchell filter but specifically designed
    for EWA use and is the new default filter for Distorting Images.
  * Original sharpened Lanczos2D filter now called "Lanczos2Dsharp"

2010-10-08  6.6.4-10 Jerry Gay  <jerry.gay@gmail..>
  * Autodetect file type support in Makefile.PL to prevent test failures

2010-10-05  6.6.4-10 Anthony Thyssen <A.Thyssen@griffith...>
  * Added new filter 'Lanczos2D' a 2-lobe Lanczos as defined by
    Andreas Gustafsson in his thesis  "Interactive Image Warping" (page 24)
         http://www.gson.org/thesis/warping-thesis.pdf
  * Added filter "Robidoux" which is a slightly sharpened version of the
    "Lanczos2D" filter (blur=0.958033808) specifically designed to be less
    'blurry' for horizontal and vertical lines in no-op distortions.

2010-10-05  6.6.4-10 Cristy  <quetzlzacatenango@image...>
  * Add support for "pattern:vertical2" and "pattern:horizontal2".
  * Add support for "pattern:vertical3" and "pattern:horizontal3".
  * Properly handle PSD layers with negative offsets.

2010-10-03  6.6.4-9 Cristy  <quetzlzacatenango@image...>
  * Fix memory assertion with --enable-embeddable (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17201).
  * Don't permit access to pixels when pinging an image (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17194).

2010-10-02  6.6.4-9 Anthony Thyssen <A.Thyssen@griffith...>
  * Added sqrt(2) blurring default for Gaussian Filter if used as
    a Cylindrical EWA filter.  This resulted removing the last aliasing
    issue that was present in tests for Gaussian EWA resampling. Of course
    it is still a very blurry filter for default use in EWA.
  * Adjusted Variable Mapping Blur Composition so user arguments actual
    relate properly to the sigma of the blur for a maximum mapping value.
  * Fix horizon anti-alising for output-scaled perspective distortions.
  * 'Bessel' filter is now offically and more accuritally named 'Jinc'
    however 'Bessel' while not visible as a filter option can still be used
    as an internal alias for 'Jinc'.

2010-09-28  6.6.4-8 Nicolas Robidoux <nicolas.robidoux@gmai...>
  * Chantal Racette double checked the bounding parallelogram computation
    in resample.c (and I tightened the comments).

2010-09-28  6.6.4-8 Cristy  <quetzlzacatenango@image...>
  * Temporary files not always deleted (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=15960).

2010-09-28  6.6.4-8 Anthony Thyssen <A.Thyssen@griffith...>
  * Bug fix for -filter point distorts (occasional generating black pixels)

2010-09-27  6.6.4-8 Nicolas Robidoux <nicolas.robidoux@gmai...>
  * Simplified the ClampUpAxes code, the use of its outputs, its comments,
    and credited Craig DeForest for the "clamp singular values" idea.
  * No reason to have "insane" precision Sinc in resize.c: Use
    the 1.2e-12 max. abs. relative error version for Q64 as well as Q32.

2010-09-27  6.6.4-8 Anthony Thyssen <A.Thyssen@griffith...>
  * Replace the blurry "High Quality EWA" technique with a 'Clamped EWA'
    for Distort Resampling.  This makes -distort a whole lot nicer
    and allows for the use of better cylindrical filters.

2010-09-26  6.6.4-7 Anthony Thyssen <A.Thyssen@griffith...>
  * Fix Point filter for ResizeImage() caused by support limiting the
    Box weighting function.

2010-09-26  6.6.4-6 Cristy  <quetzlzacatenango@image...>
  * Don't allow resize filter weights to go to zero (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17132).

2010-09-24  6.6.4-6 Nicolas Robidoux <nicolas.robidoux@gmai...>
  * Now that MagickPIL is a MagickRealType, some casts are unneeded.

2010-09-21  6.6.4-6 Cristy  <quetzlzacatenango@image...>
  * Do not break words if caption size is absolute (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=17123).
  * Don't define HAVE_THREADS for --without-threads configure script option.

2010-09-20  6.6.4-5 Nicolas Robidoux <nicolas.robidoux@gmai...>
  * Modified "magick/resize.c" so that MagickPIL is a MagickRealType number.
    Some computations were needlessly done in long double precision because
    PIL forced an automatic upcast wherever it appeared. Changed its name to
    MagickREALTYPEPI. <- This was later reverted back to MagickPIL.
  * Modified "magick/resize.c" so that Bohman uses one trig call + one sqrt
    call instead of two trig calls.

2010-09-20  6.6.4-5 Anthony Thyssen <A.Thyssen@griffith...>
  * modified "magick/resample.c" to allow use of either EWA or HQEWA (default)
  * Removed LanczosFast from supported filters (SincFast*SincFast is faster)

2010-09-19  6.6.4-5 Cristy  <quetzlzacatenango@image...>
  * If IPTC profile is not embedded in an 8bim resource, declare it IPTC
    rather than 8BIM.
  * Support %[version] and %[copyright].
  * Improve performance of the pixel cache.

2010-09-18  6.6.4-4 Cristy  <quetzlzacatenango@image...>
  * Automatically set the quantum depth to 16 for HDRI.

2010-09-16  6.6.4-2 Cristy  <quetzlzacatenango@image...>
  * IPTC profile not always wrapped properly inside an 8BIM profile.
  * TIFF tile geometry must be divisible by 16.

2010-09-15  6.6.4-2 Anthony Thyssen <A.Thyssen@griffith...>
  * Rename of SincPolynomial to SincFast for easier user understanding
  * Ditto for LanczosChebyshev to LanzcosFast

2010-09-14  6.6.4-2 Anthony Thyssen <A.Thyssen@griffith...>
  * Switch default resize filters to using the faster SincPolynomial
    filter by default internally.  However 'Sinc' will still use the
    Trigonometric function, and can be used to assign the trig version
    of Sinc() to filters using the filter expert options.
  * The default filter for 'distort' was found to be a very blurry inaccurate
    filter function.  It was removed and replaced with a correct Gaussian
    filter (as used by resize)
  * Added a switch so that "-interpolate filter" will force the use of
    a cylindrical filter for ALL pixels in distorted images.  That is you can
    use that switch to use a cylindrical filter even for images that are
    being enlarged by the distortion.  However EWA is still currently using
    a fixed 2.0 sampling radius.  This switch complements the use of "-filter
    point" which turns off EWA filters in favor of interpolation for all
    pixels in a distorted image.  BOTH switches should not be used together.
  * A bug in the support radius of the EWA resampling function was found,
    now that correctly defined resize filters are being used. Suddenly Normal
    Gaussian distortions are not so blurry, and tests with distortions of
    the 'Rings' image show extremely good and clear results, with only minimal
    blurring.  The filter 'blur' expert option can be used to adjust this
    further.

    The above represents a major improvement forward in the quality of the
    image distortion operator. But near-unity distortions (no scaling) are
    still overly blurry.

2010-09-13  6.6.4-2 Cristy  <quetzlzacatenango@image...>
  * Don't negate the geometry offset for the -extent option.

2010-09-09  6.6.4-1 Cristy  <quetzlzacatenango@image...>
  * The RGBO format is now listed as a supported format.

2010-09-07  6.6.4-1 Anthony Thyssen <A.Thyssen@griffith...>
  * Added the Nicolas Robidoux and Chantal Racette  Lanczos resize filter
    function as "LanczosChebyshev" as faster alternative to Lanczos.
  * Re-code Nicolas Robidoux and Chantal Racette Polynomial Approximation of
    the Sinc Trigonometric resize filter, as a proper filter to allow
    direct comparision and speed testing of the filter.
  * Expanded the "-set option:filter:verbose 1" output, so as to also include
    the actual functions and other values that were used to create the filter.

2010-09-02  6.6.4-0 el_supremo  <digipete@shaw...>
  * Repair a few incorrect LocaleNCompare() calls (ttf.c, ps.c).

2010-08-31  6.6.4-0 Cristy  <quetzlzacatenango@image...>
  * Path no longer closed if join style is round (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16943).
  * Add case for BGRQuantum to GetQuantumExtent().
  * Support no compression on PCX write.

2010-08-23  6.6.3-10 Cristy  <quetzlzacatenango@image...>
  * Fixed bug in the raw BGRA coders (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16880).
  * Fix off-by-one error in the PSD coders.
  * Nicolas Robidoux with the assistance of Chantal Racette contribute an
    approximation of the sinc function over the interval [-3,3].
  * Eliminate a small memory leak in LevelizeImageChannel() (reference
	  http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16951).
  * Recognize -fx logtwo (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16958).

2010-08-15  6.6.3-7 Cristy  <quetzlzacatenango@image...>
  * Throw exception if image size differs for the compare program but the
    -subimage-search option is not specified.

2010-08-13  6.6.3-6 Cristy  <quetzlzacatenango@image...>
  * The AdobeRgb.tif TIFF image no longer faults under Windows (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16838).
  * Add -subimage-search option to the compare utility.

2010-08-12  6.6.3-5 Cristy  <quetzlzacatenango@image...>
  * The -fx 2e+6/1e+5 argument no longer returns the wrong results (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16833).

2010-08-10  6.6.3-5 Glenn Randers-Pehrson <glennrp@image...>
  * Emit a warning if the PNG encoder can't satisfy the color type and
    bit depth requested with a "-define" directive.

2010-08-07  6.6.3-4 Cristy  <quetzlzacatenango@image...>
  * The orient option sometimes improperly set "undefined" (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16795).
  * Only list orientation options for the -list orientation option (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16801).
  * Return proper standard deviation for combined channels (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16786).
  * Handle transparency properly for the PSD image format.

2010-08-05  6.6.3-3 Glenn Randers-Pehrson <glennrp@image...>
  * Properly map PNG intent to image->rendering_intent

2010-08-01  6.6.3-3 Cristy  <quetzlzacatenango@image...>
  * Eliminate bogus "invalid colormap index" when pinging ICO images.
  * Support -set density / units.

2010-07-31  6.6.3-2 Cristy  <quetzlzacatenango@image...>
  * Only use the first alpha channel in PSD image.
  * Only use XPM complying colors for XPM images (e.g. green is rgb(0,255,0)).

2010-07-27  6.6.3-2 Glenn Randers-Pehrson <glennrp@image...>
  * Eliminate useless message about assuming zero delay when writing
    a single-frame MNG, and changed it from Error to Warning when
    writing a multiple-frame MNG.

2010-07-25  6.6.3-1 Glenn Randers-Pehrson <glennrp@image...>
  * Don't "ping" a PNG image if it is embedded in a MNG.  Otherwise the
    reader tries to read MNG chunks from the interior of the embedded PNG,
    resulting in an erroneous "corrupted image" message.

2010-07-09  6.6.3-1 Cristy  <quetzlzacatenango@image...>
  * Fix memory leak in for corrupt BMP images (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16600).
  * Repair several issues when writing to stdout (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16620).
  * A GIF image with the .bgr extension is still a GIF (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16662).

2010-07-07  6.6.3-1 Glenn Randers-Pehrson <glennrp@image...>
  * The PNG decoder failed to handle the tRNS chunk properly for grayscale
    images where the png bit_depth was not the same as the quantum depth,
    and the transparent color was not black.

2010-07-01  6.6.3-0 Chris Madison  <madisonblu@gmail...>
  * Pinging the DJVU image format no longer faults.
  * Check for time-limit-exceeded in only one thread.
  * Reading filenames from a file (e.g. @filenames) no longer includes the
    utility name (side effect of StringToArgv() method).

2010-06-28  6.6.2-10 Cristy  <quetzlzacatenango@image...>
  * Support the tiff:fill-order define.
  * Filters are case sensitive (e.g. reduce-Colors).
  * Restore mogrify's -path option.
  * The -list module option lists image coders and image filters.

2010-06-27  6.6.2-9 Cristy  <quetzlzacatenango@image...>
  * Add the ImageView API.
  * Fix DJVU coder to read one page (e.g. 'image.djvu[2]').
  * Support -define png:bit-depth=1 -define png:color-type=3 for PNG format.

2010-06-22  6.6.2-8 Cristy  <quetzlzacatenango@image...>
  * Skip byte when DDS bitcount is 32 (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16487).
  * Montage now uses final background setting (e.g. montage -background none ...
    -background lightblue show:).
  * Do not annotate directory paths in ListFiles().
  * Reset the image matte for png:color-type=2.

2010-06-17  6.6.2-7 Cristy  <quetzlzacatenango@image...>
  * Support new label:pointsize property.
  * Miscellany->Slide Show, in the display program, now cycles through the
    image sequence.
  * Recognize certain hex color values (e.g. #b9e1cc00) for the -fx argument.
  * Reduce memory requirements when dithering on the iPhone.
  * Command line operators no longer affected by settings that appear after
    them (e.g. -splice 10x0+0+0 -gravity center).
  * Compute the proper DPX user data field size.

2010-06-15  6.6.2-6 Cristy  <quetzlzacatenango@image...>
  * Fix some nits to keep the clang compiler happy.

2010-06-14  6.6.2-5 Anthony Thyssen <A.Thyssen@griffith...>
  * Fix transprancy handling for Morphology Convolve
  * Adjustments of Hit And Miss and Edge Detection kernel definitions
  * Added 'ThinDiagonals' Thinning Kernel + two sub-types
  * Handling for Convolution of 1-D vertical kernels.
    However this was removed (using #if-#endif) as I found it slower in tests!

2010-06-12  6.6.2-5 Cristy  <quetzlzacatenango@image...>
  * mogrify -format properly handles compressed image filename (e.g.
    -format jpg logo.png.bz2).
  * Respect +dither option when saving to the GIF image format.

2010-06-08  6.6.2-4 Cristy  <quetzlzacatenango@image...>
  * End of string sentinal is \n not \r.

2010-06-06  6.6.2-3 Glenn Randers-Pehrson <glennrp@image...>
  * Don't decode pixels in coders/png.c when image->ping is set.

2010-06-06  6.6.2-3 Cristy  <quetzlzacatenango@image...>
  * Reset image filename when reading inline images.
  * Don't clamp floating point values for HDRI-enabled ImageMagick.

2010-05-25  6.6.2-2 Anthony Thyssen <A.Thyssen@griffith...>
  * Replaced '^' morphology kernel rotation with two variants '>' and '<'
  * 'Skeleton' variant to thin down images as symmetrically as possible.
  * Spelling correction:  Manhatten -> Manhattan

2010-06-01  6.6.2-2 Glenn Randers-Pehrson <glennrp@image...>
  * Properly scale color components of the PNG bKGD chunk.
  * Prevent MNG divide by zero in calculation of frame_timeout.  Set
    both frame_delay and frame_timeout to infinite when ticks_per_second
    is zero, as required by the MNG spec.

2010-05-31  6.6.2-2 Cristy  <quetzlzacatenango@image...>
  * Add x:silent option to prevent beeps when reading the X image format.
  * Recognize TTF for GetMagicInfo().
  * Ensure the +set option deletes the image artifact.

2010-05-28  6.6.2-1 Glenn Randers-Pehrson <glennrp@image...>
  * Prevent coders/png.c from attempting to write an empty tRNS chunk.

2010-05-25  6.6.2-1 Anthony Thyssen <A.Thyssen@griffith...>
  * Fix for Square Array Rotates (off center origin rotate)
  * Added HitAndMiss kernel Ridges2 to find 2 pixel thick ridges
  * Added FreiChen:0,{angle}  FreiChen:{angle} and FreiChen:-1 variations
    to complete this kernels definition

2010-05-24  6.6.2-1 Cristy  <quetzlzacatenango@image...>
  * Respect density when rendering SVG images.
  * Set AVI handler to the MPEG coder.
  * Compute the proper DPX user data field size.
  * Do not interpret a format specifier when enclosed in brackets (e.g.
    rose_tile_%[filename:tile].gif.
  * Use 64-bit types when compiling with the 64-bit Visual C++ compiler under
    Windows.
  * Prevent MNG divide by zero in calculation of frame_delay (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16320).

2010-05-23  6.6.2-0 Anthony Thyssen <A.Thyssen@griffith...>
  * Third Re-write of MorphologyApply() to better handle compound methods.
  * Implemented  -set option:morphology:compose for merging results of
    multiple kernels. "None" means re-iterate results with next kernel.
    While "Undefined" means to use the internal default for a method.
    Thinning, Thickening, HitAndMiss, Convolve, Correlate defaults to "None"
    while HitAndMiss defaults to "Lighten" (union of all kernel results).
    Other morphology methods defaults still to be decided.
  * Added HitAndMiss Kernel: Ridges  (find ridges and pixel width lines)
  * Rotation Expansion of single kernels '^' and '@' flags in arguments
    EG: -set option:showkernel 1 -morphology Convolve 'Blur:0x2^'
  * ExpandKernelInfo() (rotation expand) now groks symmetrical kernels.
    So the above will only produce a list of 2 kernels, not 4 kernels

2010-05-18  6.6.2-0 Anthony Thyssen <A.Thyssen@griffith...>
  * Separation of internal function MorphologyApply() from
    MorphologyImageChannel() to calls to convolve without user settings.
  * Rewrite of MorphologyApply() to output better 'verbose' messages
  * Better handling of Gaussian tyle filters (bug fixes)
  * Bug fix and optimization of kernel size calculations in "gem.c"
  * Allow '^' or '@' flags in 'user defined' kernel size arguments to
    expand kernel into a rotated list.
    EG: -set option:showkernel 1 -morphology Thinning  '3@: 0,1,0 0,1,0 0,0,0'
  * Allow a scaled unity kernel to be added to kernel (EdgeDet->Sharpen)
    EG: -set option:convolve:scale [kernel_scale][^!],[unity_scale][%]
  * Addition of "Laplacian of Gaussian" (LOG), also known as Mexican Hat
    EG: -morphology convolve LOG:0x1
  * Added FreiChen, Kirsch  Convolution kernels
  * Added Descrete 'Laplacian of Gaussian' kernels (Laplacian type 15 and 19)
  * Added Edges HitAndMiss Kernel

2010-05-17  6.6.2-0 Cristy  <quetzlzacatenango@image...>
  * PSD images require a proper layer to support an alpha channel.
  * Enable PFM endian support.
  * Add context to -border for montage.  Inside the parenthesis it adds a border
    to the image otherwise it sets the border for the layout manager.
  * 24-bit BMP images are not colormapped even if header colors != 0.
  * Set DPX user data like this: -set profile dpx:userdata.txt.
  * Make sure Lab => RGB => Lab survives the round trip.

2010-05-15  6.6.1-10 Cristy  <quetzlzacatenango@image...>
  * Use ScaleCharToQuantum() in coders/src.c (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16229).
  * Don't clamp HDRI EXR pixels.

2010-05-14  6.6.1-9 Cristy  <quetzlzacatenango@image...>
  * Increase the estimated # points for the path drawing primitive.
  * Remove any prior resolution block from PSD before writing the new block.

2010-05-14  6.6.1-9 Anthony Thyssen <A.Thyssen@griffith...>
  * Addition of more Morphological/Convolution Kernels.
    DOG (Difference of Gaussians) and DOB (Difference of Blurs),
    EG:    -morphology convolve DOG:0x1,3
           -morphology convolve DOB:0x1,3,90
  * Added Prewitt, Roberts, Compass  Convolution Kernels
  * Ring Symbol Kernel (subtraction of Disk from a Disk)

2010-05-13  6.6.1-9 Cristy  <quetzlzacatenango@image...>
  * The pixel buffer was underallocated for some image formats when streaming.

2010-05-12  6.6.1-8 Anthony Thyssen <A.Thyssen@griffith...>
  * Implementation of Pattern Matching Morphology methods
    HitAndMiss, Thicken, Thinning
  * Reporting of Kernel Strings that fail to parse (though not why)
  * Parsing of Multiple Kernel Strings, generating a list of kernels
  * Union of results from Multiple Kernels for HitAndMiss method
  * Interated Multiple Kernels for all other morphology methods
  * Added many new kernels for HitAndMiss and Convolution
    Sobel, Laplacian, Cross, Peaks, Corners, LineEnds, LineJunctions,
    ConvexHull (for Thicken), Skeleton (for Thinning)

2010-05-08  6.6.1-8 Glenn Randers-Pehrson <glennrp@image...>
  * Use proper background.index when writing indexed PNG, if the background
    color is in the palette.

2010-05-08  6.6.1-7 Cristy  <quetzlzacatenango@image...>
  * Fix improper 'invalid colormap index' PNG bug.
  * Fix PerlMagick compile exception.

2010-05-07  6.6.1-6 Anthony Thyssen <A.Thyssen@griffith...>
  * Added % and ! modification flags to morphology distance kernel
    scaling factor, for easier usage.
  * Bug fix for compose math channel handling and morphology diff usage

2010-05-06  6.6.1-6 Cristy  <quetzlzacatenango@image...>
  * Do not claim gray colorspace if gray image includes a non-gray pixel.
  * Initialize BMP alpha channel to opaque for RGB images.
  * Fixed under allocation for round rectangles.
  * The -list option returns a 0 status as expected.

2010-05-06  6.6.1-6 Anthony Thyssen <A.Thyssen@griffith...>
  * Made use of new no-'sync' channel enabled mathematical compose methods
    for the difference morphology methods.  These should now work correctly
    for specific channels, and more importantly for alpha shaped morphology.

2010-05-05  6.6.1-6 Glenn Randers-Pehrson <glennrp@image...>
  * Fixed bugs with losing the opacity channel while writing some PNG images.
    (bug reported by Anthony T.)

2010-05-05  6.6.1-6 Glenn Randers-Pehrson <glennrp@image...>
  * Simplified and corrected rowbytes calculation in coders/png.c and
    added more logging.

2010-05-05  6.6.1-6 Anthony Thyssen <A.Thyssen@griffith...>
  * Rename of "Add" and "Subtract" compositions to "ModulusAdd" and
    "ModulusSubtract" for more clarity of there functions. Old names
    will continue to work as expected.
  * Fix "Minus", "ModulusAdd", and "ModulusSubtract" to follow
    normal SVG 'Over' blending specifications, (see next for override)
    Note that this does NOT include the "Plus" composition method which has
    SVG definition for it to use a 'Plus' blending rather than 'Over' blending.

  * By default mathematical compositions work as per SVG definition. That is
    the results are synchronized with 'Over' alpha-blending (except "Plus"
    which uses 'plus' alpha-blending).

    By removing the default 'sync' flag from the -channel setting however
    Break this inter-channel synchronization and do the mathematical operations
    only on the individual channels as specified by the -channel setting.
    That is do 'channel' math rather than 'SVG' composition.

    With this change you can then use mathematical composition methods on
    individual channels or even with the alpha channel of images.

2010-04-28  6.6.1-6 Anthony Thyssen <A.Thyssen@griffith...>
  * Special case handling in Barrel distortion (pixel at image center)
  * Calculation of image for Barrel distortion (pixel vs image coords)
  * Argument input (handling optional 'd' argument) for Barrel distortion

2010-04-24  6.6.1-6 Cristy  <quetzlzacatenango@image...>
  * Do not declare timestruct under MinGW.
  * Respect -compose option for the montage utility (bug report by Anthony).
  * A 256 column gradient produces a 256 color GIF image (bug report by
    Anthony).
  * Register / unregister CALS format in static.c (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=16103).
  * Add SetImageColor() method.

2010-04-17  6.6.1-5 Cristy  <quetzlzacatenango@image...>
  * Only write one ICC profile to PSD image.
  * Sync image colormap for PNG tRNS chunks.
  * The -direction option now works with the -annotate and -draw options.
  * For the histogram: format, if you have no need for the unique color list,
    use <kbd>-define histogram:unique-colors=false</kbd> to forego this
    expensive operation.
  * Match on literal after backslash in glob expression (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16068).
  * Enable JPEG-compression for grayscale TIFF images (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16064).
  * Don't write empty tile if tile geometry matches the image width (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16064).
  * Support -regard-warnings in the mogrify utility.
  * Output the correct units for the identify utility (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16075).

2010-04-15  6.6.1-4 Cristy  <quetzlzacatenango@image...>
  * Do not set the resample virtual pixel method when undefined.
  * Support writing grayscale PSD images.
  * Revert Lab-to-XYZ colorspace transform patch.
  * Clamp HDRI values for LevelImageChannel() method.

2010-04-12  6.6.1-3 Cristy  <quetzlzacatenango@image...>
  * For HSL to RGB, if color temperature is less than 0, set RGB to lightness.
  * Do not flip BMP image with negative height when pinging.

2010-04-08  6.6.1-2 Cristy  <quetzlzacatenango@image...>
  * Improve support for device link profiles.

2010-04-06  6.6.1-1 Anthony Thyssen <A.Thyssen@griffith...>
  * Fixed bug in -auto-level for special case when only one value is present
    in some channel of the image. In this case no 'stretch is performed, just
    as -normalize does.

2010-04-05  6.6.1-1 Cristy  <quetzlzacatenango@image...>
  * WMF support under Windows does not produce the same results as under
    Linux.

2010-03-31  6.6.1-0 Anthony Thyssen <A.Thyssen@griffith...>
  * Fixed bug in equal-size tile cropping, when image has a page offset.

2010-03-31  6.6.1-0 Cristy  <quetzlzacatenango@image...>
  * The -recolor 4x4 matrix is now interpreted properly (previously it
    summed rather than attenuating the alpha channel).
  * Support writing 1-bit PSD images.
  * Support LCMS 2.0.
  * Improved WMF support under Windows.

2010-03-30  6.6.1-0 Glenn Randers-Pehrson <glennrp@image...>
  * The new coders/png.c was failing to read a 1-bit paletted image properly.
  * Finished eliminating the deprecated direct references to members of
    the png_info structure. ImageMagick can now be built with libpng-1.5.

2010-03-21  6.6.0-10 Cristy  <quetzlzacatenango@image...>
  * Respect the -density option when rendering a Postscript or PDF image.
  * Distort barrel no longer complains when 3 arguments are given (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=15883).
  * Support -direction left-to-right option for rendering text

2010-03-24  6.6.0-9 Glenn Randers-Pehrson <glennrp@image...>
  * coders/png.c: Eliminated support of libpng versions older than 1.0.12.
  * Relocated the new, misplaced png_get_rowbytes() call.
  * Updated setjmp/longjmp/jmpbuf usage to work with libpng-1.5.

2010-03-21  6.6.0-9 Cristy  <quetzlzacatenango@image...>
  * Windows does not support complex.h (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=15808).
  * Add support for monochrome PSD images.
  * VignetteImage() no longer crashes when x and y arguments are both greater
    than half the width (x) and height (y) of the image.

2010-03-20  6.6.0-8 Glenn Randers-Pehrson <glennrp@image...>
  * Eliminated some of the deprecated direct references to members of
    the png_info structure.  This must be finished before we can build
    with libpng-1.5.

2010-03-18  6.6.0-8 Cristy  <quetzlzacatenango@image...>
  * The animate program no longer loops twice when -loop 1 is specified.
  * The caption format would sometimes hang when the text was not UTF-8.
  * Don't gamma correct log to linear color conversion unless the -gamma is
    specified (reference 
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=15799).

2010-03-17  6.6.0-7 Cristy  <quetzlzacatenango@image...>
  * Detect CMYKProcessColor AI tag.
  * Delete image from command line cache for -write option.

2010-03-13  6.6.0-6 Cristy  <quetzlzacatenango@image...>
  * Add support for the Adobe Large Document format.
  * Recognize -remap option for the mogrify utility.
  * The default Helvetica font is not always available, check for
    Century Schoolbook too (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=15780).

2010-03-11  6.6.0-5 Cristy  <quetzlzacatenango@image...>
  * Permit user to get virtual pixels with a region width of 0.
  * Reformulate the jinc() function so that the main peak is of amplitude of 1.
  * Resampling filter must respect the image virtual pixel method.

2010-03-07  6.6.0-4 Cristy  <quetzlzacatenango@image...>
  * The -evaluate-sequence option behaves like -evaluate except it operates
    on a sequence of images.

2010-03-05  6.6.0-2 Cristy  <quetzlzacatenango@image...>
  * Add support for the -maximum and -minimum options.

2010-02-27  6.6.0-1 Cristy  <quetzlzacatenango@image...>
  * Check to see if ICON image width /height exceeds that of the image canvas.
  * Set the DPX descriptor to Luma only if the image type is not TrueColor.
  * Add support for -fx airy(), j0(), j1(), jinc(), and sinc() (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=15685).
    Anthony, review these for correctness.
  * Don't embed an XMP profile in an EPS image for now.

2010-02-21  6.6.0-0 Cristy  <quetzlzacatenango@image...>
  * Insufficient image data in EPT is a warning rather than an error.
  * Respect -type TrueColor when writing gray DPX images.
  * Fix problem reading 10-bit grayscale DPX images when scanline length is
    not a multiple of 3.
  * BMP has an alpha channel, it was treated as an opacity channel.

2010-02-20  6.5.9-10 Cristy  <quetzlzacatenango@image...>
  * Write 10-bit grayscale DPX images properly.

2010-02-18  6.5.9-8 Cristy  <quetzlzacatenango@image...>
  * Detect PDF ICCBased colorspace.

2010-02-18  6.5.9-7 Anthony Thyssen <A.Thyssen@griffith...>
  * Finalized -set option:convolve:scale  kernel normalize/scale option

2010-02-16  6.5.9-7 Cristy  <quetzlzacatenango@image...>
  * TransformImage() resets the image blob when called in the PICT decoder;
    use SetImageExtent() instead.

2010-02-14  6.5.9-6 Cristy  <quetzlzacatenango@image...>
  * Support PSD RLE compression.

2010-02-13  6.5.9-5 Cristy  <quetzlzacatenango@image...>
  * The jpeg:extent define sometimes exceeded the specified limit.

2010-02-09  6.5.9-4 Cristy  <quetzlzacatenango@image...>
  * Resolve "too many open files"  (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=15546).

2010-02-08  6.5.9-3 Anthony Thyssen <A.Thyssen@griffith...>
  * Added Correlate method which does a Convolve without reflecting the kernel.

2010-02-07  6.5.9-3 Cristy  <quetzlzacatenango@image...>
  * Initialize grayscale colormap for PSD images.

2010-02-07  6.5.9-3 Anthony Thyssen <A.Thyssen@griffith...>
  * Final testing and fixing of basic morphology operators
  * Addition Third-level Subtractive Morphology Methods:
    EdgeIn, EdgeOut, Edge, TopHat, BottomHat
  * Ensuring original kernels passed to morphology are cloned before being
    modified for use by specific methods (EG: convolve scale/normalize)

2010-02-03  6.5.9-2 Cristy  <quetzlzacatenango@image...>
  * display -immutable to display transparent image without a checkboard.

2010-01-27  6.5.9-1 Glenn Randers-Pehrson <glennrp@image...>
  * Make -define png:color-type less persnickity about what it will accept.

2010-01-24  6.5.9-1 Anthony Thyssen <A.Thyssen@griffith...>
  * added use of -precision in 'showkernel' output of -morphology
  * correct use of a 'reflected kernel' for 'Convolve' 'Dilate' and
    'Distance' Morphology primatives. This does not have a performance hit,
    though is only truely applicable when the kernel is asymmetric.  Note that
    'Erode' does not use a 'reflected' kernel, so that 'Open' and 'Close'
    operations work properly.  This 'reflected usage is defined by online
    morphology lecture notes (Google for "EECE Binary Morphology")
  * Added convolve kernel scaling setting "-set option:convolve:scale N"
    If undefined morphology convolve does not do any scaling or normalization
    of the convolution kernel.  A value of 0.0 causes normalization for both
    zero and non-zero (added weights) kernel types.

2010-01-15  6.5.9-1 Cristy  <quetzlzacatenango@image...>
  * Speed up reading the PSD image format.
  * Add the -precision option.  Use it to set the maximum number of significant
    digits to be printed.
  * Add -features option to the identify program to display channel features.
  * Add -unique option to the identify program to display channel features.

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.
  * Support heterogeneous distributed processing, see
    http://www.imagemagick.org/script/architecture.php#distributed.
  * Fix semaphore assertion when reading a corrupt image with Magick++.
  * Add support for -brightness-contrast option.

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: Dilate,
    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 interpreted 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).
