2011-04-07  6.6.9-5 Anthony Thyssen <A.Thyssen@griffith...>
  * Major BUG FIX - wrong sign breaks most morphology methods in IM v6.6.9-4
  * Fixed -region handling of transparency. Original images without
    transparency will use 'Over' while images with transparency will
    preverse transparency using 'Copy'. Before this only 'Over' was used
    due to the testing of the wrong image.

2011-04-06  6.6.9-4 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.9-4.

2011-04-03  6.6.9-4 Anthony Thyssen <A.Thyssen@griffith...>
  * Add Octagon shape and Octagonal distance kernels for Morphology
  * Fix minor Morphology kernel compose bug (cleanup after Src/Dst swap)
  * Fix segmentation fault after error in a morphology 'named' kernel
  * Added a range of kernels used for specialised thinning purposes
    as defined in a research paper by Dan S. Bloomberg.
  * Added Dan Bloomberg best thinning skeletion, "Skeleton:3"
  * Removed origin pixel from many Hit-and-Miss kernels allowing kernels
    to not only be used for thinning, but also thickening.
  * Renamed "ThinDiagonals" kernel to just "Diagonals"
  * Distance uses a fast two pass algorithm, and no longer needs 'iteration'

2011-04-02  6.6.9-4 Glenn Randers-Pehrson <glennrp@image...>
  * Make the PNG encoder use depth==8 when incoming image->depth < 8
    (the encoder later reduces the depth if it can), to avoid writing
    an incorrect image.
  * Remove any bogus colormap received by the PNG encoder with an image
    that is not PseudoClass (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18475).

2011-04-02  6.6.9-3 Cristy  <quetzlzacatenango@image...>
  * Added -statistic Gradient

2011-04-01  6.6.9-3 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.9-3.

2011-04-01  6.6.9-3 Cristy  <quetzlzacatenango@image...>
  * Set the caption height correctly for missing row geometry (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18447).

2011-03-31  6.6.9-2 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.9-2.

2011-03-30  6.6.9-2 Glenn Randers-Pehrson <glennrp@image...>
  * Revised the png decoder to store the PNG IHDR and other known PNG
    chunk data as properties, for later retrieval and reporting by "identify",
    so users can easily and reliably discover the color-type, bit-depth, etc
    that were in the input PNG datastream.
  * The PNG decoder sometimes set images with more than 256 different
    gray-alpha pixels to storage_class=PseudoClass with an incorrect colormap.

2011-03-30  6.6.9-2 Anthony Thyssen <A.Thyssen@griffith...>
  * Add a "Resize" distortion method (distort equivalent of -resize).
  * Special CLI handling so -distort Resize takes a "geometry" argument.

2011-03-29  6.6.9-2 Cristy  <quetzlzacatenango@image...>
  * Expand PCL compressed pixel buffer to prevent delta compressed overrun.

2011-03-29  6.6.9-1 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.9-1.

2011-03-29  6.6.9-1 Anthony Thyssen <A.Thyssen@griffith...>
  * Fix AdaptiveResizeImage() to use 'Mesh' Interpolation, and fix its
    coordinate handling, as originally defined.

2011-03-29  6.6.9-1 Cristy  <quetzlzacatenango@image...>
  * Support -statistic standard-deviation option.
  * Patch for coders/dcm.c so it compiled with HDRI enabled.

2011-03-28  6.6.9-0 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.9-0.

2011-03-28  6.6.9-0 Cristy  <quetzlzacatenango@image...>
  * Optimize bilinear interpolation.
  * Remove version from etc folder and instead use /etc/ImageMagick.

2011-03-28  6.6.9-0 Anthony Thyssen <A.Thyssen@griffith...>
  * Separated complex cropping function from TransformImage() as a new
    function CropImageToTiles().  This new function returns either the
    new cropped image, or a list of tiles, according to geometry, without
    replacing the source image. The Source image may be part of a larger list
    of images, without the function 'losing' the other images of the list.

2011-03-27  6.6.8-10 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.8-10.

