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.

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).
