2011-06-03  6.7.0-3 Cristy  <quetzlzacatenango@image...>
  * Support -direction right-to-left for the label: and caption: coders.
  * Blue / green reversed for JPEG-compressed TIFF images.

2011-06-03  6.7.0-3 Cristy  <quetzlzacatenango@image...>
  * New version 6.7.0-3.

2011-06-02  6.7.0-2 Cristy  <quetzlzacatenango@image...>
  * Use memmove() instead of memcpy() in StripString().

2011-05-27  6.7.0-2 Cristy  <quetzlzacatenango@image...>
  * New version 6.7.0-2.

2011-05-26  6.7.0-2 Cristy  <quetzlzacatenango@image...>
  * ImageMagick now compiles on Hurd (reference
    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=628020).
  * Use vfprintf rather than fprintf in FormatLocaleFileList().

2011-05-26  6.7.0-1 Cristy  <quetzlzacatenango@image...>
  * New version 6.7.0-1.

2011-05-25  6.7.0-1 Cristy  <quetzlzacatenango@image...>
  * Not all Linux'es define locale_t (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18819).

2011-05-22  6.7.0-0 Cristy  <quetzlzacatenango@image...>
  * New version 6.7.0-0.

2011-05-21  6.7.0-0 Cristy  <quetzlzacatenango@image...>
  * Avoid fault on corrupt JPEG images.
  * Avoid fault on certain DJVU images (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18807).
  * Fix -fx to interpret scientfic notation properly.

2011-05-20  6.6.9-10 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.9-10.

2011-05-20  6.6.9-10 Glenn Randers-Pehrson <glennrp@image...>
  * The PNG encoder now respects the -depth setting, including 1, 2, 4.
    Previously settings other than 8 and 16 were ignored (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18412). 

2011-05-16  6.6.9-10 Cristy  <quetzlzacatenango@image...>
  * Don't use comma as a separator for stroked text (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18742).
  * Use C locale when generating or interpretting SVG.
  * Fix "unterminated macro" for Q32 build of coders/png.c.

2011-05-15  6.6.9-9 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.9-9.

2011-05-14  6.6.9-9 Cristy  <quetzlzacatenango@image...>
  * The -scale option now considers the alpha channel when scaling.
  * Fix transient bug for HSL to RGB and back.

2011-05-12  6.6.9-9 Glenn Randers-Pehrson <glennrp@image...>
  * Fixed PNG8 reduction to work with an image that reduces to 256 colors
    plus transparency, by merging the two darkest red colors.

2011-05-04  6.6.9-8 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.9-8.

2011-05-02  6.6.9-8 Glenn Randers-Pehrson <glennrp@image...>
  * Fixed some cut-and-paste errors in new png.c code that caused PNG8
    reductions to fail.

2011-05-02  6.6.9-8 Anthony Thyssen <A.Thyssen@griffith...>
  * Add various Option Flags, and fix option skip counts for plus forms
    of simple operators where plus form is the same as minus form.
    For example the incorrect counts produces a weird error, and posible
    future segmentation fault in a command like  convert rose: +border show:

2011-04-30  6.6.9-7 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.9-7.

2011-04-30  6.6.9-7 Anthony Thyssen <A.Thyssen@griffith...>
  * Fix FX default for interpolation to Bilinear.

2011-04-27  6.6.9-7 Cristy  <quetzlzacatenango@image...>
  * Fix pixel interpolation for -draw image over (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18612).

2011-04-26  6.6.9-7 Glenn Randers-Pehrson <glennrp@image...>
  * Write the proper bKGD chunk value in grayscale PNG images (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18624).

2011-04-25  6.6.9-7 Anthony Thyssen <A.Thyssen@griffith...>
  * Added Inverse method for Sparse Color Interpolation

2011-04-24  6.6.9-6 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.9-6.

2011-04-21  6.6.9-6 Anthony Thyssen <A.Thyssen@griffith...>
  * Make filter:blur define a multiplicative adjustment of filter settings
    rather than a complete override of those settings.
  * Add Flags to CommandOptions parse table, removing the need for
    ImageListOptions parsing table.  This is the start of development to
    produce a "convert" replacement that can read options from both command
    line and from files or pipelines, in "Do it Immediately" handling.
  * Crop Bug Fix. Prevent infinite loop with "+repage -crop 0x40"

2011-04-18  6.6.9-6 Glenn Randers-Pehrson <glennrp@image...>
  * Added "date" to the things that can appear on the -define PNG:exclude-chunk
    list.  This excludes the IM-generated Date:modify and Date:create
    properties from PNG output text chunks without excluding the rest of the
    text chunks.
  * Added "-define PNG:preserve-colormap" option (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18564).
  * Simplified LosslessReduceDepthOK() function in coders/png.c

2011-04-18  6.6.9-6 Cristy  <quetzlzacatenango@image...>
  * Add support for writing RGB FITS images as separate planes.

2011-04-16  6.6.9-6 Cristy  <quetzlzacatenango@image...>
  * Support the HDR 32-bit_rle_xyze format.
  * Fixed infinite loop for TARGA images with a V2 develop area.
  * Add signal handler for SIGBUS.

2011-04-15  6.6.9-5 Cristy  <quetzlzacatenango@image...>
  * New version 6.6.9-5.

2011-04-15  6.6.9-5 Glenn Randers-Pehrson <glennrp@image...>
  * Added "#define PNG_PTR_NORETURN" because this macro does not work
    on all platforms with libpng15, with failure to load png_longjmp() (ref
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18518).

2011-04-14  6.6.9-5 Anthony Thyssen <A.Thyssen@griffith...>
  * Layers Composition Bug Fix, animations attributes of first image not
    transferred in a single destination, multi-source image composition.

2011-04-09  6.6.9-5 Anthony Thyssen <A.Thyssen@griffith...>
  * Add a special 'Voronoi' Morphology Distance method that will fill in holes
    using the nearest non-transparent edge pixel. It is experimental, and
    hidden from normal morphology usage, as it may be interfaced with a
    future hole-filling color 'Diffusion' method.

2011-04-08  6.6.9-5 Cristy  <quetzlzacatenango@image...>
  * MIFF keywords sometimes includes spaces.

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
    preserve transparency using 'Copy'. Before this only 'Over' was used
    due to the testing of the wrong image.
  * Added Compose methods  DarkenIntensity and LightenIntensity

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 equivalent 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 primitives. 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 separate 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 separator.
  * 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 coefficient handlig for DistortImages so allow for generation
    by other operators (SparseColor), and addition of verbose output of
    equivalent -fx functions for DistortImages to report of the internal
    coefficients that was calculated, and who they are used.
  * Initial implementation of SparseColor for interpolated gradients from
    sparsely separated 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).