2011-03-27  6.6.8-10 Anthony Thyssen <A.Thyssen@griffith...>
  * Modified image handling in MogrifyImages() and MogrifyImage()
    which improves overall handling, and allows correct %p, %n and the
    %[fx:..] 't' and 'n' escape usage to work correctly.
  * Added -duplicate as a multi-image sequence operator

2011-03-26  6.6.8-9 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.8-9.

2011-03-25  6.6.8-9 Cristy  <quetzlzacatenango@image...>
  * Add InterpolateMagickPixelPacket() method.
  * Add support for the %[opaque] property.

2011-03-25  6.6.8-8 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.8-8.

2011-03-25  6.6.8-8 Cristy  <quetzlzacatenango@image...>
  * Fix memory access bug in CloneString() (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=18382).
  * Avoid infinite loop when no space is available in MagickFormatCaption().

2011-03-25  6.6.8-8 Anthony Thyssen <A.Thyssen@griffith...>
  * Removed the fix for %p and %n escapes, as it was not working right

2011-03-24  6.6.8-7 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.8-7.

2011-03-24  6.6.8-7 Cristy  <quetzlzacatenango@image...>
  * Add support for 16-bit DCM short ints (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18371).

2011-03-23 6.6.8-7 Anthony Thyssen <A.Thyssen@griffith...>
  * Another fix for -sparse-color and unused color channels
  * Finalize the -duplicate option created by Cristy
  * Fix of segmentation fault for second image in %[fx:..] during info:
    (Bug in AcquireFxInfo(), as given start image is not first image)

2011-03-21  6.6.8-7 Glenn Randers-Pehrson <glennrp@image...>
  * Revised the PNG8 encoder to use 50% threshold instead of 0% when
    reducing transparency to binary.  Collapse all resulting fully transparent
    colors into one (the background color), to reduce the compressed filesize.
  * First try the 4-4-4-1 and 3-3-3-1 palettes instead of 3-3-2-1, to preserve
    colors (especially gray) better, when reducing to PNG8.
  * Force the PNG encoder to return image->matte==MagickTrue when the
    format is RGBA or GA or if the tRNS chunk is present, even when the
    image is fully opaque (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18349).

2011-03-21  6.6.8-6 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.8-6.

2011-03-21  6.6.8-6 Glenn Randers-Pehrson <glennrp@image...>
  * Re-enabled reduction of grayscale images (color-type 0) to 2 or 4 bits
    when appropriate (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18098).
  * The "-define PNG:color-type=4" option did not always force the PNG
    encoder to write an all-opaque alpha channel (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18349).

2011-03-14  6.6.8-6 Cristy  <quetzlzacatenango@image...>
  * Fixed memory leak for PDF and Bitmap PSD RLE support (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18317).
  * Support the -statistic option: replace each pixel with corresponding
    statistic from the neighborhood.
  * Add support for -duplicate option.
  * Move configuration files from /usr/share and /usr/lib to /etc and /var.
  * Do not cache the results of fx: otherwise -format
    '%[fx:rand()] %[fx:rand()]' returns the same random numbers.

2011-03-18 6.6.8-6 Anthony Thyssen <A.Thyssen@griffith...>
  * Replaced Minus and Divide Composition methods with Dst and Src
    equivalents. Now users can decide how these non-commutative mathematical
    operators are applied to the images being composited.
  * Fix the percent escape values for  %p, %n  and  %[fx:t], %[fx:n] to
    respectively mean the current images index and the total number of
    images within the current image sequence.

2011-03-17 6.6.8-5 Anthony Thyssen <A.Thyssen@griffith...>
  * Backed out the patch for Variable Blur Composition that was added
    2011-02-13 v6.6.7-7, until I can re-think the problem.
    The existing fix was failing to do circular blurs correctly.

2011-03-14  6.6.8-5 Glenn Randers-Pehrson <glennrp@image...>
  * Fixed a rounding/truncation error while writing the pHYs chunk in the
    png encoder.
  * Don't write text-encoded profile when "-define PNG:exclude-chunk=text,ztxt"
    is present (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17086 and
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18225).

