2010-10-28  6.6.5-1 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@gmail...>
  * 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@gmail...>
  * 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@gmail...>
  * 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) bluring 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 blury 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@gmail...>
  * 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@gmail...>
  * 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@gmail...>
  * 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@gmail...>
  * 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).