2011-03-14  6.6.8-5 Cristy  <quetzlzacatenango@image...>
  * Add support for the WebP image format.

2011-03-14  6.6.8-5 Anthony Thyssen <A.Thyssen@griffith...>
  * Ensured that -sparse-color preserves unused channels when
    channel limited.  Before this unused channels would be reset to black.

2011-03-11  6.6.8-4 Glenn Randers-Pehrson <glennrp@image...>
  * Don't try to store a bKGD chunk in a PNG8 when there are already
    256 colors in the palette and the background colors is not in that
    palette (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18199);
  * The "-define PNG:exclude-chunk=bKGD" option was also excluding
    the text chunks. (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18253).

2011-03-10  6.6.8-4 Cristy  <quetzlzacatenango@image...>
  * Fx is a mathematical function.  Do not treat transparency as black.
  * No image scene suffix for filenames that include a single bracket (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18267).

2011-03-10  6.6.8-3 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.8-3.

2011-03-10  6.6.8-3 Cristy  <quetzlzacatenango@image...>
  * Boost causes an ambiguity with ssize_t when building PythonMagick.  Add
    patch from Arfrever@gento... to fix the build exception.

2011-03-09  6.6.8-2 Cristy  <quetzlzacatenango@image...>
  * Support the Radiance HDR image format.
  * Update the offset in the black channel when sharpening to avoid incorrect
    results.
  * Do not use GenericReadMethod for TIFF images with 64-bits per sample.

2011-03-06  6.6.8-2 Glenn Randers-Pehrson <glennrp@image...>
  * Throw error message when the requested color-type or bit-depth
    cannot be written by the PNG encoder (error was being thrown
    into the wrong image structure).  (Reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18162).
  * Don't write a PNG text chunk with "density" keyword that overrides the
    PNG pHYs chunk, if the pHYs chunk was not excluded (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18253).
  * Ignore any PNG text chunk with a "density" keyword found by the PNG
    decoder, if the PNG datastream also contains a pHYs chunk.

2011-03-06  6.6.8-1 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.8-1.

2011-03-05  6.6.8-1 Cristy  <quetzlzacatenango@image...>
  * Support PSD files with one layer and one composite layer.
  * We must cast a Quantum type when bit shifting and HDRI is enabled.

2011-03-05  6.6.8-0 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.8-0.

2011-02-27  6.6.8-0 Cristy  <quetzlzacatenango@image...>
  * Add support for the -mode option.

2011-02-27  6.6.8-0 Glenn Randers-Pehrson <glennrp@image...>
  * Fix scaling of new color-reduction method in the PNG encoder (16-bit
    images were scaled down to 0 or 1, or nearly black).
  * Delay opening the PNG output blob until the PNG encoder is ready
    to write the IHDR chunk, to avoid writing zero-length PNG files when
    errors are found while building the palette.  (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18162).

2011-02-25  6.6.7-10 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.7-10.

2011-02-23  6.6.7-10 Cristy  <quetzlzacatenango@image...>
  * Avoid seg fault in AppendImages() when one image is in the RGB colorspace
    but the other is in the CMYK colorspace.
  * Get rid of 'respect_parenthesis defined but not used' warnings (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=18173).

2011-02-22  6.6.7-10 Glenn Randers-Pehrson <glennrp@image...>
  * Write sub-8-bit grayscale PNG images as palette-indexed PNG images.  This
    usually makes smaller files anyhow.
  * Eliminated a number of redundant tests for gray images in the PNG encoder.
  * Removed now-unused IsMonochromeImage() function from coders/png.c
  * Scan the colormap instead of all of the pixels, when possible, to
    determine whether the image received by the PNG encoder is grayscale
    or black-and-white.
  * Avoid reading from the colormap in coders/png.c when it is NULL (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18162).
  * Add a check whether the PNG "cheap transparency" criteria are met.  That
    is, there is a single transparent color, no semitransparent colors, and
    no opaque color that has the same RGB components as the transparent
    color.  If those aren't met, a color that is transparent in one pixel
    and opaque in another would always be rendered as transparent, so we
    must write a PNG colortype that has an alpha channel (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18167).

2011-02-22  6.6.7-9 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.7-9.

2011-02-22  6.6.7-9 Glenn Randers-Pehrson <glennrp@image...>
  * Disabled reduction of grayscale images (color-type 0) to less than 8 bits
    when writing because this sometimes produced incorrect output (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18098).

2011-02-21  6.6.7-9 Cristy  <quetzlzacatenango@image...>
  * Check image has properties before accessing the splay tree (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18136).

2011-02-15  6.6.7-8 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.7-8.

2011-02-14  6.6.7-8 Glenn Randers-Pehrson <glennrp@image...>
  * The PNG encoder should ignore bogus q->opacity values when image->matte
    is MagickFalse (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18067).

2011-02-14  6.6.7-8 Cristy  <quetzlzacatenango@image...>
  * Use implicit image format when explicit format is bogus (e.g.
    02.13.11-18:43:58.png now writes as PNG).
  * Fix problem with 4GB file seeks on a 32-bit OS.

2011-02-13  6.6.7-7 Anthony Thyssen <A.Thyssen@griffith...>
  * Fixed Variable blur to handle small (< 1.0 sigma) blurs generated
    by the blur map being used, rather than just 'cutoff' suddenly.

2011-02-08  6.6.7-7 Cristy  <quetzlzacatenango@image...>
  * Support 16-bit per pixel YUV image files.
  * Fix off-by-one error in PosterizeImage().
  * Posterize now distributes color uniformly (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17623).
  * Add -smush option (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=17953).
  * Repair memory leak in the display program.

2011-02-07  6.6.7-6 Cristy  <quetzlzacatenango@image...>
  * Fix bug in carg() define when HAVE_COMPLEX is not defined (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18030).

2011-02-06  6.6.7-6 Anthony Thyssen <A.Thyssen@griffith...>
  * Default sigma for Gauusian resize filter is now 1/2 for both
    orthogonal resize and cylindrical EWA distortions.

2011-02-02  6.6.7-5 Cristy  <quetzlzacatenango@image...>
  * Check if the font is null in RenderFreetype() to prevent fault (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17890).
  * Eliminate fault when reading WMF image files (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=17971).
  * Support multi-page transparent Postscript and PDF image files.
  * The compare fuzz metric now returns the same correct value for
    'xc:white xc:blue -alpha off' and 'xc:white xc:blue -alpha on'.

2011-01-29  6.6.7-4 Paul Heckbert  <ph@cs.cm...>
  * Move coders/tiff.c conditional compile to define TIFF exception /
    semaphore / key when TIFF delegate is disabled.

2011-01-29  6.6.7-4 Glenn Randers-Pehrson <glennrp@image...>
  * Renamed variables, macros, and functions defined/declared in coders/png.c
    that were in the libpng namespace (beginning with "png_" or "PNG_").

2011-01-25  6.6.7-3 Glenn Randers-Pehrson <glennrp@image...>
  * Removed a call to GetNumberColors() from the PNG encoder that was
    only there for debugging purposes and was consuming a huge amount
    of CPU time. (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=17799).
  * Sometimes black was still written as transparent, when the PNG
    encoder received an image with image->matte==true but no transparent
    pixels were present. (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17913);

2011-01-24  6.6.7-3 Cristy  <quetzlzacatenango@image...>
  * Remove memory leak from ThrowFileException() macro (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17908).
  * Multiple blue error count by 'count' in ClassifyImageColors()
  * Add support for the AAI image format.

2011-01-22  6.6.7-2 Cristy  <quetzlzacatenango@image...>
  * Accept quoted file paths in indirect file references (e.g. @myFiles.txt).

2011-01-19  6.6.7-2 Glenn Randers-Pehrson <glennrp@image...>
  * Changed the PNG encoder's "transparent_color" from a UShortPixelPacket
    to LongPixelPacket and made the default (65537,65537,65537), which
    can never occur in the PNG image data.  Previously the default was
    (0,0,0) and black pixels would be rendered as as transparent when
    no tRNS chunk was present in the input, which has caused problems
    with some test cases since version 6.6.6-10.
  * Improved the PNG_BUILD_PALETTE section to count opaque, transparent,
    and semitransparent pixels separately.  Previously it wasn't always
    possible to determine if there was a single fully-transparent color,
    to decide whether to write an RGBA or Gray-Alpha image or an RGB or
    Gray image with a tRNS chunk.

2011-01-15  6.6.7-1 Cristy  <quetzlzacatenango@image...>
  * Do not reset image next / previous when detach argument is false for
    CloneImage().
  * Inline cropping no longer fails for inline raw images (e.g.
    -size 640x480 -depth 8 'gray:logo[100x100+200+200]').

2011-01-14  6.6.7-1 Glenn Randers-Pehrson <glennrp@image...>
  * Don't let the PNG encoder try to sort the colormap when there are more
    than 256 colors in the image. (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17834).

2011-01-10  6.6.7-1 Cristy  <quetzlzacatenango@image...>
  * Accept escaped % in output filename (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17810).

2011-01-08  6.6.7-1 Glenn Randers-Pehrson <glennrp@image...>
  * Quieted some inconsequential warnings in the PNG codec due to a
    change in the type of the PNG iCCP profile from png_charp to png_bytep
    in libpng-1.5.0.

2011-01-03  6.6.7-0 Cristy  <quetzlzacatenango@image...>
  * Handle negative heights for ICO images.

2011-01-02  6.6.7-0 Glenn Randers-Pehrson <glennrp@image...>
  * Recent changes sometimes caused the PNG encoder to select colortype=2
    (Truecolor) instead of 0 (Grayscale) for grayscale images.  This made
    the filesize larger than necessary and caused some of the PerlMagick
    tests to fail.

2011-01-01  6.6.6-10 Glenn Randers-Pehrson <glennrp@image...>
  * The PNG decoder now checks whether the image actually has any transparency
    when the input file contains an alpha channel or a tRNS chunk.  (Reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17748)

2010-12-26  6.6.6-8 Cristy  <quetzlzacatenango@image...>
  * -posterize fails with more than 40 levels (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=17741).
  * Add support for the MacPaint image format.
  * Eliminate spurious 'invalid colormap index' exception for 16-bit SGI images
    (bug report by steven.sittser@fligh...).
  * Fix user data length for the CIN image format.

2010-12-21  6.6.6-7 Glenn Randers-Pehrson <glennrp@image...>
  * Use a clone instead of the main image in coders/png.c, so the image
    can still be used later on without being affected by changes made by
    the PNG encoder.
  * Added PNG:exclude-chunk and PNG:include-chunk defines.
  * Revised the -strip option so it behaves as though
    "-define PNG:include-chunk=none,gama" had appeared on the commandline.
  * Avoid writing PNG ancillary chunks in the PNG/MNG/JNG encoder while
    generating the alpha channel for a JNG image.

2010-12-21  6.6.6-7 Anthony Thyssen <A.Thyssen@griffith...>
  * Removed the forced interpolation setting in AcquireResampleFilterThreadSet
    It prevented user defined interpolation settings for -clut, and possibly
    other usage.

2010-12-17  6.6.6-6 Chris Madison  <madisonblu@gmail...>
  * Add LZMA compression support to ImageMagick.
  * Eliminate seg-fault in MvgPrintf().

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2010-01-01  6.5.9-0 Cristy  <quetzlzacatenango@image...>
  * Add support for compact floating point (i.e. -depth 16 -define
    quantum:format=floating-point).
  * Transparent images no longer flicker on certain system when using the
    display program.
  * Permit interactive resizing with the display program.
  * Support heterogeneous distributed processing, see
    http://www.imagemagick.org/script/architecture.php#distributed.
  * Fix semaphore assertion when reading a corrupt image with Magick++.
  * Add support for -brightness-contrast option.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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