+2020-12-26 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * version.sh: Updates in preparation for the 1.3.36 release.
+
+ * bootstrap: Fix config.guess and config.sub download URLs.
+
+2020-12-25 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * design/pixel-cache.dot: Fix reported syntax errors.
+
+ * coders/mpc.c (ReadMPCImage): Report correct exception reason.
+
+ * coders/miff.c (ReadMIFFImage): Arbitrarily limit the number of
+ header keywords to avoid DOS attempts.
+ (ReadMIFFImage): Finish updates to use resource-limited memory
+ allocator.
+ (WriteMIFFImage): Finish updates to use resource-limited memory
+ allocator.
+
+ * coders/mpc.c (ReadMPCImage): Arbitrarily limit the number of
+ header keywords to avoid DOS attempts. Fixes oss-fuzz 28956
+ "Timeout - coder_MPC_fuzzer".
+
+2020-12-24 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/render.c (AffineEdge): Use MagickDoubleToLong();
+
+ * magick/utility.c (MagickDoubleToLong): New private function to
+ convert a 'double' to a 'long' with the minimum amount of harm.
+
+ * magick/segment.c (Classify): Remove variables from function
+ global scope that don't need outer scope.
+
+ * coders/jp2.c: JasPer changed its jas_stream_ops_t callback
+ interfaces in releases 2.0.19 and 2.0.20. Revert to providing the
+ older interfaces by default, but use a
+ MAGICK_JP2_NEW_STREAM_INTERFACE pre-processor definition to
+ support selecting the new interfaces. We don't know how to
+ usefully tell the JasPer version at compile time! Luckily, using
+ the older interfaces only causes a compiler warning rather than a
+ run-time issue.
+
+ * coders/mac.c (ReadMACImage): Use size_t type for 'ldblk' to
+ avoid possible overflow.
+
+2020-12-23 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * NEWS.txt: Update the news to the date December 23, 2020.
+
+2020-12-22 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/image.c (AllocateImage): Satisfy conditions for
+ DestroyImage() as soon as possible and use it for clean-up on
+ error. Added more error checks.
+ (CloneImage): Satisfy conditions for DestroyImage() as soon as
+ possible and use it for clean-up on error. Don't attempt to copy
+ colormap if colors is zero. Added more error checks.
+ (DestroyImage): Assure that we can destroy a partially-constructed
+ Image.
+
+ * magick/effect.c (BlurImage): Fix null pointer dereference if
+ image failed to be created.
+ (DespeckleImage): Fix null pointer dereference if image failed to
+ be created.
+ (EnhanceImage): Fix null pointer dereference if image failed to be
+ created.
+ (GaussianBlurImage): Fix null pointer dereference if image failed
+ to be created.
+ (MedianFilterImage): Fix null pointer dereference if image failed
+ to be created.
+ (MotionBlurImage): Fix null pointer dereference if image failed to
+ be created.
+ (ReduceNoiseImage): Fix null pointer dereference if image failed to
+ be created.
+ (ShadeImage): Fix null pointer dereference if image failed to be
+ created.
+ (SharpenImage): Fix null pointer dereference if image failed to be
+ created.
+ (SpreadImage): Fix null pointer dereference if image failed to be
+ created.
+
+2020-12-21 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * coders/jp2.c (BlobWrite): Update Jasper stream OPs callback
+ function signatures to exactly match latest jas_stream_ops_t
+ definition. This avoids an annoying warning when using Jasper
+ 2.0.23 but now causes annoying warnings when using 2.0.12 or
+ 1.900.1. There does not appear to be a useful way to determine the
+ Jasper numeric version (only a C string is available) from its
+ header files.
+
+ * magick/decorate.c (FrameImage): Skip attempting to render top or
+ bottom of ornamental border if its height is zero.
+
+ * magick/image.c (CloneImage): Set image signature right away in
+ case it needs to be destroyed while it is being constructed.
+
+ * wand/drawtest.c (main): MagickGetFilename() allocates a new
+ string so make sure to free it.
+
+ * tests/constitute.c (main): Destroy ExceptionInfo to avoid memory
+ leak if an exception was thrown.
+
+ * magick/effect.c (EdgeImage): Fix null pointer dereference if
+ edge image failed to be created.
+
+ * magick/compress.c (HuffmanEncode2Image): Fix error handling
+ issues.
+
+ * magick/command.c (CompareImageCommand): Fix memory leaks when an
+ input image failed to be read.
+ (CompositeImageCommand): Fix memory leaks when an input image
+ failed to be read.
+
+ * coders/fax.c (WriteFAXImage): Fix error handling.
+
+ * coders/mpc.c (ReadMPCImage): Use correct deallocator for page
+ geometry. Fixes oss-fuzz 28853 "Heap-buffer-overflow READ {*} -
+ _MagickReallocateResourceLimitedMemory".
+
+2020-12-20 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * coders/yuv.c: Use resource-limited memory allocator.
+
+ * coders/xwd.c: Use resource-limited memory allocator.
+
+ * coders/xpm.c: Use resource-limited memory allocator.
+
+ * coders/xcf.c: Use resource-limited memory allocator.
+
+ * coders/xbm.c: Use resource-limited memory allocator.
+
+ * coders/wpg.c: Use resource-limited memory allocator.
+
+ * coders/viff.c: Use resource-limited memory allocator.
+
+ * coders/vicar.c: Use resource-limited memory allocator.
+
+ * coders/uil.c: Use resource-limited memory allocator.
+
+ * coders/txt.c: Use resource-limited memory allocator.
+
+ * coders/topol.c: Use resource-limited memory allocator.
+
+ * coders/tim.c: Use resource-limited memory allocator.
+
+ * coders/tiff.c: Use resource-limited memory allocator.
+
+ * coders/tga.c: Use resource-limited memory allocator.
+
+ * coders/sun.c: Use resource-limited memory allocator.
+
+ * coders/sgi.c: Use resource-limited memory allocator.
+
+ * coders/sfw.c: Use resource-limited memory allocator.
+
+ * coders/rle.c: Use resource-limited memory allocator.
+
+ * coders/rla.c: Use resource-limited memory allocator.
+
+ * coders/rgb.c: Use resource-limited memory allocator.
+
+ * coders/psd.c: Use resource-limited memory allocator.
+
+ * coders/ps3.c: Use resource-limited memory allocator.
+
+ * coders/ps2.c: Use resource-limited memory allocator.
+
+ * coders/pnm.c: Use resource-limited memory allocator.
+
+ * coders/pdf.c: Use resource-limited memory allocator.
+
+ * coders/pdb.c: Use resource-limited memory allocator.
+
+ * coders/pcl.c: Use resource-limited memory allocator.
+
+ * coders/pcd.c: Use resource-limited memory allocator.
+
+ * coders/palm.c: Use resource-limited memory allocator.
+
+ * coders/mtv.c: Use resource-limited memory allocator.
+
+ * coders/mpc.c: Use resource-limited memory allocator.
+
+ * coders/meta.c: Use resource-limited memory allocator.
+
+ * coders/map.c: Use resource-limited memory allocator.
+
+ * coders/jpeg.c: Use resource-limited memory allocator.
+
+ * coders/jp2.c: Use resource-limited memory allocator.
+
+ * coders/jnx.c: Use resource-limited memory allocator.
+
+ * coders/icon.c: Use resource-limited memory allocator.
+
+ * coders/hrz.c: Use resource-limited memory allocator.
+
+ * coders/histogram.c: Use resource-limited memory allocator.
+
+ * coders/gray.c: Use resource-limited memory allocator.
+
+ * coders/fpx.c: Use resource-limited memory allocator.
+
+ * coders/emf.c: Use resource-limited memory allocator.
+
+ * coders/dpx.c: Use resource-limited memory allocator.
+
+ * coders/dps.c: Use resource-limited memory allocator.
+
+ * coders/dcm.c: Use resource-limited memory allocator.
+
+ * coders/cut.c: Use resource-limited memory allocator.
+
+ * coders/cmyk.c: Use resource-limited memory allocator.
+
+ * coders/cineon.c: Use resource-limited memory allocator.
+
+ * coders/avs.c: Use resource-limited memory allocator.
+
+ * coders/art.c: Use resource-limited memory allocator.
+
+ * coders/pcx.c: Use resource-limited memory allocator.
+
+ * coders/mac.c: Use resource-limited memory allocator.
+
+ * coders/pict.c: Use resource-limited memory allocator.
+
+ * magick/memory.c (_MagickReallocateResourceLimitedMemory): Add a
+ 'clear' parameter which indicates that freshly allocated memory
+ should be zeroed. Added "Cleared" versions of the private managed
+ memory macros and updated all managed memory macros to exclusively
+ use this function.
+
+2020-12-19 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * Update Automake to 1.16.3 and bootstrap to pick up latest
+ config.guess and config.sub.
+
+2020-12-17 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * coders/miff.c (ImportRLEPixels): Change from C assertion to
+ exception report. Fixes oss-fuzz 28703 "ASSERT · ((quantum_type
+ == IndexQuantum) && (image->storage_class ...".
+ (ReadMIFFImage): Read Gray DirectClass image as PseudoClass so it
+ has a colormap, and we have a RLE decode implementation for it.
+
+2020-12-15 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/paint.c (OpaqueImage): Changing the image storage class
+ is not required.
+
+2020-12-14 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/paint.c (OpaqueImage): Assure that image type is promoted
+ as required based on fill color. Fixes unexpected results
+ discovered by Stuart McDonagh and reported via the
+ graphicsmagick-help mailing list on December 14, 2020.
+
+2020-12-13 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/render.c (DrawImage): Set '[MVG]' image attribute at
+ appropriate places outside of DrawImage() since DrawImage()
+ sometimes recurses into itself, trashing the image attribute. One
+ example of recursion is in the text annotation code.
+
+ * coders/svg.c (ReadSVGImage): Properly support 'ping' mode so
+ 'identify' works as expected.
+
+ * magick/render.c (InsertAttributeIntoInputStream): Provide a more
+ useful diagnostic for when a "use" or "class" argument id is not
+ defined.
+
+2020-12-12 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/render.c (DrawImage): Fix regression when parsing "mask"
+ which was added by changeset 16305:f33a0fb3d8e4 on July 15, 2020
+ since the last formal release. This impacts MVG and SVG.
+
+2020-12-08 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * www/INSTALL-unix.rst: Document the '--disable-compressed-files'
+ configure option, which was added on July 15th.
+
+2020-12-06 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/magic.c: Don't send files which test positive for PCL to
+ the HPGL delegate, which is normally 'hp2xx'. Fixes SourceForge
+ bug 607 "Slow to convert HP PCL printer data".
+
+2020-12-05 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/render.c (DrawImage): Use unique image attribute space
+ for MVG symbols. Fixes oss-fuzz 28111 "Timeout -
+ coder_MVG_fuzzer", oss-fuzz 28170 "Stack-overflow - DrawImage",
+ and oss-fuzz 28292 "Integer-overflow - DrawPolygonPrimitive".
+
+2020-12-04 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/render.c (DrawImage): Verify that affine scaling factors
+ are not zero. Fixes oss-fuzz 28293 "Divide-by-zero -
+ InverseAffineMatrix".
+ (DrawPolygonPrimitive): Thread error status check was at wrong
+ scope, resulting in code executing when it should have quit.
+
+2020-12-03 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/magick_types.h.in: Stop trying to define PTRDIFF_MAX.
+
+2020-11-29 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/magick_types.h.in: Provide PTRDIFF_MAX for Visual Studio
+ if it is missing.
+
+ * fuzzing/oss-fuzz-build.sh: Disable old JPEG support in libtiff.
+
+ * coders/mat.c (ReadMATImage): Use resource-limited memory
+ allocator.
+ (WriteMATLABImage): Use resource-limited memory allocator.
+
+2020-11-28 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * NEWS.txt: Update the news to the date November 28, 2020.
+
+ * coders/png.c (ReadOneJNGImage): Verify and enforce
+ Alpha_compression_method values. Request that color and alpha
+ decoders return just one frame. Force decoder format to disable
+ auto-detection. Assume that coder messed up and might have
+ returned more than one frame. Fixes oss-fuzz 28013 "Indirect-leak
+ . MagickMalloc".
+
+ * magick/memory-private.h (MagickReallocateResourceLimitedMemory):
+ Fix typo in macro definition which resulted in a memory
+ reallocation leak!
+
+ * Magick++/lib/Magick++/Drawable.h: Decided to continue using
+ std::unary_function if C++ version is less than C++'17 since
+ otherwise it may be changing an interface.
+
+2020-11-27 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * coders/gif.c (ReadGIFImage): Use resource-limited memory
+ allocator when reading the comment extension.
+
+ * Magick++/lib/Magick++/Drawable.h: Remove inheritance from
+ std::unary_function, which was removed in C++'17.
+
+ * coders/webp.c (ReadWEBPImage): Use resource-limited memory
+ allocator.
+ (WriteWEBPImage): Use resource-limited memory allocator.
+
+ * coders/jbig.c (WriteJBIGImage): Use resource-limited memory
+ allocator.
+
+ * coders/fits.c (ReadFITSImage): Use resource-limited memory
+ allocator.
+ (WriteFITSImage): Use resource-limited memory allocator.
+
+ * coders/dib.c (ReadDIBImage): Use resource-limited memory
+ allocator.
+ (WriteDIBImage): Use resource-limited memory allocator.
+
+ * coders/bmp.c (ReadBMPImage): Use resource-limited memory
+ allocator.
+ (WriteBMPImage): Use resource-limited memory allocator.
+
+2020-11-26 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * coders/tiff.c (ReadTIFFImage): Improve RGBATiledMethod progress
+ monitor so it reports more steps.
+ (ReadTIFFImage): Improve TiledMethod progress monitor so it
+ reports more steps.
+
+ * fuzzing/utils.cc (class MagickState): Enable tracing of
+ exception events in order to help discover the origin of errors.
+ If too much output comes out, then this will be removed.
+
+ * magick/render.c (ConvertPathToPolygon): Attempt to fix leak of
+ 'points' on memory allocation failure.
+
+2020-11-25 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/render.c (ConvertPathToPolygon): Make sure not to leak
+ points from added Edge. Fixes oss-fuzz 27608 "Direct-leak in
+ _MagickReallocateResourceLimitedMemory".
+ (DrawDashPolygon): Place an aribrary limit on stroke dash polygon
+ unit maximum length in order to avoid possibly rendering
+ "forever". Addresses oss-fuzz 24236 "Timeout in
+ coder_MVG_fuzzer".
+
+2020-11-23 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/render.c (DrawPolygonPrimitive): Try to minimize the
+ impact of too many threads due to replicated data until such time
+ as the data structures can be re-designed to directly support
+ threading.
+
+2020-11-21 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * www/Hg.rst: Describe how to clone the repository from
+ SourceForge using the ssh protocol rather than https.
+
+ * coders/ps.c (WritePSImage): Fix problem when writing PseudoClass
+ image with a colormap larger than two entries as bilevel.
+ Previous implementation was assuming that the colormap would only
+ include two entries for a monochrome image, but many entries may
+ exist in the colormap which were never used. Fixes SourceForge
+ issue #635 "gm convert failure from .pgm to .eps".
+
+2020-11-20 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * fuzzing/utils.cc (class MagickState): Set DiskResource limit to
+ zero so that pixel cache won't spill over to using temporary
+ files.
+
+2020-11-16 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * NEWS.txt: Update the news to the date November 16, 2020.
+
+2020-11-15 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * coders/svg.c (ReadSVGImage): Fix memory leak due to CDATA block,
+ and some other possible small leaks.
+
+ * magick/magick.c (InitializeMagickEx): Set C pre-processor
+ definition USE_GLIBC_MTRACE to 1 in order to enable Linux mtrace
+ support.
+
+ * magick/render.c (ConvertPathToPolygon): Fix memory leak upon
+ memory reallocation failure. Addresses oss-fuzz 27351
+ "Direct-leak in _MagickReallocateResourceLimitedMemory".
+
+ * magick/memory.c (_MagickReallocateResourceLimitedMemory): Return
+ pointer to the allocation similar to realloc() and do not
+ automatically free existing memory upon allocation failure.
+
+2020-11-08 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * common.shi.in: Apply some resource limits while running the test
+ suite.
+ (Q8_MEMORY_LIMIT): Set the test suite memory limit to 128MB for
+ Q8, or 256MB for Q16, or 512MB for the Q32 build.
+ (MAGICK_LIMIT_DISK): Set the test suite disk space limit to 0 to
+ avoid spilling over into disk files when the memory limit runs
+ out.
+
+ * coders/miff.c (WriteMIFFImage): Update to use resource-limit
+ respecting memory allocators.
+
+2020-11-07 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * coders/miff.c (ReadMIFFImage): Update to use resource-limit
+ respecting memory allocators.
+
+ * magick/render.c (DrawImage): Update to use resource-limit
+ respecting memory allocators.
+
+ * magick/memory.c (_MagickReallocateResourceLimitedMemory): Add
+ new private interfaces for allocating private memory while
+ respecting resource limits.
+
+2020-10-25 Bob Friesenhahn <bfriesen@bobsdell>
+
+ * magick/render.c (DrawImage): Reject pattern image with a
+ dimension of zero. Fixes oss-fuzz issue 26382
+ "graphicsmagick:coder_MVG_fuzzer: Floating-point-exception in
+ DrawPrimitive".
+
+2020-10-15 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/constitute.c (ConstituteImage): Set image depth
+ appropriately based on the storage size specified by StorageType
+ and QuantumDepth.
+
+2020-10-11 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/render.c (DrawPrimitive): Use DestroyImageList() to
+ destroy composite_image since it may be a list. Fixes oss-fuzz
+ 25247 "Indirect-leak in MagickMalloc".
+ (DrawPrimitive): Add ImageInfo properties to request only
+ returning the first frame if the in-line image is a list. Also,
+ add a missing DestroyImageList() request if multiple-frames were
+ returned.
+
+ * magick/transform.c (TransformImage): Use ReplaceImageInList()
+ replace transformed image in list.
+
+ * magick/list.c (ReplaceImageInList): Remove previous and next
+ references from removed image before destroying it.
+
+ * magick/render.c (DrawClipPath): Remove break statement so that
+ added clip-mask image is initialized properly and rendered-on as
+ expected. Thanks to László Böszörményi for reporting this problem
+ prior to release.
+
+2020-10-03 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * configure.ac (AC_PROG_CC_STDC): AC_PROG_CC_STDC is no longer
+ required since AC_PROG_CC now provides its useful function.
+ AC_PROG_CC_STDC is marked as obsolete after Autoconf 2.69.
+ Quote all arguments to m4 macros.
+
+2020-09-28 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * configure.ac: Update syntax to avoid using deprecated syntax
+ according to Autoconf 2.69.
+
+2020-09-21 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * coders/webp.c (ReadWEBPImage): Use SetImageProfile() rather than
+ AppendImageProfile().
+
+2020-09-20 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * wand/magick_wand.c (MagickSetSamplingFactors): Correct
+ formatting of sampling factors string. Fixes SourceForge issue
+ 633 "MagickSetSamplingFactors() API mismatch - comma separated
+ values instead of 1x1 ".
+
+2020-09-14 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/render.c (DrawPrimitive): Improve error checking related
+ to ImagePrimitive.
+
+ * magick/resize.c (ResizeImage): If CloneImage() of resize_image
+ to source_image fails then free source_image allocation before
+ returning in order to prevent memory leak.
+
+ * magick/image.c (CloneImage): Free clone_image allocation if
+ ImgExtra allocation fails in order to prevent memory leak. Fixes
+ oss-fuzz 25342 "Indirect-leak in MagickMalloc".
+ (SetImageOpacity): SetImageOpacity() now returns error status
+ since it is possible for it to fail.
+
+2020-09-13 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * coders/tiff.c (ReadTIFFImage): Ignore corrupt whitepoint and
+ primary chromaticities tags. Fixes oss-fuzz issue 25507
+ "Divide-by-zero in DoubleToRational". The divide by zero is
+ actually in libtiff, but the bad values from the input file were
+ propagated through GraphicsMagick.
+
+2020-09-09 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/analyze.c (GetImageBoundingBox): Use solution proposed by
+ Troy Patteson to solve SourceForge issue 345 "MagickTrimImage with
+ extreme fuzz can produce image with negative width".
+
+2020-08-16 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * coders/tiff.c (ReadTIFFImage): Apply the same resource limits to
+ TIFF tile sizes as apply to the image itself. Fixes oss-fuzz
+ issues 24523 "Timeout in coder_TIFF_fuzzer" and 24810 "Timeout in
+ coder_PTIF_fuzzer".
+
+2020-08-13 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * configure.ac: Add --without-gdi32 configure option to support
+ disabling use of the Microsoft Windows gdi32 library if it is not
+ wanted.
+
+2020-08-12 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * configure.ac: Remove the assumption that a native Windows build
+ means that Ghostscript may be available so that MinGW tests which
+ depend on Ghostcript are attributed proper XFAIL status by the
+ test suite.
+
+2020-08-10 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/magick.c (MagickCondSignal): Explicitly initialize 'oact'
+ prior to calling sigaction() in order to attempt to surmount
+ apparent oss-fuzz framework issue.
+
+2020-08-09 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/delegate.c, magick/magick.c, magick/nt_base.c: Fix
+ compilation errors under MinGW when Ghostscript support is
+ disabled.
+
+2020-08-08 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/nt_base.c: Fix compilation issue noticed under MinGW.
+
+ * magick/render.c (DrawImage): Handle the case that
+ ExtractTokensBetweenPushPop() can return NULL. Fixes oss-fuzz
+ 24659 "Null-dereference READ in DrawImage".
+
+ * magick/magick.c (MagickCondSignal): Re-implement to handle the
+ case where a new-style 'siginfo' signal handler was previously
+ registered, as well as the legacy type. This may address oss-fuzz
+ 24690 "Use-of-uninitialized-value in MagickCondSignal".
+
+2020-07-26 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * wand/drawtest.c: Use structured error handling and report all
+ output to stderr so it does not screw up TAP tests.
+
+ * magick/render.c (DTOLONG_MIN): Correct 32-bit definition of
+ DTOLONG_MIN.
+
+ * wand/wandtests.tap: Wand drawtest requires FreeType.
+
+ * NEWS.txt: Update with changes up to 2020-07-26.
+
+ * VisualMagick/magick/magick_config.h.in (HasGS): Default HasGS to
+ enabled.
+
+ * configure.ac: Add a --without-gs configure option to disable
+ reading PS, EPS, and PDF formats via an external Ghostscript
+ delegate program. This is intended as an absolute security
+ measure for sites that want to be assured to avoid executing
+ Ghostscript even though it is installed on the system. Removal of
+ PS and PDF reading support breaks reading other formats which are
+ handled by executing an external program to first convert to PS or
+ PDF formats.
+
+ * magick/delegate.c (InvokePostscriptDelegate): Use HasGS to
+ enable use of the Ghostscript delegate. Change the existing
+ legacy HasGS ifdefs to HasGSLIB.
+
+2020-07-23 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * coders/tiff.c (WriteTIFFImage): Fix compilation error when
+ COMPRESSION_WEBP is not defined.
+
+2020-07-20 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * configure.ac: Fix enableval syntax for
+ --disable-compressed-files.
+
+2020-07-19 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/command.c (CompareImageCommand): Merge changeset by
+ 谢致邦 (XIE Zhibang) which adds 'matte' support to the compare
+ command. However, substantially reduce the amount of changes
+ by avoiding adding a new public function. Documentation
+ regarding how 'compare' uses this option is also added.
+
+ * magick/command.c: Merge changeset by谢致邦 (XIE Zhibang)
+ regarding Some duplicate "verbose" should be "version".
+
+ * configure.ac, magick/blob.c: Merge changeset by Przemysław
+ Sobala regarding "Configure: add --with(out)-compressed-files
+ option". The configure option was changed to
+ --disable-compressed-files during the merge since it is more
+ appropriate.
+
+2020-07-15 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * NEWS.txt: Update with changes up to 2020-07-15.
+
+ * magick/render.c (DrawImage): Improve error handling so errors
+ are returned when they should be. Fixes oss-fuzz 24117
+ "Stack-overflow in DrawImage" and oss-fuzz 24126 "Timeout in
+ coder_MVG_fuzzer". Restore the original behavior of
+ DrawClipPath() when there is no matching clip-path attribute.
+
+2020-07-12 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * NEWS.txt: Update with changes up to 2020-07-12.
+
+2020-07-11 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/xwindow.c (MagickXVisualColormapSize): Fix UBSAN integer
+ overflow warning.
+
+ * magick/render.c (DrawClipPath): Report only a warning if there
+ is no clip mask.
+ (ExtractTokensBetweenPushPop): Verify that the expected/required
+ pop statement is indeed found. Fixes oss-fuzz 23498 "Timeout in
+ coder_MVG_fuzzer".
+
+2020-06-14 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/constitute.c (ReadImage): Improve error handling related
+ to ImageToFile().
+
+ * magick/image.c (SetImageInfo): Improve error handling related to
+ ImageToFile().
+
+ * coders/mat.c: Check MagickFindRawImageMinMax() return status.
+
+ * magick/constitute.c (MagickFindRawImageMinMax): Verify that the
+ original seek position was restored.
+
+2020-06-13 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/render.c (DrawImage): Apply stricter range limits when
+ converting a double to a long in order to avoid integer overflow.
+ Fixes oss-fuzz 23304 "Integer-overflow in DrawImage".
+ (DrawClipPath): If there is no matching clip-path attribute then
+ return an informative error. Fixes oss-fuzz 23187 "Stack-overflow
+ in DrawImage" which is actually a case of DrawImage() /
+ DrawClipPath() recursion.
+
+2020-06-06 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * coders/wpg.c (UnpackWPGRaster): Fix oss-fuzz 23042
+ "Heap-buffer-overflow in ImportGrayQuantumType" and oss-fuzz
+ "Heap-buffer-overflow in InsertRow" which are both from the same
+ cause.
+
+2020-06-01 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/pixel_cache.c (ClipCacheNexus): Change x and y variables
+ to unsigned type.
+
+2020-05-31 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * coders/tiff.c (WriteTIFFImage): WebP compression only supports a
+ depth of 8. Fixes oss-fuzz 22560 "Use-of-uninitialized-value in
+ GammaToLinear".
+
+2020-05-30 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * coders/wpg.c (ReadWPGImage): Terminate reading when a pixel
+ cache resource limit is hit rather than moving on to heap buffer
+ overflow. Fixes oss-fuzz 20045, 20318, 21956
+
+ * coders/png.c (ReadMNGImage): If the image width is 1, then X
+ magnification is done by by simple pixel replication. If the
+ image height is 1, then Y magnification is done by simple pixel
+ replication. Fixes oss-fuzz issue 19025 "Heap-buffer-overflow in
+ ReadMNGImage" and oss-fuzz issue 19026 "ASSERT: yy < (long)
+ large_image->rows". It appears that CERT has assigned
+ CVE-2020-12672 for oss-fuzz issue 19025. Note that the heap
+ overwrite is only one byte.
+
+2020-05-01 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * NEWS.txt: Update with changes up to 2020-04-23.
+
+2020-04-23 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * coders/dpx.c (ReadDPXImage): Support dpx:swap-samples-read
+ define which behaves similar to dpx:swap-samples, but is only
+ applied when reading. This provides for use when there is both
+ reading and writing in the same operation.
+ (WriteDPXImage): Support dpx:swap-samples-write define which
+ behaves similar to dpx:swap-samples, but is only applied when
+ writing. This provides for use when there is both reading and
+ writing in the same operation.
+
+2020-04-18 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick: Fix remaining GCC 10 warnings.
+
+2020-04-17 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/transform.c (GetImageMosaicDimensions): Mark function as pure.
+
+ * magick/effect.c (GetNonpeakMedianList): Mark function as pure.
+
+ * coders/fits.c (InsertRowHDU): Fix scary-sounding GCC 10 warning,
+ which is actually benign.
+
+ * config/config.sub: Update to latest config.sub
+
+ * config/config.guess: Update to latest config.guess.
+
+ * Makefile.am: Update to Automake 1.16.2
+
+2020-04-04 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * coders/dpx.c (ReadRowSamples): Simplify 10-bit packed decoding.
+ (WriteRowSamples): Simplify 10-bit packed encoding.
+
+ * coders/locale.c (ReadConfigureFile): Ignore comment element if
+ it was not found or is too short.
+
+ * magick/pixel_cache.c (ReadCacheIndexes): If SetNexus() has
+ previously failed to allocate the staging buffer and thus reported
+ an exception to the user, then ReadCacheIndexes() should report an
+ error rather than blundering into copying indexes data to a null
+ pointer.
+
+ * magick/effect.c (AdaptiveThresholdImage): Assure that we don't
+ attempt to write to output pixels if they have not been selected
+ yet.
+
+ * magick/utility.c (ExpandFilenames): Properly handle NULL
+ filelist and NULL filelist entries.
+ (GetGeometry): Assure that there is no one-character stack read
+ overflow when reading the geometry buffer.
+
+2020-03-29 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * fuzzing/oss-fuzz-build.sh: Restore xz to oss-fuzz build due to
+ build problems getting worked out.
+
+2020-03-28 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * fuzzing/oss-fuzz-build.sh (MAGICK_LIBS): Remove mention of
+ liblzma.a in the oss-fuzz build until its build problems get
+ worked out.
+
+2020-03-27 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * fuzzing/oss-fuzz-build.sh: Skip building xz in the oss-fuzz
+ build until its build problems get worked out.
+
+2020-03-25 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/log.c (InitializeLogInfoPost): Don't load log.mgk if
+ logging is already configured to use MethodOutput.
+
+2020-03-24 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/log.c (InitializeLogInfoPost): Mark that logging is
+ configured, regardless of if "log.mgk" was discovered.
+
+2020-03-23 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * VisualMagick/magick/magick_config.h.in: ProvideDllMain is now
+ disabled by default since it causes InitializeMagick() to be
+ invoked prior to when the program's main() routine is called,
+ thereby blocking configuration activities or use of
+ InitializeMagickEx(). With this change it is even more imperative
+ that InitializeMagick() be explicitly invoked by all programs
+ using GraphicsMagick.
+
+ * magick/log.c (LogMagickEventList): Always use/respect the
+ configured log format as might be obtained from "log.mgk" or
+ SetLogDefaultFormat().
+
+ * magick/utility.c (MagickFormatString): Return the size of the
+ formatted string.
+ (MagickFormatStringList): Return the size of the formatted string.
+ (FormatString): Return the size of the formatted string.
+ (FormatStringList): Return the size of the formatted string.
+
+2020-03-22 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * www/api/types.rst: Improved types documentation and added more
+ hyperlinks.
+
+ * scripts/format_c_api_doc.py: Add hyperlinks for 'LogMethod' and
+ 'LogOutputType' type documentation.
+
+ * Magick++/lib/Image.cpp (SetLogDefaultEventType): New C++ function to
+ forward to C interface.
+ (SetLogDefaultGenerations): New C++ function to forward to C
+ interface.
+ (SetLogDefaultLimit): New C++ function to forward to C interface.
+ (SetLogDefaultFormat(): New C++ function to forward to C
+ interface.
+ (SetLogDefaultLogMethod): New C++ function to forward to C
+ interface.
+ (SetLogDefaultFileName): New C++ function to forward to C
+ interface.
+ (SetLogDefaultOutputType): New C++ function to forward to C
+ interface.
+
+ * magick/log.c (SetLogDefaultEventType): New function to support
+ setting the default set of events which will result in a log
+ event.
+ (SetLogDefaultGenerations): New function to specify the maximum
+ number of log files maintain before circulating back to overwrite
+ the first name.
+ (SetLogDefaultLimit): New function to specify the maximum number
+ of logging events which may occur before creating a new log file.
+ (SetLogDefaultLogMethod): New function to provide a call-back
+ function to be invoked for each log event when the logging method
+ type is MethodOutput.
+ (SetLogDefaultOutputType): New function to set the logging output
+ destination.
+ (SetLogDefaultFormat): New function to provide the format of the
+ logging output.
+ (SetLogDefaultFileName): New function to provide the file name,
+ or file path, to be written to for each log event.
+ (InitializeLogInfo): If a default logging callback was provided
+ via SetLogDefaultLogMethod() then skip searching for "log.mgk".
+ In this case it is assumed that the API user has already changed
+ any other logging default which would have been updated by
+ "log.mgk" so it would be harmful to search for it, or read from
+ it.
+
+2020-03-10 Troy Patteson <troyp@ieee.org>
+
+ * coders/png.c (WriteOnePNGImage): Don't skip optional Exif
+ identifier code if it isn't present.
+
+2020-03-08 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/pixel_cache.c (ModifyCache): Destroy clone_image.cache if
+ ClonePixelCache() reports failure. Fixes oss-fuzz 20871
+ "graphicsmagick:coder_MVG_fuzzer: Direct-leak in
+ MagickMallocAligned".
+
+ * magick/log.c (LogMagickEventList): Prepare source module base
+ name more efficiently. Move MethodOutput implementation to the
+ front so it is not filtered by other active blocks.
+ (LogMagickEventList): Cache broken-down time structure in LogInfo
+ and recompute only when needed.
+
+2020-03-07 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/resize.c (HorizontalFilter): Improve tracing.
+ (VerticalFilter): Improve tracing.
+ (ResizeImage): Improve tracing.
+
+ * www/api/api.rst: Add functions from log.c and render.c.
+
+ * magick/log.c (DestroyLogInfo): DestroyLogInfo is no longer
+ marked MagickExport.
+
+2020-03-04 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * magick/api.h: Add "magick/enum_strings.h" to API headers.
+ Requested by Przemysław Sobala via posting to the
+ graphicsmagick-help mailing list on 2020-02-27.
+
+ * scripts/html_fragments.py: Automatically generate HTML footer
+ content and include commented HTML fragment which may be
+ substituted with SF tracker for SourceForge web site.
+
2020-02-23 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
* version.sh: Updates in preparation for the 1.3.35 release.
- Merge changes for 1.3.35 into GraphicsMagick-1_3 branch.
* www/INSTALL-windows.rst: Update Windows installation and build
documentation.
GraphicsMagick license. For convenience, when GraphicsMagick is
bundled with (or compiled with) "delegate" libraries, a copy of the
licenses for these libraries is provided in a "licenses" directory.
-
---------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2018
// This may look like C code, but it is really -*- C++ -*-
//
-// Copyright Bob Friesenhahn, 1999-2017
+// Copyright Bob Friesenhahn, 1999-2020
//
// Implementation of Image
//
}
}
+ //
+ // Logging defaults initialization routines. These are
+ // pass-throughs into the equivalent C library functions. The
+ // purpose of these routines is to provide a program with an
+ // alternative to the default "log.mgk" based initialization.
+ //
+
+// Specify default events which will result in a log event (comma-comma-separated list)
+void MagickDLLDecl Magick::SetLogDefaultEventType(const std::string &events_)
+{
+ MagickLib::SetLogDefaultEventType(events_.c_str());
+}
+
+// Specify default maximum log file generations before overwriting the first name.
+void MagickDLLDecl Magick::SetLogDefaultGenerations(const unsigned int generations_)
+{
+ MagickLib::SetLogDefaultGenerations(generations_);
+}
+
+// Specify default maximum number of logging events before creating a new log file.
+void MagickDLLDecl Magick::SetLogDefaultLimit(const unsigned int limit_)
+{
+ MagickLib::SetLogDefaultLimit(limit_);
+}
+
+// Specify the file name, or file path, to be written to for each log event
+void MagickDLLDecl Magick::SetLogDefaultFileName(const std::string &filename_)
+{
+ MagickLib::SetLogDefaultFileName(filename_.c_str());
+}
+
+// Specify default log format using special format characters as used by "log.mgk"
+void MagickDLLDecl Magick::SetLogDefaultFormat(const std::string &format_)
+{
+ MagickLib::SetLogDefaultFormat(format_.c_str());
+}
+
+// Specify default C-language call-back function to be invoked for each log event
+// FIXME: Develop an improved interface more suitable for C++
+void MagickDLLDecl Magick::SetLogDefaultLogMethod(const Magick::LogMethod method_)
+{
+ MagickLib::SetLogDefaultLogMethod(method_);
+}
+
+// Specify default logging output type/destination.
+void MagickDLLDecl Magick::SetLogDefaultOutputType(const Magick::LogOutputType output_type_)
+{
+ MagickLib::SetLogDefaultOutputType(output_type_);
+}
+
// C library initialization routine
void MagickDLLDecl Magick::InitializeMagick(const char *path_)
{
const Coordinate& right_ );
//
- // Base class for all drawable objects
+ // Base class for all drawable objects (used to inherit from
+ // std::unary_function, but it was removed in C++'17).
//
- //struct MagickDLLDecl std::unary_function<MagickLib::DrawContext,void>;
- class MagickDLLDecl DrawableBase:
- public std::unary_function<MagickLib::DrawContext,void>
+ // https://en.cppreference.com/w/cpp/utility/functional/unary_function
+ // https://en.cppreference.com/w/cpp/utility/functional/function
+ //
+ class MagickDLLDecl DrawableBase
+#if __cplusplus < 201703L
+ : public std::unary_function<MagickLib::DrawContext,void>
+#endif // if __cplusplus < 201703L
{
public:
// Constructor
// This may look like C code, but it is really -*- C++ -*-
//
-// Copyright Bob Friesenhahn, 1999 - 2017
+// Copyright Bob Friesenhahn, 1999 - 2020
//
// Definition of Image, the representation of a single image in Magick++
//
int MagickDLLDecl operator <= ( const Magick::Image& left_,
const Magick::Image& right_ );
+ //
+ // Logging defaults initialization routines. These are
+ // pass-throughs into the equivalent C library functions. The
+ // purpose of these routines is to provide a program with an
+ // alternative to the default "log.mgk" based initialization.
+ //
+
+ // Specify default events which will result in a log event (comma-separated list)
+ void MagickDLLDecl SetLogDefaultEventType(const std::string &events_);
+
+ // Specify default maximum log file generations before overwriting the first name.
+ void MagickDLLDecl SetLogDefaultGenerations(const unsigned int generations_);
+
+ // Specify default maximum number of logging events before creating a new log file.
+ void MagickDLLDecl SetLogDefaultLimit(const unsigned int limit_);
+
+ // Specify the file name, or file path, to be written to for each log event
+ void MagickDLLDecl SetLogDefaultFileName(const std::string &filename_);
+
+ // Specify default log format using special format characters as used by "log.mgk"
+ void MagickDLLDecl SetLogDefaultFormat(const std::string &format_);
+
+ // Specify default C-language call-back function to be invoked for each log event
+ // FIXME: Develop an improved interface more suitable for C++
+ void MagickDLLDecl SetLogDefaultLogMethod(const Magick::LogMethod method_);
+
+ // Specify default logging output type/destination.
+ void MagickDLLDecl SetLogDefaultOutputType(const Magick::LogOutputType output_type_);
+
// C library initialization routine
void MagickDLLDecl InitializeMagick(const char *path_);
// This may look like C code, but it is really -*- C++ -*-
//
-// Copyright Bob Friesenhahn, 1999 - 2018
+// Copyright Bob Friesenhahn, 1999 - 2020
//
// Inclusion of GraphicsMagick headers (with namespace magic)
#if defined(MAGICK_IMPLEMENTATION)
namespace MagickLib
-{
+{ // This header is now also included by magick/api.h
# include "magick/enum_strings.h"
}
#endif
using MagickLib::MirrorVirtualPixelMethod;
using MagickLib::TileVirtualPixelMethod;
+ // Logging related types
+ using MagickLib::LogMethod;
+ using MagickLib::LogOutputType;
+
#if defined(MAGICK_IMPLEMENTATION)
//
// GraphicsMagick symbols used in implementation code
using MagickLib::EnhanceImage;
using MagickLib::EqualizeImage;
using MagickLib::ExceptionInfo;
+ using MagickLib::ExceptionType;
using MagickLib::ExecuteModuleProcess;
using MagickLib::ExportImagePixelArea;
using MagickLib::ExtentImage;
return _imageInfo->fuzz;
}
-// Enable printing of debug messages from ImageMagick
+// Enable printing of debug messages from GraphicsMagick
void Magick::Options::debug ( bool flag_ )
{
- if(flag_)
+ if (flag_)
{
SetLogEventMask("All");
}
}
bool Magick::Options::debug ( void ) const
{
- if( IsEventLogging() )
+ if ( IsEventLogging() )
{
return true;
}
int main( int /*argc*/, char ** argv)
{
+ // Trace exception events to help diagnose issues.
+ SetLogDefaultEventType("exception");
+
// Initialize GraphicsMagick
InitializeMagick(*argv);
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
@WITH_MAGICK_PLUS_PLUS_TRUE@am__EXEEXT_6 = \
@WITH_MAGICK_PLUS_PLUS_TRUE@ $(MAGICKPP_TEST_SCRIPTS_OPT)
else :; fi
am__post_remove_distdir = $(am__remove_distdir)
GZIP_ENV = --best
+# Exists only to be overridden by the user if desired.
+AM_DISTCHECK_DVI_TARGET = dvi
distuninstallcheck_listfiles = find . -type f -print
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
magick/draw.h \
magick/effect.h \
magick/enhance.h \
+ magick/enum_strings.h \
magick/error.h \
magick/forward.h \
magick/fx.h \
$(WWWAPIDIR)/image.html \
$(WWWAPIDIR)/import.html \
$(WWWAPIDIR)/list.html \
+ $(WWWAPIDIR)/log.html \
$(WWWAPIDIR)/magick.html \
$(WWWAPIDIR)/memory.html \
$(WWWAPIDIR)/monitor.html \
www/api/image.html \
www/api/import.html \
www/api/list.html \
+ www/api/log.html \
www/api/magick.html \
www/api/memory.html \
www/api/monitor.html \
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
+ *.tar.zst*) \
+ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\
esac
chmod -R a-w $(distdir)
chmod u+w $(distdir)
$(DISTCHECK_CONFIGURE_FLAGS) \
--srcdir=../.. --prefix="$$dc_install_base" \
&& $(MAKE) $(AM_MAKEFLAGS) \
- && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
done
install: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) install-am
-install-exec: install-exec-am
+install-exec: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-am
install-data: install-data-am
uninstall: uninstall-am
uninstall-man: uninstall-man1 uninstall-man4 uninstall-man5
-.MAKE: all check check-am install install-am install-strip
+.MAKE: all check check-am install install-am install-exec \
+ install-strip
.PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles am--refresh \
check check-TESTS check-am check-local clean clean-binPROGRAMS \
clean-libtool clean-local clean-noinstLTLIBRARIES cscope \
cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \
- dist-zip distcheck distclean distclean-compile \
+ dist-zip dist-zstd distcheck distclean distclean-compile \
distclean-generic distclean-hdr distclean-libtool \
distclean-local distclean-tags distcleancheck distdir \
distuninstallcheck dvi dvi-am html html-am info info-am \
GraphicsMagick News
===================
-This file was last updated to reflect changes up to February 23, 2020
+This file was last updated to reflect changes up to December 26, 2020
Please note that this file records news for the associated development
branch and that each development branch has its own NEWS file. See the
.. contents::
:local:
+1.3.36 (December 26, 2020)
+==========================
+
+Special Issues:
+
+* None
+
+Security Fixes:
+
+* GraphicsMagick is participating in Google's oss-fuzz project due to
+ the contributions and assistance of Alex Gaynor. Since February 4
+ 2018, 454 issues have been opened by oss-fuzz (some of which were
+ benign build issues such as SourceForge Mercurial not working
+ correctly) and 7 issues remain open (all of which are marked in an
+ "unreproducible" state). The issues list is available at
+ https://bugs.chromium.org/p/oss-fuzz/issues/list under search term
+ "graphicsmagick". Issues are available for anyone to view and
+ duplicate if they have been in "Verified" status for 30 days, or if
+ they have been in "New" status for 90 days. Please consult the
+ GraphicsMagick ChangeLog file, Mercurial repository commit log, and
+ the oss-fuzz issues list for details.
+
+* WPG: Fixes for heap buffer overflow.
+
+Bug fixes:
+
+* ConstituteImage(): Set image depth appropriately based on the
+ storage size specified by StorageType and QuantumDepth.
+
+* GetImageBoundingBox(): Fix problem that MagickTrimImage with extreme
+ fuzz values could produce an image with negative width.
+
+* ImageToFile(): Improve error handling to avoid possible deferred
+ deletion of temporary files, causing unexpected excessive use of
+ temporary file space.
+
+* JNG: Add validations for alpha compression method values and use
+ this information to enforce decoding using the appropriate
+ sub-format (rather than auto-detecting the format). Also, address
+ memory leaks which may occur if the sub-decoder does something other
+ than was expected.
+
+* MagickCondSignal(): Improvements to conditional signal handler
+ registration (which avoids over-riding signal handlers previously
+ registered by an API user).
+
+* ModifyCache(): Fix memory leak.
+
+* ReadCacheIndexes(): Don't blunder into accessing a null pointer if
+ the using code has ignored a previous error report bubled-up from
+ SetNexus().
+
+* MNG: When doing image scaling and the image width or height is 1
+ then always use simple pixel replication as per the MNG
+ specification.
+
+* MVG: Fixes to 'push clip-path foo' and 'pop clip-path foo' parsing
+ to eliminate a class of malign behavior.
+
+* MVG: Place an aribrary limit on stroke dash polygon unit maximum
+ length in order to avoid possibly rendering "forever".
+
+* PCL: No longer attempt to handle reading HP PCL format via the
+ external 'hp2xx' program since it seems worthless for that task.
+
+* PS: Fix corrupt image when writing PseudoClass image with a colormap
+ larger than two entries as bilevel.
+
+* SVG: Memory leak fixes.
+
+* SVG reader: Now support 'ping' support so the identify command works
+ as expected.
+
+* TIFF: WEBP compression only supports a depth of 8 so force that
+ value.
+
+* Wand MagickSetSamplingFactors(): Correct formatting of sampling
+ factors string.
+
+New Features:
+
+* Logging is now fully programmable.
+
+* DPX format: Support dpx:swap-samples-read define which behaves
+ similar to dpx:swap-samples, but is only applied when reading, as
+ well as dpx:swap-samples-write, which is only applied when
+ writing. This provides for use when there is both reading and
+ writing in the same operation (otherwise the final result was no
+ effect!).
+
+API Updates:
+
+* magick/api.h: Add "magick/enum_strings.h" to API headers.
+
+* New log settings accessor C functions: SetLogDefaultFileName(),
+ SetLogDefaultFormat(), SetLogDefaultOutputType(),
+ SetLogDefaultLogMethod(), SetLogDefaultLimit(),
+ SetLogDefaultGenerations(), SetLogDefaultEventType(). These
+ functions allow a program to set the same parameters which may be
+ set by loading a "log.mgk" function. If a default logging callback
+ was provided via SetLogDefaultLogMethod() such that MethodOutput is
+ used, then the search for a "log.mgk" is avoided entirely.
+
+* New log settings accessor C++ functions: SetLogDefaultFileName(),
+ SetLogDefaultFormat(), SetLogDefaultOutputType(),
+ SetLogDefaultLogMethod(), SetLogDefaultLimit(),
+ SetLogDefaultGenerations(), SetLogDefaultEventType(). These C++
+ functions just pass through to the equivalent C functions and
+ provide the same benefits.
+
+Feature improvements:
+
+* A simple resource-limit respecting memory allocator has been
+ developed for internal use wherever arbitrarily-large amounts of
+ memory might be requested. This will gradually be added wherever it
+ appears to be needed. The memory resource limits are at the overall
+ process level. The MVG/SVG rendering code is updated to use this
+ new allocator. Almost all of the coders (image format
+ readers/writers) have now been updated to use this new allocator.
+ This means that '-limit memory 300MB' would be more complete and
+ meaningful now. Temporary allocations by the image processing
+ algorithms (other than for the images themselves) are still not
+ accounted for in the resource limiting.
+
+* MVG Renderer / DrawImage(): Use resource-limit respecting memory
+ allocators for remaining large memory allocations.
+
+* PNG writer: Don't skip optional Exif identifier code if it isn't present.
+
+* DPX reader/writer: decode/encode of 10-bit packed DPX is now twice
+ as fast due to code simplification.
+
+* TIFF reader: Apply the same resource limits to TIFF tile sizes as
+ apply to the image itself.
+
+Windows Delegate Updates/Additions:
+
+* None
+
+Build Changes:
+
+* configure.ac: Update syntax to avoid using deprecated syntax
+ according to Autoconf 2.69. Also added copious m4 quoting.
+
+* Magick++ Drawable base class no longer uses std::unary_function when
+ compiled using C++'17 or later, since this feature has been removed
+ from the language.
+
+* Support the configure option --disable-compressed-files to disable
+ automatic decompress of gzip and bzip2 compressed files (e.g. files
+ with extension 'gz' or 'bz2', and sometimes 'svgz', but sometimes
+ posing as some other format). It turns out that there are some
+ extremely compressed files (e.g. over 1000x compression ratio) which
+ can take a long time to decompress and produce large temporary
+ files. We currently normally wait for the whole file to be
+ decompressed before decoding it. The only exception is for coders
+ with native 'blob' support and which do not require seeking, and
+ that the user forced forced the format by adding a magick prefix
+ like "DPX:file.dpx" to avoid the automatic file format detection.
+
+* Support the configure option --without-gs to disable reading PS,
+ EPS, and PDF formats via an external Ghostscript delegate program.
+ This corresponds to the HasGS definition in the source code.
+
+* Support the configure option --without-gdi32 to support disabling
+ use of the Microsoft Windows gdi32 library if it is not wanted.
+
+* The Automake-based test suite now applies a memory limit of 128MB
+ for the Q8, or 256MB for the Q16, or 512MB for the Q32 build, as
+ well as setting a disk space limit of 0. The limits place an upper
+ bound on the resources required, while assuring that tests do pass
+ with resource limits applied, while also assuring that disk-based
+ pixel-cache files are not used.
+
+Behavior Changes:
+
+* Previously the formatting settings from "log.mgk" were only used
+ when writing to a file, or to the console, via a file handle. Now
+ the log formatting has been normalized so that the settings provided
+ by "log.mgk" (or SetLogDefaultFormat()) will always be used. It is
+ possible this may result in some formatting changes.
+
+* In the Windows Visual Studio build, the ProvideDllMain option is now
+ disabled by default (can still be enabled) since it causes
+ InitializeMagick() to be invoked prior to when the program's main()
+ routine is called, thereby blocking configuration activities or use
+ of InitializeMagickEx(). With this change it is even more
+ imperative that InitializeMagick() be explicitly invoked by all
+ programs using GraphicsMagick.
+
1.3.35 (February 23, 2020)
==========================
* Improve memory efficiency.
* Use a release process which assures a working product.
* Maintain an accurate ChangeLog.
-
-
----------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2018
);
# This version identifier must match the package version.
-($VERSION) = '1.3.35' =~ /^([\d.]+)/g;
+($VERSION) = '1.3.36' =~ /^([\d.]+)/g;
sub AUTOLOAD {
# This AUTOLOAD is used to 'autoload' constants from the constant()
to read or write Zstd compressed TIFF images. In the future it is
likely that other purposes will be found for Zstd.
-
-
---------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
+++ /dev/null
-tclmagick for Debian
---------------------
-
-If, at some point in the future, GraphicsMagick were to be packaged,
-this could depend on that instead.
-
- -- David N. Welton <davidw@debian.org>, Sun Sep 19 20:45:49 2004
-
-How to build and test a Debian package
---------------------------------------
-
-Build the package:
-
- dpkg-buildpackage -us -uc -b -rfakeroot
- sudo dpkg -i ~/usrc/tclmagick_0.45-1_i386.deb
-
-Test the package:
-
- cd ~/usrc/TclMagick/tests/
- tclsh test-bmp-compare.tcl
- tclsh test-draw.tcl
- tclsh test-pixel.tcl
- tclsh test-wand.tcl
- tclsh tkmagick.tcl
+++ /dev/null
-tclmagick (0.45-1) unstable; urgency=low
-
- * New upstream version.
- * tclmagick_0.44-1(hppa/unstable): FTBFS: cannot find install-sh
-
- -- David N. Welton <davidw@debian.org> Sat, 22 Jan 2005 22:31:58 +0100
-
-tclmagick (0.44-2) unstable; urgency=low
-
- * Use release tarball to generate .deb with.
-
- -- David N. Welton <davidw@debian.org> Sat, 22 Jan 2005 12:15:49 +0100
-
-tclmagick (0.44-1) unstable; urgency=low
-
- * New version.
-
- -- David N. Welton <davidw@debian.org> Mon, 17 Jan 2005 23:08:03 +0100
-
-tclmagick (0.42-1.1) unstable; urgency=low
-
- * NMU
- * Add dependency on tk8.4-dev (Closes: #274668)
- * Remove NEWS file from package, it's empty.
-
- -- Baruch Even <baruch@debian.org> Tue, 4 Jan 2005 01:08:19 +0000
-
-tclmagick (0.42-1) unstable; urgency=low
-
- * New upstream release.
-
- -- David N. Welton <davidw@debian.org> Tue, 21 Sep 2004 11:09:38 +0200
-
-tclmagick (0.41-1) unstable; urgency=low
-
- * Initial Release.
-
- -- David N. Welton <davidw@debian.org> Sun, 19 Sep 2004 20:31:33 +0200
-
+++ /dev/null
-Source: tclmagick
-Section: graphics
-Priority: optional
-Maintainer: David N. Welton <davidw@debian.org>
-Build-Depends: debhelper (>= 4.0.0), fakeroot, libmagick9-dev, tcl8.4-dev, tk8.4-dev
-Standards-Version: 3.6.0
-
-Package: tclmagick
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Description: Tcl bindings for ImageMagick
- TclMagick is a Tcl extension that works with both the GraphicsMagick
- and ImageMagick image manipulation libraries. TkMagick is a small,
- simple extension that lets you pass images back and forth between Tk
- and the TclMagick extension.
+++ /dev/null
-This package was debianized by David N. Welton <davidw@debian.org> on
-Sun, 19 Sep 2004 20:31:33 +0200.
-
-It was downloaded from http://tclmagick.sf.net
-
-Upstream Authors: Rolf Schrödter <Rolf.Schroedter@dlr.de>, David
-Welton <davidw@dedasys.com>
-
-Copyright:
-
-This software is copyrighted 2004 by Rolf Schrödter
-<Rolf.Schroedter@dlr.de> and David N. Welton <davidw@dedasys.com>. The
-following terms apply to all files associated with the software unless
-explicitly disclaimed in individual files.
-
-The authors hereby grant permission to use, copy, modify, distribute,
-and license this software and its documentation for any purpose, provided
-that existing copyright notices are retained in all copies and that this
-notice is included verbatim in any distributions. No written agreement,
-license, or royalty fee is required for any of the authorized uses.
-Modifications to this software may be copyrighted by their authors
-and need not follow the licensing terms described here, provided that
-the new terms are clearly indicated on the first page of each file where
-they apply.
-
-IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
-FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
-ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
-DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE
-IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
-NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
-MODIFICATIONS.
-
-GOVERNMENT USE: If you are acquiring this software on behalf of the
-U.S. government, the Government shall have only "Restricted Rights"
-in the software and related documentation as defined in the Federal
-Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you
-are acquiring the software on behalf of the Department of Defense, the
-software shall be classified as "Commercial Computer Software" and the
-Government shall have only "Restricted Rights" as defined in Clause
-252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the
-authors grant the U.S. Government and others acting in its behalf
-permission to use and distribute the software in accordance with the
-terms specified in this license.
+++ /dev/null
-usr/bin
-usr/sbin
+++ /dev/null
-#!/usr/bin/make -f
-# -*- makefile -*-
-# Sample debian/rules that uses debhelper.
-# GNU copyright 1997 to 1999 by Joey Hess.
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-#
-# Tcl version. Using 8.4 but 8.5 already available
-#
-TCLVERSION=8.4
-
-#
-# GraphicsMagick/ImageMagick Wand library selection.
-
-# GraphicsMagick
-#WAND=GraphicsMagickWand
-
-# ImageMagick
-WAND=Wand
-
-CFLAGS = -Wall -g
-
-ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
- CFLAGS += -O0
-else
- CFLAGS += -O2
-endif
-ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
- INSTALL_PROGRAM += -s
-endif
-
-configure: configure-stamp
-configure-stamp:
- dh_testdir
- # Add here commands to configure the package.
-
- ./configure --with-tcl=/usr/lib/tcl${TCLVERSION}/ --with-tk=/usr/lib/tk${TCLVERSION}/ --with-magick=/usr/bin/${WAND}-config --enable-threads --with-tclinclude=/usr/include/tcl${TCLVERSION}/ --with-tkinclude=/usr/include/tcl${TCLVERSION}/
- touch configure-stamp
-
-
-build: build-stamp
-
-build-stamp: configure-stamp
- dh_testdir
-
- # Add here commands to compile the package.
- $(MAKE)
- #/usr/bin/docbook-to-man debian/tclmagick.sgml > tclmagick.1
-
- touch build-stamp
-
-clean:
- dh_testdir
- dh_testroot
- rm -f build-stamp configure-stamp
-
- # Add here commands to clean up after the build process.
- -$(MAKE) clean
-
- dh_clean
-
-install: build
- dh_testdir
- dh_testroot
- dh_clean -k
- dh_installdirs
-
- # Add here commands to install the package into debian/tclmagick.
- $(MAKE) install DESTDIR=$(CURDIR)/debian/tclmagick
-
-
-# Build architecture-independent files here.
-binary-indep: build install
-# We have nothing to do by default.
-
-# Build architecture-dependent files here.
-binary-arch: build install
- dh_testdir
- dh_testroot
- dh_installchangelogs ChangeLog
- dh_installdocs doc/*
- dh_installexamples
-# dh_install
-# dh_installmenu
-# dh_installdebconf
-# dh_installlogrotate
-# dh_installemacsen
-# dh_installpam
-# dh_installmime
-# dh_installinit
-# dh_installcron
-# dh_installinfo
- dh_installman
- dh_link
- dh_strip
- dh_compress
- dh_fixperms
-# dh_perl
-# dh_python
- dh_makeshlibs
- dh_installdeb
- dh_shlibdeps
- dh_gencontrol
- dh_md5sums
- dh_builddeb
-
-binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install configure
-# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.3 -*- Autoconf -*-
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically 'autoreconf'.])])
-# Copyright (C) 2002-2018 Free Software Foundation, Inc.
+# Copyright (C) 2002-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
[am__api_version='1.16'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version. Point them to the right macro.
-m4_if([$1], [1.16.1], [],
+m4_if([$1], [1.16.3], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.16.1])dnl
+[AM_AUTOMAKE_VERSION([1.16.3])dnl
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# AM_CONDITIONAL -*- Autoconf -*-
-# Copyright (C) 1997-2018 Free Software Foundation, Inc.
+# Copyright (C) 1997-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
Usually this means the macro was only invoked conditionally.]])
fi])])
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# Generate code to set up dependency tracking. -*- Autoconf -*-
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
done
if test $am_rc -ne 0; then
AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
- for automatic dependency tracking. Try re-running configure with the
+ for automatic dependency tracking. If GNU make was not used, consider
+ re-running the configure script with MAKE="gmake" (or whatever is
+ necessary). You can also try re-running configure with the
'--disable-dependency-tracking' option to at least be able to build
the package (albeit without support for automatic dependency tracking).])
fi
# Do all the work for Automake. -*- Autoconf -*-
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
fi
AC_SUBST([install_sh])])
-# Copyright (C) 2003-2018 Free Software Foundation, Inc.
+# Copyright (C) 2003-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
# From Jim Meyering
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# Check to see how 'make' treats includes. -*- Autoconf -*-
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
-# Copyright (C) 1997-2018 Free Software Foundation, Inc.
+# Copyright (C) 1997-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
AC_REQUIRE_AUX_FILE([missing])dnl
if test x"${MISSING+set}" != xset; then
- case $am_aux_dir in
- *\ * | *\ *)
- MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
- *)
- MISSING="\${SHELL} $am_aux_dir/missing" ;;
- esac
+ MISSING="\${SHELL} '$am_aux_dir/missing'"
fi
# Use eval to expand $SHELL
if eval "$MISSING --is-lightweight"; then
# Helper functions for option handling. -*- Autoconf -*-
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# For backward compatibility.
AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# Check to make sure that the build environment is sane. -*- Autoconf -*-
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
rm -f conftest.file
])
-# Copyright (C) 2009-2018 Free Software Foundation, Inc.
+# Copyright (C) 2009-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
])
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
-# Copyright (C) 2006-2018 Free Software Foundation, Inc.
+# Copyright (C) 2006-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# Check how to create a tarball. -*- Autoconf -*-
-# Copyright (C) 2004-2018 Free Software Foundation, Inc.
+# Copyright (C) 2004-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
/* If ping is true, then only set image size and colors without reading any image data. */
if (image_info->ping) goto DONE_READING;
- BImgBuff=MagickAllocateMemory(unsigned char *,((size_t) ldblk)); /*Ldblk was set in the check phase*/
+ BImgBuff=MagickAllocateResourceLimitedMemory(unsigned char *,((size_t) ldblk)); /*Ldblk was set in the check phase*/
if (BImgBuff==NULL)
NoMemory:
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
(void)ImportImagePixelArea(image,GrayQuantum,1,BImgBuff,NULL,0);
if (!SyncImagePixelsEx(image,exception)) break;
}
- MagickFreeMemory(BImgBuff);
+ MagickFreeResourceLimitedMemory(BImgBuff);
if (i != height)
ThrowReaderException(CorruptImageError,UnexpectedEndOfFile,image);
DataSize = (long)((image->columns+7) / 8);
Padding = (unsigned char)((-(long) DataSize) & 0x01);
- pixels=MagickAllocateMemory(unsigned char *,(size_t) (DataSize));
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,(size_t) (DataSize));
if (pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
}
CloseBlob(image);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (logging)
(void)LogMagickEvent(CoderEvent,GetMagickModule(),"return ART");
#define AVS_HEIGHT_LIMIT 65536UL /* Artificially limit height to 64K pixels */
#define ThrowAVSReaderException(code_,reason_,image_) \
{ \
- MagickFreeMemory(pixels); \
+ MagickFreeResourceLimitedMemory(pixels); \
ThrowReaderException(code_,reason_,image_); \
}
static Image *ReadAVSImage(const ImageInfo *image_info,ExceptionInfo *exception)
break;
if (CheckImagePixelLimits(image, exception) != MagickPass)
ThrowAVSReaderException(ResourceLimitError,ImagePixelLimitExceeded,image);
- pixels=MagickAllocateArray(unsigned char *,image->columns,4);
+ pixels=MagickAllocateResourceLimitedArray(unsigned char *,image->columns,4);
if (pixels == (unsigned char *) NULL)
ThrowAVSReaderException(ResourceLimitError,MemoryAllocationFailed,image);
row_bytes=(size_t) 4*image->columns;
break;
}
}
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (MagickFail == status)
break;
/*
Allocate memory for pixels.
*/
- pixels=MagickAllocateMemory(unsigned char *,image->columns*sizeof(PixelPacket));
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,image->columns*sizeof(PixelPacket));
if (pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
/*
image->columns,image->rows))
break;
}
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (image->next == (Image *) NULL)
break;
image=SyncNextImageInList(image);
*/
#define ThrowBMPReaderException(code_,reason_,image_) \
do { \
- MagickFreeMemory(bmp_colormap); \
- MagickFreeMemory(pixels); \
+ MagickFreeResourceLimitedMemory(bmp_colormap); \
+ MagickFreeResourceLimitedMemory(pixels); \
ThrowReaderException(code_,reason_,image_); \
} while (0);
if (!AllocateImageColormap(image,image->colors))
ThrowBMPReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
- bmp_colormap=MagickAllocateArray(unsigned char *,4,image->colors);
+ bmp_colormap=MagickAllocateResourceLimitedArray(unsigned char *,4,image->colors);
if (bmp_colormap == (unsigned char *) NULL)
ThrowBMPReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
if (packet_size == 4)
p++;
}
- MagickFreeMemory(bmp_colormap);
+ MagickFreeResourceLimitedMemory(bmp_colormap);
}
if (image_info->ping && (image_info->subrange != 0))
(MAGICK_SIZE_T) pixels_size);
if (pixels_size == 0)
ThrowBMPReaderException(CoderError,ArithmeticOverflow,image);
- pixels=MagickAllocateMemory(unsigned char *, pixels_size);
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *, pixels_size);
if (pixels == (unsigned char *) NULL)
ThrowBMPReaderException(ResourceLimitError,MemoryAllocationFailed,image);
if ((bmp_info.compression == BI_RGB) ||
default:
ThrowBMPReaderException(CorruptImageError,ImproperImageHeader,image)
}
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (EOFBlob(image))
{
ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,
/*
Convert MIFF to BMP raster pixels.
*/
- pixels=MagickAllocateMemory(unsigned char *,bmp_info.image_size);
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,bmp_info.image_size);
if (pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
switch (bmp_info.bits_per_pixel)
Convert run-length encoded raster pixels.
*/
length=2*(bytes_per_line+2)*(image->rows+2)+2;
- bmp_data=MagickAllocateMemory(unsigned char *,length);
+ bmp_data=MagickAllocateResourceLimitedMemory(unsigned char *,length);
if (bmp_data == (unsigned char *) NULL)
{
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,
- image)
- }
+ image);
+ }
bmp_info.file_size-=bmp_info.image_size;
bmp_info.image_size=EncodeImage(image,bytes_per_line,pixels,
bmp_data);
bmp_info.file_size+=bmp_info.image_size;
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
pixels=bmp_data;
bmp_info.compression=BI_RLE8;
}
if (logging)
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
" Colormap: %u entries",image->colors);
- bmp_colormap=MagickAllocateArray(unsigned char *,4,
- (size_t) (1L << bmp_info.bits_per_pixel));
+ bmp_colormap=MagickAllocateResourceLimitedArray(unsigned char *,4,
+ (size_t) (1L << bmp_info.bits_per_pixel));
if (bmp_colormap == (unsigned char *) NULL)
{
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,
image);
}
else
(void) WriteBlob(image,4*(1UL << bmp_info.bits_per_pixel),
(char *) bmp_colormap);
- MagickFreeMemory(bmp_colormap);
+ MagickFreeResourceLimitedMemory(bmp_colormap);
}
if (logging)
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
" Pixels: %" MAGICK_SIZE_T_F "u bytes",
(MAGICK_SIZE_T) bmp_info.image_size);
(void) WriteBlob(image,bmp_info.image_size,(char *) pixels);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (image->next == (Image *) NULL)
{
if (logging)
user_data=(unsigned char *) NULL;
while (user_data_length < cin_file_info.user_defined_length)
{
+ unsigned char *new_user_data;
read_size=Min(block_size,cin_file_info.user_defined_length-user_data_length);
- MagickReallocMemory(unsigned char *,user_data,user_data_length+read_size);
- if (user_data == (unsigned char *) NULL)
- ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
+ new_user_data=MagickReallocateResourceLimitedMemory(unsigned char *,user_data,user_data_length+read_size);
+ if (new_user_data == (unsigned char *) NULL)
+ {
+ MagickFreeResourceLimitedMemory(user_data);
+ ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
+ }
+ user_data=new_user_data;
if (ReadBlob(image,read_size,user_data+user_data_length) != read_size)
{
- MagickFreeMemory(user_data);
+ MagickFreeResourceLimitedMemory(user_data);
ThrowReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
user_data_length += read_size;
}
if (!SetImageProfile(image,"CINEONUSERDATA",user_data,user_data_length))
{
- MagickFreeMemory(user_data);
+ MagickFreeResourceLimitedMemory(user_data);
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
}
- MagickFreeMemory(user_data);
+ MagickFreeResourceLimitedMemory(user_data);
}
if (image_info->ping)
{
scandata_bytes=4;
scale_to_short=64;
- scandata=MagickAllocateMemory(unsigned char *,scandata_bytes);
+ scandata=MagickAllocateResourceLimitedMemory(unsigned char *,scandata_bytes);
if (scandata == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
scanline=scandata;
image->columns,image->rows))
break;
}
- MagickFreeMemory(scandata);
+ MagickFreeResourceLimitedMemory(scandata);
break;
}
case 3:
{
scandata_bytes=MagickArraySize(image->columns,4);
scale_to_short=64;
- scandata=MagickAllocateMemory(unsigned char *,scandata_bytes);
+ scandata=MagickAllocateResourceLimitedMemory(unsigned char *,scandata_bytes);
if (scandata == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
for (y=0; y < image->rows; y++)
image->columns,image->rows))
break;
}
- MagickFreeMemory(scandata);
+ MagickFreeResourceLimitedMemory(scandata);
break;
}
default:
scale_from_short=(65535U / (65535U >> (16-bits_per_sample)));
scanline_bytes=MagickArraySize(image->columns,4);
- scanline=MagickAllocateMemory(unsigned char *,scanline_bytes);
+ scanline=MagickAllocateResourceLimitedMemory(unsigned char *,scanline_bytes);
if (scanline == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
(void) memset(scanline,0,scanline_bytes);
image->columns,image->rows))
break;
}
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
}
if ((magick_off_t) cin_file_info.file_size != TellBlob(image))
*/
#define ThrowCMYKReaderException(code_,reason_,image_) \
{ \
- MagickFreeMemory(scanline); \
+ MagickFreeResourceLimitedMemory(scanline); \
ThrowReaderException(code_,reason_,image_); \
}
static Image *ReadCMYKImage(const ImageInfo *image_info,
image->matte=True;
packet_size=(quantum_size*5)/8;
}
- scanline=MagickAllocateArray(unsigned char *,
+ scanline=MagickAllocateResourceLimitedArray(unsigned char *,
packet_size,image->columns);
if (scanline == (unsigned char *) NULL)
ThrowCMYKReaderException(ResourceLimitError,MemoryAllocationFailed,image);
break;
}
} while (count != 0);
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
while (image->previous != (Image *) NULL)
image=image->previous;
CloseBlob(image);
/*
Allocate memory for pixels.
*/
- MagickReallocMemory(unsigned char *,pixels,
- MagickArraySize(packet_size,image->columns));
- if (pixels == (unsigned char *) NULL)
- ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
+ unsigned char
+ *new_pixels;
+
+ new_pixels=MagickReallocateResourceLimitedArray(unsigned char *,pixels,
+ packet_size,image->columns);
+ if (new_pixels == (unsigned char *) NULL)
+ {
+ MagickFreeResourceLimitedMemory(pixels);
+ ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
+ }
+ pixels=new_pixels;
/*
Initialize export options.
if (status == False)
break;
} while (image_info->adjoin);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (image_info->adjoin)
while (image->previous != (Image *) NULL)
image=image->previous;
/* ----- Load RLE compressed raster ----- */
- BImgBuff=MagickAllocateMemory(unsigned char *,(size_t) (ldblk)); /*Ldblk was set in the check phase*/
+ BImgBuff=MagickAllocateResourceLimitedMemory(unsigned char *,(size_t) (ldblk)); /*Ldblk was set in the check phase*/
if (BImgBuff==NULL) goto NoMemory;
(void) SeekBlob(image,6 /*sizeof(Header)*/,SEEK_SET);
}
Finish:
- if (BImgBuff!=NULL) MagickFreeMemory(BImgBuff);
+ if (BImgBuff!=NULL) MagickFreeResourceLimitedMemory(BImgBuff);
if (palette!=NULL)
{
DestroyImage(palette);
\f
static void DCM_DestroyDCM(DicomStream *dcm)
{
- MagickFreeMemory(dcm->offset_arr);
- MagickFreeMemory(dcm->data);
+ MagickFreeResourceLimitedMemory(dcm->offset_arr);
+ MagickFreeResourceLimitedMemory(dcm->data);
#if defined(USE_GRAYMAP)
- MagickFreeMemory(dcm->graymap);
+ MagickFreeResourceLimitedMemory(dcm->graymap);
#endif
- MagickFreeMemory(dcm->rescale_map);
+ MagickFreeResourceLimitedMemory(dcm->rescale_map);
}
\f
/*
colors=dcm->length/dcm->bytes_per_pixel;
dcm->datum=(long) colors;
- dcm->graymap=MagickAllocateArray(unsigned short *,colors,sizeof(unsigned short));
+ dcm->graymap=MagickAllocateResourceLimitedArray(unsigned short *,colors,sizeof(unsigned short));
if (dcm->graymap == (unsigned short *) NULL)
{
ThrowException(exception,ResourceLimitError,MemoryAllocationFailed,image->filename);
ThrowException(exception,CorruptImageError,ImproperImageHeader,image->filename);
return MagickFail;
}
- dcm->data=MagickAllocateArray(unsigned char *,(dcm->length+1),dcm->quantum);
+ dcm->data=MagickAllocateResourceLimitedArray(unsigned char *,(dcm->length+1),dcm->quantum);
if (dcm->data == (unsigned char *) NULL)
{
ThrowException(exception,ResourceLimitError,MemoryAllocationFailed,image->filename);
if (dcm->rescale_map == (Quantum *) NULL)
{
size_t num_entries = Max((size_t) MaxMap+1,(size_t) dcm->max_value_in+1);
- dcm->rescale_map=MagickAllocateArray(Quantum *,num_entries,sizeof(Quantum));
+ dcm->rescale_map=MagickAllocateResourceLimitedArray(Quantum *,num_entries,sizeof(Quantum));
if (dcm->rescale_map == NULL)
{
ThrowException(exception,ResourceLimitError,MemoryAllocationFailed,image->filename);
return MagickFail;
}
- dcm->offset_arr=MagickAllocateArray(magick_uint32_t *,dcm->offset_ct,sizeof(magick_uint32_t));
+ dcm->offset_arr=MagickAllocateResourceLimitedArray(magick_uint32_t *,dcm->offset_ct,sizeof(magick_uint32_t));
if (dcm->offset_arr == (magick_uint32_t *) NULL)
{
ThrowException(exception,ResourceLimitError,MemoryAllocationFailed,image->filename);
pfunc=parse_funcs[dicom_info[dcm.index].funce];
if (pfunc != (DicomElemParseFunc *)NULL)
status=pfunc(image,&dcm,exception);
- MagickFreeMemory(dcm.data);
+ MagickFreeResourceLimitedMemory(dcm.data);
dcm.data = NULL;
dcm.length = 0;
if (status == MagickPass)
*/
if (!AllocateImageColormap(image,image->colors))
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
- dib_colormap=MagickAllocateArray(unsigned char *,image->colors,4);
+ dib_colormap=MagickAllocateResourceLimitedArray(unsigned char *,image->colors,4);
if (dib_colormap == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
packet_size=4;
" (expected %" MAGICK_SIZE_T_F "u bytes)",
(MAGICK_SIZE_T) count,
(MAGICK_SIZE_T) packet_size*image->colors);
- MagickFreeMemory(dib_colormap);
+ MagickFreeResourceLimitedMemory(dib_colormap);
ThrowReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
p=dib_colormap;
if (packet_size == 4)
p++;
}
- MagickFreeMemory(dib_colormap);
+ MagickFreeResourceLimitedMemory(dib_colormap);
}
/*
Read image data.
pixels_size=MagickArraySize(image->rows,Max(bytes_per_line,(size_t) image->columns+1));
if (pixels_size == 0)
ThrowReaderException(CoderError,ArithmeticOverflow,image);
- pixels=MagickAllocateMemory(unsigned char *,pixels_size);
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,pixels_size);
if (pixels == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
if ((dib_info.compression == 0) || (dib_info.compression == 3))
" (expected %" MAGICK_SIZE_T_F "u bytes)",
(MAGICK_SIZE_T) count,
(MAGICK_SIZE_T) length);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
ThrowReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
}
(size_t) image->rows*image->columns);
if (status == False)
{
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
ThrowReaderException(CorruptImageError,UnableToRunlengthDecodeImage,
image);
}
}
default:
{
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
ThrowReaderException(CorruptImageError,ImproperImageHeader,image);
}
}
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (EOFBlob(image))
ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,
image->filename);
/*
Convert MIFF to DIB raster pixels.
*/
- pixels=MagickAllocateMemory(unsigned char *,dib_info.image_size);
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,dib_info.image_size);
if (pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
switch (dib_info.bits_per_pixel)
Convert run-length encoded raster pixels.
*/
length=2*((size_t) bytes_per_line+2)*((size_t) image->rows+2)+2;
- dib_data=MagickAllocateMemory(unsigned char *,length);
+ dib_data=MagickAllocateResourceLimitedMemory(unsigned char *,length);
if (dib_data == (unsigned char *) NULL)
{
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,
- image)
+ image);
}
dib_info.image_size=(unsigned long)
EncodeImage(image,bytes_per_line,pixels,dib_data);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
pixels=dib_data;
dib_info.compression=1;
}
/*
Dump colormap to file.
*/
- dib_colormap=MagickAllocateArray(unsigned char *,
- (((size_t) 1U) << dib_info.bits_per_pixel),4);
+ dib_colormap=MagickAllocateResourceLimitedArray(unsigned char *,
+ (((size_t) 1U) << dib_info.bits_per_pixel),4);
if (dib_colormap == (unsigned char *) NULL)
{
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
}
q=dib_colormap;
}
(void) WriteBlob(image, 4*(((size_t) 1U) << dib_info.bits_per_pixel),
(char *) dib_colormap);
- MagickFreeMemory(dib_colormap);
+ MagickFreeResourceLimitedMemory(dib_colormap);
}
(void) WriteBlob(image,dib_info.image_size,(char *) pixels);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
CloseBlob(image);
return(True);
}
/*
Get the colormap colors.
*/
- colors=MagickAllocateMemory(XColor *,
+ colors=MagickAllocateResourceLimitedMemory(XColor *,
visual_info->colormap_size*sizeof(XColor));
if (colors == (XColor *) NULL)
{
if (!AllocateImageColormap(image,visual_info->colormap_size))
{
DestroyImage(image);
- MagickFreeMemory(colors);
+ MagickFreeResourceLimitedMemory(colors);
XDestroyImage(dps_image);
MagickXFreeResources(display,visual_info,map_info,(MagickXPixelInfo *) NULL,
(XFontStruct *) NULL,&resource_info,(MagickXWindowInfo *) NULL);
break;
}
}
- MagickFreeMemory(colors);
+ MagickFreeResourceLimitedMemory(colors);
XDestroyImage(dps_image);
if (image->storage_class == PseudoClass)
(void) SyncImage(image);
}
#define LSBOctetsToPackedU32Word(scanline,packed_u32) \
-{ \
+do { \
packed_u32 = (((magick_uint32_t) *scanline++)); \
packed_u32 |= (((magick_uint32_t) *scanline++) << 8); \
packed_u32 |= (((magick_uint32_t) *scanline++) << 16); \
packed_u32 |= (((magick_uint32_t) *scanline++) << 24); \
-}
+ } while(0)
#define MSBOctetsToPackedU32Word(scanline,packed_u32) \
-{ \
+do { \
packed_u32 = (((magick_uint32_t) *scanline++) << 24); \
packed_u32 |= (((magick_uint32_t) *scanline++) << 16); \
packed_u32 |= (((magick_uint32_t) *scanline++) << 8); \
packed_u32 |= (((magick_uint32_t) *scanline++)); \
-}
+ } while(0)
/*
Scale from a video level to a full-range level.
if (bits_per_sample == 10)
{
register magick_uint32_t
- packed_u32;
+ packed_u32 = 0;
register unsigned int
datum;
if (endian_type == MSBEndian)
{
- for (i=samples_per_row/3; i != 0; --i)
+ for (i=0; i < samples_per_row; i++)
{
- datum=0;
- MSBOctetsToPackedU32Word(scanline,packed_u32);
- *sp++=(packed_u32 >> shifts[datum++]) & 0x3FF;
- *sp++=(packed_u32 >> shifts[datum++]) & 0x3FF;
+ datum = i % 3;
+ if (datum == 0)
+ MSBOctetsToPackedU32Word(scanline,packed_u32);
*sp++=(packed_u32 >> shifts[datum]) & 0x3FF;
}
- if ((samples_per_row % 3))
- {
- datum=0;
- MSBOctetsToPackedU32Word(scanline,packed_u32);
- for (i=(samples_per_row % 3); i != 0; --i)
- *sp++=(packed_u32 >> shifts[datum++]) & 0x3FF;
- }
}
else if (endian_type == LSBEndian)
{
- for (i=samples_per_row/3; i != 0; --i)
+ for (i=0; i < samples_per_row; i++)
{
- datum=0;
- LSBOctetsToPackedU32Word(scanline,packed_u32);
- *sp++=(packed_u32 >> shifts[datum++]) & 0x3FF;
- *sp++=(packed_u32 >> shifts[datum++]) & 0x3FF;
+ datum = i % 3;
+ if (datum == 0)
+ LSBOctetsToPackedU32Word(scanline,packed_u32);
*sp++=(packed_u32 >> shifts[datum]) & 0x3FF;
}
- if ((samples_per_row % 3))
- {
- datum=0;
- LSBOctetsToPackedU32Word(scanline,packed_u32);
- for (i=(samples_per_row % 3); i != 0; --i)
- *sp++=(packed_u32 >> shifts[datum++]) & 0x3FF;
- }
}
return;
}
#define ThrowDPXReaderException(code_,reason_,image_) \
{ \
- MagickFreeMemory(map_Y); \
- MagickFreeMemory(map_CbCr); \
+ MagickFreeResourceLimitedMemory(map_Y); \
+ MagickFreeResourceLimitedMemory(map_CbCr); \
if (samples_set) \
DestroyThreadViewDataSet(samples_set); \
if (scanline_set) \
while (user_data_length < dpx_file_info.user_defined_length)
{
+ unsigned char
+ *new_user_data;
+
read_size=Min(block_size,dpx_file_info.user_defined_length-user_data_length);
- MagickReallocMemory(unsigned char *,user_data,user_data_length+read_size);
- if (user_data == (unsigned char *) NULL)
- ThrowDPXReaderException(ResourceLimitError,MemoryAllocationFailed,image);
+ new_user_data=MagickReallocateResourceLimitedMemory(unsigned char *,user_data,user_data_length+read_size);
+ if (new_user_data == (unsigned char *) NULL)
+ {
+ MagickFreeResourceLimitedMemory(user_data);
+ ThrowDPXReaderException(ResourceLimitError,MemoryAllocationFailed,image);
+ }
+ user_data=new_user_data;
if (ReadBlob(image,read_size,user_data+user_data_length) != read_size)
{
- MagickFreeMemory(user_data);
+ MagickFreeResourceLimitedMemory(user_data);
ThrowDPXReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
user_data_length += read_size;
StringToAttribute(image,"DPX:user.data.id",dpx_user_data->user_id);
if (!SetImageProfile(image,"DPXUSERDATA",user_data,user_data_length))
{
- MagickFreeMemory(user_data);
+ MagickFreeResourceLimitedMemory(user_data);
ThrowDPXReaderException(ResourceLimitError,MemoryAllocationFailed,image);
}
- MagickFreeMemory(user_data);
+ MagickFreeResourceLimitedMemory(user_data);
}
}
/*
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
"Maximum number of bits per sample in any element: %u",
max_bits_per_sample);
- map_Y=MagickAllocateArray(Quantum *,
+ map_Y=MagickAllocateResourceLimitedArray(Quantum *,
MaxValueGivenBits(max_bits_per_sample)+1,
sizeof(Quantum));
if (map_Y == (Quantum *) NULL)
ThrowDPXReaderException(ResourceLimitError,MemoryAllocationFailed,image);
- map_CbCr=MagickAllocateArray(Quantum *,
+ map_CbCr=MagickAllocateResourceLimitedArray(Quantum *,
MaxValueGivenBits(max_bits_per_sample)+1,
sizeof(Quantum));
if (map_CbCr == (Quantum *) NULL)
if ((bits_per_sample == 10) && (packing_method != PackingMethodPacked))
swap_word_datums = MagickTrue;
}
- if ((definition_value=AccessDefinition(image_info,"dpx","swap-samples")))
+ if ((definition_value=AccessDefinition(image_info,"dpx","swap-samples")) ||
+ (definition_value=AccessDefinition(image_info,"dpx","swap-samples-read")))
{
if (LocaleCompare(definition_value,"false") != 0)
swap_word_datums = swap_word_datums ? MagickFalse : MagickTrue;
image->is_monochrome=is_monochrome;
image->is_grayscale=is_grayscale;
image->depth=Min(QuantumDepth,image->depth);
- MagickFreeMemory(map_CbCr);
- MagickFreeMemory(map_Y);
+ MagickFreeResourceLimitedMemory(map_CbCr);
+ MagickFreeResourceLimitedMemory(map_Y);
DestroyThreadViewDataSet(scanline_set);
DestroyThreadViewDataSet(samples_set);
StopTimer(&image->timer);
}
#define LSBPackedU32WordToOctets(packed_u32,scanline) \
-{ \
+do { \
*scanline++=(unsigned char) ((packed_u32) & 0xFF); \
*scanline++=(unsigned char) ((packed_u32 >> 8) & 0xFF); \
*scanline++=(unsigned char) ((packed_u32 >> 16) & 0xFF); \
*scanline++=(unsigned char) ((packed_u32 >> 24) & 0xFF); \
-}
+ } while(0)
#define MSBPackedU32WordToOctets(packed_u32,scanline) \
-{ \
+do { \
*scanline++=(unsigned char) ((packed_u32 >> 24) & 0xFF); \
*scanline++=(unsigned char) ((packed_u32 >> 16) & 0xFF); \
*scanline++=(unsigned char) ((packed_u32 >> 8) & 0xFF); \
*scanline++=(unsigned char) ((packed_u32) & 0xFF); \
-}
+ } while(0)
/*
WordStreamLSBWrite support
}
}
+ datum=0;
+ packed_u32=0;
if (endian_type == MSBEndian)
{
- /* Standard specified datum order */
- for (i=(samples_per_row/3); i != 0; --i)
+ for (i=0; i < samples_per_row; i++)
{
- datum=0;
- packed_u32=0;
- packed_u32 |= (((magick_uint32_t) *samples++) << shifts[datum++]);
- packed_u32 |= (((magick_uint32_t) *samples++) << shifts[datum++]);
+ if (datum == 2)
+ {
+ MSBPackedU32WordToOctets(packed_u32,scanline);
+ packed_u32=0;
+ }
+ datum = i % 3;
packed_u32 |= (((magick_uint32_t) *samples++) << shifts[datum]);
- MSBPackedU32WordToOctets(packed_u32,scanline);
- }
- if ((samples_per_row % 3))
- {
- datum=0;
- packed_u32=0;
- for (i=(samples_per_row % 3); i != 0; --i)
- packed_u32 |= ((magick_uint32_t) *samples++ << shifts[datum++]);
- MSBPackedU32WordToOctets(packed_u32,scanline);
}
+ if ((samples_per_row+1) % 3 )
+ MSBPackedU32WordToOctets(packed_u32,scanline);
}
else if (endian_type == LSBEndian)
{
- /* Standard specified datum order */
- for (i=(samples_per_row/3); i != 0; --i)
+ for (i=0; i < samples_per_row; i++)
{
- datum=0;
- packed_u32=0;
- packed_u32 |= (((magick_uint32_t) *samples++) << shifts[datum++]);
- packed_u32 |= (((magick_uint32_t) *samples++) << shifts[datum++]);
+ if (datum == 2)
+ {
+ LSBPackedU32WordToOctets(packed_u32,scanline);
+ packed_u32=0;
+ }
+ datum = i % 3;
packed_u32 |= (((magick_uint32_t) *samples++) << shifts[datum]);
- LSBPackedU32WordToOctets(packed_u32,scanline);
- }
- if ((samples_per_row % 3))
- {
- datum=0;
- packed_u32=0;
- for (i=(samples_per_row % 3); i != 0; --i)
- packed_u32 |= (((magick_uint32_t) *samples++) << shifts[datum++]);
- LSBPackedU32WordToOctets(packed_u32,scanline);
}
+ if ((samples_per_row+1) % 3 )
+ LSBPackedU32WordToOctets(packed_u32,scanline);
}
return;
}
#define ThrowDPXWriterException(code_,reason_,image_) \
{ \
- MagickFreeMemory(map_CbCr); \
- MagickFreeMemory(map_Y); \
- MagickFreeMemory(samples); \
- MagickFreeMemory(scanline); \
+ MagickFreeResourceLimitedMemory(map_CbCr); \
+ MagickFreeResourceLimitedMemory(map_Y); \
+ MagickFreeResourceLimitedMemory(samples); \
+ MagickFreeResourceLimitedMemory(scanline); \
if (chroma_image) \
DestroyImage(chroma_image); \
ThrowWriterException(code_,reason_,image_); \
/*
Allocate row samples.
*/
- samples=MagickAllocateArray(sample_t *,image->columns,
+ samples=MagickAllocateResourceLimitedArray(sample_t *,image->columns,
max_samples_per_pixel*sizeof(sample_t));
if (samples == (sample_t *) NULL)
ThrowDPXWriterException(ResourceLimitError,MemoryAllocationFailed,image);
/*
Allocate row scanline.
*/
- scanline=MagickAllocateMemory(unsigned char *,row_octets);
+ scanline=MagickAllocateResourceLimitedMemory(unsigned char *,row_octets);
if (scanline == (unsigned char *) NULL)
ThrowDPXWriterException(ResourceLimitError,MemoryAllocationFailed,image);
(void) memset((void *) scanline,0,row_octets);
/*
Allocate sample translation map storage.
*/
- map_Y=MagickAllocateArray(sample_t *,MaxMap+1,sizeof(sample_t));
+ map_Y=MagickAllocateResourceLimitedArray(sample_t *,MaxMap+1,sizeof(sample_t));
if (map_Y == (sample_t *) NULL)
ThrowDPXWriterException(ResourceLimitError,MemoryAllocationFailed,image);
(void) memset((void *) map_Y,0,(MaxMap+1)*sizeof(sample_t));
- map_CbCr=MagickAllocateArray(sample_t *,MaxMap+1,sizeof(sample_t));
+ map_CbCr=MagickAllocateResourceLimitedArray(sample_t *,MaxMap+1,sizeof(sample_t));
if (map_CbCr == (sample_t *) NULL)
ThrowDPXWriterException(ResourceLimitError,MemoryAllocationFailed,image);
(void) memset((void *) map_CbCr,0,(MaxMap+1)*sizeof(sample_t));
if ((bits_per_sample == 10) && (packing_method != PackingMethodPacked))
swap_word_datums = MagickTrue;
}
- if ((definition_value=AccessDefinition(image_info,"dpx","swap-samples")))
+ if ((definition_value=AccessDefinition(image_info,"dpx","swap-samples")) ||
+ (definition_value=AccessDefinition(image_info,"dpx","swap-samples-write")))
{
if (LocaleCompare(definition_value,"false") != 0)
swap_word_datums = swap_word_datums ? MagickFalse : MagickTrue;
}
-
/*
Create a chroma image if we are subsampling YCbCr.
*/
}
}
- MagickFreeMemory(map_CbCr);
- MagickFreeMemory(map_Y);
- MagickFreeMemory(samples);
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(map_CbCr);
+ MagickFreeResourceLimitedMemory(map_Y);
+ MagickFreeResourceLimitedMemory(samples);
+ MagickFreeResourceLimitedMemory(scanline);
CloseBlob(image);
if (chroma_image != (Image *) NULL)
{
DeleteMetaFile(hOld);
return((HENHMETAFILE) NULL);
}
- pBits=MagickAllocateMemory(LPBYTE,dwSize);
+ pBits=MagickAllocateResourceLimitedMemory(LPBYTE,dwSize);
if (pBits == (LPBYTE) NULL)
{
DeleteMetaFile(hOld);
}
if (GetMetaFileBitsEx(hOld,dwSize,pBits) == 0)
{
- MagickFreeMemory(pBits);
+ MagickFreeResourceLimitedMemory(pBits);
DeleteMetaFile(hOld);
return((HENHMETAFILE) NULL);
}
hTemp=SetWinMetaFileBits(dwSize,pBits,hDC,&mp);
ReleaseDC(NULL,hDC);
DeleteMetaFile(hOld);
- MagickFreeMemory(pBits);
+ MagickFreeResourceLimitedMemory(pBits);
GetEnhMetaFileHeader(hTemp,sizeof(ENHMETAHEADER),&emfh);
*width=emfh.rclFrame.right-emfh.rclFrame.left;
*height=emfh.rclFrame.bottom-emfh.rclFrame.top;
if (hFile == INVALID_HANDLE_VALUE)
return(NULL);
dwSize=GetFileSize(hFile,NULL);
- pBits=MagickAllocateMemory(LPBYTE,dwSize);
+ pBits=MagickAllocateResourceLimitedMemory(LPBYTE,dwSize);
if (pBits == (LPBYTE) NULL)
{
CloseHandle(hFile);
CloseHandle(hFile);
if (((PAPMHEADER) pBits)->dwKey != 0x9ac6cdd7l)
{
- MagickFreeMemory(pBits);
+ MagickFreeResourceLimitedMemory(pBits);
return((HENHMETAFILE) NULL);
}
/*
hDC=GetDC(NULL);
hTemp=SetWinMetaFileBits(dwSize,&(pBits[sizeof(APMHEADER)]),hDC,&mp);
ReleaseDC(NULL,hDC);
- MagickFreeMemory(pBits);
+ MagickFreeResourceLimitedMemory(pBits);
return(hTemp);
}
/* flags; */
geometry=GetPageGeometry(image_info->page);
- p=strchr(geometry,'>');
- if (!p)
+ if (geometry != NULL)
{
- /*flags=*/ (void) GetMagickGeometry(geometry,&sans,&sans,&image->columns,
- &image->rows);
- if (image->x_resolution != 0.0)
- image->columns=(unsigned int)
- ((image->columns*image->x_resolution)+0.5);
- if (image->y_resolution != 0.0)
- image->rows=(unsigned int)
- ((image->rows*image->y_resolution)+0.5);
+ p=strchr(geometry,'>');
+ if (!p)
+ {
+ /*flags=*/ (void) GetMagickGeometry(geometry,&sans,&sans,&image->columns,
+ &image->rows);
+ if (image->x_resolution != 0.0)
+ image->columns=(unsigned int)
+ ((image->columns*image->x_resolution)+0.5);
+ if (image->y_resolution != 0.0)
+ image->rows=(unsigned int)
+ ((image->rows*image->y_resolution)+0.5);
+ }
+ else
+ {
+ *p='\0';
+ /*flags=*/ (void) GetMagickGeometry(geometry,&sans,&sans,&image->columns,
+ &image->rows);
+ if (image->x_resolution != 0.0)
+ image->columns=(unsigned int)
+ (((image->columns*image->x_resolution)/72.0)+0.5);
+ if (image->y_resolution != 0.0)
+ image->rows=(unsigned int)
+ (((image->rows*image->y_resolution)/72.0)+0.5);
+ }
+ MagickFreeMemory(geometry);
}
- else
- {
- *p='\0';
- /*flags=*/ (void) GetMagickGeometry(geometry,&sans,&sans,&image->columns,
- &image->rows);
- if (image->x_resolution != 0.0)
- image->columns=(unsigned int)
- (((image->columns*image->x_resolution)/72.0)+0.5);
- if (image->y_resolution != 0.0)
- image->rows=(unsigned int)
- (((image->rows*image->y_resolution)/72.0)+0.5);
- }
- MagickFreeMemory(geometry);
}
hDC=GetDC(NULL);
if (!hDC)
/*
-% Copyright (C) 2003 GraphicsMagick Group
+% Copyright (C) 2003-2020 GraphicsMagick Group
% Copyright (C) 2002 ImageMagick Studio
% Copyright 1991-1999 E. I. du Pont de Nemours and Company
%
%
%
*/
+#if defined(HasGS)
static Image *ReadEPTImage(const ImageInfo *image_info,
ExceptionInfo *exception)
{
DestroyImageInfo(clone_info);
}
(void) LiberateTemporaryFile((char *) image_info->filename);
-#if defined(HasDPS)
- if (image == (Image *) NULL)
- {
- /*
- Ghostscript has failed-- try the Display Postscript Extension.
- */
- (void) FormatString((char *) image_info->filename,"dps:%.1024s",filename);
- image=ReadImage(image_info,exception);
- }
-#endif /* defined(HasDPS) */
if (image == (Image *) NULL)
if (UndefinedException == exception->severity)
ThrowException(exception,DelegateError,PostscriptDelegateFailed,filename);
}
return(image);
}
+#endif /* if defined(HasGS) */
\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*entry;
entry=SetMagickInfo("EPT");
+#if defined(HasGS)
entry->decoder=(DecoderHandler) ReadEPTImage;
+#endif /* if defined(HasGS) */
entry->encoder=(EncoderHandler) WriteEPTImage;
entry->magick=(MagickHandler) IsEPT;
entry->adjoin=False;
(void) RegisterMagickInfo(entry);
entry=SetMagickInfo("EPT2");
+#if defined(HasGS)
entry->decoder=(DecoderHandler) ReadEPTImage;
+#endif /* if defined(HasGS) */
entry->encoder=(EncoderHandler) WriteEPTImage;
entry->magick=(MagickHandler) IsEPT;
entry->adjoin=False;
(void) RegisterMagickInfo(entry);
entry=SetMagickInfo("EPT3");
+#if defined(HasGS)
entry->decoder=(DecoderHandler) ReadEPTImage;
+#endif /* if defined(HasGS) */
entry->encoder=(EncoderHandler) WriteEPTImage;
entry->magick=(MagickHandler) IsEPT;
entry->adjoin=False;
%
% A description of each parameter follows.
%
-% o status: Method WriteFAXImage return True if the image is written.
-% False is returned is there is a memory shortage or if the image file
+% o status: Method WriteFAXImage return MagickPass if the image is written.
+% MagickFail is returned is there is a memory shortage or if the image file
% fails to write.
%
% o image_info: Specifies a pointer to a ImageInfo structure.
%
%
*/
-static unsigned int WriteFAXImage(const ImageInfo *image_info,Image *image)
+static MagickPassFail WriteFAXImage(const ImageInfo *image_info,Image *image)
{
ImageInfo
*clone_info;
- unsigned int
+ MagickPassFail
status;
unsigned long
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
status=OpenBlob(image_info,image,WriteBinaryBlobMode,&image->exception);
- image_list_length=GetImageListLength(image);
- if (status == False)
+ if (status == MagickFail)
ThrowWriterException(FileOpenError,UnableToOpenFile,image);
+ image_list_length=GetImageListLength(image);
clone_info=CloneImageInfo(image_info);
(void) strcpy(clone_info->magick,"FAX");
scene=0;
/*
Convert MIFF to monochrome.
*/
- (void) TransformColorspace(image,RGBColorspace);
- status=HuffmanEncodeImage(clone_info,image);
+ status &= TransformColorspace(image,RGBColorspace);
+ if (status != MagickPass)
+ break;
+ status &= HuffmanEncodeImage(clone_info,image);
+ if (status != MagickPass)
+ break;
if (image->next == (Image *) NULL)
break;
image=SyncNextImageInList(image);
- status=MagickMonitorFormatted(scene++,image_list_length,
- &image->exception,SaveImagesText,
- image->filename);
- if (status == False)
+ status &= MagickMonitorFormatted(scene++,image_list_length,
+ &image->exception,SaveImagesText,
+ image->filename);
+ if (status != MagickPass)
break;
} while (clone_info->adjoin);
DestroyImageInfo(clone_info);
}
}
- fits_pixels=MagickAllocateArray(unsigned char *, image->columns, packet_size);
+ fits_pixels=MagickAllocateResourceLimitedArray(unsigned char *, image->columns, packet_size);
if (fits_pixels == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
image->columns,image->rows))
break;
}
- MagickFreeMemory(fits_pixels);
+ MagickFreeResourceLimitedMemory(fits_pixels);
if (EOFBlob(image))
{
ThrowException(exception,CorruptImageError,UnexpectedEndOfFile, image->filename);
This functions inserts one row into a HDU. Note that according to
FITS spec a card image contains 80 bytes of ASCII data.
- buffer - 2880 byte logical FITS record.
- data - string data to append
+ buffer - 2880 byte logical FITS record (initially memset to 0).
+ data - string data to append at offset
offset - offset into FITS record to write the data.
*/
int InsertRowHDU(char *buffer, const char *data, int offset)
if (len > (size_t) (((size_t)FITS_BLOCK_SIZE)-offset))
len = ((size_t) FITS_BLOCK_SIZE)-offset;
- (void) strncpy(buffer+offset,data,len);
+ (void) memcpy(buffer+offset,data,len);
return offset +80;
}
Allocate image memory.
*/
packet_size=quantum_size/8;
- fits_info=MagickAllocateMemory(char *,FITS_BLOCK_SIZE);
+ fits_info=MagickAllocateResourceLimitedMemory(char *,FITS_BLOCK_SIZE);
if (fits_info == (char *) NULL)
{
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
}
- pixels=MagickAllocateArray(unsigned char *,packet_size,image->columns);
+ pixels=MagickAllocateResourceLimitedArray(unsigned char *,packet_size,image->columns);
if (pixels == (unsigned char *) NULL)
{
- MagickFreeMemory(fits_info);
+ MagickFreeResourceLimitedMemory(fits_info);
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
}
memset(fits_info, 0, y);
(void)WriteBlob(image,y,(char *) fits_info);
}
- MagickFreeMemory(fits_info);
+ MagickFreeResourceLimitedMemory(fits_info);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
CloseBlob(image);
return(True);
}
/*
Note image label.
*/
- label=MagickAllocateMemory(char *,summary_info.title.length+1);
+ label=MagickAllocateResourceLimitedMemory(char *,summary_info.title.length+1);
if (label == (char *) NULL)
{
FPX_ClearSystem();
(void) strlcpy(label,(char *) summary_info.title.ptr,
summary_info.title.length+1);
(void) SetImageAttribute(image,"label",label);
- MagickFreeMemory(label);
+ MagickFreeResourceLimitedMemory(label);
}
if (summary_info.comments_valid)
if ((summary_info.comments.length != 0) &&
/*
Note image comment.
*/
- comments=MagickAllocateMemory(char *,summary_info.comments.length+1);
+ comments=MagickAllocateResourceLimitedMemory(char *,summary_info.comments.length+1);
if (comments == (char *) NULL)
{
FPX_ClearSystem();
(void) strlcpy(comments,(char *) summary_info.comments.ptr,
summary_info.comments.length+1);
(void) SetImageAttribute(image,"comment",comments);
- MagickFreeMemory(comments);
+ MagickFreeResourceLimitedMemory(comments);
}
/*
Determine resolution by subimage specification.
/*
Allocate memory for the image and pixel buffer.
*/
- scanline=MagickAllocateMemory(unsigned char *,colorspace.numberOfComponents*
+ scanline=MagickAllocateResourceLimitedMemory(unsigned char *,colorspace.numberOfComponents*
image->columns*(tile_height+1));
if (scanline == (unsigned char *) NULL)
{
(long) tile_height,&fpx_info);
if (fpx_status == FPX_LOW_MEMORY_ERROR)
{
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
(void) FPX_CloseImage(flashpix);
FPX_ClearSystem();
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,
if (!MagickMonitor(LoadImageText,y,image->rows,exception))
break;
}
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
(void) FPX_CloseImage(flashpix);
FPX_ClearSystem();
StopTimer(&image->timer);
/*
Allocate pixels.
*/
- pixels=MagickAllocateMemory(unsigned char *,
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,
colorspace.numberOfComponents*image->columns);
if (pixels == (unsigned char *) NULL)
{
}
(void) FPX_CloseImage(flashpix);
FPX_ClearSystem();
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
return(True);
}
#else
header[count]='\0';
if (count+offset+1 >= allocation_length)
{
+ char *comments_new;
allocation_length=allocation_length+count+1;
MagickRoundUpStringLength(allocation_length);
- MagickReallocMemory(char *,comments,allocation_length);
- if (comments == (char *) NULL)
- ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
+ comments_new=MagickReallocateResourceLimitedMemory(char *,
+ comments,
+ allocation_length);
+ if (comments_new == (char *) NULL)
+ {
+ MagickFreeResourceLimitedMemory(comments);
+ ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
+ }
+ comments=comments_new;
(void) strlcpy(&comments[offset],(char *)header,allocation_length-offset);
}
}
(void) SetImageAttribute(image,"comment",NULL);
(void) SetImageAttribute(image,"comment",comments);
- MagickFreeMemory(comments);
+ MagickFreeResourceLimitedMemory(comments);
break;
}
case 0xff:
for (p=image->colormap, j=0; j < Max(image->colors-1,1); j++, p++)
if (ColorMatch(&image->background_color,p))
break;
- (void) WriteBlobByte(image,(long) j); /* background color */
+ (void) WriteBlobByte(image,(magick_uint8_t) j); /* background color */
(void) WriteBlobByte(image,0x0); /* reserved */
(void) WriteBlob(image,3*(((size_t) 1) << bits_per_pixel),(char *) colormap);
for (j=0; j < 768; j++)
while (strlen(p) != 0)
{
count=Min(strlen(p),255);
- (void) WriteBlobByte(image,(long) count);
+ (void) WriteBlobByte(image, (magick_uint8_t)count);
for (i=0; i < count; i++)
(void) WriteBlobByte(image,*p++);
}
quantum_size=32;
samples_per_pixel=MagickGetQuantumSamplesPerPixel(quantum_type);
packet_size=(quantum_size*samples_per_pixel)/8;
- scanline=MagickAllocateArray(unsigned char *,packet_size,image->tile_info.width);
+ scanline=MagickAllocateResourceLimitedArray(unsigned char *,packet_size,image->tile_info.width);
if (scanline == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
tile_packets=(size_t) packet_size*image->tile_info.width;
AllocateNextImage(image_info,image);
if (image->next == (Image *) NULL)
{
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
}
image=SyncNextImageInList(image);
break;
}
} while (count != 0);
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
while (image->previous != (Image *) NULL)
image=image->previous;
CloseBlob(image);
/*
Allocate scanline
*/
- scanline=MagickAllocateArray(unsigned char *,packet_size,image->columns);
+ scanline=MagickAllocateResourceLimitedArray(unsigned char *,packet_size,image->columns);
if (scanline == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
/*
image->columns,image->rows))
break;
}
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
if (image->next == (Image *) NULL)
break;
image=SyncNextImageInList(image);
Allocate histogram count arrays.
*/
length=Max(ScaleQuantumToChar(MaxRGB)+1,histogram_image->columns);
- red=MagickAllocateArray(long *,length,sizeof(long));
- green=MagickAllocateArray(long *,length,sizeof(long));
- blue=MagickAllocateArray(long *,length,sizeof(long));
+ red=MagickAllocateResourceLimitedArray(long *,length,sizeof(long));
+ green=MagickAllocateResourceLimitedArray(long *,length,sizeof(long));
+ blue=MagickAllocateResourceLimitedArray(long *,length,sizeof(long));
if ((red == (long *) NULL) || (green == (long *) NULL) ||
(blue == (long *) NULL))
{
- MagickFreeMemory(red);
- MagickFreeMemory(green);
- MagickFreeMemory(blue);
+ MagickFreeResourceLimitedMemory(red);
+ MagickFreeResourceLimitedMemory(green);
+ MagickFreeResourceLimitedMemory(blue);
DestroyImage(histogram_image);
- ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image)
- }
+ ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
+ }
(void) memset(red,0,length*sizeof(long));
(void) memset(green,0,length*sizeof(long));
(void) memset(blue,0,length*sizeof(long));
/*
Free memory resources.
*/
- MagickFreeMemory(blue);
- MagickFreeMemory(green);
- MagickFreeMemory(red);
+ MagickFreeResourceLimitedMemory(blue);
+ MagickFreeResourceLimitedMemory(green);
+ MagickFreeResourceLimitedMemory(red);
file=AcquireTemporaryFileStream(filename,BinaryFileIOMode);
if (file == (FILE *) NULL)
{
if (image_info->ping) goto DONE_READING;
/* ----- Load RLE compressed raster ----- */
- BImgBuff=MagickAllocateMemory(unsigned char *,((size_t) ldblk)); /*Ldblk was set in the check phase*/
+ BImgBuff=MagickAllocateResourceLimitedMemory(unsigned char *,((size_t) ldblk)); /*Ldblk was set in the check phase*/
if(BImgBuff==NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
}
if(BImgBuff!=NULL)
- MagickFreeMemory(BImgBuff);
+ MagickFreeResourceLimitedMemory(BImgBuff);
if (EOFBlob(image))
ThrowException(exception, CorruptImageError, UnexpectedEndOfFile, image->filename);
ThrowReaderException(CorruptImageError,ImproperImageHeader,image);
data_alloc_size=Max(data_alloc_size,icon_file.directory[i].size);
}
- data=MagickAllocateMemory(unsigned char *,data_alloc_size);
+ data=MagickAllocateResourceLimitedMemory(unsigned char *,data_alloc_size);
if (data == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
for (i=0; i < icon_file.count; i++)
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
"Failed to seek to offset %u",
icon_file.directory[i].offset);
- MagickFreeMemory(data);
+ MagickFreeResourceLimitedMemory(data);
ThrowReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
if ((count=ReadBlob(image,icon_file.directory[i].size,data)) != icon_file.directory[i].size)
" (expected %" MAGICK_SIZE_T_F "u bytes)",
(MAGICK_SIZE_T) count,
(MAGICK_SIZE_T) icon_file.directory[i].size);
- MagickFreeMemory(data);
+ MagickFreeResourceLimitedMemory(data);
ThrowReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
format[0]='\0';
(void) strcpy(format,"PNG");
if (format[0] == '\0')
{
- MagickFreeMemory(data);
+ MagickFreeResourceLimitedMemory(data);
ThrowReaderException(CorruptImageError,ImproperImageHeader,image);
}
if (image->logging)
}
if (icon_image == (Image *) NULL)
{
- MagickFreeMemory(data);
+ MagickFreeResourceLimitedMemory(data);
DestroyImageList(image);
return((Image *) NULL);
}
while (image->previous != (Image *) NULL)
image=image->previous;
CloseBlob(image);
- MagickFreeMemory(data);
+ MagickFreeResourceLimitedMemory(data);
return(image);
}
\f
unsigned int
status;
- size_t
- number_packets;
-
unsigned long
scene;
Allocate pixel data.
*/
bytes_per_row=((image->columns+7) >> 3);
- number_packets=bytes_per_row*image->rows;
- pixels=MagickAllocateMemory(unsigned char *,number_packets);
+ pixels=MagickAllocateResourceLimitedArray(unsigned char *,bytes_per_row,image->rows);
if (pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
/*
*/
jbg_enc_out(&jbig_info);
jbg_enc_free(&jbig_info);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (image->next == (Image *) NULL)
break;
image=SyncNextImageInList(image);
/*
-% Copyright (C) 2012-2018 GraphicsMagick Group
+% Copyright (C) 2012-2020 GraphicsMagick Group
%
% This program is covered by multiple licenses, which are described in
% Copyright.txt. You should have received a copy of Copyright.txt with this
TileInfo->PicOffset, TileInfo->PicSize);
if ((alloc_size > TileInfo->PicSize) &&
- (blob = MagickAllocateMemory(unsigned char *,alloc_size)) != NULL)
+ (blob = MagickAllocateResourceLimitedMemory(unsigned char *,alloc_size)) != NULL)
{
/* Add missing JPEG header bytes */
blob[0] = 0xFF;
ThrowException(exception,BlobError,UnableToSeekToOffset,
image->filename);
}
- MagickFreeMemory(blob);
+ MagickFreeResourceLimitedMemory(blob);
}
else
{
ThrowReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
- PositionList = MagickAllocateArray(TJNXTileInfo *,
+ PositionList = MagickAllocateResourceLimitedArray(TJNXTileInfo *,
JNXLevelInfo[i].TileCount,
sizeof(TJNXTileInfo));
if (PositionList == NULL)
PositionList[j].PicSize > file_size))
{
(void) SetMagickResourceLimit(MapResource, SaveLimit);
- MagickFreeMemory(PositionList);
+ MagickFreeResourceLimitedMemory(PositionList);
ThrowReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
}
break;
}
- MagickFreeMemory(PositionList);
+ MagickFreeResourceLimitedMemory(PositionList);
}
CloseBlob(image);
/*
-% Copyright (C) 2003-2019 GraphicsMagick Group
+% Copyright (C) 2003-2020 GraphicsMagick Group
% Copyright (C) 2002 ImageMagick Studio
%
% This program is covered by multiple licenses, which are described in
*image;
} StreamManager;
+/*
+ I/O read/write callbacks changed
+
+ Cnt argument changed from 'int' to 'unsigned' on 6/29/20 (2.0.19).
+
+ Write write buf pointer changed from 'char *' to 'const char *' on 8/14/20
+
+ Old interface:
+ int (*read_)(jas_stream_obj_t *obj, char *buf, int cnt);
+ int (*write_)(jas_stream_obj_t *obj, char *buf, int cnt);
+
+ New interface:
+ int (*read_)(jas_stream_obj_t *obj, char *buf, unsigned cnt);
+ int (*write_)(jas_stream_obj_t *obj, const char *buf, unsigned cnt);
+
+ We have yet to find a useful way to determine the version of the
+ JasPer library using the C pre-processor.
+ */
+#if !defined(MAGICK_JP2_NEW_STREAM_INTERFACE)
+#define MAGICK_JP2_NEW_STREAM_INTERFACE 0
+#endif /* if !defined(MAGICK_JP2_NEW_STREAM_INTERFACE) */
+
+#if MAGICK_JP2_NEW_STREAM_INTERFACE
+static int BlobRead(jas_stream_obj_t *object,char *buffer,unsigned length)
+#else
static int BlobRead(jas_stream_obj_t *object,char *buffer,const int length)
+#endif
{
size_t
count;
return ((int) count);
}
+#if MAGICK_JP2_NEW_STREAM_INTERFACE
+static int BlobWrite(jas_stream_obj_t *object,const char *buffer,unsigned length)
+#else
static int BlobWrite(jas_stream_obj_t *object,char *buffer,const int length)
+#endif
{
size_t
count;
stream->rwlimit_=(-1);
stream->obj_=MagickAllocateMemory(jas_stream_obj_t *,sizeof(StreamManager));
if (stream->obj_ == (jas_stream_obj_t *) NULL)
- return((jas_stream_t *) NULL);
+ {
+ MagickFreeMemory(stream);
+ return((jas_stream_t *) NULL);
+ }
stream->ops_=stream_ops;
stream->openmode_=JAS_STREAM_READ | JAS_STREAM_WRITE | JAS_STREAM_BINARY;
stream->bufbase_=stream->tinybuf_;
#define ThrowJP2ReaderException(code_,reason_,image_) \
{ \
for (component=0; component < (long) number_components; component++) \
- MagickFreeMemory(channel_lut[component]); \
+ MagickFreeResourceLimitedMemory(channel_lut[component]); \
if (pixels) \
jas_matrix_destroy(pixels); \
if (jp2_stream) \
scale_to_quantum=MaxRGBDouble/max_value;
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
"Channel %d scale is %g", component, scale_to_quantum);
- channel_lut[component]=MagickAllocateArray(Quantum *, (size_t) max_value+1,sizeof(Quantum));
+ channel_lut[component]=MagickAllocateResourceLimitedArray(Quantum *, (size_t) max_value+1,sizeof(Quantum));
if (channel_lut[component] == (Quantum *) NULL)
ThrowJP2ReaderException(ResourceLimitError,MemoryAllocationFailed,image);
for(i=0; i <= max_value; i++)
}
for (component=0; component < (long) number_components; component++)
- MagickFreeMemory(channel_lut[component]);
+ MagickFreeResourceLimitedMemory(channel_lut[component]);
jas_matrix_destroy(pixels);
(void) jas_stream_close(jp2_stream);
jas_image_destroy(jp2_image);
double
scale_to_component;
- lut=MagickAllocateArray(unsigned short *,MaxMap+1,sizeof(*lut));
+ lut=MagickAllocateResourceLimitedArray(unsigned short *,MaxMap+1,sizeof(*lut));
if (lut == (unsigned short *) NULL)
{
jas_image_destroy(jp2_image);
jp2_pixels=jas_matrix_create(1,(unsigned int) image->columns);
if (jp2_pixels == (jas_matrix_t *) NULL)
{
- MagickFreeMemory(lut);
+ MagickFreeResourceLimitedMemory(lut);
jas_image_destroy(jp2_image);
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
}
status=jas_image_encode(jp2_image,jp2_stream,format,options);
(void) jas_stream_close(jp2_stream);
MagickFreeMemory(options);
- MagickFreeMemory(lut);
+ MagickFreeResourceLimitedMemory(lut);
jas_matrix_destroy(jp2_pixels);
jas_image_destroy(jp2_image);
if (status)
}
}
- jpeg_pixels=MagickAllocateArray(JSAMPLE *,
+ jpeg_pixels=MagickAllocateResourceLimitedArray(JSAMPLE *,
jpeg_info.output_components,
MagickArraySize(image->columns,
sizeof(JSAMPLE)));
if (setjmp(error_manager.error_recovery))
{
/* Error handling code executed if longjmp was invoked */
- MagickFreeMemory(jpeg_pixels);
+ MagickFreeResourceLimitedMemory(jpeg_pixels);
jpeg_destroy_decompress(&jpeg_info);
if (image->exception.severity > exception->severity)
CopyException(exception,&image->exception);
(void) jpeg_finish_decompress(&jpeg_info);
}
jpeg_destroy_decompress(&jpeg_info);
- MagickFreeMemory(jpeg_pixels);
+ MagickFreeResourceLimitedMemory(jpeg_pixels);
CloseBlob(image);
/*
length=Min(profile_length-i,65519);
- profile=MagickAllocateMemory(unsigned char *,length+14);
+ profile=MagickAllocateResourceLimitedMemory(unsigned char *,length+14);
if (profile == (unsigned char *) NULL)
break;
(void) strcpy((char *) profile,"ICC_PROFILE");
for (j=0; j < (long) length; j++)
profile[j+14]=color_profile[i+j];
jpeg_write_marker(jpeg_info,ICC_MARKER,profile,(unsigned int) length+14);
- MagickFreeMemory(profile);
+ MagickFreeResourceLimitedMemory(profile);
}
}
length=Min(profile_length-i,65500);
roundup=(length & 0x01); /* round up for Photoshop */
- profile=MagickAllocateMemory(unsigned char *,length+roundup+tag_length);
+ profile=MagickAllocateResourceLimitedMemory(unsigned char *,length+roundup+tag_length);
if (profile == (unsigned char *) NULL)
break;
#ifdef GET_ONLY_IPTC_DATA
profile[length+tag_length]=0;
jpeg_write_marker(jpeg_info,IPTC_MARKER,profile,(unsigned int)
(length+roundup+tag_length));
- MagickFreeMemory(profile);
+ MagickFreeResourceLimitedMemory(profile);
}
}
/*
Convert MIFF to JPEG raster pixels.
*/
- jpeg_pixels=MagickAllocateArray(JSAMPLE *,
+ jpeg_pixels=MagickAllocateResourceLimitedArray(JSAMPLE *,
jpeg_info.input_components*image->columns,sizeof(JSAMPLE));
if (jpeg_pixels == (JSAMPLE *) NULL)
{
if (huffman_memory)
LiberateMagickResource(MemoryResource,huffman_memory);
jpeg_destroy_compress(&jpeg_info);
- MagickFreeMemory(jpeg_pixels);
+ MagickFreeResourceLimitedMemory(jpeg_pixels);
CloseBlob(image);
return(True);
}
p=q;
while ((LocaleNCompare(q,"->",2) != 0) && (*q != '\0'))
MagickGetToken(q,&q,token,token_max_length);
+ if (!((q-p) > 2))
+ continue;
length=Min(q-p-2,MaxTextExtent-1);
(void) strncpy(comment,p+1,length);
comment[length]='\0';
Image *image;
unsigned int y;
unsigned char x8, rep, b;
- long ldblk;
+ size_t ldblk;
unsigned char *BImgBuff = NULL;
unsigned char *DataPtr;
unsigned int status;
if (image_info->ping) goto DONE_READING;
/* ----- Load RLE compressed raster ----- */
- ldblk = (image->depth*image->columns) /8;
- BImgBuff = MagickAllocateMemory(unsigned char *, ((size_t)ldblk));
+ ldblk = (MagickArraySize(image->depth,image->columns)) /8;
+ BImgBuff = MagickAllocateResourceLimitedMemory(unsigned char *,ldblk);
if (BImgBuff==NULL)
NoMemory:
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
}
}
if (BImgBuff!=NULL)
- MagickFreeMemory(BImgBuff);
+ MagickFreeResourceLimitedMemory(BImgBuff);
if (EOFBlob(image))
ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,image->filename);
/*
-% Copyright (C) 2003-2017 GraphicsMagick Group
+% Copyright (C) 2003-2020 GraphicsMagick Group
% Copyright (C) 2002 ImageMagick Studio
% Copyright 1991-1999 E. I. du Pont de Nemours and Company
%
*/
#define ThrowMAPReaderException(code_,reason_,image_) \
do { \
- MagickFreeMemory(colormap); \
- MagickFreeMemory(pixels); \
+ MagickFreeResourceLimitedMemory(colormap); \
+ MagickFreeResourceLimitedMemory(pixels); \
ThrowReaderException(code_,reason_,image_); \
} while (0);
static Image *ReadMAPImage(const ImageInfo *image_info,ExceptionInfo *exception)
if (!AllocateImageColormap(image,image->offset ? image->offset : 256))
ThrowMAPReaderException(ResourceLimitError,MemoryAllocationFailed,image);
packet_size=image->colors > 256 ? 6 : 3;
- colormap=MagickAllocateArray(unsigned char *,packet_size,image->colors);
+ colormap=MagickAllocateResourceLimitedArray(unsigned char *,packet_size,image->colors);
if (colormap == (unsigned char *) NULL)
ThrowMAPReaderException(ResourceLimitError,MemoryAllocationFailed,image);
/*
image->colormap[i].blue=(*p++ << 8U);
image->colormap[i].blue|=(*p++);
}
- MagickFreeMemory(colormap);
+ MagickFreeResourceLimitedMemory(colormap);
if (image_info->ping)
{
CloseBlob(image);
Read image pixels.
*/
packet_size=image->depth > 8 ? 2 : 1;
- pixels=MagickAllocateArray(unsigned char *,packet_size,image->columns);
+ pixels=MagickAllocateResourceLimitedArray(unsigned char *,packet_size,image->columns);
if (pixels == (unsigned char *) NULL)
ThrowMAPReaderException(ResourceLimitError,MemoryAllocationFailed,image);
for (y=0; y < (long) image->rows; y++)
if (!SyncImagePixelsEx(image,exception))
break;
}
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
CloseBlob(image);
return(image);
}
*/
#define ThrowMAPWriterException(code_,reason_,image_) \
do { \
- MagickFreeMemory(colormap); \
- MagickFreeMemory(pixels); \
+ MagickFreeResourceLimitedMemory(colormap); \
+ MagickFreeResourceLimitedMemory(pixels); \
ThrowWriterException(code_,reason_,image_); \
} while (0);
static unsigned int WriteMAPImage(const ImageInfo *image_info,Image *image)
if (SetImageType(image,PaletteType) == MagickFail)
ThrowMAPWriterException(ResourceLimitError,MemoryAllocationFailed,image);
packet_size=image->depth > 8 ? 2 : 1;
- pixels=MagickAllocateArray(unsigned char *,image->columns,packet_size);
+ pixels=MagickAllocateResourceLimitedArray(unsigned char *,image->columns,packet_size);
if (pixels == (unsigned char *) NULL)
ThrowMAPWriterException(ResourceLimitError,MemoryAllocationFailed,image);
packet_size=image->colors > 256 ? 6 : 3;
- colormap=MagickAllocateArray(unsigned char *,packet_size,image->colors);
+ colormap=MagickAllocateResourceLimitedArray(unsigned char *,packet_size,image->colors);
if (colormap == (unsigned char *) NULL)
ThrowMAPWriterException(ResourceLimitError,MemoryAllocationFailed,image);
if (WriteBlob(image, (size_t) packet_size*image->colors,(char *) colormap) !=
(size_t) packet_size*image->colors)
ThrowMAPWriterException(FileOpenError,UnableToWriteFile,image);
- MagickFreeMemory(colormap);
+ MagickFreeResourceLimitedMemory(colormap);
/*
Write image pixels to file.
*/
if (WriteBlob(image,q-pixels,(char *) pixels) != (size_t) (q-pixels))
ThrowMAPWriterException(FileOpenError,UnableToWriteFile,image);
}
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
CloseBlob(image);
return(status);
}
(void) unlink(clone_info->filename);
}
- cache_block = MagickAllocateMemory(unsigned char *,(size_t)((*Size<16384) ? *Size : 16384));
+ cache_block = MagickAllocateResourceLimitedMemory(unsigned char *,(size_t)((*Size<16384) ? *Size : 16384));
if(cache_block==NULL) return NULL;
- decompress_block = MagickAllocateMemory(unsigned char *,(size_t)(4096));
+ decompress_block = MagickAllocateResourceLimitedMemory(unsigned char *,(size_t)(4096));
if(decompress_block==NULL)
{
- MagickFreeMemory(cache_block);
+ MagickFreeResourceLimitedMemory(cache_block);
return NULL;
}
mat_file = AcquireTemporaryFileStream(clone_info->filename,BinaryFileIOMode);
if(!mat_file)
{
- MagickFreeMemory(cache_block);
- MagickFreeMemory(decompress_block);
+ MagickFreeResourceLimitedMemory(cache_block);
+ MagickFreeResourceLimitedMemory(decompress_block);
(void) LogMagickEvent(CoderEvent,GetMagickModule(),"Cannot create file stream for decompressed image");
return NULL;
}
{
(void) LogMagickEvent(CoderEvent,GetMagickModule(),"Failed to initialize zlib");
ThrowException(exception,CorruptImageError, UnableToUncompressImage, orig->filename);
- MagickFreeMemory(cache_block);
- MagickFreeMemory(decompress_block);
+ MagickFreeResourceLimitedMemory(cache_block);
+ MagickFreeResourceLimitedMemory(decompress_block);
(void)fclose(mat_file);
LiberateTemporaryFile(clone_info->filename);
return NULL;
{
(void) LogMagickEvent(CoderEvent,GetMagickModule(),"Corrupt inflate stream");
inflateEnd(&zip_info);
- MagickFreeMemory(cache_block);
- MagickFreeMemory(decompress_block);
+ MagickFreeResourceLimitedMemory(cache_block);
+ MagickFreeResourceLimitedMemory(decompress_block);
(void)fclose(mat_file);
LiberateTemporaryFile(clone_info->filename);
ThrowException(exception,CorruptImageError, UnableToUncompressImage, orig->filename);
inflateEnd(&zip_info); /* Release all caches used by zip. */
(void)fclose(mat_file);
- MagickFreeMemory(cache_block);
- MagickFreeMemory(decompress_block);
+ MagickFreeResourceLimitedMemory(cache_block);
+ MagickFreeResourceLimitedMemory(decompress_block);
*Size = TotalSize;
if((clone_info->file=fopen(clone_info->filename,"rb"))==NULL) goto UnlinkFile;
} \
if(clone_info) \
DestroyImageInfo(clone_info); \
- MagickFreeMemory(BImgBuff); \
+ MagickFreeResourceLimitedMemory(BImgBuff); \
ThrowReaderException(code_,reason_,image_); \
}
}
/* ----- Load raster data ----- */
- BImgBuff = MagickAllocateMemory(unsigned char *,(size_t) (ldblk)); /* Ldblk was set in the check phase */
+ BImgBuff = MagickAllocateResourceLimitedMemory(unsigned char *,(size_t) (ldblk)); /* Ldblk was set in the check phase */
if(BImgBuff == NULL) RET_CHECK(image);
if(HDR.Type[1]==0) /* Find Min and Max Values for doubles */
{
- (void)MagickFindRawImageMinMax(image, import_options->endian, HDR.nRows,
+ if (MagickFindRawImageMinMax(image, import_options->endian, HDR.nRows,
HDR.nCols, DoublePixel, ldblk, BImgBuff,
&import_options->double_minvalue,
- &import_options->double_maxvalue);
+ &import_options->double_maxvalue) != MagickPass)
+ goto skip_reading_current;
}
if(HDR.Type[1]==1) /* Find Min and Max Values for floats */
{
- (void)MagickFindRawImageMinMax(image, import_options->endian, HDR.nRows,
+ if (MagickFindRawImageMinMax(image, import_options->endian, HDR.nRows,
HDR.nCols, FloatPixel, ldblk, BImgBuff,
&import_options->double_minvalue,
- &import_options->double_maxvalue);
+ &import_options->double_maxvalue) != MagickPass)
+ goto skip_reading_current;
}
/* Main reader loop. */
MinVal_c = MaxVal_c = 0;
if(HDR.Type[1]==0) /* Find Min and Max Values for doubles */
{
- (void)MagickFindRawImageMinMax(image, import_options->endian, HDR.nRows,
- HDR.nCols, DoublePixel, ldblk, BImgBuff,
- &MinVal_c, &MaxVal_c);
+ if (MagickFindRawImageMinMax(image, import_options->endian, HDR.nRows,
+ HDR.nCols, DoublePixel, ldblk, BImgBuff,
+ &MinVal_c, &MaxVal_c) != MagickPass)
+ goto skip_reading_current;
for(i=0; i<(long)HDR.nCols; i++)
{
if(ReadBlobXXXDoubles(image, ldblk, (double *)BImgBuff) != (size_t) ldblk)
if(HDR.Type[1]==1) /* Find Min and Max Values for floats */
{
- (void)MagickFindRawImageMinMax(image, import_options->endian, HDR.nRows,
- HDR.nCols, FloatPixel, ldblk, BImgBuff,
- &MinVal_c, &MaxVal_c);
+ if (MagickFindRawImageMinMax(image, import_options->endian, HDR.nRows,
+ HDR.nCols, FloatPixel, ldblk, BImgBuff,
+ &MinVal_c, &MaxVal_c) != MagickPass)
+ goto skip_reading_current;
for(i=0; i<(long)HDR.nCols; i++)
{
if(ReadBlobXXXFloats(image, ldblk, (float *)BImgBuff) != (size_t) ldblk)
image->colors=0;
/* row scan buffer is no longer needed */
- MagickFreeMemory(BImgBuff);
+ MagickFreeResourceLimitedMemory(BImgBuff);
BImgBuff = NULL;
}
ImportImagePixelAreaFailed:
ExitLoop:
- if(BImgBuff!=NULL) MagickFreeMemory(BImgBuff);
+ if(BImgBuff!=NULL) MagickFreeResourceLimitedMemory(BImgBuff);
return image;
}
}
/* ----- Load raster data ----- */
- BImgBuff = MagickAllocateArray(unsigned char *,(size_t) (ldblk),sizeof(double)); /* Ldblk was set in the check phase */
+ BImgBuff = MagickAllocateResourceLimitedArray(unsigned char *,(size_t) (ldblk),sizeof(double)); /* Ldblk was set in the check phase */
if (BImgBuff == NULL)
goto NoMemory;
(void) memset(BImgBuff,0,ldblk*sizeof(double));
if (CellType==miDOUBLE) /* Find Min and Max Values for floats */
{
- (void) MagickFindRawImageMinMax(image2, import_options.endian,MATLAB_HDR.SizeX,
- MATLAB_HDR.SizeY,DoublePixel, ldblk, BImgBuff,
- &import_options.double_minvalue,
- &import_options.double_maxvalue);
+ if (MagickFindRawImageMinMax(image2, import_options.endian,MATLAB_HDR.SizeX,
+ MATLAB_HDR.SizeY,DoublePixel, ldblk, BImgBuff,
+ &import_options.double_minvalue,
+ &import_options.double_maxvalue) != MagickPass)
+ goto skip_reading_current;
if (logging) (void)LogMagickEvent(CoderEvent,GetMagickModule(),
"Double import options: Min=%g, Max=%g",
import_options.double_minvalue, import_options.double_maxvalue);
}
if (CellType==miSINGLE) /* Find Min and Max Values for floats */
{
- (void) MagickFindRawImageMinMax(image2, import_options.endian,MATLAB_HDR.SizeX,
- MATLAB_HDR.SizeY,FloatPixel, ldblk, BImgBuff,
- &import_options.double_minvalue,
- &import_options.double_maxvalue);
+ if (MagickFindRawImageMinMax(image2, import_options.endian,MATLAB_HDR.SizeX,
+ MATLAB_HDR.SizeY,FloatPixel, ldblk, BImgBuff,
+ &import_options.double_minvalue,
+ &import_options.double_maxvalue) != MagickPass)
+ goto skip_reading_current;
if (logging) (void)LogMagickEvent(CoderEvent,GetMagickModule(),
"Float import options: Min=%g, Max=%g",
import_options.double_minvalue, import_options.double_maxvalue);
if (CellType==miDOUBLE)
{
- (void) MagickFindRawImageMinMax(image2, import_options.endian, MATLAB_HDR.SizeX,
- MATLAB_HDR.SizeY, DoublePixel, ldblk, BImgBuff,
- &MinVal_c, &MaxVal_c);
+ if (MagickFindRawImageMinMax(image2, import_options.endian, MATLAB_HDR.SizeX,
+ MATLAB_HDR.SizeY, DoublePixel, ldblk, BImgBuff,
+ &MinVal_c, &MaxVal_c) != MagickPass)
+ ThrowImg2MATReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
if(CellType==miSINGLE)
{
- (void) MagickFindRawImageMinMax(image2, import_options.endian, MATLAB_HDR.SizeX,
- MATLAB_HDR.SizeY, FloatPixel, ldblk, BImgBuff,
- &MinVal_c, &MaxVal_c);
+ if (MagickFindRawImageMinMax(image2, import_options.endian, MATLAB_HDR.SizeX,
+ MATLAB_HDR.SizeY, FloatPixel, ldblk, BImgBuff,
+ &MinVal_c, &MaxVal_c) != MagickPass)
+ ThrowImg2MATReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
if (CellType==miDOUBLE)
image->colors=0;
/* row scan buffer is no longer needed */
- MagickFreeMemory(BImgBuff);
+ MagickFreeResourceLimitedMemory(BImgBuff);
BImgBuff = NULL;
if(--Frames>0)
}
END_OF_READING:
- MagickFreeMemory(BImgBuff);
+ MagickFreeResourceLimitedMemory(BImgBuff);
CloseBlob(image);
{
pixels=(unsigned char *) NULL;
while(image!=NULL)
{
- pixels=MagickAllocateMemory(unsigned char *,image->rows);
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,image->rows);
if (pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
while(padding-->0) (void) WriteBlobByte(image,0);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if(status == MagickFail || image->next==NULL) break;
image=SyncNextImageInList(image);
}
CloseBlob(image);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (logging)
(void)LogMagickEvent(CoderEvent,GetMagickModule(),"return MAT");
break;
if ((q-p+1) >= (int) len)
{
+ unsigned char
+ *new_p;
+
int
tlen;
tlen=q-p;
len<<=1;
- MagickReallocMemory(unsigned char *,p,(len+2));
- *b=(char *) p;
- if (p == (unsigned char *) NULL)
- break;
+ new_p=MagickReallocateResourceLimitedMemory(unsigned char *,p,(len+2));
+ *b=(char *) new_p;
+ if (new_p == (unsigned char *) NULL)
+ {
+ MagickFreeResourceLimitedMemory(p);
+ break;
+ }
+ p=new_p;
q=p+tlen;
}
*q=(unsigned char) c;
dataset = 0;
recnum = 0;
- line = MagickAllocateMemory(char *,inputlen);
+ line = MagickAllocateResourceLimitedMemory(char *,inputlen);
if (line == (char *) NULL)
goto parse8BIM_failure;
savedpos = 0;
state=0;
next=0;
- token = MagickAllocateMemory(char *,inputlen);
+ token = MagickAllocateResourceLimitedMemory(char *,inputlen);
if (token == (char *) NULL)
goto parse8BIM_failure;
- newstr = MagickAllocateMemory(char *,inputlen);
+ newstr = MagickAllocateResourceLimitedMemory(char *,inputlen);
if (newstr == (char *) NULL)
goto parse8BIM_failure;
while (Tokenizer(&token_info, 0, token, inputlen, line,
recnum = MagickAtoI(newstr);
break;
case 2:
- name = MagickAllocateMemory(char *,strlen(newstr)+1);
+ name = MagickAllocateResourceLimitedMemory(char *,strlen(newstr)+1);
if (name == (char *) NULL)
goto parse8BIM_failure;
(void) strcpy(name,newstr);
}
state++;
}
- MagickFreeMemory(token);
- MagickFreeMemory(newstr);
- MagickFreeMemory(name);
+ MagickFreeResourceLimitedMemory(token);
+ MagickFreeResourceLimitedMemory(newstr);
+ MagickFreeResourceLimitedMemory(name);
}
- MagickFreeMemory(line);
+ MagickFreeResourceLimitedMemory(line);
if (savedolen > 0)
{
long diff = outputlen - savedolen;
return outputlen;
parse8BIM_failure:
- MagickFreeMemory(token);
- MagickFreeMemory(newstr);
- MagickFreeMemory(name);
- MagickFreeMemory(line);
+ MagickFreeResourceLimitedMemory(token);
+ MagickFreeResourceLimitedMemory(newstr);
+ MagickFreeResourceLimitedMemory(name);
+ MagickFreeResourceLimitedMemory(line);
return 0L;
}
break;
if ((q-p+1) >= (int) len)
{
+ unsigned char
+ *new_p;
+
int
tlen;
tlen=q-p;
len<<=1;
- MagickReallocMemory(unsigned char *,p,(len+2));
- *b=(char *) p;
- if (p == (unsigned char *) NULL)
- break;
+ new_p=MagickReallocateResourceLimitedMemory(unsigned char *,p,(len+2));
+ *b=(char *) new_p;
+ if (new_p == (unsigned char *) NULL)
+ {
+ MagickFreeResourceLimitedMemory(p);
+ break;
+ }
+ p=new_p;
q=p+tlen;
}
*q=(unsigned char) c;
dataset = 0;
recnum = 0;
- line = MagickAllocateMemory(char *,inputlen);
+ line = MagickAllocateResourceLimitedMemory(char *,inputlen);
if (line == (char *) NULL)
goto parse8BIMW_failure;
name = token = (char *)NULL;
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
"META CODER Parse8BIM: %s (%lu)",line, (unsigned long) inputlen);
- token = MagickAllocateMemory(char *,inputlen);
+ token = MagickAllocateResourceLimitedMemory(char *,inputlen);
if (token == (char *) NULL)
goto parse8BIMW_failure;
- newstr = MagickAllocateMemory(char *,inputlen);
+ newstr = MagickAllocateResourceLimitedMemory(char *,inputlen);
if (newstr == (char *) NULL)
goto parse8BIMW_failure;
while (Tokenizer(&token_info, 0, token, inputlen, line,
recnum = MagickAtoI(newstr);
break;
case 2:
- name = MagickAllocateMemory(char *,strlen(newstr)+1);
+ name = MagickAllocateResourceLimitedMemory(char *,strlen(newstr)+1);
if (name == (char *) NULL)
goto parse8BIMW_failure;
(void) strcpy(name,newstr);
}
state++;
}
- MagickFreeMemory(token);
- MagickFreeMemory(newstr);
- MagickFreeMemory(name);
+ MagickFreeResourceLimitedMemory(token);
+ MagickFreeResourceLimitedMemory(newstr);
+ MagickFreeResourceLimitedMemory(name);
}
- MagickFreeMemory(line);
+ MagickFreeResourceLimitedMemory(line);
if (savedolen > 0)
{
long diff = outputlen - savedolen;
return outputlen;
parse8BIMW_failure:
- MagickFreeMemory(token);
- MagickFreeMemory(newstr);
- MagickFreeMemory(name);
- MagickFreeMemory(line);
+ MagickFreeResourceLimitedMemory(token);
+ MagickFreeResourceLimitedMemory(newstr);
+ MagickFreeResourceLimitedMemory(name);
+ MagickFreeResourceLimitedMemory(line);
return 0L;
}
{
DestroyImage(buff);
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,
- image)
+ image);
}
(void) memset(blob,0,length);
AttachBlob(buff->blob,blob,length);
{
DestroyImage(buff);
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,
- image)
+ image);
}
AttachBlob(buff->blob,blob,length);
if (LocaleCompare(image_info->magick,"APP1JPEG") == 0)
i,
length;
- buffer=MagickAllocateMemory(char *,MaxBufferSize);
+ buffer=MagickAllocateResourceLimitedMemory(char *,MaxBufferSize);
if (buffer != (char *) NULL)
{
i=0;
if (i < length)
break;
}
- MagickFreeMemory(buffer);
+ MagickFreeResourceLimitedMemory(buffer);
}
#endif
}
{
DestroyImage(buff);
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,
- image)
+ image);
}
AttachBlob(buff->blob,blob,length);
for ( ; ; )
}
if (taglen < 0) return -1;
/* make a buffer to hold the tag data and snag it from the input stream */
- str=MagickAllocateMemory(unsigned char *, (size_t) taglen+1);
+ str=MagickAllocateResourceLimitedMemory(unsigned char *, (size_t) taglen+1);
if (str == (unsigned char *) NULL)
{
(void) printf("MemoryAllocationFailed");
c=ReadBlobByte(ifile);
if (c == EOF)
{
- MagickFreeMemory(str);
+ MagickFreeResourceLimitedMemory(str);
return -1;
}
str[tagindx] = (unsigned char) c;
FormatString(temp, "%d#%d=",(unsigned int)dataset, (unsigned int) recnum);
(void) WriteBlobString(ofile,temp);
formatString( ofile, (char *)str, taglen );
- MagickFreeMemory(str);
+ MagickFreeResourceLimitedMemory(str);
tagsfound++;
}
if (taglen < 0) return -1;
/* make a buffer to hold the tag data and snag it from the input stream */
- str=MagickAllocateMemory(unsigned char *,(size_t) taglen+1);
+ str=MagickAllocateResourceLimitedMemory(unsigned char *,(size_t) taglen+1);
if (str == (unsigned char *) NULL)
{
(void) printf("MemoryAllocationFailed");
c = *s++; len--;
if (len < 0)
{
- MagickFreeMemory(str);
+ MagickFreeResourceLimitedMemory(str);
return -1;
}
str[tagindx] = (unsigned char) c;
FormatString(temp, "%d#%d=",(unsigned int)dataset, (unsigned int) recnum);
(void) WriteBlobString(ofile,temp);
formatString( ofile, (char *)str, taglen );
- MagickFreeMemory(str);
+ MagickFreeResourceLimitedMemory(str);
tagsfound++;
}
#define Format8BIMLiberate() \
do \
{ \
- MagickFreeMemory(PString); \
- MagickFreeMemory(str); \
+ MagickFreeResourceLimitedMemory(PString); \
+ MagickFreeResourceLimitedMemory(str); \
} while(0);
static int format8BIM(Image *ifile, Image *ofile)
goto format8BIMError;
}
plen = (unsigned char) c;
- PString=MagickAllocateMemory(unsigned char *,(size_t) plen+1);
+ PString=MagickAllocateResourceLimitedMemory(unsigned char *,(size_t) plen+1);
if (PString == (unsigned char *) NULL)
{
ThrowException(&ofile->exception,ResourceLimitError,MemoryAllocationFailed,
goto format8BIMError;
}
/* make a buffer to hold the data and snag it from the input stream */
- str=MagickAllocateMemory(unsigned char *,(size_t) Size+1);
+ str=MagickAllocateResourceLimitedMemory(unsigned char *,(size_t) Size+1);
if (str == (unsigned char *) NULL)
{
ThrowException(&ofile->exception,ResourceLimitError,MemoryAllocationFailed,
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
assert(source != (const unsigned char *) NULL);
+
+ /*
+ FIXME: gray DirectClass pixels (quantum_type=GrayQuantum and
+ GrayAlphaQuantum ) should be properly supported with RLE since
+ modern ImageMagick supports it. For the moment we support it by
+ reading as PseudoClass using IndexQuantum.
+ */
assert((quantum_size == 8) || (quantum_size == 16) || (quantum_size == 32));
- assert(((quantum_type == IndexQuantum) && (image->storage_class == PseudoClass)) ||
- ((quantum_type == IndexAlphaQuantum) && (image->storage_class == PseudoClass)) ||
- ((quantum_type == CMYKAQuantum) && (image->storage_class == DirectClass) && image->matte) ||
- ((quantum_type == CMYKQuantum) && (image->storage_class == DirectClass) && !image->matte) ||
- ((quantum_type == RGBAQuantum) && (image->storage_class == DirectClass) && image->matte) ||
- ((quantum_type == RGBQuantum) && (image->storage_class == DirectClass) && !image->matte));
+ if (!(((quantum_type == IndexQuantum) && (image->storage_class == PseudoClass)) ||
+ ((quantum_type == IndexAlphaQuantum) && (image->storage_class == PseudoClass)) ||
+ /* ((quantum_type == GrayQuantum) && (image->storage_class == DirectClass) && !image->matte) ||*/
+ /* ((quantum_type == GrayAlphaQuantum) && (image->storage_class == DirectClass) && image->matte) ||*/
+ ((quantum_type == CMYKAQuantum) && (image->storage_class == DirectClass) && image->matte) ||
+ ((quantum_type == CMYKQuantum) && (image->storage_class == DirectClass) && !image->matte) ||
+ ((quantum_type == RGBAQuantum) && (image->storage_class == DirectClass) && image->matte) ||
+ ((quantum_type == RGBQuantum) && (image->storage_class == DirectClass) && !image->matte)))
+ {
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "RLE decompression not supported for QuantumType=%s, ClassType=%s, Matte=%s",
+ QuantumTypeToString(quantum_type),ClassTypeToString(image->storage_class),
+ image->matte ? "True" : "False");
+ ThrowBinaryException(CoderError,RLECompressionNotSupported,image->filename);
+ }
p=source;
q=AccessMutablePixels(image);
#define ThrowMIFFReaderException(code_,reason_,image_) \
do { \
- MagickFreeMemory(comment); \
- MagickFreeMemory(values); \
+ MagickFreeResourceLimitedMemory(comment); \
+ MagickFreeResourceLimitedMemory(values); \
if (number_of_profiles > 0) \
{ \
unsigned int _index; \
for (_index=0; _index < number_of_profiles; _index++) \
{ \
MagickFreeMemory(profiles[_index].name); \
- MagickFreeMemory(profiles[_index].info); \
+ MagickFreeResourceLimitedMemory(profiles[_index].info); \
} \
- MagickFreeMemory(profiles); \
+ MagickFreeResourceLimitedMemory(profiles); \
number_of_profiles=0; \
} \
- MagickFreeMemory(pixels); \
- MagickFreeMemory(compress_pixels); \
+ MagickFreeResourceLimitedMemory(pixels); \
+ MagickFreeResourceLimitedMemory(compress_pixels); \
ThrowReaderException(code_,reason_,image_); \
} while (0);
+#define ReadMIFFMaxKeyWordCount 256 /* Arbitrary limit on keywords in one MIFF frame */
+
static Image *ReadMIFFImage(const ImageInfo *image_info,
ExceptionInfo *exception)
{
Read comment-- any text between { }.
*/
comment_length=MaxTextExtent;
- comment=MagickAllocateMemory(char *,comment_length);
+ comment=MagickAllocateResourceLimitedMemory(char *,comment_length);
if (comment == (char *) NULL)
ThrowMIFFReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
break;
if ((size_t) (p-comment+1) >= comment_length)
{
+ char
+ *new_comment;
+
*p='\0';
comment_length<<=1;
- MagickReallocMemory(char *,comment,comment_length);
- if (comment == (char *) NULL)
- break;
+ new_comment=MagickReallocateResourceLimitedMemory(char *,comment,comment_length);
+ if (new_comment == (char *) NULL)
+ {
+ MagickFreeResourceLimitedMemory(comment);
+ break;
+ }
+ comment=new_comment;
p=comment+strlen(comment);
}
*p=c;
(void) LogMagickEvent(CoderEvent,GetMagickModule(),"Comment: \"%s\"", comment);
(void) SetImageAttribute(image,"comment",comment);
comment_count++;
- MagickFreeMemory(comment);
+ MagickFreeResourceLimitedMemory(comment);
c=ReadBlobByte(image);
}
else
keyword);
ThrowMIFFReaderException(CorruptImageError,ImproperImageHeader,image);
}
-
/*
Get values.
spaces and/or new-lines must be surrounded by braces.
*/
values_length=MaxTextExtent;
- values=MagickAllocateMemory(char *,values_length);
+ values=MagickAllocateResourceLimitedMemory(char *,values_length);
if (values == (char *) NULL)
ThrowMIFFReaderException(ResourceLimitError,MemoryAllocationFailed,image);
values[0]='\0';
{
if ((size_t) (p-values+1) >= values_length)
{
+ char
+ *new_values;
+
*p='\0';
values_length<<=1;
- MagickReallocMemory(char *,values,values_length);
- if (values == (char *) NULL)
- break;
+ new_values=MagickReallocateResourceLimitedMemory(char *,values,values_length);
+ if (new_values == (char *) NULL)
+ {
+ MagickFreeResourceLimitedMemory(values);
+ break;
+ }
+ values=new_values;
p=values+strlen(values);
}
if (values == (char *) NULL)
ThrowMIFFReaderException(CorruptImageError,ImproperImageHeader,image);
}
/*
+ Arbitrarily limit the number of header keywords to avoid DOS attempts.
+ */
+ if (keyword_count > ReadMIFFMaxKeyWordCount)
+ {
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "Excessive key word count %u"
+ " (Denial of service attempt?)",keyword_count);
+ ThrowMIFFReaderException(CorruptImageError,ImproperImageHeader,image);
+ }
+ /*
Assign a value to the specified keyword.
*/
switch (*keyword)
/* Legacy ImageMagick 4.2.9 used keyword "color-profile" for ICC profile */
if (LocaleCompare(keyword,"color-profile") == 0)
{
+ ProfileInfo
+ *new_profiles;
+
if (MagickAtoL(values) <= 0)
ThrowMIFFReaderException(CorruptImageError,ImproperImageHeader,image);
i=(long) number_of_profiles;
- MagickReallocMemory(ProfileInfo *,profiles,(i+1)*sizeof(ProfileInfo));
- if (profiles == (ProfileInfo *) NULL)
+ new_profiles=MagickReallocateResourceLimitedArray(ProfileInfo *,profiles,
+ (size_t) i+1,sizeof(ProfileInfo));
+ if (new_profiles == (ProfileInfo *) NULL)
{
- MagickFreeMemory(values);
+ for (i=0; i < number_of_profiles; i++)
+ {
+ MagickFreeMemory(profiles[i].name);
+ MagickFreeResourceLimitedMemory(profiles[i].info);
+ }
+ MagickFreeResourceLimitedMemory(profiles);
+ MagickFreeResourceLimitedMemory(values);
ThrowMIFFReaderException(ResourceLimitError,MemoryAllocationFailed,image);
}
+ profiles=new_profiles;
profiles[i].name=AllocateString("icc");
profiles[i].length=MagickAtoL(values);
profiles[i].info=(unsigned char *) NULL;
if ((LocaleNCompare(keyword,"profile-",8) == 0) ||
(LocaleNCompare(keyword,"profile:",8) == 0))
{
+ ProfileInfo
+ *new_profiles;
+
if (MagickAtoL(values) <= 0)
ThrowMIFFReaderException(CorruptImageError,ImproperImageHeader,image);
i=(long) number_of_profiles;
- MagickReallocMemory(ProfileInfo *,profiles,(i+1)*sizeof(ProfileInfo));
- if (profiles == (ProfileInfo *) NULL)
+ new_profiles=MagickReallocateResourceLimitedArray(ProfileInfo *,profiles,
+ (size_t) i+1,sizeof(ProfileInfo));
+ if (new_profiles == (ProfileInfo *) NULL)
{
- MagickFreeMemory(values);
+ for (i=0; i < number_of_profiles; i++)
+ {
+ MagickFreeMemory(profiles[i].name);
+ MagickFreeResourceLimitedMemory(profiles[i].info);
+ }
+ MagickFreeResourceLimitedMemory(profiles);
+ MagickFreeResourceLimitedMemory(values);
ThrowMIFFReaderException(ResourceLimitError,MemoryAllocationFailed,image);
}
+ profiles=new_profiles;
profiles[i].name=AllocateString(keyword+8);
profiles[i].length=MagickAtoL(values);
profiles[i].info=(unsigned char *) NULL;
break;
}
}
- MagickFreeMemory(values);
+ MagickFreeResourceLimitedMemory(values);
}
else
{
(magick_off_t) profiles[i].length) ||
(profiles[i].length < 15*1024*1024)))
{
- profiles[i].info=MagickAllocateMemory(unsigned char *,profiles[i].length);
+ profiles[i].info=MagickAllocateResourceLimitedMemory(unsigned char *,profiles[i].length);
if (profiles[i].info == (unsigned char *) NULL)
- ThrowMIFFReaderException(CorruptImageError,UnableToReadGenericProfile,
+ ThrowMIFFReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
if (ReadBlob(image,profiles[i].length,profiles[i].info)
!= profiles[i].length)
}
}
MagickFreeMemory(profiles[i].name);
- MagickFreeMemory(profiles[i].info);
+ MagickFreeResourceLimitedMemory(profiles[i].info);
}
- MagickFreeMemory(profiles);
+ MagickFreeResourceLimitedMemory(profiles);
number_of_profiles=0;
}
Read image colormap from file.
*/
packet_size=3*depth/8;
- colormap=MagickAllocateMemory(unsigned char *,packet_size*image->colors);
+ colormap=MagickAllocateResourceLimitedArray(unsigned char *,packet_size,image->colors);
if (colormap == (unsigned char *) NULL)
ThrowMIFFReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
}
}
} /* switch (depth) */
- MagickFreeMemory(colormap);
+ MagickFreeResourceLimitedMemory(colormap);
}
}
if (image_info->ping && (image_info->subrange != 0))
quantum_type=RGBAQuantum;
}
}
+ if ((quantum_type == GrayQuantum) && (MaxValueGivenBits(depth) <= MaxMap))
+ {
+ /*
+ Create image colormap and read grey image as PseudoClass.
+ */
+ if (!AllocateImageColormap(image,MaxValueGivenBits(depth)+1))
+ ThrowMIFFReaderException(ResourceLimitError,MemoryAllocationFailed,
+ image);
+ quantum_type=IndexQuantum;
+ }
+
/*
Allocate image pixels.
*/
pixels_size=MagickArraySize(packet_size,image->columns);
if (pixels_size == 0)
ThrowMIFFReaderException(CoderError,ArithmeticOverflow,image);
- pixels=MagickAllocateMemory(unsigned char *,pixels_size);
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,pixels_size);
if (pixels == (unsigned char *) NULL)
ThrowMIFFReaderException(ResourceLimitError,MemoryAllocationFailed,image);
length=(size_t) (1.01*pixels_size);
else
ThrowMIFFReaderException(CoderError,ArithmeticOverflow,image);
compressed_length = length;
- compress_pixels=MagickAllocateMemory(unsigned char *,compressed_length);
+ compress_pixels=MagickAllocateResourceLimitedMemory(unsigned char *,compressed_length);
if (compress_pixels == (unsigned char *) NULL)
ThrowMIFFReaderException(ResourceLimitError,MemoryAllocationFailed,image);
/*
}
} /* End switch (image->compression) */
- MagickFreeMemory(pixels);
- MagickFreeMemory(compress_pixels);
+ MagickFreeResourceLimitedMemory(pixels);
+ MagickFreeResourceLimitedMemory(compress_pixels);
if (EOFBlob(image))
{
#define ThrowMIFFWriterException(code_,reason_,image_) \
{ \
- MagickFreeMemory(compress_pixels) \
- MagickFreeMemory(pixels); \
+ MagickFreeResourceLimitedMemory(compress_pixels) \
+ MagickFreeResourceLimitedMemory(pixels); \
ThrowWriterException(code_,reason_,image_); \
}
if (compression == RLECompression)
packet_size+=quantum_size/8;
length=packet_size*image->columns;
- pixels=MagickAllocateMemory(unsigned char *,length);
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,length);
length=(size_t) (1.01*packet_size*image->columns+600);
if ((compression == BZipCompression) || (compression == ZipCompression))
if (length != (unsigned int) length)
compression=NoCompression;
- compress_pixels=MagickAllocateMemory(unsigned char *,length);
+ compress_pixels=MagickAllocateResourceLimitedMemory(unsigned char *,length);
if ((pixels == (unsigned char *) NULL) ||
(compress_pixels == (unsigned char *) NULL))
ThrowMIFFWriterException(ResourceLimitError,MemoryAllocationFailed,image);
Allocate colormap.
*/
packet_size=3*depth/8;
- colormap=MagickAllocateMemory(unsigned char *,packet_size*image->colors);
+ colormap=MagickAllocateResourceLimitedArray(unsigned char *,packet_size,image->colors);
if (colormap == (unsigned char *) NULL)
ThrowMIFFWriterException(ResourceLimitError,MemoryAllocationFailed,
image);
#endif /* QuantumDepth > 16 */
} /* switch (depth) */
(void) WriteBlob(image,packet_size*image->colors,colormap);
- MagickFreeMemory(colormap);
+ MagickFreeResourceLimitedMemory(colormap);
}
/*
Write image pixels to file.
image->columns,image->rows))
break;
}
- MagickFreeMemory(pixels);
- MagickFreeMemory(compress_pixels);
+ MagickFreeResourceLimitedMemory(pixels);
+ MagickFreeResourceLimitedMemory(compress_pixels);
if (image->next == (Image *) NULL)
break;
image=SyncNextImageInList(image);
#define ThrowMPCReaderException(code_,reason_,image_) \
do { \
- MagickFreeMemory(comment); \
- MagickFreeMemory(values); \
+ MagickFreeResourceLimitedMemory(comment); \
+ MagickFreeResourceLimitedMemory(values); \
if (number_of_profiles > 0) \
{ \
unsigned int _index; \
for (_index=0; _index < number_of_profiles; _index++) \
{ \
MagickFreeMemory(profiles[_index].name); \
- MagickFreeMemory(profiles[_index].info); \
+ MagickFreeResourceLimitedMemory(profiles[_index].info); \
} \
- MagickFreeMemory(profiles); \
+ MagickFreeResourceLimitedMemory(profiles); \
number_of_profiles=0; \
} \
ThrowReaderException(code_,reason_,image_); \
} while (0);
+
+#define ReadMPCMaxKeyWordCount 256 /* Arbitrary limit on number of keywords in MPC frame */
+
static Image *ReadMPCImage(const ImageInfo *image_info,ExceptionInfo *exception)
{
char
Read comment-- any text between { }.
*/
comment_length=MaxTextExtent;
- comment=MagickAllocateMemory(char *,comment_length);
+ comment=MagickAllocateResourceLimitedMemory(char *,comment_length);
if (comment == (char *) NULL)
ThrowMPCReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
break;
if ((size_t) (p-comment+1) >= comment_length)
{
+ char
+ *new_comment;
+
*p='\0';
comment_length<<=1;
- MagickReallocMemory(char *,comment,comment_length);
- if (comment == (char *) NULL)
- break;
+ new_comment=MagickReallocateResourceLimitedMemory(char *,comment,comment_length);
+ if (new_comment == (char *) NULL)
+ {
+ MagickFreeResourceLimitedMemory(comment);
+ break;
+ }
+ comment=new_comment;
p=comment+strlen(comment);
}
*p=c;
*p='\0';
(void) SetImageAttribute(image,"comment",comment);
comment_count++;
- MagickFreeMemory(comment);
+ MagickFreeResourceLimitedMemory(comment);
c=ReadBlobByte(image);
}
else
spaces and/or new-lines must be surrounded by braces.
*/
values_length=MaxTextExtent;
- values=MagickAllocateMemory(char *,values_length);
+ values=MagickAllocateResourceLimitedMemory(char *,values_length);
if (values == (char *) NULL)
ThrowMPCReaderException(ResourceLimitError,MemoryAllocationFailed,image);
values[0]='\0';
{
if ((size_t) (p-values+1) >= values_length)
{
+ char
+ *new_values;
+
*p='\0';
values_length<<=1;
- MagickReallocMemory(char *,values,values_length);
- if (values == (char *) NULL)
- break;
+ new_values=MagickReallocateResourceLimitedMemory(char *,values,values_length);
+ if (new_values == (char *) NULL)
+ {
+ MagickFreeResourceLimitedMemory(values);
+ break;
+ }
+ values=new_values;
p=values+strlen(values);
}
if (values == (char *) NULL)
ThrowMPCReaderException(CorruptImageError,ImproperImageHeader,image);
}
/*
+ Arbitrarily limit the number of header keywords to avoid DOS attempts.
+ */
+ if (keyword_count > ReadMPCMaxKeyWordCount)
+ {
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "Excessive key word count %u"
+ " (Denial of service attempt?)",keyword_count);
+ ThrowMPCReaderException(CorruptImageError,ImproperImageHeader,image);
+ }
+ /*
Assign a value to the specified keyword.
*/
switch (*keyword)
}
if (LocaleNCompare(keyword,"profile-",8) == 0)
{
+ ProfileInfo
+ *new_profiles;
+
i=(long) number_of_profiles;
- MagickReallocMemory(ProfileInfo *,profiles,MagickArraySize((size_t) i+1,sizeof(ProfileInfo)));
- if (profiles == (ProfileInfo *) NULL)
+
+ new_profiles=MagickReallocateResourceLimitedArray(ProfileInfo *,profiles,
+ (size_t) i+1,sizeof(ProfileInfo));
+ if (new_profiles == (ProfileInfo *) NULL)
{
- MagickFreeMemory(values);
+ for (i=0; i < number_of_profiles; i++)
+ {
+ MagickFreeMemory(profiles[i].name);
+ MagickFreeResourceLimitedMemory(profiles[i].info);
+ }
+ MagickFreeResourceLimitedMemory(profiles);
+ MagickFreeResourceLimitedMemory(values);
ThrowMPCReaderException(ResourceLimitError,MemoryAllocationFailed,image);
}
+ profiles=new_profiles;
profiles[i].name=AllocateString(keyword+8);
profiles[i].length=MagickAtoL(values);
profiles[i].info=(unsigned char *) NULL;
break;
}
}
- MagickFreeMemory(values);
+ MagickFreeResourceLimitedMemory(values);
}
else
{
(magick_off_t) profiles[i].length) ||
(profiles[i].length < 15*1024*1024)))
{
- profiles[i].info=MagickAllocateMemory(unsigned char *,profiles[i].length);
+ profiles[i].info=MagickAllocateResourceLimitedMemory(unsigned char *,profiles[i].length);
if (profiles[i].info == (unsigned char *) NULL)
- ThrowMPCReaderException(CorruptImageError,UnableToReadGenericProfile,
+ ThrowMPCReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
if (ReadBlob(image,profiles[i].length,profiles[i].info)
!= profiles[i].length)
ThrowMPCReaderException(CorruptImageError,
- UnexpectedEndOfFile,
- image);
+ UnexpectedEndOfFile,
+ image);
(void) SetImageProfile(image,profiles[i].name,profiles[i].info,profiles[i].length);
}
else
}
}
MagickFreeMemory(profiles[i].name);
- MagickFreeMemory(profiles[i].info);
+ MagickFreeResourceLimitedMemory(profiles[i].info);
}
- MagickFreeMemory(profiles);
+ MagickFreeResourceLimitedMemory(profiles);
number_of_profiles=0;
}
Read image colormap from file.
*/
packet_size=image->depth > 8 ? 6 : 3;
- colormap=MagickAllocateArray(unsigned char *,packet_size,image->colors);
+ colormap=MagickAllocateResourceLimitedArray(unsigned char *,packet_size,image->colors);
if (colormap == (unsigned char *) NULL)
ThrowMPCReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
image->colormap[i].blue=(*p++ << 8);
image->colormap[i].blue|=(*p++);
}
- MagickFreeMemory(colormap);
+ MagickFreeResourceLimitedMemory(colormap);
}
}
if (EOFBlob(image))
Allocate colormap.
*/
packet_size=image->depth > 8 ? 6 : 3;
- colormap=MagickAllocateArray(unsigned char *,packet_size,image->colors);
+ colormap=MagickAllocateResourceLimitedArray(unsigned char *,packet_size,image->colors);
if (colormap == (unsigned char *) NULL)
return(MagickFail);
/*
#endif /* QuantumDepth > 8 */
(void) WriteBlob(image, (size_t) packet_size*image->colors,colormap);
- MagickFreeMemory(colormap);
+ MagickFreeResourceLimitedMemory(colormap);
}
/*
Initialize persistent pixel cache.
/*
Convert MTV raster image to pixel packets.
*/
- pixels=MagickAllocateArray(unsigned char *,image->columns,3);
+ pixels=MagickAllocateResourceLimitedArray(unsigned char *,image->columns,3);
if (pixels == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
row_size= (size_t) image->columns*3;
image->columns,image->rows))
break;
}
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (EOFBlob(image))
{
ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,
Allocate memory for pixels.
*/
(void) TransformColorspace(image,RGBColorspace);
- pixels=MagickAllocateMemory(unsigned char *,
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,
image->columns*sizeof(PixelPacket));
if (pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
image->columns,image->rows))
break;
}
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (image->next == (Image *) NULL)
break;
image=SyncNextImageInList(image);
DestroyDrawInfo(draw_info);
ThrowReaderException(CorruptImageError,ImproperImageHeader,image);
}
+ /* SetImageAttribute concatenates values! Delete with NULL */
+ (void) SetImageAttribute(image,"[MVG]",NULL);
+ (void) SetImageAttribute(image,"[MVG]",draw_info->primitive);
(void) DrawImage(image,draw_info);
DestroyDrawInfo(draw_info);
CloseBlob(image);
/*
-% Copyright (C) 2003-2019 GraphicsMagick Group
+% Copyright (C) 2003-2020 GraphicsMagick Group
% Copyright (C) 2002 ImageMagick Studio
%
% This program is covered by multiple licenses, which are described in
*/
#define ThrowPALMReaderException(code_,reason_,image_) \
do { \
- MagickFreeMemory(one_row); \
- MagickFreeMemory(lastrow); \
+ MagickFreeResourceLimitedMemory(one_row); \
+ MagickFreeResourceLimitedMemory(lastrow); \
ThrowReaderException(code_,reason_,image_); \
} while (0);
static Image *ReadPALMImage(const ImageInfo *image_info,
ThrowPALMReaderException(ResourceLimitError,ImagePixelLimitExceeded,image);
alloc_size = Max(palm_header.bytes_per_row,MagickArraySize(2,image->columns));
- one_row = MagickAllocateMemory(unsigned char *,alloc_size);
+ one_row = MagickAllocateResourceLimitedMemory(unsigned char *,alloc_size);
if (one_row == (unsigned char *) NULL)
ThrowPALMReaderException(ResourceLimitError,MemoryAllocationFailed,image);
(void) memset(one_row,0,alloc_size);
if (palm_header.compression_type == PALM_COMPRESSION_SCANLINE)
{
alloc_size = Max(palm_header.bytes_per_row,MagickArraySize(2,image->columns));
- lastrow = MagickAllocateMemory(unsigned char *,alloc_size);
+ lastrow = MagickAllocateResourceLimitedMemory(unsigned char *,alloc_size);
if (lastrow == (unsigned char *) NULL)
ThrowPALMReaderException(ResourceLimitError,MemoryAllocationFailed,image);
(void) memset(lastrow,0,alloc_size);
}
}
- MagickFreeMemory(one_row);
- MagickFreeMemory(lastrow);
+ MagickFreeResourceLimitedMemory(one_row);
+ MagickFreeResourceLimitedMemory(lastrow);
CloseBlob(image);
StopTimer(&image->timer);
return(image);
if (palm_image->compression == FaxCompression)
{
- lastrow = MagickAllocateMemory(unsigned char *,bytes_per_row);
+ lastrow = MagickAllocateResourceLimitedMemory(unsigned char *,bytes_per_row);
if (lastrow == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
}
- one_row = MagickAllocateMemory(unsigned char *,bytes_per_row);
+ one_row = MagickAllocateResourceLimitedMemory(unsigned char *,bytes_per_row);
if (one_row == (unsigned char *) NULL)
{
- MagickFreeMemory(lastrow);
+ MagickFreeResourceLimitedMemory(lastrow);
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
}
CloseBlob(image);
DestroyImage(palm_image);
- MagickFreeMemory(one_row);
- MagickFreeMemory(lastrow);
+ MagickFreeResourceLimitedMemory(one_row);
+ MagickFreeResourceLimitedMemory(lastrow);
return(True);
}
#endif /* if ENABLE_PALM_WRITER */
(image->columns > 1536 ? 3U : 1U));
pcd_table[2]=pcd_table[1]=pcd_table[0]=(PCDTable *) NULL;
pcd_length[2]=pcd_length[1]=pcd_length[0]=0;
- buffer=MagickAllocateMemory(unsigned char *,0x800);
+ buffer=MagickAllocateResourceLimitedMemory(unsigned char *,0x800);
if (buffer == (unsigned char *) NULL)
ThrowBinaryException(ResourceLimitError,MemoryAllocationFailed,
(char *) NULL);
{
PCDGetBits(8);
length=(sum & 0xff)+1;
- pcd_table[i]=MagickAllocateArray(PCDTable *,length,sizeof(PCDTable));
+ pcd_table[i]=MagickAllocateResourceLimitedArray(PCDTable *,length,sizeof(PCDTable));
if (pcd_table[i] == (PCDTable *) NULL)
{
ThrowException(&image->exception,ResourceLimitError,
Free memory.
*/
for (i=0; i < (image->columns > 1536 ? 3 : 1); i++)
- MagickFreeMemory(pcd_table[i]);
- MagickFreeMemory(buffer);
+ MagickFreeResourceLimitedMemory(pcd_table[i]);
+ MagickFreeResourceLimitedMemory(buffer);
return(status);
}
\f
#define ThrowPCDReaderException(code_,reason_,image_) \
{ \
- MagickFreeMemory(chroma1); \
- MagickFreeMemory(chroma2); \
- MagickFreeMemory(luma); \
+ MagickFreeResourceLimitedMemory(chroma1); \
+ MagickFreeResourceLimitedMemory(chroma2); \
+ MagickFreeResourceLimitedMemory(luma); \
ThrowReaderException(code_,reason_,image_); \
}
number_pixels=MagickArraySize(image->columns,image->rows);
if (number_pixels == 0 || number_pixels+1 < number_pixels)
ThrowPCDReaderException(ResourceLimitError,MemoryAllocationFailed,image);
- chroma1=MagickAllocateMemory(unsigned char *,number_pixels+1);
- chroma2=MagickAllocateMemory(unsigned char *,number_pixels+1);
- luma=MagickAllocateMemory(unsigned char *,number_pixels+1);
+ chroma1=MagickAllocateResourceLimitedMemory(unsigned char *,number_pixels+1);
+ chroma2=MagickAllocateResourceLimitedMemory(unsigned char *,number_pixels+1);
+ luma=MagickAllocateResourceLimitedMemory(unsigned char *,number_pixels+1);
if ((chroma1 == (unsigned char *) NULL) ||
(chroma2 == (unsigned char *) NULL) ||
(luma == (unsigned char *) NULL))
image->columns,image->rows))
break;
}
- MagickFreeMemory(chroma2);
- MagickFreeMemory(chroma1);
- MagickFreeMemory(luma);
+ MagickFreeResourceLimitedMemory(chroma2);
+ MagickFreeResourceLimitedMemory(chroma1);
+ MagickFreeResourceLimitedMemory(luma);
while (image->previous != (Image *) NULL)
image=image->previous;
CloseBlob(image);
image->columns,image->rows))
break;
}
- MagickFreeMemory(chroma2);
- MagickFreeMemory(chroma1);
- MagickFreeMemory(luma);
+ MagickFreeResourceLimitedMemory(chroma2);
+ MagickFreeResourceLimitedMemory(chroma1);
+ MagickFreeResourceLimitedMemory(luma);
if (LocaleCompare(image_info->magick,"PCDS") == 0)
image->colorspace=sRGBColorspace;
else
/*
-% Copyright (C) 2003-2018 GraphicsMagick Group
+% Copyright (C) 2003-2020 GraphicsMagick Group
% Copyright (C) 2002 ImageMagick Studio
% Copyright 1991-1999 E. I. du Pont de Nemours and Company
%
Assign row buffer
*/
bytes_per_line=(image->columns*bits_per_pixel+7)/8;
- pixels=MagickAllocateMemory(unsigned char *,bytes_per_line);
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,bytes_per_line);
if (pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
last_row_compression = PCL_UndefinedCompression;
if (image_info->compression != NoCompression)
{
- MagickFreeMemory(last_row_pixels);
- last_row_pixels=MagickAllocateMemory(unsigned char *,bytes_per_line);
+ MagickFreeResourceLimitedMemory(last_row_pixels);
+ last_row_pixels=MagickAllocateResourceLimitedMemory(unsigned char *,bytes_per_line);
if (last_row_pixels == (unsigned char *) NULL)
{
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
}
- MagickFreeMemory(output_row);
- output_row=MagickAllocateMemory(unsigned char *,bytes_per_line);
+ MagickFreeResourceLimitedMemory(output_row);
+ output_row=MagickAllocateResourceLimitedMemory(unsigned char *,bytes_per_line);
if (output_row == (unsigned char *) NULL)
{
- MagickFreeMemory(pixels);
- MagickFreeMemory(last_row_pixels);
+ MagickFreeResourceLimitedMemory(pixels);
+ MagickFreeResourceLimitedMemory(last_row_pixels);
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
}
memset(last_row_pixels,0,bytes_per_line);
}
(void) WriteBlobString(image,"\033*rB"); /* end graphics */
- MagickFreeMemory(pixels);
- MagickFreeMemory(last_row_pixels);
- MagickFreeMemory(output_row);
+ MagickFreeResourceLimitedMemory(pixels);
+ MagickFreeResourceLimitedMemory(last_row_pixels);
+ MagickFreeResourceLimitedMemory(output_row);
if (image->next == (Image *) NULL)
break;
image=SyncNextImageInList(image);
*/
#define ThrowPCXReaderException(code_,reason_,image_) \
{ \
- MagickFreeMemory(page_table) \
- MagickFreeMemory(pcx_pixels); \
- MagickFreeMemory(scanline); \
+ MagickFreeResourceLimitedMemory(page_table) \
+ MagickFreeResourceLimitedMemory(pcx_pixels); \
+ MagickFreeResourceLimitedMemory(scanline); \
ThrowReaderException(code_,reason_,image_); \
}
static Image *ReadPCXImage(const ImageInfo *image_info,ExceptionInfo *exception)
magic=ReadBlobLSBLong(image);
if (magic != 987654321)
ThrowPCXReaderException(CorruptImageError,ImproperImageHeader,image);
- page_table=MagickAllocateArray(ExtendedSignedIntegralType *,
+ page_table=MagickAllocateResourceLimitedArray(ExtendedSignedIntegralType *,
1024,sizeof(ExtendedSignedIntegralType));
if (page_table == (ExtendedSignedIntegralType *) NULL)
ThrowPCXReaderException(ResourceLimitError,MemoryAllocationFailed,image);
(((size_t) pcx_info.bits_per_pixel*pcx_info.planes*image->columns) >
((size_t) pcx_packets*8U)))
ThrowPCXReaderException(CorruptImageError,ImproperImageHeader,image);
- pcx_pixels=MagickAllocateMemory(unsigned char *,pcx_packets);
+ pcx_pixels=MagickAllocateResourceLimitedMemory(unsigned char *,pcx_packets);
if (pcx_pixels == (unsigned char *) NULL)
ThrowPCXReaderException(ResourceLimitError,MemoryAllocationFailed,image);
scanline_size=MagickArraySize(Max(image->columns,
(size_t) pcx_info.bytes_per_line),
Max(pcx_info.planes,8));
- scanline=MagickAllocateMemory(unsigned char *,scanline_size);
+ scanline=MagickAllocateResourceLimitedMemory(unsigned char *,scanline_size);
if (scanline == (unsigned char *) NULL)
ThrowPCXReaderException(ResourceLimitError,MemoryAllocationFailed,image);
(void) memset(scanline,0,scanline_size);
image->columns,image->rows))
break;
}
- MagickFreeMemory(scanline);
- MagickFreeMemory(pcx_pixels);
+ MagickFreeResourceLimitedMemory(scanline);
+ MagickFreeResourceLimitedMemory(pcx_pixels);
if (EOFBlob(image))
{
ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,
}
}
if (page_table != (ExtendedSignedIntegralType *) NULL)
- MagickFreeMemory(page_table);
+ MagickFreeResourceLimitedMemory(page_table);
while (image->previous != (Image *) NULL)
image=image->previous;
CloseBlob(image);
#define LiberatePCXAllocations() \
{ \
- MagickFreeMemory(pcx_colormap); \
- MagickFreeMemory(pcx_pixels); \
- MagickFreeMemory(page_table); \
+ MagickFreeResourceLimitedMemory(pcx_colormap); \
+ MagickFreeResourceLimitedMemory(pcx_pixels); \
+ MagickFreeResourceLimitedMemory(page_table); \
}
#define ThrowPCXWriterException(code_,reason_,image_) \
*/
write_dcx=MagickTrue;
(void) WriteBlobLSBLong(image,0x3ADE68B1L);
- page_table=MagickAllocateMemory(ExtendedSignedIntegralType *,
+ page_table=MagickAllocateResourceLimitedMemory(ExtendedSignedIntegralType *,
1024*sizeof(ExtendedSignedIntegralType));
if (page_table == (ExtendedSignedIntegralType *) NULL)
ThrowPCXWriterException(ResourceLimitError,MemoryAllocationFailed,image);
/*
Dump colormap to file.
*/
- pcx_colormap=MagickAllocateMemory(unsigned char *,3*256);
+ pcx_colormap=MagickAllocateResourceLimitedMemory(unsigned char *,3*256);
if (pcx_colormap == (unsigned char *) NULL)
ThrowPCXWriterException(ResourceLimitError,MemoryAllocationFailed,image);
for (i=0; i < (3*256); i++)
for (i=0; i < 58; i++)
(void) WriteBlobByte(image,'\0');
/* Allocate memory for one pixel row. */
- pcx_pixels=MagickAllocateArray(unsigned char *,bytes_per_line,pcx_info.planes);
+ pcx_pixels=MagickAllocateResourceLimitedArray(unsigned char *,bytes_per_line,pcx_info.planes);
if (pcx_pixels == (unsigned char *) NULL)
ThrowPCXWriterException(ResourceLimitError,MemoryAllocationFailed,image);
q=pcx_pixels;
(void) WriteBlobByte(image,pcx_info.colormap_signature);
(void) WriteBlob(image,3*256,(char *) pcx_colormap);
- MagickFreeMemory(pcx_pixels);
- MagickFreeMemory(pcx_colormap);
+ MagickFreeResourceLimitedMemory(pcx_pixels);
+ MagickFreeResourceLimitedMemory(pcx_colormap);
if (image->next == (Image *) NULL)
break;
image=SyncNextImageInList(image);
(void) WriteBlobLSBLong(image,0x3ADE68B1L);
for (i=0; i <= (long) scene; i++)
(void) WriteBlobLSBLong(image,(unsigned long) page_table[i]);
- MagickFreeMemory(page_table);
+ MagickFreeResourceLimitedMemory(page_table);
}
if (status == False)
ThrowPCXWriterException(FileOpenError,UnableToWriteFile,image);
*/
#define ThrowPDBReaderException(code_,reason_,image_) \
{ \
- MagickFreeMemory(pixels); \
+ MagickFreeResourceLimitedMemory(pixels); \
ThrowReaderException(code_,reason_,image_); \
}
packets=MagickArraySize(MagickArraySize(bits_per_pixel,image->columns)/8,
image->rows);
- pixels=MagickAllocateMemory(unsigned char *,packets + (packets != 0 ? 256 : 0));
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,packets + (packets != 0 ? 256 : 0));
if (pixels == (unsigned char *) NULL)
ThrowPDBReaderException(ResourceLimitWarning,MemoryAllocationFailed,image);
(void) memset(pixels,0,packets+256);
image->compression=NoCompression;
if (ReadBlob(image,packets,(char *) pixels) != packets)
{
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
ThrowReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
break;
ThrowPDBReaderException(CorruptImageError,ImproperImageHeader,image);
}
}
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (EOFBlob(image))
ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,
image->filename);
*/
c=ReadBlobByte(image);
length=MaxTextExtent;
- comment=MagickAllocateMemory(char *,length+1);
+ comment=MagickAllocateResourceLimitedMemory(char *,length+1);
if (comment != (char *) NULL)
{
register char
{
if ((size_t) (p-comment) >= length)
{
+ char
+ *new_comment;
+
length<<=1;
length+=MaxTextExtent;
- MagickReallocMemory(char *,comment,length+1);
- if (comment == (char *) NULL)
- break;
+ new_comment=MagickReallocateResourceLimitedMemory(char *,comment,length+1);
+ if (new_comment == (char *) NULL)
+ {
+ MagickFreeResourceLimitedMemory(comment);
+ break;
+ }
+ comment=new_comment;
p=comment+strlen(comment);
}
*p=c;
if (comment == (char *) NULL)
ThrowPDBReaderException(ResourceLimitError,MemoryAllocationFailed,image);
(void) SetImageAttribute(image,"comment",comment);
- MagickFreeMemory(comment);
+ MagickFreeResourceLimitedMemory(comment);
}
CloseBlob(image);
StopTimer(&image->timer);
#define ThrowPDBWriterException(code_,reason_,image_) \
{ \
- MagickFreeMemory(buffer); \
- MagickFreeMemory(p); \
- MagickFreeMemory(scanline); \
+ MagickFreeResourceLimitedMemory(buffer); \
+ MagickFreeResourceLimitedMemory(p); \
+ MagickFreeResourceLimitedMemory(scanline); \
ThrowWriterException(code_,reason_,image_); \
}
packets=MagickArraySize(MagickArraySize(MagickArraySize(bits_per_pixel,
pdb_image.width)/8,
pdb_image.height),2);
- p=MagickAllocateMemory(unsigned char *,packets);
+ p=MagickAllocateResourceLimitedMemory(unsigned char *,packets);
if (p == (unsigned char *) NULL)
ThrowPDBWriterException(ResourceLimitWarning,MemoryAllocationFailed,image);
- buffer=MagickAllocateMemory(unsigned char *,512);
+ buffer=MagickAllocateResourceLimitedMemory(unsigned char *,512);
if (buffer == (unsigned char *) NULL)
ThrowPDBWriterException(ResourceLimitWarning,MemoryAllocationFailed,image);
(void) memset(buffer,0,512);
packet_size=bits_per_pixel > 8 ? 2: 1;
- scanline=MagickAllocateArray(unsigned char *,image->columns,packet_size);
+ scanline=MagickAllocateResourceLimitedArray(unsigned char *,image->columns,packet_size);
if (scanline == (unsigned char *) NULL)
ThrowPDBWriterException(ResourceLimitWarning,MemoryAllocationFailed,image);
(void) TransformColorspace(image,RGBColorspace);
break;
}
q=EncodeRLE(q,buffer,literal,repeat);
- MagickFreeMemory(scanline);
- MagickFreeMemory(buffer);
+ MagickFreeResourceLimitedMemory(scanline);
+ MagickFreeResourceLimitedMemory(buffer);
/*
Write the Image record header.
*/
(void) WriteBlobMSBShort(image,pdb_image.width);
(void) WriteBlobMSBShort(image,pdb_image.height);
(void) WriteBlob(image,q-p,p);
- MagickFreeMemory(p);
+ MagickFreeResourceLimitedMemory(p);
if ((comment != (ImageAttribute *) NULL) && (comment->value != (char *) NULL))
(void) WriteBlobString(image,comment->value);
CloseBlob(image);
%
%
*/
+#if defined(HasGS)
static Image *ReadPDFImage(const ImageInfo *image_info,ExceptionInfo *exception)
{
#define MediaBox "/MediaBox"
}
return(image);
}
+#endif /* if defined(HasGS) */
\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*entry;
entry=SetMagickInfo("EPDF");
+#if defined(HasGS)
entry->decoder=(DecoderHandler) ReadPDFImage;
+#endif /* if defined(HasGS) */
entry->encoder=(EncoderHandler) WritePDFImage;
entry->adjoin=False;
entry->blob_support=False;
(void) RegisterMagickInfo(entry);
entry=SetMagickInfo("PDF");
+#if defined(HasGS)
entry->decoder=(DecoderHandler) ReadPDFImage;
+#endif /* if defined(HasGS) */
entry->encoder=(EncoderHandler) WritePDFImage;
entry->magick=(MagickHandler) IsPDF;
entry->blob_support=False;
return(paren_buffer);
}
-#define ThrowPDFWriterException(code_,reason_,image_) \
- { \
- MagickFreeMemory(fax_blob); \
- MagickFreeMemory(xref); \
- ThrowWriterException(code_,reason_,image_); \
+#define ThrowPDFWriterException(code_,reason_,image_) \
+ { \
+ MagickFreeMemory(fax_blob); \
+ MagickFreeResourceLimitedMemory(xref); \
+ ThrowWriterException(code_,reason_,image_); \
}
-#define ThrowPDFWriterException2(code_,reason_,image_) \
- { \
- MagickFreeMemory(fax_blob); \
- MagickFreeMemory(xref); \
- ThrowWriterException2(code_,reason_,image_); \
+#define ThrowPDFWriterException2(code_,reason_,image_) \
+ { \
+ MagickFreeMemory(fax_blob); \
+ MagickFreeResourceLimitedMemory(xref); \
+ ThrowWriterException2(code_,reason_,image_); \
}
static unsigned int WritePDFImage(const ImageInfo *image_info,Image *image)
{
/*
Allocate X ref memory.
*/
- xref=MagickAllocateMemory(ExtendedSignedIntegralType *,
+ xref=MagickAllocateResourceLimitedMemory(ExtendedSignedIntegralType *,
2048*sizeof(ExtendedSignedIntegralType));
if (xref == (ExtendedSignedIntegralType *) NULL)
ThrowPDFWriterException(ResourceLimitError,MemoryAllocationFailed,image);
Image
*kid_image;
+ ExtendedSignedIntegralType
+ *new_xref;
+
/*
Predict page object id's.
*/
(void) WriteBlobString(image,buffer);
kid_image=kid_image->next;
}
- MagickReallocMemory(ExtendedSignedIntegralType *,xref,
- MagickArraySize((size_t) count+2048,sizeof(ExtendedSignedIntegralType)));
- if (xref == (ExtendedSignedIntegralType *) NULL)
- ThrowPDFWriterException(ResourceLimitError,MemoryAllocationFailed,image);
+ new_xref=MagickReallocateResourceLimitedArray(ExtendedSignedIntegralType *,xref,
+ (size_t) count+2048,sizeof(ExtendedSignedIntegralType));
+ if (new_xref == (ExtendedSignedIntegralType *) NULL)
+ {
+ MagickFreeResourceLimitedMemory(xref);
+ ThrowPDFWriterException(ResourceLimitError,MemoryAllocationFailed,image);
+ }
+ xref=new_xref;
}
(void) WriteBlobString(image,"]\n");
FormatString(buffer,"/Count %lu\n",(count-pages_id)/ObjectsPerImage);
FormatString(buffer,"(%.1024s) Tj\n",labels[i]);
(void) WriteBlobString(image,buffer);
(void) WriteBlobString(image,"ET\n");
- MagickFreeMemory(labels[i]);
+ MagickFreeResourceLimitedMemory(labels[i]);
}
- MagickFreeMemory(labels);
+ MagickFreeResourceLimitedMemory(labels);
}
FormatString(buffer,"%g 0 0 %g %ld %ld cm\n",x_scale,y_scale,geometry.x,
geometry.y);
Allocate pixel array.
*/
length=number_pixels;
- pixels=MagickAllocateMemory(unsigned char *,length);
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,length);
if (pixels == (unsigned char *) NULL)
ThrowPDFWriterException(ResourceLimitError,MemoryAllocationFailed,
image);
status=LZWEncodeImage(image,length,pixels);
else
status=PackbitsEncodeImage(image,length,pixels);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (!status)
{
CloseBlob(image);
- MagickFreeMemory(xref);
+ MagickFreeResourceLimitedMemory(xref);
return(MagickFail);
}
break;
Allocate pixel array.
*/
length=(size_t) (image->colorspace == CMYKColorspace ? 4 : 3)*number_pixels;
- pixels=MagickAllocateMemory(unsigned char *,length);
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,length);
if (pixels == (unsigned char *) NULL)
ThrowPDFWriterException(ResourceLimitError,MemoryAllocationFailed,
image);
status=LZWEncodeImage(image,length,pixels);
else
status=PackbitsEncodeImage(image,length,pixels);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (!status)
{
CloseBlob(image);
- MagickFreeMemory(xref);
+ MagickFreeResourceLimitedMemory(xref);
return(False);
}
break;
Allocate pixel array.
*/
length=number_pixels;
- pixels=MagickAllocateMemory(unsigned char *,length);
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,length);
if (pixels == (unsigned char *) NULL)
ThrowPDFWriterException(ResourceLimitError,MemoryAllocationFailed,image);
/*
status=LZWEncodeImage(image,length,pixels);
else
status=PackbitsEncodeImage(image,length,pixels);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (!status)
{
CloseBlob(image);
- MagickFreeMemory(xref);
+ MagickFreeResourceLimitedMemory(xref);
return(False);
}
break;
FormatString(buffer,"%lu\n",(unsigned long) offset);
(void) WriteBlobString(image,buffer);
(void) WriteBlobString(image,"%%EOF\n");
- MagickFreeMemory(xref);
+ MagickFreeResourceLimitedMemory(xref);
CloseBlob(image);
MagickFreeMemory(fax_blob);
return(MagickPass);
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
compressed_packets=(unsigned long) (1.001*length+12);
- compressed_pixels=MagickAllocateMemory(unsigned char *,compressed_packets);
+ compressed_pixels=MagickAllocateResourceLimitedMemory(unsigned char *,compressed_packets);
if (compressed_pixels == (unsigned char *) NULL)
ThrowBinaryException(ResourceLimitError,MemoryAllocationFailed,
(char *) NULL);
else
for (i=0; i < (long) compressed_packets; i++)
(void) WriteBlobByte(image,compressed_pixels[i]);
- MagickFreeMemory(compressed_pixels);
+ MagickFreeResourceLimitedMemory(compressed_pixels);
return(!status);
}
#endif
Allocate pixel and scanline buffer.
*/
allocated_pixels=MagickArraySize(image->rows,row_bytes);
- pixels=MagickAllocateClearedMemory(unsigned char *,allocated_pixels);
+ pixels=MagickAllocateResourceLimitedClearedMemory(unsigned char *,allocated_pixels);
if (pixels == (unsigned char *) NULL)
{
ThrowException(&image->exception,ResourceLimitError,MemoryAllocationFailed,
else
scanline_alloc = 65536U+256U; /* Allocate extra for RLE over-run */
- scanline=MagickAllocateClearedMemory(unsigned char *,scanline_alloc);
+ scanline=MagickAllocateResourceLimitedClearedMemory(unsigned char *,scanline_alloc);
if (scanline == (unsigned char *) NULL)
{
ThrowException(&image->exception,ResourceLimitError,MemoryAllocationFailed,
p=ExpandBuffer(expand_buffer,scanline,&number_pixels,bits_per_pixel);
(void) memcpy(q,p,number_pixels);
}
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
return(pixels);
}
/*
j+=bytes_per_pixel+1;
}
}
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
return (pixels);
decode_error_exit:
- MagickFreeMemory(scanline);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(scanline);
+ MagickFreeResourceLimitedMemory(pixels);
return (unsigned char *) NULL;
}
\f
image->columns,image->rows))
break;
}
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (tile_image->exception.severity > image->exception.severity)
CopyException(&image->exception,&tile_image->exception);
if ((tile_image->exception.severity < ErrorException) && (jpeg == False))
length-=Min(4,length);
if (length == 0)
break;
- info=MagickAllocateMemory(unsigned char *,length);
+ info=MagickAllocateResourceLimitedMemory(unsigned char *,length);
if (info == (unsigned char *) NULL)
break;
(void) ReadBlob(image,length,info);
break;
if (SetImageProfile(image,"ICM",info,length) == MagickFail)
ThrowPICTReaderException(ResourceLimitError,MemoryAllocationFailed,image);
- MagickFreeMemory(info);
+ MagickFreeResourceLimitedMemory(info);
break;
}
case 0x1f2:
break;
if (SetImageProfile(image,"IPTC",info,length) == MagickFail)
ThrowPICTReaderException(ResourceLimitError,MemoryAllocationFailed,image);
- MagickFreeMemory(info);
+ MagickFreeResourceLimitedMemory(info);
break;
}
default:
break;
}
- MagickFreeMemory(info);
+ MagickFreeResourceLimitedMemory(info);
break;
}
default:
for (i=0; i < 122; i++)
if (ReadBlobByte(image) == EOF)
ThrowPICTReaderException(CorruptImageError,UnexpectedEndOfFile,image);
- if ((blob_alloc=MagickAllocateMemory(void *,blob_alloc_size)) == (void *) NULL)
+ if ((blob_alloc=MagickAllocateResourceLimitedMemory(void *,blob_alloc_size)) == (void *) NULL)
ThrowPICTReaderException(ResourceLimitError,MemoryAllocationFailed,image);
blob=blob_alloc;
clone_info=CloneImageInfo(image_info);
(void) strlcpy(clone_info->filename,"JPEG:",sizeof(clone_info->filename));
if (ReadBlobZC(image,blob_alloc_size,&blob) != blob_alloc_size)
{
- MagickFreeMemory(blob_alloc);
+ MagickFreeResourceLimitedMemory(blob_alloc);
ThrowPICTReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
if (blob != blob_alloc)
tile_image=BlobToImage(clone_info, blob, blob_alloc_size, &image->exception );
DestroyImageInfo(clone_info);
clone_info=(ImageInfo *) NULL;
- MagickFreeMemory(blob_alloc);
+ MagickFreeResourceLimitedMemory(blob_alloc);
}
if (tile_image == (Image *) NULL)
continue;
*/
#define LiberatePICTAllocations() \
{ \
- MagickFreeMemory(buffer); \
- MagickFreeMemory(packed_scanline); \
- MagickFreeMemory(scanline); \
+ MagickFreeResourceLimitedMemory(buffer); \
+ MagickFreeResourceLimitedMemory(packed_scanline); \
+ MagickFreeResourceLimitedMemory(scanline); \
}
#define ThrowPICTWriterException(code_,reason_,image_) \
{ \
bytes_per_line=(size_t) image->columns;
if (storage_class == DirectClass)
bytes_per_line = MagickArraySize(bytes_per_line, image->matte ? 4 : 3);
- if ((bytes_per_line == 0) || (bytes_per_line > 0x7FFFU) || ((row_bytes+MaxCount*2U) >= 0x7FFFU))
+ if ((row_bytes >= (size_t) SIZE_MAX/2) || (bytes_per_line == 0) ||
+ (bytes_per_line > 0x7FFFU) || ((row_bytes+MaxCount*2U) >= 0x7FFFU))
ThrowPICTWriterException(CoderError,UnsupportedNumberOfColumns,image);
-#if defined(PTRDIFF_MAX)
- /*
- Without this limit check we get the following warning from GCC when allocating row_bytes:
-
- warning: argument 1 value ‘18446744073709551488’ exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
- */
- if (!(row_bytes <= PTRDIFF_MAX))
- ThrowPICTWriterException(ResourceLimitError,MemoryAllocationFailed,image);
-#endif /* if defined(PTRDIFF_MAX) */
- buffer=MagickAllocateMemory(unsigned char *,PictInfoSize);
- packed_scanline=MagickAllocateMemory(unsigned char *,row_bytes+MaxCount*2U);
- scanline=MagickAllocateMemory(unsigned char *,row_bytes);
+ buffer=MagickAllocateResourceLimitedMemory(unsigned char *,PictInfoSize);
+ packed_scanline=MagickAllocateResourceLimitedMemory(unsigned char *,(row_bytes+MaxCount*2U));
+ scanline=MagickAllocateResourceLimitedMemory(unsigned char *,row_bytes);
if ((buffer == (unsigned char *) NULL) ||
(packed_scanline == (unsigned char *) NULL) ||
(scanline == (unsigned char *) NULL))
(void) WriteBlob(image,length,blob);
if (length & 0x01)
(void) WriteBlobByte(image,'\0');
- MagickFreeMemory(blob);
+ MagickFreeResourceLimitedMemory(blob);
}
/*
Write picture opcode, row bytes, and picture bounding box, and version.
offset=TellBlob(image);
(void) SeekBlob(image,512,SEEK_SET);
(void) WriteBlobMSBShort(image,(unsigned long) offset);
- MagickFreeMemory(scanline);
- MagickFreeMemory(packed_scanline);
- MagickFreeMemory(buffer);
+ MagickFreeResourceLimitedMemory(scanline);
+ MagickFreeResourceLimitedMemory(packed_scanline);
+ MagickFreeResourceLimitedMemory(buffer);
CloseBlob(image);
return(True);
}
}
if (*color_image)
{
- DestroyImage(*color_image);
+ DestroyImageList(*color_image);
*color_image = (Image *)NULL;
}
if (*alpha_image)
{
- DestroyImage(*alpha_image);
+ DestroyImageList(*alpha_image);
*alpha_image = (Image *)NULL;
}
}
if (!image_info->ping && jng_color_type >= 12)
{
+ if ((jng_alpha_compression_method != 0) &&
+ (jng_alpha_compression_method != 8))
+ {
+ if (logging)
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "Unsupported Alpha_compression_method: %u",
+ jng_alpha_compression_method);
+ DestroyJNG(chunk,&color_image,&color_image_info,
+ &alpha_image,&alpha_image_info);
+ ThrowException(exception,CorruptImageError,ImproperImageHeader,
+ image->filename);
+ return ((Image *)NULL);
+ }
+
alpha_image_info=MagickAllocateMemory(ImageInfo *,
sizeof(ImageInfo));
if (alpha_image_info == (ImageInfo *) NULL)
ThrowException(exception,CorruptImageError,
ImageFileDoesNotContainAnyImageData,image->filename);
}
- DestroyImage(color_image);
+ DestroyImageList(color_image);
color_image=(Image *) NULL;
return (Image *) NULL;
}
FormatString(color_image_info->filename,"JPEG:%.1024s",color_image->filename);
color_image_info->ping=MagickFalse; /* To do: avoid this */
+ color_image_info->subimage=0;
+ color_image_info->subrange=1;
+
jng_image=ReadImage(color_image_info,exception);
(void) LiberateUniqueFileResource(color_image->filename);
DestroyImage(color_image);
{
if (jng_color_type >= 12)
{
+ /*
+ Alpha is stored in PNG or JPEG format:
+ Alpha_compression_method:
+ 1 byte.
+ 0: PNG grayscale IDAT format.
+ 8: JNG 8-bit grayscale JDAA format
+ */
+ const char *jng_alpha_magick=
+ (jng_alpha_compression_method == 0 ? "PNG" :
+ (jng_alpha_compression_method == 8 ? "JPEG" :
+ "UNKNOWN"));
if (jng_alpha_compression_method == 0)
{
png_byte
CloseBlob(alpha_image);
if (logging)
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
- " Reading opacity from alpha_blob.");
-
- FormatString(alpha_image_info->filename,"%.1024s",
- alpha_image->filename);
+ " Reading opacity from %s alpha_blob.",
+ jng_alpha_magick);
+ FormatString(alpha_image_info->filename,"%s:%.1024s",
+ jng_alpha_magick, alpha_image->filename);
+ alpha_image_info->subimage=0;
+ alpha_image_info->subrange=1;
jng_image=ReadImage(alpha_image_info,exception);
if (logging)
{
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
- " Read jng_image.");
+ " Read jng_image (%s)",image->magick);
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
" jng_image->width=%lu, jng_image->height=%lu",
(unsigned long)jng_width,(unsigned long)jng_height);
&alpha_image,&alpha_image_info);
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
" Destroy the JNG image");
- DestroyImage(jng_image);
+ DestroyImageList(jng_image);
jng_image = (Image *)NULL;
}
}
/*
If magnifying and a supported method is requested then
magnify the image.
+
+ http://www.libpng.org/pub/mng/spec/mng-1.0-20010209-pdg.html#mng-MAGN
*/
if (((mng_info->magn_methx > 0) && (mng_info->magn_methx <= 5)) &&
((mng_info->magn_methy > 0) && (mng_info->magn_methy <= 5)))
if (logging)
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
- " Processing MNG MAGN chunk");
+ " Processing MNG MAGN chunk: MB=%u, ML=%u,"
+ " MR=%u, MT=%u, MX=%u, MY=%u,"
+ " X_method=%u, Y_method=%u",
+ mng_info->magn_mb,mng_info->magn_ml,
+ mng_info->magn_mr,mng_info->magn_mt,
+ mng_info->magn_mx,mng_info->magn_my,
+ mng_info->magn_methx,
+ mng_info->magn_methy);
+
+ /*
+ If the image width is 1, then X magnification is done
+ by simple pixel replication.
+ */
+ if (image->columns == 1)
+ mng_info->magn_methx = 1;
+
+ /*
+ If the image height is 1, then Y magnification is done
+ by simple pixel replication.
+ */
+ if (image->rows == 1)
+ mng_info->magn_methy = 1;
if (mng_info->magn_methx == 1)
{
Image
*large_image;
- int
- yy;
-
long
m,
- y;
+ y,
+ yy;
register long
x;
/* Define these outside of the following "if logging()" block so they will
* show in debuggers.
*/
- gm_vers=MagickLibVersionText;
+ gm_vers=MagickLibVersionText;
#ifdef HasLCMS
- (void) sprintf(lcms_vers,"%.4d",LCMS_VERSION);
+ (void) sprintf(lcms_vers,"%.4d",LCMS_VERSION);
#endif
- libpng_runv=png_get_libpng_ver(NULL);
- libpng_vers=PNG_LIBPNG_VER_STRING;
- zlib_runv=zlib_version;
- zlib_vers=ZLIB_VERSION;
+ libpng_runv=png_get_libpng_ver(NULL);
+ libpng_vers=PNG_LIBPNG_VER_STRING;
+ zlib_runv=zlib_version;
+ zlib_vers=ZLIB_VERSION;
if (logging != MagickFalse)
{
PNGType(chunk,mng_eXIf);
if (length < 7)
- break; /* othewise crashes */
+ break; /* otherwise crashes */
- /* skip the "Exif\0\0" JFIF Exif Header ID */
- length -= 6;
+ if (data[0] == 'E' && data[1] == 'x' && data[2] == 'i' &&
+ data[3] == 'f' && data[4] == '\0' && data[5] == '\0')
+ {
+ /* skip the optional Exif identifier code ("Exif\0\0") */
+ length -= 6;
+ data += 6;
+ }
LogPNGChunk(logging,chunk,length);
(void) WriteBlobMSBULong(image,length);
(void) WriteBlob(image,4,chunk);
- (void) WriteBlob(image,length,data+6);
+ (void) WriteBlob(image,length,data);
(void) WriteBlobMSBULong(image,crc32(crc32(0,chunk,4),
- data+6, (uInt) length));
+ data, (uInt) length));
break;
}
}
}
}
length=MaxTextExtent;
- comment=MagickAllocateMemory(char *,length+sizeof(P7Comment));
+ comment=MagickAllocateResourceLimitedMemory(char *,length+sizeof(P7Comment));
p=comment;
offset=p-comment;
if (comment != (char *) NULL)
size_t
text_length;
+ char
+ *new_comment;
+
text_length=(size_t) (p-comment);
length<<=1;
length+=MaxTextExtent;
- MagickReallocMemory(char *,comment,length+sizeof(P7Comment));
- if (comment == (char *) NULL)
- break;
+ new_comment=MagickReallocateResourceLimitedMemory(char *,comment,length+sizeof(P7Comment));
+ if (new_comment == (char *) NULL)
+ {
+ MagickFreeResourceLimitedMemory(comment);
+ break;
+ }
+ comment=new_comment;
p=comment+text_length;
}
c=ReadBlobByte(image);
can span multiple lines.
*/
(void) SetImageAttribute(image,"comment",comment);
- MagickFreeMemory(comment);
+ MagickFreeResourceLimitedMemory(comment);
continue;
}
} while (!isdigit(c));
/*
Allocate memory for pixels.
*/
- pixels=MagickAllocateMemory(unsigned char *,bytes_per_row);
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,bytes_per_row);
if (pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,
image);
image->columns,image->rows))
break;
}
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
break;
}
for (i=0; i < 2; i++)
for (j=0; j < 16; j++)
{
- red_map[i][j]=MagickAllocateMemory(unsigned short *,
+ red_map[i][j]=MagickAllocateResourceLimitedMemory(unsigned short *,
256*sizeof(unsigned short));
- green_map[i][j]=MagickAllocateMemory(unsigned short *,
+ green_map[i][j]=MagickAllocateResourceLimitedMemory(unsigned short *,
256*sizeof(unsigned short));
- blue_map[i][j]=MagickAllocateMemory(unsigned short *,
+ blue_map[i][j]=MagickAllocateResourceLimitedMemory(unsigned short *,
256*sizeof(unsigned short));
if ((red_map[i][j] == (unsigned short *) NULL) ||
(green_map[i][j] == (unsigned short *) NULL) ||
for (i=0; i < 2; i++)
for (j=0; j < 16; j++)
{
- MagickFreeMemory(green_map[i][j]);
- MagickFreeMemory(blue_map[i][j]);
- MagickFreeMemory(red_map[i][j]);
+ MagickFreeResourceLimitedMemory(green_map[i][j]);
+ MagickFreeResourceLimitedMemory(blue_map[i][j]);
+ MagickFreeResourceLimitedMemory(red_map[i][j]);
}
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,
image);
for (i=0; i < 2; i++)
for (j=0; j < 16; j++)
{
- MagickFreeMemory(green_map[i][j]);
- MagickFreeMemory(blue_map[i][j]);
- MagickFreeMemory(red_map[i][j]);
+ MagickFreeResourceLimitedMemory(green_map[i][j]);
+ MagickFreeResourceLimitedMemory(blue_map[i][j]);
+ MagickFreeResourceLimitedMemory(red_map[i][j]);
}
break;
}
Free image directory.
*/
MagickFreeMemory(montage_image->montage);
- montage_image->montage=(char *) NULL;
- if (image->directory != (char *) NULL)
- {
- MagickFreeMemory(montage_image->directory);
- montage_image->directory=(char *) NULL;
- }
+ MagickFreeMemory(montage_image->directory);
}
FormatString(montage_image->filename,"miff:%.1024s",image_info->filename);
status=WriteImage(image_info,montage_image);
%
%
*/
+#if defined(HasGS)
static Image *ReadPSImage(const ImageInfo *image_info,ExceptionInfo *exception)
{
#define BoundingBox "%%BoundingBox:"
DestroyImageInfo(clone_info);
}
(void) LiberateTemporaryFile((char *) image_info->filename);
-#if defined(HasDPS)
- if (image == (Image *) NULL)
- {
- /*
- Ghostscript has failed-- try the Display Postscript Extension.
- */
- (void) FormatString((char *) image_info->filename,"dps:%.1024s",filename);
- image=ReadImage(image_info,exception);
- }
-#endif /* defined(HasDPS) */
if (image == (Image *) NULL)
{
if (UndefinedException == exception->severity)
}
return(image);
}
+#endif /* if defined(HasGS) */
\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*entry;
entry=SetMagickInfo("EPI");
+#if defined(HasGS)
entry->decoder=(DecoderHandler) ReadPSImage;
+#endif /* if defined(HasGS) */
entry->encoder=(EncoderHandler) WritePSImage;
entry->magick=(MagickHandler) IsPS;
entry->adjoin=False;
(void) RegisterMagickInfo(entry);
entry=SetMagickInfo("EPS");
+#if defined(HasGS)
entry->decoder=(DecoderHandler) ReadPSImage;
+#endif /* if defined(HasGS) */
entry->encoder=(EncoderHandler) WritePSImage;
entry->magick=(MagickHandler) IsPS;
entry->adjoin=False;
(void) RegisterMagickInfo(entry);
entry=SetMagickInfo("EPSF");
+#if defined(HasGS)
entry->decoder=(DecoderHandler) ReadPSImage;
+#endif /* if defined(HasGS) */
entry->encoder=(EncoderHandler) WritePSImage;
entry->magick=(MagickHandler) IsPS;
entry->adjoin=False;
(void) RegisterMagickInfo(entry);
entry=SetMagickInfo("EPSI");
+#if defined(HasGS)
entry->decoder=(DecoderHandler) ReadPSImage;
+#endif /* if defined(HasGS) */
entry->encoder=(EncoderHandler) WritePSImage;
entry->magick=(MagickHandler) IsPS;
entry->adjoin=False;
(void) RegisterMagickInfo(entry);
entry=SetMagickInfo("PS");
+#if defined(HasGS)
entry->decoder=(DecoderHandler) ReadPSImage;
+#endif /* if defined(HasGS) */
entry->encoder=(EncoderHandler) WritePSImage;
entry->magick=(MagickHandler) IsPS;
entry->description="Adobe PostScript";
/*
Dump image as grayscale.
*/
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "Writing image as grayscale...");
i++;
bp=buffer;
for (y=0; y < (long) image->rows; y++)
/*
Dump image as bitmap.
*/
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "Writing image as monochrome bitmap...");
(void) SetImageType(image,BilevelType);
- polarity=PixelIntensityToQuantum(&image->colormap[0]) < (MaxRGB/2);
- if (image->colors == 2)
- polarity=PixelIntensityToQuantum(&image->colormap[1]) <
- PixelIntensityToQuantum(&image->colormap[0]);
count=0;
bp=buffer;
for (y=0; y < (long) image->rows; y++)
for (x=0; x < (long) image->columns; x++)
{
byte<<=1;
- if (indexes[x] != polarity)
- byte|=0x01;
+ if (image->storage_class == PseudoClass)
+ {
+ if (GetGraySample(&image->colormap[indexes[x]]) >= MaxRGB/2)
+ byte|=0x01;
+ }
+ else
+ {
+ if (GetGraySample(p) >= MaxRGB/2)
+ byte|=0x01;
+ }
bit++;
if (bit == 8)
{
/*
Dump runlength-encoded DirectColor packets.
*/
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "Writing image as DirectColor "
+ "(RLE compressed)...");
bp=buffer;
for (y=0; y < (long) image->rows; y++)
{
/*
Dump uncompressed DirectColor packets.
*/
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "Writing image as DirectColor "
+ "(uncompressed)...");
i=0;
bp=buffer;
for (y=0; y < (long) image->rows; y++)
/*
Dump runlength-encoded PseudoColor packets.
*/
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "Writing image as PseudoColor "
+ "(%u colors, RLE compressed)...",
+ image->colors);
i=0;
bp=buffer;
for (y=0; y < (long) image->rows; y++)
/*
Dump uncompressed PseudoColor packets.
*/
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "Writing image as PseudoColor "
+ "(%u colors, unompressed)...",
+ image->colors);
i=0;
bp=buffer;
for (y=0; y < (long) image->rows; y++)
for (i=1; i < (long) TIFFNumberOfStrips(tiff); i++)
if (byte_count[i] > strip_size)
strip_size=byte_count[i];
- buffer=MagickAllocateMemory(unsigned char *,strip_size);
+ buffer=MagickAllocateResourceLimitedMemory(unsigned char *,strip_size);
if (buffer == (unsigned char *) NULL)
{
TIFFClose(tiff);
Ascii85Encode(image,(unsigned long) buffer[j]);
Ascii85Flush(image);
}
- MagickFreeMemory(buffer);
+ MagickFreeResourceLimitedMemory(buffer);
TIFFClose(tiff);
(void) LiberateTemporaryFile(filename);
return(True);
Allocate pixel array.
*/
length=number_pixels;
- pixels=MagickAllocateMemory(unsigned char *,length);
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,length);
if (pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,
image);
status=LZWEncodeImage(image,length,pixels);
else
status=PackbitsEncodeImage(image,length,pixels);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (!status)
{
CloseBlob(image);
*/
length=MagickArraySize(image->colorspace == CMYKColorspace ? 4 : 3,
number_pixels);
- pixels=MagickAllocateMemory(unsigned char *,length);
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,length);
if (pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
/*
CloseBlob(image);
return(False);
}
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
break;
}
case NoCompression:
Allocate pixel array.
*/
length=number_pixels;
- pixels=MagickAllocateMemory(unsigned char *,length);
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,length);
if (pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
/*
status=LZWEncodeImage(image,length,pixels);
else
status=PackbitsEncodeImage(image,length,pixels);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (!status)
{
CloseBlob(image);
strip_size=byte_count[i];
*length+=byte_count[i];
}
- buffer=MagickAllocateMemory(unsigned char *,strip_size);
+ buffer=MagickAllocateResourceLimitedMemory(unsigned char *,strip_size);
if (buffer == (unsigned char *) NULL)
{
TIFFClose(tiff);
ThrowBinaryException(ResourceLimitError,MemoryAllocationFailed,
(char *) NULL)
}
- *pixels=MagickAllocateMemory(unsigned char *,*length);
+ *pixels=MagickAllocateResourceLimitedMemory(unsigned char *,*length);
if (*pixels == (unsigned char *) NULL)
{
- MagickFreeMemory(buffer);
+ MagickFreeResourceLimitedMemory(buffer);
TIFFClose(tiff);
(void) LiberateTemporaryFile(filename);
ThrowBinaryException(ResourceLimitError,MemoryAllocationFailed,
for (j=0; j < count; j++)
*p++=buffer[j];
}
- MagickFreeMemory(buffer);
+ MagickFreeResourceLimitedMemory(buffer);
TIFFClose(tiff);
(void) LiberateTemporaryFile(filename);
return(True);
for (i=0; i < length; i++)
Ascii85Encode(image,(unsigned long) pixels[i]);
Ascii85Flush(image);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
return(True);
}
assert(image->signature == MagickSignature);
status=True;
*length=MagickArraySize(image->columns,image->rows);
- *pixels=MagickAllocateMemory(unsigned char *, *length);
+ *pixels=MagickAllocateResourceLimitedMemory(unsigned char *, *length);
if (*pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
q=(*pixels);
}
}
if (status == False)
- MagickFreeMemory(*pixels);
+ MagickFreeResourceLimitedMemory(*pixels);
return(status);
}
\f
assert(image->signature == MagickSignature);
status=True;
*length=(size_t) (image->colorspace == CMYKColorspace ? 4U : 3U)*MagickArraySize(image->columns,image->rows);
- *pixels=MagickAllocateMemory(unsigned char *, *length);
+ *pixels=MagickAllocateResourceLimitedMemory(unsigned char *, *length);
if (*pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
}
}
if (status == False)
- MagickFreeMemory(*pixels);
+ MagickFreeResourceLimitedMemory(*pixels);
return(status);
}
\f
/* Padded columns are padded to byte boundary */
padded_columns=((image->columns+pack-1)/pack)*pack;
*length=padded_columns*image->rows/pack;
- *pixels=MagickAllocateMemory(unsigned char *, *length);
+ *pixels=MagickAllocateResourceLimitedMemory(unsigned char *, *length);
if (*pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,
image);
}
}
if (status == False)
- MagickFreeMemory(*pixels);
+ MagickFreeResourceLimitedMemory(*pixels);
return(status);
}
/*
for (i=0; i < length; i++)
Ascii85Encode(image, (unsigned long)pixels[i]);
Ascii85Flush(image);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
}
break;
case FaxCompression:
for (i=0; i < length; i++)
Ascii85Encode(image,(unsigned long) pixels[i]);
Ascii85Flush(image);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
}
}
break;
status=PackbitsEncode2Image(image,length,pixels,
Ascii85WriteByteHook,(void *)NULL);
Ascii85Flush(image);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
}
break;
case LZWCompression:
Ascii85Initialize(image);
status=LZWEncode2Image(image,length,pixels,Ascii85WriteByteHook,(void*)NULL);
Ascii85Flush(image);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
}
break;
case ZipCompression:
status=ZLIBEncode2Image(image,length,image_info->quality,pixels,
Ascii85WriteByteHook,(void*)NULL);
Ascii85Flush(image);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
}
break;
}
break;
}
Ascii85Flush(image);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
}
}
else
break;
}
Ascii85Flush(image);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
}
}
else
break;
}
Ascii85Flush(image);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
}
if (!status)
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
compressed_packets=(unsigned long) (1.001*length+12);
- compressed_pixels=MagickAllocateMemory(unsigned char *,compressed_packets);
+ compressed_pixels=MagickAllocateResourceLimitedMemory(unsigned char *,compressed_packets);
if (compressed_pixels == (unsigned char *) NULL)
ThrowBinaryException(ResourceLimitError,MemoryAllocationFailed,
(char *) NULL);
else
for (i=0; i < (long) compressed_packets; i++)
(void) (*write_byte)(image,(magick_uint8_t)compressed_pixels[i],info);
- MagickFreeMemory(compressed_pixels);
+ MagickFreeResourceLimitedMemory(compressed_pixels);
return(!status);
}
#else
/*
-% Copyright (C) 2003 - 2017 GraphicsMagick Group
+% Copyright (C) 2003 - 2020 GraphicsMagick Group
% Copyright (C) 2002 ImageMagick Studio
% Copyright 1991-1999 E. I. du Pont de Nemours and Company
%
#define ThrowPSDReaderException(code_,reason_,image_) \
{ \
- MagickFreeMemory(layer_info); \
+ MagickFreeResourceLimitedMemory(layer_info); \
ThrowReaderException(code_,reason_,image_); \
}
/*
Duotone image data; the format of this data is undocumented.
*/
- data=MagickAllocateMemory(unsigned char *,length);
+ data=MagickAllocateResourceLimitedMemory(unsigned char *,length);
if (data == (unsigned char *) NULL) {
if(logging)
{
image);
}
(void) ReadBlob(image,length,data);
- MagickFreeMemory(data);
+ MagickFreeResourceLimitedMemory(data);
}
else
{
" reading image resources (IPTC) - %ld bytes",
(long) length);
}
- data=MagickAllocateMemory(unsigned char *,length);
+ data=MagickAllocateResourceLimitedMemory(unsigned char *,length);
if (data == (unsigned char *) NULL)
{
if (logging)
ThrowPSDReaderException(CorruptImageError,ImproperImageHeader,image);
}
(void) SetImageProfile(image,"IPTC",data,length);
- MagickFreeMemory(data);
+ MagickFreeResourceLimitedMemory(data);
}
/*
}
else
{
- layer_info=MagickAllocateArray(LayerInfo *,number_layers,sizeof(LayerInfo));
+ layer_info=MagickAllocateResourceLimitedArray(LayerInfo *,number_layers,sizeof(LayerInfo));
if (layer_info == (LayerInfo *) NULL)
{
if (logging)
DestroyImage(image);
returnImage = layer_info[0].image;
#endif
- MagickFreeMemory(layer_info);
+ MagickFreeResourceLimitedMemory(layer_info);
if (logging)
{
int numChannels = 3, i, bytecount, dim = (int) (image->rows*numChannels);
- scanline=MagickAllocateMemory(char *,(image->columns/128)*2 + 2);
+ scanline=MagickAllocateResourceLimitedMemory(char *,(image->columns/128)*2 + 2);
if (scanline == (char *) NULL)
ThrowBinaryException(ResourceLimitError,MemoryAllocationFailed,NULL);
(void) WriteBlob( image, count, scanline );
}
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
return MagickPass;
}
packet_size=image->depth > 8 ? 6 : 3;
if (image->matte)
packet_size+=image->depth > 8 ? 2 : 1;
- pixels=MagickAllocateArray(unsigned char *,
+ pixels=MagickAllocateResourceLimitedArray(unsigned char *,
packet_size,
MagickArraySize(image->columns,
sizeof(PixelPacket)));
else
WriteImageChannels( image, image, pixels );
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
CloseBlob(image);
return(True);
}
\f
#define ThrowRGBReaderException(code_,reason_,image_) \
{ \
- MagickFreeMemory(scanline); \
+ MagickFreeResourceLimitedMemory(scanline); \
ThrowReaderException(code_,reason_,image_); \
}
\f
packet_size=(quantum_size*4)/8;
}
- scanline=MagickAllocateArray(unsigned char *,
+ scanline=MagickAllocateResourceLimitedArray(unsigned char *,
packet_size,image->tile_info.width);
if (scanline == (unsigned char *) NULL)
ThrowRGBReaderException(ResourceLimitError,MemoryAllocationFailed,image);
break;
}
} while (count != 0);
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
while (image->previous != (Image *) NULL)
image=image->previous;
CloseBlob(image);
/*
Allocate memory for pixels.
*/
- MagickReallocMemory(unsigned char *,pixels,
- MagickArraySize(packet_size,image->columns));
- if (pixels == (unsigned char *) NULL)
- ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
+ unsigned char
+ *new_pixels;
+
+ new_pixels=MagickReallocateResourceLimitedArray(unsigned char *,pixels,
+ packet_size,image->columns);
+ if (new_pixels == (unsigned char *) NULL)
+ {
+ MagickFreeResourceLimitedMemory(pixels);
+ ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
+ }
+ pixels=new_pixels;
/*
Initialize export options.
image->filename))
break;
} while (image_info->adjoin);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
if (image_info->adjoin)
while (image->previous != (Image *) NULL)
image=image->previous;
/*
-% Copyright (C) 2003-2018 GraphicsMagick Group
+% Copyright (C) 2003-2020 GraphicsMagick Group
% Copyright (C) 2002 ImageMagick Studio
% Copyright 1991-1999 E. I. du Pont de Nemours and Company
%
#define ThrowRLAReaderException(code_,reason_,image_) \
do { \
- MagickFreeMemory(scanlines); \
+ MagickFreeResourceLimitedMemory(scanlines); \
ThrowReaderException(code_,reason_,image_); \
} while (0);
static Image *ReadRLAImage(const ImageInfo *image_info,ExceptionInfo *exception)
ThrowRLAReaderException(ResourceLimitError,ImagePixelLimitExceeded,image);
number_channels=rla_info.number_channels+rla_info.number_matte_channels;
- scanlines=MagickAllocateArray(magick_uint32_t *,image->rows,sizeof(magick_uint32_t));
+ scanlines=MagickAllocateResourceLimitedArray(magick_uint32_t *,image->rows,sizeof(magick_uint32_t));
if (scanlines == (magick_uint32_t *) NULL)
ThrowRLAReaderException(ResourceLimitError,MemoryAllocationFailed,image);
if (*rla_info.description != '\0')
if (EOFBlob(image))
ThrowRLAReaderException(CorruptImageError,UnexpectedEndOfFile,image);
CloseBlob(image);
- MagickFreeMemory(scanlines);
+ MagickFreeResourceLimitedMemory(scanlines);
StopTimer(&image->timer);
return(image);
}
*/
#define ThrowRLEReaderException(code_,reason_,image_) \
do { \
- MagickFreeMemory(colormap); \
- MagickFreeMemory(rle_pixels); \
+ MagickFreeResourceLimitedMemory(colormap); \
+ MagickFreeResourceLimitedMemory(rle_pixels); \
ThrowReaderException(code_,reason_,image_); \
} while (0);
static Image *ReadRLEImage(const ImageInfo *image_info,ExceptionInfo *exception)
Read image colormaps. Color map values are stored as 16 bit
quantities, left justified in the word.
*/
- colormap=MagickAllocateArray(unsigned char *,number_colormaps,
+ colormap=MagickAllocateResourceLimitedArray(unsigned char *,number_colormaps,
map_length);
if (colormap == (unsigned char *) NULL)
ThrowRLEReaderException(ResourceLimitError,MemoryAllocationFailed,
arbitrary string.
*/
length=ReadBlobLSBShort(image);
- comment=MagickAllocateMemory(char *,(size_t) length+1);
+ comment=MagickAllocateResourceLimitedMemory(char *,(size_t) length+1);
if (comment == (char *) NULL)
{
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
}
if (ReadBlob(image,length,comment) != length)
{
- MagickFreeMemory(comment);
+ MagickFreeResourceLimitedMemory(comment);
ThrowRLEReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
comment[length]='\0';
(void) SetImageAttribute(image,"comment",comment);
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
"Comment: '%s'", comment);
- MagickFreeMemory(comment);
+ MagickFreeResourceLimitedMemory(comment);
if ((length & 0x01) == 0)
(void) ReadBlobByte(image);
}
if (image_info->ping)
{
- MagickFreeMemory(colormap);
+ MagickFreeResourceLimitedMemory(colormap);
CloseBlob(image);
StopTimer(&image->timer);
return(image);
rle_bytes=MagickArraySize(number_pixels,number_planes);
if ((number_pixels == 0) || (rle_bytes == 0))
ThrowRLEReaderException(ResourceLimitError,MemoryAllocationFailed,image);
- rle_pixels=MagickAllocateArray(unsigned char *,number_pixels,
+ rle_pixels=MagickAllocateResourceLimitedArray(unsigned char *,number_pixels,
number_planes);
if (rle_pixels == (unsigned char *) NULL)
ThrowRLEReaderException(ResourceLimitError,MemoryAllocationFailed,image);
image->colors=0;
}
}
- MagickFreeMemory(colormap);
- MagickFreeMemory(rle_pixels);
+ MagickFreeResourceLimitedMemory(colormap);
+ MagickFreeResourceLimitedMemory(rle_pixels);
if (EOFBlob(image))
{
ThrowRLEReaderException(CorruptImageError,UnexpectedEndOfFile,image);
{
ThrowReaderException(CorruptImageError,ImproperImageHeader,image);
}
- buffer=MagickAllocateMemory(unsigned char *,buffer_size);
+ buffer=MagickAllocateResourceLimitedMemory(unsigned char *,buffer_size);
if (buffer == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
buffer_end=buffer+buffer_size-1;
count=ReadBlob(image,buffer_size,(char *) buffer);
if ((count != buffer_size) || (LocaleNCompare((char *) buffer,"SFW",3) != 0))
{
- MagickFreeMemory(buffer);
+ MagickFreeResourceLimitedMemory(buffer);
ThrowReaderException(CorruptImageError,ImproperImageHeader,image);
}
/*
if ((header == (unsigned char *) NULL) ||
(header+6+134 > buffer_end)) /* 134 ~ Minimum JFIF size */
{
- MagickFreeMemory(buffer);
+ MagickFreeResourceLimitedMemory(buffer);
ThrowReaderException(CorruptImageError,ImproperImageHeader,image)
}
/*
{
if (offset+4 > buffer_end)
{
- MagickFreeMemory(buffer);
+ MagickFreeResourceLimitedMemory(buffer);
ThrowReaderException(CorruptImageError,ImproperImageHeader,image)
}
TranslateSFWMarker(offset);
(unsigned char *) "\377\311",2);
if (data == (unsigned char *) NULL)
{
- MagickFreeMemory(buffer);
+ MagickFreeResourceLimitedMemory(buffer);
ThrowReaderException(CorruptImageError,ImproperImageHeader,image)
}
TranslateSFWMarker(data++); /* translate eoi marker */
file=AcquireTemporaryFileStream(temporary_filename,BinaryFileIOMode);
if (file == (FILE *) NULL)
{
- MagickFreeMemory(buffer);
+ MagickFreeResourceLimitedMemory(buffer);
DestroyImageInfo(clone_info);
ThrowReaderTemporaryFileException(image_info->filename)
}
(void) fwrite(offset+1,(size_t) (data-offset),1,file);
status=ferror(file);
(void) fclose(file);
- MagickFreeMemory(buffer);
+ MagickFreeResourceLimitedMemory(buffer);
if (status)
{
(void) LiberateTemporaryFile(temporary_filename);
#define ThrowSGIReaderException(code_,reason_,image_) \
{ \
- MagickFreeMemory(iris_pixels) \
- MagickFreeMemory(max_packets); \
- MagickFreeMemory(offsets); \
- MagickFreeMemory(runlength); \
- MagickFreeMemory(scanline) \
+ MagickFreeResourceLimitedMemory(iris_pixels) \
+ MagickFreeResourceLimitedMemory(max_packets); \
+ MagickFreeResourceLimitedMemory(offsets); \
+ MagickFreeResourceLimitedMemory(runlength); \
+ MagickFreeResourceLimitedMemory(scanline) \
ThrowReaderException(code_,reason_,image_); \
}
/*
Read standard image format.
*/
- scanline=MagickAllocateArray(unsigned char *,
+ scanline=MagickAllocateResourceLimitedArray(unsigned char *,
bytes_per_pixel,iris_info.xsize);
if (scanline == (unsigned char *) NULL)
ThrowSGIReaderException(ResourceLimitError,MemoryAllocationFailed,
iris_pixels_size = MagickArraySize(MagickArraySize(4U,bytes_per_pixel),
MagickArraySize(iris_info.xsize,iris_info.ysize));
- iris_pixels=MagickAllocateMemory(unsigned char *,iris_pixels_size);
+ iris_pixels=MagickAllocateResourceLimitedMemory(unsigned char *,iris_pixels_size);
if (iris_pixels == (unsigned char *) NULL)
ThrowSGIReaderException(ResourceLimitError,MemoryAllocationFailed,image);
(void) memset(iris_pixels,0,iris_pixels_size);
if (EOFBlob(image))
break;
}
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
}
else
{
*/
if (TellBlob(image)+rle_alloc_size > (size_t) file_size)
ThrowSGIReaderException(CorruptImageError,UnexpectedEndOfFile,image);
- offsets=MagickAllocateMemory(magick_uint32_t *,rle_alloc_size);
+ offsets=MagickAllocateResourceLimitedMemory(magick_uint32_t *,rle_alloc_size);
if (offsets == (magick_uint32_t *) NULL)
ThrowSGIReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
if (TellBlob(image)+rle_alloc_size > (size_t) file_size)
ThrowSGIReaderException(CorruptImageError,UnexpectedEndOfFile,image);
- runlength=MagickAllocateMemory(magick_uint32_t *,rle_alloc_size);
+ runlength=MagickAllocateResourceLimitedMemory(magick_uint32_t *,rle_alloc_size);
if (runlength == (magick_uint32_t *) NULL)
ThrowSGIReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
}
max_packets_alloc_size=MagickArraySize((size_t) iris_info.xsize+10U,4U);
- max_packets=MagickAllocateMemory(unsigned char *,max_packets_alloc_size);
+ max_packets=MagickAllocateResourceLimitedMemory(unsigned char *,max_packets_alloc_size);
if (max_packets == (unsigned char *) NULL)
ThrowSGIReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
iris_pixels_size=MagickArraySize(MagickArraySize(4U,bytes_per_pixel),
MagickArraySize(iris_info.xsize,iris_info.ysize));
- iris_pixels=MagickAllocateMemory(unsigned char *,iris_pixels_size);
+ iris_pixels=MagickAllocateResourceLimitedMemory(unsigned char *,iris_pixels_size);
if (iris_pixels == (unsigned char *) NULL)
ThrowSGIReaderException(ResourceLimitError,MemoryAllocationFailed,image);
break;
}
}
- MagickFreeMemory(runlength);
- MagickFreeMemory(max_packets);
- MagickFreeMemory(offsets);
+ MagickFreeResourceLimitedMemory(runlength);
+ MagickFreeResourceLimitedMemory(max_packets);
+ MagickFreeResourceLimitedMemory(offsets);
}
/*
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
"Only transferred %lu rows out of %lu",
y, image->rows);
- MagickFreeMemory(iris_pixels);
+ MagickFreeResourceLimitedMemory(iris_pixels);
/*
Not sure what a proper error report is here
*/
}
(void) SyncImage(image);
}
- MagickFreeMemory(iris_pixels);
+ MagickFreeResourceLimitedMemory(iris_pixels);
if (EOFBlob(image))
{
ThrowSGIReaderException(CorruptImageError,UnexpectedEndOfFile,
#define ThrowSGIWriterException(code_,reason_,image_) \
{ \
- MagickFreeMemory(scanline) \
- MagickFreeMemory(offsets); \
- MagickFreeMemory(packets); \
- MagickFreeMemory(runlength); \
- MagickFreeMemory(iris_pixels); \
+ MagickFreeResourceLimitedMemory(scanline) \
+ MagickFreeResourceLimitedMemory(offsets); \
+ MagickFreeResourceLimitedMemory(packets); \
+ MagickFreeResourceLimitedMemory(runlength); \
+ MagickFreeResourceLimitedMemory(iris_pixels); \
ThrowWriterException(code_,reason_,image_); \
}
Allocate SGI pixels.
*/
number_pixels=image->columns*image->rows;
- iris_pixels=MagickAllocateMemory(unsigned char *, (size_t)4*number_pixels);
+ iris_pixels=MagickAllocateResourceLimitedArray(unsigned char *,4,number_pixels);
if (iris_pixels == (unsigned char *) NULL)
ThrowSGIWriterException(ResourceLimitError,MemoryAllocationFailed,image);
/*
/*
Write uncompressed SGI pixels.
*/
- scanline=MagickAllocateMemory(unsigned char *,iris_info.xsize);
+ scanline=MagickAllocateResourceLimitedMemory(unsigned char *,iris_info.xsize);
if (scanline == (unsigned char *) NULL)
ThrowSGIWriterException(ResourceLimitError,MemoryAllocationFailed,
image);
(void) WriteBlob(image,iris_info.xsize,(char *) scanline);
}
}
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
}
else
{
/*
Convert SGI uncompressed pixels.
*/
- offsets=MagickAllocateArray(unsigned long *,iris_info.ysize,
+ offsets=MagickAllocateResourceLimitedArray(unsigned long *,iris_info.ysize,
MagickArraySize(iris_info.zsize,
sizeof(unsigned long)));
- packets=MagickAllocateArray(unsigned char *,
+ packets=MagickAllocateResourceLimitedArray(unsigned char *,
4*(2*(size_t) iris_info.xsize+10),
image->rows);
- runlength=MagickAllocateArray(unsigned long *,iris_info.ysize,
+ runlength=MagickAllocateResourceLimitedArray(unsigned long *,iris_info.ysize,
MagickArraySize(iris_info.zsize,
sizeof(unsigned long)));
if ((offsets == (unsigned long *) NULL) ||
/*
Free memory.
*/
- MagickFreeMemory(runlength);
- MagickFreeMemory(packets);
- MagickFreeMemory(offsets);
+ MagickFreeResourceLimitedMemory(runlength);
+ MagickFreeResourceLimitedMemory(packets);
+ MagickFreeResourceLimitedMemory(offsets);
}
- MagickFreeMemory(iris_pixels);
+ MagickFreeResourceLimitedMemory(iris_pixels);
} while (0);
CloseBlob(image);
return(True);
if (!AllocateImageColormap(image,image->colors))
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
- sun_colormap=MagickAllocateMemory(unsigned char *,image->colors);
+ sun_colormap=MagickAllocateResourceLimitedMemory(unsigned char *,image->colors);
if (sun_colormap == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
image->colormap[i].blue=ScaleCharToQuantum(sun_colormap[i]);
break;
} while (1);
- MagickFreeMemory(sun_colormap);
+ MagickFreeResourceLimitedMemory(sun_colormap);
if (MagickFail == status)
ThrowReaderException(CorruptImageError,UnexpectedEndOfFile,image);
break;
if (!AllocateImageColormap(image,image->colors))
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
- sun_colormap=MagickAllocateMemory(unsigned char *,sun_info.maplength);
+ sun_colormap=MagickAllocateResourceLimitedMemory(unsigned char *,sun_info.maplength);
if (sun_colormap == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
if (ReadBlob(image,sun_info.maplength,(char *) sun_colormap) !=
sun_info.maplength)
status = MagickFail;
- MagickFreeMemory(sun_colormap);
+ MagickFreeResourceLimitedMemory(sun_colormap);
if (MagickFail == status)
ThrowReaderException(CorruptImageError,UnexpectedEndOfFile,image);
break;
}
}
- sun_data=MagickAllocateMemory(unsigned char *,sun_data_length);
+ sun_data=MagickAllocateResourceLimitedMemory(unsigned char *,sun_data_length);
if (sun_data == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
if ((count=ReadBlob(image,sun_data_length,(char *) sun_data))
!= sun_data_length)
{
- MagickFreeMemory(sun_data);
+ MagickFreeResourceLimitedMemory(sun_data);
ThrowReaderException(CorruptImageError,UnableToReadImageData,image);
}
sun_pixels=sun_data;
/*
Read run-length encoded raster pixels (padded to 16-bit boundary).
*/
- sun_pixels=MagickAllocateMemory(unsigned char *,bytes_per_image);
+ sun_pixels=MagickAllocateResourceLimitedMemory(unsigned char *,bytes_per_image);
if (sun_pixels == (unsigned char *) NULL)
{
- MagickFreeMemory(sun_data);
+ MagickFreeResourceLimitedMemory(sun_data);
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
}
status &= DecodeImage(sun_data,sun_data_length,sun_pixels,bytes_per_image);
- MagickFreeMemory(sun_data);
+ MagickFreeResourceLimitedMemory(sun_data);
if (status != MagickPass)
{
- MagickFreeMemory(sun_pixels);
+ MagickFreeResourceLimitedMemory(sun_pixels);
ThrowReaderException(CorruptImageError,UnableToRunlengthDecodeImage,image);
}
}
break;
}
}
- MagickFreeMemory(sun_pixels);
+ MagickFreeResourceLimitedMemory(sun_pixels);
if (EOFBlob(image))
{
ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,
*/
pad=(image->columns & 0x01 ? 1 : 0);
length=(image->columns + pad) *sizeof(PixelPacket);
- pixels=MagickAllocateMemory(unsigned char *,length);
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,length);
if (pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,
image);
image->columns,image->rows))
break;
}
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
}
else
if (characteristics.monochrome)
*/
(void) LogMagickEvent(CoderEvent,GetMagickModule()," SAX.endDocument()");
svg_info=(SVGInfo *) context;
- MagickFreeMemory(svg_info->offset);
- MagickFreeMemory(svg_info->stop_color);
+ MagickFreeMemory(svg_info->size);
+ MagickFreeMemory(svg_info->title);
+ MagickFreeMemory(svg_info->comment);
MagickFreeMemory(svg_info->scale);
+ MagickFreeMemory(svg_info->stop_color);
+ MagickFreeMemory(svg_info->offset);
MagickFreeMemory(svg_info->text);
MagickFreeMemory(svg_info->vertices);
MagickFreeMemory(svg_info->url);
+
+ /* Don't free xmlParserCtxtPtr parser which is used later */
+
if (svg_info->document != (xmlDocPtr) NULL)
{
xmlFreeDoc(svg_info->document);
(void) xmlTextConcat(child,value,length);
return;
}
- (void) xmlAddChild(parser->node,xmlNewCDataBlock(parser->myDoc,value,length));
+ /* Create a new node containing a CDATA block. */
+ /* FIXME: parser->myDoc is null so add fails. What do do? */
+ child=xmlNewCDataBlock(parser->myDoc,value,length);
+ if (xmlAddChild(parser->node,child) == (xmlNodePtr) NULL)
+ xmlFreeNode(child);
}
static void
SAXHandler=(&SAXModules);
svg_info.parser=xmlCreatePushParserCtxt(SAXHandler,&svg_info,(char *) NULL,0,
image->filename);
+ if (svg_info.parser == (xmlParserCtxtPtr) NULL)
+ {
+ /* FIXME: Handle failure! */
+ }
while ((n=ReadBlob(image,MaxTextExtent-1,message)) != 0)
{
message[n]='\0';
seeing the document end.
*/
SVGEndDocument(&svg_info);
+ if (svg_info.parser->myDoc != (xmlDocPtr) NULL)
+ xmlFreeDoc(svg_info.parser->myDoc);
+ /*
+ Free all the memory used by a parser context. However the parsed
+ document in ctxt->myDoc is not freed (so we just did that).
+ */
xmlFreeParserCtxt(svg_info.parser);
(void) LogMagickEvent(CoderEvent,GetMagickModule(),"end SAX");
(void) fclose(file);
CloseBlob(image);
- DestroyImage(image);
- image=(Image *) NULL;
+ image->columns=svg_info.width;
+ image->rows=svg_info.height;
if (!image_info->ping && (exception->severity == UndefinedException))
{
ImageInfo
/*
Draw image.
*/
+ DestroyImage(image);
+ image=(Image *) NULL;
clone_info=CloneImageInfo(image_info);
clone_info->blob=(_BlobInfoPtr_) NULL;
clone_info->length=0;
(void) strlcpy(image->filename,image_info->filename,MaxTextExtent);
}
/*
- Free resources.
+ Add/update image attributes
*/
- MagickFreeMemory(svg_info.size);
- if (svg_info.title != (char *) NULL)
+ if (image != (Image *) NULL)
{
- if (image != (Image *) NULL)
+ /* Title */
+ if (svg_info.title != (char *) NULL)
(void) SetImageAttribute(image,"title",svg_info.title);
- MagickFreeMemory(svg_info.title);
- }
- if (svg_info.comment != (char *) NULL)
- {
- if (image != (Image *) NULL)
+
+ /* Comment */
+ if (svg_info.comment != (char *) NULL)
(void) SetImageAttribute(image,"comment",svg_info.comment);
- MagickFreeMemory(svg_info.comment);
}
+ /*
+ Free resources allocated above (also freed by SVGEndDocument()).
+ */
+ MagickFreeMemory(svg_info.size);
+ MagickFreeMemory(svg_info.title);
+ MagickFreeMemory(svg_info.comment);
+ MagickFreeMemory(svg_info.scale);
+ MagickFreeMemory(svg_info.text);
(void) memset(&svg_info,0xbf,sizeof(SVGInfo));
(void) LiberateTemporaryFile(filename);
/*
Dump colormap to file (blue, green, red byte order).
*/
- targa_colormap=MagickAllocateArray(unsigned char *,
+ targa_colormap=MagickAllocateResourceLimitedArray(unsigned char *,
tga_info.colormap_length,3);
if (targa_colormap == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,
}
(void) WriteBlob(image, (size_t)3*tga_info.colormap_length,
(char *) targa_colormap);
- MagickFreeMemory(targa_colormap);
+ MagickFreeResourceLimitedMemory(targa_colormap);
}
/*
Convert MIFF to TGA raster pixels.
*/
count=(size_t) ((MagickArraySize(tga_info.bits_per_pixel,image->columns)) >> 3);
- tga_pixels=MagickAllocateMemory(unsigned char *,count);
+ tga_pixels=MagickAllocateResourceLimitedMemory(unsigned char *,count);
if (tga_pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
for (y=(long) (image->rows-1); y >= 0; y--)
image->columns,image->rows))
break;
}
- MagickFreeMemory(tga_pixels);
+ MagickFreeResourceLimitedMemory(tga_pixels);
if (image->next == (Image *) NULL)
break;
image=SyncNextImageInList(image);
return;
i=0;
p=tags;
- ignore=MagickAllocateArray(TIFFFieldInfo*,count,sizeof(*ignore));
+ ignore=MagickAllocateResourceLimitedArray(TIFFFieldInfo*,count,sizeof(*ignore));
if (ignore == (TIFFFieldInfo*) NULL)
{
ThrowException(&client_data->image->exception,ResourceLimitError,
p++;
}
(void) TIFFMergeFieldInfo(tiff,ignore,(uint32) count);
- MagickFreeMemory(ignore);
+ MagickFreeResourceLimitedMemory(ignore);
}
/*
{
if (chromaticity != (float *) NULL)
{
- image->chromaticity.white_point.x=chromaticity[0];
- image->chromaticity.white_point.y=chromaticity[1];
+ if (logging)
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "White Point: %gx%g",
+ chromaticity[0] /* white_point.x */,
+ chromaticity[1] /* white_point.y */);
+ if (MAGICK_ISNAN(chromaticity[0]) || (chromaticity[0] < 0.0) ||
+ MAGICK_ISNAN(chromaticity[1]) || (chromaticity[1] < 0.0))
+ {
+ if (logging)
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "White Point: Is corrupt!");
+ }
+ else
+ {
+ image->chromaticity.white_point.x=chromaticity[0];
+ image->chromaticity.white_point.y=chromaticity[1];
+ }
}
}
chromaticity=(float *) NULL;
{
if (chromaticity != (float *) NULL)
{
- image->chromaticity.red_primary.x=chromaticity[0];
- image->chromaticity.red_primary.y=chromaticity[1];
- image->chromaticity.green_primary.x=chromaticity[2];
- image->chromaticity.green_primary.y=chromaticity[3];
- image->chromaticity.blue_primary.x=chromaticity[4];
- image->chromaticity.blue_primary.y=chromaticity[5];
+ if (logging)
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "Primary Chromaticities: "
+ "r=%gx%g g=%gx%g b=%gx%g",
+ chromaticity[0] /* red_primary.x */,
+ chromaticity[1] /* red_primary.y */,
+ chromaticity[2] /* green_primary.x */,
+ chromaticity[3] /* green_primary.y */,
+ chromaticity[4] /* blue_primary.x */,
+ chromaticity[5] /* blue_primary.y */);
+ if (MAGICK_ISNAN(chromaticity[0]) || (chromaticity[0] < 0.0) ||
+ MAGICK_ISNAN(chromaticity[1]) || (chromaticity[1] < 0.0) ||
+ MAGICK_ISNAN(chromaticity[2]) || (chromaticity[2] < 0.0) ||
+ MAGICK_ISNAN(chromaticity[3]) || (chromaticity[3] < 0.0) ||
+ MAGICK_ISNAN(chromaticity[4]) || (chromaticity[4] < 0.0) ||
+ MAGICK_ISNAN(chromaticity[5]) || (chromaticity[5] < 0.0))
+ {
+ if (logging)
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "Primary Chromaticities: Is corrupt!");
+ }
+ else
+ {
+ image->chromaticity.red_primary.x=chromaticity[0];
+ image->chromaticity.red_primary.y=chromaticity[1];
+ image->chromaticity.green_primary.x=chromaticity[2];
+ image->chromaticity.green_primary.y=chromaticity[3];
+ image->chromaticity.blue_primary.x=chromaticity[4];
+ image->chromaticity.blue_primary.y=chromaticity[5];
+ }
}
}
{
ThrowTIFFReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
- scanline=MagickAllocateMemory(unsigned char *,(size_t) scanline_size);
+ scanline=MagickAllocateResourceLimitedMemory(unsigned char *,(size_t) scanline_size);
if (scanline == (unsigned char *) NULL)
{
LiberateMagickResource(MemoryResource,scanline_size);
}
}
LiberateMagickResource(MemoryResource,scanline_size);
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
break;
}
case StrippedMethod:
ThrowTIFFReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
- strip=MagickAllocateMemory(unsigned char *,(size_t) strip_size_max);
+ strip=MagickAllocateResourceLimitedMemory(unsigned char *,(size_t) strip_size_max);
if (strip == (unsigned char *) NULL)
{
LiberateMagickResource(MemoryResource,strip_size_max);
break;
}
LiberateMagickResource(MemoryResource,strip_size_max);
- MagickFreeMemory(strip);
+ MagickFreeResourceLimitedMemory(strip);
break;
}
case TiledMethod:
quantum_type;
size_t
- tile_total_pixels;
+ tile_total_pixels,
+ tile_num=0,
+ tiles_total;
if (logging)
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
ThrowTIFFReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
- tile=MagickAllocateMemory(unsigned char *, (size_t) tile_size_max);
+ tile=MagickAllocateResourceLimitedMemory(unsigned char *, (size_t) tile_size_max);
if (tile == (unsigned char *) NULL)
{
LiberateMagickResource(MemoryResource,tile_size_max);
image);
}
memset(tile,0,(size_t) tile_size_max);
+ tiles_total=(((image->columns/tile_columns)+((image->columns % tile_columns) ? 1 : 0))
+ *((image->rows/tile_rows)+((image->rows % tile_rows) ? 1 : 0)))*max_sample;
/*
Compute per-row stride.
*/
/*
Read a tile.
*/
+ tile_num++;
if ((tile_size=TIFFReadTile(tiff,tile,x,y,0,sample)) == -1)
{
status=MagickFail;
}
p += stride;
}
+ if (image->previous == (Image *) NULL)
+ if (QuantumTick(tile_num,tiles_total))
+ if (!MagickMonitorFormatted(tile_num,
+ tiles_total,
+ exception,
+ LoadImageText,image->filename,
+ image->columns,image->rows))
+ {
+ status=MagickFail;
+ }
if (status == MagickFail)
break;
}
if (status == MagickFail)
break;
-
- if (image->previous == (Image *) NULL)
- if (QuantumTick((y+sample*image->rows)/tile_rows,
- (image->rows*max_sample)/tile_rows))
- if (!MagickMonitorFormatted((y+sample*image->rows)/tile_rows,
- (image->rows*max_sample)/tile_rows,
- exception,
- LoadImageText,image->filename,
- image->columns,image->rows))
- {
- status=MagickFail;
- break;
- }
}
if (status == MagickFail)
break;
}
LiberateMagickResource(MemoryResource,tile_size_max);
- MagickFreeMemory(tile);
+ MagickFreeResourceLimitedMemory(tile);
break;
}
case RGBAStrippedMethod:
ThrowTIFFReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
- strip_pixels=MagickAllocateMemory(uint32 *,strip_pixels_size);
+ strip_pixels=MagickAllocateResourceLimitedMemory(uint32 *,strip_pixels_size);
if (strip_pixels == (uint32 *) NULL)
{
LiberateMagickResource(MemoryResource,strip_pixels_size);
}
}
LiberateMagickResource(MemoryResource,strip_pixels_size);
- MagickFreeMemory(strip_pixels);
+ MagickFreeResourceLimitedMemory(strip_pixels);
break;
}
case RGBATiledMethod:
size_t
tile_pixels_size,
- tile_total_pixels;
+ tile_total_pixels,
+ tile_num=0,
+ tiles_total;
if (logging)
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
ThrowTIFFReaderException(CoderError,ImageIsNotTiled,image);
}
tile_total_pixels=MagickArraySize(tile_columns,tile_rows);
+ tiles_total=(((image->columns/tile_columns)+((image->columns % tile_columns) ? 1 : 0))
+ *((image->rows/tile_rows)+((image->rows % tile_rows) ? 1 : 0)));
if (logging)
{
(void) LogMagickEvent(CoderEvent,GetMagickModule(),"Reading TIFF tiles ...");
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
- "TIFF tile geometry %ux%u, %" MAGICK_SIZE_T_F "u pixels",
+ "TIFF tile geometry %ux%u, %" MAGICK_SIZE_T_F "u pixels/tile"
+ ", %" MAGICK_SIZE_T_F "u tiles",
(unsigned int)tile_columns,
(unsigned int)tile_rows,
- (MAGICK_SIZE_T) tile_total_pixels);
+ (MAGICK_SIZE_T) tile_total_pixels,
+ (MAGICK_SIZE_T) tiles_total);
}
/*
Obtain the maximum number of bytes required to contain a tile.
image);
}
/*
+ Apply image resource limits to tile width, height, and pixels.
+ */
+ errno=0;
+ if (AcquireMagickResource(WidthResource,tile_columns) != MagickPass)
+ {
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "TIFF tile width %u exceeds limit!",tile_columns);
+ ThrowTIFFReaderException(ResourceLimitError,ImagePixelWidthLimitExceeded,
+ image);
+ }
+ if (AcquireMagickResource(HeightResource,tile_rows) != MagickPass)
+ {
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "TIFF tile width %u exceeds limit!",tile_rows);
+ ThrowTIFFReaderException(ResourceLimitError,ImagePixelHeightLimitExceeded,
+ image);
+ }
+ if (AcquireMagickResource(PixelsResource,tile_total_pixels) != MagickPass)
+ {
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "TIFF tile pixels %" MAGICK_SIZE_T_F "u exceeds limit!",
+ (MAGICK_SIZE_T) tile_total_pixels);
+ ThrowTIFFReaderException(ResourceLimitError,ImagePixelLimitExceeded,
+ image);
+ }
+ /*
Rationalize memory request based on file size
*/
if (tile_size_max > file_size*max_compress_ratio)
(!AcquireMagickResource(MemoryResource,tile_pixels_size)))
ThrowTIFFReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
- tile_pixels=MagickAllocateMemory(uint32*,tile_pixels_size);
+ tile_pixels=MagickAllocateResourceLimitedMemory(uint32*,tile_pixels_size);
if (tile_pixels == (uint32 *) NULL)
{
LiberateMagickResource(MemoryResource,tile_pixels_size);
/*
Obtain one tile. Origin is bottom left of tile.
*/
+ tile_num++;
if (!TIFFReadRGBATile(tiff,x,y,tile_pixels))
{
status=MagickFail;
p+=tile_columns-tile_columns_remaining;
q-=((size_t) image->columns+tile_columns_remaining);
}
+ if (image->previous == (Image *) NULL)
+ if (QuantumTick(tile_num,tiles_total))
+ if (!MagickMonitorFormatted(tile_num,
+ tiles_total,
+ exception,
+ LoadImageText,image->filename,
+ image->columns,image->rows))
+ {
+ status=MagickFail;
+ }
if (status == MagickFail)
break;
}
status=MagickFail;
break;
}
- if (image->previous == (Image *) NULL)
- if (QuantumTick(y,image->rows))
- if (!MagickMonitorFormatted(y,image->rows,exception,
- LoadImageText,image->filename,
- image->columns,image->rows))
- {
- status=MagickFail;
- break;
- }
}
LiberateMagickResource(MemoryResource,tile_pixels_size);
- MagickFreeMemory(tile_pixels);
+ MagickFreeResourceLimitedMemory(tile_pixels);
break;
}
case RGBAPuntMethod:
ThrowTIFFReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
- pixels=MagickAllocateMemory(uint32 *,pixels_size);
+ pixels=MagickAllocateResourceLimitedMemory(uint32 *,pixels_size);
if (pixels == (uint32 *) NULL)
{
LiberateMagickResource(MemoryResource,pixels_size);
pixels,0))
{
LiberateMagickResource(MemoryResource,pixels_size);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
status=MagickFail;
break;
}
break;
}
LiberateMagickResource(MemoryResource,pixels_size);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
break;
}
}
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
"Allocating %lu bytes of memory for TIFF strip",
(unsigned long) strip_size);
- strip=MagickAllocateMemory(unsigned char *,(size_t) strip_size);
+ strip=MagickAllocateResourceLimitedMemory(unsigned char *,(size_t) strip_size);
if (strip == (unsigned char *) NULL)
{
TIFFClose(tiff);
if ((status=OpenBlob(image_info,image,WriteBinaryBlobMode,&image->exception))
== MagickFail)
{
- MagickFreeMemory(strip);
+ MagickFreeResourceLimitedMemory(strip);
TIFFClose(tiff);
(void) LiberateTemporaryFile(temporary_filename);
ThrowWriterException(FileOpenError,UnableToOpenFile,image);
status=MagickFail;
}
- MagickFreeMemory(strip);
+ MagickFreeResourceLimitedMemory(strip);
TIFFClose(tiff);
(void) LiberateTemporaryFile(temporary_filename);
Handle TIFFTAG_RICHTIFFIPTC tag.
*/
length += (4-(length & 0x03)); /* Round up for long word alignment */
- profile=MagickAllocateMemory(unsigned char *,length);
+ profile=MagickAllocateResourceLimitedMemory(unsigned char *,length);
if (profile == (unsigned char *) NULL)
return;
(void) memset(profile,0,length);
length += (length & 0x01); /* Round up for Photoshop */
#if defined(GET_ONLY_IPTC_DATA)
length += 12; /* Space for 8BIM header */
- profile=MagickAllocateMemory(unsigned char *,length);
+ profile=MagickAllocateResourceLimitedMemory(unsigned char *,length);
if (profile == (unsigned char *) NULL)
return;
(void) memset(profile,0,length);
profile[11]=length & 0xff;
(void) memcpy(profile+12,profile_data,profile_length);
#else
- profile=MagickAllocateMemory(unsigned char *,length);
+ profile=MagickAllocateResourceLimitedMemory(unsigned char *,length);
if (profile == (unsigned char *) NULL)
return;
(void) memset(profile,0,length);
(void) TIFFSetField(tiff,profile_tag,(uint32) length,(void *) profile);
}
- MagickFreeMemory(profile);
+ MagickFreeResourceLimitedMemory(profile);
}
#define ThrowTIFFWriterException(code_,reason_,image_) \
#if defined(BITS_IN_JSAMPLE)
depth=BITS_IN_JSAMPLE;
bits_per_sample=BITS_IN_JSAMPLE;
+#else
+ depth=8;
+ bits_per_sample=8;
#endif
}
+#if defined(COMPRESSION_WEBP)
+ if (COMPRESSION_WEBP == compress_tag)
+ {
+ /*
+ WebP compression only supports a depth of 8.
+ */
+ depth=8;
+ bits_per_sample=8;
+ }
+#endif /* if defined(COMPRESSION_WEBP) */
+
alpha_type=UnspecifiedAlpha;
if (image->matte)
{
chromaticity[3]=image->chromaticity.green_primary.y;
chromaticity[4]=image->chromaticity.blue_primary.x;
chromaticity[5]=image->chromaticity.blue_primary.y;
+ if (logging)
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "Primary Chromaticities: "
+ "r=%gx%g g=%gx%g b=%gx%g",
+ chromaticity[0] /* red_primary.x */,
+ chromaticity[1] /* red_primary.y */,
+ chromaticity[2] /* green_primary.x */,
+ chromaticity[3] /* green_primary.y */,
+ chromaticity[4] /* blue_primary.x */,
+ chromaticity[5] /* blue_primary.y */);
(void) TIFFSetField(tiff,TIFFTAG_PRIMARYCHROMATICITIES,chromaticity);
chromaticity[0]=image->chromaticity.white_point.x;
chromaticity[1]=image->chromaticity.white_point.y;
+ if (logging)
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ "White Point: %gx%g",
+ chromaticity[0] /* white_point.x */,
+ chromaticity[1] /* white_point.y */);
(void) TIFFSetField(tiff,TIFFTAG_WHITEPOINT,chromaticity);
}
{
/*
Initialize TIFF colormap.
*/
- blue=MagickAllocateMemory(unsigned short *,
- 65536L*sizeof(unsigned short));
- green=MagickAllocateMemory(unsigned short *,
- 65536L*sizeof(unsigned short));
- red=MagickAllocateMemory(unsigned short *,
- 65536L*sizeof(unsigned short));
+ blue=MagickAllocateResourceLimitedArray(unsigned short *,
+ 65536L,sizeof(unsigned short));
+ green=MagickAllocateResourceLimitedArray(unsigned short *,
+ 65536L,sizeof(unsigned short));
+ red=MagickAllocateResourceLimitedArray(unsigned short *,
+ 65536L,sizeof(unsigned short));
if ((blue == (unsigned short *) NULL) ||
(green == (unsigned short *) NULL) ||
(red == (unsigned short *) NULL))
{
- MagickFreeMemory(blue);
- MagickFreeMemory(green);
- MagickFreeMemory(red);
+ MagickFreeResourceLimitedMemory(blue);
+ MagickFreeResourceLimitedMemory(green);
+ MagickFreeResourceLimitedMemory(red);
ThrowTIFFWriterException(ResourceLimitError,MemoryAllocationFailed,
image);
}
blue[i]=ScaleQuantumToShort(image->colormap[i].blue);
}
(void) TIFFSetField(tiff,TIFFTAG_COLORMAP,red,green,blue);
- MagickFreeMemory(red);
- MagickFreeMemory(green);
- MagickFreeMemory(blue);
+ MagickFreeResourceLimitedMemory(red);
+ MagickFreeResourceLimitedMemory(green);
+ MagickFreeResourceLimitedMemory(blue);
}
/*
Set extra export options for grayscale.
max_sample=quantum_samples;
}
- scanline=MagickAllocateMemory(unsigned char *,(size_t) scanline_size);
+ scanline=MagickAllocateResourceLimitedMemory(unsigned char *,(size_t) scanline_size);
if (scanline == (unsigned char *) NULL)
ThrowTIFFWriterException(ResourceLimitError,MemoryAllocationFailed,image);
/*
if (status == MagickFail)
break;
}
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
break;
}
case TiledMethod:
/*
Allocate tile buffer
*/
- tile=MagickAllocateMemory(unsigned char *, (size_t) tile_size_max);
+ tile=MagickAllocateResourceLimitedMemory(unsigned char *, (size_t) tile_size_max);
if (tile == (unsigned char *) NULL)
ThrowTIFFWriterException(ResourceLimitError,MemoryAllocationFailed,image);
/*
break;
} /* for y */
} /* for sample */
- MagickFreeMemory(tile);
+ MagickFreeResourceLimitedMemory(tile);
break;
}
}
if (!AllocateImageColormap(image,pixel_mode == 1 ? 256 : 16))
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
- tim_colormap=MagickAllocateMemory(unsigned char *, (size_t)image->colors*2);
+ tim_colormap=MagickAllocateResourceLimitedArray(unsigned char *,image->colors,2);
if (tim_colormap == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
if (ReadBlob(image, (size_t)2*image->colors,(char *) tim_colormap) != (size_t)2*image->colors)
{
- MagickFreeMemory(tim_colormap);
+ MagickFreeResourceLimitedMemory(tim_colormap);
ThrowReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
p=tim_colormap;
image->colormap[i].red=ScaleCharToQuantum(ScaleColor5to8(word & 0x1fU));
image->colormap[i].opacity=OpaqueOpacity;
}
- MagickFreeMemory(tim_colormap);
+ MagickFreeResourceLimitedMemory(tim_colormap);
if (image->logging)
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
"PSX-TIM read CLUT with %u entries",
if (CheckImagePixelLimits(image, exception) != MagickPass)
ThrowReaderException(ResourceLimitError,ImagePixelLimitExceeded,image);
- tim_pixels=MagickAllocateMemory(unsigned char *,image_size);
+ tim_pixels=MagickAllocateResourceLimitedMemory(unsigned char *,image_size);
if (tim_pixels == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
if (ReadBlob(image,image_size,(char *) tim_pixels) != image_size)
{
- MagickFreeMemory(tim_pixels);
+ MagickFreeResourceLimitedMemory(tim_pixels);
ThrowReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
}
default:
{
- MagickFreeMemory(tim_pixels);
+ MagickFreeResourceLimitedMemory(tim_pixels);
ThrowReaderException(CorruptImageError,ImproperImageHeader,image);
}
}
if (image->storage_class == PseudoClass)
(void) SyncImage(image);
- MagickFreeMemory(tim_pixels);
+ MagickFreeResourceLimitedMemory(tim_pixels);
if (EOFBlob(image))
{
ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,
DestroyImageInfo(clone_info); \
if (palette) \
DestroyImage(palette); \
- MagickFreeMemory(BImgBuff); \
+ MagickFreeResourceLimitedMemory(BImgBuff); \
ThrowReaderException(code_,reason_,image_); \
}
case 0:
case 1:
ldblk = (long) ((depth * image->columns + 7) / 8);
- BImgBuff = MagickAllocateMemory(unsigned char *,(size_t) ldblk); /*Ldblk was set in the check phase */
+ BImgBuff = MagickAllocateResourceLimitedMemory(unsigned char *,(size_t) ldblk); /*Ldblk was set in the check phase */
if (BImgBuff == NULL)
ThrowTOPOLReaderException(ResourceLimitError, MemoryAllocationFailed, image);
(void) SeekBlob(image, 512 /*sizeof(Header)*/, SEEK_SET);
}
ldblk = (long)((depth * Header.TileWidth + 7) / 8);
- BImgBuff = MagickAllocateMemory(unsigned char *,(size_t) ldblk); /*Ldblk was set in the check phase */
+ BImgBuff = MagickAllocateResourceLimitedMemory(unsigned char *,(size_t) ldblk); /*Ldblk was set in the check phase */
if (BImgBuff == NULL)
ThrowTOPOLReaderException(ResourceLimitError, MemoryAllocationFailed, image);
/* dlazdice.create(Header.TileWidth,Header.TileHeight,p.Planes); */
- Offsets = MagickAllocateArray(magick_uint32_t *,
+ Offsets = MagickAllocateResourceLimitedArray(magick_uint32_t *,
MagickArraySize((size_t)TilesAcross,(size_t)TilesDown),
sizeof(magick_uint32_t));
if(Offsets==NULL)
(void)SeekBlob(image, Header.TileOffsets, SEEK_SET);
if(ReadBlobDwordLSB(image, TilesAcross*TilesDown*4, (magick_uint32_t *)Offsets) < 0)
{
- MagickFreeMemory(Offsets);
+ MagickFreeResourceLimitedMemory(Offsets);
ThrowTOPOLReaderException(CorruptImageError,InsufficientImageDataInFile, image);
}
ldblk = Offsets[(TilY/Header.TileHeight)*TilesAcross+TilX];
if(SeekBlob(image, ldblk, SEEK_SET) != ldblk)
{ /* When seek does not reach required place, bail out. */
- MagickFreeMemory(Offsets);
+ MagickFreeResourceLimitedMemory(Offsets);
ThrowTOPOLReaderException(CorruptImageError,InsufficientImageDataInFile, image);
break;
}
if(ReadBlob(image, ldblk, (char *)BImgBuff) != (size_t) ldblk)
{
- MagickFreeMemory(Offsets);
+ MagickFreeResourceLimitedMemory(Offsets);
ThrowTOPOLReaderException(CorruptImageError,InsufficientImageDataInFile, image);
break;
}
if(InsertRow(depth, BImgBuff, i+TilY, image, TilX,
(image->columns<Header.TileWidth)?image->columns:Header.TileWidth, &import_options))
{
- MagickFreeMemory(Offsets);
+ MagickFreeResourceLimitedMemory(Offsets);
ThrowTOPOLReaderException(CorruptImageError,TooMuchImageDataInFile, image);
break;
}
}
}
- MagickFreeMemory(Offsets);
+ MagickFreeResourceLimitedMemory(Offsets);
break;
}
}
/* Finish: */
DONE_READING:
- MagickFreeMemory(BImgBuff);
+ MagickFreeResourceLimitedMemory(BImgBuff);
if (palette != NULL)
DestroyImage(palette);
if (clone_info != NULL)
{
#define ThrowNOTXTReaderException(code_,reason_,image_) \
do { \
- MagickFreeMemory(BImgBuff); \
+ MagickFreeResourceLimitedMemory(BImgBuff); \
ThrowReaderException(code_,reason_,image_); \
} while (0);
/* Assure that all image pixels are initialized to black */
SetImage(image,OpaqueOpacity);
- BImgBuff = MagickAllocateArray(unsigned char *,
+ BImgBuff = MagickAllocateResourceLimitedArray(unsigned char *,
((size_t)x+1),
((size_t)((image->matte) ? 4 : 3)
* NumOfPlanes/8));
}
}
/* Note that DImgBuff and WImgBuff point to BImgBuff */
- MagickFreeMemory(BImgBuff);
+ MagickFreeResourceLimitedMemory(BImgBuff);
} while(!EOFBlob(image) && NextImagePos>0);
goto FINISH_TXT;
/*
-% Copyright (C) 2003 GraphicsMagick Group
+% Copyright (C) 2003-2020 GraphicsMagick Group
% Copyright (C) 2002 ImageMagick Studio
% Copyright 1991-1999 E. I. du Pont de Nemours and Company
%
Map all the transparent pixels.
*/
number_pixels=image->columns*image->rows;
- matte_image=MagickAllocateMemory(unsigned char *,number_pixels);
+ matte_image=MagickAllocateResourceLimitedMemory(unsigned char *,number_pixels);
if (matte_image == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,
image);
}
}
if (matte_image != (unsigned char *) NULL)
- MagickFreeMemory(matte_image);
+ MagickFreeResourceLimitedMemory(matte_image);
}
/*
Compute the character per pixel.
/*
Read VICAR pixels.
*/
- scanline=MagickAllocateMemory(unsigned char *,image->columns);
+ scanline=MagickAllocateResourceLimitedMemory(unsigned char *,image->columns);
if (scanline == (unsigned char *) NULL)
ThrowReaderException(CorruptImageError,UnableToReadImageData,image);
for (y=0; y < (long) image->rows; y++)
image->columns,image->rows))
break;
}
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
if (EOFBlob(image))
ThrowReaderException(CorruptImageError,UnexpectedEndOfFile,image);
CloseBlob(image);
/*
Allocate memory for scanline.
*/
- scanline=MagickAllocateMemory(unsigned char *,image->columns);
+ scanline=MagickAllocateResourceLimitedMemory(unsigned char *,image->columns);
if (scanline == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
/*
image->columns,image->rows))
break;
}
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
CloseBlob(image);
return(True);
}
if (BlobIsSeekable(image) &&
(GetBlobSize(image)-TellBlob(image) < (magick_off_t) viff_colormap_size))
ThrowReaderException(CorruptImageError,UnexpectedEndOfFile,image);
- viff_colormap=MagickAllocateMemory(unsigned char *,viff_colormap_size);
+ viff_colormap=MagickAllocateResourceLimitedMemory(unsigned char *,viff_colormap_size);
if (viff_colormap == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
if (ReadBlob(image,viff_colormap_size,(char *) viff_colormap)
!= viff_colormap_size)
{
- MagickFreeMemory(viff_colormap);
+ MagickFreeResourceLimitedMemory(viff_colormap);
ThrowReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
image->colormap[i % image->colors].blue=
ScaleCharToQuantum((unsigned int) value);
}
- MagickFreeMemory(viff_colormap);
+ MagickFreeResourceLimitedMemory(viff_colormap);
break;
}
default:
if (BlobIsSeekable(image) &&
(GetBlobSize(image)-TellBlob(image) < (magick_off_t) alloc_size))
ThrowReaderException(CorruptImageError,InsufficientImageDataInFile,image);
- viff_pixels=MagickAllocateArray(unsigned char *,
+ viff_pixels=MagickAllocateResourceLimitedArray(unsigned char *,
MagickArraySize(bytes_per_pixel,
max_packets),
sizeof(Quantum));
if (ReadBlob(image,bytes_per_pixel*max_packets,(char *) viff_pixels)
!= bytes_per_pixel*max_packets)
{
- MagickFreeMemory(viff_pixels);
+ MagickFreeResourceLimitedMemory(viff_pixels);
ThrowReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
lsb_first=1;
break;
}
}
- MagickFreeMemory(viff_pixels);
+ MagickFreeResourceLimitedMemory(viff_pixels);
if (image->storage_class == PseudoClass)
(void) SyncImage(image);
if (EOFBlob(image))
/*
Convert MIFF to VIFF raster pixels.
*/
- viff_pixels=MagickAllocateMemory(unsigned char *,packets);
+ viff_pixels=MagickAllocateResourceLimitedMemory(unsigned char *,packets);
if (viff_pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
q=viff_pixels;
/*
Dump colormap to file.
*/
- viff_colormap=MagickAllocateMemory(unsigned char *,
+ viff_colormap=MagickAllocateResourceLimitedMemory(unsigned char *,
MagickArraySize(3,image->colors));
if (viff_colormap == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,
for (i=0; i < (long) image->colors; i++)
*q++=ScaleQuantumToChar(image->colormap[i].blue);
(void) WriteBlob(image, (size_t)3*image->colors,(char *) viff_colormap);
- MagickFreeMemory(viff_colormap);
+ MagickFreeResourceLimitedMemory(viff_colormap);
/*
Convert PseudoClass packet to VIFF colormapped pixels.
*/
}
}
(void) WriteBlob(image,packets,(char *) viff_pixels);
- MagickFreeMemory(viff_pixels);
+ MagickFreeResourceLimitedMemory(viff_pixels);
if (image->next == (Image *) NULL)
break;
image=SyncNextImageInList(image);
Read WEBP file.
*/
length = (size_t) GetBlobSize(image); /* FIXME, does not work with stream */
- stream=MagickAllocateArray(unsigned char *,
- length,sizeof(*stream));
+ stream=MagickAllocateResourceLimitedArray(unsigned char *,
+ length,sizeof(*stream));
if (stream == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
count=(long) ReadBlob(image,length,(char *) stream);
if (count != (size_t) length)
{
- MagickFreeMemory(stream);
+ MagickFreeResourceLimitedMemory(stream);
ThrowReaderException(CorruptImageError,InsufficientImageDataInFile,image);
}
if ((webp_status=WebPGetFeatures(stream,length,&stream_features)) != VP8_STATUS_OK)
{
- MagickFreeMemory(stream);
+ MagickFreeResourceLimitedMemory(stream);
switch (webp_status)
{
image->matte=(stream_features.has_alpha ? MagickTrue : MagickFalse);
if (image->ping)
{
- MagickFreeMemory(stream);
+ MagickFreeResourceLimitedMemory(stream);
CloseBlob(image);
StopTimer(&image->timer);
return(image);
}
if (CheckImagePixelLimits(image, exception) != MagickPass)
{
- MagickFreeMemory(stream);
+ MagickFreeResourceLimitedMemory(stream);
ThrowReaderException(ResourceLimitError,ImagePixelLimitExceeded,image);
}
if (image->matte)
&stream_features.height);
if (pixels == (unsigned char *) NULL)
{
- MagickFreeMemory(stream);
+ MagickFreeResourceLimitedMemory(stream);
ThrowReaderException(CoderError,NoDataReturned,image);
}
}
#if defined(SUPPORT_WEBP_MUX)
- /* Read features out of the WebP container */
+ /*
+ Read features out of the WebP container
+ https://developers.google.com/speed/webp/docs/container-api
+ */
{
uint32_t webp_flags=0;
WebPData flag_data;
(void) memset(&flag_data,0,sizeof(flag_data));
WebPMuxGetFeatures(mux,&webp_flags);
- if (webp_flags & ICCP_FLAG) {
- WebPMuxGetChunk(mux,"ICCP",&flag_data);
- AppendImageProfile(image,"ICC",flag_data.bytes,flag_data.size);
- }
+ if (webp_flags & ICCP_FLAG)
+ {
+ WebPMuxGetChunk(mux,"ICCP",&flag_data);
+ SetImageProfile(image,"ICC",flag_data.bytes,flag_data.size);
+ }
- if (webp_flags & EXIF_FLAG) {
- WebPMuxGetChunk(mux,"EXIF",&flag_data);
- AppendImageProfile(image,"EXIF",flag_data.bytes,flag_data.size);
- }
+ if (webp_flags & EXIF_FLAG)
+ {
+ WebPMuxGetChunk(mux,"EXIF",&flag_data);
+ SetImageProfile(image,"EXIF",flag_data.bytes,flag_data.size);
+ }
- if (webp_flags & XMP_FLAG) {
- WebPMuxGetChunk(mux,"XMP",&flag_data);
- AppendImageProfile(image,"XMP",flag_data.bytes,flag_data.size);
- }
+ if (webp_flags & XMP_FLAG)
+ {
+ WebPMuxGetChunk(mux,"XMP",&flag_data);
+ SetImageProfile(image,"XMP",flag_data.bytes,flag_data.size);
+ }
WebPMuxDelete(mux);
}
*/
free(pixels);
pixels=(unsigned char *) NULL;
- MagickFreeMemory(stream);
+ MagickFreeResourceLimitedMemory(stream);
CloseBlob(image);
StopTimer(&image->timer);
return(image);
Allocate memory for pixels.
*/
per_column = MagickArraySize(MagickArraySize(4,image->rows),sizeof(*pixels));
- pixels=MagickAllocateArray(unsigned char *,image->columns,per_column);
+ pixels=MagickAllocateResourceLimitedArray(unsigned char *,image->columns,per_column);
if (pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
webp_status=WebPPictureImportRGB(&picture,pixels,3*picture.width);
else
webp_status=WebPPictureImportRGBA(&picture,pixels,4*picture.width);
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
}
if (webp_status)
return(False);
}
\f
-
static MagickPassFail ReallocColormap(Image *image,unsigned int colors)
{
PixelPacket *colormap;
+ /* FIXME: This implementation would be better using a true realloc */
colormap=MagickAllocateClearedArray(PixelPacket *,colors,sizeof(PixelPacket));
if (colormap != (PixelPacket *) NULL)
{
x++; \
if((long) x>=ldblk) \
{ \
- if(InsertRow(BImgBuff,y,image,bpp)==MagickFail) RetVal=-6; \
+ if(InsertRow(BImgBuff,y,image,bpp)==MagickFail) { RetVal=-6; goto unpack_wpg_raser_error; } \
x=0; \
y++; \
if(y>=image->rows) break; \
/** Call this function to ensure that all data matrix is filled with something. This function
* is used only to error recovery. */
-static void ZeroFillMissingData(unsigned char *BImgBuff,unsigned long x, unsigned long y, Image *image,
- int bpp, long ldblk)
+static MagickPassFail ZeroFillMissingData(unsigned char *BImgBuff,unsigned long x, unsigned long y, Image *image,
+ int bpp, long ldblk)
{
+ MagickPassFail
+ status = MagickPass;
+
while(y<image->rows && image->exception.severity!=UndefinedException)
{
if((long) x<ldblk)
x = 0; /* Next pass will need to clear whole row */
}
if(InsertRow(BImgBuff,y,image,bpp) == MagickFail)
- break;
+ {
+ status = MagickFail;
+ break;
+ }
y++;
}
+ return status;
}
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
"Raster allocation size: %ld byte%s",
ldblk, (ldblk > 1 ? "s" : ""));
- BImgBuff=MagickAllocateMemory(unsigned char *,(size_t) ldblk);
+ BImgBuff=MagickAllocateResourceLimitedMemory(unsigned char *,(size_t) ldblk);
if(BImgBuff==NULL) return(-2);
(void) memset(BImgBuff,0,(size_t) ldblk);
if(i==EOF)
{
ZeroFillMissingData(BImgBuff,x,y,image,bpp,ldblk);
- MagickFreeMemory(BImgBuff);
+ MagickFreeResourceLimitedMemory(BImgBuff);
return(-5);
}
bbuf = i;
if(i==EOF)
{
ZeroFillMissingData(BImgBuff,x,y,image,bpp,ldblk);
- MagickFreeMemory(BImgBuff);
+ MagickFreeResourceLimitedMemory(BImgBuff);
return -7;
}
RunCount = i;
y++;
ZeroFillMissingData(BImgBuff,x,y,image,bpp,ldblk);
}
- MagickFreeMemory(BImgBuff);
+ MagickFreeResourceLimitedMemory(BImgBuff);
return(-3);
}
for(i=0; i<(int)RunCount; i++)
/* when x=0; y points to a new empty line. For y=0 zero line will be populated. */
if(y>=image->rows)
{
- MagickFreeMemory(BImgBuff);
+ MagickFreeResourceLimitedMemory(BImgBuff);
return(-4);
}
if(InsertRow(BImgBuff,y,image,bpp)==MagickFail)
{
- ZeroFillMissingData(BImgBuff,x,y,image,bpp,ldblk);
- MagickFreeMemory(BImgBuff);
+ MagickFreeResourceLimitedMemory(BImgBuff);
return(-6);
}
y++;
}
}
}
- MagickFreeMemory(BImgBuff);
+unpack_wpg_raser_error:;
+ MagickFreeResourceLimitedMemory(BImgBuff);
return(RetVal);
}
x++; \
if((long) x >= ldblk) \
{ \
- if(InsertRow(BImgBuff,(long) y,image,bpp)==MagickFail) RetVal=-6; \
+ if(InsertRow(BImgBuff,(long) y,image,bpp)==MagickFail) { RetVal=-6; goto unpack_wpg2_error; } \
x=0; \
y++; \
XorMe = 0; \
#define FreeUnpackWPG2RasterAllocs(BImgBuff,UpImgBuff) \
do \
{ \
- MagickFreeMemory(BImgBuff); \
- MagickFreeMemory(UpImgBuff); \
+ MagickFreeResourceLimitedMemory(BImgBuff); \
+ MagickFreeResourceLimitedMemory(UpImgBuff); \
} while(0);
/* WPG2 raster reader. */
x=0;
y=0;
ldblk=(long) ((bpp*image->columns+7)/8);
- BImgBuff=MagickAllocateMemory(unsigned char *,(size_t) ldblk);
+ BImgBuff=MagickAllocateResourceLimitedMemory(unsigned char *,(size_t) ldblk);
if(BImgBuff==NULL)
return(-2);
- UpImgBuff=MagickAllocateMemory(unsigned char *,(size_t) ldblk);
+ UpImgBuff=MagickAllocateResourceLimitedMemory(unsigned char *,(size_t) ldblk);
if(UpImgBuff==NULL)
{
FreeUnpackWPG2RasterAllocs(BImgBuff,UpImgBuff);
}
}
}
+unpack_wpg2_error:;
FreeUnpackWPG2RasterAllocs(BImgBuff,UpImgBuff);
return(RetVal);
}
*/
if (GetBlobStreamData(image) == (unsigned char *) NULL)
{
- ps_data_alloc=MagickAllocateMemory(unsigned char *, PS_Size);
+ ps_data_alloc=MagickAllocateResourceLimitedMemory(unsigned char *, PS_Size);
if (ps_data_alloc == (unsigned char *) NULL)
{
if (image->logging)
ps_data=ps_data_alloc;
if (ReadBlobZC(image,PS_Size,&ps_data) != PS_Size)
{
- MagickFreeMemory(ps_data_alloc);
+ MagickFreeResourceLimitedMemory(ps_data_alloc);
if (image->logging)
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
"ExtractPostscript(): Failed to read %"MAGICK_SIZE_T_F"u bytes of data at"
*/
if ((clone_info=CloneImageInfo(image_info)) == NULL)
{
- MagickFreeMemory(ps_data_alloc);
+ MagickFreeResourceLimitedMemory(ps_data_alloc);
return(image);
}
clone_info->blob=(void *) NULL;
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
"Reading embedded \"%s\" content from blob...", clone_info->magick);
image2 = BlobToImage(clone_info, ps_data, PS_Size, &image->exception );
- MagickFreeMemory(ps_data_alloc);
+ MagickFreeResourceLimitedMemory(ps_data_alloc);
if (!image2)
{
goto FINISH_UNL;
if ( (image->colors < (1UL<<bpp)) && (bpp != 24) )
if (!ReallocColormap(image,1U<<bpp))
goto NoMemory;
- /* MagickReallocMemory(PixelPacket *,image->colormap, */
- /* (size_t) (1U<<bpp)*sizeof(PixelPacket)); */
}
if(bpp == 1)
if( image->colors<(1UL<<bpp) && bpp!=24 )
if (!ReallocColormap(image,1U<<bpp))
goto NoMemory;
- /*
- Above was formerly this, but causes use of uninitialized memory:
- MagickReallocMemory(PixelPacket *,image->colormap,
- (size_t) (1U<<bpp)*sizeof(PixelPacket));
- */
}
case 0: /*Uncompressed raster*/
{
ldblk=(long) ((bpp*image->columns+7)/8);
- BImgBuff=MagickAllocateMemory(unsigned char *,(size_t) ldblk);
+ BImgBuff=MagickAllocateResourceLimitedMemory(unsigned char *,(size_t) ldblk);
if(BImgBuff == (unsigned char *) NULL)
goto NoMemory;
{
if (ReadBlob(image,ldblk,(char *) BImgBuff) != (size_t) ldblk)
{
- MagickFreeMemory(BImgBuff);
+ MagickFreeResourceLimitedMemory(BImgBuff);
ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,image->filename);
goto DecompressionFailed;
}
if(InsertRow(BImgBuff,i,image,bpp) == MagickFail)
{
- if(BImgBuff) MagickFreeMemory(BImgBuff);
+ if(BImgBuff) MagickFreeResourceLimitedMemory(BImgBuff);
goto DecompressionFailed;
}
}
- if(BImgBuff) MagickFreeMemory(BImgBuff);
+ if(BImgBuff) MagickFreeResourceLimitedMemory(BImgBuff);
break;
}
case 1: /*RLE for WPG2 */
if ((image->columns % 16) && ((image->columns % 16) < 9) && (version == 10))
padding=1;
bytes_per_line=((size_t) image->columns+7)/8+padding;
- data=MagickAllocateArray(unsigned char *,image->rows,bytes_per_line);
+ data=MagickAllocateResourceLimitedArray(unsigned char *,image->rows,bytes_per_line);
if (data == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
/*
value=XBMInteger(image,4,hex_digits);
if (value < 0)
{
- MagickFreeMemory(data);
+ MagickFreeResourceLimitedMemory(data);
ThrowReaderException(CorruptImageError,ImproperImageHeader,image);
}
*p++=(unsigned char) value;
value=XBMInteger(image,2,hex_digits);
if (value < 0)
{
- MagickFreeMemory(data);
+ MagickFreeResourceLimitedMemory(data);
ThrowReaderException(CorruptImageError,ImproperImageHeader,image);
}
*p++=(unsigned char) value;
image->columns,image->rows))
break;
}
- MagickFreeMemory(data);
+ MagickFreeResourceLimitedMemory(data);
(void) SyncImage(image);
CloseBlob(image);
StopTimer(&image->timer);
}
}
- xcfdata = xcfodata = MagickAllocateMemory(XCFPixelPacket *,data_length);
+ xcfdata = xcfodata = MagickAllocateResourceLimitedMemory(XCFPixelPacket *,data_length);
graydata = (unsigned char *) xcfdata; /* used by gray and indexed */
if (xcfdata == (XCFPixelPacket *) NULL)
nmemb_read_successfully = ReadBlob(image, data_length, xcfdata);
if (nmemb_read_successfully != data_length)
{
- MagickFreeMemory(xcfodata);
+ MagickFreeResourceLimitedMemory(xcfodata);
ThrowBinaryException(CorruptImageError,UnexpectedEndOfFile,image->filename);
}
if (q == (PixelPacket *) NULL)
{
CopyException(&image->exception,&tile_image->exception);
- MagickFreeMemory(xcfodata);
+ MagickFreeResourceLimitedMemory(xcfodata);
return MagickFail;
}
}
}
- MagickFreeMemory(xcfodata);
+ MagickFreeResourceLimitedMemory(xcfodata);
return MagickPass;
}
bpp = (int) inDocInfo->bpp;
- xcfdata = xcfodata = MagickAllocateMemory(unsigned char *,data_length);
+ xcfdata = xcfodata = MagickAllocateResourceLimitedMemory(unsigned char *,data_length);
if (xcfdata == (unsigned char *) NULL)
{
ThrowException(&image->exception,ResourceLimitError,MemoryAllocationFailed,NULL);
"Read %lu bytes, expected %lu bytes",
(unsigned long) nmemb_read_successfully,
(unsigned long) data_length);
- MagickFreeMemory(xcfodata);
+ MagickFreeResourceLimitedMemory(xcfodata);
ThrowBinaryException(CorruptImageError,UnexpectedEndOfFile,image->filename);
}
if (SyncImagePixelsEx(tile_image,&tile_image->exception) == MagickFail)
break;
}
- MagickFreeMemory(xcfodata);
+ MagickFreeResourceLimitedMemory(xcfodata);
return MagickPass;
bogus_rle:
if (xcfodata)
- MagickFreeMemory(xcfodata);
+ MagickFreeResourceLimitedMemory(xcfodata);
(void) LogMagickEvent(CoderEvent,GetMagickModule(), "Failed to RLE-decode tile");
ThrowBinaryException(CorruptImageError,CorruptImage,image->filename);
} \
} \
} \
- MagickFreeMemory(layer_info); \
+ MagickFreeResourceLimitedMemory(layer_info); \
} while (0);
static Image *ReadXCFImage(const ImageInfo *image_info,ExceptionInfo *exception)
{
last_layer);
/* allocate our array of layer info blocks */
- layer_info=MagickAllocateArray(XCFLayerInfo *,
+ layer_info=MagickAllocateResourceLimitedArray(XCFLayerInfo *,
number_layers,
sizeof(XCFLayerInfo));
if (layer_info == (XCFLayerInfo *) NULL)
saved_pos = TellBlob(image);
if (saved_pos < 0)
{
- MagickFreeMemory(layer_info);
+ MagickFreeResourceLimitedMemory(layer_info);
ThrowReaderException(BlobError,UnableToObtainOffset,image);
}
layer_info[j].image = (Image *) NULL;
}
}
- MagickFreeMemory(layer_info);
+ MagickFreeResourceLimitedMemory(layer_info);
#endif
DestroyLayerInfo(number_layers,layer_info);
CopyException(exception,&image->exception);
#endif
}
- MagickFreeMemory(layer_info);
+ MagickFreeResourceLimitedMemory(layer_info);
#if 0 /* BOGUS: do we need the channels?? */
while (True)
for (p=text; *p != '\0'; p++)
if (*p == '\n')
lines++;
- textlist=MagickAllocateMemory(char **,(lines+1)*sizeof(char *));
+ textlist=MagickAllocateResourceLimitedMemory(char **,(lines+1)*sizeof(char *));
if (textlist == (char **) NULL)
MagickFatalError3(ResourceLimitFatalError,MemoryAllocationFailed,
UnableToConvertText);
do { \
if (keys) \
for (i=0; i < (long) image->colors; i++) \
- MagickFreeMemory(keys[i]); \
- MagickFreeMemory(keys); \
- MagickFreeMemory(textlist); \
- MagickFreeMemory(xpm_buffer); \
+ MagickFreeResourceLimitedMemory(keys[i]); \
+ MagickFreeResourceLimitedMemory(keys); \
+ MagickFreeResourceLimitedMemory(textlist); \
+ MagickFreeResourceLimitedMemory(xpm_buffer); \
ThrowReaderException(code_,reason_,image_); \
} while (0);
Read XPM file.
*/
length=MaxTextExtent;
- xpm_buffer=MagickAllocateMemory(char *,length);
+ xpm_buffer=MagickAllocateResourceLimitedMemory(char *,length);
if (xpm_buffer != (char *) NULL)
{
xpm_buffer[0]='\0';
p=xpm_buffer;
while (ReadBlobString(image,p) != (char *) NULL)
{
+ char *new_xpm_buffer;
if (*p == '#')
if ((p == xpm_buffer) || (*(p-1) == '\n'))
continue;
if (((size_t) (p-xpm_buffer)+MaxTextExtent+1) < length)
continue;
length<<=1;
- MagickReallocMemory(char *,xpm_buffer,length);
- if (xpm_buffer == (char *) NULL)
- break;
+ new_xpm_buffer=MagickReallocateResourceLimitedMemory(char *,xpm_buffer,length);
+ if (new_xpm_buffer == (char *) NULL)
+ {
+ MagickFreeResourceLimitedMemory(xpm_buffer);
+ break;
+ }
+ xpm_buffer=new_xpm_buffer;
p=xpm_buffer+strlen(xpm_buffer);
}
}
/*
Initialize image structure.
*/
- keys=MagickAllocateArray(char **,image->colors,sizeof(char *));
+ keys=MagickAllocateResourceLimitedArray(char **,image->colors,sizeof(char *));
if (keys == (char **) NULL)
ThrowXPMReaderException(ResourceLimitError,MemoryAllocationFailed,image);
for (i=0; i < (long) image->colors; i++)
" %lu: %s", i-1, textlist[i-1]);
if (strlen(p) < width)
break;
- keys[j]=MagickAllocateMemory(char *,(size_t) width+1);
+ keys[j]=MagickAllocateResourceLimitedMemory(char *,(size_t) width+1);
if (keys[j] == (char *) NULL)
ThrowXPMReaderException(ResourceLimitError,MemoryAllocationFailed,image);
keys[j][width]='\0';
Free resources.
*/
for (i=0; i < (long) image->colors; i++)
- MagickFreeMemory(keys[i]);
- MagickFreeMemory(keys);
- MagickFreeMemory(textlist);
- MagickFreeMemory(xpm_buffer);
+ MagickFreeResourceLimitedMemory(keys[i]);
+ MagickFreeResourceLimitedMemory(keys);
+ MagickFreeResourceLimitedMemory(textlist);
+ MagickFreeResourceLimitedMemory(xpm_buffer);
CloseBlob(image);
StopTimer(&image->timer);
return(image);
#define ThrowXWDReaderException(code_,reason_,image_) \
do { \
if (ximage) \
- MagickFreeMemory(ximage->data); \
- MagickFreeMemory(ximage); \
- MagickFreeMemory(colors); \
+ MagickFreeResourceLimitedMemory(ximage->data); \
+ MagickFreeResourceLimitedMemory(ximage); \
+ MagickFreeResourceLimitedMemory(colors); \
ThrowReaderException(code_,reason_,image_); \
} while (0);
/*
Initialize the X image.
*/
- ximage=MagickAllocateMemory(XImage *,sizeof(XImage));
+ ximage=MagickAllocateResourceLimitedMemory(XImage *,sizeof(XImage));
if (ximage == (XImage *) NULL)
ThrowXWDReaderException(ResourceLimitError,MemoryAllocationFailed,image);
ximage->depth=(int) header.pixmap_depth;
register unsigned int
i;
- colors=MagickAllocateArray(XColor *,header.ncolors,sizeof(XColor));
+ colors=MagickAllocateResourceLimitedArray(XColor *,header.ncolors,sizeof(XColor));
if (colors == (XColor *) NULL)
ThrowXWDReaderException(ResourceLimitError,MemoryAllocationFailed,
image);
ThrowXWDReaderException(CorruptImageError,UnexpectedEndOfFile,image);
}
- ximage->data=MagickAllocateMemory(char *,length);
+ ximage->data=MagickAllocateResourceLimitedMemory(char *,length);
if (ximage->data == (char *) NULL)
ThrowXWDReaderException(ResourceLimitError,MemoryAllocationFailed,image);
count=ReadBlob(image,length,ximage->data);
/*
Free image and colormap.
*/
- MagickFreeMemory(colors);
- MagickFreeMemory(ximage->data);
- MagickFreeMemory(ximage);
+ MagickFreeResourceLimitedMemory(colors);
+ MagickFreeResourceLimitedMemory(ximage->data);
+ MagickFreeResourceLimitedMemory(ximage);
CloseBlob(image);
StopTimer(&image->timer);
return(image);
/*
Allocate memory for pixels.
*/
- pixels=MagickAllocateMemory(unsigned char *,bytes_per_line);
+ pixels=MagickAllocateResourceLimitedMemory(unsigned char *,bytes_per_line);
if (pixels == (unsigned char *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
Dump colormap to file.
*/
(void) memset(&color,0,sizeof(color));
- colors=MagickAllocateArray(XColor *,image->colors,sizeof(XColor));
+ colors=MagickAllocateResourceLimitedArray(XColor *,image->colors,sizeof(XColor));
if (colors == (XColor *) NULL)
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
for (i=0; i < image->colors; i++)
if (WriteBlob(image,sz_XWDColor,(char *) &color) != sz_XWDColor)
break;
}
- MagickFreeMemory(colors);
+ MagickFreeResourceLimitedMemory(colors);
}
/*
Convert MIFF to XWD raster pixels.
image->columns,image->rows))
break;
}
- MagickFreeMemory(pixels);
+ MagickFreeResourceLimitedMemory(pixels);
CloseBlob(image);
return (y < image->rows ? MagickFail : MagickPass);
}
*/
#define ThrowYUVReaderException(code_,reason_,image_) \
{ \
- MagickFreeMemory(scanline); \
+ MagickFreeResourceLimitedMemory(scanline); \
DestroyImage(chroma_image); \
DestroyImage(resize_image); \
ThrowReaderException(code_,reason_,image_); \
Allocate memory for a scanline.
*/
if (interlace == NoInterlace)
- scanline=MagickAllocateMemory(unsigned char *,(size_t) 2*image->columns+2);
+ scanline=MagickAllocateResourceLimitedMemory(unsigned char *,MagickArraySize(2,image->columns)+2);
else
- scanline=MagickAllocateMemory(unsigned char *,image->columns);
+ scanline=MagickAllocateResourceLimitedMemory(unsigned char *,image->columns);
if (scanline == (unsigned char *) NULL)
ThrowYUVReaderException(ResourceLimitError,MemoryAllocationFailed,image);
do
if (image->next == (Image *) NULL)
{
DestroyImageList(image);
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
return((Image *) NULL);
}
image=SyncNextImageInList(image);
break;
}
} while (count != 0);
- MagickFreeMemory(scanline);
+ MagickFreeResourceLimitedMemory(scanline);
while (image->previous != (Image *) NULL)
image=image->previous;
CloseBlob(image);
# -*- shell-script -*-
-# Copyright (C) 2012-2017 GraphicsMagick Group
+# Copyright (C) 2012-2020 GraphicsMagick Group
# Definitions of optional features and configuration values for this build.
# Intended for use by test scripts.
MAGICK_FEATURES='@MAGICK_FEATURES@'
MAGICK_FONT='@abs_top_srcdir@/PerlMagick/demo/Generic.ttf'
PATH="@abs_top_builddir@/utilities:${PATH}"
+
+# Number of bits in a pixel Quantum (8/16/32)
+QuantumDepth=@QuantumDepth@
+
+# Memory limit (in MB) for a 'Q8' build
+Q8_MEMORY_LIMIT=128
+
+# Apply some resource limits (FAX/G4 need 2592x3508 pixel image!)
+if test -z "$MAGICK_LIMIT_MEMORY" ; then
+ export MAGICK_LIMIT_MEMORY=`expr $Q8_MEMORY_LIMIT '*' '(' $QuantumDepth / 8 ')'`MB
+fi
+if test -z "$MAGICK_LIMIT_WIDTH" ; then
+ export MAGICK_LIMIT_WIDTH=2592
+fi
+if test -z "$MAGICK_LIMIT_HEIGHT" ; then
+ export MAGICK_LIMIT_HEIGHT=3508
+fi
+if test -z "$MAGICK_LIMIT_DISK" ; then
+ export MAGICK_LIMIT_DISK=0
+fi
+# Enable debug traces for exceptions
+if test -z "MAGICK_DEBUG" ; then
+ export MAGICK_DEBUG=exception
+fi
+printf "Resource Limits: MAGICK_LIMIT_MEMORY=%s MAGICK_LIMIT_WIDTH=%s MAGICK_LIMIT_HEIGHT=%s MAGICK_LIMIT_DISK=%s\n\n" "$MAGICK_LIMIT_MEMORY" "$MAGICK_LIMIT_WIDTH" "$MAGICK_LIMIT_HEIGHT" "$MAGICK_LIMIT_DISK"
+
set +a
scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>.
#
# This program is free software; you can redistribute it and/or modify
MINGW*)
file_conv=mingw
;;
- CYGWIN*)
+ CYGWIN* | MSYS*)
file_conv=cygwin
;;
*)
mingw/*)
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
;;
- cygwin/*)
+ cygwin/* | msys/*)
file=`cygpath -m "$file" || echo "$file"`
;;
wine/*)
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2018 Free Software Foundation, Inc.
+# Copyright 1992-2020 Free Software Foundation, Inc.
-timestamp='2018-03-08'
+timestamp='2020-12-22'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
#
# You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
#
# Please send patches to <config-patches@gnu.org>.
-me=`echo "$0" | sed -e 's,.*/,,'`
+me=$(echo "$0" | sed -e 's,.*/,,')
usage="\
Usage: $0 [OPTION]
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2018 Free Software Foundation, Inc.
+Copyright 1992-2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
exit 1
fi
-trap 'exit 1' 1 2 15
-
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
# compiler to aid in system detection is discouraged as it requires
# temporary files to be created and, as you can see below, it is a
# Portable tmp directory creation inspired by the Autoconf team.
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int x;" > "$dummy.c" ;
- for c in cc gcc c89 c99 ; do
- if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
+tmp=
+# shellcheck disable=SC2172
+trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
+
+set_cc_for_build() {
+ # prevent multiple calls if $tmp is already set
+ test "$tmp" && return 0
+ : "${TMPDIR=/tmp}"
+ # shellcheck disable=SC2039
+ { tmp=$( (umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null) && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
+ dummy=$tmp/dummy
+ case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
+ ,,) echo "int x;" > "$dummy.c"
+ for driver in cc gcc c89 c99 ; do
+ if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$driver"
+ break
+ fi
+ done
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+ esac
+}
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+if test -f /.attbin/uname ; then
PATH=$PATH:/.attbin ; export PATH
fi
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+UNAME_MACHINE=$( (uname -m) 2>/dev/null) || UNAME_MACHINE=unknown
+UNAME_RELEASE=$( (uname -r) 2>/dev/null) || UNAME_RELEASE=unknown
+UNAME_SYSTEM=$( (uname -s) 2>/dev/null) || UNAME_SYSTEM=unknown
+UNAME_VERSION=$( (uname -v) 2>/dev/null) || UNAME_VERSION=unknown
case "$UNAME_SYSTEM" in
Linux|GNU|GNU/*)
- # If the system lacks a compiler, then just pick glibc.
- # We could probably try harder.
- LIBC=gnu
+ LIBC=unknown
- eval "$set_cc_for_build"
+ set_cc_for_build
cat <<-EOF > "$dummy.c"
#include <features.h>
#if defined(__UCLIBC__)
LIBC=uclibc
#elif defined(__dietlibc__)
LIBC=dietlibc
- #else
+ #elif defined(__GLIBC__)
LIBC=gnu
+ #else
+ #include <stdarg.h>
+ /* First heuristic to detect musl libc. */
+ #ifdef __DEFINED_va_list
+ LIBC=musl
+ #endif
#endif
EOF
- eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
+ eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')"
- # If ldd exists, use it to detect musl libc.
- if command -v ldd >/dev/null && \
- ldd --version 2>&1 | grep -q ^musl
- then
- LIBC=musl
+ # Second heuristic to detect musl libc.
+ if [ "$LIBC" = unknown ] &&
+ command -v ldd >/dev/null &&
+ ldd --version 2>&1 | grep -q ^musl; then
+ LIBC=musl
+ fi
+
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ if [ "$LIBC" = unknown ]; then
+ LIBC=gnu
fi
;;
esac
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || \
"/sbin/$sysctl" 2>/dev/null || \
"/usr/sbin/$sysctl" 2>/dev/null || \
- echo unknown)`
+ echo unknown))
case "$UNAME_MACHINE_ARCH" in
+ aarch64eb) machine=aarch64_be-unknown ;;
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
sh3eb) machine=sh-unknown ;;
sh5el) machine=sh5le-unknown ;;
earmv*)
- arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
- endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
+ arch=$(echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,')
+ endian=$(echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p')
machine="${arch}${endian}"-unknown
;;
*) machine="$UNAME_MACHINE_ARCH"-unknown ;;
os=netbsdelf
;;
arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- eval "$set_cc_for_build"
+ set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ELF__
then
case "$UNAME_MACHINE_ARCH" in
earm*)
expr='s/^earmv[0-9]/-eabi/;s/eb$//'
- abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
+ abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr")
;;
esac
# The OS release
release='-gnu'
;;
*)
- release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
+ release=$(echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2)
;;
esac
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "$machine-${os}${release}${abi}"
+ echo "$machine-${os}${release}${abi-}"
exit ;;
*:Bitrig:*:*)
- UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+ UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//')
echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
exit ;;
*:OpenBSD:*:*)
- UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//')
echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
exit ;;
*:LibertyBSD:*:*)
- UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+ UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//')
echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
exit ;;
*:MidnightBSD:*:*)
*:SolidBSD:*:*)
echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
exit ;;
+ *:OS108:*:*)
+ echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE"
+ exit ;;
macppc:MirBSD:*:*)
echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
exit ;;
*:Sortix:*:*)
echo "$UNAME_MACHINE"-unknown-sortix
exit ;;
+ *:Twizzler:*:*)
+ echo "$UNAME_MACHINE"-unknown-twizzler
+ exit ;;
*:Redox:*:*)
echo "$UNAME_MACHINE"-unknown-redox
exit ;;
mips:OSF1:*.*)
- echo mips-dec-osf1
- exit ;;
+ echo mips-dec-osf1
+ exit ;;
alpha:OSF1:*:*)
case $UNAME_RELEASE in
*4.0)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $3}')
;;
*5.*)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $4}')
;;
esac
# According to Compaq, /usr/sbin/psrinfo has been available on
# OSF/1 and Tru64 systems produced since 1995. I hope that
# covers most systems running today. This code pipes the CPU
# types through head -n 1, so we only detect the type of CPU 0.
- ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ ALPHA_CPU_TYPE=$(/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1)
case "$ALPHA_CPU_TYPE" in
"EV4 (21064)")
UNAME_MACHINE=alpha ;;
# A Tn.n version is a released field test version.
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
- echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
+ echo "$UNAME_MACHINE"-dec-osf"$(echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)"
# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
exitcode=$?
trap '' 0
exit ;;
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ if test "$( (/bin/universe) 2>/dev/null)" = att ; then
echo pyramid-pyramid-sysv3
else
echo pyramid-pyramid-bsd
echo sparc-icl-nx6
exit ;;
DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
- case `/usr/bin/uname -p` in
+ case $(/usr/bin/uname -p) in
sparc) echo sparc-icl-nx7; exit ;;
esac ;;
s390x:SunOS:*:*)
- echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
+ echo "$UNAME_MACHINE"-ibm-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')"
exit ;;
sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+ echo sparc-hal-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
exit ;;
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
+ echo sparc-sun-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')"
exit ;;
i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
echo i386-pc-auroraux"$UNAME_RELEASE"
exit ;;
i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
- eval "$set_cc_for_build"
+ set_cc_for_build
SUN_ARCH=i386
# If there is a compiler, see if it is configured for 64-bit objects.
# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
# This test works for both compilers.
- if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_64BIT_ARCH >/dev/null
SUN_ARCH=x86_64
fi
fi
- echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+ echo "$SUN_ARCH"-pc-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
exit ;;
sun4*:SunOS:6*:*)
# According to config.sub, this is the proper way to canonicalize
# SunOS6. Hard to guess exactly what SunOS6 will be like, but
# it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+ echo sparc-sun-solaris3"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
exit ;;
sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
+ case "$(/usr/bin/arch -k)" in
Series*|S4*)
- UNAME_RELEASE=`uname -v`
+ UNAME_RELEASE=$(uname -v)
;;
esac
# Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
+ echo sparc-sun-sunos"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/')"
exit ;;
sun3*:SunOS:*:*)
echo m68k-sun-sunos"$UNAME_RELEASE"
exit ;;
sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ UNAME_RELEASE=$( (sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null)
test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
- case "`/bin/arch`" in
+ case "$(/bin/arch)" in
sun3)
echo m68k-sun-sunos"$UNAME_RELEASE"
;;
echo clipper-intergraph-clix"$UNAME_RELEASE"
exit ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
- eval "$set_cc_for_build"
+ set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
#ifdef __cplusplus
#include <stdio.h> /* for printf() prototype */
}
EOF
$CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
- dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
- SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
+ dummyarg=$(echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p') &&
+ SYSTEM_NAME=$("$dummy" "$dummyarg") &&
{ echo "$SYSTEM_NAME"; exit; }
echo mips-mips-riscos"$UNAME_RELEASE"
exit ;;
exit ;;
AViiON:dgux:*:*)
# DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
+ UNAME_PROCESSOR=$(/usr/bin/uname -p)
+ if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110
then
- if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \
- [ "$TARGET_BINARY_INTERFACE"x = x ]
+ if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \
+ test "$TARGET_BINARY_INTERFACE"x = x
then
echo m88k-dg-dgux"$UNAME_RELEASE"
else
echo m68k-tektronix-bsd
exit ;;
*:IRIX*:*:*)
- echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
+ echo mips-sgi-irix"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/g')"
exit ;;
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ exit ;; # Note that: echo "'$(uname -s)'" gives 'AIX '
i*86:AIX:*:*)
echo i386-ibm-aix
exit ;;
ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
+ if test -x /usr/bin/oslevel ; then
+ IBM_REV=$(/usr/bin/oslevel)
else
IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
fi
exit ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval "$set_cc_for_build"
+ set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
#include <sys/systemcfg.h>
exit(0);
}
EOF
- if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
+ if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy")
then
echo "$SYSTEM_NAME"
else
fi
exit ;;
*:AIX:*:[4567])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ IBM_CPU_ID=$(/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }')
if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
IBM_ARCH=rs6000
else
IBM_ARCH=powerpc
fi
- if [ -x /usr/bin/lslpp ] ; then
- IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
- awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
+ if test -x /usr/bin/lslpp ; then
+ IBM_REV=$(/usr/bin/lslpp -Lqc bos.rte.libc |
+ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/)
else
IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
fi
echo m68k-hp-bsd4.4
exit ;;
9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
+ HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//')
case "$UNAME_MACHINE" in
9000/31?) HP_ARCH=m68000 ;;
9000/[34]??) HP_ARCH=m68k ;;
9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ if test -x /usr/bin/getconf; then
+ sc_cpu_version=$(/usr/bin/getconf SC_CPU_VERSION 2>/dev/null)
+ sc_kernel_bits=$(/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null)
case "$sc_cpu_version" in
523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
esac ;;
esac
fi
- if [ "$HP_ARCH" = "" ]; then
- eval "$set_cc_for_build"
+ if test "$HP_ARCH" = ""; then
+ set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
#define _HPUX_SOURCE
exit (0);
}
EOF
- (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
+ (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=$("$dummy")
test -z "$HP_ARCH" && HP_ARCH=hppa
fi ;;
esac
- if [ "$HP_ARCH" = hppa2.0w ]
+ if test "$HP_ARCH" = hppa2.0w
then
- eval "$set_cc_for_build"
+ set_cc_for_build
# hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
# 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
exit ;;
ia64:HP-UX:*:*)
- HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
+ HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//')
echo ia64-hp-hpux"$HPUX_REV"
exit ;;
3050*:HI-UX:*:*)
- eval "$set_cc_for_build"
+ set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
#include <unistd.h>
int
exit (0);
}
EOF
- $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
+ $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") &&
{ echo "$SYSTEM_NAME"; exit; }
echo unknown-hitachi-hiuxwe2
exit ;;
echo hppa1.0-hp-osf
exit ;;
i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
+ if test -x /usr/sbin/sysversion ; then
echo "$UNAME_MACHINE"-unknown-osf1mk
else
echo "$UNAME_MACHINE"-unknown-osf1
echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
exit ;;
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
- FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
- FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
+ FUJITSU_PROC=$(uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)
+ FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///')
+ FUJITSU_REL=$(echo "$UNAME_RELEASE" | sed -e 's/ /_/')
echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
exit ;;
5000:UNIX_System_V:4.*:*)
- FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
- FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
+ FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///')
+ FUJITSU_REL=$(echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/')
echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
exit ;;
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
*:BSD/OS:*:*)
echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
exit ;;
+ arm:FreeBSD:*:*)
+ UNAME_PROCESSOR=$(uname -p)
+ set_cc_for_build
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabi
+ else
+ echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabihf
+ fi
+ exit ;;
*:FreeBSD:*:*)
- UNAME_PROCESSOR=`/usr/bin/uname -p`
+ UNAME_PROCESSOR=$(/usr/bin/uname -p)
case "$UNAME_PROCESSOR" in
amd64)
UNAME_PROCESSOR=x86_64 ;;
i386)
UNAME_PROCESSOR=i586 ;;
esac
- echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
+ echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')"
exit ;;
i*:CYGWIN*:*)
echo "$UNAME_MACHINE"-pc-cygwin
echo "$UNAME_MACHINE"-pc-uwin
exit ;;
amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
- echo x86_64-unknown-cygwin
+ echo x86_64-pc-cygwin
exit ;;
prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+ echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
exit ;;
*:GNU:*:*)
# the GNU system
- echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
+ echo "$(echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE"|sed -e 's,/.*$,,')"
exit ;;
*:GNU/*:*:*)
# other systems with GNU libc and userland
- echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
+ echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')-$LIBC"
exit ;;
- i*86:Minix:*:*)
- echo "$UNAME_MACHINE"-pc-minix
+ *:Minix:*:*)
+ echo "$UNAME_MACHINE"-unknown-minix
exit ;;
aarch64:Linux:*:*)
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
exit ;;
alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ case $(sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null) in
EV5) UNAME_MACHINE=alphaev5 ;;
EV56) UNAME_MACHINE=alphaev56 ;;
PCA56) UNAME_MACHINE=alphapca56 ;;
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
exit ;;
arm*:Linux:*:*)
- eval "$set_cc_for_build"
+ set_cc_for_build
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_EABI__
then
k1om:Linux:*:*)
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
exit ;;
+ loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
m32r*:Linux:*:*)
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
exit ;;
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
exit ;;
mips:Linux:*:* | mips64:Linux:*:*)
- eval "$set_cc_for_build"
+ set_cc_for_build
+ IS_GLIBC=0
+ test x"${LIBC}" = xgnu && IS_GLIBC=1
sed 's/^ //' << EOF > "$dummy.c"
#undef CPU
- #undef ${UNAME_MACHINE}
- #undef ${UNAME_MACHINE}el
+ #undef mips
+ #undef mipsel
+ #undef mips64
+ #undef mips64el
+ #if ${IS_GLIBC} && defined(_ABI64)
+ LIBCABI=gnuabi64
+ #else
+ #if ${IS_GLIBC} && defined(_ABIN32)
+ LIBCABI=gnuabin32
+ #else
+ LIBCABI=${LIBC}
+ #endif
+ #endif
+
+ #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+ CPU=mipsisa64r6
+ #else
+ #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+ CPU=mipsisa32r6
+ #else
+ #if defined(__mips64)
+ CPU=mips64
+ #else
+ CPU=mips
+ #endif
+ #endif
+ #endif
+
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=${UNAME_MACHINE}el
+ MIPS_ENDIAN=el
#else
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=${UNAME_MACHINE}
+ MIPS_ENDIAN=
#else
- CPU=
+ MIPS_ENDIAN=
#endif
#endif
EOF
- eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`"
- test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; }
+ eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')"
+ test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
;;
mips64el:Linux:*:*)
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
exit ;;
parisc:Linux:*:* | hppa:Linux:*:*)
# Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ case $(grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2) in
PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
*) echo hppa-unknown-linux-"$LIBC" ;;
echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
exit ;;
x86_64:Linux:*:*)
- echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
+ set_cc_for_build
+ LIBCABI=$LIBC
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_X32 >/dev/null
+ then
+ LIBCABI="$LIBC"x32
+ fi
+ fi
+ echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI"
exit ;;
xtensa*:Linux:*:*)
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
echo "$UNAME_MACHINE"-pc-msdosdjgpp
exit ;;
i*86:*:4.*:*)
- UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
+ UNAME_REL=$(echo "$UNAME_RELEASE" | sed 's/\/MP$//')
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
else
exit ;;
i*86:*:5:[678]*)
# UnixWare 7.x, OpenUNIX and OpenServer 6.
- case `/bin/uname -X | grep "^Machine"` in
+ case $(/bin/uname -X | grep "^Machine") in
*486*) UNAME_MACHINE=i486 ;;
*Pentium) UNAME_MACHINE=i586 ;;
*Pent*|*Celeron) UNAME_MACHINE=i686 ;;
esac
- echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}"
+ echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}"
exit ;;
i*86:*:3.2:*)
if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ UNAME_REL=$(sed -n 's/.*Version //p' </usr/options/cb.name)
echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ UNAME_REL=$( (/bin/uname -X|grep Release|sed -e 's/.*= //'))
(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
&& UNAME_MACHINE=i586
3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
OS_REL=''
test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid)
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
&& { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
NCR*:*:4.2:* | MPRAS*:*:4.2:*)
OS_REL='.3'
test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid)
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
&& { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
exit ;;
*:SINIX-*:*:*)
if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ UNAME_MACHINE=$( (uname -p) 2>/dev/null)
echo "$UNAME_MACHINE"-sni-sysv4
else
echo ns32k-sni-sysv
echo mips-sony-newsos6
exit ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
+ if test -d /usr/nec; then
echo mips-nec-sysv"$UNAME_RELEASE"
else
echo mips-unknown-sysv"$UNAME_RELEASE"
*:Rhapsody:*:*)
echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
exit ;;
+ arm64:Darwin:*:*)
+ echo aarch64-apple-darwin"$UNAME_RELEASE"
+ exit ;;
*:Darwin:*:*)
- UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- eval "$set_cc_for_build"
- if test "$UNAME_PROCESSOR" = unknown ; then
- UNAME_PROCESSOR=powerpc
+ UNAME_PROCESSOR=$(uname -p)
+ case $UNAME_PROCESSOR in
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ if command -v xcode-select > /dev/null 2> /dev/null && \
+ ! xcode-select --print-path > /dev/null 2> /dev/null ; then
+ # Avoid executing cc if there is no toolchain installed as
+ # cc will be a stub that puts up a graphical alert
+ # prompting the user to install developer tools.
+ CC_FOR_BUILD=no_compiler_found
+ else
+ set_cc_for_build
fi
- if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then
- if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
- if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- case $UNAME_PROCESSOR in
- i386) UNAME_PROCESSOR=x86_64 ;;
- powerpc) UNAME_PROCESSOR=powerpc64 ;;
- esac
- fi
- # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
- if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_PPC >/dev/null
- then
- UNAME_PROCESSOR=powerpc
- fi
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+ if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_PPC >/dev/null
+ then
+ UNAME_PROCESSOR=powerpc
fi
elif test "$UNAME_PROCESSOR" = i386 ; then
- # Avoid executing cc on OS X 10.9, as it ships with a stub
- # that puts up a graphical alert prompting to install
- # developer tools. Any system running Mac OS X 10.7 or
- # later (Darwin 11 and later) is required to have a 64-bit
- # processor. This is not true of the ARM version of Darwin
- # that Apple uses in portable devices.
- UNAME_PROCESSOR=x86_64
+ # uname -m returns i386 or x86_64
+ UNAME_PROCESSOR=$UNAME_MACHINE
fi
echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
exit ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=`uname -p`
+ UNAME_PROCESSOR=$(uname -p)
if test "$UNAME_PROCESSOR" = x86; then
UNAME_PROCESSOR=i386
UNAME_MACHINE=pc
# "uname -m" is not consistent, so use $cputype instead. 386
# is converted to i386 for consistency with other x86
# operating systems.
+ # shellcheck disable=SC2154
if test "$cputype" = 386; then
UNAME_MACHINE=i386
else
echo mips-sei-seiux"$UNAME_RELEASE"
exit ;;
*:DragonFly:*:*)
- echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
+ echo "$UNAME_MACHINE"-unknown-dragonfly"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')"
exit ;;
*:*VMS:*:*)
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ UNAME_MACHINE=$( (uname -p) 2>/dev/null)
case "$UNAME_MACHINE" in
A*) echo alpha-dec-vms ; exit ;;
I*) echo ia64-dec-vms ; exit ;;
echo i386-pc-xenix
exit ;;
i*86:skyos:*:*)
- echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
+ echo "$UNAME_MACHINE"-pc-skyos"$(echo "$UNAME_RELEASE" | sed -e 's/ .*$//')"
exit ;;
i*86:rdos:*:*)
echo "$UNAME_MACHINE"-pc-rdos
amd64:Isilon\ OneFS:*:*)
echo x86_64-unknown-onefs
exit ;;
+ *:Unleashed:*:*)
+ echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE"
+ exit ;;
esac
+# No uname command or uname output not recognized.
+set_cc_for_build
+cat > "$dummy.c" <<EOF
+#ifdef _SEQUENT_
+#include <sys/types.h>
+#include <sys/utsname.h>
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#include <signal.h>
+#if defined(_SIZE_T_) || defined(SIGLOST)
+#include <sys/utsname.h>
+#endif
+#endif
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=$( (hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null);
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+#include <sys/param.h>
+#if defined (BSD)
+#if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+#else
+#if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#else
+ printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#endif
+#else
+ printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#else
+#if defined(_SIZE_T_) || defined(SIGLOST)
+ struct utsname un;
+ uname (&un);
+ printf ("vax-dec-ultrix%s\n", un.release); exit (0);
+#else
+ printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#if defined(_SIZE_T_) || defined(SIGLOST)
+ struct utsname *un;
+ uname (&un);
+ printf ("mips-dec-ultrix%s\n", un.release); exit (0);
+#else
+ printf ("mips-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=$($dummy) &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
+
echo "$0: unable to guess system type" >&2
case "$UNAME_MACHINE:$UNAME_SYSTEM" in
operating system you are using. If your script is old, overwrite *all*
copies of config.guess and config.sub with the latest versions from:
- https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+ https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
and
- https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+ https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
+EOF
+
+year=$(echo $timestamp | sed 's,-.*,,')
+# shellcheck disable=SC2003
+if test "$(expr "$(date +%Y)" - "$year")" -lt 3 ; then
+ cat >&2 <<EOF
If $0 has already been updated, send the following data and any
information you think might be pertinent to config-patches@gnu.org to
config.guess timestamp = $timestamp
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
+uname -m = $( (uname -m) 2>/dev/null || echo unknown)
+uname -r = $( (uname -r) 2>/dev/null || echo unknown)
+uname -s = $( (uname -s) 2>/dev/null || echo unknown)
+uname -v = $( (uname -v) 2>/dev/null || echo unknown)
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+/usr/bin/uname -p = $( (/usr/bin/uname -p) 2>/dev/null)
+/bin/uname -X = $( (/bin/uname -X) 2>/dev/null)
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+hostinfo = $( (hostinfo) 2>/dev/null)
+/bin/universe = $( (/bin/universe) 2>/dev/null)
+/usr/bin/arch -k = $( (/usr/bin/arch -k) 2>/dev/null)
+/bin/arch = $( (/bin/arch) 2>/dev/null)
+/usr/bin/oslevel = $( (/usr/bin/oslevel) 2>/dev/null)
+/usr/convex/getsysinfo = $( (/usr/convex/getsysinfo) 2>/dev/null)
UNAME_MACHINE = "$UNAME_MACHINE"
UNAME_RELEASE = "$UNAME_RELEASE"
UNAME_SYSTEM = "$UNAME_SYSTEM"
UNAME_VERSION = "$UNAME_VERSION"
EOF
+fi
exit 1
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2018 Free Software Foundation, Inc.
+# Copyright 1992-2020 Free Software Foundation, Inc.
-timestamp='2018-03-08'
+timestamp='2020-12-22'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# Otherwise, we print the canonical config type on stdout and succeed.
# You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
# This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# It is wrong to echo any other type of specification.
-me=`echo "$0" | sed -e 's,.*/,,'`
+me=$(echo "$0" | sed -e 's,.*/,,')
usage="\
Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2018 Free Software Foundation, Inc.
+Copyright 1992-2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
- ) # Use stdin as input.
break ;;
-* )
- echo "$me: invalid option $1$help"
+ echo "$me: invalid option $1$help" >&2
exit 1 ;;
*local*)
exit 1;;
esac
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
- linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
- kopensolaris*-gnu* | cloudabi*-eabi* | \
- storm-chaos* | os2-emx* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- android-linux)
- os=-linux-android
- basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
- ;;
- *)
- basic_machine=`echo "$1" | sed 's/-[^-]*$//'`
- if [ "$basic_machine" != "$1" ]
- then os=`echo "$1" | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
+# Split fields of configuration type
+# shellcheck disable=SC2162
+IFS="-" read field1 field2 field3 field4 <<EOF
+$1
+EOF
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis | -knuth | -cray | -microblaze*)
- os=
- basic_machine=$1
- ;;
- -bluegene*)
- os=-cnk
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco6)
- os=-sco5v6
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5v6*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*178)
- os=-lynxos178
- ;;
- -lynx*5)
- os=-lynxos5
+# Separate into logical components for further validation
+case $1 in
+ *-*-*-*-*)
+ echo Invalid configuration \`"$1"\': more than four components >&2
+ exit 1
;;
- -lynx*)
- os=-lynxos
+ *-*-*-*)
+ basic_machine=$field1-$field2
+ basic_os=$field3-$field4
;;
- -ptx*)
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'`
+ *-*-*)
+ # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
+ # parts
+ maybe_os=$field2-$field3
+ case $maybe_os in
+ nto-qnx* | linux-* | uclinux-uclibc* \
+ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
+ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
+ | storm-chaos* | os2-emx* | rtmk-nova*)
+ basic_machine=$field1
+ basic_os=$maybe_os
+ ;;
+ android-linux)
+ basic_machine=$field1-unknown
+ basic_os=linux-android
+ ;;
+ *)
+ basic_machine=$field1-$field2
+ basic_os=$field3
+ ;;
+ esac
;;
- -psos*)
- os=-psos
+ *-*)
+ # A lone config we happen to match not fitting any pattern
+ case $field1-$field2 in
+ decstation-3100)
+ basic_machine=mips-dec
+ basic_os=
+ ;;
+ *-*)
+ # Second component is usually, but not always the OS
+ case $field2 in
+ # Prevent following clause from handling this valid os
+ sun*os*)
+ basic_machine=$field1
+ basic_os=$field2
+ ;;
+ # Manufacturers
+ dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
+ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
+ | unicom* | ibm* | next | hp | isi* | apollo | altos* \
+ | convergent* | ncr* | news | 32* | 3600* | 3100* \
+ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
+ | ultra | tti* | harris | dolphin | highlevel | gould \
+ | cbm | ns | masscomp | apple | axis | knuth | cray \
+ | microblaze* | sim | cisco \
+ | oki | wec | wrs | winbond)
+ basic_machine=$field1-$field2
+ basic_os=
+ ;;
+ *)
+ basic_machine=$field1
+ basic_os=$field2
+ ;;
+ esac
+ ;;
+ esac
;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
+ *)
+ # Convert single-component short-hands not valid as part of
+ # multi-component configurations.
+ case $field1 in
+ 386bsd)
+ basic_machine=i386-pc
+ basic_os=bsd
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ basic_os=scout
+ ;;
+ alliant)
+ basic_machine=fx80-alliant
+ basic_os=
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ basic_os=
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ basic_os=bsd
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ basic_os=sysv
+ ;;
+ amiga)
+ basic_machine=m68k-unknown
+ basic_os=
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ basic_os=amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ basic_os=sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ basic_os=sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ basic_os=bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ basic_os=aros
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ basic_os=aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ basic_os=dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ basic_os=linux
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ basic_os=cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ basic_os=bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ basic_os=bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ basic_os=bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ basic_os=bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ basic_os=bsd
+ ;;
+ cray)
+ basic_machine=j90-cray
+ basic_os=unicos
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ basic_os=
+ ;;
+ da30)
+ basic_machine=m68k-da30
+ basic_os=
+ ;;
+ decstation | pmax | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ basic_os=
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ basic_os=sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ basic_os=dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ basic_os=msdosdjgpp
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ basic_os=ebmon
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ basic_os=ose
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ basic_os=sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ basic_os=go32
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ basic_os=hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ basic_os=xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ basic_os=hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ basic_os=sysv3
+ ;;
+ hp300 | hp300hpux)
+ basic_machine=m68k-hp
+ basic_os=hpux
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ basic_os=bsd
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ basic_os=osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ basic_os=proelf
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ basic_os=mach
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ basic_os=sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ basic_os=linux
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ basic_os=sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ basic_os=sysv
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ basic_os=mingw64
+ ;;
+ mingw32)
+ basic_machine=i686-pc
+ basic_os=mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ basic_os=mingw32ce
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ basic_os=coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ basic_os=morphos
+ ;;
+ moxiebox)
+ basic_machine=moxie-unknown
+ basic_os=moxiebox
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ basic_os=msdos
+ ;;
+ msys)
+ basic_machine=i686-pc
+ basic_os=msys
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ basic_os=mvs
+ ;;
+ nacl)
+ basic_machine=le32-unknown
+ basic_os=nacl
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ basic_os=sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-pc
+ basic_os=netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ basic_os=linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ basic_os=newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ basic_os=newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ basic_os=sysv
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ basic_os=cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ basic_os=cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ basic_os=nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ basic_os=mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ basic_os=nonstopux
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ basic_os=os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ basic_os=ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ basic_os=os68k
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ basic_os=osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ basic_os=linux
+ ;;
+ psp)
+ basic_machine=mipsallegrexel-sony
+ basic_os=psp
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ basic_os=pw32
+ ;;
+ rdos | rdos64)
+ basic_machine=x86_64-pc
+ basic_os=rdos
+ ;;
+ rdos32)
+ basic_machine=i386-pc
+ basic_os=rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ basic_os=coff
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ sei)
+ basic_machine=mips-sei
+ basic_os=seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ basic_os=
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ basic_os=sysv2
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ basic_os=
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ basic_os=sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ basic_os=
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ basic_os=sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ basic_os=sunos4
+ ;;
+ sun3)
+ basic_machine=m68k-sun
+ basic_os=
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ basic_os=sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ basic_os=sunos4
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ basic_os=
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ basic_os=sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ basic_os=sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ basic_os=solaris2
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ basic_os=
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ basic_os=unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ basic_os=dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ basic_os=unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ basic_os=unicos
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ basic_os=tops20
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ basic_os=tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ basic_os=sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ basic_os=none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ basic_os=sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ basic_os=vms
+ ;;
+ vsta)
+ basic_machine=i386-pc
+ basic_os=vsta
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ basic_os=vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ basic_os=vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ basic_os=vxworks
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ basic_os=mingw32
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ basic_os=unicos
+ ;;
+ *)
+ basic_machine=$1
+ basic_os=
+ ;;
+ esac
;;
esac
-# Decode aliases for certain CPU-COMPANY combinations.
+# Decode 1-component or ad-hoc basic machines
case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | aarch64 | aarch64_be \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | am33_2.0 \
- | arc | arceb \
- | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
- | avr | avr32 \
- | ba \
- | be32 | be64 \
- | bfin \
- | c4x | c8051 | clipper \
- | d10v | d30v | dlx | dsp16xx \
- | e2k | epiphany \
- | fido | fr30 | frv | ft32 \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | hexagon \
- | i370 | i860 | i960 | ia16 | ia64 \
- | ip2k | iq2000 \
- | k1om \
- | le32 | le64 \
- | lm32 \
- | m32c | m32r | m32rle | m68000 | m68k | m88k \
- | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
- | mips64octeon | mips64octeonel \
- | mips64orion | mips64orionel \
- | mips64r5900 | mips64r5900el \
- | mips64vr | mips64vrel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mips64vr5900 | mips64vr5900el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
- | mipsisa32r6 | mipsisa32r6el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
- | mipsisa64r6 | mipsisa64r6el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipsr5900 | mipsr5900el \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
- | moxie \
- | mt \
- | msp430 \
- | nds32 | nds32le | nds32be \
- | nios | nios2 | nios2eb | nios2el \
- | ns16k | ns32k \
- | open8 | or1k | or1knd | or32 \
- | pdp10 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle \
- | pru \
- | pyramid \
- | riscv32 | riscv64 \
- | rl78 | rx \
- | score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
- | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
- | spu \
- | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
- | ubicom32 \
- | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
- | visium \
- | wasm32 \
- | x86 | xc16x | xstormy16 | xtensa \
- | z8k | z80)
- basic_machine=$basic_machine-unknown
- ;;
- c54x)
- basic_machine=tic54x-unknown
- ;;
- c55x)
- basic_machine=tic55x-unknown
- ;;
- c6x)
- basic_machine=tic6x-unknown
- ;;
- leon|leon[3-9])
- basic_machine=sparc-$basic_machine
- ;;
- m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
- basic_machine=$basic_machine-unknown
- os=-none
+ # Here we handle the default manufacturer of certain CPU types. It is in
+ # some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ cpu=hppa1.1
+ vendor=winbond
;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65)
+ op50n)
+ cpu=hppa1.1
+ vendor=oki
;;
- ms1)
- basic_machine=mt-unknown
+ op60c)
+ cpu=hppa1.1
+ vendor=oki
;;
-
- strongarm | thumb | xscale)
- basic_machine=arm-unknown
+ ibm*)
+ cpu=i370
+ vendor=ibm
;;
- xgate)
- basic_machine=$basic_machine-unknown
- os=-none
+ orion105)
+ cpu=clipper
+ vendor=highlevel
;;
- xscaleeb)
- basic_machine=armeb-unknown
+ mac | mpw | mac-mpw)
+ cpu=m68k
+ vendor=apple
;;
-
- xscaleel)
- basic_machine=armel-unknown
+ pmac | pmac-mpw)
+ cpu=powerpc
+ vendor=apple
;;
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | aarch64-* | aarch64_be-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* | avr32-* \
- | ba-* \
- | be32-* | be64-* \
- | bfin-* | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* \
- | c8051-* | clipper-* | craynv-* | cydra-* \
- | d10v-* | d30v-* | dlx-* \
- | e2k-* | elxsi-* \
- | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | hexagon-* \
- | i*86-* | i860-* | i960-* | ia16-* | ia64-* \
- | ip2k-* | iq2000-* \
- | k1om-* \
- | le32-* | le64-* \
- | lm32-* \
- | m32c-* | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
- | microblaze-* | microblazeel-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | mips16-* \
- | mips64-* | mips64el-* \
- | mips64octeon-* | mips64octeonel-* \
- | mips64orion-* | mips64orionel-* \
- | mips64r5900-* | mips64r5900el-* \
- | mips64vr-* | mips64vrel-* \
- | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* \
- | mips64vr5000-* | mips64vr5000el-* \
- | mips64vr5900-* | mips64vr5900el-* \
- | mipsisa32-* | mipsisa32el-* \
- | mipsisa32r2-* | mipsisa32r2el-* \
- | mipsisa32r6-* | mipsisa32r6el-* \
- | mipsisa64-* | mipsisa64el-* \
- | mipsisa64r2-* | mipsisa64r2el-* \
- | mipsisa64r6-* | mipsisa64r6el-* \
- | mipsisa64sb1-* | mipsisa64sb1el-* \
- | mipsisa64sr71k-* | mipsisa64sr71kel-* \
- | mipsr5900-* | mipsr5900el-* \
- | mipstx39-* | mipstx39el-* \
- | mmix-* \
- | mt-* \
- | msp430-* \
- | nds32-* | nds32le-* | nds32be-* \
- | nios-* | nios2-* | nios2eb-* | nios2el-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | open8-* \
- | or1k*-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
- | pru-* \
- | pyramid-* \
- | riscv32-* | riscv64-* \
- | rl78-* | romp-* | rs6000-* | rx-* \
- | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
- | sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
- | tahoe-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | tile*-* \
- | tron-* \
- | ubicom32-* \
- | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
- | vax-* \
- | visium-* \
- | wasm32-* \
- | we32k-* \
- | x86-* | x86_64-* | xc16x-* | xps100-* \
- | xstormy16-* | xtensa*-* \
- | ymp-* \
- | z8k-* | z80-*)
- ;;
- # Recognize the basic CPU types without company name, with glob match.
- xtensa*)
- basic_machine=$basic_machine-unknown
- ;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-pc
- os=-bsd
- ;;
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
+ cpu=m68000
+ vendor=att
;;
3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- abacus)
- basic_machine=abacus-unknown
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amd64)
- basic_machine=x86_64-pc
- ;;
- amd64-*)
- basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aros)
- basic_machine=i386-pc
- os=-aros
- ;;
- asmjs)
- basic_machine=asmjs-unknown
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- blackfin)
- basic_machine=bfin-unknown
- os=-linux
- ;;
- blackfin-*)
- basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- os=-linux
+ cpu=we32k
+ vendor=att
;;
bluegene*)
- basic_machine=powerpc-ibm
- os=-cnk
- ;;
- c54x-*)
- basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- c55x-*)
- basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- c6x-*)
- basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- c90)
- basic_machine=c90-cray
- os=-unicos
- ;;
- cegcc)
- basic_machine=arm-unknown
- os=-cegcc
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | j90)
- basic_machine=j90-cray
- os=-unicos
- ;;
- craynv)
- basic_machine=craynv-cray
- os=-unicosmp
- ;;
- cr16 | cr16-*)
- basic_machine=cr16-unknown
- os=-elf
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- crisv32 | crisv32-* | etraxfs*)
- basic_machine=crisv32-axis
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- crx)
- basic_machine=crx-unknown
- os=-elf
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
+ cpu=powerpc
+ vendor=ibm
+ basic_os=cnk
;;
decsystem10* | dec10*)
- basic_machine=pdp10-dec
- os=-tops10
+ cpu=pdp10
+ vendor=dec
+ basic_os=tops10
;;
decsystem20* | dec20*)
- basic_machine=pdp10-dec
- os=-tops20
+ cpu=pdp10
+ vendor=dec
+ basic_os=tops20
;;
delta | 3300 | motorola-3300 | motorola-delta \
| 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- dicos)
- basic_machine=i686-pc
- os=-dicos
- ;;
- djgpp)
- basic_machine=i586-pc
- os=-msdosdjgpp
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
+ cpu=m68k
+ vendor=motorola
;;
dpx2*)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- e500v[12])
- basic_machine=powerpc-unknown
- os=$os"spe"
- ;;
- e500v[12]-*)
- basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- os=$os"spe"
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
+ cpu=m68k
+ vendor=bull
+ basic_os=sysv3
;;
encore | umax | mmax)
- basic_machine=ns32k-encore
+ cpu=ns32k
+ vendor=encore
;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
+ elxsi)
+ cpu=elxsi
+ vendor=elxsi
+ basic_os=${basic_os:-bsd}
;;
fx2800)
- basic_machine=i860-alliant
+ cpu=i860
+ vendor=alliant
;;
genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
+ cpu=ns32k
+ vendor=ns
;;
h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
+ cpu=hppa1.1
+ vendor=hitachi
+ basic_os=hiuxwe2
;;
hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
+ cpu=hppa1.0
+ vendor=hp
;;
hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
+ cpu=m68000
+ vendor=hp
;;
hp9k3[2-9][0-9])
- basic_machine=m68k-hp
+ cpu=m68k
+ vendor=hp
;;
hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
+ cpu=hppa1.0
+ vendor=hp
;;
hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
+ cpu=hppa1.1
+ vendor=hp
;;
hp9k78[0-9] | hp78[0-9])
# FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
+ cpu=hppa1.1
+ vendor=hp
;;
hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
# FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
+ cpu=hppa1.1
+ vendor=hp
;;
hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
+ cpu=hppa1.1
+ vendor=hp
;;
hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
+ cpu=hppa1.0
+ vendor=hp
;;
i*86v32)
- basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
- os=-sysv32
+ cpu=$(echo "$1" | sed -e 's/86.*/86/')
+ vendor=pc
+ basic_os=sysv32
;;
i*86v4*)
- basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
- os=-sysv4
+ cpu=$(echo "$1" | sed -e 's/86.*/86/')
+ vendor=pc
+ basic_os=sysv4
;;
i*86v)
- basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
- os=-sysv
+ cpu=$(echo "$1" | sed -e 's/86.*/86/')
+ vendor=pc
+ basic_os=sysv
;;
i*86sol2)
- basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
- os=-solaris2
+ cpu=$(echo "$1" | sed -e 's/86.*/86/')
+ vendor=pc
+ basic_os=solaris2
;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
- ;;
- vsta)
- basic_machine=i386-unknown
- os=-vsta
+ j90 | j90-cray)
+ cpu=j90
+ vendor=cray
+ basic_os=${basic_os:-unicos}
;;
iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
+ cpu=mips
+ vendor=sgi
+ case $basic_os in
+ irix*)
;;
*)
- os=-irix4
+ basic_os=irix4
;;
esac
;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- leon-*|leon[3-9]-*)
- basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'`
- ;;
- m68knommu)
- basic_machine=m68k-unknown
- os=-linux
- ;;
- m68knommu-*)
- basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- microblaze*)
- basic_machine=microblaze-xilinx
- ;;
- mingw64)
- basic_machine=x86_64-pc
- os=-mingw64
- ;;
- mingw32)
- basic_machine=i686-pc
- os=-mingw32
- ;;
- mingw32ce)
- basic_machine=arm-unknown
- os=-mingw32ce
- ;;
miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mips3*-*)
- basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- os=-morphos
+ cpu=m68000
+ vendor=convergent
;;
- moxiebox)
- basic_machine=moxie-unknown
- os=-moxiebox
- ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- ms1-*)
- basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'`
- ;;
- msys)
- basic_machine=i686-pc
- os=-msys
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- nacl)
- basic_machine=le32-unknown
- os=-nacl
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
+ *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ cpu=m68k
+ vendor=atari
+ basic_os=mint
;;
news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
+ cpu=mips
+ vendor=sony
+ basic_os=newsos
;;
next | m*-next)
- basic_machine=m68k-next
- case $os in
- -nextstep* )
+ cpu=m68k
+ vendor=next
+ case $basic_os in
+ openstep*)
+ ;;
+ nextstep*)
;;
- -ns2*)
- os=-nextstep2
+ ns2*)
+ basic_os=nextstep2
;;
*)
- os=-nextstep3
+ basic_os=nextstep3
;;
esac
;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
np1)
- basic_machine=np1-gould
- ;;
- neo-tandem)
- basic_machine=neo-tandem
- ;;
- nse-tandem)
- basic_machine=nse-tandem
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- nsv-tandem)
- basic_machine=nsv-tandem
- ;;
- nsx-tandem)
- basic_machine=nsx-tandem
+ cpu=np1
+ vendor=gould
;;
op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- openrisc | openrisc-*)
- basic_machine=or32-unknown
- ;;
- os400)
- basic_machine=powerpc-ibm
- os=-os400
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
+ cpu=hppa1.1
+ vendor=oki
+ basic_os=proelf
;;
pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- parisc)
- basic_machine=hppa-unknown
- os=-linux
- ;;
- parisc-*)
- basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- os=-linux
+ cpu=hppa1.1
+ vendor=hitachi
+ basic_os=hiuxwe2
;;
pbd)
- basic_machine=sparc-tti
+ cpu=sparc
+ vendor=tti
;;
pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pc98)
- basic_machine=i386-pc
- ;;
- pc98-*)
- basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- pentium | p5 | k5 | k6 | nexgen | viac3)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon | athlon_*)
- basic_machine=i686-pc
+ cpu=m68k
+ vendor=tti
;;
- pentiumii | pentium2 | pentiumiii | pentium3)
- basic_machine=i686-pc
- ;;
- pentium4)
- basic_machine=i786-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- pentium4-*)
- basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ pc532)
+ cpu=ns32k
+ vendor=pc532
;;
pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
+ cpu=pn
+ vendor=gould
;;
- ppc | ppcbe) basic_machine=powerpc-unknown
- ;;
- ppc-* | ppcbe-*)
- basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ power)
+ cpu=power
+ vendor=ibm
;;
- ppc64) basic_machine=powerpc64-unknown
+ ps2)
+ cpu=i386
+ vendor=ibm
;;
- ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ rm[46]00)
+ cpu=mips
+ vendor=siemens
;;
- ppc64le | powerpc64little)
- basic_machine=powerpc64le-unknown
+ rtpc | rtpc-*)
+ cpu=romp
+ vendor=ibm
;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ sde)
+ cpu=mipsisa32
+ vendor=sde
+ basic_os=${basic_os:-elf}
;;
- ps2)
- basic_machine=i386-ibm
+ simso-wrs)
+ cpu=sparclite
+ vendor=wrs
+ basic_os=vxworks
;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
+ tower | tower-32)
+ cpu=m68k
+ vendor=ncr
;;
- rdos | rdos64)
- basic_machine=x86_64-pc
- os=-rdos
+ vpp*|vx|vx-*)
+ cpu=f301
+ vendor=fujitsu
;;
- rdos32)
- basic_machine=i386-pc
- os=-rdos
+ w65)
+ cpu=w65
+ vendor=wdc
;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
+ w89k-*)
+ cpu=hppa1.1
+ vendor=winbond
+ basic_os=proelf
;;
- rm[46]00)
- basic_machine=mips-siemens
+ none)
+ cpu=none
+ vendor=none
;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
+ leon|leon[3-9])
+ cpu=sparc
+ vendor=$basic_machine
;;
- s390 | s390-*)
- basic_machine=s390-ibm
+ leon-*|leon[3-9]-*)
+ cpu=sparc
+ vendor=$(echo "$basic_machine" | sed 's/-.*//')
;;
- s390x | s390x-*)
- basic_machine=s390x-ibm
+
+ *-*)
+ # shellcheck disable=SC2162
+ IFS="-" read cpu vendor <<EOF
+$basic_machine
+EOF
;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ cpu=$basic_machine
+ vendor=pc
;;
- sb1)
- basic_machine=mipsisa64sb1-unknown
+ # These rules are duplicated from below for sake of the special case above;
+ # i.e. things that normalized to x86 arches should also default to "pc"
+ pc98)
+ cpu=i386
+ vendor=pc
;;
- sb1el)
- basic_machine=mipsisa64sb1el-unknown
+ x64 | amd64)
+ cpu=x86_64
+ vendor=pc
;;
- sde)
- basic_machine=mipsisa32-sde
- os=-elf
+ # Recognize the basic CPU types without company name.
+ *)
+ cpu=$basic_machine
+ vendor=unknown
;;
- sei)
- basic_machine=mips-sei
- os=-seiux
+esac
+
+unset -v basic_machine
+
+# Decode basic machines in the full and proper CPU-Company form.
+case $cpu-$vendor in
+ # Here we handle the default manufacturer of certain CPU types in canonical form. It is in
+ # some cases the only manufacturer, in others, it is the most popular.
+ craynv-unknown)
+ vendor=cray
+ basic_os=${basic_os:-unicosmp}
;;
- sequent)
- basic_machine=i386-sequent
+ c90-unknown | c90-cray)
+ vendor=cray
+ basic_os=${Basic_os:-unicos}
;;
- sh5el)
- basic_machine=sh5le-unknown
+ fx80-unknown)
+ vendor=alliant
;;
- simso-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
+ romp-unknown)
+ vendor=ibm
;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
+ mmix-unknown)
+ vendor=knuth
;;
- spur)
- basic_machine=spur-unknown
+ microblaze-unknown | microblazeel-unknown)
+ vendor=xilinx
;;
- st2000)
- basic_machine=m68k-tandem
+ rs6000-unknown)
+ vendor=ibm
;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
+ vax-unknown)
+ vendor=dec
;;
- strongarm-* | thumb-*)
- basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ pdp11-unknown)
+ vendor=dec
;;
- sun2)
- basic_machine=m68000-sun
+ we32k-unknown)
+ vendor=att
;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
+ cydra-unknown)
+ vendor=cydrome
;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
+ i370-ibm*)
+ vendor=ibm
;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
+ orion-unknown)
+ vendor=highlevel
;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
+ xps-unknown | xps100-unknown)
+ cpu=xps100
+ vendor=honeywell
;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
+
+ # Here we normalize CPU types with a missing or matching vendor
+ dpx20-unknown | dpx20-bull)
+ cpu=rs6000
+ vendor=bull
+ basic_os=${basic_os:-bosx}
;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
+
+ # Here we normalize CPU types irrespective of the vendor
+ amd64-*)
+ cpu=x86_64
;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
+ blackfin-*)
+ cpu=bfin
+ basic_os=linux
;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
+ c54x-*)
+ cpu=tic54x
;;
- sun4)
- basic_machine=sparc-sun
+ c55x-*)
+ cpu=tic55x
;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
+ c6x-*)
+ cpu=tic6x
;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
+ e500v[12]-*)
+ cpu=powerpc
+ basic_os=${basic_os}"spe"
;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
+ mips3*-*)
+ cpu=mips64
;;
- t3e)
- basic_machine=alphaev5-cray
- os=-unicos
+ ms1-*)
+ cpu=mt
;;
- t90)
- basic_machine=t90-cray
- os=-unicos
+ m68knommu-*)
+ cpu=m68k
+ basic_os=linux
;;
- tile*)
- basic_machine=$basic_machine-unknown
- os=-linux-gnu
+ m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
+ cpu=s12z
;;
- tx39)
- basic_machine=mipstx39-unknown
+ openrisc-*)
+ cpu=or32
;;
- tx39el)
- basic_machine=mipstx39el-unknown
+ parisc-*)
+ cpu=hppa
+ basic_os=linux
;;
- toad1)
- basic_machine=pdp10-xkl
- os=-tops20
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ cpu=i586
;;
- tower | tower-32)
- basic_machine=m68k-ncr
+ pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
+ cpu=i686
;;
- tpf)
- basic_machine=s390x-ibm
- os=-tpf
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ cpu=i686
;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
+ pentium4-*)
+ cpu=i786
;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
+ pc98-*)
+ cpu=i386
;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
+ ppc-* | ppcbe-*)
+ cpu=powerpc
;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
+ ppcle-* | powerpclittle-*)
+ cpu=powerpcle
;;
- vms)
- basic_machine=vax-dec
- os=-vms
+ ppc64-*)
+ cpu=powerpc64
;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
+ ppc64le-* | powerpc64little-*)
+ cpu=powerpc64le
;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
+ sb1-*)
+ cpu=mipsisa64sb1
;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
+ sb1el-*)
+ cpu=mipsisa64sb1el
;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
+ sh5e[lb]-*)
+ cpu=$(echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/')
;;
- w65*)
- basic_machine=w65-wdc
- os=-none
+ spur-*)
+ cpu=spur
;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
+ strongarm-* | thumb-*)
+ cpu=arm
;;
- x64)
- basic_machine=x86_64-pc
+ tx39-*)
+ cpu=mipstx39
;;
- xbox)
- basic_machine=i686-pc
- os=-mingw32
+ tx39el-*)
+ cpu=mipstx39el
;;
- xps | xps100)
- basic_machine=xps100-honeywell
+ x64-*)
+ cpu=x86_64
;;
xscale-* | xscalee[bl]-*)
- basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'`
+ cpu=$(echo "$cpu" | sed 's/^xscale/arm/')
;;
- ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- none)
- basic_machine=none-none
- os=-none
+ arm64-*)
+ cpu=aarch64
;;
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
+ # Recognize the canonical CPU Types that limit and/or modify the
+ # company names they are paired with.
+ cr16-*)
+ basic_os=${basic_os:-elf}
;;
- op50n)
- basic_machine=hppa1.1-oki
+ crisv32-* | etraxfs*-*)
+ cpu=crisv32
+ vendor=axis
;;
- op60c)
- basic_machine=hppa1.1-oki
+ cris-* | etrax*-*)
+ cpu=cris
+ vendor=axis
;;
- romp)
- basic_machine=romp-ibm
+ crx-*)
+ basic_os=${basic_os:-elf}
;;
- mmix)
- basic_machine=mmix-knuth
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
- basic_machine=sh-unknown
+ neo-tandem)
+ cpu=neo
+ vendor=tandem
;;
- cydra)
- basic_machine=cydra-cydrome
+ nse-tandem)
+ cpu=nse
+ vendor=tandem
;;
- orion)
- basic_machine=orion-highlevel
+ nsr-tandem)
+ cpu=nsr
+ vendor=tandem
;;
- orion105)
- basic_machine=clipper-highlevel
+ nsv-tandem)
+ cpu=nsv
+ vendor=tandem
;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
+ nsx-tandem)
+ cpu=nsx
+ vendor=tandem
;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
+ mipsallegrexel-sony)
+ cpu=mipsallegrexel
+ vendor=sony
;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
+ tile*-*)
+ basic_os=${basic_os:-linux-gnu}
;;
+
*)
- echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
- exit 1
+ # Recognize the canonical CPU types that are allowed with any
+ # company name.
+ case $cpu in
+ 1750a | 580 \
+ | a29k \
+ | aarch64 | aarch64_be \
+ | abacus \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
+ | alphapca5[67] | alpha64pca5[67] \
+ | am33_2.0 \
+ | amdgcn \
+ | arc | arceb \
+ | arm | arm[lb]e | arme[lb] | armv* \
+ | avr | avr32 \
+ | asmjs \
+ | ba \
+ | be32 | be64 \
+ | bfin | bpf | bs2000 \
+ | c[123]* | c30 | [cjt]90 | c4x \
+ | c8051 | clipper | craynv | csky | cydra \
+ | d10v | d30v | dlx | dsp16xx \
+ | e2k | elxsi | epiphany \
+ | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
+ | h8300 | h8500 \
+ | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
+ | i370 | i*86 | i860 | i960 | ia16 | ia64 \
+ | ip2k | iq2000 \
+ | k1om \
+ | le32 | le64 \
+ | lm32 \
+ | loongarch32 | loongarch64 | loongarchx32 \
+ | m32c | m32r | m32rle \
+ | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
+ | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
+ | m88110 | m88k | maxq | mb | mcore | mep | metag \
+ | microblaze | microblazeel \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64eb | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa32r6 | mipsisa32r6el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64r6 | mipsisa64r6el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipsr5900 | mipsr5900el \
+ | mipstx39 | mipstx39el \
+ | mmix \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nfp \
+ | nios | nios2 | nios2eb | nios2el \
+ | none | np1 | ns16k | ns32k | nvptx \
+ | open8 \
+ | or1k* \
+ | or32 \
+ | orion \
+ | picochip \
+ | pdp10 | pdp11 | pj | pjl | pn | power \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
+ | pru \
+ | pyramid \
+ | riscv | riscv32 | riscv64 \
+ | rl78 | romp | rs6000 | rx \
+ | s390 | s390x \
+ | score \
+ | sh | shl \
+ | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
+ | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
+ | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
+ | spu \
+ | tahoe \
+ | thumbv7* \
+ | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
+ | tron \
+ | ubicom32 \
+ | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
+ | vax \
+ | visium \
+ | w65 \
+ | wasm32 | wasm64 \
+ | we32k \
+ | x86 | x86_64 | xc16x | xgate | xps100 \
+ | xstormy16 | xtensa* \
+ | ymp \
+ | z8k | z80)
+ ;;
+
+ *)
+ echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
+ exit 1
+ ;;
+ esac
;;
esac
# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'`
+case $vendor in
+ digital*)
+ vendor=dec
;;
- *-commodore*)
- basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'`
+ commodore*)
+ vendor=cbm
;;
*)
;;
# Decode manufacturer-specific aliases for certain operating systems.
-if [ x"$os" != x"" ]
+if test x$basic_os != x
then
+
+# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just
+# set os.
+case $basic_os in
+ gnu/linux*)
+ kernel=linux
+ os=$(echo $basic_os | sed -e 's|gnu/linux|gnu|')
+ ;;
+ os2-emx)
+ kernel=os2
+ os=$(echo $basic_os | sed -e 's|os2-emx|emx|')
+ ;;
+ nto-qnx*)
+ kernel=nto
+ os=$(echo $basic_os | sed -e 's|nto-qnx|qnx|')
+ ;;
+ *-*)
+ # shellcheck disable=SC2162
+ IFS="-" read kernel os <<EOF
+$basic_os
+EOF
+ ;;
+ # Default OS when just kernel was specified
+ nto*)
+ kernel=nto
+ os=$(echo $basic_os | sed -e 's|nto|qnx|')
+ ;;
+ linux*)
+ kernel=linux
+ os=$(echo $basic_os | sed -e 's|linux|gnu|')
+ ;;
+ *)
+ kernel=
+ os=$basic_os
+ ;;
+esac
+
+# Now, normalize the OS (knowing we just have one component, it's not a kernel,
+# etc.)
case $os in
# First match some system type aliases that might get confused
# with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -auroraux)
- os=-auroraux
+ # solaris* is a basic system type, with this one exception.
+ auroraux)
+ os=auroraux
;;
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ bluegene*)
+ os=cnk
;;
- -solaris)
- os=-solaris2
+ solaris1 | solaris1.*)
+ os=$(echo $os | sed -e 's|solaris1|sunos4|')
;;
- -unixware*)
- os=-sysv4.2uw
+ solaris)
+ os=solaris2
;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ unixware*)
+ os=sysv4.2uw
;;
# es1800 is here to avoid being matched by es* (a different OS)
- -es1800*)
- os=-ose
+ es1800*)
+ os=ose
;;
- # Now accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST end in a * to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
- | -sym* | -kopensolaris* | -plan9* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* | -cloudabi* | -sortix* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \
- | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
- | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
- | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* | -hcos* \
- | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
- | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
- | -linux-newlib* | -linux-musl* | -linux-uclibc* \
- | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
- | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- | -morphos* | -superux* | -rtmk* | -windiss* \
- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
- | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \
- | -midnightbsd*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
+ # Some version numbers need modification
+ chorusos*)
+ os=chorusos
;;
- -nto-qnx*)
+ isc)
+ os=isc2.2
;;
- -nto*)
- os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ sco6)
+ os=sco5v6
;;
- -sim | -xray | -os68k* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ sco5)
+ os=sco3.2v5
;;
- -mac*)
- os=`echo "$os" | sed -e 's|mac|macos|'`
+ sco4)
+ os=sco3.2v4
;;
- -linux-dietlibc)
- os=-linux-dietlibc
+ sco3.2.[4-9]*)
+ os=$(echo $os | sed -e 's/sco3.2./sco3.2v/')
;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ sco*v* | scout)
+ # Don't match below
;;
- -sunos5*)
- os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
+ sco*)
+ os=sco3.2v2
;;
- -sunos6*)
- os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
+ psos*)
+ os=psos
;;
- -opened*)
- os=-openedition
+ qnx*)
+ os=qnx
;;
- -os400*)
- os=-os400
+ hiux*)
+ os=hiuxwe2
;;
- -wince*)
- os=-wince
+ lynx*178)
+ os=lynxos178
;;
- -utek*)
- os=-bsd
+ lynx*5)
+ os=lynxos5
;;
- -dynix*)
- os=-bsd
+ lynxos*)
+ # don't get caught up in next wildcard
;;
- -acis*)
- os=-aos
+ lynx*)
+ os=lynxos
;;
- -atheos*)
- os=-atheos
+ mac[0-9]*)
+ os=$(echo "$os" | sed -e 's|mac|macos|')
;;
- -syllable*)
- os=-syllable
+ opened*)
+ os=openedition
;;
- -386bsd)
- os=-bsd
+ os400*)
+ os=os400
;;
- -ctix* | -uts*)
- os=-sysv
+ sunos5*)
+ os=$(echo "$os" | sed -e 's|sunos5|solaris2|')
;;
- -nova*)
- os=-rtmk-nova
+ sunos6*)
+ os=$(echo "$os" | sed -e 's|sunos6|solaris3|')
;;
- -ns2)
- os=-nextstep2
+ wince*)
+ os=wince
;;
- -nsk*)
- os=-nsk
+ utek*)
+ os=bsd
;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
+ dynix*)
+ os=bsd
+ ;;
+ acis*)
+ os=aos
+ ;;
+ atheos*)
+ os=atheos
+ ;;
+ syllable*)
+ os=syllable
+ ;;
+ 386bsd)
+ os=bsd
+ ;;
+ ctix* | uts*)
+ os=sysv
+ ;;
+ nova*)
+ os=rtmk-nova
;;
- -sinix*)
- os=-sysv4
+ ns2)
+ os=nextstep2
;;
- -tpf*)
- os=-tpf
+ # Preserve the version number of sinix5.
+ sinix5.*)
+ os=$(echo $os | sed -e 's|sinix|sysv|')
;;
- -triton*)
- os=-sysv3
+ sinix*)
+ os=sysv4
;;
- -oss*)
- os=-sysv3
+ tpf*)
+ os=tpf
;;
- -svr4*)
- os=-sysv4
+ triton*)
+ os=sysv3
;;
- -svr3)
- os=-sysv3
+ oss*)
+ os=sysv3
;;
- -sysvr4)
- os=-sysv4
+ svr4*)
+ os=sysv4
;;
- # This must come after -sysvr4.
- -sysv*)
+ svr3)
+ os=sysv3
;;
- -ose*)
- os=-ose
+ sysvr4)
+ os=sysv4
;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
+ ose*)
+ os=ose
;;
- -zvmoe)
- os=-zvmoe
+ *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
+ os=mint
;;
- -dicos*)
- os=-dicos
+ dicos*)
+ os=dicos
;;
- -pikeos*)
+ pikeos*)
# Until real need of OS specific support for
# particular features comes up, bare metal
# configurations are quite functional.
- case $basic_machine in
+ case $cpu in
arm*)
- os=-eabi
+ os=eabi
;;
*)
- os=-elf
+ os=elf
;;
esac
;;
- -nacl*)
- ;;
- -ios)
- ;;
- -none)
- ;;
*)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
- exit 1
+ # No normalization, but not necessarily accepted, that comes below.
;;
esac
+
else
# Here we handle the default operating systems that come with various machines.
# will signal an error saying that MANUFACTURER isn't an operating
# system, and we'll never get to this point.
-case $basic_machine in
+kernel=
+case $cpu-$vendor in
score-*)
- os=-elf
+ os=elf
;;
spu-*)
- os=-elf
+ os=elf
;;
*-acorn)
- os=-riscix1.2
+ os=riscix1.2
;;
arm*-rebel)
- os=-linux
+ kernel=linux
+ os=gnu
;;
arm*-semi)
- os=-aout
+ os=aout
;;
c4x-* | tic4x-*)
- os=-coff
+ os=coff
;;
c8051-*)
- os=-elf
+ os=elf
+ ;;
+ clipper-intergraph)
+ os=clix
;;
hexagon-*)
- os=-elf
+ os=elf
;;
tic54x-*)
- os=-coff
+ os=coff
;;
tic55x-*)
- os=-coff
+ os=coff
;;
tic6x-*)
- os=-coff
+ os=coff
;;
# This must come before the *-dec entry.
pdp10-*)
- os=-tops20
+ os=tops20
;;
pdp11-*)
- os=-none
+ os=none
;;
*-dec | vax-*)
- os=-ultrix4.2
+ os=ultrix4.2
;;
m68*-apollo)
- os=-domain
+ os=domain
;;
i386-sun)
- os=-sunos4.0.2
+ os=sunos4.0.2
;;
m68000-sun)
- os=-sunos3
+ os=sunos3
;;
m68*-cisco)
- os=-aout
+ os=aout
;;
mep-*)
- os=-elf
+ os=elf
;;
mips*-cisco)
- os=-elf
+ os=elf
;;
mips*-*)
- os=-elf
+ os=elf
;;
or32-*)
- os=-coff
+ os=coff
;;
*-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
+ os=sysv3
;;
sparc-* | *-sun)
- os=-sunos4.1.1
+ os=sunos4.1.1
;;
pru-*)
- os=-elf
+ os=elf
;;
*-be)
- os=-beos
+ os=beos
;;
*-ibm)
- os=-aix
+ os=aix
;;
*-knuth)
- os=-mmixware
+ os=mmixware
;;
*-wec)
- os=-proelf
+ os=proelf
;;
*-winbond)
- os=-proelf
+ os=proelf
;;
*-oki)
- os=-proelf
+ os=proelf
;;
*-hp)
- os=-hpux
+ os=hpux
;;
*-hitachi)
- os=-hiux
+ os=hiux
;;
i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
+ os=sysv
;;
*-cbm)
- os=-amigaos
+ os=amigaos
;;
*-dg)
- os=-dgux
+ os=dgux
;;
*-dolphin)
- os=-sysv3
+ os=sysv3
;;
m68k-ccur)
- os=-rtu
+ os=rtu
;;
m88k-omron*)
- os=-luna
+ os=luna
;;
*-next)
- os=-nextstep
+ os=nextstep
;;
*-sequent)
- os=-ptx
+ os=ptx
;;
*-crds)
- os=-unos
+ os=unos
;;
*-ns)
- os=-genix
+ os=genix
;;
i370-*)
- os=-mvs
+ os=mvs
;;
*-gould)
- os=-sysv
+ os=sysv
;;
*-highlevel)
- os=-bsd
+ os=bsd
;;
*-encore)
- os=-bsd
+ os=bsd
;;
*-sgi)
- os=-irix
+ os=irix
;;
*-siemens)
- os=-sysv4
+ os=sysv4
;;
*-masscomp)
- os=-rtu
+ os=rtu
;;
f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
+ os=uxpv
;;
*-rom68k)
- os=-coff
+ os=coff
;;
*-*bug)
- os=-coff
+ os=coff
;;
*-apple)
- os=-macos
+ os=macos
;;
*-atari*)
- os=-mint
+ os=mint
+ ;;
+ *-wrs)
+ os=vxworks
;;
*)
- os=-none
+ os=none
;;
esac
+
fi
+# Now, validate our (potentially fixed-up) OS.
+case $os in
+ # Sometimes we do "kernel-abi", so those need to count as OSes.
+ musl* | newlib* | uclibc*)
+ ;;
+ # Likewise for "kernel-libc"
+ eabi | eabihf | gnueabi | gnueabihf)
+ ;;
+ # Now accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST end in a * to match a version number.
+ gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
+ | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
+ | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
+ | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \
+ | hiux* | abug | nacl* | netware* | windows* \
+ | os9* | macos* | osx* | ios* \
+ | mpw* | magic* | mmixware* | mon960* | lnews* \
+ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
+ | aos* | aros* | cloudabi* | sortix* | twizzler* \
+ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
+ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
+ | mirbsd* | netbsd* | dicos* | openedition* | ose* \
+ | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \
+ | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
+ | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
+ | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
+ | udi* | lites* | ieee* | go32* | aux* | hcos* \
+ | chorusrdb* | cegcc* | glidix* \
+ | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
+ | midipix* | mingw32* | mingw64* | mint* \
+ | uxpv* | beos* | mpeix* | udk* | moxiebox* \
+ | interix* | uwin* | mks* | rhapsody* | darwin* \
+ | openstep* | oskit* | conix* | pw32* | nonstopux* \
+ | storm-chaos* | tops10* | tenex* | tops20* | its* \
+ | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
+ | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
+ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
+ | skyos* | haiku* | rdos* | toppers* | drops* | es* \
+ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
+ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
+ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx*)
+ ;;
+ # This one is extra strict with allowed versions
+ sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ ;;
+ none)
+ ;;
+ *)
+ echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# As a final step for OS-related things, validate the OS-kernel combination
+# (given a valid OS), if there is a kernel.
+case $kernel-$os in
+ linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* )
+ ;;
+ uclinux-uclibc* )
+ ;;
+ -dietlibc* | -newlib* | -musl* | -uclibc* )
+ # These are just libc implementations, not actual OSes, and thus
+ # require a kernel.
+ echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
+ exit 1
+ ;;
+ kfreebsd*-gnu* | kopensolaris*-gnu*)
+ ;;
+ nto-qnx*)
+ ;;
+ os2-emx)
+ ;;
+ *-eabi* | *-gnueabi*)
+ ;;
+ -*)
+ # Blank kernel with real OS is always fine.
+ ;;
+ *-*)
+ echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
+ exit 1
+ ;;
+esac
+
# Here we handle the case where we know the os, and the CPU type, but not the
# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
+case $vendor in
+ unknown)
+ case $cpu-$os in
+ *-riscix*)
vendor=acorn
;;
- -sunos*)
+ *-sunos*)
vendor=sun
;;
- -cnk*|-aix*)
+ *-cnk* | *-aix*)
vendor=ibm
;;
- -beos*)
+ *-beos*)
vendor=be
;;
- -hpux*)
+ *-hpux*)
vendor=hp
;;
- -mpeix*)
+ *-mpeix*)
vendor=hp
;;
- -hiux*)
+ *-hiux*)
vendor=hitachi
;;
- -unos*)
+ *-unos*)
vendor=crds
;;
- -dgux*)
+ *-dgux*)
vendor=dg
;;
- -luna*)
+ *-luna*)
vendor=omron
;;
- -genix*)
+ *-genix*)
vendor=ns
;;
- -mvs* | -opened*)
+ *-clix*)
+ vendor=intergraph
+ ;;
+ *-mvs* | *-opened*)
+ vendor=ibm
+ ;;
+ *-os400*)
vendor=ibm
;;
- -os400*)
+ s390-* | s390x-*)
vendor=ibm
;;
- -ptx*)
+ *-ptx*)
vendor=sequent
;;
- -tpf*)
+ *-tpf*)
vendor=ibm
;;
- -vxsim* | -vxworks* | -windiss*)
+ *-vxsim* | *-vxworks* | *-windiss*)
vendor=wrs
;;
- -aux*)
+ *-aux*)
vendor=apple
;;
- -hms*)
+ *-hms*)
vendor=hitachi
;;
- -mpw* | -macos*)
+ *-mpw* | *-macos*)
vendor=apple
;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
vendor=atari
;;
- -vos*)
+ *-vos*)
vendor=stratus
;;
esac
- basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"`
;;
esac
-echo "$basic_machine$os"
+echo "$cpu-$vendor-${kernel:+$kernel-}$os"
exit
# Local variables:
scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2018-03-11.20; # UTC
+scriptversion=2020-11-14.01; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
# Desired mode of installed file.
mode=0755
+# Create dirs (including intermediate dirs) using mode 755.
+# This is like GNU 'install' as of coreutils 8.32 (2020).
+mkdir_umask=22
+
+backupsuffix=
chgrpcmd=
chmodcmd=$chmodprog
chowncmd=
--version display version info and exit.
-c (ignored)
- -C install only if different (preserve the last data modification time)
+ -C install only if different (preserve data modification time)
-d create directories instead of installing files.
-g GROUP $chgrpprog installed files to GROUP.
-m MODE $chmodprog installed files to MODE.
-o USER $chownprog installed files to USER.
+ -p pass -p to $cpprog.
-s $stripprog installed files.
+ -S SUFFIX attempt to back up existing files, with suffix SUFFIX.
-t DIRECTORY install into DIRECTORY.
-T report an error if DSTFILE is a directory.
Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
RMPROG STRIPPROG
+
+By default, rm is invoked with -f; when overridden with RMPROG,
+it's up to you to specify -f if you want it.
+
+If -S is not specified, no backups are attempted.
+
+Email bug reports to bug-automake@gnu.org.
+Automake home page: https://www.gnu.org/software/automake/
"
while test $# -ne 0; do
-o) chowncmd="$chownprog $2"
shift;;
+ -p) cpprog="$cpprog -p";;
+
-s) stripcmd=$stripprog;;
+ -S) backupsuffix="$2"
+ shift;;
+
-t)
is_target_a_directory=always
dst_arg=$2
dstdir=$dst
test -d "$dstdir"
dstdir_status=$?
+ # Don't chown directories that already exist.
+ if test $dstdir_status = 0; then
+ chowncmd=""
+ fi
else
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
if test $dstdir_status != 0; then
case $posix_mkdir in
'')
- # Create intermediate dirs using mode 755 as modified by the umask.
- # This is like FreeBSD 'install' as of 1997-10-28.
- umask=`umask`
- case $stripcmd.$umask in
- # Optimize common cases.
- *[2367][2367]) mkdir_umask=$umask;;
- .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
- *[0-7])
- mkdir_umask=`expr $umask + 22 \
- - $umask % 100 % 40 + $umask % 20 \
- - $umask % 10 % 4 + $umask % 2
- `;;
- *) mkdir_umask=$umask,go-w;;
- esac
-
# With -d, create the new directory with the user-specified mode.
# Otherwise, rely on $mkdir_umask.
if test -n "$dir_arg"; then
fi
posix_mkdir=false
- case $umask in
- *[123567][0-7][0-7])
- # POSIX mkdir -p sets u+wx bits regardless of umask, which
- # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
- ;;
- *)
- # Note that $RANDOM variable is not portable (e.g. dash); Use it
- # here however when possible just to lower collision chance.
- tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-
- trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
-
- # Because "mkdir -p" follows existing symlinks and we likely work
- # directly in world-writeable /tmp, make sure that the '$tmpdir'
- # directory is successfully created first before we actually test
- # 'mkdir -p' feature.
- if (umask $mkdir_umask &&
- $mkdirprog $mkdir_mode "$tmpdir" &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
- then
- if test -z "$dir_arg" || {
- # Check for POSIX incompatibilities with -m.
- # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
- # other-writable bit of parent directory when it shouldn't.
- # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- test_tmpdir="$tmpdir/a"
- ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
- case $ls_ld_tmpdir in
- d????-?r-*) different_mode=700;;
- d????-?--*) different_mode=755;;
- *) false;;
- esac &&
- $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
- test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
- }
- }
- then posix_mkdir=:
- fi
- rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
- else
- # Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
- fi
- trap '' 0;;
- esac;;
+ # The $RANDOM variable is not portable (e.g., dash). Use it
+ # here however when possible just to lower collision chance.
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+
+ trap '
+ ret=$?
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
+ exit $ret
+ ' 0
+
+ # Because "mkdir -p" follows existing symlinks and we likely work
+ # directly in world-writeable /tmp, make sure that the '$tmpdir'
+ # directory is successfully created first before we actually test
+ # 'mkdir -p'.
+ if (umask $mkdir_umask &&
+ $mkdirprog $mkdir_mode "$tmpdir" &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ test_tmpdir="$tmpdir/a"
+ ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
+ fi
+ trap '' 0;;
esac
if
then :
else
- # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # mkdir does not conform to POSIX,
# or it failed possibly due to a race condition. Create the
# directory the slow way, step by step, checking for races as we go.
prefixes=
else
if $posix_mkdir; then
- (umask=$mkdir_umask &&
+ (umask $mkdir_umask &&
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
# Don't fail if two instances are running concurrently.
test -d "$prefix" || exit 1
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
# Copy the file name to the temp name.
- (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+ (umask $cp_umask &&
+ { test -z "$stripcmd" || {
+ # Create $dsttmp read-write so that cp doesn't create it read-only,
+ # which would cause strip to fail.
+ if test -z "$doit"; then
+ : >"$dsttmp" # No need to fork-exec 'touch'.
+ else
+ $doit touch "$dsttmp"
+ fi
+ }
+ } &&
+ $doit_exec $cpprog "$src" "$dsttmp") &&
# and set any options; do chmod last to preserve setuid bits.
#
then
rm -f "$dsttmp"
else
+ # If $backupsuffix is set, and the file being installed
+ # already exists, attempt a backup. Don't worry if it fails,
+ # e.g., if mv doesn't support -f.
+ if test -n "$backupsuffix" && test -f "$dst"; then
+ $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
+ fi
+
# Rename the file to the real destination.
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
# file should still install successfully.
{
test ! -f "$dst" ||
- $doit $rmcmd -f "$dst" 2>/dev/null ||
+ $doit $rmcmd "$dst" 2>/dev/null ||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
- { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ { $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
} ||
{ echo "$0: cannot unlink or rename $dst" >&2
(exit 1); exit 1
scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
# This program is free software; you can redistribute it and/or modify
#! /bin/sh
-# Copyright (C) 2011-2018 Free Software Foundation, Inc.
+# Copyright (C) 2011-2020 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
sub("^(not )?ok[ \t]*", "", line)
# If the result has an explicit number, get it and strip it; otherwise,
- # automatically assing the next progresive number to it.
+ # automatically assign the next test number to it.
if (line ~ /^[0-9]+$/ || line ~ /^[0-9]+[^a-zA-Z0-9_]/)
{
match(line, "^[0-9]+")
scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 2011-2018 Free Software Foundation, Inc.
+# Copyright (C) 2011-2020 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
{
cat <<END
Usage:
- test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
- [--expect-failure={yes|no}] [--color-tests={yes|no}]
- [--enable-hard-errors={yes|no}] [--]
+ test-driver --test-name NAME --log-file PATH --trs-file PATH
+ [--expect-failure {yes|no}] [--color-tests {yes|no}]
+ [--enable-hard-errors {yes|no}] [--]
TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+
The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+See the GNU Automake documentation for information.
END
}
MagickLibPath
MagickBinPath
PERLMAINCC
+LIB_GDI32
+HasWINGDI32_FALSE
+HasWINGDI32_TRUE
LIB_WMF_DEPS
LIB_WMF
HasWMF_FALSE
LIBRARY_EXTRA_CPPFLAGS
MODULE_EXTRA_CPPFLAGS
LIBSTDCLDFLAGS
+HasGS_FALSE
+HasGS_TRUE
PERL_MAKE_OPTIONS
MAGICK_LT_RELEASE_OPTS
QuantumDepth
CYGWIN_BUILD_TRUE
WIN32_NATIVE_BUILD_FALSE
WIN32_NATIVE_BUILD_TRUE
-HasWINGDI32_FALSE
-HasWINGDI32_TRUE
-LIB_GDI32
LN_S
LD
FGREP
with_threads
enable_openmp
enable_openmp_slow
+enable_compressed_files
enable_largefile
enable_shared
enable_static
with_bzlib
with_dps
with_fpx
+with_gdi32
+with_gs
with_jbig
with_webp
with_jpeg
--disable-openmp do not use OpenMP
--enable-openmp-slow enable OpenMP for algorithms which sometimes run
slower
+ --disable-compressed-files
+ disable reading and writing of gzip/bzip files
--disable-largefile omit support for large files
--enable-shared[=PKGS] build shared libraries [default=no]
--enable-static[=PKGS] build static libraries [default=yes]
--without-bzlib disable BZLIB support
--without-dps disable Display Postscript support
--with-fpx enable FlashPIX support
+ --without-gdi32 disable Windows gdi32 support
+ --without-gs disable Ghostscript support
--without-jbig disable JBIG support
--without-webp disable WEBP support
--without-jpeg disable JPEG support
+
# Specify directory where m4 macros may be found.
am_aux_dir=`cd "$ac_aux_dir" && pwd`
if test x"${MISSING+set}" != xset; then
- case $am_aux_dir in
- *\ * | *\ *)
- MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
- *)
- MISSING="\${SHELL} $am_aux_dir/missing" ;;
- esac
+ MISSING="\${SHELL} '$am_aux_dir/missing'"
fi
# Use eval to expand $SHELL
if eval "$MISSING --is-lightweight"; then
fi
- case $ac_cv_prog_cc_stdc in #(
- no) :
- ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #(
- *) :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5
-$as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
-if ${ac_cv_prog_cc_c99+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c99=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <stdio.h>
-
-// Check varargs macros. These examples are taken from C99 6.10.3.5.
-#define debug(...) fprintf (stderr, __VA_ARGS__)
-#define showlist(...) puts (#__VA_ARGS__)
-#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
-static void
-test_varargs_macros (void)
-{
- int x = 1234;
- int y = 5678;
- debug ("Flag");
- debug ("X = %d\n", x);
- showlist (The first, second, and third items.);
- report (x>y, "x is %d but y is %d", x, y);
-}
-
-// Check long long types.
-#define BIG64 18446744073709551615ull
-#define BIG32 4294967295ul
-#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
-#if !BIG_OK
- your preprocessor is broken;
-#endif
-#if BIG_OK
-#else
- your preprocessor is broken;
-#endif
-static long long int bignum = -9223372036854775807LL;
-static unsigned long long int ubignum = BIG64;
-
-struct incomplete_array
-{
- int datasize;
- double data[];
-};
-
-struct named_init {
- int number;
- const wchar_t *name;
- double average;
-};
-
-typedef const char *ccp;
-
-static inline int
-test_restrict (ccp restrict text)
-{
- // See if C++-style comments work.
- // Iterate through items via the restricted pointer.
- // Also check for declarations in for loops.
- for (unsigned int i = 0; *(text+i) != '\0'; ++i)
- continue;
- return 0;
-}
-
-// Check varargs and va_copy.
-static void
-test_varargs (const char *format, ...)
-{
- va_list args;
- va_start (args, format);
- va_list args_copy;
- va_copy (args_copy, args);
-
- const char *str;
- int number;
- float fnumber;
-
- while (*format)
- {
- switch (*format++)
- {
- case 's': // string
- str = va_arg (args_copy, const char *);
- break;
- case 'd': // int
- number = va_arg (args_copy, int);
- break;
- case 'f': // float
- fnumber = va_arg (args_copy, double);
- break;
- default:
- break;
- }
- }
- va_end (args_copy);
- va_end (args);
-}
-
-int
-main ()
-{
-
- // Check bool.
- _Bool success = false;
-
- // Check restrict.
- if (test_restrict ("String literal") == 0)
- success = true;
- char *restrict newvar = "Another string";
-
- // Check varargs.
- test_varargs ("s, d' f .", "string", 65, 34.234);
- test_varargs_macros ();
-
- // Check flexible array members.
- struct incomplete_array *ia =
- malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
- ia->datasize = 10;
- for (int i = 0; i < ia->datasize; ++i)
- ia->data[i] = i * 1.234;
-
- // Check named initializers.
- struct named_init ni = {
- .number = 34,
- .name = L"Test wide string",
- .average = 543.34343,
- };
-
- ni.number = 58;
-
- int dynamic_array[ni.number];
- dynamic_array[ni.number - 1] = 543;
-
- // work around unused variable warnings
- return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
- || dynamic_array[ni.number - 1] != 543);
-
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c99=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c99" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c99" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c99"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
-$as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c99" != xno; then :
- ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
- ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
-else
- ac_cv_prog_cc_stdc=no
-fi
-
-fi
- ;;
-esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5
-$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; }
- if ${ac_cv_prog_cc_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-fi
-
- case $ac_cv_prog_cc_stdc in #(
- no) :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;; #(
- '') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;; #(
- *) :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5
-$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;;
-esac
-
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-LIB_GDI32=''
native_win32_build='no'
cygwin_build='no'
case "${host_os}" in
cygwin* )
cygwin_build='yes'
- LIB_GDI32='-lgdi32'
;;
mingw* )
native_win32_build='yes'
- LIB_GDI32='-lgdi32'
;;
esac
-if test "${LIB_GDI32}x" != 'x'
-then
-
-$as_echo "#define HasWINGDI32 1" >>confdefs.h
-
-fi
-
- if test "${LIB_GDI32}x" != 'x' ; then
- HasWINGDI32_TRUE=
- HasWINGDI32_FALSE='#'
-else
- HasWINGDI32_TRUE='#'
- HasWINGDI32_FALSE=
-fi
-
- if test "${native_win32_build}" = 'yes' ; then
+ if test "${native_win32_build}" = 'yes'; then
WIN32_NATIVE_BUILD_TRUE=
WIN32_NATIVE_BUILD_FALSE='#'
else
WIN32_NATIVE_BUILD_FALSE=
fi
- if test "${cygwin_build}" = 'yes' ; then
+ if test "${cygwin_build}" = 'yes'; then
CYGWIN_BUILD_TRUE=
CYGWIN_BUILD_FALSE='#'
else
fi
+# Disable reading/writing gzip/bzip compressed files
+# Check whether --enable-compressed-files was given.
+if test "${enable_compressed_files+set}" = set; then :
+ enableval=$enable_compressed_files; with_compressed_files=$enableval
+else
+ with_compressed_files='yes'
+fi
+
+if test "$with_compressed_files" != 'yes'; then
+
+$as_echo "#define DISABLE_COMPRESSED_FILES 1" >>confdefs.h
+
+ DISTCHECK_CONFIG_FLAGS="${DISTCHECK_CONFIG_FLAGS} --disable-compressed-files=$with_compressed_files "
+fi
+
########
#
# Check for large file support
#
# Configure libtool
-enable_dlopen=yes
-
-
-
case `pwd` in
*\ * | *\ *)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+enable_dlopen=yes
8 ) ;;
16 ) ;;
32 ) ;;
- * ) as_fn_error 16 "\"Pixel quantum depth must have value of 8" "$LINENO" 5 ;;
+ * ) as_fn_error $? "Pixel quantum depth must have value of 8, 16, or 32" "$LINENO" 5 ;;
esac
QuantumDepth="$with_quantum_depth"
DISTCHECK_CONFIG_FLAGS="${DISTCHECK_CONFIG_FLAGS} --with-fpx=$with_fpx "
fi
+# Enable Windows lgdi32 library
+
+# Check whether --with-gdi32 was given.
+if test "${with_gdi32+set}" = set; then :
+ withval=$with_gdi32; with_gdi32=$withval
+else
+ with_gdi32='yes'
+fi
+
+if test "$with_gdi32" != 'yes' ; then
+ DISTCHECK_CONFIG_FLAGS="${DISTCHECK_CONFIG_FLAGS} --with-gdi32=$with_gdi32 "
+fi
+
+# Disable Ghostscript support.
+
+# Check whether --with-gs was given.
+if test "${with_gs+set}" = set; then :
+ withval=$with_gs; with_gs=$withval
+else
+ with_gs='yes'
+fi
+
+if test "$with_gs" != 'yes' ; then
+ DISTCHECK_CONFIG_FLAGS="${DISTCHECK_CONFIG_FLAGS} --with-gs=$with_gs "
+fi
+if test "$with_gs" = 'yes' ; then
+
+$as_echo "#define HasGS 1" >>confdefs.h
+
+fi
+ if test "$with_gs" = 'yes'; then
+ HasGS_TRUE=
+ HasGS_FALSE='#'
+else
+ HasGS_TRUE='#'
+ HasGS_FALSE=
+fi
+
+
# Disable JBIG.
# Check whether --with-jbig was given.
fi
# # Disable MPEG.
-# AC_ARG_WITH(mpeg2,
+# AC_ARG_WITH([mpeg2],
# AS_HELP_STRING([--without-mpeg2],
# [disable MPEG support]),
# [with_mpeg2=$withval],
-# If `signal.h' declares signal as returning a pointer to a function
-# returning void, define RETSIGTYPE to be void; otherwise, define it
-# to be int.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5
-$as_echo_n "checking return type of signal handlers... " >&6; }
-if ${ac_cv_type_signal+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <signal.h>
-
-int
-main ()
-{
-return *(signal (0, 0)) (0) == 1;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_type_signal=int
-else
- ac_cv_type_signal=void
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5
-$as_echo "$ac_cv_type_signal" >&6; }
-
-cat >>confdefs.h <<_ACEOF
-#define RETSIGTYPE $ac_cv_type_signal
-_ACEOF
-
-
-
# Test for C compiler __func__ support
if test "$ac_cv_have_C__func__" != 'yes' ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler __func__ support" >&5
int
main ()
{
-
const char *func=__func__;
return (func != 0 ? 0 : 1);
int
main ()
{
-
- const char *func=__func__;
+const char *func=__func__;
return (func != 0 ? 0 : 1);
;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_have_CPP__func__='yes'
+ ac_cv_have_CPP__func__='yes'
else
ac_cv_have_CPP__func__='no'
fi
else
failed=`expr $failed + 1`
fi
- #AC_CHECK_LIB(bz2,BZ2_bzCompress,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- #AC_CHECK_LIB(bz2,BZ2_bzDecompress,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- #AC_CHECK_LIB(bz2,_imp__BZ2_decompress,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
+ #AC_CHECK_LIB([bz2],[BZ2_bzCompress],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ #AC_CHECK_LIB([bz2],[BZ2_bzDecompress],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ #AC_CHECK_LIB([bz2],[_imp__BZ2_decompress],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if BZLIB package is complete" >&5
$as_echo_n "checking if BZLIB package is complete... " >&6; }
if test $passed -gt 0
int
main ()
{
-
#if PNG_LIBPNG_VER_MINOR != ${var}
#error LIBPNG library must be version 1${var}!
Kaboom, Kaboom
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_libpng_ok='yes'
+ ac_cv_libpng_ok='yes'
else
ac_cv_libpng_ok='no'
fi
failed=`expr $failed + 1`
fi
-
-# Test for compatible JPEG library
-if test "$ac_cv_jpeg_version_ok" != 'yes' ; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for JPEG library is version 6b or later" >&5
-$as_echo_n "checking for JPEG library is version 6b or later... " >&6; }
-if ${ac_cv_jpeg_version_ok+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-#include <stdlib.h>
-#include <jpeglib.h>
-
-int
-main ()
-{
-
-#if JPEG_LIB_VERSION < 62
-#error IJG JPEG library must be version 6b or newer!
-Kaboom, Kaboom
-#endif
-return 0;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_jpeg_version_ok='yes'
-else
- ac_cv_jpeg_version_ok='no'
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_jpeg_version_ok" >&5
-$as_echo "$ac_cv_jpeg_version_ok" >&6; }
-if test "$ac_cv_jpeg_version_ok" = 'yes' ; then
- passed=`expr $passed + 1`
-else
- failed=`expr $failed + 1`
-fi
-fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if JPEG package is complete" >&5
$as_echo_n "checking if JPEG package is complete... " >&6; }
if test $passed -gt 0
#
-# Check for JPEG Version 2
+# Check for JPEG Version 2 (Jasper)
#
have_jp2='no'
LIB_JP2=''
# LIB_MPEG2=''
# if test "$with_mpeg2" != 'no'
# then
-# AC_MSG_CHECKING(for MPEG version 2 support )
+# AC_MSG_CHECKING([for MPEG version 2 support ])
# AC_MSG_RESULT()
# failed=0
# passed=0
-# AC_CHECK_HEADER(mpeg2dec/mpeg2.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
-# AC_CHECK_LIB(mpeg2,mpeg2_decode_data,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
-# AC_MSG_CHECKING(if MPEG version 2 support package is complete)
+# AC_CHECK_HEADER([mpeg2dec/mpeg2.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+# AC_CHECK_LIB([mpeg2],[mpeg2_decode_data],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+# AC_MSG_CHECKING([if MPEG version 2 support package is complete])
# if test $passed -gt 0
# then
# if test $failed -gt 0
# then
-# AC_MSG_RESULT(no -- some components failed test)
+# AC_MSG_RESULT([no -- some components failed test])
# have_mpeg2='no (failed tests)'
# else
# LIB_MPEG2='-lmpeg2'
# LIBS="$LIB_MPEG2 $LIBS"
-# AC_DEFINE(HasMPEG2,1,Define if you have MPEG2 library)
-# AC_MSG_RESULT(yes)
+# AC_DEFINE([HasMPEG2],[1],[Define if you have MPEG2 library])
+# AC_MSG_RESULT([yes])
# have_mpeg2='yes'
# fi
# else
-# AC_MSG_RESULT(no)
+# AC_MSG_RESULT([no])
# fi
# fi
-# AM_CONDITIONAL(HasMPEG2, test "$have_mpeg2" = 'yes')
-# AC_SUBST(LIB_MPEG2)
+# AM_CONDITIONAL([HasMPEG2],[test "$have_mpeg2" = 'yes'])
+# AC_SUBST([LIB_MPEG2])
#
# Check for TTF
+
+#
+# Check for Windows gdi32 library
+#
+have_gdi32='no'
+if test "$with_gdi32" != 'no'
+then
+ LIB_GDI32=''
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Windows GDI32 support" >&5
+$as_echo_n "checking for Windows GDI32 support... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5
+$as_echo "" >&6; }
+ failed=0
+ passed=0
+ found_libgdi32=0
+ ac_fn_c_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default"
+if test "x$ac_cv_header_windows_h" = xyes; then :
+ passed=`expr $passed + 1`
+else
+ failed=`expr $failed + 1`
+fi
+
+
+ ac_fn_c_check_header_compile "$LINENO" "wingdi.h" "ac_cv_header_wingdi_h" "#include <windows.h>
+"
+if test "x$ac_cv_header_wingdi_h" = xyes; then :
+ passed=`expr $passed + 1`
+else
+ failed=`expr $failed + 1`
+fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenClipboard in -lgdi32" >&5
+$as_echo_n "checking for OpenClipboard in -lgdi32... " >&6; }
+if ${ac_cv_lib_gdi32_OpenClipboard+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgdi32 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char OpenClipboard ();
+int
+main ()
+{
+return OpenClipboard ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_gdi32_OpenClipboard=yes
+else
+ ac_cv_lib_gdi32_OpenClipboard=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gdi32_OpenClipboard" >&5
+$as_echo "$ac_cv_lib_gdi32_OpenClipboard" >&6; }
+if test "x$ac_cv_lib_gdi32_OpenClipboard" = xyes; then :
+ found_libgdi32=`expr $found_libgdi32 + 1`
+fi
+
+ if test $found_libgdi32 -gt 0
+ then
+ passed=`expr $passed + 1`
+ else
+ failed=`expr $failed + 1`
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Windows GDI32 support is complete" >&5
+$as_echo_n "checking if Windows GDI32 support is complete... " >&6; }
+ if test $passed -gt 0
+ then
+ if test $failed -gt 0
+ then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no -- some components failed test" >&5
+$as_echo "no -- some components failed test" >&6; }
+ have_gdi32='no (failed tests)'
+ else
+ LIB_GDI32='-lgdi32'
+ LIBS="$LIB_GDI32 $LIBS"
+
+$as_echo "#define HasWINGDI32 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ have_gdi32='yes'
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+fi
+ if test "$have_gdi32" = 'yes'; then
+ HasWINGDI32_TRUE=
+ HasWINGDI32_FALSE='#'
+else
+ HasWINGDI32_TRUE='#'
+ HasWINGDI32_FALSE=
+fi
+
+
+
########
#
# Check for functions
MPEGDecodeDelegateDefault='mpeg2decode'
MPEGEncodeDelegateDefault='mpeg2encode'
MVDelegateDefault='mv'
-if test "$native_win32_build" = 'yes' ; then
- PSDelegateDefault='gswin32c'
+if test "$with_gs" = 'yes' ; then
+ if test "$native_win32_build" = 'yes' ; then
+ PSDelegateDefault='gswin32c'
+ else
+ PSDelegateDefault='gs'
+ fi
else
- PSDelegateDefault='gs'
+ PSDelegateDefault='false'
fi
# Search for delegates
fi
-# Extract the first word of ""$PSDelegateDefault"", so it can be a program name with args.
+if test "$with_gs" = 'yes' ; then
+ # Extract the first word of ""$PSDelegateDefault"", so it can be a program name with args.
set dummy "$PSDelegateDefault"; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
fi
+else
+ PSDelegate=$PSDelegateDefault
+fi
# Prefer lpr to lp; lp needs options tacked on.
if test "$LPRDelegate" != no
break 1
fi
done
- if test "${PSDelegate}" != 'gswin32c'
- then
- ghostscript_font_dir=`echo "${PSDelegate}" | sed -e 's:/gs/.*:/gs:;s:^/::;s/./&:/;s:/:\\\\:g'`"\\fonts\\"
+ if test "$with_gs" = 'yes' ; then
+ if test "${PSDelegate}" != "${PSDelegateDefault}"
+ then
+ ghostscript_font_dir=`echo "${PSDelegate}" | sed -e 's:/gs/.*:/gs:;s:^/::;s/./&:/;s:/:\\\\:g'`"\\fonts\\"
+ fi
fi
else
if test "${ghostscript_font_dir}x" = 'x'
then
- if test "$PSDelegate" != 'gs'
- then
- ghostscript_font_dir=`echo "$PSDelegate" | sed -e 's:/bin/gs:/share/ghostscript/fonts:'`"/"
+ if test "$with_gs" = 'yes' ; then
+ if test "$PSDelegate" != "${PSDelegateDefault}"
+ then
+ ghostscript_font_dir=`echo "$PSDelegate" | sed -e 's:/bin/gs:/share/ghostscript/fonts:'`"/"
+ fi
fi
fi
done
- if test "x$RPM" != "x" ; then
+ if test "x$RPM" != "x"; then
HAS_RPM_TRUE=
HAS_RPM_FALSE='#'
else
done
- if test "x$P7ZIP" != "x" ; then
+ if test "x$P7ZIP" != "x"; then
HAS_P7ZIP_TRUE=
HAS_P7ZIP_FALSE='#'
else
done
- if test "x$ZIP" != "x" ; then
+ if test "x$ZIP" != "x"; then
HAS_ZIP_TRUE=
HAS_ZIP_FALSE='#'
else
have_ps='no'
if test "$have_dps" = 'yes' || \
- test "$have_gs" = 'yes' || \
- test "${native_win32_build}" = 'yes' ; then
+ test "$have_gs" = 'yes' ; then
have_ps='yes'
fi
if test "$have_ps" = 'yes' ; then
# Pass only user-provided LIBS as "global" libraries
LIBS=$LIBS_USER
-#AC_SUBST(CPPFLAGS)
-
-#AC_SUBST(LDFLAGS)
-#AC_SUBST(X_PRE_LIBS)
-#AC_SUBST(X_LIBS)
-#AC_SUBST(X_EXTRA_LIBS)
+#AC_SUBST([CPPFLAGS])
+#AC_SUBST([LDFLAGS])
+#AC_SUBST([X_PRE_LIBS])
+#AC_SUBST([X_LIBS])
+#AC_SUBST([X_EXTRA_LIBS])
as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${HasWINGDI32_TRUE}" && test -z "${HasWINGDI32_FALSE}"; then
- as_fn_error $? "conditional \"HasWINGDI32\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
if test -z "${WIN32_NATIVE_BUILD_TRUE}" && test -z "${WIN32_NATIVE_BUILD_FALSE}"; then
as_fn_error $? "conditional \"WIN32_NATIVE_BUILD\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
as_fn_error $? "conditional \"MAGICK_COMPAT\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HasGS_TRUE}" && test -z "${HasGS_FALSE}"; then
+ as_fn_error $? "conditional \"HasGS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
as_fn_error $? "conditional \"HasWMF\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HasWINGDI32_TRUE}" && test -z "${HasWINGDI32_FALSE}"; then
+ as_fn_error $? "conditional \"HasWINGDI32\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${HasPSDelegate_TRUE}" && test -z "${HasPSDelegate_FALSE}"; then
as_fn_error $? "conditional \"HasPSDelegate\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "Something went wrong bootstrapping makefile fragments
- for automatic dependency tracking. Try re-running configure with the
+ for automatic dependency tracking. If GNU make was not used, consider
+ re-running the configure script with MAKE=\"gmake\" (or whatever is
+ necessary). You can also try re-running configure with the
'--disable-dependency-tracking' option to at least be able to build
the package (albeit without support for automatic dependency tracking).
See \`config.log' for more details" "$LINENO" 5; }
printf "DPS --with-dps=$with_dps \t$have_dps\n"
printf "FlashPIX --with-fpx=$with_fpx \t$have_fpx\n"
printf "FreeType 2.0 --with-ttf=$with_ttf \t$have_ttf\n"
-printf "Ghostscript None \t$PSDelegate ($GSVersion)\n"
+printf "Ghostscript --with-gs=$with_gs \t$PSDelegate ($GSVersion)\n"
result_ghostscript_font_dir='none'
if test "${ghostscript_font_dir}x" != 'x'
then
result_ghostscript_font_dir="$ghostscript_font_dir"
fi
printf "Ghostscript fonts --with-gs-font-dir=$with_gs_font_dir\t$result_ghostscript_font_dir\n"
+printf "Windows GDI32 --with-gdi32=$with_gdi32 \t$have_gdi32\n"
printf "JBIG --with-jbig=$with_jbig \t$have_jbig\n"
printf "JPEG v1 --with-jpeg=$with_jpeg \t$have_jpeg\n"
printf "JPEG-2000 --with-jp2=$with_jp2 \t$have_jp2\n"
# Written by Bob Friesenhahn <bfriesen@GraphicsMagick.org>
#
-AC_PREREQ(2.69)
-AC_INIT(magick/magick.h)
+AC_PREREQ([2.69])
+AC_INIT
+AC_CONFIG_SRCDIR([magick/magick.h])
# Specify directory where m4 macros may be found.
AC_CONFIG_MACRO_DIR([m4])
AC_CANONICAL_HOST
MAGICK_TARGET_CPU=$host_cpu
-AC_SUBST(MAGICK_TARGET_CPU)
-AC_DEFINE_UNQUOTED(MAGICK_TARGET_CPU,$MAGICK_TARGET_CPU,[Target Host CPU])
+AC_SUBST([MAGICK_TARGET_CPU])
+AC_DEFINE_UNQUOTED([MAGICK_TARGET_CPU],[$MAGICK_TARGET_CPU],[Target Host CPU])
MAGICK_TARGET_VENDOR=$host_vendor
-AC_SUBST(MAGICK_TARGET_VENDOR)
-AC_DEFINE_UNQUOTED(MAGICK_TARGET_VENDOR,$MAGICK_TARGET_VENDOR,[Target Host Vendor])
+AC_SUBST([MAGICK_TARGET_VENDOR])
+AC_DEFINE_UNQUOTED([MAGICK_TARGET_VENDOR],[$MAGICK_TARGET_VENDOR],[Target Host Vendor])
MAGICK_TARGET_OS=$host_os
-AC_SUBST(MAGICK_TARGET_OS)
-AC_DEFINE_UNQUOTED(MAGICK_TARGET_OS,$MAGICK_TARGET_OS,[Target Host OS])
+AC_SUBST([MAGICK_TARGET_OS])
+AC_DEFINE_UNQUOTED([MAGICK_TARGET_OS],[$MAGICK_TARGET_OS],[Target Host OS])
# Compute newest and oldest interface numbers.
MAGICK_LIB_INTERFACE_NEWEST=$MAGICK_LIBRARY_CURRENT
MAGICK_LIB_INTERFACE_OLDEST=`expr ${MAGICK_LIBRARY_CURRENT} - ${MAGICK_LIBRARY_AGE}`
# Substitute Magick library versioning
-AC_SUBST(MAGICK_LIBRARY_CURRENT)dnl
-AC_SUBST(MAGICK_LIBRARY_REVISION)dnl
-AC_SUBST(MAGICK_LIBRARY_AGE)dnl
+AC_SUBST([MAGICK_LIBRARY_CURRENT])dnl
+AC_SUBST([MAGICK_LIBRARY_REVISION])dnl
+AC_SUBST([MAGICK_LIBRARY_AGE])dnl
-AC_SUBST(MAGICK_LIB_INTERFACE_NEWEST)
-AC_SUBST(MAGICK_LIB_INTERFACE_OLDEST)
+AC_SUBST([MAGICK_LIB_INTERFACE_NEWEST])
+AC_SUBST([MAGICK_LIB_INTERFACE_OLDEST])
# Substitute Magick++ library versioning
-AC_SUBST(MAGICK_PLUS_PLUS_LIBRARY_CURRENT)
-AC_SUBST(MAGICK_PLUS_PLUS_LIBRARY_REVISION)
-AC_SUBST(MAGICK_PLUS_PLUS_LIBRARY_AGE)
+AC_SUBST([MAGICK_PLUS_PLUS_LIBRARY_CURRENT])
+AC_SUBST([MAGICK_PLUS_PLUS_LIBRARY_REVISION])
+AC_SUBST([MAGICK_PLUS_PLUS_LIBRARY_AGE])
# Substitute Magick Wand library versioning
-AC_SUBST(MAGICK_WAND_LIBRARY_CURRENT)
-AC_SUBST(MAGICK_WAND_LIBRARY_REVISION)
-AC_SUBST(MAGICK_WAND_LIBRARY_AGE)
+AC_SUBST([MAGICK_WAND_LIBRARY_CURRENT])
+AC_SUBST([MAGICK_WAND_LIBRARY_REVISION])
+AC_SUBST([MAGICK_WAND_LIBRARY_AGE])
-AC_SUBST(PACKAGE_NAME)dnl
-AC_SUBST(PACKAGE_VERSION)dnl
-AC_SUBST(PACKAGE_VERSION_ADDENDUM)dnl
-AC_SUBST(PACKAGE_CHANGE_DATE)dnl
-AC_SUBST(PACKAGE_RELEASE_DATE)dnl
+AC_SUBST([PACKAGE_NAME])dnl
+AC_SUBST([PACKAGE_VERSION])dnl
+AC_SUBST([PACKAGE_VERSION_ADDENDUM])dnl
+AC_SUBST([PACKAGE_CHANGE_DATE])dnl
+AC_SUBST([PACKAGE_RELEASE_DATE])dnl
# Substitute Mercurial branch tag
-AC_SUBST(HG_BRANCH_TAG)dnl
+AC_SUBST([HG_BRANCH_TAG])dnl
# Definition used to define MagickLibVersion in version.h
MAGICK_LIB_VERSION="0x"
MAGICK_LIB_VERSION=${MAGICK_LIB_VERSION}0
fi
MAGICK_LIB_VERSION=${MAGICK_LIB_VERSION}${MAGICK_LIBRARY_REVISION}
-AC_SUBST(MAGICK_LIB_VERSION)
+AC_SUBST([MAGICK_LIB_VERSION])
# Definition used to define MagickLibVersionText in version.h
MAGICK_LIB_VERSION_TEXT="${PACKAGE_VERSION}"
-AC_SUBST(MAGICK_LIB_VERSION_TEXT)
+AC_SUBST([MAGICK_LIB_VERSION_TEXT])
# Definition used to define MagickLibVersionNumber in version.h
MAGICK_LIB_VERSION_NUMBER="${MAGICK_LIBRARY_CURRENT},${MAGICK_LIBRARY_AGE},${MAGICK_LIBRARY_REVISION}"
-AC_SUBST(MAGICK_LIB_VERSION_NUMBER)
+AC_SUBST([MAGICK_LIB_VERSION_NUMBER])
# Ensure that make can run correctly
AM_SANITY_CHECK
# Generate configure header.
AC_CONFIG_HEADERS([magick/magick_config.h magick/magick_config_api.h])
-AM_INIT_AUTOMAKE($PACKAGE_NAME,"${PACKAGE_VERSION}${PACKAGE_VERSION_ADDENDUM}", ' ')
+AM_INIT_AUTOMAKE([$PACKAGE_NAME],["${PACKAGE_VERSION}${PACKAGE_VERSION_ADDENDUM}"],[' '])
# Enable support for silent build rules
AM_SILENT_RULES
#
eval "eval PREFIX_DIR=${prefix}"
-AC_SUBST(PREFIX_DIR)
+AC_SUBST([PREFIX_DIR])
eval "eval EXEC_PREFIX_DIR=${exec_prefix}"
-AC_SUBST(EXEC_PREFIX_DIR)
+AC_SUBST([EXEC_PREFIX_DIR])
eval "eval BIN_DIR=$bindir"
-AC_SUBST(BIN_DIR)
+AC_SUBST([BIN_DIR])
eval "eval SBIN_DIR=$sbindir"
-AC_SUBST(SBIN_DIR)
+AC_SUBST([SBIN_DIR])
eval "eval LIBEXEC_DIR=$libexecdir"
-AC_SUBST(LIBEXEC_DIR)
+AC_SUBST([LIBEXEC_DIR])
eval "eval DATA_DIR=$datadir"
-AC_SUBST(DATA_DIR)
+AC_SUBST([DATA_DIR])
eval "eval DOC_DIR=$docdir"
-AC_SUBST(DOC_DIR)
+AC_SUBST([DOC_DIR])
eval "eval HTML_DIR=$htmldir"
-AC_SUBST(HTML_DIR)
+AC_SUBST([HTML_DIR])
eval "eval SYSCONF_DIR=$sysconfdir"
-AC_SUBST(SYSCONF_DIR)
+AC_SUBST([SYSCONF_DIR])
eval "eval SHAREDSTATE_DIR=$sharedstatedir"
-AC_SUBST(SHAREDSTATE_DIR)
+AC_SUBST([SHAREDSTATE_DIR])
eval "eval LOCALSTATE_DIR=$localstatedir"
-AC_SUBST(LOCALSTATE_DIR)
+AC_SUBST([LOCALSTATE_DIR])
eval "eval LIB_DIR=$libdir"
-AC_SUBST(LIB_DIR)
+AC_SUBST([LIB_DIR])
eval "eval INCLUDE_DIR=$includedir"
-AC_SUBST(INCLUDE_DIR)
+AC_SUBST([INCLUDE_DIR])
eval "eval OLDINCLUDE_DIR=$oldincludedir"
-AC_SUBST(OLDINCLUDE_DIR)
+AC_SUBST([OLDINCLUDE_DIR])
eval "eval INFO_DIR=$infodir"
-AC_SUBST(INFO_DIR)
+AC_SUBST([INFO_DIR])
eval "eval MAN_DIR=$mandir"
-AC_SUBST(MAN_DIR)
+AC_SUBST([MAN_DIR])
# Get full paths to source and build directories
srcdirfull="`cd $srcdir && pwd`"
DIRSEP=';'
;;
esac
-AC_SUBST(MAGICK_CODER_MODULE_PATH)
-AC_SUBST(MAGICK_CONFIGURE_SRC_PATH)
-AC_SUBST(MAGICK_CONFIGURE_BUILD_PATH)
-AC_SUBST(MAGICK_FILTER_MODULE_PATH)
-AC_SUBST(DIRSEP)
+AC_SUBST([MAGICK_CODER_MODULE_PATH])
+AC_SUBST([MAGICK_CONFIGURE_SRC_PATH])
+AC_SUBST([MAGICK_CONFIGURE_BUILD_PATH])
+AC_SUBST([MAGICK_FILTER_MODULE_PATH])
+AC_SUBST([DIRSEP])
# Check for programs
AC_PROG_CC
-AC_PROG_CC_STDC
AC_PROG_CPP
-AM_PROG_LD
-AC_SUBST(LD)
+LT_PATH_LD
+AC_SUBST([LD])
AM_PROG_CC_C_O # Necessary if objects are placed in subdirectories.
AC_PROG_INSTALL
AC_PROG_MAKE_SET
AC_EXEEXT
AC_OBJEXT
-LIB_GDI32=''
native_win32_build='no'
cygwin_build='no'
case "${host_os}" in
cygwin* )
cygwin_build='yes'
- LIB_GDI32='-lgdi32'
;;
mingw* )
native_win32_build='yes'
- LIB_GDI32='-lgdi32'
;;
esac
-if test "${LIB_GDI32}x" != 'x'
-then
- AC_DEFINE(HasWINGDI32,1,Define to use the Windows GDI32 library)
-fi
-AC_SUBST(LIB_GDI32)
-AM_CONDITIONAL(HasWINGDI32, test "${LIB_GDI32}x" != 'x' )
-AM_CONDITIONAL(WIN32_NATIVE_BUILD, test "${native_win32_build}" = 'yes' )
-AM_CONDITIONAL(CYGWIN_BUILD, test "${cygwin_build}" = 'yes' )
+AM_CONDITIONAL([WIN32_NATIVE_BUILD],[test "${native_win32_build}" = 'yes'])
+AM_CONDITIONAL([CYGWIN_BUILD],[test "${cygwin_build}" = 'yes'])
WinPathScript="${srcdirfull}/winpath.sh"
-AC_SUBST(WinPathScript)
+AC_SUBST([WinPathScript])
#
# Compiler flags tweaks
# Determine POSIX threads settings
#
# Enable support for POSIX thread APIs
-AC_ARG_WITH(threads,
+AC_ARG_WITH([threads],
AS_HELP_STRING([--without-threads],
[disable POSIX threads API support]),
[with_threads=$withval],
CFLAGS="$OPENMP_CFLAGS $CFLAGS"
#CXXFLAGS="$OPENMP_CXXFLAGS $CXXFLAGS"
#LDFLAGS="$LDFLAGS $OPENMP_CFLAGS"
-AC_SUBST(OPENMP_CFLAGS)
+AC_SUBST([OPENMP_CFLAGS])
# Allow the user to disable use of OpenMP where algorithms sometimes run slower.
-AC_ARG_ENABLE(openmp-slow,
+AC_ARG_ENABLE([openmp-slow],
AS_HELP_STRING([--enable-openmp-slow],
[enable OpenMP for algorithms which
sometimes run slower]),
[with_openmp_slow='no'])
if test "$with_openmp_slow" = 'no'
then
- AC_DEFINE(DisableSlowOpenMP,1,[Disable OpenMP for algorithms which sometimes run slower])
+ AC_DEFINE([DisableSlowOpenMP],[1],[Disable OpenMP for algorithms which sometimes run slower])
+fi
+
+# Disable reading/writing gzip/bzip compressed files
+AC_ARG_ENABLE([compressed-files],
+ AS_HELP_STRING([--disable-compressed-files],
+ [disable reading and writing of gzip/bzip files]),
+ [with_compressed_files=$enableval],
+ [with_compressed_files='yes'])
+if test "$with_compressed_files" != 'yes'; then
+ AC_DEFINE([DISABLE_COMPRESSED_FILES],[1],[Disable reading and writing of gzip/bzip files])
+ DISTCHECK_CONFIG_FLAGS="${DISTCHECK_CONFIG_FLAGS} --disable-compressed-files=$with_compressed_files "
fi
########
LFS_CPPFLAGS="$LFS_CPPFLAGS -D_LARGEFILE_SOURCE=1"
fi
fi
-AC_SUBST(LFS_CPPFLAGS)
+AC_SUBST([LFS_CPPFLAGS])
#
# Decide if setjmp/longjmp is thread safe based on host OS
;;
*)
- AC_DEFINE(SETJMP_IS_THREAD_SAFE,1,[Setjmp/longjmp are thread safe])
+ AC_DEFINE([SETJMP_IS_THREAD_SAFE],[1],[Setjmp/longjmp are thread safe])
;;
esac
#
# Configure libtool
-AC_LIBTOOL_DLOPEN
-LT_INIT([disable-shared win32-dll])
+LT_INIT([disable-shared win32-dll dlopen])
LT_LANG([C++])
AC_SUBST(LIBTOOL_DEPS)
libtool_build_static_libs='yes'
fi
-AM_CONDITIONAL(WITH_SHARED_LIBS, test "${libtool_build_shared_libs}" = 'yes')
+AM_CONDITIONAL([WITH_SHARED_LIBS],[test "${libtool_build_shared_libs}" = 'yes'])
#
# Enable support for building loadable modules
#
build_modules='no'
-AC_ARG_WITH(modules,
+AC_ARG_WITH([modules],
AS_HELP_STRING([--with-modules],
[enable building dynamically loadable
modules]),
fi
fi
if test "$build_modules" != 'no' ; then
- AC_DEFINE(BuildMagickModules,1,Define if coders and filters are to be built as modules.)
+ AC_DEFINE([BuildMagickModules],[1],[Define if coders and filters are to be built as modules.])
fi
-AM_CONDITIONAL(WITH_MODULES, test "$build_modules" != 'no')
+AM_CONDITIONAL([WITH_MODULES],[test "$build_modules" != 'no'])
# Build a version of GraphicsMagick which operates uninstalled.
# Used to build distributions located via MAGICK_HOME / executable path
-AC_ARG_ENABLE(installed,
+AC_ARG_ENABLE([installed],
AS_HELP_STRING([--disable-installed],
[disable building an installed GraphicsMagick]),
[with_installed=$enableval],
[with_installed='yes'])
if test "$with_installed" = 'yes'
then
- AC_DEFINE(UseInstalledMagick,1,[GraphicsMagick is formally installed under prefix])
+ AC_DEFINE([UseInstalledMagick],[1],[GraphicsMagick is formally installed under prefix])
else
DISTCHECK_CONFIG_FLAGS="${DISTCHECK_CONFIG_FLAGS} --disable-installed "
fi
# Enable broken/dangerous coders
# EnableBrokenCoders CPP define and ENABLE_BROKEN_CODERS Automake conditional)
-AC_ARG_ENABLE(broken-coders,
+AC_ARG_ENABLE([broken-coders],
AS_HELP_STRING([--enable-broken-coders],
[enable broken/dangerous file formats support]),
[with_broken_coders=$enableval],
[with_broken_coders='no'])
if test "$with_broken_coders" = 'yes'
then
- AC_DEFINE(EnableBrokenCoders,1,[Enable broken/dangerous file formats support])
+ AC_DEFINE([EnableBrokenCoders],[1],[Enable broken/dangerous file formats support])
fi
-AM_CONDITIONAL(ENABLE_BROKEN_CODERS, test "$with_broken_coders" != 'no')
+AM_CONDITIONAL([ENABLE_BROKEN_CODERS],[test "$with_broken_coders" != 'no'])
# Add configure option --enable-maintainer-mode which enables dependency
# checking and generation useful to package maintainers. This is made an
AM_MAINTAINER_MODE
# Enable prof-based profiling support
-AC_ARG_ENABLE(prof,
+AC_ARG_ENABLE([prof],
AS_HELP_STRING([--enable-prof],
[enable 'prof' profiling support]),
[with_prof=$enableval],
[with_prof='no'])
# Enable gprof-based profiling support
-AC_ARG_ENABLE(gprof,
+AC_ARG_ENABLE([gprof],
AS_HELP_STRING([--enable-gprof],
[enable 'gprof' profiling support]),
[with_gprof=$enableval],
[with_gprof='no'])
# Enable gcov-based profiling support
-AC_ARG_ENABLE(gcov,
+AC_ARG_ENABLE([gcov],
AS_HELP_STRING([--enable-gcov],
[enable 'gcov' profiling support]),
[with_gcov=$enableval],
fi
# Enable prefixing library symbols with a common string
-AC_ARG_ENABLE(symbol-prefix,
+AC_ARG_ENABLE([symbol-prefix],
AS_HELP_STRING([--enable-symbol-prefix],
[enable prefixing library symbols with "Gm"]),
[with_symbol_prefix=$enableval],
[with_symbol_prefix='no'])
if test "$with_symbol_prefix" != 'no'
then
- AC_DEFINE(PREFIX_MAGICK_SYMBOLS,1,[Prefix Magick library symbols with a common string.])
+ AC_DEFINE([PREFIX_MAGICK_SYMBOLS],[1],[Prefix Magick library symbols with a common string.])
DISTCHECK_CONFIG_FLAGS="${DISTCHECK_CONFIG_FLAGS} --enable-symbol-prefix "
fi
# Enable ImageMagick utilities compatibility shortcuts (default no)
-AC_ARG_ENABLE(magick-compat,
+AC_ARG_ENABLE([magick-compat],
AS_HELP_STRING([--enable-magick-compat],
[install ImageMagick utility shortcuts]),
[with_magick_compat=$enableval],
[with_magick_compat='no'])
-AM_CONDITIONAL(MAGICK_COMPAT, test "$with_magick_compat" != 'no')
+AM_CONDITIONAL([MAGICK_COMPAT],[test "$with_magick_compat" != 'no'])
# Number of bits in a Quantum
-AC_ARG_WITH(quantum-depth,
+AC_ARG_WITH([quantum-depth],
AS_HELP_STRING([--with-quantum-depth],
[number of bits in a pixel quantum (default 8)]),
[with_quantum_depth=$withval],
8 ) ;;
16 ) ;;
32 ) ;;
- * ) AC_MSG_ERROR("Pixel quantum depth must have value of 8, 16, or 32") ;;
+ * ) AC_MSG_ERROR([Pixel quantum depth must have value of 8, 16, or 32]) ;;
esac
QuantumDepth="$with_quantum_depth"
-AC_DEFINE_UNQUOTED(QuantumDepth,$QuantumDepth,[Number of bits in a pixel Quantum (8/16/32)])
-AC_SUBST(QuantumDepth)dnl
+AC_DEFINE_UNQUOTED([QuantumDepth],[$QuantumDepth],[Number of bits in a pixel Quantum (8/16/32)])
+AC_SUBST([QuantumDepth])dnl
# Enable QuantumDepth in shared library names
-AC_ARG_ENABLE(quantum-library-names,
+AC_ARG_ENABLE([quantum-library-names],
AS_HELP_STRING([--enable-quantum-library-names],
[shared library name includes quantum
depth to allow shared libraries with
then
MAGICK_LT_RELEASE_OPTS="-release Q${QuantumDepth}"
fi
-AC_SUBST(MAGICK_LT_RELEASE_OPTS)
+AC_SUBST([MAGICK_LT_RELEASE_OPTS])
# Disable/Enable support for full delegate paths in delegates.mgk
-AC_ARG_WITH(frozenpaths,
+AC_ARG_WITH([frozenpaths],
AS_HELP_STRING([--with-frozenpaths],
[enable frozen delegate paths]),
[with_frozenpaths=$withval],
[with_frozenpaths='no'])
# Enable build/install of Magick++
-AC_ARG_WITH(magick-plus-plus,
+AC_ARG_WITH([magick-plus-plus],
AS_HELP_STRING([--without-magick-plus-plus],
[disable build/install of Magick++]),
[with_magick_plus_plus=$withval],
[with_magick_plus_plus='yes'])
# Enable build/install of PerlMagick.
-AC_ARG_WITH(perl,
+AC_ARG_WITH([perl],
AS_HELP_STRING([--with-perl@<:@=PERL@:>@],
[enable build/install of PerlMagick and optionally specify perl to use]),
[with_perl=$withval],
[with_perl='no'])
# Options to pass when configuring PerlMagick
-AC_ARG_WITH(perl-options,
+AC_ARG_WITH([perl-options],
AS_HELP_STRING([--with-perl-options=OPTIONS],
[options to pass on command-line when
generating PerlMagick's Makefile from Makefile.PL]),
[PERL_MAKE_OPTIONS=$withval])
-AC_SUBST(PERL_MAKE_OPTIONS)
+AC_SUBST([PERL_MAKE_OPTIONS])
# Disable BZLIB (bzip2 library)
-AC_ARG_WITH(bzlib,
+AC_ARG_WITH([bzlib],
AS_HELP_STRING([--without-bzlib],
[disable BZLIB support]),
[with_bzlib=$withval],
fi
# Disable Display Postscript.
-AC_ARG_WITH(dps,
+AC_ARG_WITH([dps],
AS_HELP_STRING([--without-dps],
[disable Display Postscript support]),
[with_dps=$withval],
fi
# Enable FlashPIX.
-AC_ARG_WITH(fpx,
+AC_ARG_WITH([fpx],
AS_HELP_STRING([--with-fpx],
[enable FlashPIX support]),
[with_fpx=$withval],
DISTCHECK_CONFIG_FLAGS="${DISTCHECK_CONFIG_FLAGS} --with-fpx=$with_fpx "
fi
+# Enable Windows lgdi32 library
+AC_ARG_WITH([gdi32],
+ AS_HELP_STRING([--without-gdi32],
+ [disable Windows gdi32 support]),
+ [with_gdi32=$withval],
+ [with_gdi32='yes'])
+if test "$with_gdi32" != 'yes' ; then
+ DISTCHECK_CONFIG_FLAGS="${DISTCHECK_CONFIG_FLAGS} --with-gdi32=$with_gdi32 "
+fi
+
+# Disable Ghostscript support.
+AC_ARG_WITH([gs],
+ AS_HELP_STRING([--without-gs],
+ [disable Ghostscript support]),
+ [with_gs=$withval],
+ [with_gs='yes'])
+if test "$with_gs" != 'yes' ; then
+ DISTCHECK_CONFIG_FLAGS="${DISTCHECK_CONFIG_FLAGS} --with-gs=$with_gs "
+fi
+if test "$with_gs" = 'yes' ; then
+ AC_DEFINE([HasGS],[1],[Enable use of Ghostscript])
+fi
+AM_CONDITIONAL([HasGS],[test "$with_gs" = 'yes'])
+
# Disable JBIG.
-AC_ARG_WITH(jbig,
+AC_ARG_WITH([jbig],
AS_HELP_STRING([--without-jbig],
[disable JBIG support]),
[with_jbig=$withval],
fi
# Disable WEBP.
-AC_ARG_WITH(webp,
+AC_ARG_WITH([webp],
AS_HELP_STRING([--without-webp],
[disable WEBP support]),
[with_webp=$withval],
fi
# Disable JPEG.
-AC_ARG_WITH(jpeg,
+AC_ARG_WITH([jpeg],
AS_HELP_STRING([--without-jpeg],
[disable JPEG support]),
[with_jpeg=$withval],
fi
# Disable JPEG Version 2.
-AC_ARG_WITH(jp2,
+AC_ARG_WITH([jp2],
AS_HELP_STRING([--without-jp2],
[disable JPEG v2 support]),
[with_jp2=$withval],
fi
# Disable LCMS2.
-AC_ARG_WITH(lcms2,
+AC_ARG_WITH([lcms2],
AS_HELP_STRING([--without-lcms2],
[disable lcms (v2.X) support]),
[with_lcms2=$withval],
fi
# Disable LZMA (lzma library)
-AC_ARG_WITH(lzma,
+AC_ARG_WITH([lzma],
AS_HELP_STRING([--without-lzma],
[disable LZMA support]),
[with_lzma=$withval],
fi
# # Disable MPEG.
-# AC_ARG_WITH(mpeg2,
+# AC_ARG_WITH([mpeg2],
# AS_HELP_STRING([--without-mpeg2],
# [disable MPEG support]),
# [with_mpeg2=$withval],
# [with_mpeg2='yes'])
# Disable PNG.
-AC_ARG_WITH(png,
+AC_ARG_WITH([png],
AS_HELP_STRING([--without-png],
[disable PNG support]),
[with_png=$withval],
fi
# Disable TIFF.
-AC_ARG_WITH(tiff,
+AC_ARG_WITH([tiff],
AS_HELP_STRING([--without-tiff],
[disable TIFF support]),
[with_tiff=$withval],
fi
# Disable TRIO.
-AC_ARG_WITH(trio,
+AC_ARG_WITH([trio],
AS_HELP_STRING([--without-trio],
[disable TRIO support]),
[with_trio=$withval],
fi
# Disable TTF.
-AC_ARG_WITH(ttf,
+AC_ARG_WITH([ttf],
AS_HELP_STRING([--without-ttf],
[disable TrueType support]),
[with_ttf=$withval],
fi
# Enable use of Google tcmalloc library.
-AC_ARG_WITH(tcmalloc,
+AC_ARG_WITH([tcmalloc],
AS_HELP_STRING([--with-tcmalloc],
[enable Google perftools tcmalloc (minimal) memory allocation library support]),
[with_tcmalloc=$withval],
fi
# Enable use of Solaris mtmalloc library.
-AC_ARG_WITH(mtmalloc,
+AC_ARG_WITH([mtmalloc],
AS_HELP_STRING([--with-mtmalloc],
[enable Solaris mtmalloc memory allocation library support]),
[with_mtmalloc=$withval],
# Enable use of Solaris libumem (object-caching memory allocation library).
# Available as a SourceForge project http://sourceforge.net/projects/umem/ or
# https://labs.omniti.com/trac/portableumem/.
-AC_ARG_WITH(umem,
+AC_ARG_WITH([umem],
AS_HELP_STRING([--with-umem],
[enable Solaris umem memory allocation library support]),
[with_umem=$withval],
fi
# Disable WMF.
-AC_ARG_WITH(wmf,
+AC_ARG_WITH([wmf],
AS_HELP_STRING([--without-wmf],
[disable WMF support]),
[with_wmf=$withval],
fi
# Set default font search path
-AC_ARG_WITH(fontpath,
+AC_ARG_WITH([fontpath],
AS_HELP_STRING([--with-fontpath=DIR],
[prepend to default font search path]),
[with_fontpath=$withval],
then
with_fontpath=''
else
- AC_DEFINE_UNQUOTED(MAGICK_FONT_PATH,"$with_fontpath",Define to prepend to default font search path.)
+ AC_DEFINE_UNQUOTED([MAGICK_FONT_PATH],["$with_fontpath"],[Define to prepend to default font search path.])
fi
if test "$with_fontpath=" != '' ; then
DISTCHECK_CONFIG_FLAGS="${DISTCHECK_CONFIG_FLAGS} --with-fontpath=$with_fontpath "
fi
# Set Ghostscript font directory
-AC_ARG_WITH(gs-font-dir,
+AC_ARG_WITH([gs-font-dir],
AS_HELP_STRING([--with-gs-font-dir=DIR],
[directory containing Ghostscript fonts]),
[with_gs_font_dir=$withval],
fi
# Set Windows font directory
-AC_ARG_WITH(windows-font-dir,
+AC_ARG_WITH([windows-font-dir],
AS_HELP_STRING([--with-windows-font-dir=DIR],
[directory containing MS-Windows fonts]),
[with_windows_font_dir=$withval],
fi
# Disable XML.
-AC_ARG_WITH(xml,
+AC_ARG_WITH([xml],
AS_HELP_STRING([--without-xml],
[disable XML support]),
[with_xml=$withval],
DISTCHECK_CONFIG_FLAGS="${DISTCHECK_CONFIG_FLAGS} --with-xml=$with_xml "
fi
-AC_ARG_WITH(zlib,
+AC_ARG_WITH([zlib],
AS_HELP_STRING([--without-zlib],
[disable ZLIB support]),
[with_zlib=$withval],
fi
# Disable Zstd (zstd library)
-AC_ARG_WITH(zstd,
+AC_ARG_WITH([zstd],
AS_HELP_STRING([--without-zstd],
[disable Zstd support]),
[with_zstd=$withval],
#
# Specify path to shared libstdc++ if not in normal location
#
-AC_ARG_WITH(libstdc,
+AC_ARG_WITH([libstdc],
AS_HELP_STRING([--with-libstdc=DIR],
[use libstdc++ in DIR (for GNU C++)]),
[if test "$withval" != no && test "$withval" != yes; then
LIBSTDCLDFLAGS="-L$withval"
fi
fi])
-AC_SUBST(LIBSTDCLDFLAGS)
+AC_SUBST([LIBSTDCLDFLAGS])
# Does gcc required -traditional?
AC_PROG_GCC_TRADITIONAL
MAGICK_API_PC_CPPFLAGS="$MAGICK_API_PC_CPPFLAGS -D_MT"
fi
fi
-AC_SUBST(MODULE_EXTRA_CPPFLAGS)
-AC_SUBST(LIBRARY_EXTRA_CPPFLAGS)
+AC_SUBST([MODULE_EXTRA_CPPFLAGS])
+AC_SUBST([LIBRARY_EXTRA_CPPFLAGS])
# Check standard headers
AC_HEADER_DIRENT
AC_C_CHAR_UNSIGNED
# Obtain size of an 'signed short' and define as SIZEOF_SIGNED_SHORT
-AC_CHECK_SIZEOF(signed short)
+AC_CHECK_SIZEOF([signed short])
# Obtain size of an 'unsigned short' and define as SIZEOF_UNSIGNED_SHORT
-AC_CHECK_SIZEOF(unsigned short)
+AC_CHECK_SIZEOF([unsigned short])
# Obtain size of an 'signed int' and define as SIZEOF_SIGNED_INT
-AC_CHECK_SIZEOF(signed int)
+AC_CHECK_SIZEOF([signed int])
# Obtain size of an 'unsigned int' and define as SIZEOF_UNSIGNED_INT
-AC_CHECK_SIZEOF(unsigned int)
+AC_CHECK_SIZEOF([unsigned int])
# Obtain size of a 'signed long' and define as SIZEOF_SIGNED_LONG
-AC_CHECK_SIZEOF(signed long)
+AC_CHECK_SIZEOF([signed long])
# Obtain size of a 'unsigned long' and define as SIZEOF_UNSIGNED_LONG
-AC_CHECK_SIZEOF(unsigned long)
+AC_CHECK_SIZEOF([unsigned long])
# Obtain size of a 'long long' and define as SIZEOF_SIGNED_LONG_LONG. If
# 'signed long long' is not supported then the value defined is zero.
-AC_CHECK_SIZEOF(signed long long)
+AC_CHECK_SIZEOF([signed long long])
# Obtain size of a 'unsigned long long' and define as
# SIZEOF_UNSIGNED_LONG_LONG. If 'unsigned long long' is not
# supported then the value defined is zero.
-AC_CHECK_SIZEOF(unsigned long long)
+AC_CHECK_SIZEOF([unsigned long long])
# Obtain size of off_t and define as SIZEOF_OFF_T
-AC_CHECK_SIZEOF(off_t)
+AC_CHECK_SIZEOF([off_t])
# Obtain size of size_t and define as SIZEOF_SIZE_T
-AC_CHECK_SIZEOF(size_t)
+AC_CHECK_SIZEOF([size_t])
# Obtain size of an unsigned int pointer and define as SIZEOF_UNSIGNED_INTP
-AC_CHECK_SIZEOF(unsigned int*)
-
-# If `signal.h' declares signal as returning a pointer to a function
-# returning void, define RETSIGTYPE to be void; otherwise, define it
-# to be int.
-AC_TYPE_SIGNAL
+AC_CHECK_SIZEOF([unsigned int*])
# Test for C compiler __func__ support
if test "$ac_cv_have_C__func__" != 'yes' ; then
-AC_CACHE_CHECK(for C compiler __func__ support, ac_cv_have_C__func__,
-[AC_TRY_COMPILE(
-,
-changequote(<<, >>)dnl
-<<
-const char *func=__func__;
+AC_CACHE_CHECK([for C compiler __func__ support], ac_cv_have_C__func__,
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
+[[const char *func=__func__;
return (func != 0 ? 0 : 1);
->>,
-changequote([, ])dnl
-ac_cv_have_C__func__='yes',
-ac_cv_have_C__func__='no')])
+]])],
+[ac_cv_have_C__func__='yes'],
+[ac_cv_have_C__func__='no'])])
if test "$ac_cv_have_C__func__" = 'yes' ; then
- AC_DEFINE(HAS_C__func__,1,Define if C compiler supports __func__)
+ AC_DEFINE([HAS_C__func__],[1],[Define if C compiler supports __func__])
fi
fi
# with Windows builds which don't use configure.
#
-AC_MSG_CHECKING(for signed 8-bit type)
+AC_MSG_CHECKING([for signed 8-bit type])
INT8_T='signed char'
-AC_MSG_RESULT($INT8_T)
-AC_SUBST(INT8_T)
+AC_MSG_RESULT([$INT8_T])
+AC_SUBST([INT8_T])
-AC_MSG_CHECKING(for unsigned 8-bit type)
+AC_MSG_CHECKING([for unsigned 8-bit type])
UINT8_T='unsigned char'
-AC_MSG_RESULT($UINT8_T)
-AC_SUBST(UINT8_T)
+AC_MSG_RESULT([$UINT8_T])
+AC_SUBST([UINT8_T])
-AC_MSG_CHECKING(for signed 16-bit type)
+AC_MSG_CHECKING([for signed 16-bit type])
INT16_T='signed short'
-AC_MSG_RESULT($INT16_T)
-AC_SUBST(INT16_T)
+AC_MSG_RESULT([$INT16_T])
+AC_SUBST([INT16_T])
-AC_MSG_CHECKING(for unsigned 16-bit type)
+AC_MSG_CHECKING([for unsigned 16-bit type])
UINT16_T='unsigned short'
-AC_MSG_RESULT($UINT16_T)
-AC_SUBST(UINT16_T)
+AC_MSG_RESULT([$UINT16_T])
+AC_SUBST([UINT16_T])
-AC_MSG_CHECKING(for signed 32-bit type)
+AC_MSG_CHECKING([for signed 32-bit type])
INT32_T='none'
INT32_F='none'
if test $ac_cv_sizeof_signed_int -eq 4
INT32_T='signed long'
INT32_F='"l"'
fi
-AC_MSG_RESULT($INT32_T)
-AC_SUBST(INT32_T)
-AC_SUBST(INT32_F)
+AC_MSG_RESULT([$INT32_T])
+AC_SUBST([INT32_T])
+AC_SUBST([INT32_F])
-AC_MSG_CHECKING(for unsigned 32-bit type)
+AC_MSG_CHECKING([for unsigned 32-bit type])
UINT32_T='none'
UINT32_F='none'
if test $ac_cv_sizeof_unsigned_int -eq 4
UINT32_T='unsigned long'
UINT32_F='"l"'
fi
-AC_MSG_RESULT($UINT32_T)
-AC_SUBST(UINT32_T)
-AC_SUBST(UINT32_F)
+AC_MSG_RESULT([$UINT32_T])
+AC_SUBST([UINT32_T])
+AC_SUBST([UINT32_F])
-AC_MSG_CHECKING(for signed 64-bit type)
+AC_MSG_CHECKING([for signed 64-bit type])
INT64_T='none'
INT64_F='none'
if test $ac_cv_sizeof_signed_long -eq 8
INT64_F='"I64"'
;;
esac
-AC_MSG_RESULT($INT64_T)
-AC_SUBST(INT64_T)
-AC_SUBST(INT64_F)
+AC_MSG_RESULT([$INT64_T])
+AC_SUBST([INT64_T])
+AC_SUBST([INT64_F])
-AC_MSG_CHECKING(for unsigned 64-bit type)
+AC_MSG_CHECKING([for unsigned 64-bit type])
UINT64_T='none'
UINT64_F='none'
if test $ac_cv_sizeof_unsigned_long -eq 8
UINT64_F='"I64"'
;;
esac
-AC_MSG_RESULT($UINT64_T)
-AC_SUBST(UINT64_T)
-AC_SUBST(UINT64_F)
+AC_MSG_RESULT([$UINT64_T])
+AC_SUBST([UINT64_T])
+AC_SUBST([UINT64_F])
-AC_MSG_CHECKING(for unsigned maximum type)
+AC_MSG_CHECKING([for unsigned maximum type])
UINTMAX_T='none'
UINTMAX_F='none'
if test "$UINT64_T" != 'none'
UINTMAX_T=$UINT32_T
UINTMAX_F=$UINT32_F
fi
-AC_MSG_RESULT($UINTMAX_T)
-AC_SUBST(UINTMAX_T)
-AC_SUBST(UINTMAX_F)
+AC_MSG_RESULT([$UINTMAX_T])
+AC_SUBST([UINTMAX_T])
+AC_SUBST([UINTMAX_F])
-AC_MSG_CHECKING(for pointer difference type)
+AC_MSG_CHECKING([for pointer difference type])
UINTPTR_T='none'
UINTPTR_F='none'
if test $ac_cv_sizeof_unsigned_long -eq $ac_cv_sizeof_unsigned_intp
UINTPTR_T='unsigned long long'
UINTPTR_F='"ll"'
fi
-AC_MSG_RESULT($UINTPTR_T)
-AC_SUBST(UINTPTR_T)
-AC_SUBST(UINTPTR_F)
+AC_MSG_RESULT([$UINTPTR_T])
+AC_SUBST([UINTPTR_T])
+AC_SUBST([UINTPTR_F])
MAGICK_SIZE_T='none'
MAGICK_SIZE_T_F='none'
MAGICK_SSIZE_T='none'
MAGICK_SSIZE_T_F='none'
-AC_MSG_CHECKING(for size_t format specification)
+AC_MSG_CHECKING([for size_t format specification])
if test $ac_cv_sizeof_size_t -eq $ac_cv_sizeof_unsigned_long
then
# Normal case for LP32 and LP64
;;
esac
fi
-AC_MSG_RESULT($MAGICK_SIZE_T_F)
-AC_SUBST(MAGICK_SIZE_T)
-AC_SUBST(MAGICK_SIZE_T_F)
-AC_SUBST(MAGICK_SSIZE_T)
-AC_SUBST(MAGICK_SSIZE_T_F)
+AC_MSG_RESULT([$MAGICK_SIZE_T_F])
+AC_SUBST([MAGICK_SIZE_T])
+AC_SUBST([MAGICK_SIZE_T_F])
+AC_SUBST([MAGICK_SSIZE_T])
+AC_SUBST([MAGICK_SSIZE_T_F])
########
# Check for /dev/urandom device
#
#######
-AC_CACHE_CHECK(for /dev/urandom,gm_cv_dev_urandom,
+AC_CACHE_CHECK([for /dev/urandom],gm_cv_dev_urandom,
[ gm_cv_dev_urandom=no
if test -c /dev/urandom
then
fi])
if test "${gm_cv_dev_urandom}" = yes
then
- AC_DEFINE(HAVE_DEV_URANDOM,1,[Have a /dev/urandom device for producing random bytes])
+ AC_DEFINE([HAVE_DEV_URANDOM],[1],[Have a /dev/urandom device for producing random bytes])
fi
########
MAGICK_PHYSICAL_MEMORY_COMMAND=''
case "${host}" in
*-*-freebsd* | *-apple-darwin*)
- AC_PATH_PROG(SysCtlDelegate,sysctl,)
+ AC_PATH_PROG([SysCtlDelegate],[sysctl],[])
if test "${SysCtlDelegate}X" != 'X'
then
# "sysctl -n hw.physmem" became available in FreeBSD 2.0
esac
if test "${MAGICK_PHYSICAL_MEMORY_COMMAND}X" != 'X'
then
- AC_DEFINE_UNQUOTED(MAGICK_PHYSICAL_MEMORY_COMMAND,
- "${MAGICK_PHYSICAL_MEMORY_COMMAND}",
+ AC_DEFINE_UNQUOTED([MAGICK_PHYSICAL_MEMORY_COMMAND],
+ ["${MAGICK_PHYSICAL_MEMORY_COMMAND}"],
[Command which returns total physical memory in bytes])
fi
then
OLIBS="$LIBS"
LIBS=''
- AC_LANG_PUSH(C++)
+ AC_LANG_PUSH([C++])
# Full set of headers used ...
# algorithm cctype cerrno cmath cstdio cstdlib cstring ctime exception
# functional iomanip iosfwd iostream iterator list string strstream utility
- AC_LANG_CPLUSPLUS
+ AC_LANG([C++])
AC_PROG_CXX
AC_CXX_BOOL
AC_CXX_CONST_CAST
# Test for C++ compiler __func__ support
if test "$ac_cv_have_CPP__func__" != 'yes' ; then
AC_CACHE_CHECK(for C++ compiler __func__ support, ac_cv_have_CPP__func__,
- [AC_TRY_COMPILE(
- ,
- changequote(<<, >>)dnl
- <<
- const char *func=__func__;
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
+ [[const char *func=__func__;
return (func != 0 ? 0 : 1);
- >>,
- changequote([, ])dnl
- ac_cv_have_CPP__func__='yes',
- ac_cv_have_CPP__func__='no')])
+ ]])],
+ [ac_cv_have_CPP__func__='yes'],[ac_cv_have_CPP__func__='no'])])
if test "$ac_cv_have_CPP__func__" = 'yes' ; then
- AC_DEFINE(HAS_CPP__func__,1,Define if C++ compiler supports __func__)
+ AC_DEFINE([HAS_CPP__func__],[1],[Define if C++ compiler supports __func__])
fi
fi
AC_LANG_POP
- AC_MSG_CHECKING(whether C++ compiler is sufficient for Magick++)
+ AC_MSG_CHECKING([whether C++ compiler is sufficient for Magick++])
if \
test $ac_cv_cxx_bool = 'yes' && \
test $ac_cv_cxx_const_cast = 'yes' &&
else
have_magick_plus_plus='no (failed tests)'
fi
- AC_MSG_RESULT($have_magick_plus_plus)
+ AC_MSG_RESULT([$have_magick_plus_plus])
LIBS="$OLIBS"
fi
-AM_CONDITIONAL(WITH_MAGICK_PLUS_PLUS, test "$have_magick_plus_plus" = 'yes')
+AM_CONDITIONAL([WITH_MAGICK_PLUS_PLUS],[test "$have_magick_plus_plus" = 'yes'])
# Assume that delegate headers and libraries may reside under same
# directory as GraphicsMagick installation prefix.
#
# Find the X11 RGB database
#
-AC_CACHE_CHECK(for X11 configure files,gm_cv_x_configure,
+AC_CACHE_CHECK([for X11 configure files],[gm_cv_x_configure],
[# Look for the header file in a standard set of common directories.
# Check X11 before X11Rn because it is often a symlink to the current release.
for ac_dir in \
X11ConfigurePath=`$WinPathScript "$X11ConfigurePath=" 1`
;;
esac
-AC_DEFINE_UNQUOTED(X11ConfigurePath,"X11ConfigurePath",Location of X11 configure files)
+AC_DEFINE_UNQUOTED([X11ConfigurePath],["X11ConfigurePath"],[Location of X11 configure files])
#
# Find Posix threads library
then
case "${host_cpu}-${host_os}" in
*-freebsd*)
- MAGICK_CHECK_PTHREAD_LIB(c_r,PTHREAD_LIBS=-lc_r) ;;
+ MAGICK_CHECK_PTHREAD_LIB([c_r],[PTHREAD_LIBS=-lc_r]) ;;
esac
fi
LIB_THREAD="$PTHREAD_LIBS"
LIBS="$LIBS $LIB_THREAD"
fi
-AC_SUBST(LIB_THREAD)
+AC_SUBST([LIB_THREAD])
#
# Check for Google perftools tcmalloc library
LIB_UMEM=''
if test "$with_umem" != 'no'
then
- AC_MSG_CHECKING(for Solaris umem library support )
+ AC_MSG_CHECKING([for Solaris umem library support ])
AC_MSG_RESULT()
failed=0
passed=0
- AC_CHECK_HEADER(umem.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
- AC_CHECK_LIB(umem,umem_alloc,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_CHECK_LIB(umem,umem_free,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
+ AC_CHECK_HEADER([umem.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+ AC_CHECK_LIB([umem],[umem_alloc],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_CHECK_LIB([umem],[umem_free],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
if test $passed -gt 0
then
if test $failed -gt 0
else
LIB_UMEM='-lumem'
LIBS="$LIB_UMEM $LIBS"
- AC_DEFINE(HasUMEM,1,Define if you have umem memory allocation library)
+ AC_DEFINE([HasUMEM],[1],[Define if you have umem memory allocation library])
have_umem='yes'
fi
else
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT([no])
fi
AC_MSG_CHECKING([if Solaris umem memory allocation library is complete ])
AC_MSG_RESULT([$have_umem])
fi
-AM_CONDITIONAL(HasUMEM, test "$have_umem" = 'yes')
-AC_SUBST(LIB_UMEM)
+AM_CONDITIONAL([HasUMEM],[test "$have_umem" = 'yes'])
+AC_SUBST([LIB_UMEM])
#
# Check for Solaris-derived mtmalloc library
# Open64 (passes for GCC but uses different OpenMP implementation)
if test "x$LIB_OMP" = x ; then
if $CC --version 2>&1 | grep Open64 > /dev/null ; then
- AC_CHECK_LIB(openmp,omp_get_num_procs,LIB_OMP="-lopenmp",,)
+ AC_CHECK_LIB([openmp],[omp_get_num_procs],[LIB_OMP="-lopenmp"],,)
fi
fi
# Clang (passes for GCC but uses different OpenMP implementation)
if test "x$LIB_OMP" = x ; then
if $CC --version 2>&1 | grep clang > /dev/null ; then
- AC_CHECK_LIB(omp,GOMP_parallel_start,LIB_OMP="-lomp",,)
+ AC_CHECK_LIB([omp],[GOMP_parallel_start],[LIB_OMP="-lomp"],,)
fi
fi
# GCC
if test "x$LIB_OMP" = x ; then
- AC_CHECK_LIB(gomp,GOMP_parallel_start,LIB_OMP="-lgomp",,)
+ AC_CHECK_LIB([gomp],[GOMP_parallel_start],[LIB_OMP="-lgomp"],,)
fi
else
# Sun CC
if test "x$LIB_OMP" = x ; then
- AC_CHECK_LIB(mtsk,sunw_mp_register_warn,LIB_OMP="-lmtsk",,)
+ AC_CHECK_LIB([mtsk],[sunw_mp_register_warn],[LIB_OMP="-lmtsk"],,)
fi
# AIX xlc
if test "x$LIB_OMP" = x ; then
- AC_CHECK_LIB(xlsmp,_xlsmpFlush,LIB_OMP="-lxlsmp",,)
+ AC_CHECK_LIB([xlsmp],[_xlsmpFlush],[LIB_OMP="-lxlsmp"],,)
fi
# SGI IRIX 6.5 MIPSpro C/C++
if test "x$LIB_OMP" = x ; then
- AC_CHECK_LIB(mp,mp_destroy,LIB_OMP="-lmp",,)
+ AC_CHECK_LIB([mp],[mp_destroy],[LIB_OMP="-lmp"],,)
fi
fi
LIBS="$LIB_OMP $LIBS"
fi
-AC_SUBST(LIB_OMP)
+AC_SUBST([LIB_OMP])
#
# Find math library
#
LIB_MATH=''
-AC_CHECK_LIB(m,sqrt,LIB_MATH="-lm",,)
+AC_CHECK_LIB([m],[sqrt],[LIB_MATH="-lm"],,)
LIBS="$LIB_MATH $LIBS"
-AC_SUBST(LIB_MATH)
+AC_SUBST([LIB_MATH])
#
LIB_TRIO=''
if test "$ac_cv_func_vsnprintf" != 'yes' && test "$with_trio" != 'no'
then
- AC_MSG_CHECKING(for TRIO vsnprintf replacement)
- AC_CHECK_LIB(trio,trio_vsnprintf,have_trio='yes',,)
+ AC_MSG_CHECKING([for TRIO vsnprintf replacement])
+ AC_CHECK_LIB([trio],[trio_vsnprintf],[have_trio='yes'],,)
if test "$have_trio" = 'yes'
then
LIB_TRIO="-ltrio"
LIBS="$LIB_TRIO $LIBS"
- AC_DEFINE(HasTRIO,1,Define if you have TRIO vsnprintf replacement library)
- AC_MSG_RESULT(yes)
+ AC_DEFINE([HasTRIO],[1],[Define if you have TRIO vsnprintf replacement library])
+ AC_MSG_RESULT([yes])
else
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT([no])
fi
fi
-AC_SUBST(LIB_TRIO)
+AC_SUBST([LIB_TRIO])
#
else
LIB_LTDL='-lltdl'
LIBS="$LIB_LTDL $LIBS"
- AC_DEFINE(HasLTDL,1,[Define if using libltdl to support dynamically loadable modules])
+ AC_DEFINE([HasLTDL],[1],[Define if using libltdl to support dynamically loadable modules])
AC_MSG_RESULT([yes])
have_ltdl='yes'
fi
AC_MSG_FAILURE([libltdl is required by modules build],[1])
fi
fi
-AM_CONDITIONAL(WITH_LTDL, test "$have_ltdl" != 'no')
+AM_CONDITIONAL([WITH_LTDL],[test "$have_ltdl" != 'no'])
#
# Check for ZLIB
dnl PNG requires zlib so enable zlib check if PNG is requested
if test "$with_zlib" != 'no' || test "$with_png" != 'no'
then
- AC_MSG_CHECKING(for ZLIB support )
+ AC_MSG_CHECKING([for ZLIB support ])
AC_MSG_RESULT()
failed=0
passed=0
# PKG_CHECK_MODULES([ZLIB], [zlib], [], [])
- AC_CHECK_HEADER(zconf.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
- AC_CHECK_HEADER(zlib.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
- AC_CHECK_LIB(z,compress,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_CHECK_LIB(z,uncompress,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_CHECK_LIB(z,deflate,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_CHECK_LIB(z,inflate,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_CHECK_LIB(z,gzseek,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_CHECK_LIB(z,gztell,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_MSG_CHECKING(if ZLIB package is complete)
+ AC_CHECK_HEADER([zconf.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+ AC_CHECK_HEADER([zlib.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+ AC_CHECK_LIB([z],[compress],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_CHECK_LIB([z],[uncompress],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_CHECK_LIB([z],[deflate],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_CHECK_LIB([z],[inflate],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_CHECK_LIB([z],[gzseek],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_CHECK_LIB([z],[gztell],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_MSG_CHECKING([if ZLIB package is complete])
if test $passed -gt 0
then
if test $failed -gt 0
then
- AC_MSG_RESULT(no -- some components failed test)
+ AC_MSG_RESULT([no -- some components failed test])
have_zlib='no (failed tests)'
else
LIB_ZLIB='-lz'
LIBS="$LIB_ZLIB $LIBS"
- AC_DEFINE(HasZLIB,1,Define if you have zlib compression library)
- AC_MSG_RESULT(yes)
+ AC_DEFINE([HasZLIB],[1],[Define if you have zlib compression library])
+ AC_MSG_RESULT([yes])
have_zlib='yes'
fi
else
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT([no])
fi
fi
-AM_CONDITIONAL(HasZLIB, test "$have_zlib" = 'yes')
-AC_SUBST(LIB_ZLIB)
+AM_CONDITIONAL([HasZLIB],[test "$have_zlib" = 'yes'])
+AC_SUBST([LIB_ZLIB])
#
# Check for BZLIB
if test "$with_bzlib" != 'no'
then
LIB_BZLIB=''
- AC_MSG_CHECKING(for BZLIB support )
+ AC_MSG_CHECKING([for BZLIB support ])
AC_MSG_RESULT()
failed=0
passed=0
found_libbz=0
- AC_CHECK_HEADER(bzlib.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
- AC_CHECK_LIB(bz2,BZ2_bzDecompress,found_libbz=`expr $found_libbz + 1`,,)
+ AC_CHECK_HEADER([bzlib.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+ AC_CHECK_LIB([bz2],[BZ2_bzDecompress],[found_libbz=`expr $found_libbz + 1`],,)
if test "$native_win32_build" = 'yes'
then
# Under MinGW, libbz2 obfuscates its functions by declaring them
# somehow include bzlib.h during the test but Autoconf does not
# make that possible. We check for BZ2_decompress since that is
# one of the few functions exported from the DLL (very strange).
- AC_CHECK_LIB(bz2,_imp__BZ2_decompress,found_libbz=`expr $found_libbz + 1`,,)
+ AC_CHECK_LIB([bz2],[_imp__BZ2_decompress],[found_libbz=`expr $found_libbz + 1`],,)
fi
if test $found_libbz -gt 0
then
else
failed=`expr $failed + 1`
fi
- #AC_CHECK_LIB(bz2,BZ2_bzCompress,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- #AC_CHECK_LIB(bz2,BZ2_bzDecompress,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- #AC_CHECK_LIB(bz2,_imp__BZ2_decompress,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_MSG_CHECKING(if BZLIB package is complete)
+ #AC_CHECK_LIB([bz2],[BZ2_bzCompress],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ #AC_CHECK_LIB([bz2],[BZ2_bzDecompress],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ #AC_CHECK_LIB([bz2],[_imp__BZ2_decompress],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_MSG_CHECKING([if BZLIB package is complete])
if test $passed -gt 0
then
if test $failed -gt 0
then
- AC_MSG_RESULT(no -- some components failed test)
+ AC_MSG_RESULT([no -- some components failed test])
have_bzlib='no (failed tests)'
else
LIB_BZLIB='-lbz2'
LIBS="$LIB_BZLIB $LIBS"
- AC_DEFINE(HasBZLIB,1,Define if you have the bzip2 library)
- AC_MSG_RESULT(yes)
+ AC_DEFINE([HasBZLIB],[1],[Define if you have the bzip2 library])
+ AC_MSG_RESULT([yes])
have_bzlib='yes'
fi
else
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT([no])
fi
fi
-AM_CONDITIONAL(HasBZLIB, test "$have_bzlib" = 'yes')
-AC_SUBST(LIB_BZLIB)
+AM_CONDITIONAL([HasBZLIB],[test "$have_bzlib" = 'yes'])
+AC_SUBST([LIB_BZLIB])
#
# Check for LZMA
LIB_LZMA=''
if test "$with_lzma" != 'no'
then
- AC_MSG_CHECKING(for LZMA support )
+ AC_MSG_CHECKING([for LZMA support ])
AC_MSG_RESULT()
# PKG_CHECK_MODULES([LZMA], [liblzma], [], [])
failed=0
passed=0
- AC_CHECK_HEADER(lzma.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
- AC_CHECK_LIB(lzma,lzma_code,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_MSG_CHECKING(if LZMA package is complete)
+ AC_CHECK_HEADER([lzma.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+ AC_CHECK_LIB([lzma],[lzma_code],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_MSG_CHECKING([if LZMA package is complete])
if test $passed -gt 0
then
if test $failed -gt 0
then
- AC_MSG_RESULT(no -- some components failed test)
+ AC_MSG_RESULT([no -- some components failed test])
have_lzma='no (failed tests)'
else
LIB_LZMA='-llzma'
LIBS="$LIB_LZMA $LIBS"
- AC_DEFINE(HasLZMA,1,Define if you have lzma compression library)
- AC_MSG_RESULT(yes)
+ AC_DEFINE([HasLZMA],[1],[Define if you have lzma compression library])
+ AC_MSG_RESULT([yes])
have_lzma='yes'
fi
else
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT([no])
fi
fi
-AM_CONDITIONAL(HasLZMA, test "$have_lzma" = 'yes')
-AC_SUBST(LIB_LZMA)
+AM_CONDITIONAL([HasLZMA],[test "$have_lzma" = 'yes'])
+AC_SUBST([LIB_LZMA])
#
# Check for Zstd
LIB_ZSTD=''
if test "$with_zstd" != 'no'
then
- AC_MSG_CHECKING(for Zstd support )
+ AC_MSG_CHECKING([for Zstd support ])
AC_MSG_RESULT()
failed=0
passed=0
# PKG_CHECK_MODULES([ZSTD], [libzstd], [], [])
- AC_CHECK_HEADER(zstd.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
- AC_CHECK_LIB(zstd,ZSTD_createDStream,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_MSG_CHECKING(if Zstd package is complete)
+ AC_CHECK_HEADER([zstd.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+ AC_CHECK_LIB([zstd],[ZSTD_createDStream],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_MSG_CHECKING([if Zstd package is complete])
if test $passed -gt 0
then
if test $failed -gt 0
then
- AC_MSG_RESULT(no -- some components failed test)
+ AC_MSG_RESULT([no -- some components failed test])
have_zstd='no (failed tests)'
else
LIB_ZSTD='-lzstd'
LIBS="$LIB_ZSTD $LIBS"
- AC_DEFINE(HasZSTD,1,Define if you have zstd compression library)
- AC_MSG_RESULT(yes)
+ AC_DEFINE([HasZSTD],[1],[Define if you have zstd compression library])
+ AC_MSG_RESULT([yes])
have_zstd='yes'
fi
else
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT([no])
fi
fi
-AM_CONDITIONAL(HasZSTD, test "$have_zstd" = 'yes')
-AC_SUBST(LIB_ZSTD)
+AM_CONDITIONAL([HasZSTD],[test "$have_zstd" = 'yes'])
+AC_SUBST([LIB_ZSTD])
#
# Find the X11 include and library directories.
LIBS="$LIB_X11 $LIBS"
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
- AC_DEFINE(HasX11,1,Define if you have X11 library)dnl
+ AC_DEFINE([HasX11],[1],[Define if you have X11 library])dnl
#
# Check for X11 shared memory extension
if test "$have_shmctl" = 'yes'
then
- AC_CHECK_LIB([Xext],[XShmAttach],[LIB_XEXT='-lXext' ; AC_DEFINE(HasSharedMemory,1,X11 server supports shared memory extension)],[],[])
+ AC_CHECK_LIB([Xext],[XShmAttach],[LIB_XEXT='-lXext' ; AC_DEFINE([HasSharedMemory],[1],[X11 server supports shared memory extension])],[],[])
fi
#
# Check for X11 shape extension
#
- AC_CHECK_LIB([Xext],[XShapeCombineMask],[LIB_XEXT='-lXext' ; AC_DEFINE(HasShape,1,X11 server supports shape extension)],[],[])
+ AC_CHECK_LIB([Xext],[XShapeCombineMask],[LIB_XEXT='-lXext' ; AC_DEFINE([HasShape],[1],[X11 server supports shape extension])],[],[])
LIBS="$LIB_XEXT $LIBS"
fi
else
have_x='no'
fi
-AM_CONDITIONAL(HasX11, test "$have_x" = 'yes')
-AC_SUBST(LIB_X11)
-AC_SUBST(LIB_XEXT)
+AM_CONDITIONAL([HasX11],[test "$have_x" = 'yes'])
+AC_SUBST([LIB_X11])
+AC_SUBST([LIB_XEXT])
#
# If profiling, then check for -ldl and dlopen (required for Solaris & gcc)
LIB_DL=''
if test "$with_profiling" = 'yes'
then
- AC_CHECK_LIB(dl,dlopen,LIB_DL='-ldl',,)
+ AC_CHECK_LIB([dl],[dlopen],[LIB_DL='-ldl'],,)
LIBS="$LIB_DL $LIBS"
fi
-AC_SUBST(LIB_DL)
+AC_SUBST([LIB_DL])
#
# Check for Display Postscript
passed=0
O_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS -I${ac_x_includes}/X11"
- AC_CHECK_HEADER(DPS/dpsXclient.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
+ AC_CHECK_HEADER([DPS/dpsXclient.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
# DPS issues:
# XFree86-4.x needs -lXt to provide XtMalloc for -ldps.
# Cygwin doesn't deliver -lXt as a DLL, which prevents a DLL build.
# GraphicsMagick itself doesn't use -lXt.
have_libdps='no'
LIBDPS_XT=''
- AC_CHECK_LIB(dps,DPSInitialize,have_libdps='yes',have_libdps='no',)
+ AC_CHECK_LIB([dps],[DPSInitialize],[have_libdps='yes'],[have_libdps='no'],)
if test "$have_libdps" != 'yes'
then
# Unset cache variable so we can try again.
unset ac_cv_lib_dps_DPSInitialize
- AC_CHECK_LIB(dps,DPSInitialize,have_libdps='yes',have_libdps='no',-lXt)
+ AC_CHECK_LIB([dps],[DPSInitialize],[have_libdps='yes'],[have_libdps='no'],[-lXt])
if test "$have_libdps" = 'yes'
then
LIBDPS_XT='-lXt'
else
failed=`expr $failed + 1`
fi
- AC_CHECK_LIB(dpstk,XDPSPixelsPerPoint,passed=`expr $passed + 1`,failed=`expr $failed + 1`,-ldps $LIBDPS_XT)
- AC_MSG_CHECKING(if DPS package is complete)
+ AC_CHECK_LIB([dpstk],[XDPSPixelsPerPoint],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],[-ldps $LIBDPS_XT])
+ AC_MSG_CHECKING([if DPS package is complete])
if test $passed -gt 0
then
if test $failed -gt 0
else
LIB_DPS="-ldpstk -ldps ${LIBDPS_XT}"
LIBS="$LIB_DPS $LIBS"
- AC_DEFINE(HasDPS,1,Define if you have Display Postscript)
- AC_MSG_RESULT(yes)
+ AC_DEFINE([HasDPS],[1],[Define if you have Display Postscript])
+ AC_MSG_RESULT([yes])
have_dps='yes'
fi
else
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT([no])
CPPFLAGS=$O_CPPFLAGS
fi
fi
-AM_CONDITIONAL(HasDPS, test "$have_dps" = 'yes')
-AC_SUBST(LIB_DPS)
+AM_CONDITIONAL([HasDPS],[test "$have_dps" = 'yes'])
+AC_SUBST([LIB_DPS])
#
# Check for FlashPIX
LIB_FPX=''
if test "$with_fpx" != 'no'
then
- AC_MSG_CHECKING(for FlashPIX components )
+ AC_MSG_CHECKING([for FlashPIX components ])
AC_MSG_RESULT()
failed=0
passed=0
- AC_LANG_PUSH(C++)
- AC_CHECK_HEADER(fpxlib.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
- AC_CHECK_LIB(fpx,FPX_OpenImageByFilename,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
+ AC_LANG_PUSH([C++])
+ AC_CHECK_HEADER([fpxlib.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+ AC_CHECK_LIB([fpx],[FPX_OpenImageByFilename],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
AC_LANG_POP
- AC_MSG_CHECKING(if FlashPIX package is complete)
+ AC_MSG_CHECKING([if FlashPIX package is complete])
if test $passed -gt 0
then
if test $failed -gt 0
then
- AC_MSG_RESULT(no -- some components failed test)
+ AC_MSG_RESULT([no -- some components failed test])
have_fpx='no (failed tests)'
else
LIB_FPX='-lfpx'
# LIBS="$LIB_FPX $LIBS"
- AC_DEFINE(HasFPX,1,Define if you have FlashPIX library)
- AC_MSG_RESULT(yes)
+ AC_DEFINE([HasFPX],[1],[Define if you have FlashPIX library])
+ AC_MSG_RESULT([yes])
have_fpx='yes'
PERLMAINCC="$CXX"
fi
else
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT([no])
fi
fi
-AM_CONDITIONAL(HasFPX, test "$have_fpx" = 'yes')
-AC_SUBST(LIB_FPX)
+AM_CONDITIONAL([HasFPX],[test "$have_fpx" = 'yes'])
+AC_SUBST([LIB_FPX])
#
# Check for LCMS v2
# PKG_CHECK_MODULES([LCMS2], [lcms2], [], [])
# Check for <lcms2.h>
- AC_CHECK_HEADER(lcms2.h,have_lcms_header='yes',,)
+ AC_CHECK_HEADER([lcms2.h],[have_lcms_header='yes'],,)
if test "$have_lcms_header" = 'yes'
then
- AC_DEFINE(HAVE_LCMS2_H,1,Define if you have the <lcms2.h> header file.)
+ AC_DEFINE([HAVE_LCMS2_H],[1],[Define if you have the <lcms2.h> header file.])
passed=`expr $passed + 1`
fi
# Check for <lcms2/lcms2.h)
if test "$have_lcms_header" != 'yes'
then
- AC_CHECK_HEADER(lcms2/lcms2.h,have_lcms_header='yes',,)
+ AC_CHECK_HEADER([lcms2/lcms2.h],[have_lcms_header='yes'],,)
if test "$have_lcms_header" = 'yes'
then
passed=`expr $passed + 1`
- AC_DEFINE(HAVE_LCMS2_LCMS2_H,1,Define if you have the <lcms2/lcms2.h> header file.)
+ AC_DEFINE([HAVE_LCMS2_LCMS2_H],[1],[Define if you have the <lcms2/lcms2.h> header file.])
fi
fi
failed=`expr $failed + 1`
fi
- AC_CHECK_LIB(lcms2,cmsSetLogErrorHandler,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_MSG_CHECKING(if LCMS v2 package is complete)
+ AC_CHECK_LIB([lcms2],[cmsSetLogErrorHandler],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_MSG_CHECKING([if LCMS v2 package is complete])
if test $passed -gt 0
then
if test $failed -gt 0
then
- AC_MSG_RESULT(no -- some components failed test)
+ AC_MSG_RESULT([no -- some components failed test])
have_lcms2='no (failed tests)'
else
LIB_LCMS='-llcms2'
LIBS="$LIB_LCMS $LIBS"
#AC_DEFINE(HasLCMS2,1,Define if you have LCMS v2 library)
- AC_MSG_RESULT(yes)
+ AC_MSG_RESULT([yes])
have_lcms2='yes'
fi
else
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT([no])
fi
fi
-AM_CONDITIONAL(HasLCMS, test "$have_lcms2" = 'yes')
+AM_CONDITIONAL([HasLCMS],[test "$have_lcms2" = 'yes'])
if test "$have_lcms2" = 'yes'
then
- AC_DEFINE(HasLCMS,1,[Define if you have LCMS (v2.0 or later) library])
+ AC_DEFINE([HasLCMS],[1],[Define if you have LCMS (v2.0 or later) library])
fi
-AC_SUBST(LIB_LCMS)
+AC_SUBST([LIB_LCMS])
have_png='no'
LIB_PNG=''
#
# Check for PNG delegate library.
#
- AC_ARG_WITH(png,
- [AC_HELP_STRING([--without-png],
- [disable PNG support])],
+ AC_ARG_WITH([png],
+ [AS_HELP_STRING([--without-png],[disable PNG support])],
[with_png=$withval],
[with_png='yes'])
# PKG_CHECK_MODULES([PNG], [libpng], [], [])
if test "$with_png" != 'no' ; then
- AC_MSG_CHECKING(for PNG support )
+ AC_MSG_CHECKING([for PNG support ])
AC_MSG_RESULT()
failed=0
passed=0
- AC_CHECK_HEADER(png.h,passed=`expr $passed + 1`,
- failed=`expr $failed + 1`,)
+ AC_CHECK_HEADER([png.h],[passed=`expr $passed + 1`],
+ [failed=`expr $failed + 1`],)
if test $passed -gt 0; then
for var in 7 6 5 4 2 '' ; do
passed=0
if test "$with_png" = 'yes' -o "$with_png" = "libpng1${var}" ; then
if test "${pnglib}" != 'png' ; then
- AC_MSG_CHECKING(for LIBPNG1${var} support )
- AC_TRY_COMPILE(
-#include <stdio.h>
+ AC_MSG_CHECKING([for LIBPNG1${var} support ])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>
#include <stdlib.h>
#include <png.h>
-,
-changequote(<<, >>)dnl
-<<
-#if PNG_LIBPNG_VER_MINOR != ${var}
+]],
+[[#if PNG_LIBPNG_VER_MINOR != ${var}
#error LIBPNG library must be version 1${var}!
Kaboom, Kaboom
#endif
return 0;
->>,
- changequote([, ])dnl
- ac_cv_libpng_ok='yes',
- ac_cv_libpng_ok='no')
+]])],[ac_cv_libpng_ok='yes'],[ac_cv_libpng_ok='no'])
if test "$ac_cv_libpng_ok" = 'yes' ; then
passed=`expr $passed + 1`
- AC_MSG_RESULT(yes)
+ AC_MSG_RESULT([yes])
else
failed=`expr $failed + 1`
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT([no])
fi
else
passed=`expr $passed + 1`
- AC_MSG_RESULT(yes)
+ AC_MSG_RESULT([yes])
fi
fi
if test $passed -gt 0 -a $failed -le 0
then
if test "1${var}" = '15' ; then
- AC_CHECK_LIB(png15,png_get_io_ptr,passed=`expr $passed + 1`,
- failed=`expr $failed + 1`,)
- AC_CHECK_LIB(png15,png_longjmp,passed=`expr $passed + 1`,
- failed=`expr $failed + 1`,)
+ AC_CHECK_LIB([png15],[png_get_io_ptr],[passed=`expr $passed + 1`],
+ [failed=`expr $failed + 1`],)
+ AC_CHECK_LIB([png15],[png_longjmp],[passed=`expr $passed + 1`],
+ [failed=`expr $failed + 1`],)
fi
if test "1${var}" = '14' ; then
- AC_CHECK_LIB(png14,png_get_io_ptr,passed=`expr $passed + 1`,
- failed=`expr $failed + 1`,)
- AC_CHECK_LIB(png14,png_get_io_state,passed=`expr $passed + 1`,
- failed=`expr $failed + 1`,)
+ AC_CHECK_LIB([png14],[png_get_io_ptr],[passed=`expr $passed + 1`],
+ [failed=`expr $failed + 1`],)
+ AC_CHECK_LIB([png14],[png_get_io_state],[passed=`expr $passed + 1`],
+ [failed=`expr $failed + 1`],)
fi
if test "1${var}" = '12' ; then
- AC_CHECK_LIB(png12,png_get_io_ptr,passed=`expr $passed + 1`,
- failed=`expr $failed + 1`,)
+ AC_CHECK_LIB([png12],[png_get_io_ptr],[passed=`expr $passed + 1`],
+ [failed=`expr $failed + 1`],)
fi
if test "1${var}" = '1' ; then
- AC_CHECK_LIB(png,png_get_io_ptr,passed=`expr $passed + 1`,
- failed=`expr $failed + 1`,)
+ AC_CHECK_LIB([png],[png_get_io_ptr],[passed=`expr $passed + 1`],
+ [failed=`expr $failed + 1`],)
fi
if test $passed -gt 0 -a $failed -le 0 ; then
- AC_MSG_CHECKING(if ${pnglib} package is complete)
+ AC_MSG_CHECKING([if ${pnglib} package is complete])
if test $passed -gt 0 ; then
if test $failed -gt 0 ; then
- AC_MSG_RESULT(no -- some components failed test)
+ AC_MSG_RESULT([no -- some components failed test])
have_png='no (failed tests)'
else
LIB_PNG="-l${pnglib}"
LIBS="$LIB_PNG $LIBS"
- AC_DEFINE(HasPNG,1,Define if you have PNG library)
- AC_MSG_RESULT(yes)
+ AC_DEFINE([HasPNG],[1],[Define if you have PNG library])
+ AC_MSG_RESULT([yes])
have_png='yes'
fi
fi
fi
fi
else
- AC_MSG_RESULT(PNG requires zlib support)
+ AC_MSG_RESULT([PNG requires zlib support])
fi
-AM_CONDITIONAL(HasPNG, test "$have_png" = 'yes')
-AC_SUBST(LIB_PNG)
+AM_CONDITIONAL([HasPNG],[test "$have_png" = 'yes'])
+AC_SUBST([LIB_PNG])
#
# Check for JPEG
LIB_JPEG=''
if test "$with_jpeg" != 'no'
then
- AC_MSG_CHECKING(for JPEG support )
+ AC_MSG_CHECKING([for JPEG support ])
AC_MSG_RESULT()
failed=0
passed=0
# PKG_CHECK_MODULES([JPEG], [libturbojpeg, libjpeg], [], [])
- AC_CHECK_HEADER(jconfig.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
- AC_CHECK_HEADER(jerror.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
- AC_CHECK_HEADER(jmorecfg.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
- AC_CHECK_HEADER(jpeglib.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
- AC_CHECK_LIB(jpeg,jpeg_read_header,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
-
-# Test for compatible JPEG library
-if test "$ac_cv_jpeg_version_ok" != 'yes' ; then
-AC_CACHE_CHECK(for JPEG library is version 6b or later, ac_cv_jpeg_version_ok,
-[AC_TRY_COMPILE(
-#include <stdio.h>
-#include <stdlib.h>
-#include <jpeglib.h>
-,
-changequote(<<, >>)dnl
-<<
-#if JPEG_LIB_VERSION < 62
-#error IJG JPEG library must be version 6b or newer!
-Kaboom, Kaboom
-#endif
-return 0;
->>,
-changequote([, ])dnl
-ac_cv_jpeg_version_ok='yes',
-ac_cv_jpeg_version_ok='no')])
-if test "$ac_cv_jpeg_version_ok" = 'yes' ; then
- passed=`expr $passed + 1`
-else
- failed=`expr $failed + 1`
-fi
-fi
- AC_MSG_CHECKING(if JPEG package is complete)
+ AC_CHECK_HEADER([jconfig.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+ AC_CHECK_HEADER([jerror.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+ AC_CHECK_HEADER([jmorecfg.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+ AC_CHECK_HEADER([jpeglib.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+ AC_CHECK_LIB([jpeg],[jpeg_read_header],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_MSG_CHECKING([if JPEG package is complete])
if test $passed -gt 0
then
if test $failed -gt 0
then
- AC_MSG_RESULT(no -- some components failed test)
+ AC_MSG_RESULT([no -- some components failed test])
have_jpeg='no (failed tests)'
else
LIB_JPEG='-ljpeg'
LIBS="$LIB_JPEG $LIBS"
- AC_DEFINE(HasJPEG,1,Define if you have JPEG library)
- AC_MSG_RESULT(yes)
+ AC_DEFINE([HasJPEG],[1],[Define if you have JPEG library])
+ AC_MSG_RESULT([yes])
have_jpeg='yes'
fi
else
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT([no])
fi
fi
-AM_CONDITIONAL(HasJPEG, test "$have_jpeg" = 'yes')
-AC_SUBST(LIB_JPEG)
+AM_CONDITIONAL([HasJPEG],[test "$have_jpeg" = 'yes'])
+AC_SUBST([LIB_JPEG])
#
-# Check for JPEG Version 2
+# Check for JPEG Version 2 (Jasper)
#
have_jp2='no'
LIB_JP2=''
if test "$with_jp2" != 'no'
then
- AC_MSG_CHECKING(for JPEG version 2 support )
+ AC_MSG_CHECKING([for JPEG version 2 support ])
AC_MSG_RESULT()
failed=0
passed=0
- AC_CHECK_HEADER(jasper/jasper.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
- AC_CHECK_LIB(jasper,jas_stream_fopen,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_MSG_CHECKING(if JPEG version 2 support package is complete)
+ AC_CHECK_HEADER([jasper/jasper.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+ AC_CHECK_LIB([jasper],[jas_stream_fopen],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_MSG_CHECKING([if JPEG version 2 support package is complete])
if test $passed -gt 0
then
if test $failed -gt 0
then
- AC_MSG_RESULT(no -- some components failed test)
+ AC_MSG_RESULT([no -- some components failed test])
have_jp2='no (failed tests)'
else
LIB_JP2='-ljasper'
LIBS="$LIB_JP2 $LIBS"
- AC_DEFINE(HasJP2,1,Define if you have JPEG version 2 "Jasper" library)
- AC_MSG_RESULT(yes)
+ AC_DEFINE([HasJP2],[1],[Define if you have JPEG version 2 "Jasper" library])
+ AC_MSG_RESULT([yes])
have_jp2='yes'
fi
else
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT([no])
fi
fi
-AM_CONDITIONAL(HasJP2, test "$have_jp2" = 'yes')
-AC_SUBST(LIB_JP2)
+AM_CONDITIONAL([HasJP2],[test "$have_jp2" = 'yes'])
+AC_SUBST([LIB_JP2])
# #
# # Check for MPEG2 library
# LIB_MPEG2=''
# if test "$with_mpeg2" != 'no'
# then
-# AC_MSG_CHECKING(for MPEG version 2 support )
+# AC_MSG_CHECKING([for MPEG version 2 support ])
# AC_MSG_RESULT()
# failed=0
# passed=0
-# AC_CHECK_HEADER(mpeg2dec/mpeg2.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
-# AC_CHECK_LIB(mpeg2,mpeg2_decode_data,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
-# AC_MSG_CHECKING(if MPEG version 2 support package is complete)
+# AC_CHECK_HEADER([mpeg2dec/mpeg2.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+# AC_CHECK_LIB([mpeg2],[mpeg2_decode_data],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+# AC_MSG_CHECKING([if MPEG version 2 support package is complete])
# if test $passed -gt 0
# then
# if test $failed -gt 0
# then
-# AC_MSG_RESULT(no -- some components failed test)
+# AC_MSG_RESULT([no -- some components failed test])
# have_mpeg2='no (failed tests)'
# else
# LIB_MPEG2='-lmpeg2'
# LIBS="$LIB_MPEG2 $LIBS"
-# AC_DEFINE(HasMPEG2,1,Define if you have MPEG2 library)
-# AC_MSG_RESULT(yes)
+# AC_DEFINE([HasMPEG2],[1],[Define if you have MPEG2 library])
+# AC_MSG_RESULT([yes])
# have_mpeg2='yes'
# fi
# else
-# AC_MSG_RESULT(no)
+# AC_MSG_RESULT([no])
# fi
# fi
-# AM_CONDITIONAL(HasMPEG2, test "$have_mpeg2" = 'yes')
-# AC_SUBST(LIB_MPEG2)
+# AM_CONDITIONAL([HasMPEG2],[test "$have_mpeg2" = 'yes'])
+# AC_SUBST([LIB_MPEG2])
#
# Check for TTF
LIB_TTF=''
if test "$with_ttf" != 'no'
then
- AC_MSG_CHECKING(for FreeType 2.0 )
+ AC_MSG_CHECKING([for FreeType 2.0 ])
AC_MSG_RESULT()
failed=0
passed=0
freetype_cflags=''
freeype_libs=''
freetype_config=''
- AC_PATH_PROG(freetype_config,freetype-config,)dnl
+ AC_PATH_PROG([freetype_config],[freetype-config],)dnl
PKG_CHECK_MODULES([FT], [freetype2],
[freetype_cflags=$FT_CFLAGS; freeype_libs=$FT_LIBS],
[if test -n "$freetype_config"
CPPFLAGS="$OLD_CPPFLAGS"
fi
- AC_MSG_CHECKING(if FreeType package is complete)
+ AC_MSG_CHECKING([if FreeType package is complete])
if test $passed -gt 0
then
if test $failed -gt 0
then
LIB_TTF=''
- AC_MSG_RESULT(no -- some components failed test)
+ AC_MSG_RESULT([no -- some components failed test])
have_ttf='no (failed tests)'
else
LIBS="$LIB_TTF $LIBS"
- AC_DEFINE(HasTTF,1,Define if you have FreeType (TrueType font) library)
+ AC_DEFINE([HasTTF],[1],[Define if you have FreeType (TrueType font) library])
if test "$ac_cv_header_ft2build_h" = 'yes'
then
AC_DEFINE([HAVE_FT2BUILD_H],[1],[Define to 1 if you have the <ft2build.h> header file.])
fi
- AC_MSG_RESULT(yes)
+ AC_MSG_RESULT([yes])
have_ttf='yes'
fi
else
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT([no])
fi
fi
-AM_CONDITIONAL(HasTTF, test "$have_ttf" = 'yes')
-AC_SUBST(LIB_TTF)
+AM_CONDITIONAL([HasTTF],[test "$have_ttf" = 'yes'])
+AC_SUBST([LIB_TTF])
#
# Check for TIFF
LIB_TIFF=''
if test "$with_tiff" != 'no'
then
- AC_MSG_CHECKING(for TIFF support )
+ AC_MSG_CHECKING([for TIFF support ])
AC_MSG_RESULT()
failed=0
passed=0
# PKG_CHECK_MODULES([TIFF], [libtiff-4], [], [])
- AC_CHECK_HEADER(tiff.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
- AC_CHECK_HEADER(tiffio.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
- AC_CHECK_LIB(tiff,TIFFOpen,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_CHECK_LIB(tiff,TIFFClientOpen,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_CHECK_LIB(tiff,TIFFIsByteSwapped,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_CHECK_LIB(tiff,TIFFReadRGBATile,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_CHECK_LIB(tiff,TIFFReadRGBAStrip,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_MSG_CHECKING(if TIFF package is complete)
+ AC_CHECK_HEADER([tiff.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+ AC_CHECK_HEADER([tiffio.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+ AC_CHECK_LIB([tiff],[TIFFOpen],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_CHECK_LIB([tiff],[TIFFClientOpen],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_CHECK_LIB([tiff],[TIFFIsByteSwapped],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_CHECK_LIB([tiff],[TIFFReadRGBATile],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_CHECK_LIB([tiff],[TIFFReadRGBAStrip],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_MSG_CHECKING([if TIFF package is complete])
if test $passed -gt 0
then
if test $failed -gt 0
then
- AC_MSG_RESULT(no -- some components failed test)
+ AC_MSG_RESULT([no -- some components failed test])
have_tiff='no (failed tests)'
else
LIB_TIFF='-ltiff'
LIBS="$LIB_TIFF $LIBS"
- AC_DEFINE(HasTIFF,1,Define if you have TIFF library)
- AC_MSG_RESULT(yes)
+ AC_DEFINE([HasTIFF],[1],[Define if you have TIFF library])
+ AC_MSG_RESULT([yes])
have_tiff='yes'
- AC_CHECK_HEADERS(tiffconf.h)
+ AC_CHECK_HEADERS([tiffconf.h])
AC_CHECK_FUNCS([TIFFIsCODECConfigured \
TIFFMergeFieldInfo \
TIFFSetErrorHandlerExt \
TIFFSwabArrayOfTriples])
fi
else
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT([no])
fi
fi
AM_CONDITIONAL([HasTIFF], [test "$have_tiff" = 'yes'])
-AC_SUBST(LIB_TIFF)
+AC_SUBST([LIB_TIFF])
#
# Check for JBIG
LIB_JBIG=''
if test "$with_jbig" != 'no'
then
- AC_MSG_CHECKING(for JBIG support )
+ AC_MSG_CHECKING([for JBIG support ])
AC_MSG_RESULT()
failed=0
passed=0
- AC_CHECK_HEADER(jbig.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`)
- AC_CHECK_LIB(jbig,jbg_dec_init,passed=`expr $passed + 1`,failed=`expr $failed + 1`,)
- AC_MSG_CHECKING(if JBIG package is complete)
+ AC_CHECK_HEADER([jbig.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+ AC_CHECK_LIB([jbig],[jbg_dec_init],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],)
+ AC_MSG_CHECKING([if JBIG package is complete])
if test $passed -gt 0
then
if test $failed -gt 0
then
- AC_MSG_RESULT(no -- some components failed test)
+ AC_MSG_RESULT([no -- some components failed test])
have_jbig='no (failed tests)'
else
LIB_JBIG='-ljbig'
LIBS="$LIB_JBIG $LIBS"
- AC_DEFINE(HasJBIG,1,Define if you have JBIG library)
- AC_MSG_RESULT(yes)
+ AC_DEFINE([HasJBIG],[1],[Define if you have JBIG library])
+ AC_MSG_RESULT([yes])
have_jbig='yes'
fi
else
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT([no])
fi
fi
-AM_CONDITIONAL(HasJBIG, test "$have_jbig" = 'yes')
-AC_SUBST(LIB_JBIG)
+AM_CONDITIONAL([HasJBIG],[test "$have_jbig" = 'yes'])
+AC_SUBST([LIB_JBIG])
#
# Check for WEBP
LIB_WEBP=''
if test "$with_webp" != 'no'
then
- AC_MSG_CHECKING(for WEBP support )
+ AC_MSG_CHECKING([for WEBP support ])
AC_MSG_RESULT()
failed=0
passed=0
AC_CHECK_HEADER([webp/encode.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],[])
AC_CHECK_LIB([webp],[WebPDecodeRGB],[passed=`expr $passed + 1`; LIB_WEBP='-lwebp'],[failed=`expr $failed + 1`],[])
AC_CHECK_LIB([webpmux],[WebPMuxSetImage],[LIB_WEBP="$LIB_WEBP -lwebpmux"],[],[-lwebp])
- AC_MSG_CHECKING(if WEBP package is complete)
+ AC_MSG_CHECKING([if WEBP package is complete])
if test $passed -gt 0
then
if test $failed -gt 0
then
- AC_MSG_RESULT(no -- some components failed test)
+ AC_MSG_RESULT([no -- some components failed test])
have_webp='no (failed tests)'
else
LIBS="$LIB_WEBP $LIBS"
- AC_DEFINE(HasWEBP,1,Define if you have WEBP library)
- AC_MSG_RESULT(yes)
+ AC_DEFINE([HasWEBP],[1],[Define if you have WEBP library])
+ AC_MSG_RESULT([yes])
have_webp='yes'
fi
else
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT([no])
fi
fi
-AM_CONDITIONAL(HasWEBP, test "$have_webp" = 'yes')
-AC_SUBST(LIB_WEBP)
+AM_CONDITIONAL([HasWEBP],[test "$have_webp" = 'yes'])
+AC_SUBST([LIB_WEBP])
#
# Check for XML
AC_SUBST([LIB_WMF])
AC_SUBST([LIB_WMF_DEPS])
+
+#
+# Check for Windows gdi32 library
+#
+have_gdi32='no'
+if test "$with_gdi32" != 'no'
+then
+ LIB_GDI32=''
+ AC_MSG_CHECKING([for Windows GDI32 support])
+ AC_MSG_RESULT()
+ failed=0
+ passed=0
+ found_libgdi32=0
+ AC_CHECK_HEADER([windows.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`])
+ AC_CHECK_HEADER([wingdi.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],[#include <windows.h>])
+ AC_CHECK_LIB([gdi32],[OpenClipboard],[found_libgdi32=`expr $found_libgdi32 + 1`],,)
+ if test $found_libgdi32 -gt 0
+ then
+ passed=`expr $passed + 1`
+ else
+ failed=`expr $failed + 1`
+ fi
+ AC_MSG_CHECKING([if Windows GDI32 support is complete])
+ if test $passed -gt 0
+ then
+ if test $failed -gt 0
+ then
+ AC_MSG_RESULT([no -- some components failed test])
+ have_gdi32='no (failed tests)'
+ else
+ LIB_GDI32='-lgdi32'
+ LIBS="$LIB_GDI32 $LIBS"
+ AC_DEFINE([HasWINGDI32],[1],[Define to use the Windows GDI32 library])
+ AC_MSG_RESULT([yes])
+ have_gdi32='yes'
+ fi
+ else
+ AC_MSG_RESULT([no])
+ fi
+fi
+AM_CONDITIONAL([HasWINGDI32], [test "$have_gdi32" = 'yes'])
+AC_SUBST([LIB_GDI32])
+
########
#
# Check for functions
# Subdirectory under lib to place GraphicsMagick lib files
MagickLibSubdir="${PACKAGE_NAME}-${PACKAGE_VERSION}"
-AC_DEFINE_UNQUOTED(MagickLibSubdir,"$MagickLibSubdir",Subdirectory of lib where GraphicsMagick architecture dependent files are installed)
+AC_DEFINE_UNQUOTED([MagickLibSubdir],["$MagickLibSubdir"],[Subdirectory of lib where GraphicsMagick architecture dependent files are installed])
# Path to GraphicsMagick bin directory
MagickBinPath="${BIN_DIR}"
MagickBinPathDefine=`$WinPathScript "$MagickBinPathDefine" 1`
;;
esac
-AC_DEFINE_UNQUOTED(MagickBinPath,"$MagickBinPathDefine",Directory where executables are installed.)
-AC_SUBST(MagickBinPath)
+AC_DEFINE_UNQUOTED([MagickBinPath],["$MagickBinPathDefine"],[Directory where executables are installed.])
+AC_SUBST([MagickBinPath])
# Path to GraphicsMagick lib
MagickLibPath="${LIB_DIR}/${MagickLibSubdir}"
MagickLibPathDefine=`$WinPathScript "$MagickLibPathDefine" 1`
;;
esac
-AC_DEFINE_UNQUOTED(MagickLibPath,"$MagickLibPathDefine",Directory where architecture-dependent files live.)
-AC_SUBST(MagickLibPath)
+AC_DEFINE_UNQUOTED([MagickLibPath],["$MagickLibPathDefine"],[Directory where architecture-dependent files live.])
+AC_SUBST([MagickLibPath])
# Subdirectory under lib to place GraphicsMagick configuration files
MagickLibConfigSubDir="${MagickLibSubdir}/config"
-AC_DEFINE_UNQUOTED(MagickLibConfigSubDir,"$MagickLibConfigSubDir",Subdirectory of lib where architecture-dependent configuration files live.)
+AC_DEFINE_UNQUOTED([MagickLibConfigSubDir],["$MagickLibConfigSubDir"],[Subdirectory of lib where architecture-dependent configuration files live.])
MagickLibConfigPath="${LIB_DIR}/${MagickLibConfigSubDir}"
MagickLibConfigPathDefine="${MagickLibConfigPath}/"
case "${build_os}" in
MagickLibConfigPathDefine=`$WinPathScript "$MagickLibConfigPathDefine" 1`
;;
esac
-AC_DEFINE_UNQUOTED(MagickLibConfigPath,"$MagickLibConfigPathDefine",Directory where architecture-dependent configuration files live.)
-AC_SUBST(MagickLibConfigPath)
+AC_DEFINE_UNQUOTED([MagickLibConfigPath],["$MagickLibConfigPathDefine"],[Directory where architecture-dependent configuration files live.])
+AC_SUBST([MagickLibConfigPath])
#
# Subdirectory under lib to place GraphicsMagick coder module files
MagickCoderModulesSubdir="${MagickLibSubdir}/modules-Q${QuantumDepth}/coders"
-AC_DEFINE_UNQUOTED(MagickCoderModulesSubdir,"$MagickCoderModulesSubdir",Subdirectory of lib where coder modules are installed)
+AC_DEFINE_UNQUOTED([MagickCoderModulesSubdir],["$MagickCoderModulesSubdir"],[Subdirectory of lib where coder modules are installed])
MagickCoderModulesPath="${LIB_DIR}/${MagickCoderModulesSubdir}"
MagickCoderModulesPathDefine="${MagickCoderModulesPath}/"
case "${build_os}" in
MagickCoderModulesPathDefine=`$WinPathScript "$MagickCoderModulesPathDefine" 1`
;;
esac
-AC_DEFINE_UNQUOTED(MagickCoderModulesPath,"$MagickCoderModulesPathDefine",Location of coder modules)
-AC_SUBST(MagickCoderModulesPath)
+AC_DEFINE_UNQUOTED([MagickCoderModulesPath],["$MagickCoderModulesPathDefine"],[Location of coder modules])
+AC_SUBST([MagickCoderModulesPath])
#
# Subdirectory under lib to place GraphicsMagick filter module files
MagickFilterModulesSubdir="${MagickLibSubdir}/modules-Q${QuantumDepth}/filters"
-AC_DEFINE_UNQUOTED(MagickFilterModulesSubdir,"$MagickFilterModulesSubdir",Subdirectory of lib where filter modules are installed)
+AC_DEFINE_UNQUOTED([MagickFilterModulesSubdir],["$MagickFilterModulesSubdir"],[Subdirectory of lib where filter modules are installed])
MagickFilterModulesPath="${LIB_DIR}/${MagickFilterModulesSubdir}"
MagickFilterModulesPathDefine="${MagickFilterModulesPath}/"
case "${build_os}" in
MagickFilterModulesPathDefine=`$WinPathScript "$MagickFilterModulesPathDefine" 1`
;;
esac
-AC_DEFINE_UNQUOTED(MagickFilterModulesPath,"$MagickFilterModulesPathDefine",Location of filter modules)
-AC_SUBST(MagickFilterModulesPath)
+AC_DEFINE_UNQUOTED([MagickFilterModulesPath],["$MagickFilterModulesPathDefine"],[Location of filter modules])
+AC_SUBST([MagickFilterModulesPath])
#
# Path to GraphicsMagick share files
MagickSharePathDefine=`$WinPathScript "$MagickSharePathDefine" 1`
;;
esac
-AC_DEFINE_UNQUOTED(MagickSharePath,"$MagickSharePathDefine",Directory where architecture-independent files live.)
-AC_SUBST(MagickSharePath)
+AC_DEFINE_UNQUOTED([MagickSharePath],["$MagickSharePathDefine"],[Directory where architecture-independent files live.])
+AC_SUBST([MagickSharePath])
# Subdirectory under share to place GraphicsMagick configuration files
MagickShareConfigSubDir="${MagickLibSubdir}/config"
-AC_DEFINE_UNQUOTED(MagickShareConfigSubDir,"$MagickShareConfigSubDir",Subdirectory of lib where architecture-independent configuration files live.)
+AC_DEFINE_UNQUOTED([MagickShareConfigSubDir],["$MagickShareConfigSubDir"],[Subdirectory of lib where architecture-independent configuration files live.])
MagickShareConfigPath="${DATA_DIR}/${MagickShareConfigSubDir}"
MagickShareConfigPathDefine="${MagickShareConfigPath}/"
case "${build_os}" in
MagickShareConfigPathDefine=`$WinPathScript "$MagickShareConfigPathDefine" 1`
;;
esac
-AC_DEFINE_UNQUOTED(MagickShareConfigPath,"$MagickShareConfigPathDefine",Directory where architecture-independent configuration files live.)
-AC_SUBST(MagickShareConfigPath)
+AC_DEFINE_UNQUOTED([MagickShareConfigPath],["$MagickShareConfigPathDefine"],[Directory where architecture-independent configuration files live.])
+AC_SUBST([MagickShareConfigPath])
# Extra options to pass to dcraw via delegates.mgk. This substition
# is done directly on delegates.mgk and has no effect on the compiled
DcrawExtraOptions="$DcrawExtraOptions -T"
fi
DcrawExtraOptions=`echo $DcrawExtraOptions | sed -e 's/ */ /g'`
-AC_SUBST(DcrawExtraOptions)
+AC_SUBST([DcrawExtraOptions])
#
# program_transform_name is formed for use in a Makefile, so create a
MVDelegateDefault='mv'
dnl PGPDecodeDelegateDefault='pgpv'
dnl POVDelegateDefault='povray'
-if test "$native_win32_build" = 'yes' ; then
- PSDelegateDefault='gswin32c'
+if test "$with_gs" = 'yes' ; then
+ if test "$native_win32_build" = 'yes' ; then
+ PSDelegateDefault='gswin32c'
+ else
+ PSDelegateDefault='gs'
+ fi
else
- PSDelegateDefault='gs'
+ PSDelegateDefault='false'
fi
dnl RADDecodeDelegateDefault='ra_ppm'
dnl RLEEncodeDelegateDefault='rawtorle'
# Search for delegates
dnl AC_PATH_PROG(AutotraceDecodeDelegate, "$AutotraceDecodeDelegateDefault", "$AutotraceDecodeDelegateDefault")
dnl AC_PATH_PROG(BZIPDelegate, "$BZIPDelegateDefault", "$BZIPDelegateDefault")
-AC_PATH_PROGS(BrowseDelegate, "$BrowseDelegateDefault" firefox konqueror google-chrome mozilla lynx, "$BrowseDelegateDefault")
-AC_PATH_PROG(CGMDecodeDelegate, "$CGMDecodeDelegateDefault", "$CGMDecodeDelegateDefault")
-dnl AC_PATH_PROG(CatDelegate, "$CatDelegateDefault", "$CatDelegateDefault")
-AC_PATH_PROG(DCRAWDecodeDelegate, "$DCRAWDecodeDelegateDefault", "$DCRAWDecodeDelegateDefault")
-AC_PATH_PROG(DOTDecodeDelegate, "$DOTDecodeDelegateDefault", "$DOTDecodeDelegateDefault")
-AC_PATH_PROG(DVIDecodeDelegate, "$DVIDecodeDelegateDefault", "$DVIDecodeDelegateDefault")
-dnl AC_PATH_PROG(EchoDelegate, "$EchoDelegateDefault", "$EchoDelegateDefault")
-AC_PATH_PROG(EditorDelegate, "$EditorDelegateDefault", "$EditorDelegateDefault")
-AC_PATH_PROG(FIGDecodeDelegate, "$FIGDecodeDelegateDefault", "$FIGDecodeDelegateDefault")
-AC_PATH_PROG(GMDelegate, "$GMDelegateDefault", "$GMDelegateDefault")
-dnl AC_PATH_PROG(GnuplotDecodeDelegate, "$GnuplotDecodeDelegateDefault", "$GnuplotDecodeDelegateDefault")
-AC_PATH_PROG(HPGLDecodeDelegate, "$HPGLDecodeDelegateDefault", "$HPGLDecodeDelegateDefault")
-AC_PATH_PROG(HTMLDecodeDelegate, "$HTMLDecodeDelegateDefault", "$HTMLDecodeDelegateDefault")
-AC_PATH_PROG(ILBMDecodeDelegate, "$ILBMDecodeDelegateDefault", "$ILBMDecodeDelegateDefault")
-AC_PATH_PROG(ILBMEncodeDelegate, "$ILBMEncodeDelegateDefault", "$ILBMEncodeDelegateDefault")
-AC_PATH_PROG(LPDelegate, "$LPDelegateDefault", no)
-AC_PATH_PROG(LPRDelegate, "$LPRDelegateDefault", no)
-AC_PATH_PROG(LaunchDelegate, "$LaunchDelegateDefault", "$LaunchDelegateDefault")
+AC_PATH_PROGS([BrowseDelegate], ["$BrowseDelegateDefault" firefox konqueror google-chrome mozilla lynx], ["$BrowseDelegateDefault"])
+AC_PATH_PROG([CGMDecodeDelegate], ["$CGMDecodeDelegateDefault"], ["$CGMDecodeDelegateDefault"])
+dnl AC_PATH_PROG([CatDelegate], ["$CatDelegateDefault"], ["$CatDelegateDefault"])
+AC_PATH_PROG([DCRAWDecodeDelegate], ["$DCRAWDecodeDelegateDefault"], ["$DCRAWDecodeDelegateDefault"])
+AC_PATH_PROG([DOTDecodeDelegate], ["$DOTDecodeDelegateDefault"], ["$DOTDecodeDelegateDefault"])
+AC_PATH_PROG([DVIDecodeDelegate], ["$DVIDecodeDelegateDefault"], ["$DVIDecodeDelegateDefault"])
+dnl AC_PATH_PROG([EchoDelegate], ["$EchoDelegateDefault"], ["$EchoDelegateDefault"])
+AC_PATH_PROG([EditorDelegate], ["$EditorDelegateDefault"], ["$EditorDelegateDefault"])
+AC_PATH_PROG([FIGDecodeDelegate], ["$FIGDecodeDelegateDefault"], ["$FIGDecodeDelegateDefault"])
+AC_PATH_PROG([GMDelegate], ["$GMDelegateDefault"], ["$GMDelegateDefault"])
+dnl AC_PATH_PROG([GnuplotDecodeDelegate], [$GnuplotDecodeDelegateDefault"], ["$GnuplotDecodeDelegateDefault"])
+AC_PATH_PROG([HPGLDecodeDelegate], ["$HPGLDecodeDelegateDefault"], ["$HPGLDecodeDelegateDefault"])
+AC_PATH_PROG([HTMLDecodeDelegate], ["$HTMLDecodeDelegateDefault"], ["$HTMLDecodeDelegateDefault"])
+AC_PATH_PROG([ILBMDecodeDelegate], ["$ILBMDecodeDelegateDefault"], ["$ILBMDecodeDelegateDefault"])
+AC_PATH_PROG([ILBMEncodeDelegate], ["$ILBMEncodeDelegateDefault"], ["$ILBMEncodeDelegateDefault"])
+AC_PATH_PROG([LPDelegate], ["$LPDelegateDefault"], [no])
+AC_PATH_PROG([LPRDelegate], ["$LPRDelegateDefault"], [no])
+AC_PATH_PROG([LaunchDelegate], ["$LaunchDelegateDefault"], ["$LaunchDelegateDefault"])
dnl AC_PATH_PROG(MANDelegate, "$MANDelegateDefault", "$MANDelegateDefault")
-AC_PATH_PROG(MPEGDecodeDelegate, "$MPEGDecodeDelegateDefault", "$MPEGDecodeDelegateDefault")
-AC_PATH_PROG(MPEGEncodeDelegate, "$MPEGEncodeDelegateDefault", "$MPEGEncodeDelegateDefault")
-AC_PATH_PROG(MVDelegate, "$MVDelegateDefault", "$MVDelegateDefault")
-dnl AC_PATH_PROG(PGPDecodeDelegate, "$PGPDecodeDelegateDefault", "$PGPDecodeDelegateDefault")
-dnl AC_PATH_PROG(POVDelegate, "$POVDelegateDefault", "$POVDelegateDefault")
-AC_PATH_PROG(PSDelegate, "$PSDelegateDefault", "$PSDelegateDefault")
+AC_PATH_PROG([MPEGDecodeDelegate], ["$MPEGDecodeDelegateDefault"], ["$MPEGDecodeDelegateDefault"])
+AC_PATH_PROG([MPEGEncodeDelegate], ["$MPEGEncodeDelegateDefault"], ["$MPEGEncodeDelegateDefault"])
+AC_PATH_PROG([MVDelegate], ["$MVDelegateDefault"], ["$MVDelegateDefault"])
+dnl AC_PATH_PROG([PGPDecodeDelegate], ["$PGPDecodeDelegateDefault"], ["$PGPDecodeDelegateDefault"])
+dnl AC_PATH_PROG([POVDelegate], ["$POVDelegateDefault"], ["$POVDelegateDefault"])
+if test "$with_gs" = 'yes' ; then
+ AC_PATH_PROG([PSDelegate], ["$PSDelegateDefault"], ["$PSDelegateDefault"])
+else
+ PSDelegate=$PSDelegateDefault
+fi
dnl AC_PATH_PROG(RADDecodeDelegate, "$RADDecodeDelegateDefault", "$RADDecodeDelegateDefault")
dnl AC_PATH_PROG(RLEEncodeDelegate, "$RLEEncodeDelegateDefault", "$RLEEncodeDelegateDefault")
dnl AC_PATH_PROG(RMDelegate, "$RMDelegateDefault", "$RMDelegateDefault")
else
PrintDelegate="$LPDelegate -c -s"
fi
-AC_SUBST(PrintDelegate)
+AC_SUBST([PrintDelegate])
# Installed GraphicsMagick utiltity paths
GMDelegate="${BIN_DIR}/${GMDelegateDefault}"
have_ralcgm='no' ; if test "$CGMDecodeDelegate" != "$CGMDecodeDelegateDefault" ; then have_ralcgm='yes' ; fi
# Automake conditional to support test suite
-AM_CONDITIONAL(HasPSDelegate, test "$have_gs" = 'yes')
+AM_CONDITIONAL([HasPSDelegate],[test "$have_gs" = 'yes'])
# Test for optional rst2html.py utility and define automake conditional HasRST2HTML if found.
-AC_CHECK_PROGS(RST2HTML,[rst2html.py rst2html])
-AC_SUBST(RST2HTML)
-AM_CONDITIONAL(HasRST2HTML, test "x$RST2HTML" != 'x')
+AC_CHECK_PROGS([RST2HTML],[rst2html.py rst2html])
+AC_SUBST([RST2HTML])
+AM_CONDITIONAL([HasRST2HTML],[test "x$RST2HTML" != 'x'])
# Test for optional txt2html utility and define automake conditional HasTXT2HTML if found.
-AC_PATH_PROGS(TXT2HTML, [txt2html])
-AC_SUBST(TXT2HTML)
-AM_CONDITIONAL(HasTXT2HTML, test "$TXT2HTML" != 'x')
+AC_PATH_PROGS([TXT2HTML], [txt2html])
+AC_SUBST([TXT2HTML])
+AM_CONDITIONAL([HasTXT2HTML],[test "$TXT2HTML" != 'x'])
#
# Test for font directories
if test -n "$windows_font_dir"
then
type_include_files="$type_include_files "'<include file="type-windows.mgk" />'
- AC_MSG_RESULT($windows_font_dir)
+ AC_MSG_RESULT([$windows_font_dir])
else
- AC_MSG_RESULT(not found!);
+ AC_MSG_RESULT([not found!]);
fi
-AC_SUBST(windows_font_dir)
+AC_SUBST([windows_font_dir])
# Adobe Postscript fonts on various systems
AC_MSG_CHECKING([for Solaris OpenWindows Type 1 fonts (location of Helvetica.afm)])
esac
if test -n "$openwin_fonts"
then
- AC_MSG_RESULT($openwin_fonts)
+ AC_MSG_RESULT([$openwin_fonts])
else
- AC_MSG_RESULT(not found!);
+ AC_MSG_RESULT([not found!]);
fi
# Ghostscript
break 1
fi
done
- if test "${PSDelegate}" != 'gswin32c'
- then
- ghostscript_font_dir=`echo "${PSDelegate}" | sed -e 's:/gs/.*:/gs:;s:^/::;s/./&:/;s:/:\\\\:g'`"\\fonts\\"
+ if test "$with_gs" = 'yes' ; then
+ if test "${PSDelegate}" != "${PSDelegateDefault}"
+ then
+ ghostscript_font_dir=`echo "${PSDelegate}" | sed -e 's:/gs/.*:/gs:;s:^/::;s/./&:/;s:/:\\\\:g'`"\\fonts\\"
+ fi
fi
else
if test "${ghostscript_font_dir}x" = 'x'
then
- if test "$PSDelegate" != 'gs'
- then
- ghostscript_font_dir=`echo "$PSDelegate" | sed -e 's:/bin/gs:/share/ghostscript/fonts:'`"/"
+ if test "$with_gs" = 'yes' ; then
+ if test "$PSDelegate" != "${PSDelegateDefault}"
+ then
+ ghostscript_font_dir=`echo "$PSDelegate" | sed -e 's:/bin/gs:/share/ghostscript/fonts:'`"/"
+ fi
fi
fi
if test "${ghostscript_font_dir}x" != 'x'
then
type_include_files="${type_include_files} "'<include file="type-ghostscript.mgk" />'
- AC_MSG_RESULT($ghostscript_font_dir)
+ AC_MSG_RESULT([$ghostscript_font_dir])
else
- AC_MSG_RESULT(not found!);
+ AC_MSG_RESULT([not found!]);
fi
-AC_SUBST(ghostscript_font_dir)
+AC_SUBST([ghostscript_font_dir])
case "${build_os}" in
mingw* )
PSDelegate=`$WinPathScript "$PSDelegate" 1`
;;
esac
-AC_SUBST(type_include_files)
+AC_SUBST([type_include_files])
#
# Handle case where user doesn't want frozen paths
fi
# Delegate substitutions
-dnl AC_SUBST(AutotraceDecodeDelegate)
-dnl AC_SUBST(BZIPDelegate)
-AC_SUBST(BrowseDelegate)
-dnl AC_SUBST(CGMDecodeDelegate)
-dnl AC_SUBST(CatDelegate)
-AC_SUBST(ConvertDelegate)
-AC_SUBST(DOTDecodeDelegate)
-AC_SUBST(DVIDecodeDelegate)
-dnl AC_SUBST(EchoDelegate)
-AC_SUBST(EditorDelegate)
-AC_SUBST(FIGDecodeDelegate)
-dnl AC_SUBST(GnuplotDecodeDelegate)
-AC_SUBST(HPGLDecodeDelegate)
-AC_SUBST(HTMLDecodeDelegate)
-AC_SUBST(ILBMDecodeDelegate)
-AC_SUBST(ILBMEncodeDelegate)
-AC_SUBST(LPDelegate)
-AC_SUBST(LaunchDelegate)
-dnl AC_SUBST(MANDelegate)
-AC_SUBST(MPEGDecodeDelegate)
-AC_SUBST(MPEGEncodeDelegate)
-dnl AC_SUBST(MVDelegate)
-AC_SUBST(MogrifyDelegate)
-dnl AC_SUBST(PGPDecodeDelegate)
-dnl AC_SUBST(POVDelegate)
-AC_SUBST(PSDelegate)
-dnl AC_SUBST(RADDecodeDelegate)
-dnl AC_SUBST(RLEEncodeDelegate)
-dnl AC_SUBST(RMDelegate)
-dnl AC_SUBST(SCANDecodeDelegate)
-AC_SUBST(ShowImageDelegate)
-dnl AC_SUBST(TXTDelegate)
-dnl AC_SUBST(WMFDecodeDelegate)
-dnl AC_SUBST(WWWDecodeDelegate)
-dnl AC_SUBST(ZipDelegate)
+dnl AC_SUBST([AutotraceDecodeDelegate])
+dnl AC_SUBST([BZIPDelegate])
+AC_SUBST([BrowseDelegate])
+dnl AC_SUBST([CGMDecodeDelegate])
+dnl AC_SUBST([CatDelegate])
+AC_SUBST([ConvertDelegate])
+AC_SUBST([DOTDecodeDelegate])
+AC_SUBST([DVIDecodeDelegate])
+dnl AC_SUBST([EchoDelegate])
+AC_SUBST([EditorDelegate])
+AC_SUBST([FIGDecodeDelegate])
+dnl AC_SUBST([GnuplotDecodeDelegate])
+AC_SUBST([HPGLDecodeDelegate])
+AC_SUBST([HTMLDecodeDelegate])
+AC_SUBST([ILBMDecodeDelegate])
+AC_SUBST([ILBMEncodeDelegate])
+AC_SUBST([LPDelegate])
+AC_SUBST([LaunchDelegate])
+dnl AC_SUBST([MANDelegate])
+AC_SUBST([MPEGDecodeDelegate])
+AC_SUBST([MPEGEncodeDelegate])
+dnl AC_SUBST([MVDelegate])
+AC_SUBST([MogrifyDelegate])
+dnl AC_SUBST([PGPDecodeDelegate])
+dnl AC_SUBST([POVDelegate])
+AC_SUBST([PSDelegate])
+dnl AC_SUBST([RADDecodeDelegate])
+dnl AC_SUBST([RLEEncodeDelegate])
+dnl AC_SUBST([RMDelegate])
+dnl AC_SUBST([SCANDecodeDelegate])
+AC_SUBST([ShowImageDelegate])
+dnl AC_SUBST([TXTDelegate])
+dnl AC_SUBST([WMFDecodeDelegate])
+dnl AC_SUBST([WWWDecodeDelegate])
+dnl AC_SUBST([ZipDelegate])
#
# RedHat RPM support (http://rpm5.org/)
#
RPM=''
-AC_CHECK_PROGS(RPM,[rpmbuild rpm])
-AC_SUBST(RPM)
-AM_CONDITIONAL(HAS_RPM, test "x$RPM" != "x" )
+AC_CHECK_PROGS([RPM],[rpmbuild rpm])
+AC_SUBST([RPM])
+AM_CONDITIONAL([HAS_RPM],[test "x$RPM" != "x"])
#
# 7ZIP support (http://p7zip.sourceforge.net/)
#
P7ZIP=''
-AC_CHECK_PROGS(P7ZIP,[7za])
+AC_CHECK_PROGS([P7ZIP],[7za])
AC_SUBST(P7ZIP)
-AM_CONDITIONAL(HAS_P7ZIP, test "x$P7ZIP" != "x" )
+AM_CONDITIONAL([HAS_P7ZIP],[test "x$P7ZIP" != "x"])
#
# ZIP support (http://www.info-zip.org/Zip.html)
#
ZIP=''
-AC_CHECK_PROGS(ZIP,[zip])
-AC_SUBST(ZIP)
-AM_CONDITIONAL(HAS_ZIP, test "x$ZIP" != "x" )
+AC_CHECK_PROGS([ZIP],[zip])
+AC_SUBST([ZIP])
+AM_CONDITIONAL([HAS_ZIP],[test "x$ZIP" != "x"])
#
# Ghostscript related configuration.
if test $have_gs = 'yes'
then
- AC_MSG_CHECKING(for Ghostscript version)
+ AC_MSG_CHECKING([for Ghostscript version])
if GSVersion=`$PSDelegate --version`
then
:
else
GSVersion=`$PSDelegate --help | sed -e '1q' | awk '{ print $3 }'`
fi
- AC_MSG_RESULT($GSVersion)
+ AC_MSG_RESULT([$GSVersion])
# GSColorDevice # AS_MESSAGE_LOG_FD
AC_MSG_CHECKING([for gs color device])
GSColorDevice=ppmraw
fi
fi
- AC_MSG_RESULT($GSColorDevice)
+ AC_MSG_RESULT([$GSColorDevice])
# GSColorAlphaDevice
AC_MSG_CHECKING([for gs color+alpha device])
else
GSColorAlphaDevice=$GSColorDevice
fi
- AC_MSG_RESULT($GSColorAlphaDevice)
+ AC_MSG_RESULT([$GSColorAlphaDevice])
# GSGrayDevice
AC_MSG_CHECKING([for gs gray device])
else
GSGrayDevice=ppmraw
fi
- AC_MSG_RESULT($GSGrayDevice)
+ AC_MSG_RESULT([$GSGrayDevice])
# GSPaletteDevice
AC_MSG_CHECKING([for gs pallet device])
else
GSMonoDevice=ppmraw
fi
- AC_MSG_RESULT($GSMonoDevice)
+ AC_MSG_RESULT([$GSMonoDevice])
# GSCMYKDevice
AC_MSG_CHECKING([for gs CMYK device])
break
fi
done
- AC_MSG_RESULT($GSCMYKDevice)
+ AC_MSG_RESULT([$GSCMYKDevice])
# GSPDFDevice
AC_MSG_CHECKING([for gs PDF writing device])
else
GSPDFDevice=nodevice
fi
- AC_MSG_RESULT($GSPDFDevice)
+ AC_MSG_RESULT([$GSPDFDevice])
# GSPSDevice
AC_MSG_CHECKING([for gs PS writing device])
break
fi
done
- AC_MSG_RESULT($GSPSDevice)
+ AC_MSG_RESULT([$GSPSDevice])
# GSEPSDevice
AC_MSG_CHECKING([for gs EPS writing device])
break
fi
done
- AC_MSG_RESULT($GSEPSDevice)
+ AC_MSG_RESULT([$GSEPSDevice])
fi
-AC_SUBST(GSMonoDevice)
-AC_SUBST(GSCMYKDevice)
-AC_SUBST(GSGrayDevice)
-AC_SUBST(GSPaletteDevice)
-AC_SUBST(GSColorDevice)
-AC_SUBST(GSColorAlphaDevice)
-AC_SUBST(GSPDFDevice)
-AC_SUBST(GSPSDevice)
-AC_SUBST(GSEPSDevice)
-AC_SUBST(GSVersion)
+AC_SUBST([GSMonoDevice])
+AC_SUBST([GSCMYKDevice])
+AC_SUBST([GSGrayDevice])
+AC_SUBST([GSPaletteDevice])
+AC_SUBST([GSColorDevice])
+AC_SUBST([GSColorAlphaDevice])
+AC_SUBST([GSPDFDevice])
+AC_SUBST([GSPSDevice])
+AC_SUBST([GSEPSDevice])
+AC_SUBST([GSVersion])
#
# PerlMagick-related configuration
then
if test "$with_perl" != 'yes'
then
- AC_CACHE_CHECK(for perl,ac_cv_path_PERL,ac_cv_path_PERL="$with_perl");
+ AC_CACHE_CHECK([for perl],[ac_cv_path_PERL],[ac_cv_path_PERL="$with_perl"]);
PERL=$ac_cv_path_PERL
- AC_SUBST(PERL)dnl
+ AC_SUBST([PERL])dnl
have_perl="$ac_cv_path_PERL"
else
- AC_PATH_PROGS(PERL,perl perl5,)dnl
+ AC_PATH_PROGS([PERL],[perl perl5],)dnl
if test "$ac_cv_path_PERL"
then
have_perl="$ac_cv_path_PERL"
fi
# Is PERL's MakeMaker new enough to support DESTDIR?
- AC_PROG_PERL_VERSION(5.8.1,[PERL_SUPPORTS_DESTDIR='yes'],[PERL_SUPPORTS_DESTDIR='no'])
+ AC_PROG_PERL_VERSION([5.8.1],[PERL_SUPPORTS_DESTDIR='yes'],[PERL_SUPPORTS_DESTDIR='no'])
fi
-AM_CONDITIONAL(WITH_PERL, test "$have_perl" != 'no')
-AM_CONDITIONAL(WITH_PERL_STATIC, test $with_perl_static = 'yes')
-AM_CONDITIONAL(WITH_PERL_DYNAMIC, test $with_perl_dynamic = 'yes')
-AC_SUBST(PERL_SUPPORTS_DESTDIR)
+AM_CONDITIONAL([WITH_PER]L,[test "$have_perl" != 'no'])
+AM_CONDITIONAL([WITH_PERL_STATIC],[test $with_perl_static = 'yes'])
+AM_CONDITIONAL([WITH_PERL_DYNAMIC],[test $with_perl_dynamic = 'yes'])
+AC_SUBST([PERL_SUPPORTS_DESTDIR])
# Determine path to pick up GraphicsMagick library from for use with building PerlMagick
MAGICKLIBDIR="${LIB_DIR}"
MAGICKLIBDIR="${builddir}/magick/${libtool_objdir}"
MAGICKLIB="-L${MAGICKLIBDIR} -lGraphicsMagick"
fi
-AC_SUBST(MAGICKLIB)
-AC_SUBST(MAGICKLIBDIR)
+AC_SUBST([MAGICKLIB])
+AC_SUBST([MAGICKLIBDIR])
# Create a simple string containing format names for all delegate libraries
# DELEGATES is used to select sub-directories in the PerlMagick test suite
have_ps='no'
if test "$have_dps" = 'yes' || \
- test "$have_gs" = 'yes' || \
- test "${native_win32_build}" = 'yes' ; then
+ test "$have_gs" = 'yes' ; then
have_ps='yes'
fi
if test "$have_ps" = 'yes' ; then
# Remove extraneous spaces from output variables (asthetic)
DELEGATES=`echo $DELEGATES | sed -e 's/ */ /g'`
MAGICK_FEATURES=`echo $MAGICK_FEATURES | sed -e 's/ */ /g'`
-AC_SUBST(DELEGATES)
-AC_SUBST(MAGICK_FEATURES)
+AC_SUBST([DELEGATES])
+AC_SUBST([MAGICK_FEATURES])
#
# Handle special compiler flags
MAGICK_DEP_LIBS="$LIBS_USER $LIB_JBIG $LIB_WEBP $LIB_LCMS $LIB_TIFF $LIB_TTF $LIB_JP2 $LIB_JPEG $LIB_GS $LIB_PNG $LIB_FPX $LIB_WMF $LIB_DPS $LIB_XEXT $LIB_IPC $LIB_X11 $LIB_LZMA $LIB_BZLIB $LIB_XML $LIB_ZLIB $LIB_ZSTD $LIB_TRIO $LIB_GDI32 $LIB_MATH $LIB_THREAD $LIB_TCMALLOC $LIB_UMEM $LIB_MTMALLOC"
fi
MAGICK_EXTRA_DEP_LIBS="$LIB_OMP" # Extra libraries typically added due to CFLAGS
-AC_SUBST(MAGICK_DEP_LIBS)
-AC_SUBST(MAGICK_EXTRA_DEP_LIBS)
+AC_SUBST([MAGICK_DEP_LIBS])
+AC_SUBST([MAGICK_EXTRA_DEP_LIBS])
#
# Remove extraneous spaces from output variables (asthetic)
MAGICK_API_LIBS=`echo $MAGICK_API_LIBS | sed -e 's/ */ /g'`
# Save configure/build parameters for later reference
-AC_DEFINE_UNQUOTED(GM_BUILD_CONFIGURE_ARGS,"$0 ${ac_configure_args}",[arguments passed to configure])
-AC_DEFINE_UNQUOTED(GM_BUILD_HOST,"${host}",[Host identification triplet])
-AC_DEFINE_UNQUOTED(GM_BUILD_CC,"${CC}",[C compiler used for compilation])
-AC_DEFINE_UNQUOTED(GM_BUILD_CXX,"${CXX}",[C++ compiler used for compilation])
-AC_DEFINE_UNQUOTED(GM_BUILD_CFLAGS,"${CFLAGS}",[CFLAGS used for C compilation])
-AC_DEFINE_UNQUOTED(GM_BUILD_CPPFLAGS,"${CPPFLAGS}",[CPPFLAGS used for preprocessing])
-AC_DEFINE_UNQUOTED(GM_BUILD_CXXFLAGS,"${CXXFLAGS}",[CXXFLAGS used for C++ compilation])
-AC_DEFINE_UNQUOTED(GM_BUILD_LDFLAGS,"${LDFLAGS}",[LDFLAGS used for linking])
-AC_DEFINE_UNQUOTED(GM_BUILD_LIBS,"${MAGICK_API_DEP_LIBS}",[LIBS used for linking])
+AC_DEFINE_UNQUOTED([GM_BUILD_CONFIGURE_ARGS],["$0 ${ac_configure_args}"],[arguments passed to configure])
+AC_DEFINE_UNQUOTED([GM_BUILD_HOST],["${host}"],[Host identification triplet])
+AC_DEFINE_UNQUOTED([GM_BUILD_CC],["${CC}"],[C compiler used for compilation])
+AC_DEFINE_UNQUOTED([GM_BUILD_CXX],["${CXX}"],[C++ compiler used for compilation])
+AC_DEFINE_UNQUOTED([GM_BUILD_CFLAGS],["${CFLAGS}"],[CFLAGS used for C compilation])
+AC_DEFINE_UNQUOTED([GM_BUILD_CPPFLAGS],["${CPPFLAGS}"],[CPPFLAGS used for preprocessing])
+AC_DEFINE_UNQUOTED([GM_BUILD_CXXFLAGS],["${CXXFLAGS}"],[CXXFLAGS used for C++ compilation])
+AC_DEFINE_UNQUOTED([GM_BUILD_LDFLAGS],["${LDFLAGS}"],[LDFLAGS used for linking])
+AC_DEFINE_UNQUOTED([GM_BUILD_LIBS],["${MAGICK_API_DEP_LIBS}"],[LIBS used for linking])
# Pass only user-provided LIBS as "global" libraries
LIBS=$LIBS_USER
-#AC_SUBST(CPPFLAGS)
-AC_SUBST(X_CFLAGS)
-#AC_SUBST(LDFLAGS)
-#AC_SUBST(X_PRE_LIBS)
-#AC_SUBST(X_LIBS)
-#AC_SUBST(X_EXTRA_LIBS)
-
+#AC_SUBST([CPPFLAGS])
+AC_SUBST([X_CFLAGS])
+#AC_SUBST([LDFLAGS])
+#AC_SUBST([X_PRE_LIBS])
+#AC_SUBST([X_LIBS])
+#AC_SUBST([X_EXTRA_LIBS])
-AC_SUBST(MAGICK_API_CFLAGS)
-AC_SUBST(MAGICK_API_CPPFLAGS)
-AC_SUBST(MAGICK_API_PC_CPPFLAGS)
-AC_SUBST(MAGICK_API_LDFLAGS)
-AC_SUBST(MAGICK_API_LIBS)
+AC_SUBST([MAGICK_API_CFLAGS])
+AC_SUBST([MAGICK_API_CPPFLAGS])
+AC_SUBST([MAGICK_API_PC_CPPFLAGS])
+AC_SUBST([MAGICK_API_LDFLAGS])
+AC_SUBST([MAGICK_API_LIBS])
AC_CONFIG_FILES(\
GraphicsMagick.spec \
printf "DPS --with-dps=$with_dps \t$have_dps\n"
printf "FlashPIX --with-fpx=$with_fpx \t$have_fpx\n"
printf "FreeType 2.0 --with-ttf=$with_ttf \t$have_ttf\n"
-printf "Ghostscript None \t$PSDelegate ($GSVersion)\n"
+printf "Ghostscript --with-gs=$with_gs \t$PSDelegate ($GSVersion)\n"
result_ghostscript_font_dir='none'
if test "${ghostscript_font_dir}x" != 'x'
then
result_ghostscript_font_dir="$ghostscript_font_dir"
fi
printf "Ghostscript fonts --with-gs-font-dir=$with_gs_font_dir\t$result_ghostscript_font_dir\n"
+printf "Windows GDI32 --with-gdi32=$with_gdi32 \t$have_gdi32\n"
printf "JBIG --with-jbig=$with_jbig \t$have_jbig\n"
printf "JPEG v1 --with-jpeg=$with_jpeg \t$have_jpeg\n"
printf "JPEG-2000 --with-jp2=$with_jp2 \t$have_jp2\n"
<Message name="UnbalancedGraphicContextPushPop">
unbalanced graphic context push-pop
</Message>
+ <Message name="UnbalancedPushPop">
+ unbalanced push-pop
+ </Message>
<Message name="TooManyCoordinates">
too many coordinates
</Message>
<Message name="UnreasonableGradientSize">
unreasonable gradient image size
</Message>
+ <Message name="UnreasonableDashPolygonLength">
+ unreasonable dash polygon length
+ </Message>
<Message name="UnableToDrawOnImage">
unable to draw on image
</Message>
magick/draw.h \
magick/effect.h \
magick/enhance.h \
+ magick/enum_strings.h \
magick/error.h \
magick/forward.h \
magick/fx.h \
#endif
}
}
- if ((bounds.width != 0) || (bounds.height != 0))
- {
- bounds.width-=(bounds.x-1);
- bounds.height-=(bounds.y-1);
- }
+ if (bounds.width != 0)
+ bounds.width-=(bounds.x-1);
+ if (bounds.height != 0)
+ bounds.height-=(bounds.y-1);
if (bounds.x < 0)
bounds.x=0;
if (bounds.y < 0)
GraphicsMagick Application Programming Interface declarations.
+ Please notice that the header inclusion is designed such that the compiler
+ include path should include the parent directory of 'magick' and should not
+ include the directly where api.h resides. If the include path includes the
+ directory where api.h resides, then there may be conflicts with other
+ headers.
+
*/
#if !defined(_MAGICK_API_H)
#include "magick/effect.h"
#include "magick/enhance.h"
#include "magick/error.h"
+#include "magick/enum_strings.h"
#include "magick/fx.h"
#include "magick/gem.h"
#include "magick/gradient.h"
#include "magick/semaphore.h"
#include "magick/tempfile.h"
#include "magick/utility.h"
-#if defined(HasZLIB)
+#if defined(HasZLIB) && !defined(DISABLE_COMPRESSED_FILES)
# include "zlib.h"
#endif
-#if defined(HasBZLIB)
+#if defined(HasBZLIB) && !defined(DISABLE_COMPRESSED_FILES)
# include "bzlib.h"
#endif
\f
typedef union _MagickFileHandle
{
FILE *std; /* stdio handle */
-#if defined(HasBZLIB)
+#if defined(HasBZLIB) && !defined(DISABLE_COMPRESSED_FILES)
BZFILE *bz; /* bzip handle */
#endif
-#if defined(HasZLIB)
+#if defined(HasZLIB) && !defined(DISABLE_COMPRESSED_FILES)
gzFile gz; /* zlib handle */
#endif
} MagickFileHandle;
blob_info->offset=0;
blob_info->type=BlobStream;
blob_info->handle.std=(FILE *) NULL;
-#if defined(HasBZLIB)
+#if defined(HasBZLIB) && !defined(DISABLE_COMPRESSED_FILES)
blob_info->handle.bz=(BZFILE *) NULL;
#endif
-#if defined(HasZLIB)
+#if defined(HasZLIB) && !defined(DISABLE_COMPRESSED_FILES)
blob_info->handle.gz=(gzFile) NULL;
#endif
blob_info->data=(unsigned char *) blob;
}
case ZipStream:
{
-#if defined(HasZLIB)
+#if defined(HasZLIB) && !defined(DISABLE_COMPRESSED_FILES)
if (!(status))
{
int
}
case BZipStream:
{
-#if defined(HasBZLIB)
+#if defined(HasBZLIB) && !defined(DISABLE_COMPRESSED_FILES)
if (!(status))
{
int
}
case ZipStream:
{
-#if defined(HasZLIB)
+#if defined(HasZLIB) && !defined(DISABLE_COMPRESSED_FILES)
int
gzerror_errnum;
}
case BZipStream:
{
-#if defined(HasBZLIB)
+#if defined(HasBZLIB) && !defined(DISABLE_COMPRESSED_FILES)
/* Returns void */
BZ2_bzclose(blob->handle.bz);
#endif
blob_info->exempt=MagickFalse;
blob_info->type=UndefinedStream;
blob_info->handle.std=(FILE *) NULL;
-#if defined(HasBZLIB)
+#if defined(HasBZLIB) && !defined(DISABLE_COMPRESSED_FILES)
blob_info->handle.bz=(BZFILE *) NULL;
#endif
-#if defined(HasZLIB)
+#if defined(HasZLIB) && !defined(DISABLE_COMPRESSED_FILES)
blob_info->handle.gz=(gzFile) NULL;
#endif
blob_info->data=(unsigned char *) NULL;
}
case ZipStream:
{
-#if defined(HasZLIB)
+#if defined(HasZLIB) && !defined(DISABLE_COMPRESSED_FILES)
blob->eof=gzeof(blob->handle.gz);
-#endif /* defined(HasZLIB) */
+#endif /* defined(HasZLIB) && !defined(DISABLE_COMPRESSED_FILES) */
break;
}
case BZipStream:
{
-#if defined(HasBZLIB)
+#if defined(HasBZLIB) && !defined(DISABLE_COMPRESSED_FILES)
int
status;
(void) BZ2_bzerror(blob->handle.bz,&status);
blob->eof=status == BZ_UNEXPECTED_EOF;
-#endif /* defined(HasBZLIB) */
+#endif /* defined(HasBZLIB) && !defined(DISABLE_COMPRESSED_FILES) */
break;
}
case BlobStream:
if (image->logging)
(void) LogMagickEvent(BlobEvent,GetMagickModule(),
- "Copying from Blob stream to file %s",filename);
+ "Copying from Blob stream to file \"%s\"...",filename);
if (MagickConfirmAccess(FileWriteConfirmAccessMode,filename,exception)
== MagickFail)
return MagickFail;
break;
}
(void) close(file);
+ if (image->logging)
+ (void) LogMagickEvent(BlobEvent,GetMagickModule(),
+ "Copyied %"MAGICK_SIZE_T_F"u bytes from Blob stream to \"%s\"",(MAGICK_SIZE_T) i,filename);
MagickFreeMemory(buffer);
- return(i < length);
+ return (i < length ? MagickFail : MagickPass);
}
\f
/*
FormMultiPartFilename(image,image_info);
(void) strcpy(filename,image->filename);
}
-#if defined(HasZLIB)
+#if defined(HasZLIB) && !defined(DISABLE_COMPRESSED_FILES)
if (((strlen(filename) > 2) &&
(LocaleCompare(filename+strlen(filename)-2,".Z") == 0)) ||
((strlen(filename) > 3) &&
}
else
#endif
-#if defined(HasBZLIB)
+#if defined(HasBZLIB) && !defined(DISABLE_COMPRESSED_FILES)
if ((strlen(filename) > 4) &&
(LocaleCompare(filename+strlen(filename)-4,".bz2") == 0))
{
" read %" MAGICK_SIZE_T_F
"u magic header bytes",
(MAGICK_SIZE_T) count);
-#if defined(HasZLIB)
+#if defined(HasZLIB) && !defined(DISABLE_COMPRESSED_FILES)
if ((magick[0] == 0x1FU) && (magick[1] == 0x8BU) &&
(magick[2] == 0x08U))
{
}
}
#endif
-#if defined(HasBZLIB)
+#if defined(HasBZLIB) && !defined(DISABLE_COMPRESSED_FILES)
if (strncmp((char *) magick,"BZh",3) == 0)
{
if (image->blob->handle.std)
}
case ZipStream:
{
-#if defined(HasZLIB)
+#if defined(HasZLIB) && !defined(DISABLE_COMPRESSED_FILES)
size_t
i;
}
case BZipStream:
{
-#if defined(HasBZLIB)
+#if defined(HasBZLIB) && !defined(DISABLE_COMPRESSED_FILES)
size_t
i;
return(-1);
case ZipStream:
{
-#if defined(HasZLIB)
+#if defined(HasZLIB) && !defined(DISABLE_COMPRESSED_FILES)
if (gzseek(image->blob->handle.gz,(off_t) offset,whence) < 0)
return(-1);
#endif
}
case ZipStream:
{
-#if defined(HasZLIB)
+#if defined(HasZLIB) && !defined(DISABLE_COMPRESSED_FILES)
status=gzflush(image->blob->handle.gz,Z_SYNC_FLUSH);
#endif
break;
}
case BZipStream:
{
-#if defined(HasBZLIB)
+#if defined(HasBZLIB) && !defined(DISABLE_COMPRESSED_FILES)
status=BZ2_bzflush(image->blob->handle.bz);
#endif
break;
case PipeStream:
case ZipStream:
{
-#if defined(HasZLIB)
+#if defined(HasZLIB) && !defined(DISABLE_COMPRESSED_FILES)
offset=gztell(image->blob->handle.gz);
#endif
break;
}
case ZipStream:
{
-#if defined(HasZLIB)
+#if defined(HasZLIB) && !defined(DISABLE_COMPRESSED_FILES)
size_t
i;
}
case BZipStream:
{
-#if defined(HasBZLIB)
+#if defined(HasBZLIB) && !defined(DISABLE_COMPRESSED_FILES)
size_t
i;
% which specify the number of times each unique color occurs in the image.
% The referenced colors parameter is updated with the number of unique colors
% in the image. The returned array should be deallocated by the user once it
-% is no longer ndded.
+% is no longer needed.
%
% The format of the GetColorHistogram method is:
%
/*
-% Copyright (C) 2003 - 2019 GraphicsMagick Group
+% Copyright (C) 2003 - 2020 GraphicsMagick Group
% Copyright (C) 2002 ImageMagick Studio
%
% This program is covered by multiple licenses, which are described in
*/
#define ThrowCompareException(code,reason,description) \
{ \
- DestroyImageList(compare_image); \
- DestroyImageList(difference_image); \
- DestroyImageList(reference_image); \
+ status=MagickFail; \
ThrowException(exception,code,reason,description); \
- LiberateArgumentList(argc,argv); \
- return(MagickFail); \
+ goto compare_cleanup_and_return; \
}
#define ThrowCompareException3(code,reason,description) \
{ \
- DestroyImageList(compare_image); \
- DestroyImageList(difference_image); \
- DestroyImageList(reference_image); \
+ status=MagickFail; \
ThrowException3(exception,code,reason,description); \
- LiberateArgumentList(argc,argv); \
- return(MagickFail); \
+ goto compare_cleanup_and_return; \
}
MagickExport MagickPassFail
CompareImageCommand(ImageInfo *image_info,
MetricType
metric=UndefinedMetric;
+ enum {
+ UndefinedMatte,
+ IgnoreMatte,
+ StoreMatte
+ } matte=UndefinedMatte;
+
DifferenceImageOptions
difference_options;
case 'm':
{
if (LocaleCompare("matte",option+1) == 0)
- break;
+ {
+ if (*option == '+')
+ matte=IgnoreMatte;
+ else
+ matte=StoreMatte;
+ break;
+ }
if (LocaleCompare("maximum-error",option+1) == 0)
{
if (*option == '-')
image_info->verbose+=(*option == '-');
break;
}
- if (LocaleCompare("verbose",option+1) == 0)
+ if (LocaleCompare("version",option+1) == 0)
break;
ThrowCompareException(OptionError,UnrecognizedOption,option)
}
if (compare_image == (Image *) NULL)
{
if (exception->severity == UndefinedException)
- ThrowCompareException(OptionError,RequestDidNotReturnAnImage,
- (char *) NULL);
- return(MagickFail);
+ ThrowException(exception,OptionError,RequestDidNotReturnAnImage,(char *) NULL);
+ }
+ if (reference_image == (Image *) NULL)
+ {
+ if (exception->severity == UndefinedException)
+ ThrowException(exception,OptionError,MissingAnImageFilename,(char *) NULL);
}
if ((reference_image == (Image *) NULL) ||
(compare_image == (Image *) NULL))
- ThrowCompareException(OptionError,MissingAnImageFilename,(char *) NULL);
+ {
+ status=MagickFail;
+ goto compare_cleanup_and_return;
+ }
/*
Apply any user settings to images prior to compare.
(void) TransformColorspace(compare_image,image_info->colorspace);
}
+ if (matte != UndefinedMatte)
+ {
+ if (matte == IgnoreMatte)
+ {
+ reference_image->matte=MagickFalse;
+ compare_image->matte=MagickFalse;
+ }
+ else if (matte == StoreMatte)
+ {
+ if (reference_image->matte == MagickFalse)
+ SetImageOpacity(reference_image,OpaqueOpacity);
+ reference_image->matte=MagickTrue;
+ if (compare_image->matte == MagickFalse)
+ SetImageOpacity(compare_image,OpaqueOpacity);
+ compare_image->matte=MagickTrue;
+ }
+ }
+
if (metric != UndefinedMetric)
{
/*
}
}
+ compare_cleanup_and_return:
+
DestroyImageList(difference_image);
DestroyImageList(reference_image);
DestroyImageList(compare_image);
#define NotInitialized (unsigned int) (~0)
#define ThrowCompositeException(code,reason,description) \
{ \
- LiberateCompositeOptions(&option_info); \
- DestroyImageList(image); \
- DestroyImageList(composite_image); \
- DestroyImageList(mask_image); \
+ status=MagickFail; \
ThrowException(exception,code,reason,description); \
- LiberateArgumentList(argc,argv); \
- return(MagickFail); \
+ goto composite_cleanup_and_return; \
}
#define ThrowCompositeException3(code,reason,description) \
{ \
- LiberateCompositeOptions(&option_info); \
- DestroyImageList(image); \
- DestroyImageList(composite_image); \
- DestroyImageList(mask_image); \
+ status=MagickFail; \
ThrowException3(exception,code,reason,description); \
- LiberateArgumentList(argc,argv); \
- return(MagickFail); \
+ goto composite_cleanup_and_return; \
}
MagickExport MagickPassFail CompositeImageCommand(ImageInfo *image_info,
int argc,char **argv,char **metadata,ExceptionInfo *exception)
image_info->verbose+=(*option == '-');
break;
}
- if (LocaleCompare("verbose",option+1) == 0)
+ if (LocaleCompare("version",option+1) == 0)
break;
if (LocaleCompare("virtual-pixel",option+1) == 0)
{
if (image == (Image *) NULL)
{
if (exception->severity == UndefinedException)
- ThrowCompositeException(OptionError,RequestDidNotReturnAnImage,
- (char *) NULL);
- return(MagickFail);
+ ThrowException(exception,OptionError,RequestDidNotReturnAnImage,(char *) NULL);
+ status=MagickFail;
+ goto composite_cleanup_and_return;
}
if (i != (argc-1))
ThrowCompositeException(OptionError,MissingAnImageFilename,(char *) NULL);
(void) ConcatenateString(&(*metadata),"\n");
MagickFreeMemory(text);
}
+
+ composite_cleanup_and_return:
+
LiberateCompositeOptions(&option_info);
DestroyImageList(composite_image);
DestroyImageList(mask_image);
image_info->verbose+=(*option == '-');
break;
}
- if (LocaleCompare("verbose",option+1) == 0)
+ if (LocaleCompare("version",option+1) == 0)
break;
if (LocaleCompare("view",option+1) == 0)
{
image_info->verbose+=(*option == '-');
break;
}
- if (LocaleCompare("verbose",option+1) == 0)
+ if (LocaleCompare("version",option+1) == 0)
break;
if (LocaleCompare("virtual-pixel",option+1) == 0)
{
{
if (LocaleCompare("label",option+1) == 0)
{
- fprintf(stderr,"%d: Handling label\n",__LINE__);
(void) SetImageAttribute(*image,"label",(char *) NULL);
if (*option == '-')
{
image_info->verbose+=(*option == '-');
break;
}
- if (LocaleCompare("verbose",option+1) == 0)
+ if (LocaleCompare("version",option+1) == 0)
break;
if (LocaleCompare("virtual-pixel",option+1) == 0)
{
/* Ghostscript Library */
supported=MagickFalse;
-#if defined(HasGS)
+#if defined(HasGSLIB)
supported=MagickTrue;
-#endif /* defined(HasGS) */
+#endif /* defined(HasGSLIB) */
PrintFeature("Ghostscript (Library)", supported);
/* JBIG */
} \
}
MagickExport MagickPassFail HuffmanEncode2Image(const ImageInfo *image_info,
- Image *image, WriteByteHook write_byte, void *info)
+ Image *image, WriteByteHook write_byte, void *info)
{
const HuffmanTable
*entry;
scanline=MagickAllocateMemory(unsigned char *,(size_t) width+1);
if (scanline == (unsigned char *) NULL)
ThrowBinaryException(ResourceLimitError,MemoryAllocationFailed,
- (char *) NULL);
+ (char *) NULL);
huffman_image=CloneImage(image,0,0,True,&image->exception);
if (huffman_image == (Image *) NULL)
{
MagickFreeMemory(scanline);
return(MagickFail);
}
- status &= SetImageType(huffman_image,BilevelType);
+ if (SetImageType(huffman_image,BilevelType) != MagickPass)
+ {
+ CopyException(&image->exception,&huffman_image->exception);
+ MagickFreeMemory(scanline);
+ return(MagickFail);
+ }
byte=0;
bit=0x80;
if (is_fax == True)
polarity=(PixelIntensity(&huffman_image->colormap[0]) < (MaxRGB/2));
if (huffman_image->colors == 2)
polarity=(PixelIntensityToQuantum(&huffman_image->colormap[0]) <
- PixelIntensityToQuantum(&huffman_image->colormap[1]) ? 0x00 : 0x01);
+ PixelIntensityToQuantum(&huffman_image->colormap[1]) ? 0x00 : 0x01);
q=scanline;
for (i=0; i < width; i++) /* was: for (i=(long) width; i > 0; i--) */
*q++=(unsigned char) polarity;
q=scanline;
for (y=0; y < huffman_image->rows; y++)
- {
- p=AcquireImagePixels(huffman_image,0,y,huffman_image->columns,1,
- &huffman_image->exception);
- if (p == (const PixelPacket *) NULL)
- {
- status=MagickFail;
- break;
- }
- indexes=AccessImmutableIndexes(huffman_image);
- for (x=0; x < huffman_image->columns; x++)
- {
- *q=(unsigned char) (indexes[x] == polarity ? !polarity : polarity);
- q++;
- }
- /*
- Huffman encode scanline.
- */
- q=scanline;
- for (n=(long) width; n > 0; )
{
- /*
- Output white run.
- */
- for (runlength=0; ((n > 0) && (*q == polarity)); n--)
- {
- q++;
- runlength++;
- }
- if (runlength >= 64)
+ p=AcquireImagePixels(huffman_image,0,y,huffman_image->columns,1,
+ &huffman_image->exception);
+ indexes=AccessImmutableIndexes(huffman_image);
+ if ((p == (const PixelPacket *) NULL) ||
+ (indexes == (const IndexPacket *) NULL))
{
- if (runlength < 1792)
- entry=MWTable+(((size_t) runlength/64)-1);
- else
- entry=EXTable+(Min(runlength,2560)-1792)/64;
- runlength-=entry->count;
- HuffmanOutputCode(entry);
+ status=MagickFail;
+ break;
+ }
+ for (x=0; x < huffman_image->columns; x++)
+ {
+ *q=(unsigned char) (indexes[x] == polarity ? !polarity : polarity);
+ q++;
}
- entry=TWTable+Min(runlength,63);
- HuffmanOutputCode(entry);
- if (n != 0)
+ /*
+ Huffman encode scanline.
+ */
+ q=scanline;
+ for (n=(long) width; n > 0; )
{
/*
- Output black run.
+ Output white run.
*/
- for (runlength=0; ((*q != polarity) && (n > 0)); n--)
- {
- q++;
- runlength++;
- }
+ for (runlength=0; ((n > 0) && (*q == polarity)); n--)
+ {
+ q++;
+ runlength++;
+ }
if (runlength >= 64)
{
- entry=MBTable+(((size_t) runlength/64)-1);
- if (runlength >= 1792)
+ if (runlength < 1792)
+ entry=MWTable+(((size_t) runlength/64)-1);
+ else
entry=EXTable+(Min(runlength,2560)-1792)/64;
runlength-=entry->count;
HuffmanOutputCode(entry);
}
- entry=TBTable+Min(runlength,63);
+ entry=TWTable+Min(runlength,63);
HuffmanOutputCode(entry);
+ if (n != 0)
+ {
+ /*
+ Output black run.
+ */
+ for (runlength=0; ((*q != polarity) && (n > 0)); n--)
+ {
+ q++;
+ runlength++;
+ }
+ if (runlength >= 64)
+ {
+ entry=MBTable+(((size_t) runlength/64)-1);
+ if (runlength >= 1792)
+ entry=EXTable+(Min(runlength,2560)-1792)/64;
+ runlength-=entry->count;
+ HuffmanOutputCode(entry);
+ }
+ entry=TBTable+Min(runlength,63);
+ HuffmanOutputCode(entry);
+ }
+ } /* for (n=... */
+ /*
+ End of line.
+ */
+ for (k=0; k < 11; k++)
+ OutputBit(0);
+ OutputBit(1);
+ q=scanline;
+ if (huffman_image->previous == (Image *) NULL)
+ if (QuantumTick(y,huffman_image->rows))
+ if (!MagickMonitorFormatted(y,huffman_image->rows,&image->exception,
+ "[%s] Huffman encode image...",image->filename))
+ {
+ status=MagickFail;
+ break;
+ }
+ } /* for (y=... */
+ if (status == MagickPass)
+ {
+ /*
+ End of page.
+ */
+ for (i=0; i < 6; i++)
+ {
+ for (k=0; k < 11; k++)
+ OutputBit(0);
+ OutputBit(1);
}
+ /*
+ Flush bits.
+ */
+ if (bit != 0x80U)
+ (void) (*write_byte)(image,(magick_uint8_t)byte,info);
}
- /*
- End of line.
- */
- for (k=0; k < 11; k++)
- OutputBit(0);
- OutputBit(1);
- q=scanline;
- if (huffman_image->previous == (Image *) NULL)
- if (QuantumTick(y,huffman_image->rows))
- if (!MagickMonitorFormatted(y,huffman_image->rows,&image->exception,
- "[%s] Huffman encode image...",image->filename))
- {
- status=MagickFail;
- break;
- }
- }
- /*
- End of page.
- */
- for (i=0; i < 6; i++)
- {
- for (k=0; k < 11; k++)
- OutputBit(0);
- OutputBit(1);
- }
- /*
- Flush bits.
- */
- if (bit != 0x80U)
- (void) (*write_byte)(image,(magick_uint8_t)byte,info);
DestroyImage(huffman_image);
MagickFreeMemory(scanline);
return(status);
size_t
length;
+ unsigned int
+ storage_type_depth = QuantumDepth;
+
/*
Allocate image structure.
*/
image->columns=width;
image->rows=height;
+ switch (type)
+ {
+ case CharPixel : storage_type_depth = sizeof(unsigned char)*8 ; break;
+ case ShortPixel : storage_type_depth = sizeof(unsigned short)*8 ; break;
+ case IntegerPixel : storage_type_depth = sizeof(unsigned short)*8 ; break;
+ case LongPixel : storage_type_depth = sizeof(unsigned long)*8 ; break;
+ case FloatPixel : storage_type_depth = sizeof(float)*8 ; break;
+ case DoublePixel : storage_type_depth = sizeof(double)*8 ; break;
+ }
+
+ image->depth = Min(storage_type_depth,QuantumDepth);
+
/*
Handle a few common special cases in order to improve performance.
*/
*min=0.0;
*max=1.0;
- status=MagickFail;
+ status=MagickPass;
filepos = TellBlob(image);
read_func = ReadBlob;
MagickFindMinMax(status,image,read_func,char,scanline_octets,
- scanline_buffer,min,max)
- break;
+ scanline_buffer,min,max);
+ break;
}
case ShortPixel:
{
}
}
- (void) SeekBlob(image, filepos, SEEK_SET);
+ if (SeekBlob(image, filepos, SEEK_SET) != filepos)
+ status = MagickFail;
}
return status;
DestroyImage(image);
return((Image *) NULL);
}
- (void) ImageToFile(image,clone_info->filename,exception);
+ if (ImageToFile(image,clone_info->filename,exception) == MagickFail)
+ {
+ LiberateTemporaryFile(clone_info->filename);
+ CloseBlob(image);
+ DestroyImageInfo(clone_info);
+ DestroyImage(image);
+ return(MagickFail);
+ }
clone_info->temporary=True;
}
CloseBlob(image);
*/
height=(long) (frame_info->outer_bevel+(frame_info->y-bevel_width)+
frame_info->inner_bevel);
- q=SetImagePixelsEx(frame_image,0,0,frame_image->columns,height,exception);
- if (q != (PixelPacket *) NULL)
+ if (height > 0)
{
- for (y=0; y < frame_info->outer_bevel; y++)
+ q=SetImagePixelsEx(frame_image,0,0,frame_image->columns,height,exception);
+ if (q != (PixelPacket *) NULL)
{
- for (x=0; x < (long) (frame_image->columns-y); x++)
- if (x < y)
- *q++=highlight;
- else
- *q++=accentuate;
- for ( ; x < (long) frame_image->columns; x++)
- *q++=shadow;
- }
- for (y=0; y < (long) (frame_info->y-bevel_width); y++)
- {
- for (x=0; x < frame_info->outer_bevel; x++)
- *q++=highlight;
- width=(long) (frame_image->columns-2*frame_info->outer_bevel);
- for (x=0; x < (long) width; x++)
- *q++=matte;
- for (x=0; x < frame_info->outer_bevel; x++)
- *q++=shadow;
- }
- for (y=0; y < frame_info->inner_bevel; y++)
- {
- for (x=0; x < frame_info->outer_bevel; x++)
- *q++=highlight;
- for (x=0; x < (long) (frame_info->x-bevel_width); x++)
- *q++=matte;
- width=(long) (image->columns+(frame_info->inner_bevel << 1)-y);
- for (x=0; x < width; x++)
- if (x < y)
- *q++=shadow;
- else
- *q++=trough;
- for ( ; x < (long) (image->columns+(frame_info->inner_bevel << 1)); x++)
- *q++=highlight;
- width=(long)
- (frame_info->width-frame_info->x-image->columns-bevel_width);
- for (x=0; x < width; x++)
- *q++=matte;
- for (x=0; x < frame_info->outer_bevel; x++)
- *q++=shadow;
+ for (y=0; y < frame_info->outer_bevel; y++)
+ {
+ for (x=0; x < (long) (frame_image->columns-y); x++)
+ if (x < y)
+ *q++=highlight;
+ else
+ *q++=accentuate;
+ for ( ; x < (long) frame_image->columns; x++)
+ *q++=shadow;
+ }
+ for (y=0; y < (long) (frame_info->y-bevel_width); y++)
+ {
+ for (x=0; x < frame_info->outer_bevel; x++)
+ *q++=highlight;
+ width=(long) (frame_image->columns-2*frame_info->outer_bevel);
+ for (x=0; x < (long) width; x++)
+ *q++=matte;
+ for (x=0; x < frame_info->outer_bevel; x++)
+ *q++=shadow;
+ }
+ for (y=0; y < frame_info->inner_bevel; y++)
+ {
+ for (x=0; x < frame_info->outer_bevel; x++)
+ *q++=highlight;
+ for (x=0; x < (long) (frame_info->x-bevel_width); x++)
+ *q++=matte;
+ width=(long) (image->columns+(frame_info->inner_bevel << 1)-y);
+ for (x=0; x < width; x++)
+ if (x < y)
+ *q++=shadow;
+ else
+ *q++=trough;
+ for ( ; x < (long) (image->columns+(frame_info->inner_bevel << 1)); x++)
+ *q++=highlight;
+ width=(long)
+ (frame_info->width-frame_info->x-image->columns-bevel_width);
+ for (x=0; x < width; x++)
+ *q++=matte;
+ for (x=0; x < frame_info->outer_bevel; x++)
+ *q++=shadow;
+ }
+ (void) SyncImagePixelsEx(frame_image,exception);
}
- (void) SyncImagePixelsEx(frame_image,exception);
}
/*
Draw sides of ornamental border.
*/
height=(long) (frame_info->inner_bevel+frame_info->height-frame_info->y-
image->rows-bevel_width+frame_info->outer_bevel);
- q=SetImagePixelsEx(frame_image,0,(long) (frame_image->rows-height),
- frame_image->columns,height,exception);
- if (q == (PixelPacket *) NULL)
- return(frame_image);
- for (y=frame_info->inner_bevel-1; y >= 0; y--)
+ if (height > 0)
{
- for (x=0; x < frame_info->outer_bevel; x++)
- *q++=highlight;
- for (x=0; x < (long) (frame_info->x-bevel_width); x++)
- *q++=matte;
- for (x=0; x < y; x++)
- *q++=shadow;
- for ( ; x < (long) (image->columns+(frame_info->inner_bevel << 1)); x++)
- if (x >= (long) (image->columns+(frame_info->inner_bevel << 1)-y))
- *q++=highlight;
- else
- *q++=accentuate;
- width=(long) (frame_info->width-frame_info->x-image->columns-bevel_width);
- for (x=0; x < (long) width; x++)
- *q++=matte;
- for (x=0; x < frame_info->outer_bevel; x++)
- *q++=shadow;
- }
- height=(long) (frame_info->height-frame_info->y-image->rows-bevel_width);
- for (y=0; y < height; y++)
- {
- for (x=0; x < frame_info->outer_bevel; x++)
- *q++=highlight;
- for (x=0; x < (long) (frame_image->columns-2*frame_info->outer_bevel); x++)
- *q++=matte;
- for (x=0; x < frame_info->outer_bevel; x++)
- *q++=shadow;
- }
- for (y=frame_info->outer_bevel-1; y >= 0; y--)
- {
- for (x=0; x < y; x++)
- *q++=highlight;
- for ( ; x < (long) frame_image->columns; x++)
- if (x >= (long) (frame_image->columns-y))
- *q++=shadow;
- else
- *q++=trough;
+ q=SetImagePixelsEx(frame_image,0,(long) (frame_image->rows-height),
+ frame_image->columns,height,exception);
+ if (q == (PixelPacket *) NULL)
+ return(frame_image);
+ for (y=frame_info->inner_bevel-1; y >= 0; y--)
+ {
+ for (x=0; x < frame_info->outer_bevel; x++)
+ *q++=highlight;
+ for (x=0; x < (long) (frame_info->x-bevel_width); x++)
+ *q++=matte;
+ for (x=0; x < y; x++)
+ *q++=shadow;
+ for ( ; x < (long) (image->columns+(frame_info->inner_bevel << 1)); x++)
+ if (x >= (long) (image->columns+(frame_info->inner_bevel << 1)-y))
+ *q++=highlight;
+ else
+ *q++=accentuate;
+ width=(long) (frame_info->width-frame_info->x-image->columns-bevel_width);
+ for (x=0; x < (long) width; x++)
+ *q++=matte;
+ for (x=0; x < frame_info->outer_bevel; x++)
+ *q++=shadow;
+ }
+ height=(long) (frame_info->height-frame_info->y-image->rows-bevel_width);
+ for (y=0; y < height; y++)
+ {
+ for (x=0; x < frame_info->outer_bevel; x++)
+ *q++=highlight;
+ for (x=0; x < (long) (frame_image->columns-2*frame_info->outer_bevel); x++)
+ *q++=matte;
+ for (x=0; x < frame_info->outer_bevel; x++)
+ *q++=shadow;
+ }
+ for (y=frame_info->outer_bevel-1; y >= 0; y--)
+ {
+ for (x=0; x < y; x++)
+ *q++=highlight;
+ for ( ; x < (long) frame_image->columns; x++)
+ if (x >= (long) (frame_image->columns-y))
+ *q++=shadow;
+ else
+ *q++=trough;
+ }
+ (void) SyncImagePixelsEx(frame_image,exception);
}
- (void) SyncImagePixelsEx(frame_image,exception);
frame_image->is_grayscale=is_grayscale;
return(frame_image);
/*
-% Copyright (C) 2003 - 2016 GraphicsMagick Group
+% Copyright (C) 2003 - 2020 GraphicsMagick Group
% Copyright (C) 2002 ImageMagick Studio
%
% This program is covered by multiple licenses, which are described in
InvokePostscriptDelegate(const unsigned int verbose,
const char *command,ExceptionInfo *exception)
{
+ int
+ status;
+
+#if defined(HasGS)
+
register long
i;
int
argc;
- int
- status;
-
-#if defined(HasGS) || defined(MSWINDOWS)
+#if (defined(HasGSLIB) || defined(MSWINDOWS))
gs_main_instance
*interpreter;
*gs_func;
gs_func=NTGhostscriptDLLVectors();
-#elif defined(HasGS)
+#elif defined(HasGSLIB)
GhostscriptVectors
gs_func_struct;
"Returning with success");
return(MagickPass);
}
-#endif /* defined(HasGS) || defined(MSWINDOWS) */
+#endif /* defined(HasGSLIB) || defined(MSWINDOWS) */
status=MagickFail;
{
MagickFreeMemory(argv);
}
}
+#else
+
+ /*
+ Ghostscript is not supported at all!
+ */
+ (void) verbose;
+ (void) command;
+ (void) exception;
+
+ status = MagickFail;
+
+#endif /* if defined(HasGS) */
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
"Returning with %s", status == MagickFail ?
path[MaxTextExtent];
BinPath[0]=0;
+#if defined(HasGS)
/* Substitute @PSDelegate@ with path to Ghostscript */
NTGhostscriptEXE(path,MaxTextExtent-1);
SubstituteString((char **) &delegate_list->commands,
"@PSDelegate@",path);
+#endif /* if defined(HasGS) */
# if defined(UseInstalledMagick)
# if defined(MagickBinPath)
#if defined(MAGICK_IMPLEMENTATION)
-#if defined(HasGS)
+#if defined(HasGSLIB)
#include "ghostscript/iapi.h"
#endif
CurrentContext->primitive = context->mvg;
(void) LogMagickEvent(RenderEvent,GetMagickModule(),"MVG:\n'%s'\n",context->mvg);
+ /* SetImageAttribute concatenates values! Delete with NULL */
+ (void) SetImageAttribute(context->image,"[MVG]",NULL);
+ (void) SetImageAttribute(context->image,"[MVG]",CurrentContext->primitive);
(void) DrawImage(context->image, CurrentContext);
CurrentContext->primitive = (char *) NULL;
/*
-% Copyright (C) 2003-2019 GraphicsMagick Group
+% Copyright (C) 2003-2020 GraphicsMagick Group
% Copyright (C) 2002 ImageMagick Studio
%
% This program is covered by multiple licenses, which are described in
* pre-computed data and only for pixels inside valid
* domain
*/
- if ((y > (height/2 + height)) && (x >= width) &&
+ if ((q != (PixelPacket *) NULL) && /* FIXME: May be patching over a bug! */
+ (y > (height/2 + height)) && (x >= width) &&
(x < (image->columns + width)))
{
/* Left, Right, Upper, Bottom coord. to calculate the
MagickFreeMemory(kernel);
- if (status != MagickFail)
+ if (blur_image != (Image *) NULL)
blur_image->is_grayscale=original_image->is_grayscale;
return(blur_image);
return (Image *) NULL;
}
- despeckle_image->is_grayscale=image->is_grayscale;
+ if (despeckle_image != (Image *) NULL)
+ despeckle_image->is_grayscale=image->is_grayscale;
return(despeckle_image);
}
\f
kernel[i/2]=(double) width*width-1.0;
edge_image=ConvolveImage(image,width,kernel,exception);
MagickFreeMemory(kernel);
- edge_image->is_grayscale=image->is_grayscale;
+ if (edge_image != (Image *) NULL)
+ edge_image->is_grayscale=image->is_grayscale;
return(edge_image);
}
\f
}
}
}
- enhance_image->is_grayscale=image->is_grayscale;
+ if (enhance_image != (Image *) NULL)
+ enhance_image->is_grayscale=image->is_grayscale;
return(enhance_image);
}
\f
}
blur_image=ConvolveImage(image,width,kernel,exception);
MagickFreeMemory(kernel);
- blur_image->is_grayscale=image->is_grayscale;
+ if (blur_image != (Image *) NULL)
+ blur_image->is_grayscale=image->is_grayscale;
return(blur_image);
}
\f
}
}
DestroyThreadViewDataSet(data_set);
- median_image->is_grayscale=image->is_grayscale;
+ if (median_image != (Image *) NULL)
+ median_image->is_grayscale=image->is_grayscale;
return(median_image);
}
\f
}
MagickFreeMemory(kernel);
MagickFreeMemory(offsets);
- blur_image->is_grayscale=image->is_grayscale;
+ if (blur_image != (Image *) NULL)
+ blur_image->is_grayscale=image->is_grayscale;
return(blur_image);
}
\f
%
*/
+static PixelPacket GetNonpeakMedianList(MedianPixelList *pixel_list) MAGICK_FUNC_PURE;
+
static PixelPacket GetNonpeakMedianList(MedianPixelList *pixel_list)
{
PixelPacket
}
}
DestroyThreadViewDataSet(data_set);
- noise_image->is_grayscale=image->is_grayscale;
+ if (noise_image != (Image *) NULL)
+ noise_image->is_grayscale=image->is_grayscale;
return(noise_image);
}
\f
}
}
}
- shade_image->is_grayscale=image->is_grayscale;
- if (gray)
- shade_image->is_grayscale=True;
+ if (shade_image != (Image *) NULL)
+ {
+ shade_image->is_grayscale=image->is_grayscale;
+ if (gray)
+ shade_image->is_grayscale=True;
+ }
return(shade_image);
}
\f
kernel[i/2]=(-2.0)*normalize;
sharp_image=ConvolveImage(image,width,kernel,exception);
MagickFreeMemory(kernel);
- sharp_image->is_grayscale=image->is_grayscale;
+ if (sharp_image != (Image *) NULL)
+ sharp_image->is_grayscale=image->is_grayscale;
return(sharp_image);
}
\f
}
}
MagickFreeMemory(offsets);
- spread_image->is_grayscale=image->is_grayscale;
- spread_image->is_monochrome=image->is_monochrome;
+ if (spread_image != (Image *) NULL)
+ {
+ spread_image->is_grayscale=image->is_grayscale;
+ spread_image->is_monochrome=image->is_monochrome;
+ }
return(spread_image);
}
\f
if (description != (char *) NULL)
(void) fprintf(stderr," (%.1024s)",description);
}
+ /*
+ FIXME: The following captures a random errno value rather than the
+ errno associated with the actual error.
+ */
if ((severity != OptionError) && errno)
(void) fprintf(stderr," [%.1024s]",GetErrorMessageString(errno));
(void) fprintf(stderr,".\n");
% MagickFatalError() calls the fatal error handler methods with an error
% reason. The fatal error handler is not expected to return!
%
-% The format of the MagickError method is:
+% The format of the MagickFatalError method is:
%
% void MagickFatalError(const ExceptionType error,const char *reason,
% const char *description)
MagickExport void ThrowException(ExceptionInfo *exception,
const ExceptionType severity,const char *reason,const char *description)
{
+ const int orig_errno=errno;
assert(exception != (ExceptionInfo *) NULL);
assert(exception->signature == MagickSignature);
LockSemaphoreInfo(error_semaphore);
MagickFreeMemory(exception->description);
exception->description=new_description;
}
- exception->error_number=errno;
+ exception->error_number=orig_errno;
MagickFreeMemory(exception->module);
MagickFreeMemory(exception->function);
exception->line=0UL;
const char *function,
const unsigned long line)
{
+ const int orig_errno=errno;
MagickBool ignore = MagickFalse;
assert(exception != (ExceptionInfo *) NULL);
assert(function != (const char *) NULL);
exception->description=new_description;
}
- exception->error_number=errno;
+ exception->error_number=orig_errno;
{
char *new_module = NULL;
if (module)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% AllocateImage() returns a pointer to an image structure initialized to
-% default values.
+% default values. Currently a failure in this function results in a fatal
+% error, resulting in program exit.
%
% The format of the AllocateImage method is:
%
/*
Allocate image structure.
*/
- allocate_image=MagickAllocateMemory(Image *,sizeof(Image));
+ allocate_image=MagickAllocateClearedMemory(Image *,sizeof(Image));
if (allocate_image == (Image *) NULL)
MagickFatalError3(ResourceLimitFatalError,MemoryAllocationFailed,
UnableToAllocateImage);
- (void) memset(allocate_image,0,sizeof(Image));
+
+ allocate_image->signature=MagickSignature;
+ allocate_image->semaphore=AllocateSemaphoreInfo(); /* Fatal errors on failure */
+ allocate_image->reference_count=1;
+ /* Entry conditions for DestroyImage() are now satisfied */
/* allocate and initialize struct for extra Image members */
- ImgExtra = MagickAllocateMemory(ImageExtra *,sizeof(ImageExtra));
+ ImgExtra = MagickAllocateClearedMemory(ImageExtra *,sizeof(ImageExtra));
if ( ImgExtra == (ImageExtra *) NULL )
- MagickFatalError3(ResourceLimitFatalError,MemoryAllocationFailed,UnableToAllocateImage);
- memset(ImgExtra,0,sizeof(*ImgExtra));
+ MagickFatalError3(ResourceLimitFatalError,MemoryAllocationFailed,
+ UnableToAllocateImage);
allocate_image->extra = ImgExtra;
/*
allocate_image->orientation=UndefinedOrientation;
GetTimerInfo(&allocate_image->timer);
GetCacheInfo(&allocate_image->cache);
+ if (allocate_image->cache == (_CacheInfoPtr_) NULL)
+ {
+ DestroyImage(allocate_image);
+ MagickFatalError3(ResourceLimitError,MemoryAllocationFailed,
+ UnableToAllocateImage);
+ }
allocate_image->blob=CloneBlobInfo((BlobInfo *) NULL);
allocate_image->logging=IsEventLogging();
allocate_image->is_monochrome=MagickTrue;
allocate_image->is_grayscale=MagickTrue;
- allocate_image->semaphore=AllocateSemaphoreInfo();
- LockSemaphoreInfo((SemaphoreInfo *) allocate_image->semaphore);
- allocate_image->reference_count=1;
- UnlockSemaphoreInfo((SemaphoreInfo *) allocate_image->semaphore);
- allocate_image->signature=MagickSignature;
allocate_image->default_views=AllocateThreadViewSet(allocate_image,
&allocate_image->exception);
+ if (allocate_image->default_views == (_ThreadViewSetPtr_) NULL)
+ {
+ DestroyImage(allocate_image);
+ MagickFatalError3(ResourceLimitError,MemoryAllocationFailed,
+ UnableToAllocateImage);
+ }
if (image_info == (ImageInfo *) NULL)
return(allocate_image);
/*
allocate_image->ping=image_info->ping;
if (image_info->attributes != (Image *) NULL)
- (void) CloneImageAttributes(allocate_image,image_info->attributes);
+ {
+ if (CloneImageAttributes(allocate_image,image_info->attributes) != MagickPass)
+ {
+ DestroyImage(allocate_image);
+ MagickFatalError3(ResourceLimitError,MemoryAllocationFailed,
+ UnableToAllocateImage);
+ }
+ }
return(allocate_image);
}
% default values. The next member of image points to the newly allocated
% image. If there is a memory shortage, next is assigned NULL.
%
+% It is expected that the image next pointer is null, since otherwise
+% there is likely to be a memory leak. In the future this may be enforced.
+%
% The format of the AllocateNextImage method is:
%
% void AllocateNextImage(const ImageInfo *image_info,Image *image)
*/
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
+#if 0
+ assert(image->next == (Image *) NULL);
+#endif
image->next=AllocateImage(image_info);
if (image->next == (Image *) NULL)
return;
ImageExtra
*ImgExtra;
- size_t
- length;
-
/*
Clone the image.
*/
assert(exception != (ExceptionInfo *) NULL);
assert(exception->signature == MagickSignature);
- clone_image=MagickAllocateMemory(Image *,sizeof(Image));
+ clone_image=MagickAllocateClearedMemory(Image *,sizeof(Image));
if (clone_image == (Image *) NULL)
ThrowImageException3(ResourceLimitError,MemoryAllocationFailed,
UnableToCloneImage);
- (void) memset(clone_image,0,sizeof(Image));
+
+ clone_image->signature=MagickSignature;
+ clone_image->semaphore=AllocateSemaphoreInfo(); /* Fatal errors on failure */
+ clone_image->reference_count=1;
+ /* Entry conditions for DestroyImage() are now satisfied */
/* allocate and initialize struct for extra Image members */
- ImgExtra = MagickAllocateMemory(ImageExtra *,sizeof(ImageExtra));
+ ImgExtra = MagickAllocateClearedMemory(ImageExtra *,sizeof(ImageExtra));
if ( ImgExtra == (ImageExtra *) NULL )
- ThrowImageException3(ResourceLimitError,MemoryAllocationFailed,UnableToCloneImage);
- memset(ImgExtra,0,sizeof(*ImgExtra));
+ {
+ DestroyImage(clone_image);
+ ThrowImageException3(ResourceLimitError,MemoryAllocationFailed,
+ UnableToCloneImage);
+ }
clone_image->extra = ImgExtra;
clone_image->storage_class=image->storage_class;
clone_image->depth=image->depth;
if (image->colormap != (PixelPacket *) NULL)
{
- /*
- Allocate and copy the image colormap.
- */
- clone_image->colors=image->colors;
- length=image->colors*sizeof(PixelPacket);
- clone_image->colormap=MagickAllocateMemory(PixelPacket *,length);
- if (clone_image->colormap == (PixelPacket *) NULL)
+ size_t
+ length;
+
+ length=MagickArraySize(image->colors,sizeof(PixelPacket));
+ if (length != 0)
{
- DestroyImage(clone_image);
- ThrowImageException3(ResourceLimitError,MemoryAllocationFailed,
- UnableToCloneImage);
+ /*
+ Allocate and copy the image colormap.
+ */
+ clone_image->colors=image->colors;
+ clone_image->colormap=MagickAllocateMemory(PixelPacket *,length);
+ if (clone_image->colormap == (PixelPacket *) NULL)
+ {
+ DestroyImage(clone_image);
+ ThrowImageException3(ResourceLimitError,MemoryAllocationFailed,
+ UnableToCloneImage);
+ }
+ (void) memcpy(clone_image->colormap,image->colormap,length);
}
- length=image->colors*sizeof(PixelPacket);
- (void) memcpy(clone_image->colormap,image->colormap,length);
}
clone_image->background_color=image->background_color;
clone_image->border_color=image->border_color;
Clone attached profiles.
*/
if (image->profiles)
- clone_image->profiles=MagickMapCloneMap(image->profiles,exception);
+ {
+ clone_image->profiles=MagickMapCloneMap(image->profiles,exception);
+ if (clone_image->profiles == (void *) NULL)
+ {
+ DestroyImage(clone_image);
+ return (Image *) NULL;
+ }
+ }
clone_image->orientation=image->orientation;
clone_image->rendering_intent=image->rendering_intent;
clone_image->units=image->units;
clone_image->endian=image->endian;
clone_image->gravity=image->gravity;
clone_image->compose=image->compose;
- clone_image->signature=MagickSignature;
(void) CloneImageAttributes(clone_image,image);
clone_image->scene=image->scene;
clone_image->dispose=image->dispose;
clone_image->iterations=image->iterations;
clone_image->total_colors=image->total_colors;
clone_image->error=image->error;
- clone_image->semaphore=AllocateSemaphoreInfo();
clone_image->logging=image->logging;
clone_image->timer=image->timer;
GetExceptionInfo(&clone_image->exception);
MaxTextExtent);
(void) strlcpy(clone_image->magick,image->magick,MaxTextExtent);
(void) strlcpy(clone_image->filename,image->filename,MaxTextExtent);
- LockSemaphoreInfo((SemaphoreInfo *) clone_image->semaphore);
- clone_image->reference_count=1;
- UnlockSemaphoreInfo((SemaphoreInfo *) clone_image->semaphore);
clone_image->previous=(Image *) NULL;
clone_image->list=(Image *) NULL;
clone_image->next=(Image *) NULL;
% the image if the reference count becomes zero. There is no effect if the
% image pointer is null.
%
+% In the interest of avoiding dangling pointers or memory leaks, the image
+% previous and next pointers should be null when this function is called,
+% and no other image should refer to it. In the future this may be enforced.
+%
% The format of the DestroyImage method is:
%
% void DestroyImage(Image *image)
Destroy image pixel cache.
*/
DestroyImagePixels(image);
- if (image->extra->clip_mask != (Image *) NULL)
- DestroyImage(image->extra->clip_mask);
- image->extra->clip_mask=(Image *) NULL;
- if (image->extra->composite_mask != (Image *) NULL)
- DestroyImage(image->extra->composite_mask);
- image->extra->composite_mask=(Image *) NULL;
- MagickFreeMemory(image->extra);
+ /*
+ Destroy ImageExtra
+ */
+ if (image->extra != (ImageExtra *) NULL)
+ {
+ if (image->extra->clip_mask != (Image *) NULL)
+ {
+ DestroyImage(image->extra->clip_mask);
+ image->extra->clip_mask=(Image *) NULL;
+ }
+ if (image->extra->composite_mask != (Image *) NULL)
+ {
+ DestroyImage(image->extra->composite_mask);
+ image->extra->composite_mask=(Image *) NULL;
+ }
+ MagickFreeMemory(image->extra);
+ }
MagickFreeMemory(image->montage);
MagickFreeMemory(image->directory);
MagickFreeMemory(image->colormap);
static const char
*virtual_delegates[] =
{
- "AUTOTRACE",
- "BROWSE",
- "EDIT",
- "GS-COLOR",
- "GS-COLOR+ALPHA",
- "GS-GRAY",
- "GS-MONO",
- "LAUNCH",
- "MPEG-ENCODE",
- "PRINT",
- "SCAN",
- "SHOW",
- "TMP",
- "WIN",
- NULL
+ "AUTOTRACE",
+ "BROWSE",
+ "EDIT",
+ "GS-COLOR",
+ "GS-COLOR+ALPHA",
+ "GS-GRAY",
+ "GS-MONO",
+ "LAUNCH",
+ "MPEG-ENCODE",
+ "PRINT",
+ "SCAN",
+ "SHOW",
+ "TMP",
+ "WIN",
+ NULL
};
char
/*
Copy standard input or pipe to temporary file.
*/
- if(!AcquireTemporaryFileName(filename))
+ if (!AcquireTemporaryFileName(filename))
{
CloseBlob(image);
DestroyImage(image);
return(MagickFail);
}
- (void) ImageToFile(image,filename,exception);
+ if (ImageToFile(image,filename,exception) == MagickFail)
+ {
+ LiberateTemporaryFile(filename);
+ CloseBlob(image);
+ DestroyImage(image);
+ return(MagickFail);
+ }
CloseBlob(image);
(void) strcpy(image->filename,filename);
status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
if (status == MagickFail)
{
+ LiberateTemporaryFile(filename);
DestroyImage(image);
return(MagickFail);
}
}
return MagickPass;
}
-MagickExport void SetImageOpacity(Image *image,const unsigned int opacity_val)
+MagickExport MagickPassFail SetImageOpacity(Image *image,const unsigned int opacity_val)
{
const unsigned int
opacity = opacity_val;
is_grayscale,
is_monochrome;
+ MagickPassFail
+ status = MagickPass;
+
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
is_grayscale=image->is_grayscale;
/*
Attenuate existing opacity channel
*/
- (void) PixelIterateMonoModify(ModulateImageOpacityCallBack,NULL,
- "[%s] Modulate opacity...",
- NULL,&opacity,0,0,image->columns,image->rows,
- image,&image->exception);
+ status&=PixelIterateMonoModify(ModulateImageOpacityCallBack,NULL,
+ "[%s] Modulate opacity...",
+ NULL,&opacity,0,0,image->columns,image->rows,
+ image,&image->exception);
}
else
{
Add new opacity channel or make existing opacity channel opaque
*/
image->matte=True;
- (void) PixelIterateMonoModify(SetImageOpacityCallBack,NULL,
- "[%s] Set opacity...",
- NULL,&opacity,0,0,image->columns,image->rows,
- image,&image->exception);
+ status&=PixelIterateMonoModify(SetImageOpacityCallBack,NULL,
+ "[%s] Set opacity...",
+ NULL,&opacity,0,0,image->columns,image->rows,
+ image,&image->exception);
}
image->is_grayscale=is_grayscale;
image->is_monochrome=is_monochrome;
+ return status;
}
\f
/*
SetImageCompositeMask(Image *image,const Image *composite_mask), /*to support SVG masks*/
SetImageDepth(Image *image,const unsigned long),
SetImageInfo(ImageInfo *image_info,const unsigned int flags,ExceptionInfo *exception),
+ SetImageOpacity(Image *,const unsigned int),
SetImageType(Image *image,const ImageType),
StripImage(Image *image),
SyncImage(Image *image);
DestroyImageInfo(ImageInfo *),
GetImageException(Image *,ExceptionInfo *),
GetImageInfo(ImageInfo *),
- ModifyImage(Image **,ExceptionInfo *),
- SetImageOpacity(Image *,const unsigned int);
+ ModifyImage(Image **,ExceptionInfo *);
/* provide public access to the clip_mask member of Image */
extern MagickExport Image
assert((*images)->signature == MagickSignature);
image->next=(*images)->next;
if (image->next != (Image *) NULL)
- image->next->previous=image;
+ {
+ image->next->previous=image;
+ (*images)->next=(Image *) NULL;
+ }
image->previous=(*images)->previous;
if (image->previous != (Image *) NULL)
- image->previous->next=image;
+ {
+ image->previous->next=image;
+ (*images)->previous=(Image *) NULL;
+ }
DestroyImage(*images);
(*images)=image;
}
extern MagickExport const char *GetLocaleMessageFromID(const int) MAGICK_FUNC_CONST;
-#define MAX_LOCALE_MSGS 583
+#define MAX_LOCALE_MSGS 585
#define MGK_BlobErrorUnableToCreateBlob 1
#define MGK_BlobErrorUnableToDeduceImageFormat 2
#define MGK_DrawErrorUnableToDrawOnImage 211
#define MGK_DrawErrorUnableToPrint 212
#define MGK_DrawErrorUnbalancedGraphicContextPushPop 213
-#define MGK_DrawErrorUnreasonableGradientSize 214
-#define MGK_DrawErrorVectorPathTruncated 215
-#define MGK_DrawFatalErrorDefault 216
-#define MGK_DrawWarningNotARelativeURL 217
-#define MGK_DrawWarningNotCurrentlyPushingPatternDefinition 218
-#define MGK_DrawWarningURLNotFound 219
-#define MGK_FileOpenErrorUnableToCreateTemporaryFile 220
-#define MGK_FileOpenErrorUnableToOpenFile 221
-#define MGK_FileOpenErrorUnableToWriteFile 222
-#define MGK_FileOpenFatalErrorDefault 223
-#define MGK_FileOpenWarningDefault 224
-#define MGK_ImageErrorAngleIsDiscontinuous 225
-#define MGK_ImageErrorCMYKAImageLacksAlphaChannel 226
-#define MGK_ImageErrorColorspaceColorProfileMismatch 227
-#define MGK_ImageErrorImageColorspaceDiffers 228
-#define MGK_ImageErrorImageColorspaceMismatch 229
-#define MGK_ImageErrorImageDifferenceExceedsLimit 230
-#define MGK_ImageErrorImageDoesNotContainResolution 231
-#define MGK_ImageErrorImageIsNotColormapped 232
-#define MGK_ImageErrorImageOpacityDiffers 233
-#define MGK_ImageErrorImageSequenceIsRequired 234
-#define MGK_ImageErrorImageSizeDiffers 235
-#define MGK_ImageErrorInvalidColormapIndex 236
-#define MGK_ImageErrorLeftAndRightImageSizesDiffer 237
-#define MGK_ImageErrorNoImagesWereFound 238
-#define MGK_ImageErrorNoImagesWereLoaded 239
-#define MGK_ImageErrorNoLocaleImageAttribute 240
-#define MGK_ImageErrorTooManyClusters 241
-#define MGK_ImageErrorUnableToAppendImage 242
-#define MGK_ImageErrorUnableToAssignProfile 243
-#define MGK_ImageErrorUnableToAverageImage 244
-#define MGK_ImageErrorUnableToCoalesceImage 245
-#define MGK_ImageErrorUnableToCompareImages 246
-#define MGK_ImageErrorUnableToCreateImageMosaic 247
-#define MGK_ImageErrorUnableToCreateStereoImage 248
-#define MGK_ImageErrorUnableToDeconstructImageSequence 249
-#define MGK_ImageErrorUnableToExportImagePixels 250
-#define MGK_ImageErrorUnableToFlattenImage 251
-#define MGK_ImageErrorUnableToGetClipMask 252
-#define MGK_ImageErrorUnableToGetCompositeMask 253
-#define MGK_ImageErrorUnableToHandleImageChannel 254
-#define MGK_ImageErrorUnableToImportImagePixels 255
-#define MGK_ImageErrorUnableToResizeImage 256
-#define MGK_ImageErrorUnableToSegmentImage 257
-#define MGK_ImageErrorUnableToSetClipMask 258
-#define MGK_ImageErrorUnableToSetCompositeMask 259
-#define MGK_ImageErrorUnableToShearImage 260
-#define MGK_ImageErrorWidthOrHeightExceedsLimit 261
-#define MGK_ImageFatalErrorUnableToPersistKey 262
-#define MGK_ImageWarningDefault 263
-#define MGK_MissingDelegateErrorDPSLibraryIsNotAvailable 264
-#define MGK_MissingDelegateErrorFPXLibraryIsNotAvailable 265
-#define MGK_MissingDelegateErrorFreeTypeLibraryIsNotAvailable 266
-#define MGK_MissingDelegateErrorJPEGLibraryIsNotAvailable 267
-#define MGK_MissingDelegateErrorLCMSLibraryIsNotAvailable 268
-#define MGK_MissingDelegateErrorLZWEncodingNotEnabled 269
-#define MGK_MissingDelegateErrorNoDecodeDelegateForThisImageFormat 270
-#define MGK_MissingDelegateErrorNoEncodeDelegateForThisImageFormat 271
-#define MGK_MissingDelegateErrorTIFFLibraryIsNotAvailable 272
-#define MGK_MissingDelegateErrorXMLLibraryIsNotAvailable 273
-#define MGK_MissingDelegateErrorXWindowLibraryIsNotAvailable 274
-#define MGK_MissingDelegateErrorZipLibraryIsNotAvailable 275
-#define MGK_MissingDelegateFatalErrorDefault 276
-#define MGK_MissingDelegateWarningDefault 277
-#define MGK_ModuleErrorFailedToCloseModule 278
-#define MGK_ModuleErrorFailedToFindSymbol 279
-#define MGK_ModuleErrorUnableToLoadModule 280
-#define MGK_ModuleErrorUnableToRegisterImageFormat 281
-#define MGK_ModuleErrorUnrecognizedModule 282
-#define MGK_ModuleFatalErrorUnableToInitializeModuleLoader 283
-#define MGK_ModuleWarningDefault 284
-#define MGK_MonitorErrorDefault 285
-#define MGK_MonitorFatalErrorDefault 286
-#define MGK_MonitorFatalErrorUserRequestedTerminationBySignal 287
-#define MGK_MonitorWarningDefault 288
-#define MGK_OptionErrorBevelWidthIsNegative 289
-#define MGK_OptionErrorColorSeparatedImageRequired 290
-#define MGK_OptionErrorFrameIsLessThanImageSize 291
-#define MGK_OptionErrorGeometryDimensionsAreZero 292
-#define MGK_OptionErrorGeometryDoesNotContainImage 293
-#define MGK_OptionErrorHaldClutImageDimensionsInvalid 294
-#define MGK_OptionErrorImagesAreNotTheSameSize 295
-#define MGK_OptionErrorImageSizeMustExceedBevelWidth 296
-#define MGK_OptionErrorImageSmallerThanKernelWidth 297
-#define MGK_OptionErrorImageSmallerThanRadius 298
-#define MGK_OptionErrorImageWidthsOrHeightsDiffer 299
-#define MGK_OptionErrorInputImagesAlreadySpecified 300
-#define MGK_OptionErrorInvalidSubimageSpecification 301
-#define MGK_OptionErrorKernelRadiusIsTooSmall 302
-#define MGK_OptionErrorKernelWidthMustBeAnOddNumber 303
-#define MGK_OptionErrorMatrixIsNotSquare 304
-#define MGK_OptionErrorMatrixOrderOutOfRange 305
-#define MGK_OptionErrorMissingAnImageFilename 306
-#define MGK_OptionErrorMissingArgument 307
-#define MGK_OptionErrorMustSpecifyAnImageName 308
-#define MGK_OptionErrorMustSpecifyImageSize 309
-#define MGK_OptionErrorNoBlobDefined 310
-#define MGK_OptionErrorNoImagesDefined 311
-#define MGK_OptionErrorNonzeroWidthAndHeightRequired 312
-#define MGK_OptionErrorNoProfileNameWasGiven 313
-#define MGK_OptionErrorNullBlobArgument 314
-#define MGK_OptionErrorReferenceImageRequired 315
-#define MGK_OptionErrorReferenceIsNotMyType 316
-#define MGK_OptionErrorRegionAreaExceedsLimit 317
-#define MGK_OptionErrorRequestDidNotReturnAnImage 318
-#define MGK_OptionErrorSteganoImageRequired 319
-#define MGK_OptionErrorStereoImageRequired 320
-#define MGK_OptionErrorSubimageSpecificationReturnsNoImages 321
-#define MGK_OptionErrorTileNotBoundedByImageDimensions 322
-#define MGK_OptionErrorUnableToAddOrRemoveProfile 323
-#define MGK_OptionErrorUnableToAverageImageSequence 324
-#define MGK_OptionErrorUnableToBlurImage 325
-#define MGK_OptionErrorUnableToChopImage 326
-#define MGK_OptionErrorUnableToColorMatrixImage 327
-#define MGK_OptionErrorUnableToConstituteImage 328
-#define MGK_OptionErrorUnableToConvolveImage 329
-#define MGK_OptionErrorUnableToEdgeImage 330
-#define MGK_OptionErrorUnableToEqualizeImage 331
-#define MGK_OptionErrorUnableToFilterImage 332
-#define MGK_OptionErrorUnableToFormatImageMetadata 333
-#define MGK_OptionErrorUnableToFrameImage 334
-#define MGK_OptionErrorUnableToOilPaintImage 335
-#define MGK_OptionErrorUnableToPaintImage 336
-#define MGK_OptionErrorUnableToRaiseImage 337
-#define MGK_OptionErrorUnableToSharpenImage 338
-#define MGK_OptionErrorUnableToThresholdImage 339
-#define MGK_OptionErrorUnableToWaveImage 340
-#define MGK_OptionErrorUnrecognizedAttribute 341
-#define MGK_OptionErrorUnrecognizedChannelType 342
-#define MGK_OptionErrorUnrecognizedColor 343
-#define MGK_OptionErrorUnrecognizedColormapType 344
-#define MGK_OptionErrorUnrecognizedColorspace 345
-#define MGK_OptionErrorUnrecognizedCommand 346
-#define MGK_OptionErrorUnrecognizedComposeOperator 347
-#define MGK_OptionErrorUnrecognizedDisposeMethod 348
-#define MGK_OptionErrorUnrecognizedElement 349
-#define MGK_OptionErrorUnrecognizedEndianType 350
-#define MGK_OptionErrorUnrecognizedGravityType 351
-#define MGK_OptionErrorUnrecognizedHighlightStyle 352
-#define MGK_OptionErrorUnrecognizedImageCompression 353
-#define MGK_OptionErrorUnrecognizedImageFilter 354
-#define MGK_OptionErrorUnrecognizedImageFormat 355
-#define MGK_OptionErrorUnrecognizedImageMode 356
-#define MGK_OptionErrorUnrecognizedImageType 357
-#define MGK_OptionErrorUnrecognizedIntentType 358
-#define MGK_OptionErrorUnrecognizedInterlaceType 359
-#define MGK_OptionErrorUnrecognizedListType 360
-#define MGK_OptionErrorUnrecognizedMetric 361
-#define MGK_OptionErrorUnrecognizedModeType 362
-#define MGK_OptionErrorUnrecognizedNoiseType 363
-#define MGK_OptionErrorUnrecognizedOperator 364
-#define MGK_OptionErrorUnrecognizedOption 365
-#define MGK_OptionErrorUnrecognizedPerlMagickMethod 366
-#define MGK_OptionErrorUnrecognizedPixelMap 367
-#define MGK_OptionErrorUnrecognizedPreviewType 368
-#define MGK_OptionErrorUnrecognizedResourceType 369
-#define MGK_OptionErrorUnrecognizedType 370
-#define MGK_OptionErrorUnrecognizedUnitsType 371
-#define MGK_OptionErrorUnrecognizedVirtualPixelMethod 372
-#define MGK_OptionErrorUnsupportedSamplingFactor 373
-#define MGK_OptionErrorUsageError 374
-#define MGK_OptionFatalErrorInvalidColorspaceType 375
-#define MGK_OptionFatalErrorInvalidEndianType 376
-#define MGK_OptionFatalErrorInvalidImageType 377
-#define MGK_OptionFatalErrorInvalidInterlaceType 378
-#define MGK_OptionFatalErrorMissingAnImageFilename 379
-#define MGK_OptionFatalErrorMissingArgument 380
-#define MGK_OptionFatalErrorNoImagesWereLoaded 381
-#define MGK_OptionFatalErrorOptionLengthExceedsLimit 382
-#define MGK_OptionFatalErrorRequestDidNotReturnAnImage 383
-#define MGK_OptionFatalErrorUnableToOpenXServer 384
-#define MGK_OptionFatalErrorUnableToPersistKey 385
-#define MGK_OptionFatalErrorUnrecognizedColormapType 386
-#define MGK_OptionFatalErrorUnrecognizedColorspaceType 387
-#define MGK_OptionFatalErrorUnrecognizedDisposeMethod 388
-#define MGK_OptionFatalErrorUnrecognizedEndianType 389
-#define MGK_OptionFatalErrorUnrecognizedFilterType 390
-#define MGK_OptionFatalErrorUnrecognizedImageCompressionType 391
-#define MGK_OptionFatalErrorUnrecognizedImageType 392
-#define MGK_OptionFatalErrorUnrecognizedInterlaceType 393
-#define MGK_OptionFatalErrorUnrecognizedOption 394
-#define MGK_OptionFatalErrorUnrecognizedResourceType 395
-#define MGK_OptionFatalErrorUnrecognizedVirtualPixelMethod 396
-#define MGK_OptionWarningUnrecognizedColor 397
-#define MGK_RegistryErrorImageExpected 398
-#define MGK_RegistryErrorImageInfoExpected 399
-#define MGK_RegistryErrorStructureSizeMismatch 400
-#define MGK_RegistryErrorUnableToGetRegistryID 401
-#define MGK_RegistryErrorUnableToLocateImage 402
-#define MGK_RegistryErrorUnableToSetRegistry 403
-#define MGK_RegistryFatalErrorDefault 404
-#define MGK_RegistryWarningDefault 405
-#define MGK_ResourceLimitErrorCacheResourcesExhausted 406
-#define MGK_ResourceLimitErrorImagePixelHeightLimitExceeded 407
-#define MGK_ResourceLimitErrorImagePixelLimitExceeded 408
-#define MGK_ResourceLimitErrorImagePixelWidthLimitExceeded 409
-#define MGK_ResourceLimitErrorMemoryAllocationFailed 410
-#define MGK_ResourceLimitErrorNexusPixelHeightLimitExceeded 411
-#define MGK_ResourceLimitErrorNexusPixelLimitExceeded 412
-#define MGK_ResourceLimitErrorNexusPixelWidthLimitExceeded 413
-#define MGK_ResourceLimitErrorNoPixelsDefinedInCache 414
-#define MGK_ResourceLimitErrorPixelCacheAllocationFailed 415
-#define MGK_ResourceLimitErrorUnableToAddColorProfile 416
-#define MGK_ResourceLimitErrorUnableToAddGenericProfile 417
-#define MGK_ResourceLimitErrorUnableToAddIPTCProfile 418
-#define MGK_ResourceLimitErrorUnableToAddOrRemoveProfile 419
-#define MGK_ResourceLimitErrorUnableToAllocateCoefficients 420
-#define MGK_ResourceLimitErrorUnableToAllocateColormap 421
-#define MGK_ResourceLimitErrorUnableToAllocateICCProfile 422
-#define MGK_ResourceLimitErrorUnableToAllocateImage 423
-#define MGK_ResourceLimitErrorUnableToAllocateString 424
-#define MGK_ResourceLimitErrorUnableToAnnotateImage 425
-#define MGK_ResourceLimitErrorUnableToAverageImageSequence 426
-#define MGK_ResourceLimitErrorUnableToCloneDrawingWand 427
-#define MGK_ResourceLimitErrorUnableToCloneImage 428
-#define MGK_ResourceLimitErrorUnableToComputeImageSignature 429
-#define MGK_ResourceLimitErrorUnableToConstituteImage 430
-#define MGK_ResourceLimitErrorUnableToConvertFont 431
-#define MGK_ResourceLimitErrorUnableToConvertStringToTokens 432
-#define MGK_ResourceLimitErrorUnableToCreateColormap 433
-#define MGK_ResourceLimitErrorUnableToCreateColorTransform 434
-#define MGK_ResourceLimitErrorUnableToCreateCommandWidget 435
-#define MGK_ResourceLimitErrorUnableToCreateImageGroup 436
-#define MGK_ResourceLimitErrorUnableToCreateImageMontage 437
-#define MGK_ResourceLimitErrorUnableToCreateXWindow 438
-#define MGK_ResourceLimitErrorUnableToCropImage 439
-#define MGK_ResourceLimitErrorUnableToDespeckleImage 440
-#define MGK_ResourceLimitErrorUnableToDetermineImageClass 441
-#define MGK_ResourceLimitErrorUnableToDetermineTheNumberOfImageColors 442
-#define MGK_ResourceLimitErrorUnableToDitherImage 443
-#define MGK_ResourceLimitErrorUnableToDrawOnImage 444
-#define MGK_ResourceLimitErrorUnableToEdgeImage 445
-#define MGK_ResourceLimitErrorUnableToEmbossImage 446
-#define MGK_ResourceLimitErrorUnableToEnhanceImage 447
-#define MGK_ResourceLimitErrorUnableToFloodfillImage 448
-#define MGK_ResourceLimitErrorUnableToGammaCorrectImage 449
-#define MGK_ResourceLimitErrorUnableToGetBestIconSize 450
-#define MGK_ResourceLimitErrorUnableToGetFromRegistry 451
-#define MGK_ResourceLimitErrorUnableToGetPackageInfo 452
-#define MGK_ResourceLimitErrorUnableToLevelImage 453
-#define MGK_ResourceLimitErrorUnableToMagnifyImage 454
-#define MGK_ResourceLimitErrorUnableToManageColor 455
-#define MGK_ResourceLimitErrorUnableToMapImage 456
-#define MGK_ResourceLimitErrorUnableToMapImageSequence 457
-#define MGK_ResourceLimitErrorUnableToMedianFilterImage 458
-#define MGK_ResourceLimitErrorUnableToMotionBlurImage 459
-#define MGK_ResourceLimitErrorUnableToNoiseFilterImage 460
-#define MGK_ResourceLimitErrorUnableToNormalizeImage 461
-#define MGK_ResourceLimitErrorUnableToOpenColorProfile 462
-#define MGK_ResourceLimitErrorUnableToQuantizeImage 463
-#define MGK_ResourceLimitErrorUnableToQuantizeImageSequence 464
-#define MGK_ResourceLimitErrorUnableToReadTextChunk 465
-#define MGK_ResourceLimitErrorUnableToReadXImage 466
-#define MGK_ResourceLimitErrorUnableToReadXServerColormap 467
-#define MGK_ResourceLimitErrorUnableToResizeImage 468
-#define MGK_ResourceLimitErrorUnableToRotateImage 469
-#define MGK_ResourceLimitErrorUnableToSampleImage 470
-#define MGK_ResourceLimitErrorUnableToScaleImage 471
-#define MGK_ResourceLimitErrorUnableToSelectImage 472
-#define MGK_ResourceLimitErrorUnableToSharpenImage 473
-#define MGK_ResourceLimitErrorUnableToShaveImage 474
-#define MGK_ResourceLimitErrorUnableToShearImage 475
-#define MGK_ResourceLimitErrorUnableToSortImageColormap 476
-#define MGK_ResourceLimitErrorUnableToThresholdImage 477
-#define MGK_ResourceLimitErrorUnableToTransformColorspace 478
-#define MGK_ResourceLimitFatalErrorMemoryAllocationFailed 479
-#define MGK_ResourceLimitFatalErrorSemaporeOperationFailed 480
-#define MGK_ResourceLimitFatalErrorUnableToAllocateAscii85Info 481
-#define MGK_ResourceLimitFatalErrorUnableToAllocateCacheInfo 482
-#define MGK_ResourceLimitFatalErrorUnableToAllocateCacheView 483
-#define MGK_ResourceLimitFatalErrorUnableToAllocateColorInfo 484
-#define MGK_ResourceLimitFatalErrorUnableToAllocateDashPattern 485
-#define MGK_ResourceLimitFatalErrorUnableToAllocateDelegateInfo 486
-#define MGK_ResourceLimitFatalErrorUnableToAllocateDerivatives 487
-#define MGK_ResourceLimitFatalErrorUnableToAllocateDrawContext 488
-#define MGK_ResourceLimitFatalErrorUnableToAllocateDrawInfo 489
-#define MGK_ResourceLimitFatalErrorUnableToAllocateDrawingWand 490
-#define MGK_ResourceLimitFatalErrorUnableToAllocateGammaMap 491
-#define MGK_ResourceLimitFatalErrorUnableToAllocateImage 492
-#define MGK_ResourceLimitFatalErrorUnableToAllocateImagePixels 493
-#define MGK_ResourceLimitFatalErrorUnableToAllocateLogInfo 494
-#define MGK_ResourceLimitFatalErrorUnableToAllocateMagicInfo 495
-#define MGK_ResourceLimitFatalErrorUnableToAllocateMagickInfo 496
-#define MGK_ResourceLimitFatalErrorUnableToAllocateMagickMap 497
-#define MGK_ResourceLimitFatalErrorUnableToAllocateModuleInfo 498
-#define MGK_ResourceLimitFatalErrorUnableToAllocateMontageInfo 499
-#define MGK_ResourceLimitFatalErrorUnableToAllocateQuantizeInfo 500
-#define MGK_ResourceLimitFatalErrorUnableToAllocateRandomKernel 501
-#define MGK_ResourceLimitFatalErrorUnableToAllocateRegistryInfo 502
-#define MGK_ResourceLimitFatalErrorUnableToAllocateSemaphoreInfo 503
-#define MGK_ResourceLimitFatalErrorUnableToAllocateString 504
-#define MGK_ResourceLimitFatalErrorUnableToAllocateTypeInfo 505
-#define MGK_ResourceLimitFatalErrorUnableToAllocateWand 506
-#define MGK_ResourceLimitFatalErrorUnableToAnimateImageSequence 507
-#define MGK_ResourceLimitFatalErrorUnableToCloneBlobInfo 508
-#define MGK_ResourceLimitFatalErrorUnableToCloneCacheInfo 509
-#define MGK_ResourceLimitFatalErrorUnableToCloneImage 510
-#define MGK_ResourceLimitFatalErrorUnableToCloneImageInfo 511
-#define MGK_ResourceLimitFatalErrorUnableToConcatenateString 512
-#define MGK_ResourceLimitFatalErrorUnableToConvertText 513
-#define MGK_ResourceLimitFatalErrorUnableToCreateColormap 514
-#define MGK_ResourceLimitFatalErrorUnableToDestroySemaphore 515
-#define MGK_ResourceLimitFatalErrorUnableToDisplayImage 516
-#define MGK_ResourceLimitFatalErrorUnableToEscapeString 517
-#define MGK_ResourceLimitFatalErrorUnableToInitializeSemaphore 518
-#define MGK_ResourceLimitFatalErrorUnableToInterpretMSLImage 519
-#define MGK_ResourceLimitFatalErrorUnableToLockSemaphore 520
-#define MGK_ResourceLimitFatalErrorUnableToObtainRandomEntropy 521
-#define MGK_ResourceLimitFatalErrorUnableToUnlockSemaphore 522
-#define MGK_ResourceLimitWarningMemoryAllocationFailed 523
-#define MGK_StreamErrorImageDoesNotContainTheStreamGeometry 524
-#define MGK_StreamErrorNoStreamHandlerIsDefined 525
-#define MGK_StreamErrorPixelCacheIsNotOpen 526
-#define MGK_StreamErrorUnableToAcquirePixelStream 527
-#define MGK_StreamErrorUnableToSetPixelStream 528
-#define MGK_StreamErrorUnableToSyncPixelStream 529
-#define MGK_StreamFatalErrorDefault 530
-#define MGK_StreamWarningDefault 531
-#define MGK_TypeErrorFontNotSpecified 532
-#define MGK_TypeErrorFontSubstitutionRequired 533
-#define MGK_TypeErrorUnableToGetTypeMetrics 534
-#define MGK_TypeErrorUnableToInitializeFreetypeLibrary 535
-#define MGK_TypeErrorUnableToReadFont 536
-#define MGK_TypeErrorUnrecognizedFontEncoding 537
-#define MGK_TypeFatalErrorDefault 538
-#define MGK_TypeWarningDefault 539
-#define MGK_WandErrorInvalidColormapIndex 540
-#define MGK_WandErrorWandAPINotImplemented 541
-#define MGK_WandErrorWandContainsNoImageIndexs 542
-#define MGK_WandErrorWandContainsNoImages 543
-#define MGK_XServerErrorColorIsNotKnownToServer 544
-#define MGK_XServerErrorNoWindowWithSpecifiedIDExists 545
-#define MGK_XServerErrorStandardColormapIsNotInitialized 546
-#define MGK_XServerErrorUnableToConnectToRemoteDisplay 547
-#define MGK_XServerErrorUnableToCreateBitmap 548
-#define MGK_XServerErrorUnableToCreateColormap 549
-#define MGK_XServerErrorUnableToCreatePixmap 550
-#define MGK_XServerErrorUnableToCreateProperty 551
-#define MGK_XServerErrorUnableToCreateStandardColormap 552
-#define MGK_XServerErrorUnableToDisplayImageInfo 553
-#define MGK_XServerErrorUnableToGetProperty 554
-#define MGK_XServerErrorUnableToGetStandardColormap 555
-#define MGK_XServerErrorUnableToGetVisual 556
-#define MGK_XServerErrorUnableToGrabMouse 557
-#define MGK_XServerErrorUnableToLoadFont 558
-#define MGK_XServerErrorUnableToMatchVisualToStandardColormap 559
-#define MGK_XServerErrorUnableToOpenXServer 560
-#define MGK_XServerErrorUnableToReadXAttributes 561
-#define MGK_XServerErrorUnableToReadXWindowImage 562
-#define MGK_XServerErrorUnrecognizedColormapType 563
-#define MGK_XServerErrorUnrecognizedGravityType 564
-#define MGK_XServerErrorUnrecognizedVisualSpecifier 565
-#define MGK_XServerFatalErrorUnableToAllocateXHints 566
-#define MGK_XServerFatalErrorUnableToCreateCursor 567
-#define MGK_XServerFatalErrorUnableToCreateGraphicContext 568
-#define MGK_XServerFatalErrorUnableToCreateStandardColormap 569
-#define MGK_XServerFatalErrorUnableToCreateTextProperty 570
-#define MGK_XServerFatalErrorUnableToCreateXImage 571
-#define MGK_XServerFatalErrorUnableToCreateXPixmap 572
-#define MGK_XServerFatalErrorUnableToCreateXWindow 573
-#define MGK_XServerFatalErrorUnableToDisplayImage 574
-#define MGK_XServerFatalErrorUnableToDitherImage 575
-#define MGK_XServerFatalErrorUnableToGetPixelInfo 576
-#define MGK_XServerFatalErrorUnableToGetVisual 577
-#define MGK_XServerFatalErrorUnableToLoadFont 578
-#define MGK_XServerFatalErrorUnableToMakeXWindow 579
-#define MGK_XServerFatalErrorUnableToOpenXServer 580
-#define MGK_XServerFatalErrorUnableToViewFonts 581
-#define MGK_XServerWarningUnableToGetVisual 582
-#define MGK_XServerWarningUsingDefaultVisual 583
+#define MGK_DrawErrorUnbalancedPushPop 214
+#define MGK_DrawErrorUnreasonableDashPolygonLength 215
+#define MGK_DrawErrorUnreasonableGradientSize 216
+#define MGK_DrawErrorVectorPathTruncated 217
+#define MGK_DrawFatalErrorDefault 218
+#define MGK_DrawWarningNotARelativeURL 219
+#define MGK_DrawWarningNotCurrentlyPushingPatternDefinition 220
+#define MGK_DrawWarningURLNotFound 221
+#define MGK_FileOpenErrorUnableToCreateTemporaryFile 222
+#define MGK_FileOpenErrorUnableToOpenFile 223
+#define MGK_FileOpenErrorUnableToWriteFile 224
+#define MGK_FileOpenFatalErrorDefault 225
+#define MGK_FileOpenWarningDefault 226
+#define MGK_ImageErrorAngleIsDiscontinuous 227
+#define MGK_ImageErrorCMYKAImageLacksAlphaChannel 228
+#define MGK_ImageErrorColorspaceColorProfileMismatch 229
+#define MGK_ImageErrorImageColorspaceDiffers 230
+#define MGK_ImageErrorImageColorspaceMismatch 231
+#define MGK_ImageErrorImageDifferenceExceedsLimit 232
+#define MGK_ImageErrorImageDoesNotContainResolution 233
+#define MGK_ImageErrorImageIsNotColormapped 234
+#define MGK_ImageErrorImageOpacityDiffers 235
+#define MGK_ImageErrorImageSequenceIsRequired 236
+#define MGK_ImageErrorImageSizeDiffers 237
+#define MGK_ImageErrorInvalidColormapIndex 238
+#define MGK_ImageErrorLeftAndRightImageSizesDiffer 239
+#define MGK_ImageErrorNoImagesWereFound 240
+#define MGK_ImageErrorNoImagesWereLoaded 241
+#define MGK_ImageErrorNoLocaleImageAttribute 242
+#define MGK_ImageErrorTooManyClusters 243
+#define MGK_ImageErrorUnableToAppendImage 244
+#define MGK_ImageErrorUnableToAssignProfile 245
+#define MGK_ImageErrorUnableToAverageImage 246
+#define MGK_ImageErrorUnableToCoalesceImage 247
+#define MGK_ImageErrorUnableToCompareImages 248
+#define MGK_ImageErrorUnableToCreateImageMosaic 249
+#define MGK_ImageErrorUnableToCreateStereoImage 250
+#define MGK_ImageErrorUnableToDeconstructImageSequence 251
+#define MGK_ImageErrorUnableToExportImagePixels 252
+#define MGK_ImageErrorUnableToFlattenImage 253
+#define MGK_ImageErrorUnableToGetClipMask 254
+#define MGK_ImageErrorUnableToGetCompositeMask 255
+#define MGK_ImageErrorUnableToHandleImageChannel 256
+#define MGK_ImageErrorUnableToImportImagePixels 257
+#define MGK_ImageErrorUnableToResizeImage 258
+#define MGK_ImageErrorUnableToSegmentImage 259
+#define MGK_ImageErrorUnableToSetClipMask 260
+#define MGK_ImageErrorUnableToSetCompositeMask 261
+#define MGK_ImageErrorUnableToShearImage 262
+#define MGK_ImageErrorWidthOrHeightExceedsLimit 263
+#define MGK_ImageFatalErrorUnableToPersistKey 264
+#define MGK_ImageWarningDefault 265
+#define MGK_MissingDelegateErrorDPSLibraryIsNotAvailable 266
+#define MGK_MissingDelegateErrorFPXLibraryIsNotAvailable 267
+#define MGK_MissingDelegateErrorFreeTypeLibraryIsNotAvailable 268
+#define MGK_MissingDelegateErrorJPEGLibraryIsNotAvailable 269
+#define MGK_MissingDelegateErrorLCMSLibraryIsNotAvailable 270
+#define MGK_MissingDelegateErrorLZWEncodingNotEnabled 271
+#define MGK_MissingDelegateErrorNoDecodeDelegateForThisImageFormat 272
+#define MGK_MissingDelegateErrorNoEncodeDelegateForThisImageFormat 273
+#define MGK_MissingDelegateErrorTIFFLibraryIsNotAvailable 274
+#define MGK_MissingDelegateErrorXMLLibraryIsNotAvailable 275
+#define MGK_MissingDelegateErrorXWindowLibraryIsNotAvailable 276
+#define MGK_MissingDelegateErrorZipLibraryIsNotAvailable 277
+#define MGK_MissingDelegateFatalErrorDefault 278
+#define MGK_MissingDelegateWarningDefault 279
+#define MGK_ModuleErrorFailedToCloseModule 280
+#define MGK_ModuleErrorFailedToFindSymbol 281
+#define MGK_ModuleErrorUnableToLoadModule 282
+#define MGK_ModuleErrorUnableToRegisterImageFormat 283
+#define MGK_ModuleErrorUnrecognizedModule 284
+#define MGK_ModuleFatalErrorUnableToInitializeModuleLoader 285
+#define MGK_ModuleWarningDefault 286
+#define MGK_MonitorErrorDefault 287
+#define MGK_MonitorFatalErrorDefault 288
+#define MGK_MonitorFatalErrorUserRequestedTerminationBySignal 289
+#define MGK_MonitorWarningDefault 290
+#define MGK_OptionErrorBevelWidthIsNegative 291
+#define MGK_OptionErrorColorSeparatedImageRequired 292
+#define MGK_OptionErrorFrameIsLessThanImageSize 293
+#define MGK_OptionErrorGeometryDimensionsAreZero 294
+#define MGK_OptionErrorGeometryDoesNotContainImage 295
+#define MGK_OptionErrorHaldClutImageDimensionsInvalid 296
+#define MGK_OptionErrorImagesAreNotTheSameSize 297
+#define MGK_OptionErrorImageSizeMustExceedBevelWidth 298
+#define MGK_OptionErrorImageSmallerThanKernelWidth 299
+#define MGK_OptionErrorImageSmallerThanRadius 300
+#define MGK_OptionErrorImageWidthsOrHeightsDiffer 301
+#define MGK_OptionErrorInputImagesAlreadySpecified 302
+#define MGK_OptionErrorInvalidSubimageSpecification 303
+#define MGK_OptionErrorKernelRadiusIsTooSmall 304
+#define MGK_OptionErrorKernelWidthMustBeAnOddNumber 305
+#define MGK_OptionErrorMatrixIsNotSquare 306
+#define MGK_OptionErrorMatrixOrderOutOfRange 307
+#define MGK_OptionErrorMissingAnImageFilename 308
+#define MGK_OptionErrorMissingArgument 309
+#define MGK_OptionErrorMustSpecifyAnImageName 310
+#define MGK_OptionErrorMustSpecifyImageSize 311
+#define MGK_OptionErrorNoBlobDefined 312
+#define MGK_OptionErrorNoImagesDefined 313
+#define MGK_OptionErrorNonzeroWidthAndHeightRequired 314
+#define MGK_OptionErrorNoProfileNameWasGiven 315
+#define MGK_OptionErrorNullBlobArgument 316
+#define MGK_OptionErrorReferenceImageRequired 317
+#define MGK_OptionErrorReferenceIsNotMyType 318
+#define MGK_OptionErrorRegionAreaExceedsLimit 319
+#define MGK_OptionErrorRequestDidNotReturnAnImage 320
+#define MGK_OptionErrorSteganoImageRequired 321
+#define MGK_OptionErrorStereoImageRequired 322
+#define MGK_OptionErrorSubimageSpecificationReturnsNoImages 323
+#define MGK_OptionErrorTileNotBoundedByImageDimensions 324
+#define MGK_OptionErrorUnableToAddOrRemoveProfile 325
+#define MGK_OptionErrorUnableToAverageImageSequence 326
+#define MGK_OptionErrorUnableToBlurImage 327
+#define MGK_OptionErrorUnableToChopImage 328
+#define MGK_OptionErrorUnableToColorMatrixImage 329
+#define MGK_OptionErrorUnableToConstituteImage 330
+#define MGK_OptionErrorUnableToConvolveImage 331
+#define MGK_OptionErrorUnableToEdgeImage 332
+#define MGK_OptionErrorUnableToEqualizeImage 333
+#define MGK_OptionErrorUnableToFilterImage 334
+#define MGK_OptionErrorUnableToFormatImageMetadata 335
+#define MGK_OptionErrorUnableToFrameImage 336
+#define MGK_OptionErrorUnableToOilPaintImage 337
+#define MGK_OptionErrorUnableToPaintImage 338
+#define MGK_OptionErrorUnableToRaiseImage 339
+#define MGK_OptionErrorUnableToSharpenImage 340
+#define MGK_OptionErrorUnableToThresholdImage 341
+#define MGK_OptionErrorUnableToWaveImage 342
+#define MGK_OptionErrorUnrecognizedAttribute 343
+#define MGK_OptionErrorUnrecognizedChannelType 344
+#define MGK_OptionErrorUnrecognizedColor 345
+#define MGK_OptionErrorUnrecognizedColormapType 346
+#define MGK_OptionErrorUnrecognizedColorspace 347
+#define MGK_OptionErrorUnrecognizedCommand 348
+#define MGK_OptionErrorUnrecognizedComposeOperator 349
+#define MGK_OptionErrorUnrecognizedDisposeMethod 350
+#define MGK_OptionErrorUnrecognizedElement 351
+#define MGK_OptionErrorUnrecognizedEndianType 352
+#define MGK_OptionErrorUnrecognizedGravityType 353
+#define MGK_OptionErrorUnrecognizedHighlightStyle 354
+#define MGK_OptionErrorUnrecognizedImageCompression 355
+#define MGK_OptionErrorUnrecognizedImageFilter 356
+#define MGK_OptionErrorUnrecognizedImageFormat 357
+#define MGK_OptionErrorUnrecognizedImageMode 358
+#define MGK_OptionErrorUnrecognizedImageType 359
+#define MGK_OptionErrorUnrecognizedIntentType 360
+#define MGK_OptionErrorUnrecognizedInterlaceType 361
+#define MGK_OptionErrorUnrecognizedListType 362
+#define MGK_OptionErrorUnrecognizedMetric 363
+#define MGK_OptionErrorUnrecognizedModeType 364
+#define MGK_OptionErrorUnrecognizedNoiseType 365
+#define MGK_OptionErrorUnrecognizedOperator 366
+#define MGK_OptionErrorUnrecognizedOption 367
+#define MGK_OptionErrorUnrecognizedPerlMagickMethod 368
+#define MGK_OptionErrorUnrecognizedPixelMap 369
+#define MGK_OptionErrorUnrecognizedPreviewType 370
+#define MGK_OptionErrorUnrecognizedResourceType 371
+#define MGK_OptionErrorUnrecognizedType 372
+#define MGK_OptionErrorUnrecognizedUnitsType 373
+#define MGK_OptionErrorUnrecognizedVirtualPixelMethod 374
+#define MGK_OptionErrorUnsupportedSamplingFactor 375
+#define MGK_OptionErrorUsageError 376
+#define MGK_OptionFatalErrorInvalidColorspaceType 377
+#define MGK_OptionFatalErrorInvalidEndianType 378
+#define MGK_OptionFatalErrorInvalidImageType 379
+#define MGK_OptionFatalErrorInvalidInterlaceType 380
+#define MGK_OptionFatalErrorMissingAnImageFilename 381
+#define MGK_OptionFatalErrorMissingArgument 382
+#define MGK_OptionFatalErrorNoImagesWereLoaded 383
+#define MGK_OptionFatalErrorOptionLengthExceedsLimit 384
+#define MGK_OptionFatalErrorRequestDidNotReturnAnImage 385
+#define MGK_OptionFatalErrorUnableToOpenXServer 386
+#define MGK_OptionFatalErrorUnableToPersistKey 387
+#define MGK_OptionFatalErrorUnrecognizedColormapType 388
+#define MGK_OptionFatalErrorUnrecognizedColorspaceType 389
+#define MGK_OptionFatalErrorUnrecognizedDisposeMethod 390
+#define MGK_OptionFatalErrorUnrecognizedEndianType 391
+#define MGK_OptionFatalErrorUnrecognizedFilterType 392
+#define MGK_OptionFatalErrorUnrecognizedImageCompressionType 393
+#define MGK_OptionFatalErrorUnrecognizedImageType 394
+#define MGK_OptionFatalErrorUnrecognizedInterlaceType 395
+#define MGK_OptionFatalErrorUnrecognizedOption 396
+#define MGK_OptionFatalErrorUnrecognizedResourceType 397
+#define MGK_OptionFatalErrorUnrecognizedVirtualPixelMethod 398
+#define MGK_OptionWarningUnrecognizedColor 399
+#define MGK_RegistryErrorImageExpected 400
+#define MGK_RegistryErrorImageInfoExpected 401
+#define MGK_RegistryErrorStructureSizeMismatch 402
+#define MGK_RegistryErrorUnableToGetRegistryID 403
+#define MGK_RegistryErrorUnableToLocateImage 404
+#define MGK_RegistryErrorUnableToSetRegistry 405
+#define MGK_RegistryFatalErrorDefault 406
+#define MGK_RegistryWarningDefault 407
+#define MGK_ResourceLimitErrorCacheResourcesExhausted 408
+#define MGK_ResourceLimitErrorImagePixelHeightLimitExceeded 409
+#define MGK_ResourceLimitErrorImagePixelLimitExceeded 410
+#define MGK_ResourceLimitErrorImagePixelWidthLimitExceeded 411
+#define MGK_ResourceLimitErrorMemoryAllocationFailed 412
+#define MGK_ResourceLimitErrorNexusPixelHeightLimitExceeded 413
+#define MGK_ResourceLimitErrorNexusPixelLimitExceeded 414
+#define MGK_ResourceLimitErrorNexusPixelWidthLimitExceeded 415
+#define MGK_ResourceLimitErrorNoPixelsDefinedInCache 416
+#define MGK_ResourceLimitErrorPixelCacheAllocationFailed 417
+#define MGK_ResourceLimitErrorUnableToAddColorProfile 418
+#define MGK_ResourceLimitErrorUnableToAddGenericProfile 419
+#define MGK_ResourceLimitErrorUnableToAddIPTCProfile 420
+#define MGK_ResourceLimitErrorUnableToAddOrRemoveProfile 421
+#define MGK_ResourceLimitErrorUnableToAllocateCoefficients 422
+#define MGK_ResourceLimitErrorUnableToAllocateColormap 423
+#define MGK_ResourceLimitErrorUnableToAllocateICCProfile 424
+#define MGK_ResourceLimitErrorUnableToAllocateImage 425
+#define MGK_ResourceLimitErrorUnableToAllocateString 426
+#define MGK_ResourceLimitErrorUnableToAnnotateImage 427
+#define MGK_ResourceLimitErrorUnableToAverageImageSequence 428
+#define MGK_ResourceLimitErrorUnableToCloneDrawingWand 429
+#define MGK_ResourceLimitErrorUnableToCloneImage 430
+#define MGK_ResourceLimitErrorUnableToComputeImageSignature 431
+#define MGK_ResourceLimitErrorUnableToConstituteImage 432
+#define MGK_ResourceLimitErrorUnableToConvertFont 433
+#define MGK_ResourceLimitErrorUnableToConvertStringToTokens 434
+#define MGK_ResourceLimitErrorUnableToCreateColormap 435
+#define MGK_ResourceLimitErrorUnableToCreateColorTransform 436
+#define MGK_ResourceLimitErrorUnableToCreateCommandWidget 437
+#define MGK_ResourceLimitErrorUnableToCreateImageGroup 438
+#define MGK_ResourceLimitErrorUnableToCreateImageMontage 439
+#define MGK_ResourceLimitErrorUnableToCreateXWindow 440
+#define MGK_ResourceLimitErrorUnableToCropImage 441
+#define MGK_ResourceLimitErrorUnableToDespeckleImage 442
+#define MGK_ResourceLimitErrorUnableToDetermineImageClass 443
+#define MGK_ResourceLimitErrorUnableToDetermineTheNumberOfImageColors 444
+#define MGK_ResourceLimitErrorUnableToDitherImage 445
+#define MGK_ResourceLimitErrorUnableToDrawOnImage 446
+#define MGK_ResourceLimitErrorUnableToEdgeImage 447
+#define MGK_ResourceLimitErrorUnableToEmbossImage 448
+#define MGK_ResourceLimitErrorUnableToEnhanceImage 449
+#define MGK_ResourceLimitErrorUnableToFloodfillImage 450
+#define MGK_ResourceLimitErrorUnableToGammaCorrectImage 451
+#define MGK_ResourceLimitErrorUnableToGetBestIconSize 452
+#define MGK_ResourceLimitErrorUnableToGetFromRegistry 453
+#define MGK_ResourceLimitErrorUnableToGetPackageInfo 454
+#define MGK_ResourceLimitErrorUnableToLevelImage 455
+#define MGK_ResourceLimitErrorUnableToMagnifyImage 456
+#define MGK_ResourceLimitErrorUnableToManageColor 457
+#define MGK_ResourceLimitErrorUnableToMapImage 458
+#define MGK_ResourceLimitErrorUnableToMapImageSequence 459
+#define MGK_ResourceLimitErrorUnableToMedianFilterImage 460
+#define MGK_ResourceLimitErrorUnableToMotionBlurImage 461
+#define MGK_ResourceLimitErrorUnableToNoiseFilterImage 462
+#define MGK_ResourceLimitErrorUnableToNormalizeImage 463
+#define MGK_ResourceLimitErrorUnableToOpenColorProfile 464
+#define MGK_ResourceLimitErrorUnableToQuantizeImage 465
+#define MGK_ResourceLimitErrorUnableToQuantizeImageSequence 466
+#define MGK_ResourceLimitErrorUnableToReadTextChunk 467
+#define MGK_ResourceLimitErrorUnableToReadXImage 468
+#define MGK_ResourceLimitErrorUnableToReadXServerColormap 469
+#define MGK_ResourceLimitErrorUnableToResizeImage 470
+#define MGK_ResourceLimitErrorUnableToRotateImage 471
+#define MGK_ResourceLimitErrorUnableToSampleImage 472
+#define MGK_ResourceLimitErrorUnableToScaleImage 473
+#define MGK_ResourceLimitErrorUnableToSelectImage 474
+#define MGK_ResourceLimitErrorUnableToSharpenImage 475
+#define MGK_ResourceLimitErrorUnableToShaveImage 476
+#define MGK_ResourceLimitErrorUnableToShearImage 477
+#define MGK_ResourceLimitErrorUnableToSortImageColormap 478
+#define MGK_ResourceLimitErrorUnableToThresholdImage 479
+#define MGK_ResourceLimitErrorUnableToTransformColorspace 480
+#define MGK_ResourceLimitFatalErrorMemoryAllocationFailed 481
+#define MGK_ResourceLimitFatalErrorSemaporeOperationFailed 482
+#define MGK_ResourceLimitFatalErrorUnableToAllocateAscii85Info 483
+#define MGK_ResourceLimitFatalErrorUnableToAllocateCacheInfo 484
+#define MGK_ResourceLimitFatalErrorUnableToAllocateCacheView 485
+#define MGK_ResourceLimitFatalErrorUnableToAllocateColorInfo 486
+#define MGK_ResourceLimitFatalErrorUnableToAllocateDashPattern 487
+#define MGK_ResourceLimitFatalErrorUnableToAllocateDelegateInfo 488
+#define MGK_ResourceLimitFatalErrorUnableToAllocateDerivatives 489
+#define MGK_ResourceLimitFatalErrorUnableToAllocateDrawContext 490
+#define MGK_ResourceLimitFatalErrorUnableToAllocateDrawInfo 491
+#define MGK_ResourceLimitFatalErrorUnableToAllocateDrawingWand 492
+#define MGK_ResourceLimitFatalErrorUnableToAllocateGammaMap 493
+#define MGK_ResourceLimitFatalErrorUnableToAllocateImage 494
+#define MGK_ResourceLimitFatalErrorUnableToAllocateImagePixels 495
+#define MGK_ResourceLimitFatalErrorUnableToAllocateLogInfo 496
+#define MGK_ResourceLimitFatalErrorUnableToAllocateMagicInfo 497
+#define MGK_ResourceLimitFatalErrorUnableToAllocateMagickInfo 498
+#define MGK_ResourceLimitFatalErrorUnableToAllocateMagickMap 499
+#define MGK_ResourceLimitFatalErrorUnableToAllocateModuleInfo 500
+#define MGK_ResourceLimitFatalErrorUnableToAllocateMontageInfo 501
+#define MGK_ResourceLimitFatalErrorUnableToAllocateQuantizeInfo 502
+#define MGK_ResourceLimitFatalErrorUnableToAllocateRandomKernel 503
+#define MGK_ResourceLimitFatalErrorUnableToAllocateRegistryInfo 504
+#define MGK_ResourceLimitFatalErrorUnableToAllocateSemaphoreInfo 505
+#define MGK_ResourceLimitFatalErrorUnableToAllocateString 506
+#define MGK_ResourceLimitFatalErrorUnableToAllocateTypeInfo 507
+#define MGK_ResourceLimitFatalErrorUnableToAllocateWand 508
+#define MGK_ResourceLimitFatalErrorUnableToAnimateImageSequence 509
+#define MGK_ResourceLimitFatalErrorUnableToCloneBlobInfo 510
+#define MGK_ResourceLimitFatalErrorUnableToCloneCacheInfo 511
+#define MGK_ResourceLimitFatalErrorUnableToCloneImage 512
+#define MGK_ResourceLimitFatalErrorUnableToCloneImageInfo 513
+#define MGK_ResourceLimitFatalErrorUnableToConcatenateString 514
+#define MGK_ResourceLimitFatalErrorUnableToConvertText 515
+#define MGK_ResourceLimitFatalErrorUnableToCreateColormap 516
+#define MGK_ResourceLimitFatalErrorUnableToDestroySemaphore 517
+#define MGK_ResourceLimitFatalErrorUnableToDisplayImage 518
+#define MGK_ResourceLimitFatalErrorUnableToEscapeString 519
+#define MGK_ResourceLimitFatalErrorUnableToInitializeSemaphore 520
+#define MGK_ResourceLimitFatalErrorUnableToInterpretMSLImage 521
+#define MGK_ResourceLimitFatalErrorUnableToLockSemaphore 522
+#define MGK_ResourceLimitFatalErrorUnableToObtainRandomEntropy 523
+#define MGK_ResourceLimitFatalErrorUnableToUnlockSemaphore 524
+#define MGK_ResourceLimitWarningMemoryAllocationFailed 525
+#define MGK_StreamErrorImageDoesNotContainTheStreamGeometry 526
+#define MGK_StreamErrorNoStreamHandlerIsDefined 527
+#define MGK_StreamErrorPixelCacheIsNotOpen 528
+#define MGK_StreamErrorUnableToAcquirePixelStream 529
+#define MGK_StreamErrorUnableToSetPixelStream 530
+#define MGK_StreamErrorUnableToSyncPixelStream 531
+#define MGK_StreamFatalErrorDefault 532
+#define MGK_StreamWarningDefault 533
+#define MGK_TypeErrorFontNotSpecified 534
+#define MGK_TypeErrorFontSubstitutionRequired 535
+#define MGK_TypeErrorUnableToGetTypeMetrics 536
+#define MGK_TypeErrorUnableToInitializeFreetypeLibrary 537
+#define MGK_TypeErrorUnableToReadFont 538
+#define MGK_TypeErrorUnrecognizedFontEncoding 539
+#define MGK_TypeFatalErrorDefault 540
+#define MGK_TypeWarningDefault 541
+#define MGK_WandErrorInvalidColormapIndex 542
+#define MGK_WandErrorWandAPINotImplemented 543
+#define MGK_WandErrorWandContainsNoImageIndexs 544
+#define MGK_WandErrorWandContainsNoImages 545
+#define MGK_XServerErrorColorIsNotKnownToServer 546
+#define MGK_XServerErrorNoWindowWithSpecifiedIDExists 547
+#define MGK_XServerErrorStandardColormapIsNotInitialized 548
+#define MGK_XServerErrorUnableToConnectToRemoteDisplay 549
+#define MGK_XServerErrorUnableToCreateBitmap 550
+#define MGK_XServerErrorUnableToCreateColormap 551
+#define MGK_XServerErrorUnableToCreatePixmap 552
+#define MGK_XServerErrorUnableToCreateProperty 553
+#define MGK_XServerErrorUnableToCreateStandardColormap 554
+#define MGK_XServerErrorUnableToDisplayImageInfo 555
+#define MGK_XServerErrorUnableToGetProperty 556
+#define MGK_XServerErrorUnableToGetStandardColormap 557
+#define MGK_XServerErrorUnableToGetVisual 558
+#define MGK_XServerErrorUnableToGrabMouse 559
+#define MGK_XServerErrorUnableToLoadFont 560
+#define MGK_XServerErrorUnableToMatchVisualToStandardColormap 561
+#define MGK_XServerErrorUnableToOpenXServer 562
+#define MGK_XServerErrorUnableToReadXAttributes 563
+#define MGK_XServerErrorUnableToReadXWindowImage 564
+#define MGK_XServerErrorUnrecognizedColormapType 565
+#define MGK_XServerErrorUnrecognizedGravityType 566
+#define MGK_XServerErrorUnrecognizedVisualSpecifier 567
+#define MGK_XServerFatalErrorUnableToAllocateXHints 568
+#define MGK_XServerFatalErrorUnableToCreateCursor 569
+#define MGK_XServerFatalErrorUnableToCreateGraphicContext 570
+#define MGK_XServerFatalErrorUnableToCreateStandardColormap 571
+#define MGK_XServerFatalErrorUnableToCreateTextProperty 572
+#define MGK_XServerFatalErrorUnableToCreateXImage 573
+#define MGK_XServerFatalErrorUnableToCreateXPixmap 574
+#define MGK_XServerFatalErrorUnableToCreateXWindow 575
+#define MGK_XServerFatalErrorUnableToDisplayImage 576
+#define MGK_XServerFatalErrorUnableToDitherImage 577
+#define MGK_XServerFatalErrorUnableToGetPixelInfo 578
+#define MGK_XServerFatalErrorUnableToGetVisual 579
+#define MGK_XServerFatalErrorUnableToLoadFont 580
+#define MGK_XServerFatalErrorUnableToMakeXWindow 581
+#define MGK_XServerFatalErrorUnableToOpenXServer 582
+#define MGK_XServerFatalErrorUnableToViewFonts 583
+#define MGK_XServerWarningUnableToGetVisual 584
+#define MGK_XServerWarningUsingDefaultVisual 585
#endif
{ "Delegate/FatalError", 199, DelegateFatalError },
{ "Delegate/Warning", 200, DelegateWarning },
{ "Draw/Error", 201, DrawError },
- { "Draw/FatalError", 215, DrawFatalError },
- { "Draw/Warning", 216, DrawWarning },
- { "File/Open/Error", 219, FileOpenError },
- { "File/Open/FatalError", 222, FileOpenFatalError },
- { "File/Open/Warning", 223, FileOpenWarning },
- { "Image/Error", 224, ImageError },
- { "Image/FatalError", 261, ImageFatalError },
- { "Image/Warning", 262, ImageWarning },
- { "Missing/Delegate/Error", 263, MissingDelegateError },
- { "Missing/Delegate/FatalError", 275, MissingDelegateFatalError },
- { "Missing/Delegate/Warning", 276, MissingDelegateWarning },
- { "Module/Error", 277, ModuleError },
- { "Module/FatalError", 282, ModuleFatalError },
- { "Module/Warning", 283, ModuleWarning },
- { "Monitor/Error", 284, MonitorError },
- { "Monitor/FatalError", 285, MonitorFatalError },
- { "Monitor/Warning", 287, MonitorWarning },
- { "Option/Error", 288, OptionError },
- { "Option/FatalError", 374, OptionFatalError },
- { "Option/Warning", 396, OptionWarning },
- { "Registry/Error", 397, RegistryError },
- { "Registry/FatalError", 403, RegistryFatalError },
- { "Registry/Warning", 404, RegistryWarning },
- { "Resource/Limit/Error", 405, ResourceLimitError },
- { "Resource/Limit/FatalError", 478, ResourceLimitFatalError },
- { "Resource/Limit/Warning", 522, ResourceLimitWarning },
- { "Stream/Error", 523, StreamError },
- { "Stream/FatalError", 529, StreamFatalError },
- { "Stream/Warning", 530, StreamWarning },
- { "Type/Error", 531, TypeError },
- { "Type/FatalError", 537, TypeFatalError },
- { "Type/Warning", 538, TypeWarning },
- { "Wand/Error", 539, WandError },
- { "XServer/Error", 543, XServerError },
- { "XServer/FatalError", 565, XServerFatalError },
- { "XServer/Warning", 581, XServerWarning },
- { "", 583, UndefinedException }
+ { "Draw/FatalError", 217, DrawFatalError },
+ { "Draw/Warning", 218, DrawWarning },
+ { "File/Open/Error", 221, FileOpenError },
+ { "File/Open/FatalError", 224, FileOpenFatalError },
+ { "File/Open/Warning", 225, FileOpenWarning },
+ { "Image/Error", 226, ImageError },
+ { "Image/FatalError", 263, ImageFatalError },
+ { "Image/Warning", 264, ImageWarning },
+ { "Missing/Delegate/Error", 265, MissingDelegateError },
+ { "Missing/Delegate/FatalError", 277, MissingDelegateFatalError },
+ { "Missing/Delegate/Warning", 278, MissingDelegateWarning },
+ { "Module/Error", 279, ModuleError },
+ { "Module/FatalError", 284, ModuleFatalError },
+ { "Module/Warning", 285, ModuleWarning },
+ { "Monitor/Error", 286, MonitorError },
+ { "Monitor/FatalError", 287, MonitorFatalError },
+ { "Monitor/Warning", 289, MonitorWarning },
+ { "Option/Error", 290, OptionError },
+ { "Option/FatalError", 376, OptionFatalError },
+ { "Option/Warning", 398, OptionWarning },
+ { "Registry/Error", 399, RegistryError },
+ { "Registry/FatalError", 405, RegistryFatalError },
+ { "Registry/Warning", 406, RegistryWarning },
+ { "Resource/Limit/Error", 407, ResourceLimitError },
+ { "Resource/Limit/FatalError", 480, ResourceLimitFatalError },
+ { "Resource/Limit/Warning", 524, ResourceLimitWarning },
+ { "Stream/Error", 525, StreamError },
+ { "Stream/FatalError", 531, StreamFatalError },
+ { "Stream/Warning", 532, StreamWarning },
+ { "Type/Error", 533, TypeError },
+ { "Type/FatalError", 539, TypeFatalError },
+ { "Type/Warning", 540, TypeWarning },
+ { "Wand/Error", 541, WandError },
+ { "XServer/Error", 545, XServerError },
+ { "XServer/FatalError", 567, XServerFatalError },
+ { "XServer/Warning", 583, XServerWarning },
+ { "", 585, UndefinedException }
};
#endif
{ "UnableToDrawOnImage", MGK_DrawErrorUnableToDrawOnImage },
{ "UnableToPrint", MGK_DrawErrorUnableToPrint },
{ "UnbalancedGraphicContextPushPop", MGK_DrawErrorUnbalancedGraphicContextPushPop },
+ { "UnbalancedPushPop", MGK_DrawErrorUnbalancedPushPop },
+ { "UnreasonableDashPolygonLength", MGK_DrawErrorUnreasonableDashPolygonLength },
{ "UnreasonableGradientSize", MGK_DrawErrorUnreasonableGradientSize },
{ "VectorPathTruncated", MGK_DrawErrorVectorPathTruncated },
{ "Default", MGK_DrawFatalErrorDefault },
"unable to draw on image\0"
"Unable to print\0"
"unbalanced graphic context push-pop\0"
+ "unbalanced push-pop\0"
+ "unreasonable dash polygon length\0"
"unreasonable gradient image size\0"
"vector path truncated\0"
"default error\0"
6443,
6459,
6495,
- 6528,
- 6550,
- 6564,
- 6583,
- 6624,
- 6638,
- 6670,
- 6690,
- 6711,
- 6725,
- 6741,
+ 6515,
+ 6548,
+ 6581,
+ 6603,
+ 6617,
+ 6636,
+ 6677,
+ 6691,
+ 6723,
+ 6743,
6764,
- 6809,
- 6843,
- 6868,
- 6894,
- 6930,
- 6964,
- 6989,
- 7011,
- 7038,
- 7057,
- 7080,
- 7114,
- 7135,
- 7157,
- 7185,
- 7202,
- 7225,
- 7250,
- 7274,
- 7299,
- 7324,
- 7354,
- 7384,
- 7421,
- 7451,
- 7475,
- 7499,
+ 6778,
+ 6794,
+ 6817,
+ 6862,
+ 6896,
+ 6921,
+ 6947,
+ 6983,
+ 7017,
+ 7042,
+ 7064,
+ 7091,
+ 7110,
+ 7133,
+ 7167,
+ 7188,
+ 7210,
+ 7238,
+ 7255,
+ 7278,
+ 7303,
+ 7327,
+ 7352,
+ 7377,
+ 7407,
+ 7437,
+ 7474,
+ 7504,
7528,
- 7559,
- 7589,
+ 7552,
+ 7581,
7612,
- 7636,
- 7660,
+ 7642,
+ 7665,
7689,
- 7711,
- 7741,
- 7763,
- 7779,
- 7808,
- 7837,
- 7871,
- 7913,
- 7939,
- 7964,
- 8005,
- 8046,
- 8076,
- 8105,
- 8139,
- 8181,
- 8195,
- 8211,
+ 7713,
+ 7742,
+ 7764,
+ 7794,
+ 7816,
+ 7832,
+ 7861,
+ 7890,
+ 7924,
+ 7966,
+ 7992,
+ 8017,
+ 8058,
+ 8099,
+ 8129,
+ 8158,
+ 8192,
8234,
- 8256,
- 8278,
- 8310,
- 8330,
- 8365,
- 8381,
- 8395,
- 8409,
- 8449,
- 8465,
- 8489,
- 8520,
- 8550,
- 8579,
- 8611,
- 8650,
- 8679,
- 8708,
- 8740,
- 8766,
- 8797,
- 8828,
- 8859,
- 8886,
- 8921,
- 8956,
- 8984,
- 9010,
- 9068,
- 9094,
- 9118,
- 9150,
- 9168,
+ 8248,
+ 8264,
+ 8287,
+ 8309,
+ 8331,
+ 8363,
+ 8383,
+ 8418,
+ 8434,
+ 8448,
+ 8462,
+ 8502,
+ 8518,
+ 8542,
+ 8573,
+ 8603,
+ 8632,
+ 8664,
+ 8703,
+ 8732,
+ 8761,
+ 8793,
+ 8819,
+ 8850,
+ 8881,
+ 8912,
+ 8939,
+ 8974,
+ 9009,
+ 9037,
+ 9063,
+ 9121,
+ 9147,
+ 9171,
9203,
- 9229,
- 9248,
- 9273,
- 9298,
- 9339,
- 9371,
- 9394,
- 9416,
- 9457,
- 9497,
- 9529,
- 9562,
- 9583,
- 9604,
- 9633,
- 9660,
- 9685,
- 9706,
- 9731,
- 9754,
- 9787,
- 9809,
- 9835,
- 9857,
- 9879,
- 9903,
- 9929,
- 9950,
- 9973,
- 9999,
- 10018,
- 10045,
- 10075,
- 10147,
- 10177,
- 10205,
- 10226,
- 10251,
- 10277,
- 10306,
- 10337,
- 10363,
- 10389,
- 10413,
- 10437,
- 10462,
+ 9221,
+ 9256,
+ 9282,
+ 9301,
+ 9326,
+ 9351,
+ 9392,
+ 9424,
+ 9447,
+ 9469,
+ 9510,
+ 9550,
+ 9582,
+ 9615,
+ 9636,
+ 9657,
+ 9686,
+ 9713,
+ 9738,
+ 9759,
+ 9784,
+ 9807,
+ 9840,
+ 9862,
+ 9888,
+ 9910,
+ 9932,
+ 9956,
+ 9982,
+ 10003,
+ 10026,
+ 10052,
+ 10071,
+ 10098,
+ 10128,
+ 10200,
+ 10230,
+ 10258,
+ 10279,
+ 10304,
+ 10330,
+ 10359,
+ 10390,
+ 10416,
+ 10442,
+ 10466,
10490,
- 10513,
- 10539,
- 10562,
- 10586,
- 10608,
- 10628,
- 10659,
- 10682,
- 10708,
+ 10515,
+ 10543,
+ 10566,
+ 10592,
+ 10615,
+ 10639,
+ 10661,
+ 10681,
+ 10712,
10735,
- 10753,
- 10777,
- 10811,
- 10839,
- 10886,
- 10910,
- 10930,
- 10949,
- 10972,
- 10998,
- 11056,
- 11078,
- 11106,
- 11138,
- 11161,
- 11183,
- 11210,
- 11239,
- 11267,
+ 10761,
+ 10788,
+ 10806,
+ 10830,
+ 10864,
+ 10892,
+ 10939,
+ 10963,
+ 10983,
+ 11002,
+ 11025,
+ 11051,
+ 11109,
+ 11131,
+ 11159,
+ 11191,
+ 11214,
+ 11236,
+ 11263,
11292,
- 11317,
- 11347,
- 11371,
- 11399,
- 11419,
- 11446,
- 11480,
+ 11320,
+ 11345,
+ 11370,
+ 11400,
+ 11424,
+ 11452,
+ 11472,
11499,
- 11514,
- 11534,
- 11558,
- 11584,
- 11607,
- 11630,
- 11644,
+ 11533,
+ 11552,
+ 11567,
+ 11587,
+ 11611,
+ 11637,
11660,
- 11704,
- 11758,
- 11805,
- 11857,
- 11882,
- 11936,
- 11983,
- 12035,
- 12062,
- 12092,
- 12124,
- 12154,
- 12181,
- 12213,
- 12245,
- 12273,
- 12304,
- 12329,
- 12355,
- 12380,
- 12413,
- 12442,
- 12464,
- 12498,
- 12525,
- 12548,
- 12584,
- 12610,
- 12643,
- 12675,
- 12704,
- 12735,
- 12761,
- 12782,
- 12808,
- 12840,
- 12887,
- 12910,
- 12934,
- 12955,
- 12978,
- 13002,
- 13028,
- 13058,
- 13087,
- 13115,
- 13142,
- 13164,
- 13188,
- 13211,
- 13231,
- 13260,
- 13290,
- 13318,
- 13347,
- 13373,
- 13402,
- 13427,
- 13461,
- 13487,
- 13510,
- 13543,
- 13566,
- 13589,
- 13612,
- 13634,
- 13657,
- 13681,
- 13703,
- 13725,
- 13755,
- 13781,
- 13812,
- 13837,
- 13864,
- 13896,
- 13926,
- 13956,
- 13986,
- 14018,
- 14051,
- 14080,
- 14112,
- 14141,
- 14173,
- 14202,
- 14227,
- 14259,
- 14287,
- 14317,
- 14348,
- 14378,
- 14409,
- 14441,
- 14474,
- 14507,
- 14540,
- 14574,
- 14600,
- 14629,
+ 11683,
+ 11697,
+ 11713,
+ 11757,
+ 11811,
+ 11858,
+ 11910,
+ 11935,
+ 11989,
+ 12036,
+ 12088,
+ 12115,
+ 12145,
+ 12177,
+ 12207,
+ 12234,
+ 12266,
+ 12298,
+ 12326,
+ 12357,
+ 12382,
+ 12408,
+ 12433,
+ 12466,
+ 12495,
+ 12517,
+ 12551,
+ 12578,
+ 12601,
+ 12637,
+ 12663,
+ 12696,
+ 12728,
+ 12757,
+ 12788,
+ 12814,
+ 12835,
+ 12861,
+ 12893,
+ 12940,
+ 12963,
+ 12987,
+ 13008,
+ 13031,
+ 13055,
+ 13081,
+ 13111,
+ 13140,
+ 13168,
+ 13195,
+ 13217,
+ 13241,
+ 13264,
+ 13284,
+ 13313,
+ 13343,
+ 13371,
+ 13400,
+ 13426,
+ 13455,
+ 13480,
+ 13514,
+ 13540,
+ 13563,
+ 13596,
+ 13619,
+ 13642,
+ 13665,
+ 13687,
+ 13710,
+ 13734,
+ 13756,
+ 13778,
+ 13808,
+ 13834,
+ 13865,
+ 13890,
+ 13917,
+ 13949,
+ 13979,
+ 14009,
+ 14039,
+ 14071,
+ 14104,
+ 14133,
+ 14165,
+ 14194,
+ 14226,
+ 14255,
+ 14280,
+ 14312,
+ 14340,
+ 14370,
+ 14401,
+ 14431,
+ 14462,
+ 14494,
+ 14527,
+ 14560,
+ 14593,
+ 14627,
14653,
- 14686,
- 14712,
+ 14682,
+ 14706,
14739,
- 14761,
- 14788,
- 14817,
- 14840,
- 14866,
- 14894,
- 14918,
- 14942,
- 14973,
- 15003,
- 15028,
- 15080,
- 15107,
- 15132,
- 15175,
- 15204,
+ 14765,
+ 14792,
+ 14814,
+ 14841,
+ 14870,
+ 14893,
+ 14919,
+ 14947,
+ 14971,
+ 14995,
+ 15026,
+ 15056,
+ 15081,
+ 15133,
+ 15160,
+ 15185,
15228,
- 15259,
- 15286,
- 15314,
- 15328,
- 15344,
- 15368,
- 15395,
- 15422,
- 15460,
- 15480,
- 15507,
- 15521,
- 15537,
- 15569,
- 15603,
- 15643,
- 15676,
- 15705,
- 15740,
- 15777,
- 15813,
- 15837,
- 15863,
- 15887,
- 15913,
- 15948,
- 15977,
- 16000,
- 16032,
+ 15257,
+ 15281,
+ 15312,
+ 15339,
+ 15367,
+ 15381,
+ 15397,
+ 15421,
+ 15448,
+ 15475,
+ 15513,
+ 15533,
+ 15560,
+ 15574,
+ 15590,
+ 15622,
+ 15656,
+ 15696,
+ 15729,
+ 15758,
+ 15793,
+ 15830,
+ 15866,
+ 15890,
+ 15916,
+ 15940,
+ 15966,
+ 16001,
+ 16030,
16053,
- 16074,
- 16094,
- 16138,
- 16162,
- 16190,
- 16220,
- 16247,
+ 16085,
+ 16106,
+ 16127,
+ 16147,
+ 16191,
+ 16215,
+ 16243,
16273,
- 16303,
- 16330,
+ 16300,
+ 16326,
16356,
- 16389,
- 16424,
- 16455,
- 16480,
- 16506,
- 16532,
- 16556,
- 16579,
- 16604,
- 16625,
- 16645,
- 16669,
- 16693,
- 16714,
- 16735,
- 16754,
+ 16383,
+ 16409,
+ 16442,
+ 16477,
+ 16508,
+ 16533,
+ 16559,
+ 16585,
+ 16609,
+ 16632,
+ 16657,
+ 16678,
+ 16698,
+ 16722,
+ 16746,
+ 16767,
+ 16788,
+ 16807,
0
};
#endif /* if defined(_INCLUDE_MESSAGE_TABLE_) */
Log methods.
*/
-extern MagickExport void
+extern void
DestroyLogInfo(void);
extern MagickPassFail
#define MagickLogFilename "log.mgk"
\f
/*
- Typedef declarations.
+ Run-time Logger Info
*/
-typedef enum
-{
- DisabledOutput = 0x0000,
- UndefinedOutput = 0x0000,
- StdoutOutput = 0x0001,
- StderrOutput = 0x0002,
- XMLFileOutput = 0x0004,
- TXTFileOutput = 0x0008,
- Win32DebugOutput = 0x0010,
- Win32EventlogOutput = 0x0020,
- MethodOutput = 0x0040
-} LogOutputType;
-
typedef struct _LogInfo
{
SemaphoreInfo
filename[256],
format[200];
+ time_t
+ last_seconds;
+
+ struct tm
+ last_tm;
+
} LogInfo;
+
+/*
+ Static Logger Defaults
+*/
+typedef struct _LogInfoDefaults
+{
+ unsigned long
+ generations, /* 3 */
+ limit; /* 2000 */
+
+ LogEventType
+ events; /* NoEventsMask */
+
+ LogOutputType
+ output_type; /* StderrOutput */
+
+ LogMethod
+ method; /* (LogMethod) 0 */
+
+ char
+ filename[256], /* "Magick-%d.log" */
+ format[200]; /* "%t %r %u %p %m/%f/%l/%d:\n %e" */
+
+} LogInfoDefaults;
\f
/*
This table maps between masks and the various event id's that can occur
*/
static LogInfo
*log_info = (LogInfo *) NULL;
+
+static LogInfoDefaults log_info_defaults =
+ {
+ 3, /* unsigned long generations */
+ 2000, /* unsigned long limit */
+ NoEventsMask, /* LogEventType events */
+ StderrOutput, /* LogOutputType output_type */
+ (LogMethod) 0, /* LogMethod */
+ "Magick-%d.log", /* char filename[256] */
+ "%t %r %u %p %m/%f/%l/%d:\n %e", /* char format[200] */
+ };
\f
/*
Forward declarations.
%
%
*/
-MagickExport void DestroyLogInfo(void)
+void DestroyLogInfo(void)
{
if (log_info->file != (FILE *) NULL)
if ((log_info->file != stdout) && (log_info->file != stderr))
% fatal error for the whole program. All of the allocations performed by
% this function are released by DestroyLogInfo().
%
+% Normally this function will search for a "log.mgk" file from which to
+% obtain logging defaults, and use compiled-in defaults if the "log.mgk"
+% file is not found. The search for "log.mgk" is skipped if the default
+% logging method is MethodOutput and a logging call-back has been
+% registered.
+%
% The format of the InitializeLogInfo method is:
%
% MagickPassFail InitializeLogInfo(void)
/*
Initialize LogInfo
*/
- log_info=MagickAllocateMemory(LogInfo *,sizeof(LogInfo));
+ log_info=MagickAllocateClearedMemory(LogInfo *,sizeof(LogInfo));
if (log_info == (LogInfo *) NULL)
MagickFatalError3(ResourceLimitFatalError,MemoryAllocationFailed,
UnableToAllocateLogInfo);
log_info->file=(FILE *) NULL;
GetTimerInfo(&log_info->timer);
- log_info->generations=3;
- log_info->limit=2000;
+ log_info->generations=log_info_defaults.generations;
+ log_info->limit=log_info_defaults.limit;
log_info->generation=0;
log_info->count=0;
- log_info->events=NoEventsMask;
- log_info->output_type=StderrOutput;
- log_info->method=0;
+ log_info->events=log_info_defaults.events;
+ log_info->output_type=log_info_defaults.output_type;
+ log_info->method=log_info_defaults.method;
log_info->log_configured=MagickFalse;
+ log_info->last_seconds=0;
(void) strlcpy(log_info->path,"(default)",sizeof(log_info->path));
- (void) strlcpy(log_info->filename,"Magick-%d.log",sizeof(log_info->filename));
- (void) strlcpy(log_info->format,"%t %r %u %p %m/%f/%l/%d:\n %e",
+ (void) strlcpy(log_info->filename,log_info_defaults.filename,sizeof(log_info->filename));
+ (void) strlcpy(log_info->format,log_info_defaults.format,
sizeof(log_info->format));
#if defined(__COVERITY__)
#if UseInstalledMagick
/*
- Try to read the log configuration file.
+ Try to read the log configuration file if not using call-back
+ method.
*/
+ if (!((log_info->output_type & MethodOutput) &&
+ (log_info->method != (LogMethod) NULL)))
{
ExceptionInfo
exception;
*p;
/*
- Try to read the log configuration file.
+ Try to read the log configuration file if not using call-back
+ method.
*/
if (!log_info->log_configured)
{
- ExceptionInfo
- exception;
+ if (!((log_info->output_type & MethodOutput) &&
+ (log_info->method != (LogMethod) NULL)))
+ {
+ ExceptionInfo
+ exception;
- GetExceptionInfo(&exception);
- (void) ReadLogConfigureFile(MagickLogFilename,0,&exception);
- DestroyExceptionInfo(&exception);
+ GetExceptionInfo(&exception);
+ (void) ReadLogConfigureFile(MagickLogFilename,0,&exception);
+ DestroyExceptionInfo(&exception);
+ }
/*
Set override logging flags using the value of MAGICK_DEBUG if it
*/
if ((p=getenv("MAGICK_DEBUG")) != (const char *) NULL)
(void) SetLogEventMask(p);
+
+ /*
+ Claim that logging was successfully configured
+ */
+ log_info->log_configured=MagickTrue;
}
return MagickPass;
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% IsEventLogging() returns True if logging of events is enabled otherwise
-% False.
+% IsEventLogging() returns MagickTrue if logging of events is enabled otherwise
+% MagickFalse. This can be used to enable logging code which is otherwise
+% not needed.
%
% The format of the IsEventLogging method is:
%
-% unsigned int IsEventLogging(void)
+% MagickBool IsEventLogging(void)
%
%
*/
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% LogMagickEvent() logs an event as determined by the log configuration file.
-% If an error occurs, False is returned otherwise True.
+% LogMagickEvent() logs an event as determined by the current logging
+% configuration. If an error occurs, MagickFail is returned otherwise
+% MagickPass.
%
% The format of the LogMagickEvent method is:
%
-% unsigned int LogMagickEvent(const LogEventType type,const char *module,
+% MagickPassFail LogMagickEvent(const LogEventType type,const char *module,
% const char *function,const unsigned long line,const char *format,...)
%
% A description of each parameter follows:
%
%
*/
-MagickExport unsigned int LogMagickEventList(const ExceptionType type,
- const char *module,const char *function,const unsigned long line,
- const char *format,va_list operands)
+MagickExport MagickPassFail
+LogMagickEventList(const ExceptionType type,
+ const char *module,const char *function,
+ const unsigned long line,
+ const char *format,va_list operands)
{
- char
+ const char
*domain,
- *severity,
+ *modulebase,
+ *severity;
+
+ register const char
+ *p;
+
+ size_t
+ message_len=0;
+
+ char
+ message[MaxTextExtent],
+ event[MaxTextExtent],
+ timestamp[16];
+
#if defined(MSWINDOWS)
- nteventtype,
+ char
+ nteventtype;
#endif
- event[MaxTextExtent],
- srcname[MaxTextExtent],
- timestamp[MaxTextExtent];
double
elapsed_time,
user_time;
- register const char
- *p;
-
struct tm
-#if defined(HAVE_LOCALTIME_R)
- tm_buf,
-#endif /* if defined(HAVE_LOCALTIME_R) */
*time_meridian;
time_t
}
}
if (!enabled)
- return(True);
+ return(MagickPass);
}
+ event[0]='\0';
+ message[0]='\0';
+ timestamp[0]='\0';
+
/* fixup module info to just include the filename - and not the
whole path to the file. This makes the log huge for no good
reason */
- GetPathComponent(module,TailPath,srcname);
+ for (modulebase=module+strlen(module)-1; modulebase > module; modulebase--)
+ if (IsBasenameSeparator(*modulebase))
+ {
+ modulebase++;
+ break;
+ }
- LockSemaphoreInfo(log_info->log_semaphore);
switch (((unsigned int) type) % 100)
- {
- case UndefinedException: domain=(char *) "Undefined"; break;
- case ExceptionBase: domain=(char *) "Exception"; break;
- case ResourceBase: domain=(char *) "Resource"; break;
- /* case ResourceLimitBase: domain=(char *) "ResourceLimit"; break; */
- case TypeBase: domain=(char *) "Type"; break;
- /* case AnnotateBase: domain=(char *) "Annotate"; break; */
- case OptionBase: domain=(char *) "Option"; break;
- case DelegateBase: domain=(char *) "Delegate"; break;
- case MissingDelegateBase: domain=(char *) "MissingDelegate"; break;
- case CorruptImageBase: domain=(char *) "CorruptImage"; break;
- case FileOpenBase: domain=(char *) "FileOpen"; break;
- case BlobBase: domain=(char *) "Blob"; break;
- case StreamBase: domain=(char *) "Stream"; break;
- case CacheBase: domain=(char *) "Cache"; break;
- case CoderBase: domain=(char *) "Coder"; break;
- case ModuleBase: domain=(char *) "Module"; break;
- case DrawBase: domain=(char *) "Draw"; break;
- /* case RenderBase: domain=(char *) "Render"; break; */
- case ImageBase: domain=(char *) "image"; break;
- case TemporaryFileBase: domain=(char *) "TemporaryFile"; break;
- case TransformBase: domain=(char *) "Transform"; break;
- case XServerBase: domain=(char *) "XServer"; break;
- case X11Base: domain=(char *) "X11"; break;
- case UserBase: domain=(char *) "User"; break;
- case MonitorBase: domain=(char *) "Monitor"; break;
- case LocaleBase: domain=(char *) "Locale"; break;
- case DeprecateBase: domain=(char *) "Deprecate"; break;
- case RegistryBase: domain=(char *) "Registry"; break;
- case ConfigureBase: domain=(char *) "Configure"; break;
- default: domain=(char *) "UnknownEvent"; break;
- }
+ {
+ case UndefinedException: domain="Undefined"; break;
+ case ExceptionBase: domain="Exception"; break;
+ case ResourceBase: domain="Resource"; break;
+ /* case ResourceLimitBase: domain="ResourceLimit"; break; */
+ case TypeBase: domain="Type"; break;
+ /* case AnnotateBase: domain="Annotate"; break; */
+ case OptionBase: domain="Option"; break;
+ case DelegateBase: domain="Delegate"; break;
+ case MissingDelegateBase: domain="MissingDelegate"; break;
+ case CorruptImageBase: domain="CorruptImage"; break;
+ case FileOpenBase: domain="FileOpen"; break;
+ case BlobBase: domain="Blob"; break;
+ case StreamBase: domain="Stream"; break;
+ case CacheBase: domain="Cache"; break;
+ case CoderBase: domain="Coder"; break;
+ case ModuleBase: domain="Module"; break;
+ case DrawBase: domain="Draw"; break;
+ /* case RenderBase: domain="Render"; break; */
+ case ImageBase: domain="image"; break;
+ case TemporaryFileBase: domain="TemporaryFile"; break;
+ case TransformBase: domain="Transform"; break;
+ case XServerBase: domain="XServer"; break;
+ case X11Base: domain="X11"; break;
+ case UserBase: domain="User"; break;
+ case MonitorBase: domain="Monitor"; break;
+ case LocaleBase: domain="Locale"; break;
+ case DeprecateBase: domain="Deprecate"; break;
+ case RegistryBase: domain="Registry"; break;
+ case ConfigureBase: domain="Configure"; break;
+ default: domain="UnknownEvent"; break;
+ }
switch ((((unsigned int) type) / 100) * 100)
- {
- case EventException: severity=(char *) "Event"; break;
- case WarningException: severity=(char *) "Warning"; break;
- case ErrorException: severity=(char *) "Error"; break;
- case FatalErrorException: severity=(char *) "FatalError"; break;
- default: severity=(char *) "Unknown"; break;
- }
+ {
+ case EventException: severity="Event"; break;
+ case WarningException: severity="Warning"; break;
+ case ErrorException: severity="Error"; break;
+ case FatalErrorException: severity="FatalError"; break;
+ default: severity="Unknown"; break;
+ }
#if defined(MSWINDOWS)
switch ((type / 100) * 100)
- {
+ {
case EventException: nteventtype=EVENTLOG_INFORMATION_TYPE; break;
case WarningException: nteventtype=EVENTLOG_WARNING_TYPE; break;
case ErrorException: nteventtype=EVENTLOG_ERROR_TYPE; break;
case FatalErrorException: nteventtype=EVENTLOG_ERROR_TYPE; break;
default: nteventtype=EVENTLOG_INFORMATION_TYPE; break;
- }
-#endif
-#if defined(HAVE_VSNPRINTF)
- (void) vsnprintf(event,MaxTextExtent,format,operands);
-#else
-# if defined(HAVE_VSPRINTF)
- (void) vsprintf(event,format,operands);
-# else
-# error Neither vsnprintf or vsprintf is available.
-# endif
+ }
#endif
+ MagickFormatStringList(event,sizeof(event),format,operands);
+ LockSemaphoreInfo(log_info->log_semaphore);
seconds=time((time_t *) NULL);
+ if (seconds == log_info->last_seconds)
+ {
+ time_meridian=&log_info->last_tm;
+ }
+ else
+ {
+ log_info->last_seconds=seconds;
#if defined(HAVE_LOCALTIME_R)
- time_meridian=localtime_r(&seconds, &tm_buf);
+ time_meridian=localtime_r(&seconds, &log_info->last_tm);
#else
- time_meridian=localtime(&seconds); /* Thread-unsafe version */
+ time_meridian=localtime(&seconds); /* Possibly thread-unsafe version */
+ (void) memcpy(&log_info->last_tm,time_meridian,sizeof(log_info->last_tm));
#endif /* if defined(HAVE_LOCALTIME_R) */
+ }
elapsed_time=GetElapsedTime(&log_info->timer);
user_time=GetUserTime(&log_info->timer);
(void) ContinueTimer((TimerInfo *) &log_info->timer);
- FormatString(timestamp,"%04d%02d%02d%02d%02d%02d",time_meridian->tm_year+
- 1900,time_meridian->tm_mon+1,time_meridian->tm_mday,
- time_meridian->tm_hour,time_meridian->tm_min,time_meridian->tm_sec);
+ (void) MagickFormatString(timestamp,sizeof(timestamp),"%04d%02d%02d%02d%02d%02d",time_meridian->tm_year+
+ 1900,time_meridian->tm_mon+1,time_meridian->tm_mday,
+ time_meridian->tm_hour,time_meridian->tm_min,time_meridian->tm_sec);
+
+ if (!(((unsigned int) log_info->output_type) & XMLFileOutput))
+ {
+ /*
+ Format message in a "human readable" format.
+ */
+ for (p=log_info->format; *p != '\0'; p++)
+ {
+ /*
+ Process formatting characters in text.
+ */
+ if ((*p == '\\') && (*(p+1) == 'r'))
+ {
+ message_len+=MagickFormatString(&message[message_len],sizeof(message)-message_len,"\r");
+ p++;
+ continue;
+ }
+ if ((*p == '\\') && (*(p+1) == 'n'))
+ {
+ message_len+=MagickFormatString(&message[message_len],sizeof(message)-message_len,"\n");
+ p++;
+ continue;
+ }
+ if (*p != '%')
+ {
+ message_len+=MagickFormatString(&message[message_len],sizeof(message)-message_len,"%c",*p);
+ continue;
+ }
+ p++;
+ switch (*p)
+ {
+ case 'd':
+ {
+ message_len+=MagickFormatString(&message[message_len],sizeof(message)-message_len,"%.1024s",domain);
+ break;
+ }
+ case 'e':
+ {
+ message_len+=MagickFormatString(&message[message_len],sizeof(message)-message_len,"%.1024s",event);
+ break;
+ }
+ case 'f':
+ {
+ message_len+=MagickFormatString(&message[message_len],sizeof(message)-message_len,"%.1024s",function);
+ break;
+ }
+ case 'l':
+ {
+ message_len+=MagickFormatString(&message[message_len],sizeof(message)-message_len,"%lu",line);
+ break;
+ }
+ case 'm':
+ {
+ message_len+=MagickFormatString(&message[message_len],sizeof(message)-message_len,"%.1024s",modulebase);
+ break;
+ }
+ case 'p':
+ {
+ message_len+=MagickFormatString(&message[message_len],sizeof(message)-message_len,"%ld",(long) getpid());
+ break;
+ }
+ case 'r':
+ {
+ message_len+=MagickFormatString(&message[message_len],sizeof(message)-message_len,"%ld:%-9.6f",(long) (elapsed_time/60.0),
+ fmod(elapsed_time,60.0));
+ break;
+ }
+ case 's':
+ {
+ message_len+=MagickFormatString(&message[message_len],sizeof(message)-message_len,"%.1024s",severity);
+ break;
+ }
+ case 't':
+ {
+ message_len+=MagickFormatString(&message[message_len],sizeof(message)-message_len,"%02d:%02d:%02d",time_meridian->tm_hour,
+ time_meridian->tm_min,time_meridian->tm_sec);
+ break;
+ }
+ case 'u':
+ {
+ message_len+=MagickFormatString(&message[message_len],sizeof(message)-message_len,"%0.3fu",user_time);
+ break;
+ }
+ default:
+ {
+ message_len+=MagickFormatString(&message[message_len],sizeof(message)-message_len,"%%");
+ message_len+=MagickFormatString(&message[message_len],sizeof(message)-message_len,"%c",*p);
+ break;
+ }
+ }
+ }
+
+ /*
+ Add a new-line to message for messages which need it. This avoids buffering or I/O later.
+ */
+ if (((unsigned int) log_info->output_type) &
+ ((unsigned int) Win32DebugOutput|Win32EventlogOutput|StdoutOutput|StderrOutput))
+ {
+ message_len+=MagickFormatString(&message[message_len],sizeof(message)-message_len,"\n");
+ }
+ }
+
+ if ((log_info->output_type & MethodOutput) &&
+ (log_info->method != (LogMethod) NULL))
+ {
+ log_info->method(type,message);
+ UnlockSemaphoreInfo(log_info->log_semaphore);
+ return(MagickPass);
+ }
if (((unsigned int) log_info->output_type) & XMLFileOutput)
{
/*
}
(void) fprintf(log_info->file,"<record>\n");
(void) fprintf(log_info->file," <timestamp>%.1024s</timestamp>\n",
- timestamp);
+ timestamp);
(void) fprintf(log_info->file,
- " <elapsed-time>%ld:%-9.6f</elapsed-time>\n",
- (long) (elapsed_time/60.0),fmod(elapsed_time,60.0));
+ " <elapsed-time>%ld:%-9.6f</elapsed-time>\n",
+ (long) (elapsed_time/60.0),fmod(elapsed_time,60.0));
(void) fprintf(log_info->file," <user-time>%0.3f</user-time>\n",
- user_time);
+ user_time);
(void) fprintf(log_info->file," <pid>%ld</pid>\n",(long) getpid());
- (void) fprintf(log_info->file," <module>%.1024s</module>\n",srcname);
+ (void) fprintf(log_info->file," <module>%.1024s</module>\n",modulebase);
(void) fprintf(log_info->file," <function>%.1024s</function>\n",
- function);
+ function);
(void) fprintf(log_info->file," <line>%lu</line>\n",line);
(void) fprintf(log_info->file," <domain>%.1024s</domain>\n",domain);
(void) fprintf(log_info->file," <severity>%.1024s</severity>\n",severity);
(void) fprintf(log_info->file,"</record>\n");
(void) fflush(log_info->file);
UnlockSemaphoreInfo(log_info->log_semaphore);
- return(True);
+ return(MagickPass);
}
if (((unsigned int) log_info->output_type) & TXTFileOutput)
{
if (log_info->generation >= log_info->generations)
log_info->generation=0;
}
- (void) fprintf(log_info->file,
- "%.1024s %ld:%-9.6f %0.3f %ld %.1024s %.1024s %lu"
- " %.1024s %.1024s %.1024s\n",
- timestamp, (long) (elapsed_time/60.0),
- fmod(elapsed_time,60.0),
- user_time, (long) getpid(), srcname, function, line, domain,
- severity, event);
+ (void) fprintf(log_info->file,"%s",message);
(void) fflush(log_info->file);
UnlockSemaphoreInfo(log_info->log_semaphore);
- return(True);
+ return(MagickPass);
}
#if defined(MSWINDOWS)
if (log_info->output_type & Win32DebugOutput)
{
- char
- buffer[MaxTextExtent];
-
- FormatString(buffer,
- "%.1024s %ld:%-9.6f %0.3f %ld %.1024s %.1024s %lu %.1024s"
- " %.1024s %.1024s\n",
- timestamp, (long) (elapsed_time/60.0),
- fmod(elapsed_time,60.0),
- user_time, (long) getpid(), srcname, function, line,
- domain, severity, event);
- OutputDebugString(buffer);
+ OutputDebugString(message);
}
if (log_info->output_type & Win32EventlogOutput)
{
#define LOGGING_ERROR_CODE 0
- char
- buffer[MaxTextExtent];
-
LPCSTR
szList[1];
HANDLE
hSource;
- FormatString(buffer,
- "%.1024s %ld:%-9.6f %0.3f %ld %.1024s %.1024s %lu %.1024s"
- " %.1024s %.1024s\n",
- timestamp, (long) (elapsed_time/60.0),
- fmod(elapsed_time,60.0),
- user_time, (long) getpid(), srcname, function, line,
- domain, severity, event);
hSource = RegisterEventSource(NULL, MagickPackageName);
if (hSource != NULL)
{
- szList[0]=buffer;
+ szList[0]=message;
ReportEvent(hSource,nteventtype,0,LOGGING_ERROR_CODE,NULL,1,0,szList,NULL);
DeregisterEventSource(hSource);
}
{
FILE
*file;
+
/*
- Log to stdout in a "human readable" format.
+ Log to stdout/stderr in a "human readable" format.
*/
file = stdout;
if (((unsigned int) log_info->output_type) & StderrOutput)
file = stderr;
- for (p=log_info->format; *p != '\0'; p++)
- {
- /*
- Process formatting characters in text.
- */
- if ((*p == '\\') && (*(p+1) == 'r'))
- {
- (void) fprintf(file,"\r");
- p++;
- continue;
- }
- if ((*p == '\\') && (*(p+1) == 'n'))
- {
- (void) fprintf(file,"\n");
- p++;
- continue;
- }
- if (*p != '%')
- {
- (void) fprintf(file,"%c",*p);
- continue;
- }
- p++;
- switch (*p)
- {
- case 'd':
- {
- (void) fprintf(file,"%.1024s",domain);
- break;
- }
- case 'e':
- {
- (void) fprintf(file,"%.1024s",event);
- break;
- }
- case 'f':
- {
- (void) fprintf(file,"%.1024s",function);
- break;
- }
- case 'l':
- {
- (void) fprintf(file,"%lu",line);
- break;
- }
- case 'm':
- {
- register const char
- *lp;
-
- for (lp=srcname+strlen(srcname)-1; lp > srcname; lp--)
- if (*lp == *DirectorySeparator)
- {
- lp++;
- break;
- }
- (void) fprintf(file,"%.1024s",lp);
- break;
- }
- case 'p':
- {
- (void) fprintf(file,"%ld",(long) getpid());
- break;
- }
- case 'r':
- {
- (void) fprintf(file,"%ld:%-9.6f",(long) (elapsed_time/60.0),
- fmod(elapsed_time,60.0));
- break;
- }
- case 's':
- {
- (void) fprintf(file,"%.1024s",severity);
- break;
- }
- case 't':
- {
- (void) fprintf(file,"%02d:%02d:%02d",time_meridian->tm_hour,
- time_meridian->tm_min,time_meridian->tm_sec);
- break;
- }
- case 'u':
- {
- (void) fprintf(file,"%0.3fu",user_time);
- break;
- }
- default:
- {
- (void) fprintf(file,"%%");
- (void) fprintf(file,"%c",*p);
- break;
- }
- }
- }
- (void) fprintf(file,"\n");
+ (void) fprintf(file,"%s",message);
(void) fflush(file);
}
- if ((log_info->output_type & MethodOutput) &&
- (log_info->method != (LogMethod) NULL))
- {
- char
- buffer[MaxTextExtent];
-
- FormatString(buffer,
- "%.1024s %ld:%-9.6f %0.3f %ld %.1024s %.1024s %lu %.1024s"
- " %.1024s %.1024s\n",
- timestamp, (long) (elapsed_time/60.0),
- fmod(elapsed_time,60.0),
- user_time, (long) getpid(), srcname, function, line,
- domain, severity, event);
- log_info->method(type,buffer);
- }
UnlockSemaphoreInfo(log_info->log_semaphore);
- return(True);
+ return(MagickPass);
}
-MagickExport unsigned int LogMagickEvent(const ExceptionType type,
+MagickExport MagickPassFail LogMagickEvent(const ExceptionType type,
const char *module,const char *function,const unsigned long line,
const char *format,...)
{
%
% The format of the ReadLogConfigureFile method is:
%
-% unsigned int ReadLogConfigureFile(const char *basename,
+% MagickPassFail ReadLogConfigureFile(const char *basename,
% const unsigned int depth,ExceptionInfo *exception)
%
% A description of each parameter follows:
MagickFreeMemory(xml);
if ((depth == 0) && (status == MagickPass))
- log_info->log_configured=True;
+ log_info->log_configured=MagickTrue;
return(status);
}
\f
/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% S e t L o g D e f a u l t E v e n t T y p e %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% SetLogDefaultEventType() accepts a comma-delimited list (Annotate, Blob,
+% Cache, Coder, Configure, Deprecate, Error, Exception, FatalError,
+% Information, Locale, Option, Render, Resource, TemporaryFile, Transform,
+% User, Warning, or X11) that determines the default set of events to log.
+% All other events are ignored. By default, no logging is enabled.
+%
+% This function should be called prior to InitializeMagick() since it
+% provides defaults used by InitializeMagick() while the logging system
+% is initialized. The events may be modified later after
+% InitializeMagick() has been called using the SetLogEventMask() function.
+%
+% The format of SetLogDefaultEventType method is:
+%
+% void SetLogDefaultEventType( const char *events )
+%
+% A description of each parameter follows:
+%
+% o events: Comma-separated list of events to report.
+%
+%
+*/
+MagickExport void SetLogDefaultEventType(const char *events)
+{
+ if (events != NULL)
+ {
+ LogEventType event_flags=ParseEvents(events);
+ log_info_defaults.events=event_flags;
+ }
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% S e t L o g D e f a u l t G e n e r a t i o n s %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% SetLogDefaultGenerations() specifies the maximum number of log files
+% to maintain before circulating back to overwrite the first name.
+%
+% This function should be called prior to InitializeMagick() since it
+% provides defaults used by InitializeMagick() while the logging system
+% is initialized.
+%
+% The format of SetLogDefaultGenerations method is:
+%
+% void SetLogDefaultGenerations(const unsigned long generations)
+%
+% A description of each parameter follows:
+%
+% o generations: Number of log files to maintain before circulating back to
+% the first name.
+%
+%
+*/
+MagickExport void SetLogDefaultGenerations(const unsigned long generations)
+{
+ log_info_defaults.generations=generations;
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% S e t L o g D e f a u l t L i m i t %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% SetLogDefaultLimit() specifies the maximum number of logging events which
+% may occur before creating a new log file.
+%
+% This function should be called prior to InitializeMagick() since it
+% provides defaults used by InitializeMagick() while the logging system
+% is initialized.
+%
+% The format of SetLogDefaultLimit method is:
+%
+% void SetLogDefaultLimit(const unsigned long limit)
+%
+% A description of each parameter follows:
+%
+% o limit: Maximum number of logging events before creating a new log file.
+%
+%
+*/
+MagickExport void SetLogDefaultLimit(const unsigned long limit)
+{
+ log_info_defaults.limit=limit;
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% S e t L o g D e f a u l t L o g M e t h o d %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% SetLogDefaultLogMethod() provides a call-back function to be invoked
+% for each log event when the logging method type is MethodOutput.
+% This call-back function is supported when MethodOutput is enabled
+% in the log output type. MethodOutput is automatically enabled if
+% a call-back function is provided, and disabled if the call-back
+% function is NULL.
+%
+% This function should be called prior to InitializeMagick() since it
+% provides defaults used by InitializeMagick() while the logging system
+% is initialized.
+%
+% The format of SetLogDefaultLogMethod method is:
+%
+% void SetLogDefaultLogMethod( const LogMethod method )
+%
+% A description of each parameter follows:
+%
+% o method: Call-back function to be invoked for each log event.
+%
+%
+*/
+MagickExport void SetLogDefaultLogMethod(const LogMethod method)
+{
+ if (method == (LogMethod) NULL)
+ {
+ log_info_defaults.output_type=(LogOutputType)
+ (log_info_defaults.output_type & ~MethodOutput);
+ }
+ else
+ {
+ log_info_defaults.output_type=(LogOutputType)
+ (log_info_defaults.output_type | MethodOutput);
+ }
+
+ log_info_defaults.method=method;
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% S e t L o g D e f a u l t O u t p u t T y p e %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% SetLogDefaultOutputType() sets the logging output destination.
+%
+% This function should be called prior to InitializeMagick() since it
+% provides defaults used by InitializeMagick() while the logging system
+% is initialized.
+%
+% The format of SetLogDefaultOutputType method is:
+%
+% void SetLogDefaultOutputType( const LogOutputType output_type )
+%
+% A description of each parameter follows:
+%
+% o output_type: The logging output destination. One of the enumerated
+% values of LogOutputType.
+%
+%
+*/
+MagickExport void SetLogDefaultOutputType(const LogOutputType output_type)
+{
+ log_info_defaults.output_type=output_type;
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% S e t L o g D e f a u l t F o r ma t %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% SetLogDefaultFormat() provides the format of the logging output.
+% The specification supports these special format characters:
+%
+% %d domain
+% %e event
+% %f function
+% %l line
+% %m module
+% %p process ID
+% %r real CPU time
+% %t wall clock time
+% %u user CPU time
+% %% percent sign
+% \n newline
+% \r carriage return
+%
+% This function should be called prior to InitializeMagick() since it
+% provides defaults used by InitializeMagick() while the logging system
+% is initialized.
+%
+% The format of SetLogDefaultFormat method is:
+%
+% void SetLogDefaultFormat( const char *format )
+%
+% A description of each parameter follows:
+%
+% o format: The format of the logging output.
+%
+%
+*/
+MagickExport void SetLogDefaultFormat( const char *format )
+{
+ (void) strlcpy(log_info_defaults.format,format,sizeof(log_info_defaults.format));
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% S e t L o g D e f a u l t F i l e N a m e %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% SetLogDefaultFileName() provides the file name, or file path, to be
+% written to for each log event. Place a %d in the file name in order to
+% support multiple log generations. This setting is only used when the
+% log output type uses an output file.
+%
+% This function should be called prior to InitializeMagick() since it
+% provides defaults used by InitializeMagick() while the logging system
+% is initialized.
+%
+% The format of SetLogDefaultFileName method is:
+%
+% void SetLogDefaultFileName( const char *filename )
+%
+% A description of each parameter follows:
+%
+% o filename: File name, or file path to write log output to.
+%
+%
+*/
+MagickExport void SetLogDefaultFileName( const char *filename )
+{
+ (void) strlcpy(log_info_defaults.filename,filename,sizeof(log_info_defaults.filename));
+}
+\f
+/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% SetLogEventMask() accepts a comma-delimited list that determines which
-% events to log. All other events are ignored. By default, no logging is
-% enabled. This method returns the updated log event mask.
+% SetLogEventMask() accepts a comma-delimited list (Annotate, Blob, Cache,
+% Coder, Configure, Deprecate, Error, Exception, FatalError, Information,
+% Locale, Option, Render, Resource, TemporaryFile, Transform, User,
+% Warning, or X11) that determines which events to log. All other events
+% are ignored. By default, no logging is enabled. This method returns
+% the updated log event mask.
%
-% The format of the AcquireString method is:
+% The format of the SetLogEventMask method is:
%
% unsigned long SetLogEventMask(const char *events)
%
% %
% %
% %
-% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% SetLogFormat() sets the format for the "human readable" log record.
+% The format specification supports these special format characters:
+%
+% %d domain,
+% %e event,
+% %f function,
+% %l line,
+% %m module,
+% %p process ID,
+% %r real CPU time,
+% %t wall clock time,
+% %u user CPU time,
+% %% percent sign,
+% \n newline,
+% \r carriage return
%
% The format of the LogMagickFormat method is:
%
-% SetLogFormat(const char *format)
+% void SetLogFormat(const char *format)
%
% A description of each parameter follows:
%
% %
% %
% %
-% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% SetLogMethod() sets the method that should be called when logging.
+% SetLogMethod() sets the method to be called when logging.
%
% The format of the SetLogMethod method is:
%
-% SetLogFormat(LogMethod)
+% void SetLogMethod(LogMethod method)
%
% A description of each parameter follows:
%
-% o method: pointer to a method that will be called when LogMagickEvent is
-% being called.
+% o method: pointer to a method of type LogMethod that will be called when LogMagickEvent
+% is called. Pass a null pointer to remove a registered method.
%
%
*/
{
LockSemaphoreInfo(log_info->log_semaphore);
- log_info->output_type=(LogOutputType) (log_info->output_type |
- MethodOutput);
+ if (method == (LogMethod) NULL)
+ {
+ log_info->output_type=(LogOutputType)
+ (log_info->output_type & ~MethodOutput);
+ }
+ else
+ {
+ log_info->output_type=(LogOutputType)
+ (log_info->output_type | MethodOutput);
+ }
+
log_info->method=method;
UnlockSemaphoreInfo(log_info->log_semaphore);
#ifndef _MAGICK_LOG_H
#define _MAGICK_LOG_H
+#include "magick/error.h"
+
#if defined(__cplusplus) || defined(c_plusplus)
extern "C" {
#endif
AllEventsMask = 0x7FFFFFFF
} LogEventType;
+/*
+ Typedef declarations.
+*/
+typedef enum
+{
+ DisabledOutput = 0x0000,
+ UndefinedOutput = 0x0000,
+ StdoutOutput = 0x0001,
+ StderrOutput = 0x0002,
+ XMLFileOutput = 0x0004,
+ TXTFileOutput = 0x0008,
+ Win32DebugOutput = 0x0010,
+ Win32EventlogOutput = 0x0020,
+ MethodOutput = 0x0040
+} LogOutputType;
+
typedef void
- (*LogMethod)(const ExceptionType,const char *);
+ (*LogMethod)(const ExceptionType type,const char *text);
/*
Method declarations.
SetLogEventMask(const char *events);
extern MagickExport void
+ SetLogDefaultEventType(const char *events),
+ SetLogDefaultGenerations(const unsigned long generations),
+ SetLogDefaultLimit(const unsigned long limit),
+ SetLogDefaultFileName( const char *filename ),
+ SetLogDefaultFormat( const char *format ),
+ SetLogDefaultLogMethod(const LogMethod method),
+ SetLogDefaultOutputType(const LogOutputType output_type),
SetLogFormat(const char *format),
SetLogMethod(LogMethod);
*/
extern MagickExport MagickPassFail
- InitializeMagicInfo(void);
+ InitializeMagicInfo(void) MAGICK_FUNC_CONST;
extern MagickExport void
DestroyMagicInfo(void);
MAGIC("GIF", 0, "GIF8"),
MAGIC("HDF", 1, "HDF"),
MAGIC("HPGL", 0, "IN;"),
- MAGIC("HPGL", 0, "\033E\033"),
MAGIC("HTML", 1, "HTML"),
MAGIC("HTML", 1, "html"),
MAGIC("ILBM", 8, "ILBM"),
Include declarations.
*/
#include "magick/studio.h"
+#if defined(USE_GLIBC_MTRACE) && USE_GLIBC_MTRACE
+# include <mcheck.h>
+#endif /* if defined(USE_GLIBC_MTRACE) && USE_GLIBC_MTRACE */
#if defined(MSWINDOWS) || defined(__CYGWIN__)
# include "magick/nt_feature.h"
#endif
DestroyColorInfo(); /* Color database */
DestroyDelegateInfo(); /* External delegate information */
DestroyTypeInfo(); /* Font information */
- DestroyMagicInfo(); /* File format detection */
+ /*DestroyMagicInfo();*/ /* File format detection */
DestroyMagickInfoList(); /* Coder registrations + modules */
DestroyConstitute(); /* Constitute semaphore */
DestroyMagickRegistry(); /* Registered images */
DestroyMagickRandomGenerator(); /* Random number generator */
DestroyTemporaryFiles(); /* Temporary files */
#if defined(MSWINDOWS)
+#if defined(HasGS)
NTGhostscriptUnLoadDLL(); /* Ghostscript DLL */
+#endif /* if defined(HasGS) */
#endif /* defined(MSWINDOWS) */
/*
Destroy logging last since some components log their destruction.
static RETSIGTYPE MagickSignalHandler(int signo);
/*
- Signal function which prevents interrupted system calls from
- automatically being restarted. From W. Richard Stevens "Advanced
- Programming in the UNIX Environment", Chapter 10.14.
+ Signal function which only sets the signal handler if it its handling
+ is still set to SIG_DFL. This ensures that signal handlers are not
+ registered for signals which are being ignored, or that the API
+ user has already registered before invoking InitializeMagick.
+
+ Due to a weakness in the POSIX APIs, the only way to see the handler
+ which was registered before is by registering a new handler.
+
+ If an API user registers its own signal hander, then it is responsible
+ for invoking DestroyMagick when a signal is received.
*/
-static Sigfunc *
-MagickSignal(int signo, Sigfunc *func)
+static void
+MagickCondSignal(int signo, Sigfunc *func)
{
#if defined(HAVE_SIGACTION) && defined(HAVE_SIGEMPTYSET)
struct sigaction
act,
oact;
+ /*
+ Signal set-up code which prevents interrupted system calls from
+ automatically being restarted. From W. Richard Stevens "Advanced
+ Programming in the UNIX Environment", Chapter 10.14.
+ */
act.sa_handler=func;
(void) sigemptyset(&act.sa_mask);
act.sa_flags=0;
# if defined(SA_INTERRUPT) /* SunOS */
act.sa_flags |= SA_INTERRUPT;
-# endif
+# endif /* if defined(SA_INTERRUPT) */
# if defined(SA_ONSTACK) /* Use alternate signal stack if available */
act.sa_flags |= SA_ONSTACK;
-# endif
- if (sigaction(signo, &act, &oact) < 0)
- return (SIG_ERR);
- return (oact.sa_handler);
-#else
- return signal(signo, func);
-#endif
-}
+# endif /* if defined(SA_ONSTACK) */
-/*
- Signal function which only sets the signal handler if it its handling
- is still set to SIG_DFL. This ensures that signal handlers are not
- registered for signals which are being ignored, or that the API
- user has already registered before invoking InitializeMagick.
+ (void) memset(&oact, 0, sizeof(oact));
+ if (sigaction(signo, &act, &oact) == 0)
+ {
+ if ((oact.sa_flags & SA_SIGINFO) ||
+ (oact.sa_handler != SIG_DFL))
+ {
+ /* Restore prior handler! */
+ if (sigaction(signo, &oact, &act) != 0)
+ (void) LogMagickEvent(ConfigureEvent,GetMagickModule(),
+ "Failed to restore prior signal handler for signal ID %d!",signo);
+ else
+ (void) LogMagickEvent(ConfigureEvent,GetMagickModule(),
+ "Restored prior signal handler for signal ID %d!",signo);
+ }
+ else
+ {
+ (void) LogMagickEvent(ConfigureEvent,GetMagickModule(),
+ "Registered signal handler for signal ID %d",signo);
+ }
+ }
+ else
+ {
+ (void) LogMagickEvent(ConfigureEvent,GetMagickModule(),
+ "Failed to register signal handler for signal ID %d!",signo);
+ }
- If an API user registers its own signal hander, then it is responsible
- for invoking DestroyMagick when a signal is received.
-*/
-static Sigfunc *
-MagickCondSignal(int signo, Sigfunc *func)
-{
+#else
Sigfunc *
o_handler;
- if ((o_handler=MagickSignal(signo,func)) != SIG_ERR)
+ if ((o_handler=signal(signo, func)) != SIG_ERR)
{
- /*
- If handler is not the default, then restore the previous
- setting.
- */
if (o_handler != SIG_DFL)
- (void) MagickSignal(signo,o_handler);
+ {
+ /* Restore prior handler! */
+ if (signal(signo, o_handler) == SIG_ERR)
+ (void) LogMagickEvent(ConfigureEvent,GetMagickModule(),
+ "Failed to restore prior signal handler for signal ID %d!",signo);
+ else
+ (void) LogMagickEvent(ConfigureEvent,GetMagickModule(),
+ "Restored prior signal handler for signal ID %d!",signo);
+ }
else
- (void) LogMagickEvent(ConfigureEvent,GetMagickModule(),
- "Registered signal handler for signal ID %d",signo);
+ {
+ (void) LogMagickEvent(ConfigureEvent,GetMagickModule(),
+ "Registered signal handler for signal ID %d",signo);
+ }
+ }
+ else
+ {
+ (void) LogMagickEvent(ConfigureEvent,GetMagickModule(),
+ "Failed to register signal handler for signal ID %d!",signo);
}
- return (o_handler);
+#endif
}
/*
#if 0
/* termination of child process */
#if defined(SIGCHLD)
- (void) MagickCondSignal(SIGCHLD,MagickIgnoreSignalHandler);
+ MagickCondSignal(SIGCHLD,MagickIgnoreSignalHandler);
#endif
#endif
/* hangup, default terminate */
#if defined(SIGHUP)
- (void) MagickCondSignal(SIGHUP,MagickSignalHandler);
+ MagickCondSignal(SIGHUP,MagickSignalHandler);
#endif
/* interrupt (CONTROL-c), default terminate */
#if defined(SIGINT)
- (void) MagickCondSignal(SIGINT,MagickSignalHandler);
+ MagickCondSignal(SIGINT,MagickSignalHandler);
#endif
/* quit (CONTROL-\), default terminate with core */
#if defined(SIGQUIT)
- (void) MagickCondSignal(SIGQUIT,MagickPanicSignalHandler);
+ MagickCondSignal(SIGQUIT,MagickPanicSignalHandler);
#endif
/* software-triggered abort, default terminate with core */
#if defined(SIGABRT)
- (void) MagickCondSignal(SIGABRT,MagickPanicSignalHandler);
+ MagickCondSignal(SIGABRT,MagickPanicSignalHandler);
#endif
/* floating point exception, default terminate with core */
#if defined(SIGFPE)
- (void) MagickCondSignal(SIGFPE,MagickPanicSignalHandler);
+ MagickCondSignal(SIGFPE,MagickPanicSignalHandler);
#endif
/* software termination signal from kill, default terminate */
#if defined(SIGTERM)
- (void) MagickCondSignal(SIGTERM,MagickSignalHandler);
+ MagickCondSignal(SIGTERM,MagickSignalHandler);
#endif
/* Bus Error */
#if defined(SIGBUS)
- (void) MagickCondSignal(SIGBUS,MagickPanicSignalHandler);
+ MagickCondSignal(SIGBUS,MagickPanicSignalHandler);
#endif
/* segmentation fault */
#if defined(SIGSEGV)
- (void) MagickCondSignal(SIGSEGV,MagickPanicSignalHandler);
+ MagickCondSignal(SIGSEGV,MagickPanicSignalHandler);
#endif
/* exceeded cpu limit, default terminate */
#if defined(SIGXCPU)
- (void) MagickCondSignal(SIGXCPU,MagickSignalHandler);
+ MagickCondSignal(SIGXCPU,MagickSignalHandler);
#endif
/* exceeded file size limit, default terminate */
#if defined(SIGXFSZ)
- (void) MagickCondSignal(SIGXFSZ,MagickSignalHandler);
+ MagickCondSignal(SIGXFSZ,MagickSignalHandler);
#endif
}
return status;
}
+#if defined(USE_GLIBC_MTRACE) && USE_GLIBC_MTRACE
+ mtrace();
+#endif /* f defined(USE_GLIBC_MTRACE) && USE_GLIBC_MTRACE */
+
/* Save initialization options in case we need them later */
initialize_magick_options = options;
InitializeMagickRegistry(); /* Image/blob registry */
InitializeConstitute(); /* Constitute semaphore */
InitializeMagickInfoList(); /* Coder registrations + modules */
- InitializeMagicInfo(); /* File format detection */
+ /*InitializeMagicInfo();*/ /* File format detection */
InitializeTypeInfo(); /* Font information */
InitializeDelegateInfo(); /* External delegate information */
InitializeColorInfo(); /* Color database */
/* Define if coders and filters are to be built as modules. */
#undef BuildMagickModules
+/* Disable reading and writing of gzip/bzip files */
+#undef DISABLE_COMPRESSED_FILES
+
/* Disable OpenMP for algorithms which sometimes run slower */
#undef DisableSlowOpenMP
/* Define if you have FlashPIX library */
#undef HasFPX
+/* Enable use of Ghostscript */
+#undef HasGS
+
/* Define if you have JBIG library */
#undef HasJBIG
/* Number of bits in a pixel Quantum (8/16/32) */
#undef QuantumDepth
-/* Define as the return type of signal handlers (`int' or `void'). */
-#undef RETSIGTYPE
-
/* Setjmp/longjmp are thread safe */
#undef SETJMP_IS_THREAD_SAFE
extern MagickExport size_t
MagickArraySize(const size_t count,const size_t size) MAGICK_FUNC_CONST;
+extern MagickExport
+ void *_MagickReallocateResourceLimitedMemory(void *p,const size_t count,const size_t size,const MagickBool clear);
+
+extern MagickExport
+ void *_MagickAllocateResourceLimitedMemory(const size_t size);
+
+extern MagickExport
+ void _MagickFreeResourceLimitedMemory(void *p);
+
+
/*
Allocate memory
*/
}
/*
+ Allocate/Reallocate/Free memory (resource limited)
+ */
+#define MagickAllocateResourceLimitedMemory(type,size) \
+ ((((size) != ((size_t) (size))) || (size == 0)) ? ((type) 0) : \
+ ((type) _MagickReallocateResourceLimitedMemory(0,1,(size_t) (size),MagickFalse)))
+
+#define MagickAllocateResourceLimitedClearedMemory(type,size) \
+ ((((size) != ((size_t) (size))) || (size == 0)) ? ((type) 0) : \
+ ((type) _MagickReallocateResourceLimitedMemory(0,1,(size_t) (size),MagickTrue)))
+
+#define MagickAllocateResourceLimitedArray(type,count,size) \
+ ((type) _MagickReallocateResourceLimitedMemory(0,(size_t) (count),(size_t) (size),MagickFalse))
+
+#define MagickAllocateResourceLimitedClearedArray(type,count,size) \
+ ((type) _MagickReallocateResourceLimitedMemory(0,(size_t) (count),(size_t) (size),MagickTrue))
+
+#define MagickReallocateResourceLimitedMemory(type,memory,size) \
+ ((type) _MagickReallocateResourceLimitedMemory(memory,1,(size_t) (size),MagickFalse))
+
+#define MagickReallocateResourceLimitedArray(type,memory,count,size) \
+ ((type) _MagickReallocateResourceLimitedMemory(memory,(size_t) (count),(size_t) (size),MagickFalse))
+
+#define MagickReallocateResourceLimitedClearedArray(type,memory,count,size) \
+ ((type) _MagickReallocateResourceLimitedMemory(memory,(size_t) (count),(size_t) (size),MagickTrue))
+
+#define MagickFreeResourceLimitedMemory(memory) \
+ memory=_MagickReallocateResourceLimitedMemory(memory,0,0,MagickFalse);
+
+/*
Reallocate memory using provided pointer. If reallocation fails
then free memory, setting pointer to null. If size is 0 and memory
is not a null pointer, then free memory. This interface behaves
/*
-% Copyright (C) 2003-2018 GraphicsMagick Group
+% Copyright (C) 2003-2020 GraphicsMagick Group
% Copyright (C) 2002 ImageMagick Studio
% Copyright 1991-1999 E. I. du Pont de Nemours and Company
%
Include declarations.
*/
#include "magick/studio.h"
+#include "magick/resource.h"
#include "magick/utility.h"
#if defined(MAGICK_MEMORY_HARD_LIMIT)
#endif
}
}
+
+/*
+ Structure for tracking resource-limited memory allocation.
+ */
+typedef struct _MagickMemoryResource_T
+{
+ void *memory; /* Pointer to memory allocation */
+ size_t alloc_size; /* Requested allocation size */
+ size_t alloc_size_real; /* Real/underlying allocation size */
+ size_t signature; /* Initialized to MagickSignature */
+
+} MagickMemoryResource_T;
+
+#if !defined(MAGICK_DEBUG_RL_MEMORY)
+#define MAGICK_DEBUG_RL_MEMORY 0
+#endif /* if !defined(MAGICK_DEBUG_RL_MEMORY) */
+
+/* Return MemoryResource_T pointer given user-land pointer */
+#define MagickAccessMemoryResource_T_From_Pub(p) \
+ ((MagickMemoryResource_T *) ((char *) p-sizeof(MagickMemoryResource_T)))
+/* Return user-land pointer given private base allocation pointer */
+#define UserLandPointerGivenBaseAlloc(p) \
+ ((char *)p+sizeof(MagickMemoryResource_T))
+/* Trace MemoryResource_T content given a pointer to it */
+#if defined(MAGICK_DEBUG_RL_MEMORY) && MAGICK_DEBUG_RL_MEMORY
+#define TraceMagickAccessMemoryResource_T(operation,memory_resource) \
+ fprintf(stderr,__FILE__ ":%d - %s memory_resource: memory=%p (user %p)," \
+ " alloc_size=%zu," \
+ " alloc_size_real=%zu\n", \
+ __LINE__, \
+ operation, \
+ (memory_resource)->memory, \
+ (memory_resource)->memory ? UserLandPointerGivenBaseAlloc((memory_resource)->memory) : 0, \
+ (memory_resource)->alloc_size, \
+ (memory_resource)->alloc_size_real);
+#else
+#define TraceMagickAccessMemoryResource_T(operation,memory_resource) ;
+#endif
+
+/*
+ Clean up a MagickMemoryResource_T, releasing referenced memory and
+ resource allocation. Not safe if embedded in the memory buffer
+ being released!
+*/
+static void _MagickFreeResourceLimitedMemory_T(MagickMemoryResource_T *memory_resource)
+{
+ TraceMagickAccessMemoryResource_T("FREE",memory_resource);
+ if (memory_resource->memory != 0)
+ {
+ MagickFree(memory_resource->memory);
+ memory_resource->memory=0;
+ }
+ if (memory_resource->alloc_size != 0)
+ LiberateMagickResource(MemoryResource, memory_resource->alloc_size);
+ memory_resource->alloc_size_real=0;
+ memory_resource->alloc_size=0;
+}
+
+
+/*
+ Reallocate resource-limited array memory based on pointer to
+ existing allocation, object count, and object size. Freshly
+ allocated memory is cleared to zero if the clear flag is set.
+
+ This works like MagickRealloc() except for supporting count and size
+ arguments similar to calloc(). GNU libc has a reallocarray()
+ function using similar arguments.
+
+ Alignment concerns: 128-bit SSE registers have an alignment
+ requirement of 16 bytes, the 256-bit Intel AVX registers have an
+ alignment requirement of 32 bytes, and the 512-bit Intel AVX-512
+ registers have an alignment requirement of 64 bytes, that is.
+
+ Linux malloc produces allocations aligned to 16-bytes.
+ */
+MagickExport void *_MagickReallocateResourceLimitedMemory(void *p,
+ const size_t count,
+ const size_t size,
+ const MagickBool clear)
+{
+ MagickMemoryResource_T memory_resource;
+ size_t size_diff;
+ const size_t new_size = MagickArraySize(count,size);
+ void *res;
+ MagickPassFail
+ status = MagickPass;
+
+#if defined(MAGICK_DEBUG_RL_MEMORY) && MAGICK_DEBUG_RL_MEMORY
+ fprintf(stderr,"%d: p = %p, count = %zu, size =%zu\n", __LINE__, p, count, size);
+#endif
+
+ if (p != 0)
+ {
+ assert(((ptrdiff_t) p - sizeof(MagickMemoryResource_T)) > 0);
+ (void) memcpy(&memory_resource,
+ (void *) MagickAccessMemoryResource_T_From_Pub(p),
+ sizeof(MagickMemoryResource_T));
+ assert(memory_resource.signature == MagickSignature);
+ }
+ else
+ {
+ memory_resource.memory = 0;
+ memory_resource.alloc_size = 0;
+ memory_resource.alloc_size_real = 0;
+ memory_resource.signature = MagickSignature;
+ }
+ TraceMagickAccessMemoryResource_T("BEFORE", &memory_resource);
+
+ do
+ {
+ if (((new_size == 0) && (count != 0) && (size != 0)) ||
+ (new_size > SIZE_MAX/2) || (SIZE_MAX-new_size <= sizeof(MagickMemoryResource_T)))
+ {
+ /* Memory allocation FAILED */
+#if defined(ENOMEM)
+ errno = ENOMEM;
+#endif /* if defined(ENOMEM) */
+ status = MagickFail;
+ break;
+ }
+ else if (new_size == 0)
+ {
+ /* Deallocate all allocated memory (if any) */
+ _MagickFreeResourceLimitedMemory_T(&memory_resource);
+ break;
+ }
+ else if (new_size > memory_resource.alloc_size)
+ {
+ /* Allocate or enlarge memory */
+ size_diff = new_size - memory_resource.alloc_size;
+ if (AcquireMagickResource(MemoryResource,size_diff) == MagickPass)
+ {
+ if (new_size > memory_resource.alloc_size_real)
+ {
+ void *realloc_memory;
+ /* FIXME: Maybe over-allocate here if re-alloc? */
+ realloc_memory = (ReallocFunc)(memory_resource.memory,
+ new_size+sizeof(MagickMemoryResource_T));
+ if (realloc_memory != 0)
+ {
+ if (clear)
+ (void) memset(UserLandPointerGivenBaseAlloc(realloc_memory)+
+ memory_resource.alloc_size,0,size_diff);
+
+ memory_resource.memory = realloc_memory;
+ memory_resource.alloc_size = new_size;
+ memory_resource.alloc_size_real = new_size;
+ }
+ else
+ {
+ /* Memory re-allocation FAILED */
+#if defined(ENOMEM)
+ errno = ENOMEM;
+#endif /* if defined(ENOMEM) */
+ status = MagickFail;
+ }
+ }
+ else
+ {
+ if (clear)
+ (void) memset(UserLandPointerGivenBaseAlloc(memory_resource.memory)+
+ memory_resource.alloc_size,0,size_diff);
+
+ /* Re-allocation is not required */
+ memory_resource.alloc_size = new_size;
+ }
+ }
+ else
+ {
+ /* Acquire memory resource FAILED */
+#if defined(ENOMEM)
+ errno = ENOMEM;
+#endif /* if defined(ENOMEM) */
+ status = MagickFail;
+ }
+ break;
+ }
+ else if (new_size < memory_resource.alloc_size)
+ {
+ /* Reduce memory */
+ size_diff = memory_resource.alloc_size - new_size;
+ LiberateMagickResource(MemoryResource,size_diff);
+ memory_resource.alloc_size = new_size;
+ /* FIXME: Maybe actually realloc to smaller size here? */
+ break;
+ }
+ } while (0);
+
+ if (memory_resource.memory != 0)
+ {
+ (void) memcpy((void *) memory_resource.memory,&memory_resource,
+ sizeof(MagickMemoryResource_T));
+ }
+ TraceMagickAccessMemoryResource_T("AFTER", &memory_resource);
+
+ res = ((status == MagickPass) && memory_resource.memory) ?
+ UserLandPointerGivenBaseAlloc(memory_resource.memory) : 0;
+
+ return res;
+}
+
+/*
+ Allocate resource-limited memory. Similar to MagickMalloc().
+
+ Memory must be released using MagickFreeMemoryResource().
+*/
+MagickExport void *_MagickAllocateResourceLimitedMemory(const size_t size)
+{
+ return _MagickReallocateResourceLimitedMemory(0,1,size,MagickFalse);
+}
+
+/*
+ Free resource-limited memory which was allocated by
+ MagickReallocMemoryResource() or MagickMallocMemoryResource().
+
+ Similar to MagickFree().
+*/
+MagickExport void _MagickFreeResourceLimitedMemory(void *p)
+{
+ _MagickReallocateResourceLimitedMemory(p,0,0,MagickFalse);
+}
static char
*NTslsearchpath = (char *) NULL;
#endif
+#if defined(HasGS)
static void
*gs_dll_handle = (void *)NULL;
static GhostscriptVectors
gs_vectors;
+#endif /* if defined(HasGS) */
static MagickPassFail NTstrerror_r(LONG errnum, char *strerrbuf, size_t buflen);
\f
" Searching for %s...",
products[product_index]);
FormatString(key,"SOFTWARE\\%s",products[product_index]);
-
+
/*
long WINAPI RegOpenKeyEx(const HKEY hKey, const LPCTSTR
lpSubKey, const DWORD ulOptions, const REGSAM samDesired,
static int
gs_major_version=0,
- gs_minor_version=0;
+ gs_minor_version=0;
unsigned int
i;
return MagickFail;
}
+#if defined(HasGS)
\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
return FALSE;
}
+#endif /* if defined(HasGS) */
\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
return FALSE;
}
+#if defined(HasGS)
\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
return False;
}
+#endif /* if defined(HasGS) */
\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
MagickPassFail
status=MagickPass;
- /*
- Make image color opaque.
- */
+ MagickBool
+ is_monochrome = image->is_monochrome,
+ is_grayscale = image->is_grayscale;
+
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
options.fuzz=image->fuzz;
options.fill=fill;
options.target=target;
+
+ /*
+ Assure that image type is promoted as required based on color
+ */
+ if ((is_grayscale || IsGrayColorspace(image->colorspace)) && !IsGray(fill))
+ {
+ if ((is_monochrome) && !IsBlackPixel(fill) && !IsWhitePixel(fill))
+ is_monochrome = MagickFalse;
+ is_grayscale = MagickFalse;
+ }
+
+ /*
+ Make image color opaque.
+ */
if (image->storage_class == PseudoClass)
{
assert(image->colormap != (PixelPacket *) NULL);
image,&image->exception);
}
+ image->is_monochrome = is_monochrome;
+ image->is_grayscale = is_grayscale;
+
return(status);
}
\f
assert(cache != (Cache) NULL);
cache_info=(CacheInfo *) cache;
assert(cache_info->signature == MagickSignature);
- if (!cache_info->indexes_valid)
+ if (!(cache_info->indexes_valid && (nexus_info->indexes != (IndexPacket *) NULL)))
return(MagickFail);
if (nexus_info->in_core)
return(MagickPass);
static MagickPassFail
ClipCacheNexus(Image *image,const NexusInfo *nexus_info)
{
- long
+ unsigned long
y;
register const PixelPacket
*r;
- register long
+ register unsigned long
x;
register PixelPacket
nexus_info->region.width,nexus_info->region.height,mask_nexus,
&image->exception);
if ((p != (PixelPacket *) NULL) && (r != (const PixelPacket *) NULL))
- for (y=0; y < (long) nexus_info->region.height; y++)
+ for (y=0; y < nexus_info->region.height; y++)
{
- for (x=0; x < (long) nexus_info->region.width; x++)
+ for (x=0; x < nexus_info->region.width; x++)
{
if (r->red == TransparentOpacity)
q->red=p->red;
if (*ImageGetClipMaskInlined(image) != (Image *) NULL)
if (!ClipCacheNexus(image,nexus_info))
status=MagickFail;
- /* added mask */
- if ( status != MagickFail )
- {
- if (*ImageGetCompositeMaskInlined(image) != (Image *) NULL)
- {
- if (!CompositeCacheNexus(image,nexus_info))
- status=MagickFail;
- }
- }
+
+ /* added mask */
+ if ( status != MagickFail )
+ {
+ if (*ImageGetCompositeMaskInlined(image) != (Image *) NULL)
+ {
+ if (!CompositeCacheNexus(image,nexus_info))
+ status=MagickFail;
+ }
+ }
if (status != MagickFail)
if ((status=WriteCachePixels(cache_info,nexus_info)) == MagickFail)
p3_area,
p_area;
- p=AcquireCacheViewPixels(view,(long) x_offset,(long) y_offset,2,2,exception);
+ p=AcquireCacheViewPixels(view,MagickDoubleToLong(x_offset),
+ MagickDoubleToLong(y_offset),2,2,exception);
if (p == (const PixelPacket *) NULL)
return MagickFail;
if (status == MagickFail)
DestroyCacheInfo(clone_image.cache);
}
+ else
+ {
+ DestroyCacheInfo(clone_image.cache);
+ clone_image.cache=(CacheInfo *) NULL;
+ }
DestroySemaphoreInfo(&clone_image.semaphore);
if (status != MagickFail)
image->cache=clone_image.cache;
}
if (status == MagickFail)
- fprintf(stderr,"ModifyCache failed!\n");
+ fprintf(stderr,"ModifyCache failed!\n"); /* oss-fuzz-20871 leaked clone_image.cache allocated by GetCacheInfo(&clone_image.cache) */
/* fprintf(stderr,"ModifyCache: Thread %d exits (cache_info = %p)\n",
omp_get_thread_num(),image->cache); */
}
cache if necessary.
*/
if (destroy_cache)
- DestroyCacheInfo(cache_info);
+ {
+ DestroyCacheInfo(cache_info);
+ cache_info=(CacheInfo *) NULL;
+ }
if (status != MagickFail)
{
#if !defined(PRIMITIVE_INFO_POINTS_MAX)
# define PRIMITIVE_INFO_POINTS_MAX ((~((size_t)0)) >> 8)
#endif /* !defined(PRIMITIVE_INFO_POINTS_MAX) */
+/* Largest double value which can be converted to a long and survive AbsoluteValue() */
+#if LONG_MAX == 2147483647L
+# define DTOLONG_MAX 2147483647.0
+# define DTOLONG_MIN -2147483647.0
+#else
+# define DTOLONG_MAX 9007199254740992.0
+# define DTOLONG_MIN -9007199254740992.0
+#endif
\f
/*
Typedef declarations.
Forward declarations.
*/
static PrimitiveInfo /* added Image* param so DrawInfo::stroke_width can be clamped */
- *TraceStrokePolygon(const Image *,const DrawInfo *,const PrimitiveInfo *);
+ *TraceStrokePolygon(const Image *,const DrawInfo *,const PrimitiveInfo *,ExceptionInfo *exception);
static MagickPassFail
DrawBoundingRectangles(Image *image,const DrawInfo *draw_info,
#define STROKE_WIDTH_LIMIT(image) ((2.0*1.415) * Max((image)->columns,(image)->rows))
+\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
}
static PolygonInfo *
-ConvertPathToPolygon(const PathInfo *path_info)
+ConvertPathToPolygon(const PathInfo *path_info, ExceptionInfo *exception)
{
size_t
edge,
return((PolygonInfo *) NULL);
number_edges=16;
polygon_info->edges=
- MagickAllocateArray(EdgeInfo *,number_edges,sizeof(EdgeInfo));
+ MagickAllocateResourceLimitedArray(EdgeInfo *,number_edges,sizeof(EdgeInfo));
if (polygon_info->edges == (EdgeInfo *) NULL)
{
DestroyPolygonInfo(polygon_info);
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
return((PolygonInfo *) NULL);
}
direction=0;
{
if (edge == number_edges)
{
+ EdgeInfo *new_edges;
number_edges<<=1;
- MagickReallocMemory(EdgeInfo *,polygon_info->edges,
- MagickArraySize(number_edges,sizeof(EdgeInfo)));
- if (polygon_info->edges == (EdgeInfo *) NULL)
+ new_edges=MagickReallocateResourceLimitedArray(EdgeInfo *,
+ polygon_info->edges,
+ number_edges,
+ sizeof(EdgeInfo));
+ if (new_edges == (EdgeInfo *) NULL)
{
+ MagickFreeResourceLimitedMemory(points);
DestroyPolygonInfo(polygon_info);
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
return((PolygonInfo *) NULL);
}
+ polygon_info->edges=new_edges;
}
polygon_info->edges[edge].number_points=n;
polygon_info->edges[edge].scanline=(-1.0);
points=(PointInfo *) NULL;
ghostline=MagickFalse;
edge++;
+ polygon_info->number_edges=edge;
}
if (points == (PointInfo *) NULL)
{
number_points=16;
points=
- MagickAllocateArray(PointInfo *,number_points,sizeof(PointInfo));
+ MagickAllocateResourceLimitedArray(PointInfo *,
+ number_points,sizeof(PointInfo));
if (points == (PointInfo *) NULL)
{
DestroyPolygonInfo(polygon_info);
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
return((PolygonInfo *) NULL);
}
}
point=points[n-1];
if (edge == number_edges)
{
+ EdgeInfo *new_edges;
number_edges<<=1;
- MagickReallocMemory(EdgeInfo *,polygon_info->edges,
- MagickArraySize(number_edges,sizeof(EdgeInfo)));
- if (polygon_info->edges == (EdgeInfo *) NULL)
+ new_edges=MagickReallocateResourceLimitedArray(EdgeInfo *,
+ polygon_info->edges,
+ number_edges,sizeof(EdgeInfo));
+ if (new_edges == (EdgeInfo *) NULL)
{
+ MagickFreeResourceLimitedMemory(points);
DestroyPolygonInfo(polygon_info);
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
return((PolygonInfo *) NULL);
}
+ polygon_info->edges=new_edges;
}
polygon_info->edges[edge].number_points=n;
polygon_info->edges[edge].scanline=(-1.0);
polygon_info->edges[edge].bounds=bounds;
polygon_info->edges[edge].bounds.y1=points[0].y;
polygon_info->edges[edge].bounds.y2=points[n-1].y;
+ points=(PointInfo *) NULL;
+ polygon_info->number_edges=edge+1;
number_points=16;
points=
- MagickAllocateArray(PointInfo *,number_points,sizeof(PointInfo));
+ MagickAllocateResourceLimitedArray(PointInfo *,
+ number_points,sizeof(PointInfo));
if (points == (PointInfo *) NULL)
{
DestroyPolygonInfo(polygon_info);
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
return((PolygonInfo *) NULL);
}
n=1;
continue;
if (n == number_points)
{
+ PointInfo *new_points;
number_points<<=1;
- MagickReallocMemory(PointInfo *,points,MagickArraySize(number_points,sizeof(PointInfo)));
- if (points == (PointInfo *) NULL)
+ new_points=MagickReallocateResourceLimitedArray(PointInfo *,points,
+ number_points,sizeof(PointInfo));
+ if (new_points == (PointInfo *) NULL)
{
+ MagickFreeResourceLimitedMemory(points);
DestroyPolygonInfo(polygon_info);
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
return((PolygonInfo *) NULL);
}
+ points=new_points;
}
point=path_info[i].point;
points[n]=point;
{
if (n < 2)
{
- MagickFreeMemory(points);
+ MagickFreeResourceLimitedMemory(points);
}
else
{
if (edge == number_edges)
{
+ EdgeInfo *new_edges;
number_edges<<=1;
- MagickReallocMemory(EdgeInfo *,polygon_info->edges,
- MagickArraySize(number_edges,sizeof(EdgeInfo)));
- if (polygon_info->edges == (EdgeInfo *) NULL)
+ new_edges=MagickReallocateResourceLimitedArray(EdgeInfo *,polygon_info->edges,
+ number_edges,sizeof(EdgeInfo));
+ if (new_edges == (EdgeInfo *) NULL)
{
+ MagickFreeResourceLimitedMemory(points);
DestroyPolygonInfo(polygon_info);
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
return((PolygonInfo *) NULL);
}
+ polygon_info->edges=new_edges;
}
polygon_info->edges[edge].number_points=n;
polygon_info->edges[edge].scanline=(-1.0);
polygon_info->edges[edge].bounds=bounds;
polygon_info->edges[edge].bounds.y1=points[0].y;
polygon_info->edges[edge].bounds.y2=points[n-1].y;
+ points=(PointInfo *) NULL;
ghostline=MagickFalse;
edge++;
+ polygon_info->number_edges=edge;
}
}
polygon_info->number_edges=edge;
static PathInfo *
ConvertPrimitiveToPath(const DrawInfo *draw_info,
- const PrimitiveInfo *primitive_info)
+ const PrimitiveInfo *primitive_info,
+ ExceptionInfo *exception)
{
PathInfo
*path_info;
}
for (i=0; primitive_info[i].primitive != UndefinedPrimitive; i++);
path_info_elem=(2*i+6);
- path_info=MagickAllocateArray(PathInfo *,path_info_elem,sizeof(PathInfo));
+ path_info=MagickAllocateResourceLimitedArray(PathInfo *,path_info_elem,sizeof(PathInfo));
if (path_info == (PathInfo *) NULL)
- return((PathInfo *) NULL);
+ {
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
+ return((PathInfo *) NULL);
+ }
coordinates=0;
n=0;
p.x=(-1.0);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% DestroyDrawInfo() deallocates memory associated with an DrawInfo
-% structure.
+% structure. Nothing is done if the pointer passed is NULL.
%
% The format of the DestroyDrawInfo method is:
%
DestroyEdge(PolygonInfo * restrict polygon_info,const size_t edge)
{
assert(edge < polygon_info->number_edges);
- MagickFreeMemory(polygon_info->edges[edge].points);
+ MagickFreeResourceLimitedMemory(polygon_info->edges[edge].points);
polygon_info->number_edges--;
if (edge < polygon_info->number_edges)
(void) memmove(polygon_info->edges+edge,polygon_info->edges+edge+1,
if (polygon_info->edges != (EdgeInfo *) NULL)
{
for (i=0; i < polygon_info->number_edges; i++)
- MagickFreeMemory(polygon_info->edges[i].points);
- MagickFreeMemory(polygon_info->edges);
+ MagickFreeResourceLimitedMemory(polygon_info->edges[i].points);
+ MagickFreeResourceLimitedMemory(polygon_info->edges);
}
MagickFreeMemory(polygon_info);
}
if (affine->sx > MagickEpsilon)
{
intercept=(-z/affine->sx);
- x=(long) ceil(intercept+MagickEpsilon-0.5);
+ x=MagickDoubleToLong(ceil(intercept+MagickEpsilon-0.5)); /* FIXME: validate */
if (x > inverse_edge.x1)
inverse_edge.x1=x;
intercept=(-z+image->columns)/affine->sx;
- x=(long) ceil(intercept-MagickEpsilon-0.5);
+ x=MagickDoubleToLong(ceil(intercept-MagickEpsilon-0.5)); /* FIXME: validate */
if (x < inverse_edge.x2)
inverse_edge.x2=x;
}
if (affine->sx < -MagickEpsilon)
{
intercept=(-z+image->columns)/affine->sx;
- x=(long) ceil(intercept+MagickEpsilon-0.5);
+ x=MagickDoubleToLong(ceil(intercept+MagickEpsilon-0.5)); /* FIXME: validate */
if (x > inverse_edge.x1)
inverse_edge.x1=x;
intercept=(-z/affine->sx);
- x=(long) ceil(intercept-MagickEpsilon-0.5);
+ x=MagickDoubleToLong(ceil(intercept-MagickEpsilon-0.5)); /* FIXME: validate */
if (x < inverse_edge.x2)
inverse_edge.x2=x;
}
if (affine->rx > MagickEpsilon)
{
intercept=(-z /affine->rx);
- x=(long) ceil(intercept+MagickEpsilon-0.5);
+ x=MagickDoubleToLong(ceil(intercept+MagickEpsilon-0.5)); /* FIXME: validate */
if (x > inverse_edge.x1)
inverse_edge.x1=x;
intercept=(-z+image->rows)/affine->rx;
- x=(long) ceil(intercept-MagickEpsilon-0.5);
+ x=MagickDoubleToLong(ceil(intercept-MagickEpsilon-0.5)); /* FIXME: validate */
if (x < inverse_edge.x2)
inverse_edge.x2=x;
}
if (affine->rx < -MagickEpsilon)
{
intercept=(-z+image->rows)/affine->rx;
- x=(long) ceil(intercept+MagickEpsilon-0.5);
+ x=MagickDoubleToLong(ceil(intercept+MagickEpsilon-0.5)); /* FIXME: validate */
if (x > inverse_edge.x1)
inverse_edge.x1=x;
intercept=(-z/affine->rx);
- x=(long) ceil(intercept-MagickEpsilon-0.5);
+ x=MagickDoubleToLong(ceil(intercept-MagickEpsilon-0.5)); /* FIXME: validate */
if (x < inverse_edge.x2)
inverse_edge.x2=x;
}
inverse_affine;
double
- determinant;
+ determinant,
+ divisor;
- determinant=1.0/(affine->sx*affine->sy-affine->rx*affine->ry);
+ divisor=affine->sx*affine->sy-affine->rx*affine->ry;
+ determinant=1.0/divisor; /* oss-fuzz 28293 runtime error: division by zero */
inverse_affine.sx=determinant*affine->sy;
inverse_affine.rx=determinant*(-affine->rx);
inverse_affine.ry=determinant*(-affine->ry);
memset(primitive_info,0,sizeof(primitive_info));
clone_info=CloneDrawInfo((ImageInfo *) NULL,draw_info);
- if ((status=QueryColorDatabase("#000000ff",&clone_info->fill,&image->exception)) == MagickFail)
+ if ((status &= QueryColorDatabase("#000000ff",&clone_info->fill,&image->exception)) == MagickFail)
goto draw_bounding_rectangles_end;
resolution.x=72.0;
resolution.y=72.0;
{
if (polygon_info->edges[i].direction)
{
- if ((status=QueryColorDatabase("red",&clone_info->stroke,
- &image->exception)) == MagickFail)
+ if ((status &= QueryColorDatabase("red",&clone_info->stroke,
+ &image->exception)) == MagickFail)
goto draw_bounding_rectangles_end;
}
else
{
- if ((status=QueryColorDatabase("green",&clone_info->stroke,
- &image->exception)) == MagickFail)
+ if ((status &= QueryColorDatabase("green",&clone_info->stroke,
+ &image->exception)) == MagickFail)
goto draw_bounding_rectangles_end;
}
start.x=polygon_info->edges[i].bounds.x1-mid;
end.x=polygon_info->edges[i].bounds.x2+mid;
end.y=polygon_info->edges[i].bounds.y2+mid;
primitive_info[0].primitive=RectanglePrimitive;
- if ((status=TraceRectangle(primitive_info,start,end)) == MagickFail)
+ if ((status &= TraceRectangle(primitive_info,start,end)) == MagickFail)
goto draw_bounding_rectangles_end;
primitive_info[0].method=ReplaceMethod;
coordinates=(long) primitive_info[0].coordinates;
primitive_info[coordinates].primitive=UndefinedPrimitive;
- if ((status=DrawPrimitive(image,clone_info,primitive_info)) == MagickFail)
+ if ((status &= DrawPrimitive(image,clone_info,primitive_info)) == MagickFail)
goto draw_bounding_rectangles_end;
}
}
- if ((status=QueryColorDatabase("blue",&clone_info->stroke,&image->exception)) == MagickFail)
+ if ((status &= QueryColorDatabase("blue",&clone_info->stroke,&image->exception)) == MagickFail)
goto draw_bounding_rectangles_end;
start.x=bounds.x1-mid;
start.y=bounds.y1-mid;
end.x=bounds.x2+mid;
end.y=bounds.y2+mid;
primitive_info[0].primitive=RectanglePrimitive;
- if ((status=TraceRectangle(primitive_info,start,end)) == MagickFail)
+ if ((status &= TraceRectangle(primitive_info,start,end)) == MagickFail)
goto draw_bounding_rectangles_end;
primitive_info[0].method=ReplaceMethod;
coordinates=(long) primitive_info[0].coordinates;
primitive_info[coordinates].primitive=UndefinedPrimitive;
- if ((status=DrawPrimitive(image,clone_info,primitive_info)) == MagickFail)
+ if ((status &= DrawPrimitive(image,clone_info,primitive_info)) == MagickFail)
goto draw_bounding_rectangles_end;
draw_bounding_rectangles_end:;
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
assert(draw_info != (const DrawInfo *) NULL);
- FormatString(clip_path,"[%.1024s]",name);
+ assert(name != (const char *) NULL);
+ FormatString(clip_path,"[MVG:%.1024s]",name);
attribute=GetImageAttribute(image,clip_path);
- /*
- FIXME: Desired error handling for missing clip-path attribute is
- not clear (was returning MagickFail). Maybe the caller does not
- know.
- */
if (attribute == (ImageAttribute *) NULL)
return(MagickPass);
- image_clip_mask = *ImageGetClipMaskInlined(image);
- if (image_clip_mask == (Image *) NULL)
+ do
{
- Image
- *clip_mask;
-
- clip_mask=CloneImage(image,image->columns,image->rows,MagickTrue,
- &image->exception);
- if (clip_mask == (Image *) NULL)
- return(MagickFail);
- status=SetImageClipMask(image,clip_mask);
- DestroyImage(clip_mask);
- if (status == MagickFail)
- return(MagickFail);
image_clip_mask = *ImageGetClipMaskInlined(image);
- }
- else
- {
+ if (image_clip_mask == (Image *) NULL)
+ {
+ /*
+ FIXME: Desired error handling for missing clip-path attribute is
+ not clear (was returning MagickFail). Maybe the caller does not
+ know.
+ */
+ Image
+ *clip_mask;
+
+ if ((clip_mask=CloneImage(image,image->columns,image->rows,MagickTrue,
+ &image->exception)) == (Image *) NULL)
+ break;
+ status &= SetImageClipMask(image,clip_mask);
+ /*
+ SetImageClipMask() clones the provided clip_mask image so
+ destroy original reference.
+ */
+ DestroyImage(clip_mask);
+ if (status == MagickFail)
+ break;
+ image_clip_mask = *ImageGetClipMaskInlined(image);
+ }
+ else
+ {
+ /*
+ Re-clone the image attributes, since more may have been added since
+ the clip_mask image was created.
+ */
+ DestroyImageAttributes(image_clip_mask);
+ CloneImageAttributes(image_clip_mask,image);
+ }
+ if ((status &= QueryColorDatabase("none",&image_clip_mask->background_color,
+ &image->exception)) == MagickFail)
+ break;
+ if ((status &= SetImage(image_clip_mask,TransparentOpacity)) == MagickFail)
+ break;
+ (void) LogMagickEvent(RenderEvent,GetMagickModule(),
+ "\nbegin clip-path %.1024s",draw_info->extra->clip_path);
+ if ((clone_info=CloneDrawInfo((ImageInfo *) NULL,draw_info)) == (DrawInfo *) NULL)
+ {
+ ThrowException3(&image->exception,ResourceLimitError,
+ MemoryAllocationFailed,UnableToDrawOnImage);
+ status=MagickFail;
+ break;
+ }
+ if ((status &= CloneString(&clone_info->primitive,attribute->value)) == MagickFail)
+ break;
+ if ((status &= QueryColorDatabase("white",&clone_info->fill,&image->exception)) == MagickFail)
+ break;
+
/*
- Re-clone the image attributes, since more may have been added since
- the clip_mask image was created.
- */
- DestroyImageAttributes(image_clip_mask);
- CloneImageAttributes(image_clip_mask,image);
- }
- if ((status=QueryColorDatabase("none",&image_clip_mask->background_color,
- &image->exception)) == MagickFail)
- goto draw_clip_path_end;
- if ((status=SetImage(image_clip_mask,TransparentOpacity)) == MagickFail)
- goto draw_clip_path_end;
- (void) LogMagickEvent(RenderEvent,GetMagickModule(),
- "\nbegin clip-path %.1024s",draw_info->extra->clip_path);
- clone_info=CloneDrawInfo((ImageInfo *) NULL,draw_info);
- if ((status=CloneString(&clone_info->primitive,attribute->value)) == MagickFail)
- goto draw_clip_path_end;
- if ((status=QueryColorDatabase("white",&clone_info->fill,&image->exception)) == MagickFail)
- goto draw_clip_path_end;
+ According to the SVG spec:
- /*
- According to the SVG spec:
+ The raw geometry of each child element exclusive of rendering properties such
+ as ‘fill’, ‘stroke’, ‘stroke-width’ within a ‘clipPath’ conceptually defines a
+ 1-bit mask (with the possible exception of anti-aliasing along the edge of the
+ geometry) which represents the silhouette of the graphics associated with that
+ element. Anything outside the outline of the object is masked out.
- The raw geometry of each child element exclusive of rendering properties such
- as ‘fill’, ‘stroke’, ‘stroke-width’ within a ‘clipPath’ conceptually defines a
- 1-bit mask (with the possible exception of anti-aliasing along the edge of the
- geometry) which represents the silhouette of the graphics associated with that
- element. Anything outside the outline of the object is masked out.
+ To conform with the spec, we make sure that fill color (set above), stroke color,
+ stroke width, and group/global opacity are set to appropriate values.
+ */
+ SetDrawInfoClippingPath(clone_info,MagickTrue);
+ if ( IsDrawInfoSVGCompliant(clone_info) )
+ {
+ /* changes to fill, etc. will be ignored */
+ if ((status &= QueryColorDatabase("none",
+ &clone_info->stroke,&image->exception)) /* SVG default */
+ == MagickFail)
+ {
+ break;
+ }
+ clone_info->stroke_width = 0.0; /* SVG default */
+ clone_info->opacity = OpaqueOpacity; /* SVG default */
+ }
- To conform with the spec, we make sure that fill color (set above), stroke color,
- stroke width, and group/global opacity are set to appropriate values.
- */
- SetDrawInfoClippingPath(clone_info,MagickTrue);
- if ( IsDrawInfoSVGCompliant(clone_info) )
- {
- /* changes to fill, etc. will be ignored */
- if ((status=QueryColorDatabase("none",
- &clone_info->stroke,&image->exception)) /* SVG default */
- == MagickFail)
+ MagickFreeMemory(clone_info->extra->clip_path);
+ if ((status &= DrawImage(image_clip_mask,clone_info)) == MagickFail)
{
- goto draw_clip_path_end;
+ /* Copy exception into base image */
+ if (image_clip_mask->exception.severity > image->exception.severity)
+ CopyException(&image->exception, &image_clip_mask->exception);
+ break;
+ }
+ if ((status &= NegateImage(image_clip_mask,False)) == MagickFail)
+ {
+ /* Copy exception into base image */
+ if (image_clip_mask->exception.severity > image->exception.severity)
+ CopyException(&image->exception, &image_clip_mask->exception);
+ break;
}
- clone_info->stroke_width = 0.0; /* SVG default */
- clone_info->opacity = OpaqueOpacity; /* SVG default */
- }
- MagickFreeMemory(clone_info->extra->clip_path);
- if ((status=DrawImage(image_clip_mask,clone_info)) == MagickFail)
- goto draw_clip_path_end;
- if ((status=NegateImage(image_clip_mask,False)) == MagickFail)
- goto draw_clip_path_end;
+ (void) LogMagickEvent(RenderEvent,GetMagickModule(),"end clip-path");
- draw_clip_path_end:
+ } while (0);
if (clone_info != (DrawInfo *) NULL)
{
clone_info = (DrawInfo *) NULL;
}
- (void) LogMagickEvent(RenderEvent,GetMagickModule(),"end clip-path");
return(status);
}
-/* code below for DrawCompositeMask() cloned/modifed from DrawClipMask() */
+/* code below for DrawCompositeMask() cloned/modifed from DrawClipPath() */
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
assert(draw_info != (const DrawInfo *) NULL);
- FormatString(composite_path,"[%.1024s]",name);
- attribute=GetImageAttribute(image,composite_path);
- if (attribute == (ImageAttribute *) NULL)
- return(MagickFail);
- image_composite_mask = *ImageGetCompositeMaskInlined(image);
- if (image_composite_mask == (Image *) NULL)
+ FormatString(composite_path,"[MVG:%.1024s]",name);
+ do
{
- Image
- *composite_mask;
-
- composite_mask=CloneImage(image,image->columns,image->rows,MagickTrue,
- &image->exception);
- if (composite_mask == (Image *) NULL)
- return(MagickFail);
- status=SetImageCompositeMask(image,composite_mask);
- DestroyImage(composite_mask);
+ if ((attribute=GetImageAttribute(image,composite_path)) == (ImageAttribute *) NULL)
+ {
+ status = MagickFail;
+ break;
+ }
image_composite_mask = *ImageGetCompositeMaskInlined(image);
- if (status == MagickFail)
- return(MagickFail);
- }
- else
- {
- /*
- Re-clone the image attributes, since more may have been added since
- the composite_mask image was created.
- */
- DestroyImageAttributes(image_composite_mask);
- CloneImageAttributes(image_composite_mask,image);
- }
- if ((status=QueryColorDatabase("none",&image_composite_mask->background_color,
- &image->exception)) == MagickFail)
- goto draw_composite_mask_end;
- if ((status=SetImage(image_composite_mask,TransparentOpacity)) == MagickFail)
- goto draw_composite_mask_end;
- (void) LogMagickEvent(RenderEvent,GetMagickModule(),
- "\nbegin mask %.1024s",draw_info->extra->composite_path);
- clone_info=CloneDrawInfo((ImageInfo *) NULL,draw_info);
- if ((status=CloneString(&clone_info->primitive,attribute->value)) == MagickFail)
- goto draw_composite_mask_end;
- /* these settings are per the SVG spec */
- if ((status=QueryColorDatabase("black",&clone_info->fill,&image->exception)) == MagickFail)
- goto draw_composite_mask_end;
- if ((status=QueryColorDatabase("none",&clone_info->stroke,&image->exception)) == MagickFail)
- goto draw_composite_mask_end;
- clone_info->stroke_width = 1.0;
- clone_info->opacity = OpaqueOpacity;
- if ((status=DrawImage(image_composite_mask,clone_info)) == MagickFail)
- goto draw_composite_mask_end;
- draw_composite_mask_end:;
+ if (image_composite_mask == (Image *) NULL)
+ {
+ Image
+ *composite_mask;
+
+ composite_mask=CloneImage(image,image->columns,image->rows,MagickTrue,
+ &image->exception);
+ if (composite_mask == (Image *) NULL)
+ {
+ status = MagickFail;
+ break;
+ }
+ status &= SetImageCompositeMask(image,composite_mask);
+ DestroyImage(composite_mask);
+ image_composite_mask = *ImageGetCompositeMaskInlined(image);
+ if (status == MagickFail)
+ break;
+ }
+ else
+ {
+ /*
+ Re-clone the image attributes, since more may have been added since
+ the composite_mask image was created.
+ */
+ DestroyImageAttributes(image_composite_mask);
+ CloneImageAttributes(image_composite_mask,image);
+ }
+ if ((status &= QueryColorDatabase("none",&image_composite_mask->background_color,
+ &image->exception)) == MagickFail)
+ break;
+ if ((status &= SetImage(image_composite_mask,TransparentOpacity)) == MagickFail)
+ break;
+ (void) LogMagickEvent(RenderEvent,GetMagickModule(),
+ "\nbegin mask %.1024s",draw_info->extra->composite_path);
+ if ((clone_info=CloneDrawInfo((ImageInfo *) NULL,draw_info)) == (DrawInfo *) NULL)
+ {
+ ThrowException3(&image->exception,ResourceLimitError,
+ MemoryAllocationFailed,UnableToDrawOnImage);
+ status=MagickFail;
+ break;
+ }
+ if ((status &= CloneString(&clone_info->primitive,attribute->value)) == MagickFail)
+ break;
+ /* these settings are per the SVG spec */
+ if ((status &= QueryColorDatabase("black",&clone_info->fill,&image->exception)) == MagickFail)
+ break;
+ if ((status &= QueryColorDatabase("none",&clone_info->stroke,&image->exception)) == MagickFail)
+ break;
+ clone_info->stroke_width = 1.0;
+ clone_info->opacity = OpaqueOpacity;
+ if ((status &= DrawImage(image_composite_mask,clone_info)) == MagickFail)
+ {
+ /* Copy exception into base image */
+ if (image_composite_mask->exception.severity > image->exception.severity)
+ CopyException(&image->exception, &image_composite_mask->exception);
+ break;
+ }
+ (void) LogMagickEvent(RenderEvent,GetMagickModule(),"end composite-path");
+ } while (0);
+
DestroyDrawInfo(clone_info);
- (void) LogMagickEvent(RenderEvent,GetMagickModule(),"end composite-path");
return(status);
}
double
length,
maximum_length,
+ maximum_length_limit,
offset,
scale,
total_length;
MagickPassFail
- status;
+ status = MagickPass;
PrimitiveInfo
*dash_polygon;
clone_info->miterlimit=0;
for (i=0; primitive_info[i].primitive != UndefinedPrimitive; i++);
number_vertices=i;
- dash_polygon=MagickAllocateArray(PrimitiveInfo *,
- (size_t) 2*number_vertices+1,
- sizeof(PrimitiveInfo));
+ dash_polygon=MagickAllocateResourceLimitedArray(PrimitiveInfo *,
+ (size_t) 2*number_vertices+1,
+ sizeof(PrimitiveInfo));
if (dash_polygon == (PrimitiveInfo *) NULL)
{
DestroyDrawInfo(clone_info);
+ ThrowException3(&image->exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
return(MagickFail);
}
dash_polygon[0]=primitive_info[0];
- scale=ExpandAffine(&draw_info->affine);
+ scale=ExpandAffine(&draw_info->affine); /* oss-fuzz 24236 scale=121287375, total_length=542727042660000, maximum_length=605375610468750! */
length=scale*draw_info->dash_pattern[0];
offset=draw_info->dash_offset != 0.0 ? scale*draw_info->dash_offset : 0.0;
j=1;
offset=0.0;
n++;
}
- status=MagickPass;
maximum_length=0.0;
total_length=0.0;
+ maximum_length_limit=100.0*sqrt((double)image->columns*(double)image->columns+
+ (double) image->rows*(double) image->rows+
+ +MagickEpsilon);
for (i=1; (i < number_vertices) && (length >= 0.0); i++)
{
dx=primitive_info[i].point.x-primitive_info[i-1].point.x;
dy=primitive_info[i].point.y-primitive_info[i-1].point.y;
maximum_length=sqrt(dx*dx+dy*dy+MagickEpsilon);
+ /*
+ Apply an arbitrary limit on maximum length in order to avoid
+ seemingly unending iterations due to affine and other factors
+ (e.g. oss-fuzz 10614 & 24236).
+
+ FIXME: It is TBD if the arbitrary limit factors used have any
+ basis in reality! Please report if this limit causes issues
+ with valid files.
+ */
+ if (maximum_length > maximum_length_limit)
+ {
+ char message[MaxTextExtent];
+ FormatString(message,"Maximum length: %g, Scale: %g", maximum_length, scale);
+ ThrowException(&image->exception,DrawError,UnreasonableDashPolygonLength,message);
+ status=MagickFail;
+ goto draw_dash_polygon_fail;
+ }
if (length == 0.0)
{
if (draw_info->dash_pattern[n] != 0.0)
j++;
dash_polygon[0].coordinates=j;
dash_polygon[j].primitive=UndefinedPrimitive;
- status&=DrawStrokePolygon(image,clone_info,dash_polygon);
+ status &= DrawStrokePolygon(image,clone_info,dash_polygon);
if (status == MagickFail)
break;
}
j++;
dash_polygon[0].coordinates=(size_t) j;
dash_polygon[j].primitive=UndefinedPrimitive;
- status&=DrawStrokePolygon(image,clone_info,dash_polygon);
+ status &= DrawStrokePolygon(image,clone_info,dash_polygon);
}
- MagickFreeMemory(dash_polygon);
+ draw_dash_polygon_fail:;
+ MagickFreeResourceLimitedMemory(dash_polygon);
DestroyDrawInfo(clone_info);
(void) LogMagickEvent(RenderEvent,GetMagickModule()," end draw-dash");
return(status);
%
%
*/
+
static MagickBool
IsPoint(const char *point)
{
return (((*r < b) || (*r < o)) ? MagickFail : MagickPass);
}
-static const char *recursion_key ="[DrawImageRecursion]";
+static const char recursion_key[] = "[DrawImageRecursion]";
static long DrawImageGetCurrentRecurseLevel(Image *image)
{
const ImageAttribute
*/
static
char * ExtractTokensBetweenPushPop (
- char * q, /* address of pointer into primitive string */
- char * token, /* big enough buffer for extracted string */
- size_t token_max_length,
- char const * pop_string, /* stop when we see pop pop_string */
- Image *image,
- size_t * pExtractedLength /* if not null, length of extracted string returned */
- )
+ char * q, /* address of pointer into primitive string */
+ char * token, /* big enough buffer for extracted string */
+ size_t token_max_length,
+ char const * pop_string, /* stop when we see pop pop_string */
+ Image *image,
+ size_t * pExtractedLength /* if not null, length of extracted string returned */
+ )
{/*ExtractTokensBetweenPushPop*/
- char const * p;
- char * pAfterPopString = 0;
+ char const *p;
+ char const *pq;
+ char *pAfterPopString = 0;
char
- name[MaxTextExtent];
+ name[MaxTextExtent],
+ pop_message[MaxTextExtent];
size_t ExtractedLength = 0;
+ MagickBool found_pop = MagickFalse;
+
+ FormatString(pop_message,"push %.512s", pop_string);
/* next token is name associated with push/pop data */
+ pq = q;
MagickGetToken(q,&q,token,token_max_length);
- FormatString(name,"[%.1024s]",token);
+ if (pq == q)
+ {
+ /* failed to get a token */
+ if ( pExtractedLength )
+ *pExtractedLength = ExtractedLength;
+ return NULL;
+ }
+ FormatString(name,"[MVG:%.1024s]",token);
+ FormatString(pop_message,"push %.512s %.512s", pop_string, token);
/* search for "pop <pop_string>" */
for (p=q; *q != '\0'; )
break;
}
if (LocaleCompare(token,pop_string) == 0)
- break; /* found "pop <pop_string>" */
+ {
+ found_pop = MagickTrue;
+ break; /* found "pop <pop_string>" */
+ }
}
}
- /* sanity check on extracted string length */
- if ( q > (p+4U) )
+ if (found_pop)
{
- ExtractedLength = q - (p+4U);
- (void) strncpy(token,p,ExtractedLength);
+ /* sanity check on extracted string length */
+ if ( q > (p+4U) )
+ {
+ ExtractedLength = q - (p+4U);
+ (void) strncpy(token,p,ExtractedLength);
+ }
+ token[ExtractedLength] = '\0';
+ /* SetImageAttribute concatenates values! Delete with NULL */
+ (void) SetImageAttribute(image,name,NULL);
+ (void) SetImageAttribute(image,name,token);
+ if (pAfterPopString != NULL)
+ q = pAfterPopString; /* skip ID string after "pop" */
+ }
+ else
+ {
+ ThrowException(&image->exception,DrawError,UnbalancedPushPop,pop_message);
}
- token[ExtractedLength] = '\0';
- /* SetImageAttribute concatenates values! Delete with NULL */
- (void) SetImageAttribute(image,name,NULL);
- (void) SetImageAttribute(image,name,token);
- if (pAfterPopString != NULL)
- q = pAfterPopString; /* skip ID string after "pop" */
if ( pExtractedLength )
*pExtractedLength = ExtractedLength;
return(q);
*/
static
char * InsertAttributeIntoInputStream (
+ const char *keyword, /* MVG keyword for diagnostics/debugging */
char * q, /* address of pointer into primitive string*/
char ** pprimitive, /* ptr to ptr to primitive string buffer */
size_t * pprimitive_extent,
size_t RemainingLength;
size_t NeededLength;
+ if (*pStatus == MagickFail)
+ return MagickFail;
+
/* get attribute name, then get attribute value */
if (MagickGetToken(q,&q,*ptoken,*ptoken_max_length) < 1)
{
*pStatus = MagickFail;
return(q);
}
- FormatString(AttributeName,"[%.1024s]",*ptoken);
+ FormatString(AttributeName,"[MVG:%.1024s]",*ptoken);
attribute=GetImageAttribute(image,AttributeName);
if (attribute == (ImageAttribute *) NULL)
{
- /* the client specifies whether or not an undefined attributes is an error */
+ /* the client specifies whether or not an undefined attribute is an error */
if ( UndefAttrIsError )
- *pStatus = MagickFail;
+ {
+ char message[MaxTextExtent];
+ FormatString(message,"Primitive \"%s\" id \"%s\" not defined",keyword,*ptoken);
+ ThrowException(&image->exception,DrawError,InvalidPrimitiveArgument,message);
+ *pStatus = MagickFail;
+ }
return(q);
}
/* Need to realloc */
if (((*p_PIMgr->p_AllocCount > 0) && (have_memory == 0)) ||
((NeedAllocCount > 0) && (needed_memory == 0)) ||
- (status=AcquireMagickResource(MemoryResource,added_memory)) == MagickFail)
+ (status &= AcquireMagickResource(MemoryResource,added_memory)) == MagickFail)
{
ThrowException3(p_PIMgr->p_Exception,ResourceLimitError,MemoryAllocationFailed,UnableToDrawOnImage);
status = MagickFail;
return(MagickFail);
primitive_extent=strlen(primitive);
- /* SetImageAttribute concatenates values! Delete with NULL */
- (void) SetImageAttribute(image,"[MVG]",NULL);
- (void) SetImageAttribute(image,"[MVG]",primitive);
if (getenv("MAGICK_SKIP_RENDERING") != NULL)
{
MagickFreeMemory(primitive);
{
if (LocaleCompare("class",keyword) == 0)
{/*class*/
- q = InsertAttributeIntoInputStream(q,&primitive,&primitive_extent,&token,&token_max_length,image,
- &status,MagickFalse/*UndefAttrIsError*/);
+ q = InsertAttributeIntoInputStream(keyword,q,&primitive,&primitive_extent,
+ &token,&token_max_length,image,
+ &status,MagickFalse/*UndefAttrIsError*/);
break;
}/*class*/
if (LocaleCompare("clip-path",keyword) == 0)
MagickGetToken(q,&q,token,token_max_length);
if ( IsDrawInfoSVGCompliantClippingPath(graphic_context[n]) )
break; /* if drawing clip path, ignore changes to fill color */
- FormatString(pattern,"[%.1024s]",token);
+ FormatString(pattern,"[MVG:%.1024s]",token);
if (GetImageAttribute(image,pattern) != (ImageAttribute *) NULL)
(void) DrawPatternPath(image,draw_info,token,
&graphic_context[n]->fill_pattern);
break;
}
(void) CloneString(&graphic_context[n]->extra->composite_path,token);
- if (DrawCompositeMask(image,graphic_context[n],
- graphic_context[n]->extra->composite_path)
- == MagickFail)
- status=MagickFail;
+ status &= DrawCompositeMask(image,graphic_context[n],
+ graphic_context[n]->extra->composite_path);
break;
}
if (LocaleCompare("matte",keyword) == 0)
MagickGetToken(q,&q,token,token_max_length);
if (LocaleCompare("class",token) == 0) /* added "push class" to support "defs" */
{
- q = ExtractTokensBetweenPushPop(q,token,token_max_length,"class",image,0);
+ char *nq = ExtractTokensBetweenPushPop(q,token,token_max_length,"class",image,0);
+ if (nq != NULL)
+ q=nq;
+ else
+ status=MagickFail;
break;
}
if (LocaleCompare("clip-path",token) == 0)
into new function ExtractTokensBetweenPushPop().
*/
size_t ExtractedLength;
- q = ExtractTokensBetweenPushPop(q,token,token_max_length,"clip-path",image,&ExtractedLength); /* NULLED */
- if ( ExtractedLength == 0 )
+ char *nq = ExtractTokensBetweenPushPop(q,token,token_max_length,"clip-path",image,&ExtractedLength); /* NULLED */
+ if ( (ExtractedLength == 0) || (nq == NULL) )
status=MagickFail;
+ else
+ q=nq;
break;
}
if (LocaleCompare("gradient",token) == 0)
status=MagickFail;
break;
}
- FormatString(key,"[%.1024s]",name);
+ FormatString(key,"[MVG:%.1024s]",name);
/* SetImageAttribute concatenates values! Delete with NULL */
(void) SetImageAttribute(image,key,NULL);
(void) SetImageAttribute(image,key,token);
- FormatString(key,"[%.1024s-geometry]",name);
+ FormatString(key,"[MVG:%.1024s-geometry]",name);
FormatString(geometry,"%gx%g%+g%+g",
Max(AbsoluteValue(bounds.x2-bounds.x1+1),1),
Max(AbsoluteValue(bounds.y2-bounds.y1+1),1),
if (LocaleCompare("id",token) == 0) /* added "push id" (to support "defs") */
{
if ( defsPushCount > 0 )
- q = ExtractTokensBetweenPushPop(q,token,token_max_length,"id",image,0);
+ {
+ char *nq = ExtractTokensBetweenPushPop(q,token,token_max_length,"id",image,0);
+ if (nq == NULL)
+ status=MagickFail;
+ else
+ q=nq;
+ break;
+ }
else /* extract <identifier> from "push id <identifier>" */
- MagickGetToken(q,&q,token,token_max_length);
+ {
+ MagickGetToken(q,&q,token,token_max_length);
+ }
break;
}
if (LocaleCompare("mask",token) == 0) /* added mask */
{
size_t ExtractedLength;
- q = ExtractTokensBetweenPushPop(q,token,token_max_length,"mask",image,&ExtractedLength);
- if ( ExtractedLength == 0 )
+ char *nq = ExtractTokensBetweenPushPop(q,token,token_max_length,"mask",image,&ExtractedLength);
+ if ( (ExtractedLength == 0) || (nq == NULL) )
status=MagickFail;
+ else
+ q=nq;
break;
}
if (LocaleCompare("pattern",token) == 0)
break;
}
dval=ceil(ordinate-0.5);
- if (((dval < (double) LONG_MIN || dval > (double) LONG_MAX)) ||
+ if ((dval < DTOLONG_MIN) || (dval > DTOLONG_MAX) ||
(AcquireMagickResource(WidthResource,AbsoluteValue((magick_int64_t) dval)) != MagickPass))
{
char resource_str[MaxTextExtent];
break;
}
dval=ceil(ordinate-0.5);
- if ((dval < (double) LONG_MIN || dval > (double) LONG_MAX) ||
+ if ((dval < DTOLONG_MIN) || (dval > DTOLONG_MAX) ||
(AcquireMagickResource(WidthResource,AbsoluteValue((magick_int64_t) dval)) != MagickPass))
{
char resource_str[MaxTextExtent];
break;
}
dval=floor(ordinate+0.5);
- if ((dval > (double) LONG_MAX) ||
+ if ((dval > DTOLONG_MAX) ||
(AcquireMagickResource(WidthResource,(magick_int64_t) dval) != MagickPass))
{
char resource_str[MaxTextExtent];
break;
}
dval=floor(ordinate+0.5);
- if ((dval > (double) LONG_MAX) ||
+ if ((dval > DTOLONG_MAX) ||
(AcquireMagickResource(WidthResource,(magick_int64_t) dval) != MagickPass))
{
char resource_str[MaxTextExtent];
status=MagickFail;
break;
}
+ if ((bounds.width == 0) || (bounds.height == 0))
+ {
+ char resource_str[MaxTextExtent];
+ FormatString(resource_str,"pattern dimensions %lux%lu", bounds.width,bounds.height);
+ ThrowException(&image->exception,DrawError,
+ InvalidPrimitiveArgument,resource_str);
+ status=MagickFail;
+ break;
+ }
for (p=q; *q != '\0'; )
{
MagickGetToken(q,&q,token,token_max_length);
}
(void) strncpy(token,p,q-p-4);
token[q-p-4]='\0';
- FormatString(key,"[%.1024s]",name);
+ FormatString(key,"[MVG:%.1024s]",name);
/* SetImageAttribute concatenates values! Delete with NULL */
(void) SetImageAttribute(image,key,NULL);
(void) SetImageAttribute(image,key,token);
- FormatString(key,"[%.1024s-geometry]",name);
+ FormatString(key,"[MVG:%.1024s-geometry]",name);
FormatString(geometry,"%lux%lu%+ld%+ld",bounds.width,
bounds.height,bounds.x,bounds.y);
/* SetImageAttribute concatenates values! Delete with NULL */
MagickGetToken(q,&q,token,token_max_length);
if ( IsDrawInfoSVGCompliantClippingPath(graphic_context[n]) )
break; /* if drawing clip path, ignore changes to stroke color */
- FormatString(pattern,"[%.1024s]",token);
+ FormatString(pattern,"[MVG:%.1024s]",token);
if (GetImageAttribute(image,pattern) != (ImageAttribute *) NULL)
- (void) DrawPatternPath(image,draw_info,token,
- &graphic_context[n]->stroke_pattern);
+ {
+ if ((status &= DrawPatternPath(image,draw_info,token,
+ &graphic_context[n]->stroke_pattern)) == MagickFail)
+ break;
+ }
else
{/*stroke color, not pattern*/
double value;
MagickGetToken(q,&q,token,token_max_length);
status &= MagickAtoFChk(token,&value);
+ if (status == MagickFail)
+ break;
/* value may be specified using "em" or "ex" units */
if (LocaleNCompare(q,"em",2) == 0)
{
double value;
MagickGetToken(q,&q,token,token_max_length);
status &= MagickAtoFChk(token,&value);
+ if (status == MagickFail)
+ break;
/* value may be specified using "em" or "ex" units */
if (LocaleNCompare(q,"em",2) == 0)
{
{
if (LocaleCompare("use",keyword) == 0)
{
- q = InsertAttributeIntoInputStream(q,&primitive,&primitive_extent,&token,&token_max_length,image,
- &status,MagickTrue/*UndefAttrIsError*/);
+ q = InsertAttributeIntoInputStream(keyword,q,&primitive,&primitive_extent,
+ &token,&token_max_length,image,
+ &status,MagickTrue/*UndefAttrIsError*/);
break;
}
status=MagickFail;
break;
MagickGetToken(q,&q,token,token_max_length);
status &= MagickAtoFChk(token,&point.x);
+ if (status == MagickFail)
+ break;
MagickGetToken(q,&q,token,token_max_length);
if (*token == ',')
MagickGetToken(q,&q,token,token_max_length);
status &= MagickAtoFChk(token,&point.y);
+ if (status == MagickFail)
+ break;
MagickGetToken(q,(char **) NULL,token,token_max_length);
if (*token == ',')
MagickGetToken(q,&q,token,token_max_length);
if (i < number_points)
continue;
/* Array is full; double the array size */
- if ((status=PrimitiveInfoRealloc(&PIMgr,number_points)) == MagickFail)
+ if ((status &= PrimitiveInfoRealloc(&PIMgr,number_points)) != MagickPass)
break;
}
if (status == MagickFail)
status=MagickFail;
break;
}
- if ((status=TracePoint(primitive_info+j,primitive_info[j].point)) == MagickFail)
+ if ((status &= TracePoint(primitive_info+j,primitive_info[j].point)) == MagickFail)
break;
PIMgr.StoreStartingAt=i=(long) (j+primitive_info[j].coordinates);
break;
status=MagickFail;
break;
}
- if ((status=TraceLine(primitive_info+j,primitive_info[j].point,
- primitive_info[j+1].point)) == MagickFail)
+ if ((status &= TraceLine(primitive_info+j,primitive_info[j].point,
+ primitive_info[j+1].point)) == MagickFail)
break;
PIMgr.StoreStartingAt=i=(long) (j+primitive_info[j].coordinates);
break;
status=MagickFail;
break;
}
- if ((status=TraceRectangle(primitive_info+j,
- /*start*/primitive_info[j].point,
- /*end*/primitive_info[j+1].point)) == MagickFail)
+ if ((status &= TraceRectangle(primitive_info+j,
+ /*start*/primitive_info[j].point,
+ /*end*/primitive_info[j+1].point)) == MagickFail)
break;
PIMgr.StoreStartingAt=i=(long) (j+primitive_info[j].coordinates);
break;
break;
}
PIMgr.StoreStartingAt=j;
- if ((status=TraceRoundRectangle(&PIMgr,
- /*start*/primitive_info[j].point,
- /*end*/primitive_info[j+1].point,
- /*arc*/primitive_info[j+2].point)) == MagickFail)
+ if ((status &= TraceRoundRectangle(&PIMgr,
+ /*start*/primitive_info[j].point,
+ /*end*/primitive_info[j+1].point,
+ /*arc*/primitive_info[j+2].point)) == MagickFail)
break;
PIMgr.StoreStartingAt=i=(long) (j+primitive_info[j].coordinates);
break;
break;
}
PIMgr.StoreStartingAt=j;
- if ((status=TraceArc(&PIMgr,primitive_info[j].point,
- primitive_info[j+1].point,primitive_info[j+2].point)) == MagickFail)
+ if ((status &= TraceArc(&PIMgr,primitive_info[j].point,
+ primitive_info[j+1].point,primitive_info[j+2].point)) == MagickFail)
break;
PIMgr.StoreStartingAt=i=(long) (j+primitive_info[j].coordinates);
break;
break;
}
PIMgr.StoreStartingAt=j;
- if ((status=TraceEllipse(&PIMgr,
- /*start*/primitive_info[j].point, /*centerX,centerY*/
- /*stop*/primitive_info[j+1].point, /*radiusX,radiusY*/
- /*degrees*/primitive_info[j+2].point)) == MagickFail) /*arcStart,arcEnd*/
+ if ((status &= TraceEllipse(&PIMgr,
+ /*start*/primitive_info[j].point, /*centerX,centerY*/
+ /*stop*/primitive_info[j+1].point, /*radiusX,radiusY*/
+ /*degrees*/primitive_info[j+2].point)) == MagickFail) /*arcStart,arcEnd*/
break;
PIMgr.StoreStartingAt=i=(long) (j+primitive_info[j].coordinates);
break;
break;
}
PIMgr.StoreStartingAt=j;
- if ((status=TraceCircle(&PIMgr,primitive_info[j].point,
- primitive_info[j+1].point)) == MagickFail)
+ if ((status &= TraceCircle(&PIMgr,primitive_info[j].point,
+ primitive_info[j+1].point)) == MagickFail)
break;
PIMgr.StoreStartingAt=i=(long) (j+primitive_info[j].coordinates);
break;
*image_info;
MagickPassFail
- status;
+ status = MagickPass;
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
assert(draw_info != (const DrawInfo *) NULL);
assert(name != (const char *) NULL);
- FormatString(attribute,"[%.1024s]",name);
+ FormatString(attribute,"[MVG:%.1024s]",name);
path=GetImageAttribute(image,attribute);
if (path == (ImageAttribute *) NULL)
return(MagickFail);
- FormatString(attribute,"[%.1024s-geometry]",name);
+ FormatString(attribute,"[MVG:%.1024s-geometry]",name);
geometry=GetImageAttribute(image,attribute);
if (geometry == (ImageAttribute *) NULL)
return(MagickFail);
DestroyImage(clone_info->stroke_pattern);
clone_info->stroke_pattern=(Image *) NULL;
(void) CloneString(&clone_info->primitive,path->value);
- status=DrawImage(*pattern,clone_info);
+ if ((status &= DrawImage(*pattern,clone_info)) == MagickFail)
+ {
+ /* Copy exception into base image */
+ if ((*pattern)->exception.severity > image->exception.severity)
+ CopyException(&image->exception, &(*pattern)->exception);
+ }
DestroyDrawInfo(clone_info);
(void) LogMagickEvent(RenderEvent,GetMagickModule(),"end pattern-path");
return(status);
return(subpath_opacity);
}
+static PolygonInfo* ClonePolygonInfo(const PolygonInfo* orig_polygon_info, ExceptionInfo *exception)
+{
+ PolygonInfo
+ *polygon_info = (PolygonInfo *) NULL;
+
+ size_t
+ edge;
+
+ if (orig_polygon_info == (PolygonInfo *) NULL)
+ return polygon_info;
+
+ if ((polygon_info=MagickAllocateMemory(PolygonInfo *,sizeof(PolygonInfo))) == (PolygonInfo *) NULL)
+ {
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
+ return polygon_info;
+ }
+
+ polygon_info->number_edges=0;
+
+ if ((polygon_info->edges=
+ MagickAllocateResourceLimitedArray(EdgeInfo *,
+ orig_polygon_info->number_edges,
+ sizeof(EdgeInfo))) == (EdgeInfo *) NULL)
+ {
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
+ DestroyPolygonInfo(polygon_info);
+ polygon_info=(PolygonInfo *) NULL;
+ return polygon_info;
+ }
+
+ (void) memcpy(polygon_info->edges,orig_polygon_info->edges,
+ orig_polygon_info->number_edges*sizeof(EdgeInfo));
+
+ for (edge = 0; edge < orig_polygon_info->number_edges; edge++)
+ polygon_info->edges[edge].points = (PointInfo *) NULL;
+
+ polygon_info->number_edges=orig_polygon_info->number_edges;
+ for (edge = 0; edge < polygon_info->number_edges; edge++)
+ {
+ if ((polygon_info->edges[edge].points=
+ MagickAllocateResourceLimitedArray(PointInfo *,
+ polygon_info->edges[edge].number_points,
+ sizeof(PointInfo))) == (PointInfo *) NULL)
+ {
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
+ DestroyPolygonInfo(polygon_info);
+ polygon_info=(PolygonInfo *) NULL;
+ return polygon_info;
+ }
+
+ (void) memcpy(polygon_info->edges[edge].points,orig_polygon_info->edges[edge].points,
+ polygon_info->edges[edge].number_points*sizeof(PointInfo));
+ }
+
+ return polygon_info;
+}
+
static MagickPassFail
DrawPolygonPrimitive(Image *image,const DrawInfo *draw_info,
const PrimitiveInfo *primitive_info)
ThreadViewDataSet
* restrict polygon_set = (ThreadViewDataSet *) NULL;
+ magick_uint64_t
+ total_pixels;
+
MagickPassFail
status = MagickPass;
+ int
+ max_threads,
+ num_threads;
+
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
assert(draw_info != (DrawInfo *) NULL);
if (primitive_info->coordinates <= 1) /*single point polygons have zero area; don't draw*/
return(MagickPass);
+ /*
+ Determine the number of threads to use.
+ */
+ total_pixels = ((magick_uint64_t) image->rows * image->columns);
+
+ max_threads=omp_get_max_threads();
+ num_threads=max_threads;
+
+ if (total_pixels < 250000UL)
+ num_threads=Min(num_threads,1);
+ else if (total_pixels < 1000000UL)
+ num_threads=Min(num_threads,4);
+ else if (total_pixels < 9000000UL)
+ num_threads=Min(num_threads,8);
+
+ /* fprintf(stderr,"Using %d threads\n", num_threads); */
+
{
/*
Allocate and initialize thread-specific polygon sets.
+
+ There are thread-specific sets because GetPixelOpacity modifies
+ Edges (via DestroyEdge() and modifies Edge scanline and
+ highwater)
*/
PathInfo
* restrict path_info;
index;
path_info=(PathInfo *) NULL;
- if ((path_info=ConvertPrimitiveToPath(draw_info,primitive_info))
+ if ((path_info=ConvertPrimitiveToPath(draw_info,primitive_info,&image->exception))
!= (PathInfo *) NULL)
{
if ((polygon_set=AllocateThreadViewDataSet(DestroyPolygonInfo,image,
&image->exception))
!= (ThreadViewDataSet *) NULL)
{
+ unsigned int
+ allocated_views;
+
+ PolygonInfo
+ *polygon_info;
+
+ allocated_views=GetThreadViewDataSetAllocatedViews(polygon_set);
+ if ((int) allocated_views > num_threads)
+ allocated_views=num_threads;
+
/*
Assign polygon for each worker thread.
+
+ Only the first polygon set needs to be from
+ ConvertPathToPolygon() since they start off the same.
+ Otherwise an optimized clone can be used instead.
+
+ To that end, we have now written ClonePolygonInfo()
+
+ FIXME: A better solution would be to figure out how
+ threads can share common data while adding minimal
+ locking. The current algorithms do unfriendly things
+ such as compacting the structure using memmove().
*/
- for (index=0; index < GetThreadViewDataSetAllocatedViews(polygon_set); index++)
- AssignThreadViewData(polygon_set,index,(void *) ConvertPathToPolygon(path_info));
+ polygon_info=ConvertPathToPolygon(path_info,&image->exception);
+ for (index=0; index < allocated_views; index++)
+ AssignThreadViewData(polygon_set,index,index == 0 ? (void *) polygon_info :
+ ClonePolygonInfo(polygon_info,&image->exception));
/*
Verify worker thread allocations.
*/
- for (index=0; index < GetThreadViewDataSetAllocatedViews(polygon_set); index++)
+ for (index=0; index < allocated_views; index++)
if (AccessThreadViewDataById(polygon_set,index) == (void *) NULL)
{
DestroyThreadViewDataSet(polygon_set);
}
}
- MagickFreeMemory(path_info);
+ MagickFreeResourceLimitedMemory(path_info);
}
if (polygon_set == (ThreadViewDataSet *) NULL)
- return MagickFail;
+ {
+ ThrowException3(&image->exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
+ return MagickFail;
+ }
}
/*
x_stop=(long) floor(bounds.x2+0.5); /* rounds n.5 to n+1 */
y_start=(long) ceil(bounds.y1-0.5);
y_stop=(long) floor(bounds.y2+0.5);
+
#if defined(HAVE_OPENMP)
# if defined(TUNE_OPENMP)
# pragma omp parallel for schedule(runtime) shared(status)
# else
-# pragma omp parallel for schedule(guided) shared(status)
+# pragma omp parallel for num_threads(2) schedule(guided) shared(status)
# endif
#endif
for (y=y_start; y <= y_stop; y++)
fill=(primitive_info->method == FillToBorderMethod) ||
(primitive_info->method == FloodfillMethod);
- x_start=(long) ceil(bounds.x1-0.5); /* rounds n.5 to n */
- x_stop=(long) floor(bounds.x2+0.5); /* rounds n.5 to n+1 */
- y_start=(long) ceil(bounds.y1-0.5);
- y_stop=(long) floor(bounds.y2+0.5);
+ x_start=(long) ceil(bounds.x1-0.5); /* FIXME: validate */ /* rounds n.5 to n */
+ x_stop=(long) floor(bounds.x2+0.5); /* FIXME: validate */ /* rounds n.5 to n+1 */
+ y_start=(long) ceil(bounds.y1-0.5); /* FIXME: validate */
+ y_stop=(long) floor(bounds.y2+0.5); /* FIXME: validate */
+
#if 1
#if defined(HAVE_OPENMP)
# if defined(TUNE_OPENMP)
# pragma omp parallel for schedule(runtime) shared(status)
# else
-# pragma omp parallel for schedule(static) shared(status)
+# pragma omp parallel for num_threads(num_threads) schedule(dynamic) shared(status)
# endif
#endif
#endif
Fill and/or stroke. The fill_opacity returned by GetPixelOpacity()
handles partial pixel coverage at the edge of a polygon, where
0==no coverage and 1==full coverage
+
+ GetPixelOpacity() modifies some properties referenced by polygon_info.
*/
fill_opacity=GetPixelOpacity(polygon_info,mid,fill,
draw_info->fill_rule,
if (!SyncImagePixelsEx(image,&image->exception))
thread_status=MagickFail;
- if (thread_status == MagickFail)
- {
- status=thread_status;
+ } /* if (thread_status != MagickFail) */
+ if (thread_status == MagickFail)
+ {
+ status=thread_status;
#if defined(HAVE_OPENMP)
# pragma omp flush (status)
#endif
- }
}
- }
+ } /* for (y=y_start */
}
(void) LogMagickEvent(RenderEvent,GetMagickModule()," end draw-polygon");
return status;
}
dvalue=ceil(primitive_info->point.x-0.5);
- if (MAGICK_ISNAN(dvalue) || ((dvalue < (double) LONG_MIN)) || (dvalue > (double) LONG_MAX))
+ if (MAGICK_ISNAN(dvalue) || ((dvalue < DTOLONG_MIN)) || (dvalue > DTOLONG_MAX))
{
char double_str[18];
FormatString(double_str,"%g",dvalue);
}
x=(long) dvalue;
dvalue=ceil(primitive_info->point.y-0.5);
- if (MAGICK_ISNAN(dvalue) || ((dvalue < (double) LONG_MIN)) || (dvalue > (double) LONG_MAX))
+ if (MAGICK_ISNAN(dvalue) || ((dvalue < DTOLONG_MIN)) || (dvalue > DTOLONG_MAX))
{
char double_str[18];
FormatString(double_str,"%g",dvalue);
FIXME: AnnotateImage sometimes returns error status here
without throwing exception and under conditions which should
be ok when rendering (e.g. off-canvas drawing).
+
+ AnnotateImage() recurses back to DrawImage().
+ DrawImage--> DrawPrimitive() --> AnnotateImage() --> DrawImage
*/
status&=AnnotateImage(image,clone_info);
DestroyDrawInfo(clone_info);
if (primitive_info->text == (char *) NULL)
break;
clone_info=CloneImageInfo((ImageInfo *) NULL);
+ clone_info->subimage=0;
+ clone_info->subrange=1;
if (LocaleNCompare(primitive_info->text,"data:",5) == 0)
- composite_image=ReadInlineImage(clone_info,primitive_info->text,
- &image->exception);
+ {
+ composite_image=ReadInlineImage(clone_info,primitive_info->text,
+ &image->exception);
+ }
else
{
/*
FormatString(geometry,"%gx%g!",primitive_info[1].point.x,
primitive_info[1].point.y);
handler=SetMonitorHandler((MonitorHandler) NULL);
- TransformImage(&composite_image,(char *) NULL,geometry);
+ status&=TransformImage(&composite_image,(char *) NULL,geometry);
(void) SetMonitorHandler(handler);
+ if (status == MagickFail)
+ {
+ DestroyImageList(composite_image);
+ break;
+ }
}
if (!composite_image->matte)
- SetImageOpacity(composite_image,OpaqueOpacity);
+ status&=SetImageOpacity(composite_image,OpaqueOpacity);
if (draw_info->opacity != OpaqueOpacity)
- SetImageOpacity(composite_image,draw_info->opacity);
+ status&=SetImageOpacity(composite_image,draw_info->opacity);
affine=draw_info->affine;
affine.tx=x;
affine.ty=y;
status&=DrawAffineImage(image,composite_image,&affine);
- DestroyImage(composite_image);
+ DestroyImageList(composite_image);
break;
}
default:
significantly different from that for the first path, so my suspicion is that
that's where the bug is. However, it could also be in DrawPolygonPrimitive().
*/
- stroke_polygon=TraceStrokePolygon(image,draw_info,p);
+ stroke_polygon=TraceStrokePolygon(image,draw_info,p,&image->exception);
if (stroke_polygon == (PrimitiveInfo *) NULL)
{
status=MagickFail;
break;
}
status&=DrawPolygonPrimitive(image,clone_info,stroke_polygon);
- MagickFreeMemory(stroke_polygon);
+ MagickFreeResourceLimitedMemory(stroke_polygon);
if (status == MagickFail)
break;
q=p+p->coordinates-1;
}
primitive_info = *pp_PrimitiveInfo + p_PIMgr->StoreStartingAt;
- coefficients=MagickAllocateArray(double *,number_coordinates,sizeof(double));
+ coefficients=MagickAllocateResourceLimitedArray(double *,number_coordinates,sizeof(double));
if (coefficients == (double *) NULL)
{
ThrowException3(p_PIMgr->p_Exception,ResourceLimitError,MemoryAllocationFailed,
status=MagickFail;
goto trace_bezier_done;
}
- points=MagickAllocateArray(PointInfo *,control_points,sizeof(PointInfo));
+ points=MagickAllocateResourceLimitedArray(PointInfo *,control_points,sizeof(PointInfo));
if (points == (PointInfo *) NULL)
{
ThrowException3(p_PIMgr->p_Exception,ResourceLimitError,MemoryAllocationFailed,
p--;
}
trace_bezier_done:;
- MagickFreeMemory(points);
- MagickFreeMemory(coefficients);
+ MagickFreeResourceLimitedMemory(points);
+ MagickFreeResourceLimitedMemory(coefficients);
return status;
}
static PrimitiveInfo *
TraceStrokePolygon(const Image *image, /* added Image* param so DrawInfo::stroke_width can be clamped */
const DrawInfo *draw_info,
- const PrimitiveInfo *primitive_info)
+ const PrimitiveInfo *primitive_info,
+ ExceptionInfo *exception)
{
typedef struct _LineSegment
{
/* moved path_p and path_q mem alloc to later since we might not need them */
polygon_primitive=
- MagickAllocateArray(PrimitiveInfo *,((size_t) number_vertices+2),
- sizeof(PrimitiveInfo));
+ MagickAllocateResourceLimitedArray(PrimitiveInfo *,
+ ((size_t) number_vertices+2),
+ sizeof(PrimitiveInfo));
if (polygon_primitive == (PrimitiveInfo *) NULL)
{
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
return((PrimitiveInfo *) NULL);
}
(void) memcpy(polygon_primitive,primitive_info,number_vertices*
if ( !DoStroke )
{/*skip stroking*/
/* create polygon with one element and 0 coords; DrawPolygonPrimitive() will ignore it */
- stroke_polygon = MagickAllocateArray(PrimitiveInfo *,1,sizeof(PrimitiveInfo));
- stroke_polygon[0] = polygon_primitive[0];
- stroke_polygon[0].coordinates = 0;
- MagickFreeMemory(polygon_primitive);
+ stroke_polygon = MagickAllocateResourceLimitedArray(PrimitiveInfo *,
+ 1,sizeof(PrimitiveInfo));
+ if (stroke_polygon == (PrimitiveInfo *) NULL)
+ {
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
+ }
+ else
+ {
+ stroke_polygon[0] = polygon_primitive[0];
+ stroke_polygon[0].coordinates = 0;
+ }
+ MagickFreeResourceLimitedMemory(polygon_primitive);
return(stroke_polygon);
}/*skip stroking*/
n=number_vertices-1;
/*
Allocate paths.
*/
- path_p=MagickAllocateArray(PointInfo *,(size_t) max_strokes_p+max_strokes_extra,sizeof(PointInfo));
+ path_p=MagickAllocateResourceLimitedArray(PointInfo *,
+ (size_t) max_strokes_p+max_strokes_extra,
+ sizeof(PointInfo));
if (path_p == (PointInfo *) NULL)
{
- MagickFreeMemory(polygon_primitive);
+ MagickFreeResourceLimitedMemory(polygon_primitive);
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
return((PrimitiveInfo *) NULL);
}
- path_q=MagickAllocateArray(PointInfo *,(size_t) max_strokes_q+max_strokes_extra,sizeof(PointInfo));
+ path_q=MagickAllocateResourceLimitedArray(PointInfo *,
+ (size_t) max_strokes_q+max_strokes_extra,
+ sizeof(PointInfo));
if (path_q == (PointInfo *) NULL)
{
- MagickFreeMemory(path_p);
- MagickFreeMemory(polygon_primitive);
+ MagickFreeResourceLimitedMemory(path_p);
+ MagickFreeResourceLimitedMemory(polygon_primitive);
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
return((PrimitiveInfo *) NULL);
}
}
if (p >= max_strokes_p)
{/*p pointing into extra; time to realloc*/
+ PointInfo *new_path_p;
max_strokes_p+=max_strokes_extra;
- MagickReallocMemory(PointInfo *,path_p,MagickArraySize((size_t) max_strokes_p+max_strokes_extra,sizeof(PointInfo)));
- if (path_p == (PointInfo *) NULL)
- {
- MagickFreeMemory(path_p);
- MagickFreeMemory(path_q);
- MagickFreeMemory(polygon_primitive);
+ new_path_p=MagickReallocateResourceLimitedArray(PointInfo *,path_p,
+ (size_t) max_strokes_p+
+ max_strokes_extra,
+ sizeof(PointInfo));
+ if (new_path_p == (PointInfo *) NULL)
+ {
+ MagickFreeResourceLimitedMemory(path_p);
+ MagickFreeResourceLimitedMemory(path_q);
+ MagickFreeResourceLimitedMemory(polygon_primitive);
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
return((PrimitiveInfo *) NULL);
}
+ path_p=new_path_p;
}/*p pointing into extra; time to realloc*/
if (q >= max_strokes_q)
{/*q pointing into extra; time to realloc*/
+ PointInfo *new_path_q;
max_strokes_q+=max_strokes_extra;
- MagickReallocMemory(PointInfo *,path_q,MagickArraySize((size_t) max_strokes_q+max_strokes_extra,sizeof(PointInfo)));
- if (path_q == (PointInfo *) NULL)
+ new_path_q=MagickReallocateResourceLimitedArray(PointInfo *,path_q,
+ (size_t) max_strokes_q+max_strokes_extra,
+ sizeof(PointInfo));
+ if (new_path_q == (PointInfo *) NULL)
{
- MagickFreeMemory(path_p);
- MagickFreeMemory(path_q);
- MagickFreeMemory(polygon_primitive);
+ MagickFreeResourceLimitedMemory(path_p);
+ MagickFreeResourceLimitedMemory(path_q);
+ MagickFreeResourceLimitedMemory(polygon_primitive);
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
return((PrimitiveInfo *) NULL);
}
+ path_q=new_path_q;
}/*q pointing into extra; time to realloc*/
dot_product=dx.q*dy.p-dx.p*dy.q;
if (dot_product <= 0.0)
/* in case arc_segments is big */
if ( (q+arc_segments) >= max_strokes_q )
{/*q+arc_segments will point into extra; time to realloc*/
+ PointInfo *new_path_q;
max_strokes_q+=arc_segments+max_strokes_extra;
- MagickReallocMemory(PointInfo *,path_q,MagickArraySize((size_t) max_strokes_q+max_strokes_extra,sizeof(PointInfo)));
- if (path_q == (PointInfo *) NULL)
+ new_path_q=MagickReallocateResourceLimitedArray(PointInfo *,path_q,
+ (size_t) max_strokes_q+max_strokes_extra,
+ sizeof(PointInfo));
+ if (new_path_q == (PointInfo *) NULL)
{
- MagickFreeMemory(path_p);
- MagickFreeMemory(path_q);
- MagickFreeMemory(polygon_primitive);
+ MagickFreeResourceLimitedMemory(path_p);
+ MagickFreeResourceLimitedMemory(path_q);
+ MagickFreeResourceLimitedMemory(polygon_primitive);
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
return((PrimitiveInfo *) NULL);
}
+ path_q=new_path_q;
}/*q+arc_segments will point into extra; time to realloc*/
path_q[q].x=box_q[1].x;
path_q[q].y=box_q[1].y;
/* in case arc_segments is big */
if ( (p+arc_segments) >= max_strokes_p )
{/*p+arc_segments will point into extra; time to realloc*/
+ PointInfo *new_path_p;
max_strokes_p+=arc_segments+max_strokes_extra;
- MagickReallocMemory(PointInfo *,path_p,MagickArraySize((size_t) max_strokes_p+max_strokes_extra,sizeof(PointInfo)));
- if (path_p == (PointInfo *) NULL)
+ new_path_p=MagickReallocateResourceLimitedArray(PointInfo *,path_p,
+ (size_t) max_strokes_p+max_strokes_extra,
+ sizeof(PointInfo));
+ if (new_path_p == (PointInfo *) NULL)
{
- MagickFreeMemory(path_p);
- MagickFreeMemory(path_q);
- MagickFreeMemory(polygon_primitive);
+ MagickFreeResourceLimitedMemory(path_p);
+ MagickFreeResourceLimitedMemory(path_q);
+ MagickFreeResourceLimitedMemory(polygon_primitive);
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
return((PrimitiveInfo *) NULL);
}
+ path_p=new_path_p;
}/*p+arc_segments will point into extra; time to realloc*/
path_p[p++]=box_p[1];
for (j=1; j < arc_segments; j++)
Trace stroked polygon.
*/
stroke_polygon=
- MagickAllocateArray(PrimitiveInfo *,MagickArraySize((size_t) p+q+2,(size_t) closed_path+2),
+ MagickAllocateResourceLimitedArray(PrimitiveInfo *,
+ MagickArraySize((size_t) p+q+2,(size_t) closed_path+2),
sizeof(PrimitiveInfo));
- if (stroke_polygon != (PrimitiveInfo *) NULL)
+ if (stroke_polygon == (PrimitiveInfo *) NULL)
+ {
+ ThrowException3(exception,ResourceLimitError,MemoryAllocationFailed,
+ UnableToDrawOnImage);
+ goto trace_stroke_polygon_done;
+ }
+
+ for (i=0; i < (long) p; i++)
+ {
+ stroke_polygon[i]=polygon_primitive[0];
+ stroke_polygon[i].point=path_p[i];
+ }
+ if (closed_path)
{
- for (i=0; i < (long) p; i++)
- {
- stroke_polygon[i]=polygon_primitive[0];
- stroke_polygon[i].point=path_p[i];
- }
- if (closed_path)
- {
- stroke_polygon[i]=polygon_primitive[0];
- stroke_polygon[i].point=stroke_polygon[0].point;
- i++;
- }
- for ( ; i < (long) (p+q+closed_path); i++)
- {
- stroke_polygon[i]=polygon_primitive[0];
- stroke_polygon[i].point=path_q[p+q+closed_path-(i+1)];
- }
- if (closed_path)
- {
- stroke_polygon[i]=polygon_primitive[0];
- stroke_polygon[i].point=stroke_polygon[p+closed_path].point;
- i++;
- }
stroke_polygon[i]=polygon_primitive[0];
stroke_polygon[i].point=stroke_polygon[0].point;
i++;
- stroke_polygon[i].primitive=UndefinedPrimitive;
- stroke_polygon[0].coordinates=(size_t) p+q+(size_t) 2*closed_path+1;
}
+ for ( ; i < (long) (p+q+closed_path); i++)
+ {
+ stroke_polygon[i]=polygon_primitive[0];
+ stroke_polygon[i].point=path_q[p+q+closed_path-(i+1)];
+ }
+ if (closed_path)
+ {
+ stroke_polygon[i]=polygon_primitive[0];
+ stroke_polygon[i].point=stroke_polygon[p+closed_path].point;
+ i++;
+ }
+ stroke_polygon[i]=polygon_primitive[0];
+ stroke_polygon[i].point=stroke_polygon[0].point;
+ i++;
+ stroke_polygon[i].primitive=UndefinedPrimitive;
+ stroke_polygon[0].coordinates=(size_t) p+q+(size_t) 2*closed_path+1;
trace_stroke_polygon_done:;
- MagickFreeMemory(path_p);
- MagickFreeMemory(path_q);
- MagickFreeMemory(polygon_primitive);
+ MagickFreeResourceLimitedMemory(path_p);
+ MagickFreeResourceLimitedMemory(path_q);
+ MagickFreeResourceLimitedMemory(polygon_primitive);
return(stroke_polygon);
}
if (IsEventLogging())
(void) LogMagickEvent(TransformEvent,GetMagickModule(),
- "Enter HorizontalFilter() ...");
+ "Horizontal Filter: %lux%lu => %lux%lu "
+ "(x_factor %g, blur %g, span %"MAGICK_SIZE_T_F"u) ...",
+ source->columns, source->rows,
+ destination->columns, destination->rows,
+ x_factor, blur, (MAGICK_SIZE_T) span);
quantum = *quantum_p;
if (IsEventLogging())
(void) LogMagickEvent(TransformEvent,GetMagickModule(),
- "%s exit HorizontalFilter()",
+ "%s exit Horizontal Filter",
(status == MagickFail ? "Error" : "Normal"));
*quantum_p = quantum;
if (IsEventLogging())
(void) LogMagickEvent(TransformEvent,GetMagickModule(),
- "Enter VerticalFilter() ...");
+ "Vertical Filter: %lux%lu => %lux%lu "
+ "(y_factor %g, blur %g, span %"MAGICK_SIZE_T_F"u) ...",
+ source->columns, source->rows,
+ destination->columns, destination->rows,
+ y_factor, blur, (MAGICK_SIZE_T) span);
quantum = *quantum_p;
if (IsEventLogging())
(void) LogMagickEvent(TransformEvent,GetMagickModule(),
- "%s exit VerticalFilter()",
+ "%s exit Vertical Filter",
(status == MagickFail ? "Error" : "Normal"));
*quantum_p = quantum;
else
source_image=CloneImage(resize_image,image->columns,rows,True,exception);
if (source_image == (Image *) NULL)
- return ((Image *) NULL);
+ {
+ DestroyImage(resize_image);
+ return ((Image *) NULL);
+ }
/*
Allocate filter contribution info.
*/
status=MagickPass;
quantum=0;
+ if (IsEventLogging())
+ (void) LogMagickEvent(TransformEvent,GetMagickModule(),
+ "Resize filter order: %s",
+ order ? "Horizontal/Vertical" : "Vertical/Horizontal");
if (order)
{
span=(size_t) source_image->columns+resize_image->rows;
%
% SampleImage() scales an image to the desired dimensions with pixel
% sampling. Unlike other scaling methods, this method does not introduce
-% any additional color into the scaled image.
+% any additional color into the scaled image. SampleImage() is extremely
+% fast and may be used where speed is most important.
%
% The format of the SampleImage method is:
%
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% ScaleImage() changes the size of an image to the given dimensions.
+% ScaleImage() changes the size of an image to the specified dimensions.
+% This method is reasonably fast but it is not currently multi-threaded
+% and does not support image filters. The quality of the resized image
+% is sufficient for most purposes.
%
% The format of the ScaleImage method is:
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% ThumbnailImage() changes the size of an image to the given dimensions.
-% This method was designed by Bob Friesenhahn as a low cost thumbnail
-% generator.
+% This method was designed as a low cost thumbnail generator.
+% ThumbnailImage() is typically very fast but an attempt is made to improve
+% quality by first using a simple sampling algorithm for part of the
+% reduction, and then a filtering algorithm to produce the final image.
%
% The format of the ThumbnailImage method is:
%
ExtentPacket
blue = { 0.0, 0, 0, 0},
green = { 0.0, 0, 0, 0},
- red = { 0.0, 0, 0, 0};
+ red = { 0.0, 0, 0, 0};
- unsigned long
- count;
-
- long
- y;
-
- PixelPacket
- * restrict colormap=0;
-
- register const PixelPacket
- * restrict p;
-
- register double
- * restrict squares;
+ unsigned long
+ count;
- register IndexPacket
- * restrict indexes;
+ long
+ y;
- register long
- i,
- x;
+ register double
+ * restrict squares;
- register PixelPacket
- * restrict q;
+ register long
+ i,
+ x;
- unsigned long
- number_clusters;
+ unsigned long
+ number_clusters;
- unsigned long
- row_count=0;
+ unsigned long
+ row_count=0;
- MagickBool
- monitor_active;
+ MagickBool
+ monitor_active;
- MagickPassFail
- status=MagickPass;
+ MagickPassFail
+ status=MagickPass;
- monitor_active=MagickMonitorActive();
+ monitor_active=MagickMonitorActive();
- /*
- Form clusters.
- */
- cluster=(Cluster *) NULL;
- head=(Cluster *) NULL;
- red.index=0;
- while (DefineRegion(extrema[Red],&red))
+ /*
+ Form clusters.
+ */
+ cluster=(Cluster *) NULL;
+ head=(Cluster *) NULL;
+ red.index=0;
+ while (DefineRegion(extrema[Red],&red))
+ {
+ green.index=0;
+ while (DefineRegion(extrema[Green],&green))
{
- green.index=0;
- while (DefineRegion(extrema[Green],&green))
+ blue.index=0;
+ while (DefineRegion(extrema[Blue],&blue))
{
- blue.index=0;
- while (DefineRegion(extrema[Blue],&blue))
+ /*
+ Allocate a new class.
+ */
+ if (head != (Cluster *) NULL)
{
- /*
- Allocate a new class.
- */
- if (head != (Cluster *) NULL)
- {
- cluster->next=MagickAllocateMemory(Cluster *,sizeof(Cluster));
- cluster=cluster->next;
- }
- else
- {
- cluster=MagickAllocateMemory(Cluster *,sizeof(Cluster));
- head=cluster;
- }
- if (cluster == (Cluster *) NULL)
- {
- ThrowException(&image->exception,ResourceLimitError,MemoryAllocationFailed,
- image->filename);
- goto classify_error_exit;
- }
- /*
- Initialize a new class.
- */
- (void) memset(cluster,0,sizeof(Cluster));
- cluster->count=0;
- cluster->red=red;
- cluster->green=green;
- cluster->blue=blue;
- cluster->next=(Cluster *) NULL;
+ cluster->next=MagickAllocateMemory(Cluster *,sizeof(Cluster));
+ cluster=cluster->next;
+ }
+ else
+ {
+ cluster=MagickAllocateMemory(Cluster *,sizeof(Cluster));
+ head=cluster;
}
+ if (cluster == (Cluster *) NULL)
+ {
+ ThrowException(&image->exception,ResourceLimitError,MemoryAllocationFailed,
+ image->filename);
+ goto classify_error_exit;
+ }
+ /*
+ Initialize a new class.
+ */
+ (void) memset(cluster,0,sizeof(Cluster));
+ cluster->count=0;
+ cluster->red=red;
+ cluster->green=green;
+ cluster->blue=blue;
+ cluster->next=(Cluster *) NULL;
}
}
- if (head == (Cluster *) NULL)
- {
- /*
- No classes were identified-- create one.
- */
- cluster=MagickAllocateMemory(Cluster *,sizeof(Cluster));
- if (cluster == (Cluster *) NULL)
- {
- ThrowException(&image->exception,ResourceLimitError,MemoryAllocationFailed,
- image->filename);
- goto classify_error_exit;
- }
- /*
- Initialize a new class.
- */
- (void) memset(cluster,0,sizeof(Cluster));
- cluster->count=0;
- cluster->red=red;
- cluster->green=green;
- cluster->blue=blue;
- cluster->next=(Cluster *) NULL;
- head=cluster;
- }
+ }
+ if (head == (Cluster *) NULL)
+ {
/*
- Build an array representation of the clusters.
+ No classes were identified-- create one.
*/
- number_clusters=0;
- for (cluster=head; cluster != (Cluster *) NULL; cluster=cluster->next)
- number_clusters++;
- cluster_array=MagickAllocateArray(Cluster **,number_clusters,sizeof(Cluster *));
- if (cluster_array == (Cluster **) NULL)
+ cluster=MagickAllocateMemory(Cluster *,sizeof(Cluster));
+ if (cluster == (Cluster *) NULL)
{
ThrowException(&image->exception,ResourceLimitError,MemoryAllocationFailed,
image->filename);
goto classify_error_exit;
}
- number_clusters=0;
- for (cluster=head; cluster != (Cluster *) NULL; cluster=cluster->next)
- cluster_array[number_clusters++]=cluster;
/*
- Count the pixels for each cluster.
+ Initialize a new class.
*/
- for (y=0; y < (long) image->rows; y++)
+ (void) memset(cluster,0,sizeof(Cluster));
+ cluster->count=0;
+ cluster->red=red;
+ cluster->green=green;
+ cluster->blue=blue;
+ cluster->next=(Cluster *) NULL;
+ head=cluster;
+ }
+ /*
+ Build an array representation of the clusters.
+ */
+ number_clusters=0;
+ for (cluster=head; cluster != (Cluster *) NULL; cluster=cluster->next)
+ number_clusters++;
+ cluster_array=MagickAllocateArray(Cluster **,number_clusters,sizeof(Cluster *));
+ if (cluster_array == (Cluster **) NULL)
+ {
+ ThrowException(&image->exception,ResourceLimitError,MemoryAllocationFailed,
+ image->filename);
+ goto classify_error_exit;
+ }
+ number_clusters=0;
+ for (cluster=head; cluster != (Cluster *) NULL; cluster=cluster->next)
+ cluster_array[number_clusters++]=cluster;
+ /*
+ Count the pixels for each cluster.
+ */
+ for (y=0; y < (long) image->rows; y++)
+ {
+ register const PixelPacket
+ * restrict p;
+
+ p=AcquireImagePixels(image,0,y,image->columns,1,&image->exception);
+ if (p == (const PixelPacket *) NULL)
{
- p=AcquireImagePixels(image,0,y,image->columns,1,&image->exception);
- if (p == (const PixelPacket *) NULL)
- {
- status=MagickFail;
- break;
- }
- for (x=(long) image->columns; x != 0; x--)
- {
- double
- r,
- g,
- b;
+ status=MagickFail;
+ break;
+ }
+ for (x=(long) image->columns; x != 0; x--)
+ {
+ double
+ r,
+ g,
+ b;
- r=(double) ScaleQuantumToChar(p->red);
- g=(double) ScaleQuantumToChar(p->green);
- b=(double) ScaleQuantumToChar(p->blue);
+ r=(double) ScaleQuantumToChar(p->red);
+ g=(double) ScaleQuantumToChar(p->green);
+ b=(double) ScaleQuantumToChar(p->blue);
- for (count=0 ; count < number_clusters; count++)
+ for (count=0 ; count < number_clusters; count++)
+ {
+ if ((r >= ((double) cluster_array[count]->red.left-SafeMargin)) &&
+ (r <= ((double) cluster_array[count]->red.right+SafeMargin)) &&
+ (g >= ((double) cluster_array[count]->green.left-SafeMargin)) &&
+ (g <= ((double) cluster_array[count]->green.right+SafeMargin)) &&
+ (b >= ((double) cluster_array[count]->blue.left-SafeMargin)) &&
+ (b <= ((double) cluster_array[count]->blue.right+SafeMargin)))
{
- if ((r >= ((double) cluster_array[count]->red.left-SafeMargin)) &&
- (r <= ((double) cluster_array[count]->red.right+SafeMargin)) &&
- (g >= ((double) cluster_array[count]->green.left-SafeMargin)) &&
- (g <= ((double) cluster_array[count]->green.right+SafeMargin)) &&
- (b >= ((double) cluster_array[count]->blue.left-SafeMargin)) &&
- (b <= ((double) cluster_array[count]->blue.right+SafeMargin)))
+ /*
+ Count this pixel.
+ */
+ cluster_array[count]->count++;
+ cluster_array[count]->red.center+=r;
+ cluster_array[count]->green.center+=g;
+ cluster_array[count]->blue.center+=b;
+
+ if ((count > 0) &&
+ (cluster_array[count]->count > cluster_array[count-1]->count))
{
- /*
- Count this pixel.
- */
- cluster_array[count]->count++;
- cluster_array[count]->red.center+=r;
- cluster_array[count]->green.center+=g;
- cluster_array[count]->blue.center+=b;
-
- if ((count > 0) &&
- (cluster_array[count]->count > cluster_array[count-1]->count))
- {
- Cluster
- *tmp_cluster;
+ Cluster
+ *tmp_cluster;
- tmp_cluster=cluster_array[count-1];
- cluster_array[count-1]=cluster_array[count];
- cluster_array[count]=tmp_cluster;
- }
- break;
+ tmp_cluster=cluster_array[count-1];
+ cluster_array[count-1]=cluster_array[count];
+ cluster_array[count]=tmp_cluster;
}
+ break;
}
- p++;
}
- if (QuantumTick(y,image->rows))
- if (!MagickMonitorFormatted(y,(size_t) image->rows*2,&image->exception,
- SegmentImageText,image->filename))
- {
- status=MagickFail;
- break;
- }
+ p++;
}
- if (status == MagickFail)
- goto classify_error_exit;
+ if (QuantumTick(y,image->rows))
+ if (!MagickMonitorFormatted(y,(size_t) image->rows*2,&image->exception,
+ SegmentImageText,image->filename))
+ {
+ status=MagickFail;
+ break;
+ }
+ }
+ if (status == MagickFail)
+ goto classify_error_exit;
- /*
- Remove clusters that do not meet minimum cluster threshold.
- */
- total_vectors=0.0;
- for (cluster=head; cluster != (Cluster *) NULL; cluster=cluster->next)
- total_vectors+=(double) cluster->count;
- threshold=cluster_threshold*0.01*total_vectors;
- count=0;
- last_cluster=head;
- next_cluster=head;
- for (cluster=head; cluster != (Cluster *) NULL; cluster=next_cluster)
- {
- next_cluster=cluster->next;
- if ((cluster->count > 0) &&
- ((double) cluster->count >= threshold))
- {
- /*
- Initialize cluster.
- */
- cluster->id=count;
- cluster->red.center=(cluster->red.center/((double) cluster->count));
- cluster->green.center=(cluster->green.center/((double) cluster->count));
- cluster->blue.center=(cluster->blue.center/((double) cluster->count));
- count++;
- last_cluster=cluster;
- }
- else
- {
- /*
- Delete cluster.
- */
- if (cluster == head)
- head=next_cluster;
- else
- last_cluster->next=next_cluster;
-
- if (image->logging)
- (void) LogMagickEvent
- (TransformEvent,GetMagickModule(),
- "Removing Cluster (usage count %lu, %.5f%%) %d-%d %d-%d %d-%d",
- (unsigned long) cluster->count,
- (((double) cluster->count/total_vectors) * 100.0),
- cluster->red.left,cluster->red.right,
- cluster->green.left,cluster->green.right,
- cluster->blue.left,cluster->blue.right);
- MagickFreeMemory(cluster);
- }
- }
- number_clusters=count;
- if (verbose && (head != (Cluster *) NULL))
+ /*
+ Remove clusters that do not meet minimum cluster threshold.
+ */
+ total_vectors=0.0;
+ for (cluster=head; cluster != (Cluster *) NULL; cluster=cluster->next)
+ total_vectors+=(double) cluster->count;
+ threshold=cluster_threshold*0.01*total_vectors;
+ count=0;
+ last_cluster=head;
+ next_cluster=head;
+ for (cluster=head; cluster != (Cluster *) NULL; cluster=next_cluster)
+ {
+ next_cluster=cluster->next;
+ if ((cluster->count > 0) &&
+ ((double) cluster->count >= threshold))
{
/*
- Print cluster statistics.
- */
- (void) fprintf(stdout,"===============================================\n");
- (void) fprintf(stdout," Fuzzy c-Means Statistics\n");
- (void) fprintf(stdout,"===============================================\n");
- (void) fprintf(stdout,"Cluster Threshold = %g%%\n", cluster_threshold);
- (void) fprintf(stdout,"Weighting Exponent = %g\n", weighting_exponent);
- (void) fprintf(stdout,"Total Number of Clusters = %lu\n",
- number_clusters);
- (void) fprintf(stdout,"Total Number of Vectors = %g\n",
- total_vectors);
- (void) fprintf(stdout,"Cluster Threshold = %g vectors\n\n",
- threshold);
- /*
- Print the total number of points per cluster.
+ Initialize cluster.
*/
- (void) fprintf(stdout,"Cluster Usage Extents Center\n");
- (void) fprintf(stdout,"======= ==================== ======================= =====================\n");
- for (cluster=head; cluster != (Cluster *) NULL; cluster=cluster->next)
- {
- PixelPacket
- color;
-
- char
- tuple[MaxTextExtent];
-
- color.red=ScaleCharToQuantum((unsigned int) (cluster->red.center + 0.5));
- color.green=ScaleCharToQuantum((unsigned int) (cluster->green.center + 0.5));
- color.blue=ScaleCharToQuantum((unsigned int) (cluster->blue.center + 0.5));
- color.opacity=OpaqueOpacity;
- /* (void) QueryColorname(image,&color,X11Compliance,colorname,&image->exception); */
- GetColorTuple(&color,8,MagickFalse,MagickTrue,tuple);
- (void) fprintf(stdout," %3d %10lu (%6.3f%%) %03d-%03d %03d-%03d %03d-%03d %03.0f %03.0f %03.0f (%s)\n",
- cluster->id,
- (unsigned long) cluster->count,
- (((double) cluster->count/total_vectors) * 100.0),
- cluster->red.left,cluster->red.right,
- cluster->green.left,cluster->green.right,
- cluster->blue.left,cluster->blue.right,
- cluster->red.center,
- cluster->green.center,
- cluster->blue.center,
- tuple);
- }
+ cluster->id=count;
+ cluster->red.center=(cluster->red.center/((double) cluster->count));
+ cluster->green.center=(cluster->green.center/((double) cluster->count));
+ cluster->blue.center=(cluster->blue.center/((double) cluster->count));
+ count++;
+ last_cluster=cluster;
}
- if ((number_clusters > 256) || (number_clusters == 0))
+ else
{
- ThrowException3(&image->exception,ImageError,UnableToSegmentImage,TooManyClusters);
- goto classify_error_exit;
+ /*
+ Delete cluster.
+ */
+ if (cluster == head)
+ head=next_cluster;
+ else
+ last_cluster->next=next_cluster;
+
+ if (image->logging)
+ (void) LogMagickEvent
+ (TransformEvent,GetMagickModule(),
+ "Removing Cluster (usage count %lu, %.5f%%) %d-%d %d-%d %d-%d",
+ (unsigned long) cluster->count,
+ (((double) cluster->count/total_vectors) * 100.0),
+ cluster->red.left,cluster->red.right,
+ cluster->green.left,cluster->green.right,
+ cluster->blue.left,cluster->blue.right);
+ MagickFreeMemory(cluster);
}
+ }
+ number_clusters=count;
+ if (verbose && (head != (Cluster *) NULL))
+ {
/*
- Speed up distance calculations.
+ Print cluster statistics.
*/
- squares_array=MagickAllocateMemory(double *,513*sizeof(double));
- if (squares_array == (double *) NULL)
- {
- ThrowException(&image->exception,ResourceLimitError,
- MemoryAllocationFailed,image->filename);
- goto classify_error_exit;
- }
- squares=squares_array+255;
-#if defined(HAVE_OPENMP)
-# pragma omp parallel for
-#endif
- for (i=(-255); i <= 255; i++)
- squares[i]=(double)i*i;
+ (void) fprintf(stdout,"===============================================\n");
+ (void) fprintf(stdout," Fuzzy c-Means Statistics\n");
+ (void) fprintf(stdout,"===============================================\n");
+ (void) fprintf(stdout,"Cluster Threshold = %g%%\n", cluster_threshold);
+ (void) fprintf(stdout,"Weighting Exponent = %g\n", weighting_exponent);
+ (void) fprintf(stdout,"Total Number of Clusters = %lu\n",
+ number_clusters);
+ (void) fprintf(stdout,"Total Number of Vectors = %g\n",
+ total_vectors);
+ (void) fprintf(stdout,"Cluster Threshold = %g vectors\n\n",
+ threshold);
/*
- Allocate image colormap.
+ Print the total number of points per cluster.
*/
- colormap=MagickAllocateMemory(PixelPacket *,number_clusters*sizeof(PixelPacket));
- if (colormap == (PixelPacket *) NULL)
- {
- ThrowException(&image->exception,ResourceLimitError,
- MemoryAllocationFailed,image->filename);
- goto classify_error_exit;
- }
- image->matte=False;
- image->storage_class=PseudoClass;
- MagickFreeMemory(image->colormap);
- image->colormap=colormap;
- image->colors=number_clusters;
- i=0;
+ (void) fprintf(stdout,"Cluster Usage Extents Center\n");
+ (void) fprintf(stdout,"======= ==================== ======================= =====================\n");
for (cluster=head; cluster != (Cluster *) NULL; cluster=cluster->next)
{
- image->colormap[i].red=ScaleCharToQuantum((unsigned int) (cluster->red.center + 0.5));
- image->colormap[i].green=ScaleCharToQuantum((unsigned int) (cluster->green.center + 0.5));
- image->colormap[i].blue=ScaleCharToQuantum((unsigned int) (cluster->blue.center + 0.5));
- image->colormap[i].opacity=OpaqueOpacity;
- i++;
+ PixelPacket
+ color;
+
+ char
+ tuple[MaxTextExtent];
+
+ color.red=ScaleCharToQuantum((unsigned int) (cluster->red.center + 0.5));
+ color.green=ScaleCharToQuantum((unsigned int) (cluster->green.center + 0.5));
+ color.blue=ScaleCharToQuantum((unsigned int) (cluster->blue.center + 0.5));
+ color.opacity=OpaqueOpacity;
+ /* (void) QueryColorname(image,&color,X11Compliance,colorname,&image->exception); */
+ GetColorTuple(&color,8,MagickFalse,MagickTrue,tuple);
+ (void) fprintf(stdout," %3d %10lu (%6.3f%%) %03d-%03d %03d-%03d %03d-%03d %03.0f %03.0f %03.0f (%s)\n",
+ cluster->id,
+ (unsigned long) cluster->count,
+ (((double) cluster->count/total_vectors) * 100.0),
+ cluster->red.left,cluster->red.right,
+ cluster->green.left,cluster->green.right,
+ cluster->blue.left,cluster->blue.right,
+ cluster->red.center,
+ cluster->green.center,
+ cluster->blue.center,
+ tuple);
}
- /*
- Rebuild cluster array.
- */
- number_clusters=0;
- for (cluster=head; cluster != (Cluster *) NULL; cluster=cluster->next)
- cluster_array[number_clusters++]=cluster;
- /*
- Do course grain storage_class.
- */
- row_count=0;
+ }
+ if ((number_clusters > 256) || (number_clusters == 0))
+ {
+ ThrowException3(&image->exception,ImageError,UnableToSegmentImage,TooManyClusters);
+ goto classify_error_exit;
+ }
+ /*
+ Speed up distance calculations.
+ */
+ squares_array=MagickAllocateMemory(double *,513*sizeof(double));
+ if (squares_array == (double *) NULL)
+ {
+ ThrowException(&image->exception,ResourceLimitError,
+ MemoryAllocationFailed,image->filename);
+ goto classify_error_exit;
+ }
+ squares=squares_array+255;
+ for (i=(-255); i <= 255; i++)
+ squares[i]=(double)i*i;
+ /*
+ Allocate image colormap.
+ */
+ {
+ PixelPacket
+ * restrict colormap;
+
+ colormap=MagickAllocateMemory(PixelPacket *,number_clusters*sizeof(PixelPacket));
+ if (colormap == (PixelPacket *) NULL)
+ {
+ ThrowException(&image->exception,ResourceLimitError,
+ MemoryAllocationFailed,image->filename);
+ goto classify_error_exit;
+ }
+ MagickFreeMemory(image->colormap);
+ image->colormap=colormap;
+ image->colors=number_clusters;
+ }
+ image->matte=False;
+ image->storage_class=PseudoClass;
+ i=0;
+ for (cluster=head; cluster != (Cluster *) NULL; cluster=cluster->next)
+ {
+ image->colormap[i].red=ScaleCharToQuantum((unsigned int) (cluster->red.center + 0.5));
+ image->colormap[i].green=ScaleCharToQuantum((unsigned int) (cluster->green.center + 0.5));
+ image->colormap[i].blue=ScaleCharToQuantum((unsigned int) (cluster->blue.center + 0.5));
+ image->colormap[i].opacity=OpaqueOpacity;
+ i++;
+ }
+ /*
+ Rebuild cluster array.
+ */
+ number_clusters=0;
+ for (cluster=head; cluster != (Cluster *) NULL; cluster=cluster->next)
+ cluster_array[number_clusters++]=cluster;
+ /*
+ Do course grain storage_class.
+ */
+ row_count=0;
#if defined(HAVE_OPENMP)
# if defined(TUNE_OPENMP)
-# pragma omp parallel for schedule(runtime) shared(row_count, status) private(count,indexes,p,q,x)
+# pragma omp parallel for schedule(runtime) shared(row_count, status) private(count,x)
# else
-# pragma omp parallel for schedule(static,8) shared(row_count, status) private(count,indexes,p,q,x)
+# pragma omp parallel for schedule(static,8) shared(row_count, status) private(count,x)
# endif
#endif
- for (y=0; y < (long) image->rows; y++)
- {
- MagickBool
- thread_status;
+ for (y=0; y < (long) image->rows; y++)
+ {
+ register PixelPacket
+ * restrict q;
+
+ register const PixelPacket
+ * restrict p;
- int
- num_threads;
+ register IndexPacket
+ * restrict indexes;
- thread_status=status;
- if (thread_status == MagickFail)
- continue;
+ MagickBool
+ thread_status;
- num_threads=omp_get_num_threads();
- q=GetImagePixelsEx(image,0,y,image->columns,1,&image->exception);
- if (q == (PixelPacket *) NULL)
- thread_status=MagickFail;
+ int
+ num_threads;
+
+ thread_status=status;
+ if (thread_status == MagickFail)
+ continue;
+
+ num_threads=omp_get_num_threads();
+ q=GetImagePixelsEx(image,0,y,image->columns,1,&image->exception);
+ if (q == (PixelPacket *) NULL)
+ thread_status=MagickFail;
- if (thread_status != MagickFail)
+ if (thread_status != MagickFail)
+ {
+ indexes=AccessMutableIndexes(image);
+ for (x=0; x < (long) image->columns; x++)
{
- indexes=AccessMutableIndexes(image);
- for (x=0; x < (long) image->columns; x++)
- {
- MagickBool
- classified=MagickFalse;
+ MagickBool
+ classified=MagickFalse;
- long
- r,
- g,
- b;
-
- r=(long) ScaleQuantumToChar(q[x].red);
- g=(long) ScaleQuantumToChar(q[x].green);
- b=(long) ScaleQuantumToChar(q[x].blue);
-
- for (count=0; count < number_clusters; count++)
- if ((r >= (cluster_array[count]->red.left-SafeMargin)) &&
- (r <= (cluster_array[count]->red.right+SafeMargin)) &&
- (g >= (cluster_array[count]->green.left-SafeMargin)) &&
- (g <= (cluster_array[count]->green.right+SafeMargin)) &&
- (b >= (cluster_array[count]->blue.left-SafeMargin)) &&
- (b <= (cluster_array[count]->blue.right+SafeMargin)))
+ long
+ r,
+ g,
+ b;
+
+ r=(long) ScaleQuantumToChar(q[x].red);
+ g=(long) ScaleQuantumToChar(q[x].green);
+ b=(long) ScaleQuantumToChar(q[x].blue);
+
+ for (count=0; count < number_clusters; count++)
+ if ((r >= (cluster_array[count]->red.left-SafeMargin)) &&
+ (r <= (cluster_array[count]->red.right+SafeMargin)) &&
+ (g >= (cluster_array[count]->green.left-SafeMargin)) &&
+ (g <= (cluster_array[count]->green.right+SafeMargin)) &&
+ (b >= (cluster_array[count]->blue.left-SafeMargin)) &&
+ (b <= (cluster_array[count]->blue.right+SafeMargin)))
+ {
+ /*
+ Classify this pixel.
+ */
+ indexes[x]=(IndexPacket) cluster_array[count]->id;
+ q[x]=image->colormap[indexes[x]];
+ classified=MagickTrue;
+
+ /*
+ Re-sort array so that most frequent occurs first.
+
+ Updating cluster_array causes a multithread race
+ condition so this chunk is only enabled in the
+ case of one thread.
+ */
+ if ((num_threads == 1) && (count > 0) &&
+ (cluster_array[count]->count > cluster_array[count-1]->count))
{
- /*
- Classify this pixel.
- */
- indexes[x]=(IndexPacket) cluster_array[count]->id;
- q[x]=image->colormap[indexes[x]];
- classified=MagickTrue;
-
- /*
- Re-sort array so that most frequent occurs first.
-
- Updating cluster_array causes a multithread race
- condition so this chunk is only enabled in the
- case of one thread.
- */
- if ((num_threads == 1) && (count > 0) &&
- (cluster_array[count]->count > cluster_array[count-1]->count))
- {
- Cluster
- *tmp_cluster;
-
- tmp_cluster=cluster_array[count-1];
- cluster_array[count-1]=cluster_array[count];
- cluster_array[count]=tmp_cluster;
- }
-
- break;
+ Cluster
+ *tmp_cluster;
+
+ tmp_cluster=cluster_array[count-1];
+ cluster_array[count-1]=cluster_array[count];
+ cluster_array[count]=tmp_cluster;
}
- if (classified == MagickFalse)
+
+ break;
+ }
+ if (classified == MagickFalse)
+ {
+ double
+ local_minima,
+ sum;
+
+ long
+ j,
+ k;
+
+ /*
+ Compute fuzzy membership.
+ */
+ local_minima=0.0;
+ for (j=0; j < (long) image->colors; j++)
{
double
- local_minima,
- sum;
-
- long
- j,
- k;
-
- /*
- Compute fuzzy membership.
- */
- local_minima=0.0;
- for (j=0; j < (long) image->colors; j++)
+ distance_squared,
+ numerator,
+ ratio_squared;
+
+ sum=0.0;
+ p=image->colormap+j;
+ distance_squared=
+ squares[r-(long) ScaleQuantumToChar(p->red)]+
+ squares[g-(long) ScaleQuantumToChar(p->green)]+
+ squares[b-(long) ScaleQuantumToChar(p->blue)];
+ numerator=distance_squared;
+ for (k=0; k < (long) image->colors; k++)
{
- double
- distance_squared,
- numerator,
- ratio_squared;
-
- sum=0.0;
- p=image->colormap+j;
+ p=image->colormap+k;
distance_squared=
squares[r-(long) ScaleQuantumToChar(p->red)]+
squares[g-(long) ScaleQuantumToChar(p->green)]+
squares[b-(long) ScaleQuantumToChar(p->blue)];
- numerator=distance_squared;
- for (k=0; k < (long) image->colors; k++)
- {
- p=image->colormap+k;
- distance_squared=
- squares[r-(long) ScaleQuantumToChar(p->red)]+
- squares[g-(long) ScaleQuantumToChar(p->green)]+
- squares[b-(long) ScaleQuantumToChar(p->blue)];
- ratio_squared=numerator/distance_squared;;
+ ratio_squared=numerator/distance_squared;;
#if SquaredClassify
- /*
- Since SquaredClassify (using a weighting
- exponent of 2.0) is normally defined to be
- true, this is the normally active code.
- Otherwise execution is even slower since
- pow() is excruciatingly slow.
- */
- sum+=ratio_squared;
+ /*
+ Since SquaredClassify (using a weighting
+ exponent of 2.0) is normally defined to be
+ true, this is the normally active code.
+ Otherwise execution is even slower since
+ pow() is excruciatingly slow.
+ */
+ sum+=ratio_squared;
#else
- sum+=pow(ratio_squared,((double) (1.0/(weighting_exponent-1.0))));
+ sum+=pow(ratio_squared,((double) (1.0/(weighting_exponent-1.0))));
#endif
- }
- if ((sum != 0.0) && ((1.0/sum) > local_minima))
- {
- /*
- Classify this pixel.
- */
- local_minima=1.0/sum;
- indexes[x]=(IndexPacket) j;
- q[x]=image->colormap[indexes[x]];
- }
+ }
+ if ((sum != 0.0) && ((1.0/sum) > local_minima))
+ {
+ /*
+ Classify this pixel.
+ */
+ local_minima=1.0/sum;
+ indexes[x]=(IndexPacket) j;
+ q[x]=image->colormap[indexes[x]];
}
}
}
- if (!SyncImagePixelsEx(image,&image->exception))
- thread_status=MagickFail;
}
+ if (!SyncImagePixelsEx(image,&image->exception))
+ thread_status=MagickFail;
+ }
- if (monitor_active)
- {
- unsigned long
- thread_row_count;
+ if (monitor_active)
+ {
+ unsigned long
+ thread_row_count;
#if defined(HAVE_OPENMP)
# pragma omp atomic
#endif
- row_count++;
+ row_count++;
#if defined(HAVE_OPENMP)
# pragma omp flush (row_count)
#endif
- thread_row_count=row_count;
- if (QuantumTick(thread_row_count,image->rows))
- if (!MagickMonitorFormatted((size_t) thread_row_count+image->rows,(size_t) image->rows*2,
- &image->exception,
- SegmentImageText,image->filename))
- thread_status=MagickFail;
- }
+ thread_row_count=row_count;
+ if (QuantumTick(thread_row_count,image->rows))
+ if (!MagickMonitorFormatted((size_t) thread_row_count+image->rows,(size_t) image->rows*2,
+ &image->exception,
+ SegmentImageText,image->filename))
+ thread_status=MagickFail;
+ }
- if (thread_status == MagickFail)
- {
- status=MagickFail;
+ if (thread_status == MagickFail)
+ {
+ status=MagickFail;
#if defined(HAVE_OPENMP)
# pragma omp flush (status)
#endif
- }
}
- /*
- Free memory.
- */
+ }
+ /*
+ Free memory.
+ */
classify_error_exit:
- for (cluster=head; cluster != (Cluster *) NULL; cluster=next_cluster)
- {
- next_cluster=cluster->next;
- MagickFreeMemory(cluster);
- head=(Cluster *) NULL;
- }
- MagickFreeMemory(cluster_array);
- MagickFreeMemory(squares_array);
- return(status);
+ for (cluster=head; cluster != (Cluster *) NULL; cluster=next_cluster)
+ {
+ next_cluster=cluster->next;
+ MagickFreeMemory(cluster);
+ head=(Cluster *) NULL;
+ }
+ MagickFreeMemory(cluster_array);
+ MagickFreeMemory(squares_array);
+ return(status);
}
\f
/*
% The format of the GetImageStatistics method is:
%
% MagickPassFail GetImageStatistics(const Image *image,
-% ImageStatistics *statistics
+% ImageStatistics *statistics,
% ExceptionInfo *exception)
%
% A description of each parameter follows:
#define MagickConstrainColormapIndex GmMagickConstrainColormapIndex
#define MagickCreateDirectoryPath GmMagickCreateDirectoryPath
#define MagickDestroyCommandInfo GmMagickDestroyCommandInfo
+#define MagickDoubleToLong GmMagickDoubleToLong
#define MagickFindRawImageMinMax GmMagickFindRawImageMinMax
#define MagickFmax GmMagickFmax
#define MagickFmin GmMagickFmin
#define RegisterICONImage GmRegisterICONImage
#define RegisterIDENTITYImage GmRegisterIDENTITYImage
#define RegisterINFOImage GmRegisterINFOImage
+#define RegisterJBIGImage GmRegisterJBIGImage
#define RegisterJNXImage GmRegisterJNXImage
#define RegisterJP2Image GmRegisterJP2Image
#define RegisterJPEGImage GmRegisterJPEGImage
#define RegisterPREVIEWImage GmRegisterPREVIEWImage
#define RegisterPS2Image GmRegisterPS2Image
#define RegisterPS3Image GmRegisterPS3Image
-#define RegisterPSDImage GmRegisterPSDImage
#define RegisterPSImage GmRegisterPSImage
#define RegisterPWPImage GmRegisterPWPImage
#define RegisterRGBImage GmRegisterRGBImage
#define SetImageProfile GmSetImageProfile
#define SetImageType GmSetImageType
#define SetImageVirtualPixelMethod GmSetImageVirtualPixelMethod
+#define SetLogDefaultEventType GmSetLogDefaultEventType
+#define SetLogDefaultFileName GmSetLogDefaultFileName
+#define SetLogDefaultFormat GmSetLogDefaultFormat
+#define SetLogDefaultGenerations GmSetLogDefaultGenerations
+#define SetLogDefaultLimit GmSetLogDefaultLimit
+#define SetLogDefaultOutputType GmSetLogDefaultOutputType
#define SetLogEventMask GmSetLogEventMask
#define SetLogFormat GmSetLogFormat
#define SetMagickInfo GmSetMagickInfo
#define UnregisterICONImage GmUnregisterICONImage
#define UnregisterIDENTITYImage GmUnregisterIDENTITYImage
#define UnregisterINFOImage GmUnregisterINFOImage
+#define UnregisterJBIGImage GmUnregisterJBIGImage
#define UnregisterJNXImage GmUnregisterJNXImage
#define UnregisterJP2Image GmUnregisterJP2Image
#define UnregisterJPEGImage GmUnregisterJPEGImage
#define UnregisterPREVIEWImage GmUnregisterPREVIEWImage
#define UnregisterPS2Image GmUnregisterPS2Image
#define UnregisterPS3Image GmUnregisterPS3Image
-#define UnregisterPSDImage GmUnregisterPSDImage
#define UnregisterPSImage GmUnregisterPSImage
#define UnregisterPWPImage GmUnregisterPWPImage
#define UnregisterRGBImage GmUnregisterRGBImage
%
%
*/
+
+static RectangleInfo GetImageMosaicDimensions(const Image *image) MAGICK_FUNC_PURE;
+
static RectangleInfo GetImageMosaicDimensions(const Image *image)
{
RectangleInfo
%
% A description of each parameter follows:
%
-% o image: The image The transformed image is returned as this parameter.
+% o image: The image to transform. The resulting transformed image is
+% returned via this parameter.
%
% o crop_geometry: A crop geometry string. This geometry defines a
% subregion of the image to crop.
return status;
}
- previous=transform_image->previous;
- resize_image->next=transform_image->next;
- DestroyImage(transform_image);
- transform_image=resize_image;
+ ReplaceImageInList(&transform_image,resize_image);
*image=transform_image;
return status;
}
extern MagickExport MagickPassFail MagickAtoUIChk(const char *str, unsigned int *value);
extern MagickExport MagickPassFail MagickAtoLChk(const char *str, long *value);
extern MagickExport MagickPassFail MagickAtoULChk(const char *str, unsigned long *value);
+extern MagickExport long MagickDoubleToLong(const double dval/*, ExceptionInfo *exception*/);
/*
Compute a value which is the next kilobyte power of 2 larger than
/* ListFiles() may change current directory without restoring. */
if ((strlen(current_directory) > 0) && (chdir(current_directory) != 0))
{
- for (j=0; j < number_files; j++)
- MagickFreeMemory(filelist[j]);
- MagickFreeMemory(filelist);
+ if (filelist != (char **) NULL)
+ {
+ for (j=0; j < number_files; j++)
+ MagickFreeMemory(filelist[j]);
+ MagickFreeMemory(filelist);
+ }
MagickFatalError(ConfigureFatalError,UnableToRestoreCurrentDirectory,
NULL);
}
not matching anything (abc* and there's no file starting with
abc). Do the same for behaviour consistent with that.
*/
- for (j=0; j < number_files; j++)
- MagickFreeMemory(filelist[j]);
- MagickFreeMemory(filelist);
+ if (filelist != (char **) NULL)
+ {
+ for (j=0; j < number_files; j++)
+ MagickFreeMemory(filelist[j]);
+ MagickFreeMemory(filelist);
+ }
continue;
}
char
filename_buffer[MaxTextExtent];
- *filename_buffer='\0';
+ if (filelist[j] == (const char *) NULL)
+ continue;
+ filename_buffer[0]='\0';
if (strlcat(filename_buffer,path,sizeof(filename_buffer))
>= sizeof(filename_buffer))
MagickFatalError2(ResourceLimitFatalError,"Path buffer overflow",
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% Method FormatString prints formatted output of a variable argument list.
+% Method FormatString prints formatted output of a variable argument list
+% buffer, limiting its output to MaxTextExtent.
+% The formatted size (as would be returned by strlen()) is returned.
%
% The format of the FormatString method is:
%
-% void FormatString(char *string,const char *format,...)
+% size_t FormatString(char *string,const char *format,...)
%
% A description of each parameter follows.
%
%
%
*/
-MagickExport void FormatStringList(char *string,const char *format,
- va_list operands)
+MagickExport size_t FormatStringList(char *string,const char *format,
+ va_list operands)
{
+ size_t
+ fls = 0;
+
+ int
+ fli;
+
#if defined(HAVE_VSNPRINTF)
- (void) vsnprintf(string,MaxTextExtent,format,operands);
+ fli=vsnprintf(string,MaxTextExtent,format,operands);
#else
- (void) vsprintf(string,format,operands);
+ fli=vsprintf(string,format,operands);
#endif
+ if (fli >= MaxTextExtent)
+ fls=MaxTextExtent-1;
+ else if (fli > 0)
+ fls=(size_t) fli;
+ return fls;
}
-MagickExport void FormatString(char *string,const char *format,...)
+MagickExport size_t FormatString(char *string,const char *format,...)
{
va_list
operands;
+ size_t
+ formatted_len;
+
va_start(operands,format);
- FormatStringList(string, format, operands);
+ formatted_len=FormatStringList(string, format, operands);
va_end(operands);
+ return formatted_len;
}
\f
/*
{
/* Check for too many characters. */
i++;
- if (i == sizeof(geometry))
+ if (i == sizeof(geometry)-1)
return NoValue;
*q=*c;
bounds.x=0;
bounds.y=0;
p=geometry;
- while ((isspace((int)(*p))))
+ while ((*p != '\0') && (isspace((int)(*p))))
p++;
if (*p == '\0')
return(flags);
}
\f
/*
+ Convert a double to a long, with clipping.
+ Someday a warning or an error may be produced here.
+*/
+MagickExport long MagickDoubleToLong(const double dval/*, ExceptionInfo *exception*/)
+{
+ long lval;
+
+ do
+ {
+#if defined(INFINITY)
+ if (dval == +INFINITY)
+ {
+ lval=LONG_MAX;
+ break;
+ }
+ if (dval == -INFINITY)
+ {
+ lval=LONG_MIN;
+ break;
+ }
+#endif
+ if (isnan(dval))
+ {
+ lval=0;
+ break;
+ }
+ if (dval > LONG_MAX)
+ {
+ lval=LONG_MAX;
+ break;
+ }
+ if (dval < LONG_MIN)
+ {
+ lval=LONG_MIN;
+ break;
+ }
+ lval=(long) dval;
+ } while (0);
+
+ return lval;
+}
+\f
+/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% %
%
% Method MagickFormatString prints formatted output of a variable
% argument list buffer, limiting its output to a specified buffer size.
+% The formatted size (as would be returned by strlen()) is returned.
%
% The format of the MagickFormatString method is:
%
-% void MagickFormatString(char *string,const size_t length,
-% const char *format,...)
+% size_t MagickFormatString(char *string,const size_t length,
+% const char *format,...)
%
% A description of each parameter follows.
%
%
%
*/
-MagickExport void MagickFormatStringList(char *string,
- const size_t length,
- const char *format,
- va_list operands)
+MagickExport size_t MagickFormatStringList(char *string,
+ const size_t length,
+ const char *format,
+ va_list operands)
{
+ size_t
+ fls = 0;
+
+ int
+ fli;
+
+ if (length > 0)
+ {
#if defined(HAVE_VSNPRINTF)
- (void) vsnprintf(string,length,format,operands);
+ fli=vsnprintf(string,length,format,operands);
#else
- (void) vsprintf(string,format,operands);
+ fli=vsprintf(string,format,operands);
#endif
+ if (fli > 0)
+ {
+ if ((size_t) fli >= length)
+ fls=length-1;
+ else
+ fls=(size_t) fli;
+ }
+ }
+ return fls;
}
-MagickExport void MagickFormatString(char *string,
- const size_t length,
- const char *format,...)
+MagickExport size_t MagickFormatString(char *string,
+ const size_t length,
+ const char *format,...)
{
va_list
operands;
+ size_t
+ formatted_len;
+
va_start(operands,format);
- MagickFormatStringList(string, length, format, operands);
+ formatted_len=MagickFormatStringList(string, length, format, operands);
va_end(operands);
+ return formatted_len;
}
\f
/*
char
key[MaxTextExtent];
- /* Extract attribute key string. */
+ /*
+ Extract attribute key string.
+
+ FIXME: does not handle nested specification so that
+ '%[[MVG]]' results in '[MVG]'.
+ */
p++;
for (i=0; (i < MaxTextExtent-1) && (*p) && (*p != ']'); i++)
{
- key[i]=(*p++);
+ key[i]=(*p++);
}
if (']' != *p)
break;
Strip(char *),
SetGeometry(const Image *,RectangleInfo *);
-extern MagickExport void
+extern MagickExport size_t
FormatString(char *string,const char *format,...) MAGICK_ATTRIBUTE((__format__ (__printf__,2,3))),
FormatStringList(char *string,const char *format,va_list operands) MAGICK_ATTRIBUTE((__format__ (__printf__,2,0))),
MagickFormatString(char *string,const size_t length,const char *format,...) MAGICK_ATTRIBUTE((__format__ (__printf__,3,4))),
*/
#define MagickPackageName "GraphicsMagick"
#define MagickCopyright "Copyright (C) 2002-2020 GraphicsMagick Group.\nAdditional copyrights and licenses apply to this software.\nSee http://www.GraphicsMagick.org/www/Copyright.html for details."
-#define MagickLibVersion 0x242100
-#define MagickLibVersionText "1.3.35"
-#define MagickLibVersionNumber 24,21,0
-#define MagickChangeDate "20200223"
-#define MagickReleaseDate "2020-02-23"
+#define MagickLibVersion 0x252200
+#define MagickLibVersionText "1.3.36"
+#define MagickLibVersionNumber 25,22,0
+#define MagickChangeDate "20201226"
+#define MagickReleaseDate "20201226"
/*
The MagickLibInterfaceNewest and MagickLibInterfaceOldest defines
MagickLibVersionNumber, but these are broken out and simplified so
that they can be easily used in C pre-processor logic.
*/
-#define MagickLibInterfaceNewest 24
+#define MagickLibInterfaceNewest 25
#define MagickLibInterfaceOldest 3
#if (QuantumDepth == 8)
#define MagickXVisualColormapSize(visual_info) Min( (int) (\
((visual_info->class == TrueColor) || (visual_info->class == DirectColor)) ? \
(int) (visual_info->red_mask | visual_info->green_mask | visual_info->blue_mask) : \
- visual_info->colormap_size),(1 << visual_info->depth))
+ visual_info->colormap_size),(1L << visual_info->depth))
MagickExport XVisualInfo *
MagickXBestVisualInfo(Display *display,
#!/usr/bin/env python
+# -*- coding: utf-8 -*-
# vim:ts=4:sw=4:expandtab:tw=100:
#* Author: Mark Mitchell
self.body_prefix.append(html_fragments.banner)
self.body_prefix.append(html_fragments.nav)
- #self.body_suffix = [html_fragments.footer, '</body>\n</html>\n']
- self.body_suffix = ['</body>\n</html>\n']
+ self.body_suffix = [html_fragments.footer, '</body>\n</html>\n']
+ #self.body_suffix = ['</body>\n</html>\n']
'ImageType' : '`ImageType`_',
'InterlaceType' : '`InterlaceType`_',
'LayerType' : '`LayerType`_',
+ 'LogEventType' : '`LogEventType`_',
+ 'LogMethod' : '`LogMethod`_',
+ 'LogOutputType' : '`LogOutputType`_',
'MagickInfo' : '`MagickInfo`_',
'MonitorHandler' : '`MonitorHandler`_',
'MontageInfo' : '`MontageInfo`_',
+# -*- coding: utf-8 -*-
# vim:ts=4:sw=4:expandtab:tw=100:
#* Author: Mark Mitchell
# url_prefix attribute should already be fixed up.
url_prefix = '' # trailing slash always needed
+# For SF, substitute with: '<br><img src="https://sourceforge.net/sflogo.php?group_id=73485&type=1" border="0" alt=SourceForge width="88" height="31">'
+sponsor_logo_html = '<!--SPONSOR_LOGO-->'
banner_template = """
<div class="banner">
<img src="%(url_prefix)s%(banner_logo)s" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
"""
nav_template = """
<div class="navmenu">
<ul>
-<li><a href="%(url_prefix)sindex.html">Home</a></li>
-<li><a href="%(url_prefix)sproject.html">Project</a></li>
-<li><a href="%(url_prefix)sdownload.html">Download</a></li>
-<li><a href="%(url_prefix)sREADME.html">Install</a></li>
-<li><a href="%(url_prefix)sHg.html">Source</a></li>
-<li><a href="%(url_prefix)sNEWS.html">News</a> </li>
-<li><a href="%(url_prefix)sutilities.html">Utilities</a></li>
-<li><a href="%(url_prefix)sprogramming.html">Programming</a></li>
-<li><a href="%(url_prefix)sreference.html">Reference</a></li>
+ <li><a href="%(url_prefix)sindex.html">Home</a></li>
+ <li><a href="%(url_prefix)sproject.html">Project</a></li>
+ <li><a href="%(url_prefix)sdownload.html">Download</a></li>
+ <li><a href="%(url_prefix)sREADME.html">Install</a></li>
+ <li><a href="%(url_prefix)sHg.html">Source</a></li>
+ <li><a href="%(url_prefix)sNEWS.html">News</a> </li>
+ <li><a href="%(url_prefix)sutilities.html">Utilities</a></li>
+ <li><a href="%(url_prefix)sprogramming.html">Programming</a></li>
+ <li><a href="%(url_prefix)sreference.html">Reference</a></li>
</ul>
</div>
"""
-footer_template = """
-<hr class="divider">
-<div class="footer">
- <p><a href="%(url_prefix)sCopyright.html">Copyright</a>GraphicsMagick Group 2002 - 2020</p>
+# hr class was "divider". Changed to "docutils"
+# footer div class was "footer". Changed to "document" so text style matches document.
+footer_template = u"""
+<hr class="docutils">
+<div class="document">
+ <p><a href="%(url_prefix)sCopyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020%(sponsor_logo_html)s</p>
</div>
"""
def make_footer():
return footer_template % { 'url_prefix' : url_prefix,
+ 'sponsor_logo_html' : sponsor_logo_html,
}
def make_banner():
if __name__ == '__main__':
print((make_banner()))
print((make_nav()))
+ print((make_footer()))
# Copyright 2008 Mark Mitchell
# License: Same as GraphicsMagick.
+# Use Python 3 print function in Python >= 2.6
+from __future__ import print_function
+
__doc__ = """Runs rst2htmldeco.py on all files in the rst_pagelist.txt list.
Usage:
argv = sys.argv
if len(argv) < 2:
- print >> sys.stderr, __doc__
+ print(__doc__, file=sys.stderr)
return 1
if argv[1] in ('-h', '--help'):
- print >> sys.stdout, __doc__
+ print(__doc__, file=sys.stdout)
return 0
rstlist_file = argv[1]
try:
rstfile, outfile, stylesheet_url, url_prefix = line.split(None, 3)
except ValueError:
- print >> sys.stderr, "Line %u of %s: improper format" % (cnt, rstlist_file)
+ print("Line %u of %s: improper format" % (cnt, rstlist_file), file=sys.stderr)
return 1
rstfile_path = os.path.join(gm_topdir, rstfile.strip())
'--url-prefix=%s' % url_prefix,
rstfile_path,
outfile_path]
- print 'rst2htmldeco.py %s' % ' '.join(args)
+ print('rst2htmldeco.py %s' % ' '.join(args))
rst2htmldeco.main(args)
f.close()
#!/usr/bin/env python
+# -*- coding: utf-8 -*-
# vim:ts=4:sw=4:expandtab
#* Author: Mark Mitchell
#* Copyright 2008 Mark Mitchell
#* License: see __license__ below.
+# Use Python 3 print function in Python >= 2.6
+from __future__ import print_function
+
import sys
import re
<hr>
<p>Here are some example color selections to choose from or define
your own. GraphicsMagick understands color names or hex values (.e.g.
-white or #ffffff).
+white or #ffffff).
</p>
<table class="named-colors">
<colgroup>
f = file(sys.argv[1])
first_line = f.readline()
if not first_line.startswith('<?xml version='):
- print >> sys.stderr, "'%s' does not seem like a color.mgk file"
+ print("'%s' does not seem like a color.mgk file", file=sys.stderr)
sys.exit(1)
re_colors = re.compile(r'name="([^"]+)"\s+red="([^"]+)"\s+green="([^"]+)"\s+blue="([^"]+)"\s+')
#<tr><td>Name</td><td>Color</td><td>R,G,B</td><td>Hex</td></tr>
tr = '<tr><td>%s</td><td class="%s" bgcolor="#%02x%02x%02x">%s</td><td>%s, %s, %s</td><td>#%02x%02x%02x</td></tr>'
- print head
+ print(head)
for name, r, g, b in named_colors_rgb:
if r+g+b < 320:
level = 'dark'
else:
level = 'light'
- print tr % (name, level, r, g, b, name, r, g, b, r, g, b)
- print tail
-
+ print(tr % (name, level, r, g, b, name, r, g, b, r, g, b))
+ print(tail)
#!/usr/bin/env python
+# -*- coding: utf-8 -*-
# vim:ts=4:sw=4:expandtab
#* Author: Mark Mitchell
# reStructuredText files in the GraphicsMagick source tree, which get
# converted to HTML files in the www/ subdirectory.
-# rst_file html_file stylesheet_url url_prefix
-AUTHORS.txt www/AUTHORS.html docutils-articles.css ../
-BENCHMARKS.txt www/BENCHMARKS.html docutils-articles.css ../
-BUGS.txt www/BUGS.html docutils-articles.css ../
-CONTRIBUTE.txt www/CONTRIBUTE.html docutils-articles.css ../
-CVS.txt www/CVS.html docutils-articles.css ../
-Copyright.txt www/Copyright.html docutils-articles.css ../
-DOWNLOAD.txt www/DOWNLOAD.html docutils-articles.css ../
-FAQ.txt www/FAQ.html docutils-articles.css ../
-INSTALL-unix.txt www/INSTALL-unix.html docutils-articles.css ../
-INSTALL-windows.txt www/INSTALL-windows.html docutils-articles.css ../
-LINKS.txt www/LINKS.html docutils-articles.css ../
-MISSION.txt www/MISSION.html docutils-articles.css ../
-NEWS.txt www/NEWS.html docutils-articles.css ../
-OpenMP.txt www/OpenMP.html docutils-articles.css ../
-PLATFORMS.txt www/PLATFORMS.html docutils-articles.css ../
-PROCESS.txt www/PROCESS.html docutils-articles.css ../
-PROGRAMMING.txt www/PROGRAMMING.html docutils-articles.css ../
-README.txt www/README.html docutils-articles.css ../
-UTILITIES.txt www/UTILITIES.html docutils-articles.css ../
-index-topdir.rst index.html www/docutils-articles.css ./
-index-wwwdir.rst www/index.html docutils-articles.css ../
-www/api.rst www/api.html docutils-articles.css ../
-www/perl.rst www/perl.html docutils-articles.css ../
+# rst_file html_file stylesheet_url url_prefix
+Copyright.txt www/Copyright.html docutils-articles.css ../
+NEWS.txt www/NEWS.html docutils-articles.css ../
+www/ChangeLog-2001.rst www/ChangeLog-2001.html docutils-articles.css ../
+www/ChangeLog-2002.rst www/ChangeLog-2002.html docutils-articles.css ../
+www/ChangeLog-2003.rst www/ChangeLog-2003.html docutils-articles.css ../
+www/ChangeLog-2004.rst www/ChangeLog-2004.html docutils-articles.css ../
+www/ChangeLog-2005.rst www/ChangeLog-2005.html docutils-articles.css ../
+www/ChangeLog-2006.rst www/ChangeLog-2006.html docutils-articles.css ../
+www/ChangeLog-2007.rst www/ChangeLog-2007.html docutils-articles.css ../
+www/ChangeLog-2008.rst www/ChangeLog-2008.html docutils-articles.css ../
+www/ChangeLog-2009.rst www/ChangeLog-2009.html docutils-articles.css ../
+www/ChangeLog-2010.rst www/ChangeLog-2010.html docutils-articles.css ../
+www/ChangeLog-2011.rst www/ChangeLog-2011.html docutils-articles.css ../
+www/ChangeLog-2012.rst www/ChangeLog-2012.html docutils-articles.css ../
+www/ChangeLog-2013.rst www/ChangeLog-2013.html docutils-articles.css ../
+www/ChangeLog-2014.rst www/ChangeLog-2014.html docutils-articles.css ../
+www/ChangeLog-2015.rst www/ChangeLog-2015.html docutils-articles.css ../
+www/ChangeLog-2016.rst www/ChangeLog-2016.html docutils-articles.css ../
+www/ChangeLog-2017.rst www/ChangeLog-2017.html docutils-articles.css ../
+www/ChangeLog-2018.rst www/ChangeLog-2018.html docutils-articles.css ../
+www/ChangeLog-2019.rst www/ChangeLog-2019.html docutils-articles.css ../
+www/Changelog.rst www/Changelog.html docutils-articles.css ../
+www/Changes.rst www/Changes.html docutils-articles.css ../
+www/FAQ.rst www/FAQ.html docutils-articles.css ../
+www/Hg.rst www/Hg.html docutils-articles.css ../
+www/INSTALL-unix.rst www/INSTALL-unix.html docutils-articles.css ../
+www/INSTALL-windows.rst www/INSTALL-windows.html docutils-articles.css ../
+www/ImageMagickObject.rst www/ImageMagickObject.html docutils-articles.css ../
+www/OpenMP.rst www/OpenMP.html docutils-articles.css ../
+www/authors.rst www/authors.html docutils-articles.css ../
+www/benchmarks.rst www/benchmarks.html docutils-articles.css ../
+www/bugs.rst www/bugs.html docutils-articles.css ../
+www/contribute.rst www/contribute.html docutils-articles.css ../
+www/download.rst www/download.html docutils-articles.css ../
+www/formats.rst www/formats.html docutils-articles.css ../
+www/index.rst www/index.html docutils-articles.css ./
+www/links.rst www/links.html docutils-articles.css ../
+www/miff.rst www/miff.html docutils-articles.css ../
+www/mission.rst www/mission.html docutils-articles.css ../
+www/motion-picture.rst www/motion-picture.html docutils-articles.css ../
+www/perl.rst www/perl.html docutils-articles.css ../
+www/process.rst www/process.html docutils-articles.css ../
+www/programming.rst www/programming.html docutils-articles.css ../
+www/project.rst www/project.html docutils-articles.css ../
+www/quantize.rst www/quantize.html docutils-articles.css ../
+www/reference.rst www/reference.html docutils-articles.css ../
+www/security.rst www/security.html docutils-articles.css ../
+www/thanks.rst www/thanks.html docutils-articles.css ../
+www/tools.rst www/tools.html docutils-articles.css ../
+www/utilities.rst www/utilities.html docutils-articles.css ../
animate.c Interactively animate an image sequence
annotate.c Annotate an image with text
attribute.c Access key,value image attributes
-average.c Image averaging functions
+average.c Image averaging functions
blob.c Read or write formatted images in memory (BLOBs)
-cdl.c Apply ASC CDL transform to image
+cdl.c Apply ASC CDL transform to image
channel.c Image channel functions
color.c Color related functions
-colormap.c Colormap related functions
+colormap.c Colormap related functions
constitute.c Read or write an image
compare.c Compare images
composite.c Merge image pixels using a specified algorithm
confirm_access.c Access confirmation functions
decorate.c Add decorative frames and borders
deprecate.c Methods which should no longer be used
-describe.c Methods to describe an image
+describe.c Methods to describe an image
display.c Interactively display and edit an image
-export.c Export image pixels into common representations
+export.c Export image pixels into common representations
render.c Low-level methods to draw on an image
draw.c User-friendly methods to draw on an image
effect.c Image effects methods
fx.c Image special effects methods
enhance.c Methods to enhance or adjust an image
error.c Error reporting methods
-hclut.c Apply Hald CLUT to image
+hclut.c Apply Hald CLUT to image
image.c Miscellaneous image methods
-import.c Import image pixels from common representations
+import.c Import image pixels from common representations
list.c Image list support
+log.c Event logging support
magick.c Image format support interfaces
memory.c Memory allocation/deallocation functions
monitor.c Progress monitor support
paint.c Methods to fill image pixel regions
pixel_cache.c Image pixel cache (working pixels).
pixel_iterator.c Pixel iterator pattern support functions
-plasma.c Create a Plasma fractal image.
+plasma.c Create a Plasma fractal image.
profile.c Manipulate embedded profiles
quantize.c Reduce the number of colors in an image
registry.c In-memory image registration interface
segment.c Segment and image with thresholding using the fuzzy c-means method
shear.c Rotate image, shear image, or apply a 2D affine transformation
signature.c Add a digital signature to the image
-statistics.c Compute image statistics
-texture.c Image texture functions
+statistics.c Compute image statistics
+texture.c Image texture functions
transform.c Crop, flip, flop, roll, coalesce, etc.
resize.c Resize an image
widget.c X11 Widgets
-drawing_wand.c Wand vector drawing interfaces
-magick_wand.c Wand image processing interfaces
-pixel_wand.c Wand pixel access interfaces
+drawing_wand.c Wand vector drawing interfaces
+magick_wand.c Wand image processing interfaces
+pixel_wand.c Wand pixel access interfaces
{
char
*option = argv[arg];
-
+
if (*option == '-')
{
if (LocaleCompare("debug",option+1) == 0)
exit_status = 1;
goto program_exit;
}
-
+
if ( !IsImagesEqual(original, final) )
{
CatchException(&original->exception);
if (imageInfo)
DestroyImageInfo(imageInfo);
imageInfo = 0;
+ DestroyExceptionInfo( &exception );
DestroyMagick();
-.TH gm 1 "2019/12/29" "GraphicsMagick"
+.TH gm 1 "2020/07/19" "GraphicsMagick"
.TP
.in 15
.in 15
.in 15
.B "Over"
.in 20
- \fR
+\fR
.in 20
The result will be the union of the two image shapes, with opaque areas
of \fIchange-image\fP obscuring \fIbase-image\fP in the region of
.in 15
.B "In"
.in 20
- \fR
+\fR
.in 20
The result is simply \fIchange-image\fP cut by the shape of
\fIbase-image\fP. None of the image data of \fIbase-image\fP will be in
.in 15
.B "Out"
.in 20
- \fR
+\fR
.in 20
The resulting image is \fIchange-image\fP with the shape of
\fIbase-image\fP cut out.
.in 15
.B "Atop"
.in 20
- \fR
+\fR
.in 20
The result is the same shape as \fIbase-image\fP, with
\fIchange-image\fP obscuring \fIbase-image\fP where the image shapes
.in 15
.B "Xor"
.in 20
- \fR
+\fR
.in 20
The result is the image data from both \fIchange-image\fP and
\fIbase-image\fP that is outside the overlap region. The overlap region
.in 15
.B "Plus"
.in 20
- \fR
+\fR
.in 20
The result is just the sum of the image data. Output values are cropped
to MaxRGB (no overflow). This operation is independent of the matte
.in 15
.B "Minus"
.in 20
- \fR
+\fR
.in 20
The result of \fIchange-image\fP - \fIbase-image\fP, with underflow
cropped to zero. The matte channel is ignored (set to opaque, full
.in 15
.B "Add"
.in 20
- \fR
+\fR
.in 20
The result of \fIchange-image\fP + \fIbase-image\fP, with overflow
wrapping around (\fImod\fP MaxRGB+1).
.in 15
.B "Subtract"
.in 20
- \fR
+\fR
.in 20
The result of \fIchange-image\fP - \fIbase-image\fP, with underflow
wrapping around (\fImod\fP MaxRGB+1). The \fBadd\fP and \fBsubtract\fP
.in 15
.B "Difference"
.in 20
- \fR
+\fR
.in 20
The result of abs(\fIchange-image\fP - \fIbase-image\fP). This is
useful for comparing two very similar images.
.in 15
.B "Divide"
.in 20
- \fR
+\fR
.in 20
The result of \fIchange-image\fP / \fIbase-image\fP. This is useful
for improving the readability of text on unevenly illuminated photos (by
.in 15
.B "Multiply"
.in 20
- \fR
+\fR
.in 20
The result of \fIchange-image\fP * \fIbase-image\fP. This is useful for
the creation of drop-shadows.
.in 15
.B "Bumpmap"
.in 20
- \fR
+\fR
.in 20
The result \fIbase-image\fP shaded by \fIchange-image\fP.
.in 15
.B "Copy"
.in 20
- \fR
+\fR
.in 20
The resulting image is \fIbase-image\fP replaced with
\fIchange-image\fP. Here the matte information is ignored.
.in 15
.B "CopyRed"
.in 20
- \fR
+\fR
.in 20
The resulting image is the red channel in \fIbase-image\fP replaced with
the red channel in \fIchange-image\fP. The other channels are copied
.in 15
.B "CopyGreen"
.in 20
- \fR
+\fR
.in 20
The resulting image is the green channel in \fIbase-image\fP replaced
with the green channel in \fIchange-image\fP. The other channels are
.in 15
.B "CopyBlue"
.in 20
- \fR
+\fR
.in 20
The resulting image is the blue channel in \fIbase-image\fP replaced
with the blue channel in \fIchange-image\fP. The other channels are
.in 15
.B "CopyOpacity"
.in 20
- \fR
+\fR
.in 20
The resulting image is the opacity channel in \fIbase-image\fP replaced
with the opacity channel in \fIchange-image\fP. The other channels are
.in 15
.B "CopyCyan"
.in 20
- \fR
+\fR
.in 20
The resulting image is the cyan channel in \fIbase-image\fP replaced
with the cyan channel in \fIchange-image\fP. The other channels are
.in 15
.B "CopyMagenta"
.in 20
- \fR
+\fR
.in 20
The resulting image is the magenta channel in \fIbase-image\fP
replaced with the magenta channel in \fIchange-image\fP. The other
.in 15
.B "CopyYellow"
.in 20
- \fR
+\fR
.in 20
The resulting image is the yellow channel in \fIbase-image\fP
replaced with the yellow channel in \fIchange-image\fP. The other
.in 15
.B "CopyBlack"
.in 20
- \fR
+\fR
.in 20
The resulting image is the black channel in \fIbase-image\fP
replaced with the black channel in \fIchange-image\fP. The other
.in 15
.B "cineon:colorspace={rgb|cineonlog}"
.in 20
- \fR
+\fR
.in 20
Use the cineon:colorspace option when reading a Cineon file to
specify the colorspace the Cineon file uses. This overrides the colorspace
.in 15
.B "dpx:bits-per-sample=<value>"
.in 20
- \fR
+\fR
.in 20
If the dpx:bits-per-sample key is defined, GraphicsMagick will write
DPX images with the specified bits per sample, overriding any existing
.in 15
.B "dpx:colorspace={rgb|cineonlog}"
.in 20
- \fR
+\fR
.in 20
Use the dpx:colorspace option when reading a DPX file to
specify the colorspace the DPX file uses. This overrides the colorspace
.in 15
.B "dpx:packing-method={packed|a|b|lsbpad|msbpad}"
.in 20
- \fR
+\fR
.in 20
DPX samples are output within 32-bit words. They may be tightly
packed end-to-end within the words ("packed"), padded with null bits to
.in 15
.B "dpx:pixel-endian={lsb|msb}"
.in 20
- \fR
+\fR
.in 20
Allows the user to specify the endian order of the pixels when
reading or writing the DPX files. Sometimes this is useful if the file is
.in 15
.B "dpx:swap-samples={true|false}"
.in 20
- \fR
+\fR
+.in 15
+.B "dpx:swap-samples-read={true|false}"
+.in 20
+\fR
+.in 15
+.B "dpx:swap-samples-write={true|false}"
+.in 20
+\fR
.in 20
GraphicsMagick strives to adhere to the DPX standard but certain
-aspects of the standard can be quite confusing. As a result, some 10-bit
-DPX files have Red and Blue interchanged, or Cb and Cr interchanged due
-to an different interpretation of the standard, or getting the wires
-crossed. The swap-samples option may be supplied when reading or writing
-in order to read or write using the necessary sample order.
+aspects of the standard can be quite confusing. As a result, some
+10-bit DPX files have Red and Blue interchanged, or Cb and Cr
+interchanged due to an different interpretation of the standard, or
+getting the wires crossed. The swap-samples option may be supplied
+when reading or writing in order to read or write using the necessary
+sample order. Use swap-samples-read when swapping should only occur
+in the reader, or swap-samples-write when swapping should only occur
+in the writer.
.in 15
.in 15
.B "gradient:direction={South|North|West|East|NorthWest|NorthEast|SouthWest|SouthEast}"
.in 20
- \fR
+\fR
.in 20
By default, the gradient coder produces a gradient from top to
bottom ("South"). Since GraphicsMagick 1.3.35, the gradient direction
.in 15
.B "jp2:rate=<value>"
.in 20
- \fR
+\fR
.in 20
Specify the compression factor to use while writing JPEG-2000
files. The compression factor is the reciprocal of the compression
.in 15
.B "jpeg:block-smoothing={true|false}"
.in 20
- \fR
+\fR
.in 20
Enables or disables block smoothing when reading a JPEG file
(default enabled).
.in 15
.B "jpeg:dct-method=<value>"
.in 20
- \fR
+\fR
.in 20
Selects the IJG JPEG library DCT implementation to use. The
encoding implementations vary in speed and encoding error. The
.in 15
.B "jpeg:fancy-upsampling={true|false}"
.in 20
- \fR
+\fR
.in 20
Enables or disables fancy upsampling when reading a JPEG file
(default enabled).
.in 15
.B "jpeg:max-scan-number=<value>"
.in 20
- \fR
+\fR
.in 20
Specifies an integer value for the maximum number of progressive
scans allowed in a JPEG file. The default maximum is 100 scans. This
.in 15
.B "jpeg:max-warnings=<value>"
.in 20
- \fR
+\fR
.in 20
Specifies an integer value for how many warnings are allowed for
any given error type before being promoted to a hard error. JPEG
.in 15
.B "jpeg:optimize-coding={true|false}"
.in 20
- \fR
+\fR
.in 20
Selects if huffman encoding should be used. Huffman encoding is enabled
by default, but may be disabled for very large images since it encoding
.in 15
.B "jpeg:preserve-settings"
.in 20
- \fR
+\fR
.in 20
If the jpeg:preserve-settings flag is defined, the JPEG encoder will
use the same "quality" and "sampling-factor" settings that were found
.in 15
.B "pcl:fit-to-page"
.in 20
- \fR
+\fR
.in 20
If the pcl:fit-to-page flag is defined, then the printer is
requested to scale the image to fit the page size (width and/or
.in 15
.B "mng:maximum-loops=<value>"
.in 20
- \fR
+\fR
.in 20
mng:maximum-loops specifies the maximum number of loops allowed to
be specified by a MNG LOOP chunk. Without an imposed limit, a MNG file
.in 15
.B "pdf:use-cropbox={true|false}"
.in 20
- \fR
+\fR
.in 20
If the pdf:use-cropbox flag is set to \fBtrue\fP, then
Ghostscript is requested to apply the PDF crop box.
.in 15
.B "pdf:stop-on-error={true|false}"
.in 20
- \fR
+\fR
.in 20
If the pdf:stop-on-error flag is set to \fBtrue\fP, then
Ghostscript is requested to stop processing the PDF when the first
.in 15
.B "ps:imagemask"
.in 20
- \fR
+\fR
.in 20
If the ps:imagemask flag is defined, the PS3 and EPS3 coders will
create Postscript files that render bilevel images with the Postscript
.in 15
.B "ptif:minimum-geometry=<geometry>"
.in 20
- \fR
+\fR
.in 20
If the ptif:minimum-geometry key is defined, GraphicsMagick will
use it to determine the minimum frame size to output when writing a
.in 15
.B "tiff:alpha={unspecified|associated|unassociated}"
.in 20
- \fR
+\fR
.in 20
Specify the TIFF alpha channel type when reading or writing TIFF files,
overriding the normal value. The default alpha channel type for new files
.in 15
.B "tiff:fill-order={msb2lsb|lsb2msb}"
.in 20
- \fR
+\fR
.in 20
If the tiff:fill-order key is defined, GraphicsMagick will use it to
determine the bit fill order used while writing TIFF files. The normal default
.in 15
.B "tiff:group-three-options=<value>"
.in 20
- \fR
+\fR
.in 20
If the tiff:group-three-options key is defined, GraphicsMagick
will use it to set the group3 options tag when writing
.in 15
.B "tiff:ignore-tags=<tags>"
.in 20
- \fR
+\fR
.in 20
If the tiff:ignore-tags key is defined, then it is used as a list
of comma-delimited integer TIFF tag values to ignore while reading the
.in 15
.B "tiff:report-warnings={false|true}"
.in 20
- \fR
+\fR
.in 20
If the tiff:report-warnings key is defined and set to \fBtrue\fP,
then TIFF warnings are reported as a warning exception rather than as
.in 15
.B "tiff:sample-format={unsigned|ieeefp}"
.in 20
- \fR
+\fR
.in 20
If the tiff:sample-format key is defined, GraphicsMagick will use it to
determine the sample format used while writing TIFF files. The default is
.in 15
.B "tiff:max-sample-value=<value>"
.in 20
- \fR
+\fR
.in 20
If the tiff:max-sample-value key is defined, GraphicsMagick will use the
assigned value as the maximum floating point value while reading or
.in 15
.B "tiff:min-sample-value=<value>"
.in 20
- \fR
+\fR
.in 20
If the tiff:min-sample-value key is defined, GraphicsMagick will use
the assigned value as the minimum floating point value while reading or
.in 15
.B "tiff:bits-per-sample=<value>"
.in 20
- \fR
+\fR
.in 20
If the tiff:bits-per-sample key is defined, GraphicsMagick will write
images with the specified bits per sample, overriding any existing depth
.in 15
.B "tiff:samples-per-pixel=<value>"
.in 20
- \fR
+\fR
.in 20
If the tiff:samples-per-pixel key is defined to a value, the TIFF coder
will write TIFF images with the defined samples per pixel, overriding any
.in 15
.B "tiff:rows-per-strip=<value>"
.in 20
- \fR
+\fR
.in 20
Allows the user to specify the number of rows per TIFF strip.
Rounded up to a multiple of 16 when using JPEG compression. Ignored when
.in 15
.B "tiff:strip-per-page=true"
.in 20
- \fR
+\fR
.in 20
Requests that the image is written in a single TIFF strip. This is
normally the default when group3 or group4 compression is requested
.in 15
.B "tiff:tile"
.in 20
- \fR
+\fR
.in 20
Enable writing tiled TIFF (rather than stripped) using the default tile
size. Tiled TIFF organizes the image as an array of smaller images
.in 15
.B "tiff:tile-geometry=<width>x<height>"
.in 20
- \fR
+\fR
.in 20
Specify the tile size to use while writing tiled TIFF. Width and
height should be a multiple of 16. If the value is not a multiple of 16,
.in 15
.B "tiff:tile-width=<width>"
.in 20
- \fR
+\fR
.in 20
Specify the tile width to use while writing tiled TIFF. The tile height
is then defaulted to an appropriate size. Width should be a multiple of
.in 15
.B "tiff:tile-height=<height>"
.in 20
- \fR
+\fR
.in 20
Specify the tile height to use while writing tiled TIFF. The tile width
is then defaulted to an appropriate size. Height should be a multiple of
.in 15
.B "tiff:webp-lossless={TRUE|FALSE}"
.in 20
- \fR
+\fR
.in 20
Specify a value of \fBTRUE\fP to enable lossless mode while
writing WebP-compressed TIFF files. The WebP \fBwebp:lossless\fP
.in 15
.B "tiff:zstd-compress-level=<value>"
.in 20
- \fR
+\fR
.in 20
Specify the compression level to use while writing Zstd-compressed
TIFF files. The valid range is 1 to 22. If this define is not
.in 15
.B "webp:lossless={true|false}"
.in 20
- \fR
+\fR
.in 20
Enable lossless encoding.
.in 15
.B "webp:method={0-6}"
.in 20
- \fR
+\fR
.in 20
Quality/speed trade-off.
.in 15
.B "webp:image-hint={default,graph,photo,picture}"
.in 20
- \fR
+\fR
.in 20
Hint for image type.
.in 15
.B "webp:target-size=<integer>"
.in 20
- \fR
+\fR
.in 20
Target size in bytes.
.in 15
.B "webp:target-psnr=<float>"
.in 20
- \fR
+\fR
.in 20
Minimal distortion to try to achieve.
.in 15
.B "webp:segments={1-4}"
.in 20
- \fR
+\fR
.in 20
Maximum number of segments to use.
.in 15
.B "webp:sns-strength={0-100}"
.in 20
- \fR
+\fR
.in 20
Spatial Noise Shaping.
.in 15
.B "webp:filter-strength={0-100}"
.in 20
- \fR
+\fR
.in 20
Filter strength.
.in 15
.B "webp:filter-sharpness={0-7}"
.in 20
- \fR
+\fR
.in 20
Filter sharpness.
.in 15
.B "webp:filter-type={0,1}"
.in 20
- \fR
+\fR
.in 20
Filtering type. 0 = simple, 1 = strong (only used if
filter-strength > 0 or autofilter is enabled).
.in 15
.B "webp:auto-filter={true|false}"
.in 20
- \fR
+\fR
.in 20
Auto adjust filter's strength.
.in 15
.B "webp:alpha-compression=<integer>"
.in 20
- \fR
+\fR
.in 20
Algorithm for encoding the alpha plane (0 = none, 1 = compressed
with WebP lossless). Default is 1.
.in 15
.B "webp:alpha-filtering=<integer>"
.in 20
- \fR
+\fR
.in 20
Predictive filtering method for alpha plane. 0: none, 1: fast, 2:
best. Default is 1.
.in 15
.B "webp:alpha-quality={0-100}"
.in 20
- \fR
+\fR
.in 20
Between 0 (smallest size) and 100 (lossless). Default is 100.
.in 15
.B "webp:pass=[1..10]"
.in 20
- \fR
+\fR
.in 20
Number of entropy-analysis passes.
.in 15
.B "webp:show-compressed={true|false}"
.in 20
- \fR
+\fR
.in 20
Export the compressed picture back. In-loop filtering is not
applied.
.in 15
.B "webp:preprocessing=[0,1,2]"
.in 20
- \fR
+\fR
.in 20
0=none, 1=segment-smooth, 2=pseudo-random dithering
.in 15
.B "webp:partitions=[0-3]"
.in 20
- \fR
+\fR
.in 20
log2(number of token partitions) in [0..3]. Default is 0 for
easier progressive decoding.
.in 15
.B "webp:partition-limit={0-100}"
.in 20
- \fR
+\fR
.in 20
Quality degradation allowed to fit the 512k limit on prediction
modes coding (0: no degradation, 100: maximum possible
.in 15
.B "webp:emulate-jpeg-size={true|false}"
.in 20
- \fR
+\fR
.in 20
If true, compression parameters will be remapped to better match
the expected output size from JPEG compression. Generally, the output
.in 15
.B "webp:thread-level=<integer>"
.in 20
- \fR
+\fR
.in 20
If non-zero, try and use multi-threaded encoding.
.in 15
.B "webp:low-memory={true|false}"
.in 20
- \fR
+\fR
.in 20
If set, reduce memory usage (but increase CPU use)
.in 15
.B "webp:use-sharp-yuv={true|false}"
.in 20
- \fR
+\fR
.in 20
If set, if needed, use sharp (and slow) RGB->YUV conversion
If the image does not have a matte channel, create an opaque one.
-Use \fB+matte\fP to ignore the matte channel and to avoid writing a
+Use \fB+matte\fP to ignore the matte channel (treats it as opaque) and to avoid writing a
matte channel in the output file.
+
+For the compare command, \fB-matte\fP will add an opaque matte
+channel to images if they do not already have a matte channel, and
+matte will be enabled for both images. Likewise, if \fB+matte\fP is
+used, the matte channel is disabled for both images. This makes it
+easier to compare images regardless of if they already have a matte
+channel.
.TP
.B "-mattecolor \fI<color>"\fP
\fRspecify the color to be used with the \fB-frame\fP option
Select an operator from \fBAdd\fP, \fBAnd\fP, \fBAssign\fP,
\fBDepth\fP, \fBDivide\fP, \fBGamma\fP, \fBNegate\fP,
\fBLShift\fP, \fBLog\fP, \fBMax\fP, \fBMin\fP, \fBMultiply\fP,
-\fBOr\fP, \fBPow\fP \fBRShift\fP, \fBSubtract\fP,
+\fBOr\fP, \fBPow\fP, \fBRShift\fP, \fBSubtract\fP,
\fBThreshold\fP, \fBThreshold-White\fP,
\fBThreshold-White-Negate\fP, \fBThreshold-Black\fP,
\fBThreshold-Black-Negate\fP, \fBXor\fP, \fBNoise-Gaussian\fP,
.in 15
.B "Add"
.in 20
- \fR
+\fR
.in 20
Result is rvalue added to channel value.
.in 15
.B "And"
.in 20
- \fR
+\fR
.in 20
Result is the logical AND of rvalue with channel value.
.in 15
.B "Assign"
.in 20
- \fR
+\fR
.in 20
Result is rvalue.
.in 15
.B "Depth"
.in 20
- \fR
+\fR
.in 20
Result is channel value adjusted so that it may be (approximately)
stored in the specified number of bits without additional loss.
.in 15
.B "Divide"
.in 20
- \fR
+\fR
.in 20
Result is channel value divided by rvalue.
.in 15
.B "Gamma"
.in 20
- \fR
+\fR
.in 20
Result is channel value gamma adjusted by rvalue.
.in 15
.B "LShift"
.in 20
- \fR
+\fR
.in 20
Result is channel value bitwise left shifted by rvalue bits.
.in 15
.B "Log"
.in 20
- \fR
+\fR
.in 20
Result is computed as log(value*rvalue+1)/log(rvalue+1).
.in 15
.B "Max"
.in 20
- \fR
+\fR
.in 20
Result is assigned to rvalue if rvalue is greater than value.
.in 15
.B "Min"
.in 20
- \fR
+\fR
.in 20
Result is assigned to rvalue if rvalue is less than value.
.in 15
.B "Multiply"
.in 20
- \fR
+\fR
.in 20
Result is channel value multiplied by rvalue.
.in 15
.B "Negate"
.in 20
- \fR
+\fR
.in 20
Result is inverse of channel value (like a film negative). An rvalue
must be supplied but is currently not used. Inverting the image twice
.in 15
.B "Or"
.in 20
- \fR
+\fR
.in 20
Result is the logical OR of rvalue with channel value.
.in 15
.B "Pow"
.in 20
- \fR
+\fR
.in 20
Result is computed as pow(value,rvalue). Similar to Gamma except that
rvalue is not inverted.
.in 15
.B "RShift"
.in 20
- \fR
+\fR
.in 20
Result is channel value bitwise right shifted by rvalue bits.
.in 15
.B "Subtract"
.in 20
- \fR
+\fR
.in 20
Result is channel value minus rvalue.
.in 15
.B "Threshold"
.in 20
- \fR
+\fR
.in 20
Result is maximum (white) if channel value is greater than rvalue,
or minimum (black) if it is less than or equal to rvalue. If \fBall\fP
.in 15
.B "Threshold-white"
.in 20
- \fR
+\fR
.in 20
Result is maximum (white) if channel value is greater than rvalue and
is unchanged if it is less than or equal to rvalue. This can be used to
.in 15
.B "Threshold-White-Negate"
.in 20
- \fR
+\fR
.in 20
Result is set to black if channel value is greater than
rvalue and is unchanged if it is less than or equal to rvalue. If
.in 15
.B "Threshold-black"
.in 20
- \fR
+\fR
.in 20
Result is minimum (black) if channel value is less than than rvalue
and is unchanged if it is greater than or equal to rvalue. This can be
.in 15
.B "Threshold-Black-Negate"
.in 20
- \fR
+\fR
.in 20
Result is set to white if channel value is less than than
rvalue and is unchanged if it is greater than or equal to rvalue. If
.in 15
.B "Xor"
.in 20
- \fR
+\fR
.in 20
Result is the logical XOR of rvalue with channel value. An
interesting property of XOR is that performing the same operation twice
.in 15
.B "Noise-Gaussian"
.in 20
- \fR
+\fR
.in 20
Result is the current channel value modulated with gaussian noise
according to the intensity specified by rvalue.
.in 15
.B "Noise-Impulse"
.in 20
- \fR
+\fR
.in 20
Result is the current channel value modulated with impulse noise
according to the intensity specified by rvalue.
.in 15
.B "Noise-Laplacian"
.in 20
- \fR
+\fR
.in 20
Result is the current channel value modulated with laplacian noise
according to the intensity specified by rvalue.
.in 15
.B "Noise-Multiplicative"
.in 20
- \fR
+\fR
.in 20
Result is the current channel value modulated with multiplicative
gaussian noise according to the intensity specified by rvalue.
.in 15
.B "Noise-Poisson"
.in 20
- \fR
+\fR
.in 20
Result is the current channel value modulated with poisson noise
according to the intensity specified by rvalue.
.in 15
.B "Noise-Random"
.in 20
- \fR
+\fR
.in 20
Result is the current channel value modulated with random (uniform
distribution) noise according to the intensity specified by rvalue.
.in 15
.B "Noise-Uniform"
.in 20
- \fR
+\fR
.in 20
Result is the channel value with uniform noise applied according to
the intensity specified by rvalue.
.in 15
.B "radius"
.in 20
- \fR
+\fR
.in 20
The radius of the Gaussian, in pixels, not counting the center pixel (default 0).
.in 15
.B "sigma"
.in 20
- \fR
+\fR
.in 20
The standard deviation of the Gaussian, in pixels (default 1.0).
.in 15
.B "amount"
.in 20
- \fR
+\fR
.in 20
The percentage of the difference between the original and the blur image that
.in 15
.B "threshold"
.in 20
- \fR
+\fR
.in 20
The threshold, as a fraction of MaxRGB, needed to apply the difference
.in 15
.B "Constant"
.in 20
- \fR
+\fR
.in 20
Use the image background color.
.in 15
.B "Edge"
.in 20
- \fR
+\fR
.in 20
Extend the edge pixel toward infinity (default).
.in 15
.B "Mirror"
.in 20
- \fR
+\fR
.in 20
Mirror the image.
.in 15
.B "Tile"
.in 20
- \fR
+\fR
.in 20
Tile the image.
.in 15
.B "\fBCtl+O\fP"
.in 20
- \fR
+\fR
.in 20
Press to load an image from a file.
.in 15
.in 15
.B "\fBspace\fP"
.in 20
- \fR
+\fR
.in 20
Press to display the next image in the sequence.
.in 15
.in 15
.B "\fB<\fP"
.in 20
- \fR
+\fR
.in 20
Press to speed-up the display of the images. Refer to
\fB-delay\fP for more information.
.in 15
.B "\fB>\fP"
.in 20
- \fR
+\fR
.in 20
Press to slow the display of the images. Refer to
\fB-delay\fP for more information.
.in 15
.B "\fB?\fP"
.in 20
- \fR
+\fR
.in 20
Press to display information about the image. Press
any key or button to erase the information.
.in 15
.B "\fBF1\fP"
.in 20
- \fR
+\fR
.in 20
Press to display helpful information about \fBanimate(1)\fP.
.in 15
.in 15
.B "\fBCtl-q\fP"
.in 20
- \fR
+\fR
.in 20
Press to discard all images and exit program.
.in 15
.in 15
.B "\fBbackground\fP \fB(\fP\fIclass\fP \fBBackground)\fP"
.in 20
- \fR
+\fR
.in 20
Specifies the preferred color to use for the Image window background. The
.in 15
.B "\fBborderColor\fP \fB(\fP\fIclass\fP \fBBorderColor)\fP"
.in 20
- \fR
+\fR
.in 20
Specifies the preferred color to use for the Image window border. The default
.in 15
.B "\fBborderWidth\fP \fB(\fP\fIclass\fP \fBBorderWidth)\fP"
.in 20
- \fR
+\fR
.in 20
Specifies the width in pixels of the Image window border. The default is
.in 15
.B "\fBfont\fP \fB(\fP\fIclass\fP \fBFont\fP \fBor\fP \fBFontList)\fP"
.in 20
- \fR
+\fR
.in 20
Specifies the name of the preferred font to use in normal formatted text.
.in 15
.B "\fBforeground\fP \fB(\fP\fIclass\fP \fBForeground)\fP"
.in 20
- \fR
+\fR
.in 20
Specifies the preferred color to use for text within the Image window.
.in 15
.B "\fBgeometry\fP \fB(\fP\fIclass\fP \fBgeometry)\fP"
.in 20
- \fR
+\fR
.in 20
Specifies the preferred size and position of the image window. It is not
.in 15
.B "\fBiconGeometry\fP \fB(\fP\fIclass\fP \fBIconGeometry)\fP"
.in 20
- \fR
+\fR
.in 20
Specifies the preferred size and position of the application when iconified.
.in 15
.B "\fBiconic\fP \fB(\fP\fIclass\fP \fBIconic)\fP"
.in 20
- \fR
+\fR
.in 20
This resource indicates that you would prefer that the application's windows
.in 15
.B "\fBmatteColor\fP \fB(\fP\fIclass\fP \fBMatteColor)\fP"
.in 20
- \fR
+\fR
.in 20
Specify the color of windows. It is used for the backgrounds of windows,
.in 15
.B "\fBname\fP \fB(\fP\fIclass\fP \fBName)\fP"
.in 20
- \fR
+\fR
.in 20
This resource specifies the name under which resources for the application
.in 15
.B "\fBsharedMemory\fP \fB(\fP\fIclass\fP \fBSharedMemory)\fP"
.in 20
- \fR
+\fR
.in 20
This resource specifies whether animate should attempt use shared memory
.in 15
.B "\fBtext_font\fP \fB(\fP\fIclass\fP \fBtextFont)\fP"
.in 20
- \fR
+\fR
.in 20
Specifies the name of the preferred font to use in fixed (typewriter style)
.in 15
.B "\fBtitle\fP \fB(\fP\fIclass\fP \fBTitle)\fP"
.in 20
- \fR
+\fR
.in 20
This resource specifies the title to be used for the Image window. This
.in 15
.B "<image>"
.in 20
- \fR
+\fR
.in 20
background, color, id, size
.in 15
.in 15
.B "<group>"
.in 20
- \fR
+\fR
.in 20
Define a new group of image objects. By default, images are only
.in 15
.B "<read>"
.in 20
- \fR
+\fR
.in 20
filename
.in 15
.in 15
.B "<write>"
.in 20
- \fR
+\fR
.in 20
filename
.in 15
.in 15
.B "<get>"
.in 20
- \fR
+\fR
.in 20
Get any attribute recognized by
PerlMagick's GetAttribute() and stores it as an image attribute for later
.in 15
.B "<set>"
.in 20
- \fR
+\fR
.in 20
background, bordercolor, clip-mask, colorspace, density,
magick, mattecolor, opacity. Set an attribute recognized by
.in 15
.B "<profile>"
.in 20
- \fR
+\fR
.in 20
[profilename]
.in 15
.in 15
.B "<border>"
.in 20
- \fR
+\fR
.in 20
fill, geometry, height, width
.in 15
.in 15
.B "<blur>"
.in 20
- \fR
+\fR
.in 20
radius, sigma
.in 15
.in 15
.B "<charcoal>"
.in 20
- \fR
+\fR
.in 20
radius, sigma
.in 15
.in 15
.B "<chop>"
.in 20
- \fR
+\fR
.in 20
geometry, height, width, x, y
.in 15
.in 15
.B "<crop>"
.in 20
- \fR
+\fR
.in 20
geometry, height, width, x, y
.in 15
.in 15
.B "<composite>"
.in 20
- \fR
+\fR
.in 20
compose, geometry, gravity, image, x, y
.in 15
.in 15
.B "<despeckle>"
.in 20
- \fR
+\fR
.in 15
.B "<emboss>"
.in 20
- \fR
+\fR
.in 20
radius, sigma
.in 15
.in 15
.B "<enhance>"
.in 20
- \fR
+\fR
.in 15
.B "<equalize>"
.in 20
- \fR
+\fR
.in 15
.B "<edge>"
.in 20
- \fR
+\fR
.in 20
radius
.in 15
.in 15
.B "<flip>"
.in 20
- \fR
+\fR
.in 15
.B "<flop>"
.in 20
- \fR
+\fR
.in 15
.B "<frame>"
.in 20
- \fR
+\fR
.in 20
fill, geometry, height, width, x, y, inner, outer
.in 15
.in 15
.B "<flatten>"
.in 20
- \fR
+\fR
.in 15
.B "<get>"
.in 20
- \fR
+\fR
.in 20
height, width
.in 15
.in 15
.B "<gamma>"
.in 20
- \fR
+\fR
.in 20
red, green, blue
.in 15
.in 15
.B "<image>"
.in 20
- \fR
+\fR
.in 20
background, color, id, size
.in 15
.in 15
.B "<implode>"
.in 20
- \fR
+\fR
.in 20
amount
.in 15
.in 15
.B "<magnify>"
.in 20
- \fR
+\fR
.in 15
.B "<minify>"
.in 20
- \fR
+\fR
.in 15
.B "<medianfilter>"
.in 20
- \fR
+\fR
.in 20
radius
.in 15
.in 15
.B "<normalize>"
.in 20
- \fR
+\fR
.in 15
.B "<oilpaint>"
.in 20
- \fR
+\fR
.in 20
radius
.in 15
.in 15
.B "<print>"
.in 20
- \fR
+\fR
.in 20
output
.in 15
.in 15
.B "<profile>"
.in 20
- \fR
+\fR
.in 20
[profilename]
.in 15
.in 15
.B "<read>"
.in 20
- \fR
+\fR
.in 15
.B "<resize>"
.in 20
- \fR
+\fR
.in 20
blur, filter, geometry, height, width
.in 15
.in 15
.B "<roll>"
.in 20
- \fR
+\fR
.in 20
geometry, x, y
.in 15
.in 15
.B "<rotate>"
.in 20
- \fR
+\fR
.in 20
degrees
.in 15
.in 15
.B "<reducenoise>"
.in 20
- \fR
+\fR
.in 20
radius
.in 15
.in 15
.B "<sample>"
.in 20
- \fR
+\fR
.in 20
geometry, height, width
.in 15
.in 15
.B "<scale>"
.in 20
- \fR
+\fR
.in 20
geometry, height, width
.in 15
.in 15
.B "<sharpen>"
.in 20
- \fR
+\fR
.in 20
radius, sigma
.in 15
.in 15
.B "<shave>"
.in 20
- \fR
+\fR
.in 20
geometry, height, width
.in 15
.in 15
.B "<shear>"
.in 20
- \fR
+\fR
.in 20
x, y
.in 15
.in 15
.B "<solarize>"
.in 20
- \fR
+\fR
.in 20
threshold
.in 15
.in 15
.B "<spread>"
.in 20
- \fR
+\fR
.in 20
radius
.in 15
.in 15
.B "<stegano>"
.in 20
- \fR
+\fR
.in 20
image
.in 15
.in 15
.B "<stereo>"
.in 20
- \fR
+\fR
.in 20
image
.in 15
.in 15
.B "<swirl>"
.in 20
- \fR
+\fR
.in 20
degrees
.in 15
.in 15
.B "<texture>"
.in 20
- \fR
+\fR
.in 20
image
.in 15
.in 15
.B "<threshold>"
.in 20
- \fR
+\fR
.in 20
threshold
.in 15
.in 15
.B "<transparent>"
.in 20
- \fR
+\fR
.in 20
color
.in 15
.in 15
.B "<trim>"
.in 20
- \fR
+\fR
.SH GM CONVERT
.B "
\fBdisplay image centered on a backdrop\fP"
.in 20
- \fR
+\fR
.in 20
This backdrop covers the entire workstation screen and is useful for hiding
.B "
\fBconfirm on program exit\fP"
.in 20
- \fR
+\fR
.in 20
Ask for a confirmation before exiting the \fBdisplay(1)\fP program.
.B "
\fBcorrect image for display gamma\fP"
.in 20
- \fR
+\fR
.in 20
If the image has a known gamma, the gamma is corrected to match that of
.B "
\fBdisplay warning messages\fP"
.in 20
- \fR
+\fR
.in 20
Display any warning messages.
.B "
\fBapply Floyd/Steinberg error diffusion to image\fP"
.in 20
- \fR
+\fR
.in 20
The basic strategy of dithering is to trade intensity resolution for spatial
.B "
\fBuse a shared colormap for colormapped X visuals\fP"
.in 20
- \fR
+\fR
.in 20
This option only applies when the default X server visual is
.B "
\fBdisplay images as an X server pixmap\fP"
.in 20
- \fR
+\fR
.in 20
Images are maintained as a XImage by default. Set this resource to True
# Number of tests we plan to execute
test_plan_fn 12
+# Identity for level 12 produces a 1728x1728 pixels image.
+# Identity for level 10 produces a 1000x1000 pixels image.
OUTFILE=HaldClutIdentity_out.miff
levels='2 7 8 10 12'
for level in $levels
# Package base version. This is is the numeric version suffix applied to
# PACKAGE_NAME (e.g. "1.2").
-PACKAGE_VERSION='1.3.35'
+PACKAGE_VERSION='1.3.36'
#
# Package name plus version string.
#
# Formal Package release date
# Set to string "unreleased" if package is not a formal release.
-PACKAGE_RELEASE_DATE="2020-02-23"
+PACKAGE_RELEASE_DATE="20201226"
+#PACKAGE_RELEASE_DATE="unreleased"
#
# Date of last ChangeLog update
#
# Magick library versioning
#
-MAGICK_LIBRARY_CURRENT=24
+MAGICK_LIBRARY_CURRENT=25
MAGICK_LIBRARY_REVISION=0
-MAGICK_LIBRARY_AGE=21
+MAGICK_LIBRARY_AGE=22
#
# Magick++ library versioning
#
-MAGICK_PLUS_PLUS_LIBRARY_CURRENT=16
-MAGICK_PLUS_PLUS_LIBRARY_REVISION=3
-MAGICK_PLUS_PLUS_LIBRARY_AGE=4
+MAGICK_PLUS_PLUS_LIBRARY_CURRENT=17
+MAGICK_PLUS_PLUS_LIBRARY_REVISION=0
+MAGICK_PLUS_PLUS_LIBRARY_AGE=5
#
# Magick Wand library versioning
#
MAGICK_WAND_LIBRARY_CURRENT=11
-MAGICK_WAND_LIBRARY_REVISION=4
+MAGICK_WAND_LIBRARY_REVISION=5
MAGICK_WAND_LIBRARY_AGE=9
CurrentContext->primitive=drawing_wand->mvg;
(void) LogMagickEvent(DrawEvent,GetMagickModule(),"MVG:\n'%s'\n",
drawing_wand->mvg);
+ /* SetImageAttribute concatenates values! Delete with NULL */
+ (void) SetImageAttribute(drawing_wand->image,"[MVG]",NULL);
+ (void) SetImageAttribute(drawing_wand->image,"[MVG]",CurrentContext->primitive);
status=DrawImage(drawing_wand->image, CurrentContext);
CurrentContext->primitive=(char *) NULL;
return status;
return status;
}
+#define ThrowAPIException(wand) \
+{ \
+ ExceptionType severity; \
+ char *description=MagickGetException(wand,&severity); \
+ (void) fflush(stdout); \
+ (void) fprintf(stderr,"%s %s %d %.1024s\n",GetMagickModule(),description); \
+ free(description); \
+ break; \
+}
+
int main ( int argc, char **argv )
{
MagickWand
if ( argc != 2 )
{
- printf ( "Usage: %s filename\n", argv[0] );
- exit( 1 );
+ fprintf ( stderr, "Usage: %s filename\n", argv[0] );
+ exit( EXIT_FAILURE );
}
outfile[MaxTextExtent-1]='\0';
(void) strncpy( outfile, argv[1], MaxTextExtent-1 );
- if (LocaleNCompare("drawtest",argv[0],7) == 0)
- InitializeMagick((char *) NULL);
- else
- InitializeMagick(*argv);
+ InitializeMagick(*argv);
/*
* Create canvas image
*/
- canvas=NewMagickWand();
- if (MagickFail != status)
- if ((status = MagickSetSize( canvas, 596, 842 )) == MagickFail)
- printf ( "Failed to set image size\n" );
- if (MagickPass == status)
- if ((status = MagickReadImage( canvas, "xc:white" )) == MagickFail)
- printf ( "Failed to read canvas image %s\n", MagickGetFilename(canvas) );
+ do
+ {
+ canvas=NewMagickWand();
+ if ((status = MagickSetSize( canvas, 596, 842 )) == MagickFail)
+ {
+ fprintf ( stderr, "Failed to set image size\n" );
+ ThrowAPIException(canvas);
+ }
- /*
- * Scribble on image
- */
- if (MagickPass == status)
- if ((status = ScribbleImage( canvas )) == MagickFail)
- printf ( "Failed draw on image\n" );
+ fprintf(stderr, "Set the image size\n");
- /*
- * Set depth to 8
- */
- if (MagickPass == status)
- status=MagickSetImageDepth( canvas, 8);
+ if ((status = MagickReadImage( canvas, "xc:white" )) == MagickFail)
+ {
+ char *canvas_name = MagickGetFilename(canvas);
+ fprintf ( stderr, "Failed to read canvas image %s\n", canvas_name );
+ free(canvas_name);
+ ThrowAPIException(canvas);
+ }
- /*
- * Set RLE compression
- */
- if (MagickPass == status)
- status=MagickSetImageCompression( canvas, RLECompression);
+ fprintf(stderr, "Got the image canvas image\n");
- /*
- * Save image to file
- */
- if (MagickPass == status)
- if ((status = MagickWriteImage ( canvas, outfile )) == MagickFail)
- printf ( "Failed to write image file %s\n", outfile );
+ /*
+ * Scribble on image
+ */
+ if ((status = ScribbleImage( canvas )) == MagickFail)
+ {
+ fprintf ( stderr, "Failed draw on image\n" );
+ ThrowAPIException(canvas);
+ }
+
+ fprintf(stderr, "Scribbled on the image\n");
+
+ /*
+ * Set depth to 8
+ */
+ if ((status=MagickSetImageDepth( canvas, 8)) == MagickFail)
+ {
+ fprintf ( stderr, "Failed to set the image depth\n" );
+ ThrowAPIException(canvas);
+ }
+
+ fprintf(stderr, "Set the canvas depth\n");
+
+ /*
+ * Set RLE compression
+ */
+ if ((status=MagickSetImageCompression( canvas, RLECompression)) == MagickFail)
+ {
+ fprintf ( stderr, "Failed to set the image compression\n" );
+ ThrowAPIException(canvas);
+ }
+
+ fprintf(stderr, "Set the image compression\n");
+
+ /*
+ * Save image to file
+ */
+ if ((status = MagickWriteImage ( canvas, outfile )) == MagickFail)
+ {
+ fprintf ( stderr, "Failed to write image file %s\n", outfile );
+ ThrowAPIException(canvas);
+ }
+
+ fprintf(stderr, "Wrote the output file\n");
+
+ } while (0);
DestroyMagickWand( canvas );
DestroyMagick();
- return (MagickPass == status ? 0 : 1);
+ return (MagickPass == status ? EXIT_SUCCESS : EXIT_FAILURE);
}
DestroyDrawInfo(draw_info);
return(False);
}
+ /* SetImageAttribute concatenates values! Delete with NULL */
+ (void) SetImageAttribute(wand->image,"[MVG]",NULL);
+ (void) SetImageAttribute(wand->image,"[MVG]",draw_info->primitive);
status=DrawImage(wand->image,draw_info);
if (status == False)
CopyException(&wand->exception,&wand->image->exception);
%
% o wand: The magick wand.
%
-% o number_factoes: The number of factors.
+% o number_factors: The number of factors. This value should be evenly
+% divisible by two.
%
% o sampling_factors: An array of doubles representing the sampling factor
-% for each color component (in RGB order).
+% for each color component (in RGB order). Two double values must be
+% provided for each color component.
%
*/
WandExport unsigned int MagickSetSamplingFactors(MagickWand *wand,
assert(wand != (MagickWand *) NULL);
assert(wand->signature == MagickSignature);
+ /*
+ Sampling factor is stored in a comma-delimited list of geometry
+ WxH specifications matching the sscanf() specification
+ %lfx%lf,%lfx%lf,%lfx%lf,%lfx%lf
+ */
MagickFreeMemory(wand->image_info->sampling_factor);
if (number_factors == 0)
return(True);
for (i=0; i < (long) (number_factors-1); i++)
{
- (void) MagickFormatString(sampling_factor,MaxTextExtent,"%g,",
- sampling_factors[i]);
+ (void) MagickFormatString(sampling_factor,MaxTextExtent,"%g%c",
+ sampling_factors[i], i % 2 ? ',' : 'x');
(void) ConcatenateString(&wand->image_info->sampling_factor,
sampling_factor);
}
#define ThrowAPIException(wand) \
{ \
description=MagickGetException(wand,&severity); \
+ (void) fflush(stdout); \
(void) fprintf(stderr,"%s %s %d %.1024s\n",GetMagickModule(),description); \
free(description); \
- exit(-1); \
+ exit(EXIT_FAILURE); \
}
int main(int argc,char **argv)
if ((columns != 640) || (rows != 480))
{
(void) fprintf(stderr,"Unexpected magick wand size\n");
- exit(1);
+ exit(EXIT_FAILURE);
}
(void) fprintf(stdout,"Reading images...\n");
{
if (pixels[i] != primary_colors[i])
{
(void) fprintf(stderr,"Get pixels does not match set pixels\n");
- exit(1);
+ exit(EXIT_FAILURE);
}
}
(void) MagickSetImageIndex(magick_wand,3);
MagickResetIterator(magick_wand);
while (MagickNextImage(magick_wand) != False)
{
+ static const double sampling_factors[6] = { 1, 1, 1, 1, 1, 1 };
+ MagickSetSamplingFactors(magick_wand,sizeof(sampling_factors)/sizeof(sampling_factors[0]), sampling_factors);
MagickSetImageDepth( magick_wand, 8);
MagickSetImageCompression( magick_wand, RLECompression);
}
if (status == False)
ThrowAPIException(magick_wand);
DestroyMagickWand(magick_wand);
- return(0);
+ return(EXIT_SUCCESS);
}
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2001-12-28 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Even more features and options were added to conjure</li>
+<li>Added CropBox support to PDF writer</li>
+</ul>
+</blockquote>
+<p>2001-12-26 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Conjure now supports having a list of files for the script to
+process being passed on the command line.</li>
+<li>More features and options were added to conjure</li>
+</ul>
+</blockquote>
+<p>2001-12-25 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Made a huge number of improvements to conjure. It now supports
+over 15 different commands for manipulating your images.</li>
+</ul>
+</blockquote>
+<p>2001-12-24 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Started a new scripting language utility, conjure.</li>
+</ul>
+</blockquote>
+<p>2001-12-20 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Display the search path in the event a utility cannot find a
+particular configuration file (thanks to <a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>)</li>
+</ul>
+</blockquote>
+<p>2001-12-14 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed some bugs in the new composite operators.</li>
+</ul>
+</blockquote>
+<p>2001-12-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added native BLOB support to coders/wmf.c.</li>
+</ul>
+</blockquote>
+<p>2001-12-13 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added new composite operators to support PSD/XCF
+layer compositing: NoCompositeOp, DarkenCompositeOp,
+LightenCompositeOp, HueCompositeOp, SaturateCompositeOp,
+ValueCompositeOp, ColorizeCompositeOp, LuminizeCompositeOp,
+ScreenCompositeOp, OverlayCompositeOp.</li>
+<li>Modified the PSD coder to set the appropriate composite
+operator.</li>
+<li>Modified the XCF coder to set the appropriate composite
+operator.</li>
+</ul>
+</blockquote>
+<p>2001-12-10 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Removed the flatten option from ImageInfo.</li>
+<li>Added new compose member to ImageInfo that defines which of
+the composite operators to use when flattening an image.</li>
+</ul>
+</blockquote>
+<p>2001-12-09 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added new member to ImageInfo, flatten, used by PSD and XCF
+to determine whether to flatten an image when read.</li>
+<li>PSD and XCF now respect image_info->flatten.</li>
+<li>Fixed bug in XCF loader when loading layered image as layers.</li>
+<li>Modified the convert program to set image_info->flatten if
+-flatten is specified; we still call FlattenImages for other
+formats that don't respect image_info->flatten.</li>
+<li>Modified Magick++'s Image class to support image_info->flatten.</li>
+</ul>
+</blockquote>
+<p>2001-12-08 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Improvements to the Photoshop (PSD) coder: 1) added support
+for Duotone images loaded as grayscale as per PSD docs; and 2)
+added option to composite layers when reading respects layer
+visibility setting.</li>
+</ul>
+</blockquote>
+<p>2001-12-07 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>-dissolve wasn't working for the composite program (thanks to
+Rick Manbry).</li>
+<li>DCM coder failed to read a valid DCM image file.</li>
+</ul>
+</blockquote>
+<p>2001-12-06 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Stream buffer was not being freed in ReadStream().</li>
+</ul>
+</blockquote>
+<p>2001-12-05 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Corrected bias when downsizing an image with ResizeImage().</li>
+</ul>
+</blockquote>
+<p>2001-11-25 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>AcquireImagePixels() can accept (x,y) outside the image area
+(e.g. AcquireImagePixels(image,-3,-3,7,7,exception)).</li>
+</ul>
+</blockquote>
+<p>2001-11-22 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added limited SVG gradient support.</li>
+</ul>
+</blockquote>
+<p>2001-11-21 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added API method, PingBlob().</li>
+</ul>
+</blockquote>
+<p>2001-11-14 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Moved a few pixel related defines (e.g. Downscale()) to
+a corresponding method to enforce strong type checking at
+compile time.</li>
+</ul>
+</blockquote>
+<p>2001-11-12 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Previously ImageMagick did not write 8-bit ASCII PPM/PGM files
+when QuantumDepth == 16.</li>
+<li>Added 'id' as an image attribute in PerlMagick (returns
+ImageMagick registry ID).</li>
+</ul>
+</blockquote>
+<p>2001-11-10 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added SVG pattern support.</li>
+<li>Changed default background color to none.</li>
+</ul>
+</blockquote>
+<p>2001-11-06 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added support of reading and writing 16-bit raw PPM/PGM files.</li>
+</ul>
+</blockquote>
+<p>2001-11-05 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added -level to convert/mogrify (suggested by
+<a class="reference external" href="mailto:mericson%40phillynews.kom">mericson<span>@</span>phillynews<span>.</span>kom</a>).</li>
+</ul>
+</blockquote>
+<p>2001-11-04 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>-shadow/-shade were not distiguished.</li>
+</ul>
+</blockquote>
+<p>2001-11-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/Makefile.PL.in: Install PerlMagick using
+ImageMagick's configure prefix.</li>
+</ul>
+</blockquote>
+<p>2001-11-02 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Typecast offset to unsigned long in coders/pdf.c.</li>
+</ul>
+</blockquote>
+<p>2001-11-01 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Convert's -flatten, -average, etc. failed with an assert error.</li>
+</ul>
+</blockquote>
+<p>2001-10-30 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added support for On-the-air bitmap.</li>
+</ul>
+</blockquote>
+<p>2001-09-29 Glenn <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>When the delay setting for an image is greater than 4cs, duplicate
+frames are inserted to achieve the desired delay while creating MPEG
+files (contributed by Lawrence Livermore National Laboratory (LLNL)).</li>
+</ul>
+</blockquote>
+<p>2001-10-29 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ImageMagick now has a registry for storing image blobs.</li>
+</ul>
+</blockquote>
+<p>2001-10-26 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added VMS patches (thanks to Jouk Jansen).</li>
+</ul>
+</blockquote>
+<p>2001-10-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed parsing bug for decorate #FFFFFF.</li>
+</ul>
+</blockquote>
+<p>2001-10-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added tests for mpeg2 library to configure.</li>
+</ul>
+</blockquote>
+<p>2001-10-22 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added a MPEG coder module.</li>
+<li>Added ImageType member to the image_info structure (suggested
+by Glenn)</li>
+</ul>
+</blockquote>
+<p>2001-10-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Eliminated libMagick.so dependency on libxml by not listing -lxml
+when doing modules link.</li>
+</ul>
+</blockquote>
+<p>2001-10-18 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Eliminated the libMagick.so dependancy on libtiff by moving
+Huffman2DEncodeImage() from magick/compress.c to coders/pdf.c,
+coders/ps2.c and coders/ps3.c (suggested by Bob Friesenhahn).
+This change has the side-effect of elminating dependency on libpng
+and libjpeg as well (which libtiff may depend on).</li>
+</ul>
+</blockquote>
+<p>2001-10-16 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Convert now supports -channel {Cyan,Magenta,Yellow,Black}.</li>
+</ul>
+</blockquote>
+<p>2001-10-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wmf.c updated for libwmf 0.2. Plenty of bugs remain within.</li>
+</ul>
+</blockquote>
+<p>2001-10-11 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>QueryFontMetrics() of PerlMagick now recognizes embedded
+special characters (e.g. %h).</li>
+</ul>
+</blockquote>
+<p>2001-10-10 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed seg-fault for PingImage() on a JP2 image file.</li>
+</ul>
+</blockquote>
+<p>2001-10-07 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>CloneImage() now uses a referenced counted pixel cache.</li>
+</ul>
+</blockquote>
+<p>2001-10-05 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added AcquireImagePixels() method.</li>
+<li>Changed the formal parameter from Image * to const Image *
+for a number of methods (e.g. ZoomImage()).</li>
+<li>Added ExceptionInfo parameter to DispatchImage().</li>
+</ul>
+</blockquote>
+<p>2001-10-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Find libxml headers under Debian Linux (bug ID 921).</li>
+</ul>
+</blockquote>
+<p>2001-10-02 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed assertion error on drawing stroked text.</li>
+</ul>
+</blockquote>
+<p>2001-10-01 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added blob test to the PerlMagick test suite.</li>
+</ul>
+</blockquote>
+<p>2001-09-30 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>switched strcpy to strncpy to help protect against buffer
+overflow.</li>
+<li>ltdl.c passed int reference but a long was needed; caused a
+fault on Solaris 64-bit compiles.</li>
+</ul>
+</blockquote>
+<p>2001-09-25 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Removed most lint complaints from the source.</li>
+<li>strtod() returns different results on Linux and Solaris for 0x13.</li>
+<li>Added a MATLAB encoder contributed by Jaroslav Fojtik.</li>
+</ul>
+</blockquote>
+<p>2001-09-21 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Replaced TemporaryFilename() with UniqueImageFilename().</li>
+<li>ImageMagick CORE API is now 64-bit clean.</li>
+</ul>
+</blockquote>
+<p>2001-09-20 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed svg.c to accept a viewbox with a negative offset.</li>
+</ul>
+</blockquote>
+<p>2001-09-15 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Surveying the code for 64-bit compatibility.</li>
+<li>The cloned colormap was too small (reported by Glenn).</li>
+<li>A blob was being unmapped more than once for multi-frame images.</li>
+</ul>
+</blockquote>
+<p>2001-09-12 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Text drawing now handles UTF8-encoding.</li>
+<li>Off-by-one GetImagePixels() fix in draw.c</li>
+<li>PingImage() now reports attributes for all images in an image
+sequence.</li>
+</ul>
+</blockquote>
+<p>2001-09-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.h: Rename QuantumLeap define to QuantumDepth.
+QuantumDepth is set to the values 8 or 16, depending on user
+configuration option.</li>
+</ul>
+</blockquote>
+<p>2001-09-09 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Updated PerlMagick signatures to reflect new message digest
+algorithm.</li>
+</ul>
+</blockquote>
+<p>2001-09-08 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ImageMagick defaults to 16-bit quantum. Set QuantumMagick
+for 8-bit.</li>
+<li>Changed image->blob from BlobInfo to BlobInfo* so the Image
+structure size is not dependent on the large-file preprocessor
+defines.</li>
+</ul>
+</blockquote>
+<p>2001-09-07 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added -background to convert program usage text.</li>
+<li>DispatchImage() now properly handles grayscale images.</li>
+</ul>
+</blockquote>
+<p>2001-09-01 Glenn <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>The compression quality setting is now recognized when creating
+MPEG images (contributed by Lawrence Livermore National Laboratory
+(LLNL)).</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2002-12-31 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Do not quantize CMYK (bug fix).</li>
+<li>magick/render.c: Ensure that stroke is not drawn wider than
+requested when antialiasing is disabled (bug fix).</li>
+</ul>
+</blockquote>
+<p>2002-12-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c: For TransformRGBImage() and RGBTransformImage()
+round values to int when creating tables rather than using scaling
+to avoid rounding.</li>
+</ul>
+</blockquote>
+<p>2002-12-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Fixed compile problems.</li>
+<li>magick/image.c: SyncImage() performance optimizations.</li>
+<li>TransformRGBImage() cleanup/enhancements. Some rounding issues
+remain.</li>
+<li>RGBTransformImage() cleanup/enhancements. Some rounding issues
+remain.</li>
+</ul>
+</blockquote>
+<p>2002-12-24 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>BUGFIX: Fixed bug, introduced on 12/18/02, in which a misplaced
+"}" caused an assertion failure after reading any opaque JNG
+image.</li>
+<li>Added CloseBlob before returning a NULL JNG image.</li>
+<li>Merged png.c with IM-5.5.3-1, including a seemingly pointless
+rename of SaveImageText string to SaveImageTag.</li>
+</ul>
+</blockquote>
+<p>2002-12-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c: Optimized gray x, y, z, tables creation in
+RGBTransformImage().</li>
+</ul>
+</blockquote>
+<p>2002-12-27 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pcd.c: IsPCDImage() fix offset to test header magic.</li>
+<li>coders/pcd.c: Ensure that blob is closed on error.</li>
+<li>coders (all): Pass image->colorspace to TransformRGBImage()</li>
+<li>magick (animate.c, command.c, display.c, image.c, nt_feature.c)
+Pass image->colorspace to TransformRGBImage().</li>
+<li>magick/nt_feature.c: Ensure that image is RGB prior to transfer
+to HBITMAP.</li>
+</ul>
+</blockquote>
+<p>2002-12-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c: Re-worked TransformRGBImage() again so that it
+is now smoking fast for Q:8 and Q:16. Changed lookup tables, and
+all per-pixel transforms to use only integer arithmetic. A
+pre-multiplication scheme is used which should actually improve
+the quantization error over using double arithmetic. It is
+actually possible to improve Q:32 performance a bit more but is it
+worth the effort?</li>
+</ul>
+</blockquote>
+<p>2002-12-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c: Implemented logging for TransformRGBImage() and
+RGBTransformImage().</li>
+</ul>
+</blockquote>
+<p>2002-12-24 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>The png codec would close the blob twice (second time raising an
+assertion) if a libpng error was encountered.</li>
+<li>Sometimes the PNG writer would receive an invalid bit depth from
+CompositeImages(); this is now ignored.</li>
+</ul>
+</blockquote>
+<p>2002-12-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c: Re-wrote TransformRGBImage() so that it does not
+penalize a Q:8 build. The function should be faster now, but no
+timings have been made to verify that.</li>
+</ul>
+</blockquote>
+<p>2002-12-21 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Elimimated unused transparent_pixel array in png.c.</li>
+<li>Reverted to incrementing loops in bmp.c where the counter "i" is
+used in the loop.</li>
+</ul>
+</blockquote>
+<p>2002-12-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Update MogrifyImage() so that gm is 9X faster
+when transforming a color image to grayscale.</li>
+</ul>
+</blockquote>
+<p>2002-12-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Updated coders to use VerifyColormapIndex macro rather than slow
+ConstrainColormapIndex() function.</li>
+<li>magick/constitute.c: Trial use of VerifyColormapIndex in
+PushImagePixels() IndexQuantum case.</li>
+</ul>
+</blockquote>
+<p>2002-12-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/color.c: Added VerifyColormapIndex macro to verify range
+of color index without a function call.</li>
+<li>coders/bmp.c: Updated to use VerifyColormapIndex macro.</li>
+</ul>
+</blockquote>
+<p>2002-12-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c: Sped up RLE expansion and sped up byte-size
+PseudoColor scanline conversion. Results in 50% speed-up when
+running on SPARC.</li>
+</ul>
+</blockquote>
+<p>2002-12-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>utilities: Removed legacy ImageMagick utilities which have been
+rolled up into gm.c/command.c.</li>
+</ul>
+</blockquote>
+<p>2002-12-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/Magick.xs: Fixed FormatString() format problems
+identified by the compiler.</li>
+</ul>
+</blockquote>
+<p>2002-12-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.h: Moved function prototypes for functions
+implemented in code modules other than image.c to seperate header
+files with names based on the implementation files.</li>
+</ul>
+</blockquote>
+<p>2002-12-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/enhance.c: Report appropriate message while leveling
+image.</li>
+</ul>
+</blockquote>
+<p>2002-12-18 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Sync png.c and fx.c with IM-5.5.3. "gm convert -list format"
+now includes zlib version info among the PNG info.</li>
+<li>ConvolveImage() logs kernel info as a "Transform" debug event.</li>
+<li>ReadJNGImage() now skips decoding JPEG subimage when "pinging"</li>
+</ul>
+</blockquote>
+<p>2002-12-17 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>SVG element <cite>stroke-dasharray: 0</cite> no longer causes a
+segmentation fault.</li>
+</ul>
+</blockquote>
+<p>2002-12-17 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>CoaleseceImage() properly handles a dispose method of
+BackgroundDispose.</li>
+</ul>
+</blockquote>
+<p>2002-12-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Updated to substitute for @GMDelegate@.</li>
+<li>magick/effect.c: Changed AdaptiveThresholdImage offset to double
+so that it works with QuantumDepth=32. Thanks to Glenn for
+pointing out this problem.</li>
+<li>magick/image.c: Adapted to AdaptiveThresholdImage API change.</li>
+<li>magick/image.h: Annotated global constants and functions with
+the name of the source file where they are implemented. This is
+in preparation to break up image.h into multiple header files to
+diminish unnecessary header dependencies.</li>
+<li>coders/delegates.mgk.in: Updated to use @GMDelegate@ definition
+and <cite>gm</cite> program rather than ImageMagick utility names.</li>
+<li>PerlMagick/t/read.t: Converted gradient test (which was not
+working at all) to compare with a reference image.</li>
+<li>PerlMagick/t/jpeg/read.t: Re-wrote to compare with reference
+image.</li>
+<li>PerlMagick/t/jpeg/write.t: Re-wrote to compare with reference
+image.</li>
+<li>magick/image.c, magick/command.c: Moved MogrifyImage and
+MogrifyImages from image.c to command.c in order to diminish
+unnecessary inter-object coupling. Only functions in command.c
+should use MogrifyImage or MogrifyImages. Some work remains to
+accomplish that.</li>
+</ul>
+</blockquote>
+<p>2002-12-16 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c: Add missing break statements to fix colorspace
+handling when image colorspace is CMYKColorspace or
+YCbCrColorspace.</li>
+<li>magick/decorate.c: Cast to double in calculation.</li>
+<li>magick/enhance.c: Tweaks to equalization map calculation to
+(hopefully) provide more consistent results.</li>
+<li>magick/resize.c: Use type double rather than long for minify
+weighting constants.</li>
+</ul>
+</blockquote>
+<p>2002-12-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/image.h: AdaptiveThresholdImage offset must be a signed
+type.</li>
+</ul>
+</blockquote>
+<p>2002-12-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Re-wrote PerlMagick filter.t tests so that they all compare
+results with reference images rather than compare signatures.
+This makes the tests easier to maintain and also makes it easier
+to find errors in ImageMagick.</li>
+</ul>
+</blockquote>
+<p>2002-12-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Warnings reduction</li>
+<li>magick/list.c: Warnings reduction</li>
+</ul>
+</blockquote>
+<p>2002-12-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Updated PerlMagick tests for Emboss, Equalize, Gamma, Normalize,
+OilPaint, and Gradient so that they pass at Q:8 under Windows.</li>
+<li>Updated PerlMagick tests for Emboss, and reading WMF, so that
+they pass at Q:16 under Windows.</li>
+<li>VisualMagickinstallerImageMagick-16.iss: Ported over from
+ImageMagick-8.iss and verified.</li>
+</ul>
+</blockquote>
+<p>2002-12-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Major smashing of ImageMagick to GraphicsMagick in .txt files
+and .html files.</li>
+<li>ImageMagick.html: Renamed to index.html.</li>
+<li>www/ImageMagick.html: Renamed to www/GraphicsMagick.html</li>
+</ul>
+</blockquote>
+<p>2002-12-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/list.c: Added GetFirstImageInList() function.</li>
+<li>magick/list.c: Added GetLastImageInList() function.</li>
+<li>coders/pcd.c: Re-implemented image tile labeling to avoid use of
+MogrifyImages().</li>
+</ul>
+</blockquote>
+<p>2002-12-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added <cite>commit</cite> shell script to CVS for those who chose to use
+it.</li>
+</ul>
+</blockquote>
+<p>2002-12-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c: Ensure that operating system call error return
+values are never used in resource limit calculation.</li>
+</ul>
+</blockquote>
+<p>2002-12-12 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c: Fixed bugs in InitializeMagick, but I also
+heavily commented the code so show what it seems to be doing. It
+appears broken and needs testing on all platforms. Toward that
+end, I added Log events so that we can see what it is doing.</li>
+</ul>
+</blockquote>
+<p>2002-12-12 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>utilities/gm.c: Fixes a crashing bug in gm.c caused by an
+attempt to free a bad pointer. Added comments to the code that
+explain why this happens so that future developers don't fall into
+the same trap. * win2k/IMDisplay/IMDisplay.rc Modified some of
+the string resources that define supported file formats that were
+in error. One example was eps with had a *.eps in the string
+instead of just .eps. This caused the document class to ASSERT
+under the debug build.</li>
+</ul>
+</blockquote>
+<p>2002-12-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Enable the module loading code for shared/DLL builds regardless
+of whether the build is a "modules" build. This allows users to
+add their own modules without requiring the use of a special
+"modules" build.</li>
+</ul>
+</blockquote>
+<p>2002-12-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.h: Backed out arbitrary name change from
+ChannelThresholdImage() to ThresholdImageChannel() that snuck in
+from Cristy's image.h changes.</li>
+</ul>
+</blockquote>
+<p>2002-12-11 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/psd.c: Reference cloned image Blob (not sure why needed
+but must be important).</li>
+</ul>
+</blockquote>
+<p>2002-12-11 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/enhance.c: Fixed LevelImage() to accept percent
+black/white points (.i.e. 90%).</li>
+<li>magick/enhance.c: Added LevelImageChannel().</li>
+<li>magick/enhance.c: Improved Q:8 performance of color
+transformations (e.g. for Gamma) which are based on a mapping
+array.</li>
+<li>coders/pcl.c: Fixed PCL coder to output proper color PCL
+instructions.</li>
+</ul>
+</blockquote>
+<p>2002-12-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c: Disabled SetImageInfo() code which uses
+GetImageMagick() to test file magic via Is* methods so that we can
+learn if eliminating use of these tests causes any ill effects.</li>
+</ul>
+</blockquote>
+<p>2002-12-09 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Moved xtrn.c from contrib area into coders area so that it can
+be used from within the COM object. This is windows only code that
+provides a back door way for the COM object to have data read or
+written into VB arrays.</li>
+</ul>
+</blockquote>
+<p>2002-12-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/mac.c: Merged in fixes from ImageMagick version.</li>
+<li>magick/magick.mgk: Merged in fixes from ImageMagick version.</li>
+</ul>
+</blockquote>
+<p>2002-12-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c: Fix ChannelImage() so that it does not destroy
+CMYK(A) channels by forcing RGB.</li>
+</ul>
+</blockquote>
+<p>2002-12-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/version.h: Changed to release 1.0.0.</li>
+<li>magick/nt_base.c: Changed "ImageMagick" to "GraphicsMagick" so
+registry lookups work for GraphicsMagick. Probably should be
+configured via a magick_config.h define.</li>
+<li>VisualMagick/installer/ImageMagick-8.iss:
+Changed for GraphicsMagick.</li>
+<li>utilities/conjure.c: Fix unterminated comment.</li>
+</ul>
+</blockquote>
+<p>2002-12-06 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c: Modification of JPEG APP1 detection logic to name
+EXIF and XMP profiles as EXIF and XMP instead of APP1. THe current
+algorithm is brute force.</li>
+<li>coders/meta.c: Modification deal with EXIF and XMP requests so
+that you can ask for these blobs specifically if they exist.</li>
+<li>coders/pdf.c,ps.c,ps2.c,ps3.c: Cristy bug fixes to eliminate
+redundant file access checking and fix embedded JPEG support.</li>
+<li>magick/random.c: Upgraded this to match current Cristy code. The
+upgrade is to support more robust temporary filenames in another
+change to this in utility.c however, I have not upgraded this code
+yet because I don't understand it well enough.</li>
+</ul>
+</blockquote>
+<p>2002-12-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added build support for utilities/gm.c</li>
+</ul>
+</blockquote>
+<p>2002-12-06 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Relocated animate, conjure, display, and import functions into
+command.c.</li>
+<li>Added utilities/gm.c; gm is a driver for all of the utility
+functions (animate, composite, conjure, convert, display,
+identify, import, mongrify, and montage), which are now run with
+"gm convert [convert_options]", "gm identify [identify_options]",
+etc.</li>
+</ul>
+</blockquote>
+<p>2002-12-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdf.c: Remove bogus code for handling temporary file.</li>
+</ul>
+</blockquote>
+<p>2002-12-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Updated to Autoconf 2.57.</li>
+<li>Install libraries as -lGraphicsMagick and -lGraphicsMagick++
+under Unix.</li>
+<li>Install headers under ${PREFIX}/include/GraphicsMagick under
+Unix.</li>
+<li>Update *-config scripts to produce correct library and include
+statements.</li>
+<li>Update PerlMagick to use correct library and include statements.</li>
+</ul>
+</blockquote>
+<p>2002-12-04 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>contrib/win32/ATL7/ImageMagickObject/ImageMagickObject.cpp:
+Fixed serious problem with not installing custom error and warning
+handlers in the new version of the COM object.</li>
+</ul>
+</blockquote>
+<p>2002-12-04 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c: Pass exceptions on write up into the
+exception structure passed into the WriteImages function.</li>
+</ul>
+</blockquote>
+<p>2002-12-04 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c: Added orphan image functionality changes that
+are purported to fix bugs in PDF and PS coders.</li>
+</ul>
+</blockquote>
+<p>2002-12-04 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/locale.c: Hard coded the locale as per Cristy fix, but
+also added a comment and disabled useless code.</li>
+</ul>
+</blockquote>
+<p>2002-12-04 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/bin/magic.mgk: Added JNG as per the copy in magick
+subdirectory.</li>
+</ul>
+</blockquote>
+<p>2002-12-04 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tiff/libtiff/tiff.h: Minor changes to make reading older
+Photoshop TIFF files spew fewer warnings.</li>
+</ul>
+</blockquote>
+<p>2002-12-04 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Optimized ConvolveImage() by normalizing the kernel values
+instead of normalizing the pixels.</li>
+</ul>
+</blockquote>
+<p>2002-12-01 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/formats.html: Add JNG and fix libpng links.</li>
+</ul>
+</blockquote>
+<p>2002-12-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ChangeLog: Updated this ChangeLog to use the format prescribed
+by the GNU coding standards.</li>
+</ul>
+</blockquote>
+<p>2002-12-01 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Use PNG_SETJMP_NOT_THREAD_SAFE to indicate that
+the C library's setjmp() API is not thread safe.</li>
+<li>Fix use of image_info->blob.</li>
+</ul>
+</blockquote>
+<p>2002-11-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Set up new CVS repository for GraphicsMagick based on current
+ImageMagick 5.5.2 (pre-release) sources.</li>
+</ul>
+</blockquote>
+<p>2002-11-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Flashpix library now uses C++ standard <new> and iostreams
+rather than legacy new and iostreams.</li>
+</ul>
+</blockquote>
+<p>2002-11-15 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>The blob methods were enhanced to use GZip or BZip API methods
+to compress/uncompress images (previously the external programs
+gunzip or bunzip2 were used).</li>
+</ul>
+</blockquote>
+<p>2002-11-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Update to Autoconf 2.56</li>
+</ul>
+</blockquote>
+<p>2002-11-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Update to Autoconf 2.55</li>
+</ul>
+</blockquote>
+<p>2002-11-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Moved coder Register/Unregister method prototypes to static.h
+since they are only needed by static.c.</li>
+<li>Removed defunct HDF and libmpeg2 support since it was confusing
+to users.</li>
+</ul>
+</blockquote>
+<p>2002-11-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wmf.c: Set white background of embedded bitmaps to
+transparent if the image background is a texture image, not-white,
+or non-opaque. This improves the output when the WMF is rendered
+on a non-default background.</li>
+</ul>
+</blockquote>
+<p>2002-11-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Updated Windows CVS to FreeType 2.1.2.</li>
+</ul>
+</blockquote>
+<p>2002-11-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Updated Windows CVS to Jasper 1.600.0.</li>
+</ul>
+</blockquote>
+<p>2002-11-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Verify sanity of sysconf(_SC_PAGE_SIZE) and
+sysconf(_SC_PHYS_PAGES) before using their values.</li>
+</ul>
+</blockquote>
+<p>2002-11-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Modified IMdisplay so that larger images may be loaded
+(primarily limited by Windows bitmap size limits).</li>
+<li>Added some more file types (EPS, GIF, MIFF, SVG, & WMF) to
+IMdisplay's file open list.</li>
+<li>The list management methods were given more meaningful names.</li>
+</ul>
+</blockquote>
+<p>2002-11-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Modified IMdisplay so that Magick++ Images are stored by value
+rather than via pointer.</li>
+<li>IMdisplay now uses minify(), magnify(), and zoom() methods where
+appropriate.</li>
+</ul>
+</blockquote>
+<p>2002-11-04 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Quantizing a DirectClass image with less than 256 unique colors
+is no longer lossy.</li>
+<li>Transparent TGA images had incorrect opacity values.</li>
+</ul>
+</blockquote>
+<p>2002-10-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added configure test for compiler __func__ support
+(HAS___func__).</li>
+<li>Added configure test for ftime().</li>
+</ul>
+</blockquote>
+<p>2002-10-31 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>CMYK + alpha layered PSD files now correctly read!</li>
+</ul>
+</blockquote>
+<p>2002-10-30 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ReadPSDImage() is now fully instrumented with logging</li>
+<li>Fixed long standing bug in ReadPSDImage, so it no longer returns
+an extra layer</li>
+</ul>
+</blockquote>
+<p>2002-10-29 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added three output formats: PNG24 (24-bit RGB PNG, opaque only),
+PNG32 32-bit (RGBA PNG, semitransparency OK), and PNG8 (8-bit
+indexed PNG, binary transparency only).</li>
+</ul>
+</blockquote>
+<p>2002-10-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/vid.c: Modified to be 10X faster for large images and to
+take advantage of JPEG size optimizations.</li>
+</ul>
+</blockquote>
+<p>2002-10-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/xwindow.c: Optimize loading of TrueColor images with
+gamma = 1.0.</li>
+</ul>
+</blockquote>
+<p>2002-10-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wmf.c: Added logging facilities.</li>
+</ul>
+</blockquote>
+<p>2002-10-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>display.c: removed unnecessary SignatureImage() calls which
+dramatically slowed down loading images and quiting the program.</li>
+<li>xwindow.c: optimized image size reduction for the case where the
+target size is a small fraction of the original size. This makes
+creation of display's panner and thumbnail images tremendously
+faster, with no noticeable degradation of thumbnail quality.</li>
+</ul>
+</blockquote>
+<p>2002-10-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added Windows95 define to VisualMagick magick_config.h to
+disable use of features not available under Windows '95</li>
+</ul>
+</blockquote>
+<p>2002-10-21 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added large file pixel cache support for Windows NT.</li>
+</ul>
+</blockquote>
+<p>2002-10-21 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PDF coder no longer uses ASCII85 encoding with TIFF for MUCH
+smaller files!</li>
+<li>Cleaned up a few other things in PDF coder.</li>
+</ul>
+</blockquote>
+<p>2002-10-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Updated to Automake 1.7.1.</li>
+</ul>
+</blockquote>
+<p>2002-10-18 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PingBlob() improperly set the length of BlobInfo to zero.</li>
+<li>Fixed Ping() memory leak in PerlMagick.</li>
+<li>Fixed -map problem in convert/mogrify utilities.</li>
+<li>Fixed -remote problem with display utility (returns correct
+error status).</li>
+</ul>
+</blockquote>
+<p>2002-10-16 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>-border with a single value now produces correct results
+(e.g. -border 10).</li>
+<li>Added -lat to convert/mogrify (local adaptive thresholding).</li>
+</ul>
+</blockquote>
+<p>2002-10-15 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Set locale type LC_NUMERIC to "C".</li>
+<li>Bug fix for PS2 encoder.</li>
+<li>Added PS-Adobe preamble to PS3 encoder.</li>
+</ul>
+</blockquote>
+<p>2002-10-14 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ImageMagick 5.5.1 released.</li>
+</ul>
+</blockquote>
+<p>2002-10-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Use ImageMagick release number to allow multiple ImageMagick
+releases to co-exist without interference on the same machine.</li>
+</ul>
+</blockquote>
+<p>2002-10-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Decided that DrawGet functions should return by value.</li>
+</ul>
+</blockquote>
+<p>2002-10-06 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added detailed logging to BMP, PNG, and JPEG codecs, including
+JPEG quality estimate.</li>
+</ul>
+</blockquote>
+<p>2002-10-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added draw.h "DrawGet" equivalents to most of the "DrawSet"
+functions.</li>
+<li>Added an array size argument to DrawSetDashPattern and got rid
+of the zero-termination garbage.</li>
+<li>Remove <cite>Set</cite> from the names of draw.h functions which update the
+current affine transformation array (e.g. DrawSetRotate becomes
+DrawRotate).</li>
+</ul>
+</blockquote>
+<p>2002-09-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Updated to Automake 1.7.</li>
+</ul>
+</blockquote>
+<p>2002-09-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Under Windows, a DllMain function which automatically
+initializes ImageMagick (when ImageMagick is built using DLLs) may
+be added by defining ProvideDllMain in magick_config.h</li>
+</ul>
+</blockquote>
+<p>2002-09-28 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added resource consumption methods, see magick/resource.c.</li>
+</ul>
+</blockquote>
+<p>2002-09-27 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Replaced underscores in commandline options with hyphens. For
+backward compatibility, underscores will continue to be
+recognized.</li>
+<li>Added -blue-primary, -green-primary, -red-primary, -white-point
+options.</li>
+</ul>
+</blockquote>
+<p>2002-09-27 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added BMP2 and BMP3 output formats.</li>
+<li>Changed chromaticity primary.z from 1.0 to
+1.0-(primary.x+primary.y) in the PNG and PCD codecs.</li>
+</ul>
+</blockquote>
+<p>2002-09-21 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added <cite>exception</cite> parameter to the ImageMagick progress monitor
+API.</li>
+<li>Added enumerated types for the dispose member of the Image
+structure.</li>
+<li>Added -version option to commandline utilities.</li>
+</ul>
+</blockquote>
+<p>2002-09-21 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>The xcf decoder would sometimes create artifacts when reading
+RLE-encoded grayscale images, due to the green and blue samples
+not being defined.</li>
+</ul>
+</blockquote>
+<p>2002-09-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Update to Autoconf 2.54.</li>
+</ul>
+</blockquote>
+<p>2002-08-08 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added logging capabilities to the CORE API. This facility is
+useful for debugging. Added "events" parameter to the -debug
+commandline option.</li>
+<li>AcquireImagePixels() did not always return the same pixel values
+for virtual pixels when the cache was stored on disk (very rare).</li>
+<li>new -virtual-pixel command line option.</li>
+<li>new PerlMagick virtual-pixel image attribute.</li>
+</ul>
+</blockquote>
+<p>2002-08-07 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ImageMagick 5.4.9 released.</li>
+</ul>
+</blockquote>
+<p>2002-09-06 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed some bugs in the Clipboard coder</li>
+<li>Added new ImageToHBITMAP function to NTFeature.c/.h in core</li>
+<li>Added support for Quantum==32 to IMDisplay</li>
+</ul>
+</blockquote>
+<p>2002-08-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fix formatting in the *.mgk files so that they are XML conformant</li>
+</ul>
+</blockquote>
+<p>2002-08-30 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>QuantizeImage() did not always produce proper bilevel images.</li>
+</ul>
+</blockquote>
+<p>2002-08-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Apply prefix/suffix transformations to ImageMagick program names
+which are substituted into delegates.mgk. This fix was requested
+by Glenn Randers-Pehrson.</li>
+</ul>
+</blockquote>
+<p>2002-08-25 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Arcs are now rendered properly.</li>
+<li>Use -authenticate to specifiy a password when viewing encrypted
+PDF's.</li>
+<li>-page was previouly being ignored.</li>
+<li>Configure files are returned as blobs now (suggested by William
+Radcliffe).</li>
+</ul>
+</blockquote>
+<p>2002-08-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added --disable-installed option to configure to support
+building an ImageMagick which is not installed via hard-coded
+paths. This is intended to be used for the ad-hoc binary
+distributions built by ImageMagick Studio.</li>
+<li>The UseInstalledImageMagick define is to be used by builds
+formally installed under a prefix, or via the Windows registry.</li>
+<li>Replaced GetMagickConfigurePath() with the three functions
+FindConfigurationFile(), FindFontFile(), and FindModuleFile().</li>
+<li>Re-implemented InitializeMagick() to try harder at finding the
+uninstalled ImageMagick without the help of MAGICK_HOME. In the
+future, it can try even harder.</li>
+<li>Unix binaries packages (built with --disable-installed) should
+now work using the same file layout as the distribution file.
+There is no longer a need to put all files in the same directory.</li>
+</ul>
+</blockquote>
+<p>2002-08-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Under Windows, define UseInstalledImageMagick to locate
+components using the registry rather than scanning the filesystem.</li>
+</ul>
+</blockquote>
+<p>2002-08-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added DrawSetTextEncoding() function to specify text encoding
+(e.g. "UTF-8").</li>
+</ul>
+</blockquote>
+<p>2002-08-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Extend <cite>convert -list type</cite> output so it prints more details.</li>
+<li>Fix draw.c problem when specifying font family names that
+contain spaces.</li>
+</ul>
+</blockquote>
+<p>2002-08-15 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Finished 32-Bit QuantumDepth support.</li>
+<li>Subimage memory leak fixed (bug report by William Radcliffe).</li>
+<li>Fixed subimage specification memory overrun.</li>
+<li>Subimage specification did not work properly under Windows.</li>
+</ul>
+</blockquote>
+<p>2002-08-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fix problem with TEXT encoder. It was prepending the filename
+to the text.</li>
+</ul>
+</blockquote>
+<p>2002-08-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Render Postscript via Ghostscript DLL (gsdll32.dll) under
+Windows if it can be loaded. Only ps.c currently uses this to
+verify there are no problems.</li>
+</ul>
+</blockquote>
+<p>2002-08-14 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added 16-bit raw write support to PPM.</li>
+</ul>
+</blockquote>
+<p>2002-08-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Re-implemented ReadTTFImage() using the draw.h APIs.</li>
+</ul>
+</blockquote>
+<p>2002-08-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed a libtool bug in order to allow passing -m64 to allow
+building 64-bit ImageMagick using gcc 3.1 or later under SPARC
+Solaris.</li>
+</ul>
+</blockquote>
+<p>2002-08-04 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added experimental 32-bit QuantumDepth pixel support.</li>
+<li>Stream support was not thread-safe (bug report by William Radcliffe).</li>
+<li>Push/PopImagePixels() now recognizes the proper buffer length
+(previously it operated on one scanline at a time).</li>
+<li>Deprecated Down/Upscale defines. Replaced them with
+Scale*ToQuantum() and ScaleQuantumTo*() methods.</li>
+</ul>
+</blockquote>
+<p>2002-08-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Changed configure argument --disable-16bit-pixel to
+--with-quantum-depth in order to make its usage more
+straightforward and generic. Build ImageMagick using an eight-bit
+quantum via --with-quantum-depth=8.</li>
+<li>Magick++ library builds as a DLL under Windows now.</li>
+</ul>
+</blockquote>
+<p>2002-07-31 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Delegates/modules are restricted to hard-coded search paths (a
+security feature suggested by Bob Friesenhahn).</li>
+</ul>
+</blockquote>
+<p>2002-07-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added SubstituteString to utility.c for performing substitions
+on strings.</li>
+<li>Added support for performing Ghostscript-related substitutions
+while reading delegates.mgk and type.mgk files.</li>
+</ul>
+</blockquote>
+<p>2002-07-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added the Windows utility functions NTGhostscriptDLL(),
+NTGhostscriptEXE(), and NTGhostscriptFonts(), to find the DLL,
+executable, and font directory corresponding to the newest
+Ghostscript install on the system.</li>
+</ul>
+</blockquote>
+<p>2002-07-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Split nt.c into ntbase.c and ntfeature.c</li>
+<li>Split nt.h into ntbase.h and ntfeature.h</li>
+<li>Invoke NTIsMagickConflict() under Cygwin to ensure that drive
+letters in file specifications are not confused with magick
+strings.</li>
+<li>Invoke NTGetTypeList() under Cygwin to read the list of Windows
+fonts.</li>
+</ul>
+</blockquote>
+<p>2002-07-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Created Windows "setup.exe" style installation package for
+ImageMagick.</li>
+<li>Include PerlMagick Perl extension for ActiveState ActivePerl as
+checkmark install option in Windows installation package.</li>
+<li>Include ImageMagickObject OLE Object for WSH and Visual Basic
+(not IIS!!!) as checkmark install option in Windows installation
+package.</li>
+<li>Windows installation package establishes file extension
+associations for ImageMagick.</li>
+</ul>
+</blockquote>
+<p>2002-07-17 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PPM files were being written in P4 or P5 format if all pixels
+were gray. This is correct behavior for the PNM format but not
+for the PPM format.</li>
+</ul>
+</blockquote>
+<p>2002-07-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Load font information from Windows rather than depending on hand
+edited type-windows.mgk file. Still not incorporated in Cygwin
+build.</li>
+</ul>
+</blockquote>
+<p>2002-07-04 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Typos corrected in perl.html (thanks to Ron Savage);</li>
+<li>A color profile is now correctly referred to as ICM instead of
+IPTC.</li>
+<li>Added XPM color compliance to colors.mgk.</li>
+<li>$image->Get(<cite>clip-mask</cite>) now returns the clipping image.</li>
+</ul>
+</blockquote>
+<p>2002-07-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added NTRegistryKeyLookup() to nt.c in order to look up
+ImageMagick installation parameters from the Windows Registry.</li>
+<li>Updated GetMagickConfigurePath() in magick.c to use installation
+path data from the Windows Registry (if available).</li>
+<li>Updated VisualMagick/ImageMagick.iss so that Windows Registry is
+updated by install package.</li>
+</ul>
+</blockquote>
+<p>2002-07-03 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Semaphore.c will compile now when pthreads are not present.</li>
+<li>8-Bit Quantum PCD images now read correctly.</li>
+<li>The antialias member of the ImageInfo structure was not being
+cloned.</li>
+</ul>
+</blockquote>
+<p>2002-07-01 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ImageMagick 5.4.7 released.</li>
+</ul>
+</blockquote>
+<p>2002-06-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt.c (readdir): Make readdir re-entrant for each instance
+of DIR. This should improve thread safety.</li>
+<li>ltdl/ltdl.c : Support building as DLL under Win32.</li>
+</ul>
+</blockquote>
+<p>2002-06-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Update to use Automake 1.6.2</li>
+</ul>
+</blockquote>
+<p>2002-06-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Try harder when searching for Ghostscript fonts under Linux.</li>
+</ul>
+</blockquote>
+<p>2002-06-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Identify PICT files via magic.mgk.</li>
+</ul>
+</blockquote>
+<p>2002-06-18 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added PerlMagick threading support (patch by Doug MacEachern).</li>
+</ul>
+</blockquote>
+<p>2002-06-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>CLIPBOARD and EMF modules compile under MinGW and Cygwin.</li>
+</ul>
+</blockquote>
+<p>2002-06-14 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>The wbmp writer would dump core if it received a DirectClass
+image that contained only black and white pixels, because no
+colormap exists.</li>
+</ul>
+</blockquote>
+<p>2002-06-09 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Label color could not be set (bug report by Ron Savage).</li>
+<li>Added CatchException() method to magick/error.c.</li>
+</ul>
+</blockquote>
+<p>2002-06-06 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ImageMagick, version 5.4.6-1 released.</li>
+</ul>
+</blockquote>
+<p>2002-06-05 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added -encoding option to command line utilities.</li>
+</ul>
+</blockquote>
+<dl class="docutils">
+<dt>2002-06-02 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></dt>
+<dd><ul class="first last simple">
+<li>ImageMagick, version 5.4.6 released.</li>
+</ul>
+</dd>
+</dl>
+<p>2002-05-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ImageMagick may now be built (static build only) using the free
+MinGW development package from <a class="reference external" href="http://www.mingw.org">http://www.mingw.org</a>. Leonard's
+"clipboard" coder is included in the build.</li>
+</ul>
+</blockquote>
+<p>2002-05-28 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added new "clipboard" coder for reading/writing the system's
+clipboard. Currently this is only implemented on Windows. For
+example: <cite>convert logo: clipboard:</cite>, <cite>convert clipboard: foo.png</cite>.</li>
+</ul>
+</blockquote>
+<p>2002-05-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Support autotrace via delegates.mgk. For example: <cite>convert
+autotrace:file.png file.mvg</cite>.</li>
+</ul>
+</blockquote>
+<p>2002-05-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added progress monitor support to DrawImage().</li>
+</ul>
+</blockquote>
+<p>2002-05-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added progress monitor support to wmf.c.</li>
+</ul>
+</blockquote>
+<p>2002-05-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added EscapeText() to utility.c to support escaping text.</li>
+</ul>
+</blockquote>
+<p>2002-05-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Text escaping for -draw and DrawAnnotation was not working
+properly. Now it does. Backslash should act as a escape for the
+the active quote character (', ", or }) as well as backslash. The
+backslash should be discarded if it was used as an escape
+character. In order to reliably pass a backslash, two successive
+backslashes are required
+(e.g. "\").</li>
+</ul>
+</blockquote>
+<p>2002-05-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Modified Base64Encode() of utility.c so that it returns the
+number of characters encoded. This avoids having to invoke
+strlen() on possibly megabytes of data.</li>
+</ul>
+</blockquote>
+<p>2002-05-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed compilation error with Sun Workshop compiler (wmf.c).</li>
+</ul>
+</blockquote>
+<p>2002-05-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Implement polypolygon support in WMF renderer. Requires libwmf
+0.2.4 with draw_polypolygon IPA callback.</li>
+</ul>
+</blockquote>
+<p>2002-05-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added --enable-ccmalloc configure option.</li>
+</ul>
+</blockquote>
+<p>2002-05-09 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>DCM patch provided by Shane Blackett.</li>
+</ul>
+</blockquote>
+<p>2002-05-07 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Lock mutex when destroying a SemaphoreInfo structure (patch
+provided by William Radcliffe).</li>
+<li>Added mingw patches provided by Derry Bryson.</li>
+</ul>
+</blockquote>
+<p>2002-05-05 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ImageMagick, version 5.4.5-1 released.</li>
+</ul>
+</blockquote>
+<p>2002-04-30 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Subimage specification did not work for TIFF (e.g. convert
+<cite>image.tiff[1]</cite> image.png).</li>
+</ul>
+</blockquote>
+<p>2002-04-30 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ImageMagick, version 5.4.5 released.</li>
+</ul>
+</blockquote>
+<p>2002-04-20 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added magic string detection for the FPX format (patch provided by
+Marc).</li>
+</ul>
+</blockquote>
+<p>2002-04-18 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added ExceptionInfo parameter to C API method,
+QueryColorDatabase().</li>
+</ul>
+</blockquote>
+<p>2002-04-17 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed all known bugs with the IMDisplay utility for Windows.</li>
+</ul>
+</blockquote>
+<p>2002-04-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac (libtool_build_static_libs): Added
+--enable-delegate-build option to suuport building ImageMagick
+using delegate libraries in subdirectories of the ImageMagick
+source directory.</li>
+</ul>
+</blockquote>
+<p>2002-04-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>WMF now supplies bitmaps as inline images rather than via a mpri
+reference.</li>
+</ul>
+</blockquote>
+<p>2002-04-15 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed DrawImage() to properly handle affine image transforms.</li>
+<li>Added AffineTransformImage() to C API.</li>
+<li>Added -transform option to convert/mogrify program.</li>
+</ul>
+</blockquote>
+<p>2002-04-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (MagickToMime): New method to return the MIME
+media type corresponding to a specified magick tag.</li>
+</ul>
+</blockquote>
+<p>2002-04-12 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed a bug in writing layer names in PSD files.</li>
+</ul>
+</blockquote>
+<p>2002-04-10 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed PingImage() memory leak (thanks to Timo Vogel).</li>
+<li>Added encoding and unicode attributes to PerlMagick (patch
+provided by Youki Kadobayashi).</li>
+</ul>
+</blockquote>
+<p>2002-04-08 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added reference counted blobs.</li>
+<li>Added MagickFatalError() and SetFatalErrorHandler() to the C
+API.</li>
+<li>One color images caused memory corruption in QuantizeImage()
+(thanks to Vincent Broz).</li>
+<li>Memory leak in NormalizeImage() (thanks to Vincent Broz).</li>
+</ul>
+</blockquote>
+<p>2002-04-06 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added CCIS-601 4:2:2 YUV format read-write support.</li>
+<li>Added CCIS-601 4:2:2 MPEG-2 format write support.</li>
+<li>Fixed a bug introduced in 5.4.0 that caused files with "M2V"
+suffix to be written in MPEG-1 instead of MPEG-2 format.</li>
+</ul>
+</blockquote>
+<p>2002-03-28 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ImageToBlob() only returned the first frame of a multi-frame
+image.</li>
+</ul>
+</blockquote>
+<p>2002-04-05 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed inversion of colors when converting CMYk JPEG to PDF</li>
+</ul>
+</blockquote>
+<p>2002-04-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed TTF preview function.</li>
+</ul>
+</blockquote>
+<p>2002-03-28 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>DCM patches provided by Syam Gadde.</li>
+<li>Multi-frame MPC image files caused a fault under Windows.</li>
+<li>Copy entire comment from SVG (bug report from Bob Friesenhahn).</li>
+<li>Enlarged scanline buffer for JPEG-compressed TIFF's (bug report
+from Bob Friesenhahn).</li>
+</ul>
+</blockquote>
+<p>2002-03-27 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ImageMagick, version 5.4.4, released.</li>
+</ul>
+</blockquote>
+<p>2002-03-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added preliminary version of C API for vector drawing commands
+(draw.h & draw.c). This interface is subject to change, and has
+not even been tested yet so it should not be used to support
+production code. The previous draw.h and draw.c have been renamed
+to render.h and render.c respectively.</li>
+</ul>
+</blockquote>
+<p>2002-03-25 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed bugs related to layered CMYK PSD images.</li>
+</ul>
+</blockquote>
+<p>2002-03-13 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PSD coder now saves layer information (name, offset & opacity)
+in hidden attributes.</li>
+</ul>
+</blockquote>
+<p>2002-03-13 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Enhanced MPC to read/write image sequences.</li>
+</ul>
+</blockquote>
+<p>2002-03-13 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>A number of formats (e.g. JPEG, PS) did not handle DirectClass
+grayscale images properly.</li>
+</ul>
+</blockquote>
+<p>2002-03-12 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Changed Clone*Info() API so structure members are set directly rather
+than by the *clone=*info method (suggested by William Radcliffe).</li>
+</ul>
+</blockquote>
+<p>2002-03-11 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added AcquireString() to allocate read-only strings.</li>
+</ul>
+</blockquote>
+<p>2002-03-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/null.c (WriteNULLImage): Support writing "null:" image
+type for use when profiling or testing ImageMagick.</li>
+</ul>
+</blockquote>
+<p>2002-03-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Update to Autoconf 2.53 (new release)</li>
+<li>Update to Automake 1.6 (new release)</li>
+</ul>
+</blockquote>
+<p>2002-03-07 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Bob Friesenhahn's execution profile results in a number of
+speed-ups with a faster LocaleCompare() algorithm and
+self-adjusting lists.</li>
+<li>Recognize additional DCM metadata (suggested by Barry Branham).</li>
+<li>Fixed CopyOpacity composite operator for CMYKA images.</li>
+</ul>
+</blockquote>
+<p>2002-03-06 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Inlined AlphaComposite() and ValidateColormapIndex().</li>
+<li>Corrected compositing algorithm for the case where both source
+and destination pixels had opacity values that were neither fully
+transparent nor fully opaque.</li>
+</ul>
+</blockquote>
+<p>2002-03-05 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Memory overrun when drawing large circles.</li>
+</ul>
+</blockquote>
+<p>2002-03-04 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Removed bug introduced into Bob's Base64Encode() method.</li>
+</ul>
+</blockquote>
+<p>2002-03-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added Base64Decode() and Base64Encode() to utility.c and updated
+ReadInlineImage() in magick/constitute.c to use Base64Decode().</li>
+</ul>
+</blockquote>
+<p>2002-03-01 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>GetTypeInfoByFamily() null pointer fault (reported by Bob
+Friesenhahn).</li>
+<li>Added module version number (patch by Glenn Randers-Pehrson).</li>
+</ul>
+</blockquote>
+<p>2002-03-01 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>image->matte was not being set when reading GRAY-ALPHA PNG
+files.</li>
+</ul>
+</blockquote>
+<p>2002-02-26 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Potential infinite loop in SyncBlob() (reported by Vladimir
+Faiden).</li>
+</ul>
+</blockquote>
+<p>2002-02-26 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Gravity not respected when drawing text with the convert
+program.</li>
+</ul>
+</blockquote>
+<p>2002-02-21 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>MPEG multi-part filenames require an embedded %d, not %lu.</li>
+<li>WriteStream() did not write to fifo (thanks to William
+Radcliffe).</li>
+</ul>
+</blockquote>
+<p>2002-02-20 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Annotation did not support SJIS properly (patch provided by
+Katsutoshi Shibuya).</li>
+</ul>
+</blockquote>
+<p>2002-02-18 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed memory overrun with -format option of the mogrify program.</li>
+<li>Labels were not positioned correctly for VID format.</li>
+</ul>
+</blockquote>
+<p>2002-02-16 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Replaced -copy/-replace options with +/-write in the convert
+program.</li>
+<li>Median filtering speed enhancement using skip list contributed
+by Mike Edmonds.</li>
+</ul>
+</blockquote>
+<p>2002-02-14 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Command line options now stay in effect for any image in command
+line order until a another option is encountered or if -noop is
+specified.</li>
+</ul>
+</blockquote>
+<p>2002-02-07 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>SVG coders understands inline images.</li>
+</ul>
+</blockquote>
+<p>2002-02-06 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>>, Glenn Randers-Pehrson</p>
+<blockquote>
+<ul class="simple">
+<li>Made -scene consistent across all utilities. -snaps replaces
+previous functionality of -scene for import program.</li>
+</ul>
+</blockquote>
+<p>2002-01-30 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Correctly draw arc when arc end/start are not integer
+(patch contributed by Giuliano Pochini).</li>
+</ul>
+</blockquote>
+<p>2002-01-28 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>>, Glenn Randers-Pehrson</p>
+<blockquote>
+<ul class="simple">
+<li>Geometry strings respect -gravity (e.g. -gravity SouthWest -crop
+100x100).</li>
+<li>Postive offsets in geometry strings move within the image canvas
+with respect to the gravity (SouthWest gravity is similar to
+Postscript page offsets).</li>
+</ul>
+</blockquote>
+<p>2002-01-24 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Use -trim to trim the edges of an image.</li>
+<li>Palm pixmap supported contributed by Christopher R. Hawks.</li>
+<li>Added -mask to the convert/mogrify programs to add clips masks
+to an image.</li>
+</ul>
+</blockquote>
+<p>2002-01-21 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed occasional small memory leak associated with exceptions.</li>
+<li>Persistent cache is no longer updated (MPC coder).</li>
+</ul>
+</blockquote>
+<p>2002-01-20 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed some bugs in the uncompressed PGM and PPM reader/writer
+(pnm.c).</li>
+</ul>
+</blockquote>
+<p>2002-01-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Removed test for libwmf/font.h.</li>
+</ul>
+</blockquote>
+<p>2002-01-13 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>More bug fixes and improvements in PSD writer.</li>
+</ul>
+</blockquote>
+<p>2002-01-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magic.mgk: Added entries for detecting PFA and PFB
+formats. Is this file used for anything anymore?</li>
+<li>coders/modules.mgk: Add support for PFA fonts.</li>
+<li>coders/ttf.c (RegisterTTFImage): Add support for PFA fonts.</li>
+<li>magick/annotate.c (RenderType): Add support for PFA fonts.</li>
+</ul>
+</blockquote>
+<p>2002-01-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Modified type.mgk so that it may include the additional files
+type-windows.mgk, type-solaris.mgk, and type-ghostscript.mgk
+depending on the operating system used, and the font files
+available.</li>
+</ul>
+</blockquote>
+<p>2002-01-11 Leonard Rosenthol <<a class="reference external" href="mailto:leonardr%40lazerware.com">leonardr<span>@</span>lazerware<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PSD now supports writing layered images and IPTC data</li>
+<li>Fixed some bugs in XCF</li>
+</ul>
+</blockquote>
+<p>2002-01-11 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added image list methods to the API.</li>
+</ul>
+</blockquote>
+<p>2002-01-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac : Renamed configure option --with-ttf-fontpath to
+--with-fontpath since ImageMagick loads more than TrueType fonts.</li>
+<li>ChangeLog : Renamed Changelog.txt to ChangeLog in order to
+conform to GNU and open-source standards.</li>
+</ul>
+</blockquote>
+<p>2002-01-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am : $(DESTDIR) already contains trailing <cite>/</cite>.</li>
+</ul>
+</blockquote>
+<p>2002-01-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wmf.c (wmf_magick_device_begin): Fix non-opaque fills.
+Now properly fills with texture image.</li>
+</ul>
+</blockquote>
+<p>2002-01-05 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed an out-of-bounds memset() and two other memory overruns
+when decoding 1-bit AVI, BMP, and DIB images.</li>
+</ul>
+</blockquote>
+<p>2002-01-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fix lcms header inclusion in transform.c.</li>
+</ul>
+</blockquote>
+<p>2002-01-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wmf.c (magick_brush): Fixed bug with setting fill color.</li>
+</ul>
+</blockquote>
+<p>2002-01-03 Cristy <<a class="reference external" href="mailto:cristy%40mystic.es.dupont.com">cristy<span>@</span>mystic<span>.</span>es<span>.</span>dupont<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Postscript Level II is now DCS compliant.</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2003-12-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/annotate.c (RenderFreetype): Ensure that image storage
+class is set to DirectClass. Text rendering was not working
+properly on top of PseudoClass images.</li>
+<li>magick/map.c (MagickMapRemoveEntry): Logic didn't properly
+handle removing entry in list.</li>
+<li>configure.ac: Added --enable-efence option to enable memory
+debugging using Electric Fence.</li>
+</ul>
+</blockquote>
+<p>2003-12-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/maptest.c (main): Extended test to add an entry to the
+list after an entry has already been removed.</li>
+<li>magick/image.c (ColorspaceTypeToString): Add support for LAB
+colorspace.</li>
+<li>magick/map.c: Added signature members to all structures and
+added assertions to ensure that the signature == MagickSignature
+prior to use. MagickMapAllocateObject now initializes the object
+reference count to one, and MagickMapDestroyObject decrements it
+in order to be more correct even though the object reference count
+is not actually used yet.
+(MagickMapCopyString): Preserve a null argument, and use
+AcquireString since it doesn't enlarge the string storage.
+(MagickMapCopyBlob): Preserve null blobs.</li>
+<li>configure.ac: Search for the shmctl() function. Under current
+Cygwin, this is hiding in -lcygipc.</li>
+</ul>
+</blockquote>
+<p>2003-12-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/composite.c: Fixed the composite operator list in the
+CompositeImage documentation.</li>
+<li>www/api/types.html: Corrected list of composition
+operators. Sometime prior to the creation of GraphicsMagick, the
+"Replace" composite operators were renamed to be "Copy" composite
+operators. Thanks to David Relson for bringing this problem to
+our attention.</li>
+<li>PerlMagick/Magick.xs: Added "LAB" to colorspace types.</li>
+<li>magick/image.h (enum ColorSpace): Add LABColorspace enumeration.</li>
+<li>wand/magick_wand.h : Add some compatibility definitions to
+translate from ImageMagick enumerations to existing GraphicsMagick
+enumerations.</li>
+</ul>
+</blockquote>
+<p>2003-12-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/annotate.c: Use header synonyms defined by FreeType's
+ftheader.h (included via <ft2build.h>) to include FreeType headers.
+This will presumably be more portable in the future.</li>
+<li>configure.ac: <ft2build.h> is an optional prerequisite for
+<freetype/freetype.h> and <libwmf/ipa.h> so include it when
+testing for these headers.</li>
+<li>magick/annotate.c: Include <ft2build.h> if it is available.</li>
+</ul>
+</blockquote>
+<p>2003-12-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/wandtest.c: Ported from latest ImageMagick version.</li>
+<li>wand/drawing_wand.c: Adapted to be compatible with latest
+ImageMagick version.</li>
+<li>wand/pixel_wand.c: Adapted to be compatible with latest
+ImageMagick version.</li>
+<li>wand/magick_wand.c: Ported from latest ImageMagick version.</li>
+<li>magick/image.h (Image): Members color_profile, iptc_profile,
+generic_profile, and generic_profiles are now deprecated and
+private although they continue to work as before. Please migrate
+existing code to use the GetImageProfile and SetImageProfile
+functions since these members will eventually be removed.</li>
+<li>magick/image.c (GetImageProfile): New function to retrieve an
+image profile. Return value differs from similarly named
+ImageMagick method since the ImageMagick approach assumes a
+particular storage method.
+(SetImageProfile): New function to add (or remove) an image
+profile. Does not execute CMS color profiles.</li>
+<li>magick/cache.c (SetImageVirtualPixelMethod): Return unsigned int to
+make the Wand implementation happy.</li>
+<li>magick/image.c (TransformColorspace): Return unsigned int to
+make the Wand implementation happy.
+(SetImageType): Return unsigned int to make the Wand
+implementation happy.</li>
+<li>magick/draw.h, magick/draw.c: Substitute <cite>unsigned long</cite> in
+place of <cite>size_t</cite> in interfaces so that the draw API is not
+sensitive to the definition of _LP64.</li>
+<li>locale/C.mgk: Added new messages required by Wand library.</li>
+<li>magick/error.c (ExceptionSeverityToTag): Add tag translations
+for the WandWarning, WandError, & WandFatalError enumerations</li>
+<li>magick/error.h (enum ExceptionType): Add WandWarning, WandError,
+& WandFatalError enumerations to ExceptionType for ImageMagick
+API compatibility.</li>
+<li>magick/image.h (enum ChannelType): Add an <cite>AllChannels</cite>
+enumeration to the ChannelType enumeration for ImageMagick
+API compatibility.</li>
+</ul>
+</blockquote>
+<p>2003-12-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick, tests: Adjusted allowed error values for tests based
+on new error computation arithmatic. Some tests were left failing
+since the operation they test provides results which are
+unreasonably inaccurate, or obviously broken.</li>
+</ul>
+</blockquote>
+<p>2003-12-17 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c: Changed "JPEG:preserve-settings from a key/value
+pair to a simple flag. Save and restore attributes when
+"-define JPEG:preserve-settings" appears on the commandline. Use
+"+define JPEG:preserve-settings" to unset the flag.</li>
+</ul>
+</blockquote>
+<p>2003-12-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wmf.c: Include <ft2build.h> if it is available since some
+libwmf installs don't work unless it is included before the libwmf
+API headers.</li>
+<li>configure.ac: Check for <ft2build.h>.</li>
+</ul>
+</blockquote>
+<p>2003-12-16 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c: Changed stored jpeg quality attribute from
+[jpeg-quality] to JPEG-Quality. Added attributes JPEG-Colorspace
+and JPEG-Sampling-factors. Added code to save and restore
+these attributes when "-define JPEG:preserve-settings=yes" is
+present in the comandline. Quality is restored if the input
+was a JPEG and the quality was preserved. Sampling factors
+are restored if the input was a JPEG, sampling factors were
+preserved, and the colorspace for the output file is the same
+as that of the input file.</li>
+</ul>
+</blockquote>
+<p>2003-12-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>TclMagick/source/configure.ac: Add an initial TclMagick
+configure-based build environment based on a template and macros
+from the Tcl project. I recall that while the extension does build,
+it is possible that it is not properly registered as a module to Tcl.</li>
+</ul>
+</blockquote>
+<p>2003-12-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (IsImagesEqual): Properly compute error distance
+vectors. Math was missing the necessary sqrt call. Also,
+pre-normalize the error differences to 1.0 in order to reduce the
+storage size required to store the summation of error values.</li>
+<li>PerlMagick/t/composite.t: Update Minus and Xor reference images.</li>
+<li>magick/composite.c (CompositeImage): Incorporated fixes from
+ImageMagick for XorCompositeOp, PlusCompositeOp, and
+MinusCompositeOp. Thanks to John Cristy for bringing the need for
+these fixes to our attention.</li>
+<li>magick/image.h (RoundToQuantum): Added missing parenthesis.</li>
+</ul>
+</blockquote>
+<p>2003-12-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/environment.imdoc: Document MAGICK_CODER_MODULE_PATH and
+MAGICK_FILTER_MODULE_PATH.</li>
+<li>rungm.sh.in: Pass MAGICK_CODER_MODULE_PATH and
+MAGICK_FILTER_MODULE_PATH in the environment so modules build may
+be tested without first being installed.</li>
+<li>magick/module.c (FindMagickModule): Use the
+MAGICK_CODER_MODULE_PATH environment variable to specify a search
+path for coder modules. Use MAGICK_FILTER_MODULE_PATH to specify
+a search path for filter modules.</li>
+<li>Makefile.am: Updated to Automake 1.8.
+(install-exec-perl): Fixes which achieve a successful
+<cite>make distcheck</cite> for the first time in *Magick history.</li>
+<li>configure.ac: Set scripts to executable.</li>
+</ul>
+</blockquote>
+<p>2003-12-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am (uninstall-data-html): Pathnames were computed
+incorrectly so documentation directories were being left behind.</li>
+<li>configure.ac: --without-frozenpaths is now the default. This
+helps <cite>make distcheck</cite> work and makes the package more portable.
+Path to gm was being incorrectly frozen when --without-frozenpaths
+was specified.</li>
+<li>magick/delegate.c (ReadConfigureFile): Validate delegate paths
+prior to substitution.</li>
+<li>rungm.sh.in (top_builddir): Use a more reliable scheme for
+computing location of source and build directories.</li>
+<li>magick/Makefile.am: Improve include directory computation logic.</li>
+<li>configure.ac: Don't override includedir. Pass user-supplied LIBS
+to the linker.</li>
+</ul>
+</blockquote>
+<p>2003-12-08 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c: store JPEG quality as "[jpeg_quality]" attribute.</li>
+</ul>
+</blockquote>
+<p>2003-12-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>rungm.sh.in: New script to support executing uninstalled
+executables.</li>
+<li>magick/blob.c (GetConfigureBlob): New MAGICK_CONFIGURE_PATH
+environment variable allows the user to specify the search path
+for configuration (.mgk) files.</li>
+</ul>
+</blockquote>
+<p>2003-12-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>index.html: Added a table showing current stable release and
+development version.</li>
+</ul>
+</blockquote>
+<p>2003-12-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc (use): Describe the syntax of the -process
+argument.</li>
+<li>acinclude.m4 (AC_CHECK_CC_OPT): Add quoting in AC_CHECK_CC_OPT
+definition. Change suggested by Patrick Welche</li>
+</ul>
+</blockquote>
+<p>2003-12-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (GetMagickInfo): Fix preprocessing logic error
+which caused moby shared library build to not register static
+modules.</li>
+</ul>
+</blockquote>
+<p>2003-12-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/module.c (ExecuteModuleProcess): Add some logging.</li>
+<li>magick/static.c (ExecuteStaticModuleProcess): Add some logging.</li>
+</ul>
+</blockquote>
+<p>2003-11-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/installer: Add optional build support for LZW.</li>
+<li>wand/Makefile.am: Add AUTOMAKE_OPTIONS.</li>
+<li>configure.ac: Update to Autoconf 2.59.</li>
+</ul>
+</blockquote>
+<p>2003-11-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/installer/inc/tasks-install-perlmagick.isx: Update
+to reflect that the next release will use ActivePerl 5.8.1 Build
+807.</li>
+<li>VisualMagick/installer/inc/files-configs.isx: Updated the source
+locations for the .mgk files. Install modules.mgk into the config
+directory rather than the modules directory.</li>
+<li>configure.ac: Fixes to work with latest CVS libtool.</li>
+<li>libtool.m4: Update to latest CVS libtool.</li>
+<li>magick/modules.c, magick/static.c (ExecuteStaticModuleProcess):
+Fix conditional compilation logic so that "moby" shared library
+build works again.</li>
+<li>magick/compress.c, magick/mac.c: Use existing SaveImageText and
+LoadImageText global constants rather than separate defines.</li>
+</ul>
+</blockquote>
+<p>2003-11-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Update to Autoconf 2.58.</li>
+<li>Makefile.am: Update to Automake 1.7.9.</li>
+</ul>
+</blockquote>
+<p>2003-11-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/draw.c (DrawComposite): Base64-encoded image was not
+being deallocated. Bad memory leak.</li>
+</ul>
+</blockquote>
+<p>2003-11-03 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li>BCBMagick: Updated installation procedure. Please read
+BCBMagick/readme.txt for details.</li>
+</ul>
+</blockquote>
+<p>2003-11-03 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li>BCBMagick: Released DLL Version. Please read BCBMagick/readme.txt
+for details about installation and/or use.</li>
+</ul>
+</blockquote>
+<p>2003-11-03 Lars Ruben Skyum <<a class="reference external" href="mailto:lars.skyum%40stibo.com">lars<span>.</span>skyum<span>@</span>stibo<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (GetPathComponent): Added x, X, and +
+characters to list of legal characters in subimage
+specifications. Required by raw RGB image reader which accepts the
+syntax "image.rgb[100x100+50+50]". Thanks to John Cristy for
+catching that one.</li>
+</ul>
+</blockquote>
+<p>2003-11-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/locale.c (GetLocaleMessageFromID): Fix ID range checking
+logic.</li>
+</ul>
+</blockquote>
+<p>2003-10-30 Lars Ruben Skyum <<a class="reference external" href="mailto:lars.skyum%40stibo.com">lars<span>.</span>skyum<span>@</span>stibo<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c: changed to not write gray CMYK images as
+grayscales. That would not be a valid optimization.</li>
+<li>magick/color.c (IsGrayImage, IsMonochromeImage): Changed to
+never return true for CMYK images. Separated images get wrong
+colors when optimized to grayscales based on what these two
+functions return. Gray and CMYK are two different color spaces.</li>
+<li>magick/nt_feature.c (NTIsMagickConflict): changed to accept
+colon as part of the magick string, consistent with the way the
+function is used.</li>
+<li>magick/utility.c, magick/utility.h (ExpandFilenames,
+GetPathComponent): Fixed filename glob expansion. Added handling
+of filename prefix-magick and sub-image specification to
+GetPathComponent. Sub-image specification takes precedence over
+any filename patterns.</li>
+</ul>
+</blockquote>
+<p>2003-10-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/static.c (ExecuteModuleProcess): Renamed from
+ExecuteStaticModuleProcess. Only compiled if SupportMagickModules
+is not defined.</li>
+<li>magick/type.c (GetTypeBlob): Eliminated function.
+(ReadTypeConfigureFile): Use GetConfigureBlob() rather than
+GetTypeBlob().</li>
+<li>magick/module.c (GetModuleBlob): Eliminate this function since
+modules.mgk is now installed under
+${prefix}/share/GraphicsMagick-version/config so
+GetConfigureBlob() may be used.
+(lt_dlexit, etc.) Eliminate fake libltdl function wrappers used
+for the static build.
+(DestroyMagickModules): Added a new destroy function (simply
+invokes DestroyModuleInfo()).
+(GetModuleList): Learn where modules live by using
+FindMagickModule() to locate the LOGO module rather than by using
+the location of modules.mgk. This is necessary since now
+modules.mgk may be seperate from the modules.
+(GetModuleBlob): Eliminated function.
+(InitializeMagickModules): New function to safely initialize the
+module loader.
+(OpenModule): Added logging messages.
+(OpenModules): Added logging messages.
+(ReadModuleConfigureFile): Use GetConfigureBlob() rather than
+GetModuleBlob().
+Totally eliminated the rat's-nest of conditional code dependent on
+SupportMagickModules. Now all the code in module.c is dependent
+on #if defined(SupportMagickModules).</li>
+<li>magick/magick.c (DestroyMagick): Invoke DestroyMagickModules().
+(GetMagickInfo): #ifdef chunks of code which exist to support the
+modules-build rather than forcing the module loader to pretend
+that modules are being used when they are not. Pass module loading
+exceptions back to the user rather than discarding them.
+(GetMagickInfoArray): Don't inspect the exception status since may
+short-circuits the operation. Use best-effort instead.
+(ListMagickInfo): Don't inspect the current exception status so
+that all the modules which did load successfully will be
+represented.
+(InitializeMagick): Invoke InitializeMagickModules().</li>
+<li>magick/log.c: (GetLogBlob): Eliminated function.
+GetConfigureBlob() is safe to use now when configuring logging.
+(LogToBlob): Simplified function. Only exists since FileToBlob()
+may throw exceptions (which are logged, causing deadlock).
+(ReadLogConfigureFile): Use GetConfigureBlob().</li>
+<li>magick/blob.c (GetConfigureBlob): Re-written to use the
+MagickMap interface and to support the new <cite>lib</cite> and <cite>share</cite>
+config directories. The directory
+${prefix}/lib/GraphicsMagick-version/config is scanned before
+${prefix}/share/GraphicsMagick-version/config.
+(FileToBlob): Simplified implementation.</li>
+<li>config/Makefile.am: New makefile to install .mgk files.</li>
+<li>magick/magick_config.h.in: Added MagickLibConfigPath and
+MagickShareConfigPath defines.</li>
+<li>configure.ac: Install configuration files (.mgk files) in
+${prefix}/lib/GraphicsMagick-version/config and
+${prefix}/share/GraphicsMagick-version/config. Architecture
+independent files to under "share" while architecture dependnet
+files go under "lib".</li>
+<li>Makefile.am: Added <cite>config</cite> subdirectory to distribution. All
+.mgk files are moved from <cite>coders</cite> & <cite>magick</cite> into this single
+directory.</li>
+</ul>
+</blockquote>
+<p>2003-10-21 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/studio.h: small modifications to achieve DLL
+compilation of library with Borland C++ Builder.</li>
+<li>coders/ps3.c (ZLIBEncode2Image): Fixed bug. Compilation
+fail when HasZLIB is undefined because parameters 5 and 6,
+are undefined.</li>
+</ul>
+</blockquote>
+<p>2003-10-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>libtool.m4: Updated libtool again to CVS latest version.
+Libtool required some fixes for building DLLs under MinGW.</li>
+<li>magick/resource.c (InitializeMagickResources): Some code is
+conditional based on HAVE_POPEN.</li>
+<li>magick/utility.c (SystemCommand): Improved conditional
+compilation logic.</li>
+<li>magick/blob.c (OpenBlob): Code depending on popen() is
+conditionally compiled based on HAVE_POPEN. Code depending on
+pclose() is conditionally compiled based on HAVE_PCLOSE.</li>
+<li>configure.ac: Add test for _pclose(), pclose(), _popen(), and
+popen().</li>
+<li>magick/locale.c (GetLocaleMessage): Add missing MagickExport.
+(GetLocaleMessageFromID): Add missing MagickExport.</li>
+<li>VisualMagick/installer/inc/files-development.isx (Source):
+Include all of the headers from the magick directory in the
+development package. Including them individually is too error
+prone.</li>
+</ul>
+</blockquote>
+<p>2003-10-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/magick/magick_config.h.in: Added
+PREFIX_MAGICK_SYMBOLS as a configuration option.</li>
+<li>magick/module.c (_CoderInfo): Added register_function and
+unregister_function members to record the module's register and
+unregister function addresses.
+(OpenModule): Locate the module's register and unregister
+functions and save their address to the module's CoderInfo record.
+(UnloadModule): Invoke the module unregister function using the
+address recorded by OpenModule().
+(TagToFunctionName): If PREFIX_MAGICK_SYMBOLS is defined, then add
+a "Gm" prefix to the register and unregister function names.</li>
+<li>libtool: Updated libtool files to the latest CVS version.</li>
+<li>configure.ac: Changed define name from MAGICK_SYMBOL_PREFIX to
+PREFIX_MAGICK_SYMBOLS since support is not available for
+specifying an arbitrary prefix.</li>
+</ul>
+</blockquote>
+<p>2003-10-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Added --enable-symbol-prefix configure option
+which prepends "Gm" to all GraphicsMagick library symbols using
+the C pre-processor. In the future, this may change to support
+specifying an arbitrary prefix, depending on experience.</li>
+<li>magick/studio.h: Include magick/symbols.h.</li>
+<li>magick/api.h: Include magick/symbols.h.</li>
+<li>magick/symbols.h: New header to support optionally remapping
+library symbols. If MAGICK_SYMBOL_PREFIX is defined, then
+library symbols are remapped.</li>
+</ul>
+</blockquote>
+<p>2003-10-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/api.h: Removed inclusion of <magick/semaphore.h> since it
+is an implementation header.</li>
+</ul>
+</blockquote>
+<p>2003-10-13 Lars Skyum <<a class="reference external" href="mailto:lrs%40stibo.dk">lrs<span>@</span>stibo<span>.</span>dk</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/GraphicsMagick.html, www/animate.html, www/composite.html,
+www/conjure.html, www/convert.html, www/display.html, www/gm.html,
+www/identify.html, www/import.html, www/mogrify.html,
+www/montage.html: added documentation for "-define" command line
+option.</li>
+<li>doc/brief_options.imdoc, doc/options.imdoc: Added documentation
+for "-define" command line option.</li>
+<li>doc/gmdocselect, doc/imdocselect: Changed "skipform" label in
+sed scripts to just "skipf". Solaris sed had problems with the
+long(?) "skipform" label.</li>
+</ul>
+</blockquote>
+<p>2003-10-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/composite.imdoc, doc/options.imdoc, doc/GraphicsMagick.imdoc:
+Attempted to clarify the meaning of the compose arguments and how
+composition works, as well as eliminating use of hard-coded values like
+255.</li>
+<li>www/links.html: Added a link to Michael Still's article
+"Graphics from the command line".</li>
+</ul>
+</blockquote>
+<p>2003-10-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/*.c: Updated module descriptions so that they accurately
+describe the module rather than saying "Read/Write GraphicsMagick
+Image Format".</li>
+<li>coders/cineon.c: Fix source module description. Contrary to
+opinion, ImageMagick did not invent the Cineon X image format so
+description is now "Read/Write Cineon X Image Format."</li>
+<li>magick/magic.mgk: Added a CINEON entry for the Cineon X image
+format.</li>
+<li>magick/static.c (RegisterStaticModules): Invoke
+RegisterCINEONImage().</li>
+<li>coders/modules.mgk: Map "CIN" magick to CINEON module.</li>
+</ul>
+</blockquote>
+<p>2003-10-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>locale/C.mgk: Added message for "UnrecognizedCommand".</li>
+<li>magick/command.c (MagickCommand): No error was reported when a
+subcommand failed to be matched so <cite>gm foo</cite> would silently return.
+Now an error message is properly reported.</li>
+</ul>
+</blockquote>
+<p>2003-10-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am: Updated to Automake 1.7.8.</li>
+<li>various: Edits to eliminate minor issues detected by SGI C compiler.</li>
+<li>coders/ps3.c (WritePS3Image): Variable <cite>value</cite> was set but never
+used so it is removed.</li>
+<li>magick/image.c (RGBTransformPacket): Removed inline request
+since this function is too big to inline.</li>
+<li>magick/animate.c (XAnimateBackgroundImage): Fixed a GCC 3.X
+"type pinning" warning.</li>
+<li>magick/display.c (XDisplayBackgroundImage): Fixed a GCC 3.X
+"type pinning" warning.</li>
+<li>magick/render.c (GetPixelOpacity): Removed inline directive. No
+one in their right mind could ever imagine this function inlining
+successfully.</li>
+<li>magick/cache.c (IsNexusInCore): Adjusted so function inlines as
+requested.</li>
+<li>coders/tiff.c (ReadTIFFImage): Improved logging information.
+(WriteTIFFImage): Changed the way the bilevel/grayscale logic
+works. Now bilevel images are treated similar to any other
+grayscale image unless CCITT FAX3 or FAX4 compression is requested
+(which selects the MINISWHITE photometric). The default is now to
+write uncompressed bilevel images with MINISBLACK photometric.</li>
+<li>PerlMagick/t/composite.t: Use some reasonable error values.</li>
+<li>magick/image.c (GetImageDepth): Added special cases for
+colormapped images and monochrome images in order to improve
+performance.</li>
+</ul>
+</blockquote>
+<p>2003-10-09 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS: added info about color scaling, sampling-factor, and
+changed a reference to "-coder-options" to "-define".</li>
+</ul>
+</blockquote>
+<p>2003-10-09 Lars Ruben Skyum <<a class="reference external" href="mailto:lars.skyum%40stibo.com">lars<span>.</span>skyum<span>@</span>stibo<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/bin/modules.mgk: added EPS3 mapping to PS3 module.</li>
+<li>coders/ps3.c, coders/tiff.c, magick/command.c, magick/image.c,
+magick/image.h, magick/utility.c: Changed -coder-options option to
+-define. Also renamed functions {Add,Remove,Access}CoderOption(s)
+to {Add,Remove,Access}Definition(s). Changed ps coder-specific
+option ps:image=imagemask to just ps:imagemask.</li>
+</ul>
+</blockquote>
+<p>2003-10-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/cineon.c: Imported and adapted Cineon image format coder
+written by Kelly Bergougnoux <<a class="reference external" href="mailto:three3%40users.sourceforge.net">three3<span>@</span>users<span>.</span>sourceforge<span>.</span>net</a>> with
+assistance from John Cristy.</li>
+</ul>
+</blockquote>
+<p>2003-10-08 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c: Extended -sampling-factor option to allow
+user to supply full set of sampling factors. If the full
+set is not supplied, omitted ones are 1x1 by default, similar
+to the behavior of "cjpeg -sample".</li>
+<li>magick/command.c: Accept multiple pairs of sampling factors.</li>
+</ul>
+</blockquote>
+<p>2003-10-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Re-arranged logging for improved
+output. Cleaned up evaluation of SAMPLESPERPIXEL and
+BITSPERSAMPLE. Provided support for the TIFF coder options
+tiff:samples-per-pixel and tiff:bits-per-sample for power users.
+(ReadTIFFImage): Colormap generation for PHOTOMETRIC_MINISBLACK
+and PHOTOMETRIC_MINISWHITE was inaccurate. Seems to be accurate
+now.</li>
+<li>PerlMagick/t/reference/read/input.miff: Updated due to Glenn's
+change to scale macros.</li>
+<li>PerlMagick/t/tiff/input_gray_12bit.tiff: Replaced 12 bit image
+with a different one which is written by GraphicsMagick.</li>
+<li>coders/ps3.c (WritePS3Image): Use AccessCoderOption().</li>
+<li>magick/image.c (AccessCoderOption): Added a function to use for
+accessing coder-specific options.</li>
+</ul>
+</blockquote>
+<p>2003-10-08 Lars Ruben Skyum <<a class="reference external" href="mailto:lars.skyum%40stibo.com">lars<span>.</span>skyum<span>@</span>stibo<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (TraceSVGClippingPath): optimized for speed
+and precision in clipping mask generation by using lines to
+connect Bezier curve anchor points where applicable.</li>
+</ul>
+</blockquote>
+<p>2003-10-07 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Revised ScaleColor5to8 and ScaleColor6to8 macros again, to
+fill the low bits correctly.</li>
+</ul>
+</blockquote>
+<p>2003-10-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/tiff/read.t: Added 16-color and 256 color
+colormapped tests with a matte channel.</li>
+<li>PerlMagick/t/tiff/write.t: Added 16-color and 256 color
+colormapped tests with a matte channel.</li>
+<li>coders/tiff.c (WriteTIFFImage): When using LZW compression,
+apply the horizontal differencing predictor to RGB truecolor and
+deep gray images since the TIFF spec says that LZW compression is
+usually improved by using horizontal differencing with continuous
+tone images.
+Re-implemented grayscale and colormapped scanline preparation to
+use the new bit-stream interface. This is a bit slower, but very
+flexible, and the implementation is very compact. Writing of a
+matte (transparency) channel is now believed to be correct for all
+depths.</li>
+<li>magick/command.c (MogrifyImage): Only transform the colorspace
+if it has been set (i.e. is not UndefinedColorspace).</li>
+</ul>
+</blockquote>
+<p>2003-10-06 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOnePNGImage): PNG decoder would exit too
+early when reading image.png[0].</li>
+</ul>
+</blockquote>
+<p>2003-10-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/tiff/write.t: Added TIFF write tests for 4
+bits-per-sample TIFF images, both with and without a transparency
+channel.</li>
+<li>magick/image.c (DescribeImage): Added -verbose support for
+displaying individual channel depths.</li>
+</ul>
+</blockquote>
+<p>2003-10-06 Lars Ruben Skyum <<a class="reference external" href="mailto:lars.skyum%40stibo.com">lars<span>.</span>skyum<span>@</span>stibo<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageInfo): cleaned up parsing of subimage
+specification (image.psd[0]). It would fail sometimes due to
+incorrect reuse of variables. It's a bit strange the code accepts
+more range syntax-variations than can be stored in ImageInfo.</li>
+</ul>
+</blockquote>
+<p>2003-10-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (ChannelImage): The OpacityChannel, MatteChannel,
+and BlackChannel operations set the matte channel to opaque, so
+set image->matte to False for those operations.
+(RGBTransformImage): Add an assertion to prevent passing the
+colorspace argument <cite>UndefinedColorspace</cite>.
+(TransformRGBImage): Add an assertion to prevent passing an image
+with colorspace set to <cite>UndefinedColorspace</cite>.</li>
+</ul>
+</blockquote>
+<p>2003-10-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/log.c (LogToBlob): Since MagickSeek(file,0,SEEK_END) is
+used to obtain the Blob size, MagickSeek(file,0,SEEK_SET) must be
+used to restore the seek position. Thanks to John Cristy for
+bringing this to our attention.</li>
+</ul>
+</blockquote>
+<p>2003-10-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/bit_stream.h: Added a bit-stream writer function.</li>
+<li>PerlMagick/t/reference/read/input_tim.miff: Reference image
+was defective.</li>
+</ul>
+</blockquote>
+<p>2003-10-03 Lars Ruben Skyum <<a class="reference external" href="mailto:lars.skyum%40stibo.com">lars<span>.</span>skyum<span>@</span>stibo<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c, magick/image.h: Updated AddCoderOptions to
+accept "flag" keys that have no values. They are placed in the
+coder options map with an empty, zero length string value. Option
+argument syntax is now: "key1[=[value1]],key2[=[value2]],..."</li>
+</ul>
+</blockquote>
+<p>2003-10-03 Lars Ruben Skyum <<a class="reference external" href="mailto:lars.skyum%40stibo.com">lars<span>.</span>skyum<span>@</span>stibo<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Updated +coder-options option to not clear the
+entire map of coder options, but accept a list of names to remove
+from the map. Use option argument "*" to clear the entire map of
+coder options.</li>
+<li>magick/image.c, magick/image.h: Added function
+RemoveCoderOptions. Added cast of signed char to unsigned char and
+int in calls to isspace and isprint.</li>
+<li>magick/utility.c: Added cast of signed char to unsigned char and
+int in calls to isspace and isprint. Added special handling of
++coder-options option in ExpandFilenames function.</li>
+</ul>
+</blockquote>
+<p>2003-10-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/reference/read/input_tim.miff: The TIM read results
+changed somewhat due to Glenn's ScaleColor5to8 fix.</li>
+</ul>
+</blockquote>
+<p>2003-10-01 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Revised ScaleColor5to8 and ScaleColor6to8 macros to fill in the
+low bytes.</li>
+<li>coders/bmp.c (ReadBMPImage): scaling of 8-8-8-8-bit images was
+also slightly incorrect.</li>
+</ul>
+</blockquote>
+<p>2003-09-30 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (ReadBMPImage): scaling of 5-5-5-bit and 5-6-5-bit
+images was slightly incorrect.</li>
+</ul>
+</blockquote>
+<p>2003-09-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): When using the generic bit-stream
+marshaller to read colormapped/gray images, the slight performance
+improvement from creating a special case for matte images did not
+justify almost doubling the amount of code. Therefore, the two
+loops are combined back into one.</li>
+</ul>
+</blockquote>
+<p>2003-09-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Fixed reading grayscale TIFFs
+that have a transparency channel. Now uses a generic bit-stream
+marshaller to allow reading any grayscale or colormapped TIFF with
+any bits per sample in the range of 1 to 16.</li>
+<li>magick/bit_stream.h: Added a generic implementation for
+marshalling from a bit-stream into a quantum. Still needs
+re-writing for best performance.</li>
+<li>PerlMagick/t/tiff/read.t: Added a test case for reading 8-bit
+grayscale TIFF with matte. Corrected grayscale 12-bit read
+signatures. Added 16 color PseudoClass read test. Added 4-bit
+grayscale read test.</li>
+</ul>
+</blockquote>
+<p>2003-09-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Add support for writing
+DirectClass grayscale images at 4 bits per sample, including those
+with an opacity channel. This allows writing smaller files
+(half the size) when the image has 16 (or less) levels of gray.
+Use "gm convert inimage.tiff -depth 4 outimage.tiff" to quickly
+create grayscale TIFF file with 16 (or less) levels of gray.</li>
+</ul>
+</blockquote>
+<p>2003-09-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS: Updated NEWS file with changes since last update.</li>
+<li>index.html: Added a link to the www/AUTHORS.html file, as well
+as text stating that GraphicsMagick is originally derived from
+ImageMagick 5.5.2, with a link to the ImageMagick site.</li>
+<li>Makefile.am: Add rules to generate www/AUTHORS.html.</li>
+<li>www/AUTHORS.html: New HTML file based on the AUTHORS file in the
+source package. GraphicsMagick has many authors.</li>
+</ul>
+</blockquote>
+<dl class="docutils">
+<dt>2003-09-25 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></dt>
+<dd><ul class="first last simple">
+<li>magick/image.c: Updated DescribeImage to cleanup EXIF data display
+based on work by Cristy in ImageMagick.</li>
+</ul>
+</dd>
+</dl>
+<p>2003-09-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Add support for writing
+colormapped TIFF images with 1, 2, & 4 bits per colormap index.
+This allows writing smaller files.</li>
+</ul>
+</blockquote>
+<p>2003-09-24 Lars Ruben Skyum <<a class="reference external" href="mailto:lars.skyum%40stibo.com">lars<span>.</span>skyum<span>@</span>stibo<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/ps3.c: Now creates a correct %%BoundingBox for images
+with resolution stored as pixels per centimeter. Renamed serialize
+functions. Added comment headers where they were
+missing. Reformatted code to be in alignment with GraphicsMagick
+standard formatting.</li>
+<li>magick/map.c: Fixed semaphore double locking problem in
+MagickMapCloneMap.</li>
+</ul>
+</blockquote>
+<p>2003-09-23 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li>BCBMagick/readme.txt : Updated compilation instructions.</li>
+<li>BCBMagick/magick/libMagick.bpr : Updated project, now include map.c.</li>
+<li>BCBMagick/lcms/Projects/BCB6/lcms.bpr : Updated project, now
+include cmscam02.c and cmsvirt.c. Much thanks to Alex Dvoretsky
+for bringing this problem to my attention.</li>
+</ul>
+</blockquote>
+<p>2003-09-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.h (Image): Moved private members to bottom of
+structure.
+(_ImageInfo): Moved private members to bottom of
+structure.</li>
+<li>magick/Makefile.am (pkginclude_HEADERS): Don't install
+semaphore.h.
+(noinst_HEADERS): Distribute map.h and semaphore.h.</li>
+<li>magick/image.h (ImageInfo): Change coder_options member from
+type <cite>MagickMap</cite> to type <cite>void *</cite>.</li>
+<li>coders/png.c: include magick/semaphore.h.</li>
+<li>magick/blob.c: include magick/semaphore.h.</li>
+<li>magick/color.c: include magick/semaphore.h.</li>
+<li>magick/constitute.c: include magick/semaphore.h.</li>
+<li>magick/delegate.c: include magick/semaphore.h.</li>
+<li>magick/log.c: include magick/semaphore.h.</li>
+<li>magick/magic.c: include magick/semaphore.h.</li>
+<li>magick/magick.c: include magick/semaphore.h.</li>
+<li>magick/module.c: include magick/semaphore.h.</li>
+<li>magick/semaphore.c: include magick/semaphore.h.</li>
+<li>magick/stream.c: include magick/semaphore.h.</li>
+<li>magick/tempfile.c: include magick/semaphore.h.</li>
+<li>magick/type.c: include magick/semaphore.h.</li>
+<li>magick/blob.h (_BlobInfo): Changed <cite>Semaphore *</cite> to <cite>void *</cite>.</li>
+<li>magick/cache.h (_CacheInfo): Changed <cite>Semaphore *</cite> to <cite>void *</cite>.</li>
+<li>magick/image.h (_Image): Changed <cite>Semaphore *</cite> to <cite>void *</cite>.</li>
+<li>magick/command.c: Updated each invokation of MagickMapAddEntry()
+to add an exception argument.</li>
+<li>tests/maptest.c: Updated to pass an exception argument to
+MagickMapAddEntry.</li>
+<li>magick/image.c (AddCoderOptions): Added exception argument
+and some more error handling.</li>
+<li>magick/map.c: Added formal documentation for methods.
+(MagickMapCloneMap): Added exception argument.
+(MagickMapAddEntry): Added exception argument and status.</li>
+</ul>
+</blockquote>
+<p>2003-09-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/emf.c: Changed NotAnEMFFile to ImproperImageHeader.</li>
+<li>magick/map.h: Changed all size parmeters from type <cite>unsigned
+long</cite> to <cite>size_t</cite>.</li>
+<li>magick/map.c (MagickMapCopyBlob): Add new function to support
+copying a Blob in a MagickMap.
+(MagickMapDeallocateBlob): Add new function to support
+deallocating a Blob in MagickMap.</li>
+</ul>
+</blockquote>
+<p>2003-09-23 Lars Ruben Skyum <<a class="reference external" href="mailto:lars.skyum%40stibo.com">lars<span>.</span>skyum<span>@</span>stibo<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/ps3.c: Fixed handling the case when no -coder-options are
+provided to the PS3 coder.</li>
+</ul>
+</blockquote>
+<p>2003-09-22 Lars Ruben Skyum <<a class="reference external" href="mailto:lars.skyum%40stibo.com">lars<span>.</span>skyum<span>@</span>stibo<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/ps3.c: Changed %%Creator version to use
+MagickLibVersionText, increased precision in HiResBoundingBox,
+added a coder specific option for rendering bilevel images with
+the PS imagemask operator indstead of the image operator.</li>
+<li>magick/command.c: Added "-coder-options" command line argument
+to all relevant command line utilities. Option argument to
+-coder-options is a list of comma separated key-value pairs that
+are saved in a MagickMap in ImageInfo for (de-)coders to use. See
+PS3 coder for an example that checks for: -coder-options
+"ps:image=imagemask"</li>
+<li>magick/image.c, magick/image.h: Added function AddCoderOptions().</li>
+<li>magick/map.c, magick/map.h: removed MS-DOS line terminators.</li>
+</ul>
+</blockquote>
+<p>2003-09-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/maptest.c (main): Test/demo program for key,value map API.</li>
+<li>magick/map.c, magick/map.h: Implementation of a key,value map
+API for internal use.</li>
+</ul>
+</blockquote>
+<p>2003-09-19 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lcms/include/icc34.h lcms.h: Added back the icc34.h header and
+changes to make lcms compile on Win32" icc34.h lcms.h.</li>
+</ul>
+</blockquote>
+<p>2003-09-19 Lars Ruben Skyum <<a class="reference external" href="mailto:lars.skyum%40stibo.com">lars<span>.</span>skyum<span>@</span>stibo<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/ps3.c: Fixed warnings from Solaris compiler.</li>
+</ul>
+</blockquote>
+<p>2003-09-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>locale/C.mgk: Eliminated the many "NotA" messages since they may
+all be considered forms of "ImproperImageHeader". It is useful to
+provide the origin of such messages in case the wrong coder has
+been invoked, however, this is expensive to do via the message
+database since it explodes the number of messages. The exception
+logging can help here. Once the exception reports include the
+reporting entity, it will be more clear when the software
+misbehaves.</li>
+<li>magick/error.h (ThrowReaderException2): Remove since no longer
+used.
+(ThrowReaderException): Simplified implementation so that
+ThrowException is not expanded twice.</li>
+<li>magick/error.h (ThrowReaderException3): Remove since never used.</li>
+<li>coders/xtrn.c (ReadXTRNImage): Use ThrowReaderException rather
+than ThrowReaderException2.</li>
+<li>locale/C.mgk (MissingArgument) Updated to include %s so that the
+description field appears earlier in the message.</li>
+<li>magick/error.c (DefaultErrorHandler): Added a hack to allow the
+<cite>reason</cite> member to include a %s so that it may specify the
+formating of the message. Care should be taken to not over-use
+this hack.</li>
+</ul>
+</blockquote>
+<p>2003-09-18 Lars Ruben Skyum <<a class="reference external" href="mailto:lars.skyum%40stibo.com">lars<span>.</span>skyum<span>@</span>stibo<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/ps3.c: Major update of the PS3 coder. Now ascii85 encodes
+all binary data. Many printer spoolers don't like the binary
+data. The coder now creates much smaller files for bilevel, gray,
+and colormapped images. Compression and image type is now
+separated so they may be combined independently. Any alpha channel
+is separated into a separate mask so it's possible to mask
+bilevel, gray, colormapped, rgb, and CKYK images. You may also
+mask a JPEG compressed PS file for instance. Clipping masks
+created from a photoshop clipping path with -clip option is
+converted to a corresponding postscript clipping path. New
+functions need comment headers.</li>
+<li>magick/attribute.c: Added TracePSClippingPath for creating a
+postscript clipping path from a photoshop clipping path.</li>
+<li>magick/compress.c, magick/compress.h: Added write-hook based
+interface to compression functions. Required for ascii encoding
+compressed, binary data. The interface between blob write
+functions, compression functions, and encoding functions could
+benefit from more of this work.</li>
+<li>magick/image.c: ClipPathImage now stores the name of the
+clipping path in the mask image filename so that it is remembered
+and may be used for creating a postscript clipping path for
+postscript output.</li>
+<li>coders/modules.mgk: Added EPS3 mapping to module PS3.</li>
+</ul>
+</blockquote>
+<p>2003-09-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Coalesced various "Missing" error reports into
+one "MissingArgument" error report in order to reduce the number
+of messages to be maintained.</li>
+<li>locale/C.mgk: Removed almost all "Missing" messages.</li>
+<li>magick/gm_messages.mc: Added Microsoft message compiler source
+file to CVS until which time it may be generated automatically
+during the build.</li>
+</ul>
+</blockquote>
+<p>2003-09-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>locale/Makefile: Added ability to generate gm_messages.mc
+(for Windows message compiler) as well as adding <cite>clean</cite> and
+<cite>install</cite> targets.</li>
+<li>magick/delegate.h: Visual Studio .NET 2003 doesn't like
+the chaining of GhostscriptVector members which share a
+common return type. Splitting the definitions solves this
+problem.</li>
+</ul>
+</blockquote>
+<p>2003-09-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/deprecate.h (MagickSignedType): Compatibility definition
+to handle ImageMagick API change.
+(MagickUnsignedType): Compatibility definition to handle
+ImageMagick API change. The new names are just as useless as the
+old names, but at least they are shorter.</li>
+<li>magick/command.c: Linux's sscanf has the terrible bug that it
+improperly handles pulling out the first floating value from the
+string "0x1". Instead of retrieving the value 0 and returning 1,
+it returns 0, probably because it rejects the string as a hex
+constant. As a result, all options which used sscanf to validate
+this input are now converted to use IsGeometry().</li>
+</ul>
+</blockquote>
+<p>2003-09-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ltdl/ltdl.c: Update to libltdl current as of today.</li>
+<li>ltmain.sh: Update to libtool current as of today.</li>
+<li>configure.ac: For HPUX C++ compiler, add -AA to CXXFLAGS rather
+than CXX.</li>
+</ul>
+</blockquote>
+<p>2003-09-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Decided that the standards conformance
+defines create more problems than they solve so they are
+removed.
+Move the large-file tests to before the libtool configuration
+since the libtool configuration was causing stdlib.h to be
+included prior to the large file defines, and this causes
+header failure with C++ under AIX.</li>
+<li>www/api/types.html: Update description of MonitorHandler.</li>
+</ul>
+</blockquote>
+<p>2003-09-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Set CXX to PTHREAD_CXX if necessary (and warn).</li>
+<li>acinclude.m4 (ACX_PTHREAD): Add check to see if xlC_r should be
+used for AIX.</li>
+</ul>
+</blockquote>
+<p>2003-09-10 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c: Fixed handling of arc primitive (see IM-5.5.8).</li>
+</ul>
+</blockquote>
+<p>2003-09-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/log.h: It seems that test programs are using
+GetMagickModule so make it visible by default.</li>
+<li>configure.ac: Use GM_FUNC_MMAP_FILEIO macro to test mmap.</li>
+<li>acinclude.m4 (GM_FUNC_MMAP_FILEIO): New macro to test mmap's
+capability to do coherent file I/O. The AC_FUNC_MMAP macro
+was not testing the mmap features that GraphicsMagick uses, and
+was failing on a number of systems.</li>
+<li>magick/blob.c (BlobMapModeToString): Only include this static
+function if HAVE_MMAP is defined.</li>
+<li>coders/locale.c (WriteLOCALEImage): Fix FormatString argument
+type inconsistencies.</li>
+<li>wand/magick_compat.h: Change MagickExport to WandExport.</li>
+<li>coders/jpeg.c, coders/locale.c, coders/meta.c, coders/miff.c,
+coders/palm.c, coders/pict.c, coders/svg.c, coders/tiff.c,
+coders/topol.c, magick/cache.c, magick/display.c, magick/image.c,
+magick/widget.c: Removed unused values, changed storage types, or
+added explicit casts, in order to reduce the number of "REMARK"s
+when using the SGI IRIX compiler.</li>
+<li>magick/render.c (DrawClipPath): Fix memory leak of
+clone_info->clip_path. Problem reported by Vladimir
+<<a class="reference external" href="mailto:lvm%40integrum.ru">lvm<span>@</span>integrum<span>.</span>ru</a>>.
+(DestroyDrawInfo): Remove unnecessary checks for non-null prior to
+invoking MagickFreeMemory. MagickFreeMemory already checks for
+non-null.</li>
+<li>magick/log.h (GetCurrentFunction): Apparently Visual C++ 6.0
+does not support __FUNCTION__. Problem reported by Vladimir
+<<a class="reference external" href="mailto:lvm%40integrum.ru">lvm<span>@</span>integrum<span>.</span>ru</a>>.</li>
+<li>wand/magick_compat.c: All functions in magick_compat.c must use
+WandExport rather than MagickExport. Fix recommended by Vladimir
+<<a class="reference external" href="mailto:lvm%40integrum.ru">lvm<span>@</span>integrum<span>.</span>ru</a>>.</li>
+<li>magick/constitute.c (PushImagePixels): number_pixels was always
+cast to a long during use, so change to store value in a long
+instead.
+(PopImagePixels): number_pixels was always
+cast to a long during use, so change to store value in a long
+instead.</li>
+</ul>
+</blockquote>
+<p>2003-09-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/psd.c: Eliminated warning regarding unused initialized
+variable.</li>
+<li>magick/log.c: Eliminate type warnings regarding enum assignment.</li>
+<li>coders/locale.c (WriteLOCALEImage): Use UndefinedException
+rather than 0 in severity_list terminating entry in order to avoid
+a type conversion warning.</li>
+<li>magick/image.c (SetImageChannelDepth): Depth parameter was being
+returned rather than status. Oops!</li>
+<li>magick/effect.c (BlurScanline): Due to automatic casting
+conventions, computation was being done (at least with SGI
+compiler) as type <cite>unsigned long</cite> rather than <cite>long</cite> as it should
+have been.</li>
+<li>coders/jpeg.c, coders/meta.c, coders/miff.c, coders/msl.c,
+coders/palm.c, coders/pcd.c, coders/psd.c, coders/svg.c,
+coders/tiff.c, coders/xcf.c, magick/render.c, : Quench many SGI
+compiler warnings regarding variables which are initialized but
+never used.</li>
+<li>magick/xwindow.h: Undef gravity defines so that enumerated type
+is used instead.</li>
+</ul>
+</blockquote>
+<p>2003-09-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/log.c (LogMagickEvent): Windows system logging
+functionality is not currently ported to work with Cygwin so
+disable when compiling under Cygwin.</li>
+<li>magick/log.c (Win32EventlogOutput): Remove spurious comma in enum.</li>
+<li>wand/drawing_wand.h: Remove junk comment marker that I forgot to
+remove.</li>
+<li>magick/studio.h: Provide prototypes for strlcpy and vsnprintf if
+the system doesn't provide them in the requested compilation
+environment.</li>
+<li>configure.ac: Add necessary standards compilance definitions to
+magick_config.h.
+Check for strlcpy and vsnprintf prototypes.</li>
+<li>Makefile.am (DOCDIRS): www/api/types does not exist anymore.</li>
+</ul>
+</blockquote>
+<p>2003-09-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Move multithread tests prior to libtool
+configuration in case value of CC is changed. Otherwise libtool
+gets confused and refuses to run.</li>
+<li>acinclude.m4 (ACX_PTHREAD): If using AIX CC <cite>xlc</cite> use <cite>xlc_r</cite>
+for multithread compiler.</li>
+<li>coders/jpeg.c: Undef HAVE_STDLIB_H before including the
+jpeg headers or else we get an already defined error/warning.</li>
+</ul>
+</blockquote>
+<p>2003-09-04 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li>BCBMagick : Updated whole directory tree to achieve correct
+compilation with Borland C++ Buider 6.0.</li>
+</ul>
+</blockquote>
+<p>2003-09-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (ClipPathImage): Remove MS-DOS line terminations
+(actually, extra carriage returns) which somehow crept into
+ClipPathImage.</li>
+<li>locale/C.mgk: Added message for "PNG library is too old".</li>
+</ul>
+</blockquote>
+<p>2003-09-04 Lars Ruben Skyum <<a class="reference external" href="mailto:lars.skyum%40stibo.com">lars<span>.</span>skyum<span>@</span>stibo<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/transform.c (ProfileImage): Bugfix: conditional
+compilation based on LCMS being present or not now works as
+expected. An exception is thrown if LCMS is not present and
+profile conversion is used.</li>
+</ul>
+</blockquote>
+<p>2003-09-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/txt.c (ReadTXTImage): Fix strlen() pointer type warning.</li>
+<li>magick/image.c (TextureImage): Fixed return with no value warning.</li>
+<li>magick/color.c (GetColorInfoArray): Decided that the const
+return value was a bad idea. Therefore, the return type has been
+made non-const.</li>
+<li>magick/magick.c (GetMagickInfoArray): Decided that the const
+return value was a bad idea. Therefore, the return type has been
+made non-const.</li>
+<li>tests/constitute.c, tests/rwblob.c, tests/rwfile.c : Define
+MAGICK_IMPLEMENTATION since these test programs using some internal
+extensions.</li>
+<li>configure.ac: Test C++ compiler for __func__ support.</li>
+<li>magick/log.h: Added GetCurrentFunction() macro to handle
+__func__ support determination. Re-wrote GetMagickModule() macro
+to use GetCurrentFunction(). Changes should allow compilation of
+Magick++ when the C compiler supports __func__ but the C++
+compiler does not.</li>
+<li>configure.ac: Changed from using HAS___func__ define to
+HAS_C__func__ since this feature may be language sensitive.</li>
+<li>locale/C.mgk: Added missing JNGCompressionNotSupported message.</li>
+</ul>
+</blockquote>
+<p>2003-09-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (Generate8BIMAttribute): Fix sscanf argument
+type mis-match.</li>
+<li>coders/ps3.c (ZLIBEncodeImage): Fix mis-classified
+ZipLibraryIsNotAvailable error report.</li>
+<li>coders/url.c (RegisterURLImage): Only register URL format
+support if libxml2 is available.</li>
+<li>coders/msl.c (RegisterMSLImage): Only register MSL format
+support if libxml2 is available.</li>
+</ul>
+</blockquote>
+<p>2003-09-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/histogram.c (WriteHISTOGRAMImage): Remove a useless loop.</li>
+<li>coders/wpg.c: Applied patch from Fojtik Jaroslav to support
+reading WPGs which use the EXT token.</li>
+</ul>
+</blockquote>
+<p>2003-08-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/color.c (HistogramToFile): Renamed static method
+<cite>Histogram</cite> to <cite>HistogramToFile</cite> to make it more clear what this
+function does.
+(GetColorHistogram): Added new function to support retrieving a
+color histogram of the image. A color histogram contains a count
+of how many times each color occurs in the image.</li>
+<li>magick/image.c (GetImageChannelDepth): Return an <cite>unsigned int</cite>
+rather than <cite>long</cite>.</li>
+</ul>
+</blockquote>
+<p>2003-08-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/Magick.xs: Add support for CopyCyan, CopyMagenta,
+CopyYellow, and CopyBlack, composition operators.</li>
+<li>magick/composite.c (CompositeImage): Added support for
+CopyCyanCompositeOp, CopyMagentaCompositeOp,
+CopyYellowCompositeOp, and CopyBlackCompositeOp, composition
+operators.</li>
+</ul>
+</blockquote>
+<p>2003-08-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/*: Updated to current ImageMagick Wand API (minus a few
+unimplemented functions).</li>
+<li>magick/image.c (TextureImage): Add status return because Wand API
+wants it. Inherit is_grayscale status from texture image.</li>
+<li>magick/fx.c (SolarizeImage): Add status return because Wand API
+wants it.</li>
+<li>magick/resource.c (SetMagickResourceLimit): Add status return
+because Wand API wants it.</li>
+<li>magick/draw.c (DrawPeekGraphicContext): Now returns a
+copy of the current DrawInfo context rather than returning
+a pointer into the context stack. The user must destroy
+this copy using DestroyDrawInfo() once it is no longer
+needed.</li>
+</ul>
+</blockquote>
+<p>2003-08-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/filters/LIBRARY.txt: This file is necessary to
+incorporate analyze.c into the static build. Without it the
+build fails.</li>
+</ul>
+</blockquote>
+<p>2003-08-23 Lars Ruben Skyum <<a class="reference external" href="mailto:lars.skyum%40stibo.com">lars<span>.</span>skyum<span>@</span>stibo<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/transform.c: ProfileImage updated to handle alpha
+channels and grayscale images. Also optimized color profiling of
+color mapped images and fixed a few bugs in profiling of CMYK
+images.</li>
+<li>magic/locale_c.h: added MagickExport to prototype declaration of
+GetLocaleMessageFromID in WriteLOCALEImage again. Please update
+your locale coder.</li>
+</ul>
+</blockquote>
+<p>2003-08-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c: Applied patch from Fojtik Jaroslav to use the
+GetMagicInfo() function to obtain the format of embedded images,
+and to provide a default WPG palette if the WPG file does not
+supply a palette.</li>
+</ul>
+</blockquote>
+<p>2003-08-22 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magickgm_messages.bin locale_c.h transform.c: Fixed missing
+message problem and added support for new lcms error handler.</li>
+</ul>
+</blockquote>
+<p>2003-08-21 Lars Ruben Skyum <<a class="reference external" href="mailto:lars.skyum%40stibo.com">lars<span>.</span>skyum<span>@</span>stibo<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c, magick/image.c, magick/command.c: Added
+"clippath" option for clipping named Photoshop clipping paths,
+increased precision in clipping path knots, added comments, and
+fixed a few bugs resulting from moving TraceClippingPath function
+from ImageMagick to GraphicsMagick. Still need to update some of
+the documentation.</li>
+<li>magick/locale_c.h, magick/studio.h: added MagickExport to
+declaration of GetLocaleMessageFromID and moved include of
+magick/locale_c.h after declaration of MagickExport. This fixes a
+link error in dynamic, DLL version.</li>
+<li>coders/locale.h: added MagickExport to prototype declaration of
+GetLocaleMessageFromID in WriteLOCALEImage.</li>
+</ul>
+</blockquote>
+<p>2003-08-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/subroutines.pl (testRead): Ignore useless TIFF
+warning so that 12-bit TIFF test passes.</li>
+<li>magick/constitute.c (ReadImage): Ensure that the reported image
+magic string is that of the user-specified input file rather than
+a temporary file prepared by an external delegate program.</li>
+<li>magick/command.c (ImportImageCommand): Since
+DestroyExceptionInfo() now sets the destroyed exception signature
+to an invalid value, GetExceptionInfo(exception) must be invoked
+when the intention is to simply purge the exception. This fix
+resolves an abort when executing <cite>gm import</cite>.</li>
+</ul>
+</blockquote>
+<p>2003-08-18 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magickgm_messages.bin locale_c.h transform.c: Updates that
+add latest enhancments by Lars to color management code in
+ProfileImage.</li>
+</ul>
+</blockquote>
+<p>2003-08-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c: Incorporated patch from Fojtik Jaroslav to support
+rendering embedded WMFs.</li>
+</ul>
+</blockquote>
+<p>2003-08-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageChannelDepth): New function to transform
+the specified channel so it fits the specified modulus depth.</li>
+<li>magick/blob.c (BlobToImage): Skip calling SetImageInfo() if
+magick is already set.</li>
+</ul>
+</blockquote>
+<p>2003-08-18 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/Magick.xs: Some fixes to get PerlMagick compiling
+again due to new ID based error macros.</li>
+</ul>
+</blockquote>
+<p>2003-08-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/error.h (enum): Remove spurious comma.</li>
+</ul>
+</blockquote>
+<p>2003-08-17 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coderspng.c: Had to modify a few exception calls to work with
+newest macros.</li>
+</ul>
+</blockquote>
+<p>2003-08-17 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coderslocale.c magick/error.h locale.c locale_c.h studio.h:
+The LOCALEH header file generator now adds an MGK_ prefiix to
+all the ID defines as part of a fix to support the new error
+and exception macros cross platform.</li>
+</ul>
+</blockquote>
+<p>2003-08-16 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wandmagick_wand.c pixel_wand.c: The wand api code was totally
+left out of the large macro conversion below as an oversight.</li>
+</ul>
+</blockquote>
+<p>2003-08-15 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>.coders art.c avi.c avs.c bmp.c caption.c clipboard.c cmyk.c
+cut.c dcm.c dib.c dps.c dpx.c emf.c ept.c fax.c fits.c fpx.c gif.c
+gradient.c gray.c hdf.c histogram.c html.c icon.c jbig.c jp2.c
+jpeg.c label.c locale.c logo.c map.c mat.c matte.c meta.c miff.c
+mono.c mpc.c mpeg.c msl.c mtv.c mvg.c null.c otb.c palm.c pcd.c
+pcl.c pcx.c pdb.c pdf.c pict.c pix.c png.c pnm.c preview.c ps.c
+ps2.c ps3.c psd.c pwp.c rgb.c rla.c rle.c sct.c sfw.c sgi.c
+stegano.c sun.c svg.c tga.c tiff.c tile.c tim.c topol.c ttf.c txt.c
+uil.c url.c uyvy.c vicar.c vid.c viff.c wbmp.c wmf.c wpg.c x.c xbm.c
+xc.c xcf.c xpm.c xtrn.c xwd.c yuv.c .magickanimate.c annotate.c
+blob.c cache.c cache_view.c color.c color.h command.c compress.c
+constitute.c decorate.c delegate.c display.c draw.c effect.c
+enhance.c error.c error.h fx.c gm_messages.bin image.c list.c
+locale.c locale_c.h log.c mac.c magic.c magick.c module.c montage.c
+nt_feature.c paint.c quantize.c registry.c render.c resize.c
+segment.c semaphore.c shear.c signature.c static.c static.h
+stream.c studio.h tempfile.h transform.c type.c utility.c widget.c
+xwindow.c : Changes to support ID based message access and checking
+all message usages. The main thing that was done was to remove all
+the quotes around the "tags" used to lookup messages defined in
+the localeC.XML file. Macros were added to error.h to allow the
+code to be compiled for either string based access or binary ID
+based access. Using binary ID's will cause the code to fail to
+compile if a message does not exist in C.XML, since no ID will be
+created for a missing message. This change then allowed us to
+easily track down all the messages that were "missing" or not
+being accessed properly. The problems were massive and took many
+days to resolve. I have left the code compiling in ID mode to keep
+things in sync going forward and also because it makes message
+lookup instantaneous. An ID is just an index into and array of
+char *'s. There is still a lot of cleanup work remaining, but this
+is a very good start.</li>
+</ul>
+</blockquote>
+<p>2003-08-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/error.c (GetLocaleExceptionMessage): Add check to avoid
+duplicating severity prefix.</li>
+<li>magick/log.c (LogMagickEvent): Incorporated fix from Bill
+Radcliffe to enable logging control flags to work properly again.</li>
+<li>NEWS: Updated news.</li>
+<li>magick/blob.c (OpenBlob): Rewind file descriptor so that first
+read is at zero offset. This fixes reading GIFs via a
+user-provided file handle.</li>
+</ul>
+</blockquote>
+<p>2003-08-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (GetImageDepth): Extend so that the actual
+minimum depth required to represent the image is
+returned. Previously only the values 8, 16, and 32 were
+returned. This means that a value of one is returned for a
+monochrome image. Also fixed a bug in that the pixels were
+incremented while the depth was incremented, resulting in the
+first image pixels not being properly evaluated for depth.
+(SetImageDepth): Extend to support converting the image to
+arbitrary modulus depths.
+(GetImageChannelDepth): New function to obtain the modulus depth
+for a specified image channel.</li>
+</ul>
+</blockquote>
+<p>2003-08-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/draw.c (MvgAutoWrapPrintf): StreamError reported when
+DrawError was intended.</li>
+<li>coders/logo.c (ReadLOGOImage): Report FileOpenError rather than
+BlobError if requested image does not exist.</li>
+</ul>
+</blockquote>
+<p>2003-08-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/cache.c (PersistCache): If HAVE_SYSCONF and _SC_PAGE_SIZE
+are defined, then assume that sysconf works and don't use legacy
+getpagesize() function.</li>
+<li>magick/studio.h (_XOPEN_SOURCE): Should be defined as 600 in
+order to match _POSIX_C_SOURCE=200112L according to the Single
+UNIX Specification v3. This is necessary for the vsnprintf
+prototype to be visible.</li>
+<li>magick/attribute.c (ReadByte): Fix compilation warnings due to
+casting <cite>unsigned char *</cite> to <cite>char *</cite> by changing function
+definition to accept <cite>unsigned char *</cite> instead.</li>
+<li>magick/error.h (UndefinedException): UndefinedException should
+be ExceptionType, not ExceptionBaseType.</li>
+<li>magick/magick.c (IsValidFilesystemPath): Eliminate warning about
+unused function when UseInstalledMagick is defined.</li>
+<li>magick/error.c (ThrowLoggedException): Fix improper parameters
+passed to LogMagickEvent() when reason is not available.</li>
+</ul>
+</blockquote>
+<p>003-08-07 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/log.c, log.h: Added ability to log by either severity
+or by category of event. Made the defualt on windows to log all
+fatal errors, errors, and warnings to the event log. This will
+include anything generated by exceptions currently, but not any
+normal "informational" logging.</li>
+</ul>
+</blockquote>
+<p>2003-08-07 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/log.c, log.h: Translation of event codes to mask vals
+was not working. Code was left out of last update. It is now in.</li>
+</ul>
+</blockquote>
+<p>2003-08-07 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/error.c: Protect against NULL string passed into the
+message lookup function.</li>
+</ul>
+</blockquote>
+<p>2003-08-07 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/locale.c: Switched use of IsAccessible to nonloggging
+version to prevent recursive problems.</li>
+</ul>
+</blockquote>
+<p>2003-08-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/Makefile.am (noinst_HEADERS): Distribute locale_c.h.</li>
+<li>locale/Makefile: Output locale_c.h.</li>
+<li>utilities/gm.c (main): Fix typo in Unix InitializeMagick
+invocation.</li>
+<li>configure.ac: Use ACX_PTHREAD pthreads test macro.</li>
+<li>magick/(semaphore.c,spinlock.h,studio.h): Change HasPTHREADS
+conditional define to HAVE_PTHREAD.</li>
+<li>magick/Makefile.am (noinst_HEADERS): Include spinlock.h in
+distribution.</li>
+</ul>
+</blockquote>
+<p>2003-08-06 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>contribwin32ATL7ImageMagickObject/ImageMagickObject.cpp,
+ImageMagickObject_.h, ImageMagickObject.def, ImageMagickObject.rc
+gm.rc: Changes to get things compiling again since all windows
+specific logging support has been eliminated. The special build
+script BuildImageMagickObject.cmd now compiles the message file
+for resource based messages. The result is in gm_messages.bin.
+The script also generates a special version of gm.exe that uses
+the COM dll as a regular DLL and links to it. This is the long
+desired Moby DLL build idea.</li>
+<li>magick/error.c, magick/error.h, magick/log.c, magick/log.h:
+Upgrade of logging system to take over previous special logging
+code for windows in nt_base.c. The new logic provides logging of
+events to the debug api and the windows event log and also
+provides a generic text file logging method.</li>
+<li>magick/gm_messages.bin, magick/ImageMagick.rc: New compiled
+message file based on data in localeC.mgk. RC file modified to
+include this as a resource.</li>
+<li>magick/locale.c, magick/locale_c.h: locale_c.h is generated by
+the LOCALEH format of the locale coder. The logic in locale.c uses
+the tables in the header lookup messages. On windows, all the
+messages are stored as resources, while on UNIX they remain in a
+string table.</li>
+<li>locale/C.mgk: Removed duplicate messages and added some new
+default messages that help to create a complete set of severity
+strings.</li>
+<li>magick/command.c, magick/magick.c: Get rid compiler warnings.</li>
+</ul>
+</blockquote>
+<p>2003-08-05 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c, magick/gm.c: Application level changes to
+implement the client name - filename changes. The client name can
+now be anything that the application wants and has nothing to do
+with the saved filename of the application.</li>
+<li>magick/nt_base.c, magick/nt_base.h, magick/magick.c: Ripped out
+old nt specific debugging and logging logic. Moving to the
+standard logging. New and major revisions to InitializeMagick to
+make the code more maintainable, reliable, and reaable. It should
+be functionally identical, but implements the new split client
+name and filename methododology.</li>
+<li>magick/utility.c, magick/utility.h: Added a couple of new
+routines to support splitting the overloaded use of the client
+name and client filename.</li>
+<li>coders/xtrn.c: Minor code cleanup</li>
+</ul>
+</blockquote>
+<p>2003-08-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Copyright.txt: Added missing copyright notice which is required
+due to copying the rlecomp manual page into ImageMagick.</li>
+<li>doc/config_files.imdoc: Started documentation for configuration
+files.</li>
+<li>magick/xwindow.c (XSignalHandler): Ensure that segment_info is
+non-null before attempting to use it. Much thanks to John Cristy
+for bringing this problem to our attention.</li>
+</ul>
+</blockquote>
+<p>2003-08-05 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/locale.c: Added several new formats to this coder to
+generate windows message resource format messages and also to
+generates a new header file format that will support a table based
+version of the other magick/locale.c.</li>
+<li>coders/xtrn.c: Minor code cleanup</li>
+</ul>
+</blockquote>
+<p>2003-08-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Only configure C and C++ libtool tags.</li>
+<li>PerlMagick/t/reference/composite/*.miff: Added some composition
+test reference images. These reference images will serve as
+placeholders until better composition tests can be figured out.
+It is not clear from the documentation what some of the
+composition operators are supposed to do.</li>
+</ul>
+</blockquote>
+<p>2003-08-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>README.txt: Add documentation regarding using TRIO.</li>
+<li>configure.ac: Test for TRIO library if vsnprintf is not
+available.</li>
+<li>magick/studio.h: Remap vsnprintf to trio_vsnprintf if TRIO is
+available.</li>
+<li>coders/topol.c, coders/wmf.c, magick/magick.c, magick/nt_base.c,
+magick/resource.c: Use traditional C comment form in C source
+files.</li>
+</ul>
+</blockquote>
+<p>2003-07-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/log.h (LogEventType::AllEvents): Increase the value of
+AllEvents so that it spans the complete positive range of a signed
+integer.</li>
+<li>magick/xwindow.c, magick/xwindow.h: Incorporate patch from John
+Cristy's ImageMagick to eliminate conditional dependence of
+magick/xwindow.h on <X11/extensions/XShm.h>.</li>
+<li>magick/magick_config_api.h.in: HasSharedMemory define no longer
+needed.</li>
+</ul>
+</blockquote>
+<p>2003-07-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/programming.html: Update Rmagick URL.</li>
+<li>GraphicsMagick.spec.in : Update according to instructions from
+Troy Edwards.</li>
+</ul>
+</blockquote>
+<p>2003-07-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>GraphicsMagick.spec.in: Replaced GraphicsMagick.spec with
+GraphicsMagick.spec.in, which is configured to produce
+GraphicsMagick.spec.</li>
+<li>configure.ac: Configure GraphicsMagick.spec.</li>
+</ul>
+</blockquote>
+<p>2003-07-29 Troy Edwards <<a class="reference external" href="mailto:vallimar%40sexorcisto.net">vallimar<span>@</span>sexorcisto<span>.</span>net</a>></p>
+<blockquote>
+<ul class="simple">
+<li>GraphicsMagick.spec: Updated to CVS build. Added the
+GraphicsMagickWand files to the spec. Only try to remove the
+unneeded perl package files if we are using PerlMagick.</li>
+</ul>
+</blockquote>
+<p>2003-07-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>GraphicsMagick.spec: Added RPM spec file authored by Troy
+Edwards <<a class="reference external" href="mailto:vallimar%40sexorcisto.net">vallimar<span>@</span>sexorcisto<span>.</span>net</a>>.</li>
+<li>NEWS: Add note regarding EXIF fix.</li>
+<li>magick/attribute.c (GenerateEXIFAttribute): Look for the profile
+name "EXIF" rather than "APP1".</li>
+</ul>
+</blockquote>
+<p>2003-07-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick_config_api.h.in: XWindowInfo structure in
+xwindow.h needs HasSharedMemory define.</li>
+<li>magick/xwindow.c, magick/xwindow.h: Move inclusion of
+<X11/extensions/shape.h> to xwindow.c.</li>
+<li>coders/dps.c, magick/xwindow.h: Move DPS includes to
+coders/dps.c</li>
+<li>coders/Makefile.am: Substituted values are also set as
+make variables, so use variables rather than substitutions.</li>
+<li>magick/log.c (GetLogBlob): MAGICK_HOME needs to take
+precedence over the client path for the uninstalled build.</li>
+<li>magick/type.c (GetTypeBlob): MAGICK_HOME needs to take
+precedence over the client path for the uninstalled build.</li>
+<li>magick/blob.c (GetConfigureBlob): MAGICK_HOME needs to take
+precedence over the client path for the uninstalled build.</li>
+<li>magick/module.c (FindMagickModule): MAGICK_HOME needs to take
+precedence over the client path for the uninstalled build.</li>
+</ul>
+</blockquote>
+<p>2003-07-24 Lars Ruben Skyum <<a class="reference external" href="mailto:lars.skyum%40stibo.com">lars<span>.</span>skyum<span>@</span>stibo<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (TraceClippingPath): Improvements to clipping
+path parsing.</li>
+</ul>
+</blockquote>
+<p>2003-07-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/cache.c: Disable the Windows open() extensions when
+compiling using Borland C++.</li>
+<li>magick/log.c (LogMagickEvent): Unlock semaphore before
+returning.</li>
+<li>ltdl/ltdl.h: Updated to latest CVS version.</li>
+<li>ltdl/ltdl.c: Updated to latest CVS version.</li>
+<li>Libtool: Updated to use latest CVS libtool.</li>
+</ul>
+</blockquote>
+<p>2003-07-17 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li>BCBMagick: Contributed initial Borland C++ Builder 6.0 build
+environment.</li>
+</ul>
+</blockquote>
+<p>2003-07-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/color.c (GetColorInfoArray): Added a function to access
+the color definition list as an array.
+(GetColorList): Added access locks to ensure that list is not
+re-ordered while it is being traversed.</li>
+<li>www/Magick++/Image.html: Add some more information regarding raw
+pixel access.</li>
+</ul>
+</blockquote>
+<p>2003-07-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/GraphicsMagickWand.pc.in (Cflags): Remove LFS_CPPFLAGS.</li>
+<li>wand/GraphicsMagickWand-config.in: Remove LFS_CPPFLAGS.</li>
+<li>magick/GraphicsMagick.pc.in (Cflags): Remove LFS_CPPFLAGS.</li>
+<li>magick/GraphicsMagick-config.in: Remove LFS_CPPFLAGS.</li>
+<li>configure.ac: Logic for setting LFS_CPPFLAGS was incomplete.</li>
+<li>coders/topol.c: Updated topol coder contributed by Jaroslav
+Fojtik. Topol is coming to life!</li>
+</ul>
+</blockquote>
+<p>2003-07-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.h: Add a typedef for ssize_t</li>
+<li>magick/deprecate.h: ExtendedSignedIntegralType and
+ExtendedUnsignedIntegralType are now deprecated types so they are
+moved to deprecate.h. Existing code which uses these types should
+continue to work.</li>
+<li>magick/blob.c (MapBlob): Change <cite>offset</cite> parameter from type
+off_t to magick_off_t so that it is not LFS dependent.</li>
+<li>magick/cache.c (GetPixelCacheArea): Return magick_off_t.
+(PersistCache): Change <cite>offset</cite> parameter to type magick_off_t.</li>
+<li>magick/cache.h (NexusInfo): Change <cite>length</cite> type from
+ExtendedSignedIntegralType to magick_off_t.
+(CacheInfo): Change <cite>offset</cite> and <cite>length</cite> types from
+ExtendedSignedIntegralType to magick_off_t.</li>
+<li>magick/blob.c (BlobToFile): Use ssize_t rather than
+ExtendedSignedIntegralType for count.
+(TellBlob): Return magick_off_t rather than
+ExtendedSignedIntegralType.</li>
+<li>configure.ac: Check for a ssize_t type.</li>
+<li>magick/blob.h (_BlobInfo): Change <cite>offset</cite> and <cite>size</cite> members
+from ExtendedSignedIntegralType to magick_off_t.</li>
+<li>magick/blob.c (GetBlobSize): Return magick_off_t rather than
+ExtendedSignedIntegralType.
+(SeekBlob): Accept and return magick_off_t rather than
+ExtendedSignedIntegralType.</li>
+</ul>
+</blockquote>
+<p>2003-07-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/monitor.c (MagickMonitor): Change <cite>quantum</cite> argument from
+type ExtendedSignedIntegralType to magick_int64_t. Change <cite>span</cite>
+argument from ExtendedUnsignedIntegralType to magick_uint64_t.</li>
+<li>magick/xwindow.c (XMagickMonitor): Change <cite>quantum</cite> argument from
+type ExtendedSignedIntegralType to magick_int64_t. Change <cite>span</cite>
+argument from ExtendedUnsignedIntegralType to magick_uint64_t.</li>
+<li>magick/widget.c (XMonitorWidget): Change <cite>quantum</cite> argument from
+type ExtendedSignedIntegralType to magick_int64_t. Change <cite>span</cite>
+argument from ExtendedUnsignedIntegralType to magick_uint64_t.</li>
+<li>magick/studio.h (QuantumTick): Change typecast from
+ExtendedSignedIntegralType to magick_int64_t.</li>
+<li>magick/resource.c (AcquireMagickResource): Change <cite>size</cite>
+argument type from ExtendedSignedIntegralType to magick_int64_t.
+(LiberateMagickResource): Change <cite>size</cite> argument type from
+ExtendedSignedIntegralType to magick_int64_t.</li>
+<li>magick/utility.c (FormatSize): Change <cite>size</cite> argument type from
+ExtendedSignedIntegralType to magick_int64_t.</li>
+<li>magick/nt_base.c: Change MagickOffset to magick_off_t.</li>
+<li>magick/studio.h (magick_off_t): Change MagickOffset to magick_off_t.</li>
+<li>coders/topol.c: Insert dummy member into palettRAS structure
+since Visual C++ doesn`t seem to handle empty structures.</li>
+<li>wand/GraphicsMagickWand.pc.in (prefix): Pass LFS CPPFLAGS.</li>
+<li>wand/GraphicsMagickWand-config.in: Pass LFS CPPFLAGS.</li>
+<li>wand/Makefile.am: Fix include path.</li>
+<li>magick/GraphicsMagick.pc.in (prefix): Pass LFS CPPFLAGS.</li>
+<li>magick/magick_config_api.h.in: Pass LFS configuration options
+until the API is fixed so that it is not LFS sensitive anymore.</li>
+<li>magick/GraphicsMagick-config.in: Pass LFS CPPFLAGS.</li>
+<li>PerlMagick/Makefile.PL.in: Pass LFS CPPFLAGS.</li>
+<li>magick/Makefile.am: Install magick_types.h.</li>
+<li>magick/api.h: Include magick_types.h.</li>
+<li>magick/studio.h: Include magick_types.h rather than integral_types.h.</li>
+<li>VisualMagick/magick/magick_types.h.in: New header file (replacing
+integral_types.h) to contain CPU and system-dependent primitive
+typedefs.</li>
+<li>magick/magick_types.h.in: New header file (replacing
+integral_types.h) to contain CPU and system-dependent primitive
+typedefs.</li>
+<li>configure.ac: Use AC_SYS_LARGEFILE to test for large file
+options. Update to determine integral typedefs for current CPU and
+compiler options. Configure magick_types.h.</li>
+<li>magick/attribute.c (TraceClippingPath): Apply patch from Lars
+Ruben Skyum which fixes clipping path parsing for paths generated
+by Adobe software which pre-dates the Photoshop file format
+specification.</li>
+</ul>
+</blockquote>
+<p>2003-07-08 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/semaphore.c: Modified the way the system handles the
+initialization of Win32 critical sections to use a spin lock
+on WIn32 to bootstrap the initialization of all other crtical
+sections. This is not an issue on UNIX since static init is used.</li>
+<li>magick/magic.c module.c magick.c log.c resource.c constitute.c
+color.c cache.c delegate.c registry.c type.c: Small modifications
+were made to eliminate the side effect of unlocking semaphores
+as part of the releasing procedure. This also eliminated the
+apparent bug of the system double locking certain semaphores.
+The locked flag should now not be needed, but remains in place
+for the time being as an added safegaurd.</li>
+</ul>
+</blockquote>
+<p>2003-07-04 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>png.c: added missing #ifdef JNG_SUPPORTED/#endif directives.</li>
+</ul>
+</blockquote>
+<p>2003-07-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS: Updated news to include fixes and enhancements since the
+1.0 release.</li>
+</ul>
+</blockquote>
+<p>2003-07-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/semaphore.c (UnlockSemaphoreInfo): Bugfix, modify
+the <cite>locked</cite> flag while still under protection of the lock.
+This fix is necessary for thread-safety.</li>
+</ul>
+</blockquote>
+<p>2003-07-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (ReadJPEGImage): Conditionally copy exception.</li>
+<li>wand/Makefile.am (noinst_HEADERS): Need to distribute
+magick_compat.h.
+(EXTRA_DIST): Need to distribute GraphicsMagickWand-config.1.</li>
+<li>coders/wmf.c (ipa_bmp_draw): Use CopyException.
+(ipa_device_begin): Use CopyException.
+(lite_font_map): Use CopyException.</li>
+<li>coders/jpeg.c (ReadJPEGImage): Use CopyException.</li>
+<li>magick/image.c (GetImageException): Use CopyException.</li>
+<li>magick/constitute.c (WriteImages): Use CopyException.</li>
+<li>Makefile.am (DIST_SUBDIRS): wand needs to be included in
+distribution.</li>
+</ul>
+</blockquote>
+<p>2003-06-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/static.c (RegisterStaticModules): Invoke
+RegisterTOPOLImage.</li>
+<li>magick/magick.h (MagickInfo): Add member usage comments.</li>
+<li>magick/error.c (CatchException): Restore saved errno from
+exception->error_number.
+(CopyException): Copy error_number.
+(DestroyExceptionInfo): Reset error_number to zero.
+(GetExceptionInfo): Initialize error_number to zero.
+(ThrowException): Save errno to exception-> error_number.
+(ThrowLoggedException): Save errno to exception-> error_number.</li>
+<li>magick/error.h (ExceptionInfo): Borrow John Cristy's idea and
+add a error_number member to ExceptionInfo to save the current
+errno value. Otherwise CatchException may use some random errno.</li>
+<li>coders/Makefile.am: Build topol.c.</li>
+<li>coders/topol.c: Added initial TOPOL X image coder which is under
+development by Jaroslav Fojtik. Not working yet.</li>
+</ul>
+</blockquote>
+<p>2003-06-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pwp.c (ReadPWPImage): Ensure that image is initialized
+before invoking ThrowReaderException.</li>
+<li>magick/image.c (CloneImage): Use CopyException.</li>
+<li>magick/error.c (CopyException): Add function to support copying
+ExceptionInfo structures.</li>
+<li>magick/error.h (ExceptionInfo): Replaced recently-added <cite>whence</cite>
+member with module, function, and line members in order to keep
+the information seperate, and match the parameters used by the
+logging system.
+(ThrowException): Log thrown exceptions.</li>
+<li>magick/error.c (ThrowLoggedException): New function used to
+throw an exception, while recording and logging the location
+where the exception is thrown.</li>
+<li>doc/options.imdoc (operation): Document TemporaryFile and
+Exception events.</li>
+<li>magick/log.c (LogMagickEvent): Support logging ExceptionEvent.</li>
+<li>PerlMagick/Magick.xs: Added "Exception" event type.</li>
+<li>magick/log.h (LogEventType): Added ExceptionEvent.</li>
+</ul>
+</blockquote>
+<p>2003-06-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/error.c (ThrowException): Handle <cite>whence</cite>
+member. MagickFreeMemory already checks for null pointer so don't
+check again.
+(DestroyExceptionInfo): Handle <cite>whence</cite> member. MagickFreeMemory
+already checks for null pointer so don't check again.</li>
+<li>magick/error.h (ExceptionInfo): Add a <cite>whence</cite> member to support
+the ability to record where the exception is was thrown.</li>
+<li>VisualMagick/installer: Install Wand files.</li>
+</ul>
+</blockquote>
+<p>2003-06-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (GetConfigureBlob): GetConfigureBlob should always
+return a value.</li>
+<li>magick/type.c (GetTypeBlob): GetTypeBlob should always return a
+value.</li>
+<li>magick/log.c (GetLogBlob): GetLogBlob should always return
+a value.</li>
+<li>magick/magick.c (GetMagickInfoArray): Fixed array memory
+allocation and clearing bug. Eliminate warnings.</li>
+</ul>
+</blockquote>
+<p>2003-06-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/installer/inc/files-configs.isx: For a static
+build, install the configuration files directly into the
+application directory.</li>
+<li>VisualMagick/installer/inc/uninstallrun-unregister-com.isx
+(Filename): Change ImageMagickObject.dll path.</li>
+<li>VisualMagick/installer/inc/run-register-com.isx (Filename):
+Change ImageMagickObject.dll path.</li>
+<li>VisualMagick/installer/inc/files-com.isx (Source): Install
+ImageMagickObject.dll and MagickCMD.exe in the application
+directory alongside gm.exe and the CORE DLLs.</li>
+<li>INSTALL-unix.txt: Add additional information regarding LZW.</li>
+<li>VisualMagick/magick/magick_config.h.in: Add additional notes
+regarding UNISYS LZW patent.</li>
+<li>PerlMagick/Magick.xs: Applied Dissolve composite operator fix
+obtained from from John Cristy's ImageMagick which ensures that an
+unused matte channel is set to Opaque, and uses this knowledge to
+simplify the math.</li>
+<li>VisualMagick/configure/configure.cpp: The <cite>wand</cite> library has a
+linkage dependency on the <cite>magick</cite> library. Also don't include
+the magick subdirectory so that headers must be included like
+<magick/api.h> for safety.</li>
+<li>coders/xtrn.c: Fix magick header inclusion.</li>
+<li>lcmssrccmserr.c: Fix magick header inclusion.</li>
+</ul>
+</blockquote>
+<p>2003-06-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc: Fix to formatting. Fix spelling of origin.</li>
+<li>PerlMagick/t/bzlib/read.t: Add test for reading BZipped file.</li>
+<li>PerlMagick/t/subroutines.pl (testRead): Skip testing reads
+of compressed BLOBs because reading compressed BLOBs is not
+supported yet.</li>
+<li>coders/bmp.c (ReadBMPImage): Only validate the file size value
+for compressed BMPs.</li>
+<li>VisualMagick/wand, wand: First stab at building the Wand API
+under Visual C++. Still does not build as a DLL.</li>
+</ul>
+</blockquote>
+<p>2003-06-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/static.h: Add prototypes for RegisterXTRNImage and
+UnregisterXTRNImage.</li>
+<li>Makefile.am (DISTDIRS): Don't distribute the <cite>guide</cite>
+subdirectory. It is available for checkout from CVS.</li>
+<li>www: Utilities documentation is updated from <imdoc> masters.
+Formatting could be improved, but the content seems ok.</li>
+<li>doc/environment.imdoc: New file to describe environment
+variables.</li>
+<li>coders/cut.c (ReadCUTImage): Use MagickAllocateMemory and
+MagickFreeMemory rather than malloc and free.</li>
+<li>doc/gmdoc2html: Add GraphicsMagick styling to utility web pages.</li>
+<li>doc/Makefile: Additional documentation Makefile enhancements.</li>
+<li>AUTHORS: New file to acknowledge significant contributors
+to the software. If an author is not listed here, please let
+us know.</li>
+<li>configure.ac: test -a is not POSIX compliant.</li>
+</ul>
+</blockquote>
+<p>2003-06-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc: Source documentation for <cite>gm</cite> is now available via a <cite>doc</cite>
+CVS module. A Makefile is provided which formats the
+documentation and installs it into the <cite>www</cite> and <cite>utilities</cite>
+subdirectories.</li>
+</ul>
+</blockquote>
+<p>2003-06-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand: Added Magick Wand library available via
+-lGraphicsMagickWand and <wand/wand_api.h>. Use
+GraphicsMagickWand-config or GraphicsMagickWand.pc to obtain the
+compilation options required to use the library. Magick Wand is
+authored by John Cristy. Magick Wand is provided as a separate
+library from -lGraphicsMagick in order to assure the stability of
+the core GraphicsMagick library while allowing Magick Wand to
+to evolve.</li>
+<li>images: Replace existing logo images with cleaner ones.</li>
+<li>www: Update links to point to updated logo images.</li>
+<li>logos: New CVS directory to contain master logos.</li>
+<li>scripts/txt2html: Updated inline logo image link.</li>
+<li>scripts/format_c_api_docs: Updated inline logo image link.</li>
+<li>version.sh: Support versioning all libraries independently.</li>
+<li>coders/meta.c: Prefix include paths for safety.</li>
+<li>magick/image.h: (TransmitType) Removed unused enumeration.
+(ProfileType) Removed unused enumeration.
+(QuantumType) Moved enumeration to constitute.h
+(StorageType) Moved enumeration to constitute.h</li>
+<li>magick/draw.c (DrawPeekGraphicContext): Added function to peek
+at head of drawing context stack (function added for ImageMagick
+compatability).</li>
+<li>magick/image.c (CycleColormapImage): Change return type from
+<cite>void</cite> to <cite>unsigned int</cite> so that error status is returned to user.
+(DescribeImage): Change return type from
+<cite>void</cite> to <cite>unsigned int</cite> so that error status is returned to user.</li>
+<li>magick/list.c (ReplaceImageInList): Incorporated function from
+John Cristy's ImageMagick to replace current image in the list.</li>
+<li>coders/sgi.c (ReadSGIImage): Applied patch from John Cristy's
+ImageMagick to save the compression type for SGI images.</li>
+</ul>
+</blockquote>
+<p>2003-06-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/txt.c (WriteTXTImage): Apply patch from John Cristy's
+ImageMagick to observe image depth while writing pixel colors.
+This patch is not applied to the 1.0 branch because it represents
+an output format change which could break a dependent application.
+(IsTXT): Recognize files written by the TXT coder.
+(ReadTXTImage): Reject files written by the TXT coder until support
+for reading these files is implemented.
+(IsTXT): Ensure that sscanf doesn't read outside of provided data
+by using a fixed size buffer.</li>
+</ul>
+</blockquote>
+<p>2003-06-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Don't add -lfpx to LIBS while configuring
+because the C compiler may fail to link with it in later
+tests.</li>
+</ul>
+</blockquote>
+<p>2003-06-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/Magick.xs: RotateImage is documented to take
+<cite>degrees</cite> argument, not <cite>degree</cite>. SwirlImage is documented to
+take <cite>degrees</cite> argument, not <cite>degree</cite>. SolarizeImage is
+documented to take a <cite>threshold</cite> argument, not <cite>factor</cite>. Wave is
+documented to take <cite>amplitude</cite> and <cite>wavelength</cite> arguments. Don't
+transform colorspace to RGB when retrieving <cite>pixel</cite> color value.
+Release memory acquired to store <cite>length</cite> pointer. Picked up
+memory leak fix related to <cite>SV **reference_vector</cite> variable from
+John Cristy's ImageMagick.</li>
+<li>configure: Incorporate patch to handle inline better.</li>
+<li>magick/utility.c (GetToken): Adjust code to avoid "end-of-loop
+code not reached" warning.</li>
+<li>magick/log.c (GetLogBlob): Eliminate warning regarding
+unreached code.</li>
+<li>magick/command.c (AnimateImageCommand): Eliminate warning regarding
+unreached code.
+(ConvertImageCommand): Eliminate warning regarding
+unreached code.
+(ImportImageCommand): Eliminate warning regarding
+unreached code.</li>
+<li>magick/type.c (GetTypeBlob): Eliminate warning regarding
+unreached code.</li>
+<li>magick/blob.c (GetConfigureBlob): Eliminate warning regarding
+unreached code.</li>
+<li>coders/meta.c (super_fgets): Eliminated warnings regarding
+comparison and return of incompatible pointer types.
+(super_fgets_w): Eliminated warnings regarding
+comparison and return of incompatible pointer types.</li>
+<li>magick/command.c (ConvertImageCommand): Eliminate warnings
+noticed when using Sun's compiler.</li>
+</ul>
+</blockquote>
+<p>2003-06-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>acinclude.m4: Add <cite>#undef inline</cite> in front of C++ tests.</li>
+<li>coders/x.c (RegisterXImage): Only register the X coder if HasX11
+is defined.</li>
+</ul>
+</blockquote>
+<p>2003-06-07 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (GetImageGeometry) Y was a function of width
+instead of height when processing EastGravity or WestGravity
+(bug report from Cristy).</li>
+</ul>
+</blockquote>
+<p>2003-06-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (LocaleNCompare): Documented that comparison is
+case-insensitive.
+(LocaleCompare): Documented that comparison is case-insensitive.</li>
+<li>magick/log.c (ParseEvents): LocaleNCompare already does
+case-insensitive compare so lower-casing is not necessary.</li>
+<li>Magick++: Updates to cause exceptions to be thrown if a bad
+geometry specification is supplied.</li>
+</ul>
+</blockquote>
+<p>2003-06-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/log.c (ReadConfigureFile): Move event parsing to
+ParseEvents funtion.
+(SetLogEventMask): Move event parsing to
+ParseEvents funtion.</li>
+<li>magick/utility.c (GetGeometry): Validate that the geometry
+string only contains valid characters.</li>
+<li>PerlMagick/t/subroutines.pl (testMontage): It seems that passing
+an empty set of options to the SetImage method corrupts the image
+options (surely a PerlMagick bug), so don't invoke SetImage unless
+there are options to set.</li>
+</ul>
+</blockquote>
+<p>2003-06-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (VersionCommand): Add build information to
+version output.</li>
+<li>configure.ac: Save configure/build parameters for later use in
+version output.</li>
+</ul>
+</blockquote>
+<p>2003-06-04 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/meta.c: Added some casts to make things compile better.</li>
+</ul>
+</blockquote>
+<p>2003-06-03 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/meta.c: Was broken due to editing mistakes as well
+as inherent incompatability with MagickReallocMemory macro.</li>
+</ul>
+</blockquote>
+<p>2003-06-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xpm.c (RegisterXPMImage): Module registration for PICON
+should have been XPM. Thanks to John Cristy for noticing this
+bug.</li>
+<li>coders/psd.c (ReadPSDImage): Applied John Cristy's patch to fix
+a index calculation bug which is evident when QuantumDepth>8.</li>
+</ul>
+</blockquote>
+<p>2003-06-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/meta.c: Eliminated some compiler warnings.</li>
+<li>magick/transform.c (ProfileImage): Eliminated some compiler
+warnings.</li>
+<li>magick/static.c (RegisterStaticModules): Invoke
+RegisterXTRNImage if _VISUALC_ is defined.</li>
+</ul>
+</blockquote>
+<p>2003-06-02 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>utilities/gm.c: made -format work again but had to add off flag
+to MagickCommand to maintain backward compatability with previous
+versions of GM.</li>
+<li>magick/command.c: Added flag to tell MagickCommand whether GM is
+expected to process metadata requests. The COM object *always* does.</li>
+<li>magick/transform.c: Added error handling, memory leak avoidance
+and performanc enhancment.</li>
+</ul>
+</blockquote>
+<p>2003-06-01 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS: Added Bug Fixes item with info about the JNG encoder fix.</li>
+</ul>
+</blockquote>
+<p>2003-06-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS: Listed significant changes (thus far) in version 1.1.</li>
+<li>version.sh: Updated LIBRARY_CURRENT and LIBRARY_REVISION since
+some command.c interfaces have changed, and a new interface has
+been added. The only user of these interfaces should be <cite>gm</cite> but
+it always pays to be careful.</li>
+<li>utilities/gm.c (main): Use MagickCommand.</li>
+<li>magick/command.c (MagickCommand): New function to provide
+API-level command access to the command functions provided by the
+GM utility with an interface similar to ConvertImageCommand.
+(AnimateImageCommand): Changed function arguments to match
+ConvertImageCommand.
+(ConjureImageCommand): Changed function arguments to match
+ConvertImageCommand.
+(DisplayImageCommand): Changed function arguments to match
+ConvertImageCommand.
+(ImportImageCommand): Changed function arguments to match
+ConvertImageCommand.</li>
+<li>libxml/libxml2.def: Remove LIBRARY line since Visual C++ 6.0
+doesn't like that the build library doesn't match the name
+specified by LIBRARY.</li>
+</ul>
+</blockquote>
+<p>2003-05-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (GetMagickInfoArray): Resolve thread-safety
+issue by accessing magick_list directly under the protection of a
+lock rather than using the pointer returned by GetMagickInfo.
+Added error handling for insufficient memory.</li>
+<li>coders/tile.c (RegisterTILEImage): Added a usage note in formats
+listing.</li>
+<li>coders/viff.c (RegisterVIFFImage): Module definition for "XV"
+was missing.</li>
+<li>coders/ps2.c (RegisterPS2Image): Module definition for "PS2" was
+missing.</li>
+<li>coders/wmf.c (RegisterWMFImage): Added usage note in formats
+listing.</li>
+<li>coders/xpm.c (RegisterXPMImage): Hide PM alias for XPM in the
+formats listing.</li>
+<li>coders/logo.c (RegisterLOGOImage): Hide registrations for
+GRANITE, LOGO, and NETSCAPE in the formats listing.</li>
+<li>coders/jpeg.c (RegisterJPEGImage): Module definition for "JPEG"
+was missing.</li>
+<li>coders/html.c (RegisterHTMLImage): Module definition for "HTML"
+was missing.</li>
+<li>coders/bmp.c (RegisterBMPImage): Module names for "BMP2" and
+"BMP3" should be "BMP".</li>
+</ul>
+</blockquote>
+<p>2003-05-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (GetMagickInfoArray): New function to return
+MagickInfo array.
+(ListMagickInfo): Updated to use GetMagickInfoArray.
+(ListModuleMap): New function to list module map to a file.</li>
+<li>utilities/gm.c: Centered the file header and made note of this
+stupendously significant accomplishment.</li>
+<li>magick/command.c: Added a <cite>-list modulemap</cite> option. Added plural
+forms of other list options for people who are are not limited to
+the singular. Also <cite>-list font</cite> and <cite>-list fonts</cite> now work for
+people who think in terms of fonts rather than type.</li>
+</ul>
+</blockquote>
+<p>2003-05-30 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>MNG encoder failed to set the JNG bit in the simplicity profile.</li>
+<li>MNG encoder failed to write FRAM chunks when all images were JNG.</li>
+<li>JNG encoder wrote the wrong alpha_sample_depth for opaque images.</li>
+</ul>
+</blockquote>
+<p>2003-05-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magic.c (ReadConfigureFile): Removed bogus embedded magic
+data and ensured that errors with loading magic.mgk propogate to
+the top.</li>
+<li>magick/constitute.c (ReadImage): When building delegate error
+report, handle the case where the filename is empty (such as for
+"LOGO:").</li>
+<li>coders/png.c (WritePNGImage): Ensure that most severe exception
+is reported via exception argument.
+(ReadMNGImage): Ensure that most severe exception is reported via
+exception argument.</li>
+<li>magick/command.c (ConvertImageCommand): Ensure that most severe
+exception is reported via exception argument.
+(CompositeImageList): Ensure that most severe exception is
+reported via exception argument.
+(CompositeImageCommand): Ensure that most severe exception is
+reported via exception argument.</li>
+<li>magick/constitute.c (WriteImages): Ensure that most severe
+exception is reported via exception argument.</li>
+<li>utilities/gm.c: Centered file header because I didn't like it.</li>
+<li>locale/C.mgk: Removed some defunct messages.</li>
+<li>magick/blob.c (PingBlob): Report useful error message.
+(BlobToImage): Report sensible error message for null blob.</li>
+<li>magick/utility.c (AcquireString): Change UnableToAquireString to
+UnableToAllocateString.</li>
+<li>coders/xwd.c (ReadXWDImage): Report CorruptImage rather than
+CorruptXWDImage.</li>
+<li>coders/xpm.c (ReadXPMImage): Report CorruptImage rather than
+CorruptXPMImage.</li>
+<li>coders/xcf.c (load_level): Report CorruptImage rather than
+CorruptXCFImage.</li>
+<li>coders/wbmp.c (ReadWBMPImage): Report CorruptImage rather than
+CorruptWBMPImage.</li>
+<li>coders/pcd.c: Report CorruptImage rather than CorruptPCDImage.</li>
+<li>coders/otb.c (ReadOTBImage): Report CorruptImage rather than
+CorruptOTBImage.</li>
+<li>magick/constitute.c (ReadInlineImage): Report CorruptImage
+rather than CorruptInlineImage.</li>
+<li>coders/pdb.c (ReadPDBImage): Incorporated undocumented fix from
+ImageMagick which obtains the image depth from the image depth
+attribute, and increases the packet memory allocation. Report
+CorruptImage rather than CorruptPDBImageFile.</li>
+</ul>
+</blockquote>
+<p>2003-05-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/bin/modules.mgk: Add mapping from SVGZ to SVG.</li>
+<li>coders/modules.mgk: Add mapping from SVGZ to SVG.</li>
+<li>coders/svg.c (RegisterSVGImage): Add registration for SVGZ
+format.</li>
+<li>PerlMagick/t/zlib/read.t: Added test to check reading a file
+with .gz extension. The blob portion of the test currently fails.</li>
+<li>coders/wpg.c (ReadWPGImage): Fix reading WPGs with embedded
+Postscript. Ensure that scene numbers are sane. Bugs remain.</li>
+<li>magick/blob.c (OpenBlob): Recognize the .svgz extension as a
+gzipped format. Not required in order to read .svgz files since
+the blob file magic detects gzip files.</li>
+<li>magick/command.c (MontageImageCommand): Wrong exception
+macro was being invoked. Steps have been taken to ensure that
+this doesn't happen again.
+(ImportUsage): Fix spelling of <cite>type</cite>.</li>
+<li>magick/magick.c (DestroyMagick): Decided that initialization
+state should be tracked via an enum so that DestroyMagick will
+take effect even if InitializeMagick has never been called.</li>
+</ul>
+</blockquote>
+<p>2003-05-27 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: png.c would dump core when writing a grayscale
+image in png24 or png32 format.</li>
+</ul>
+</blockquote>
+<p>2003-05-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/ept.c (WriteEPTImage): Fixed writing EPT preview image and
+added logging.</li>
+<li>magick/enhance.c (NegateImage): If image is in CMYK colorspace,
+then negate the <cite>K</cite> channel as well.</li>
+<li>PerlMagick/Magick.xs: Fix spelling of <cite>elevation</cite> argument to
+Shade method.</li>
+<li>magick/image.h (ImageInfo): Added more documenting comments.</li>
+<li>magick/image.c (CloneImage): Don't clone huffman ascii85
+encoding support structure since it is not useful outside of the
+current image context. Cloning a structure via pointer assignment
+causes a memory leak.</li>
+</ul>
+</blockquote>
+<p>2003-05-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/shear.c: Incorporate math tweaks obtained from
+ImageMagick which are purported to improve accuracy when rotating
+and shearing using small angles. Also avoid unneccessarily
+transforming CMYK images into RGB images.</li>
+<li>magick/paint.c (ColorFloodfillImage): Fix hang while
+floodfilling using a pattern image with color similar to the
+border color.</li>
+<li>coders/modules.mgk: Add missing mappings for PNG8,
+PNG24, and PNG32.</li>
+<li>VisualMagick/bin/modules.mgk: Add missing mappings for PNG8,
+PNG24, and PNG32.</li>
+</ul>
+</blockquote>
+<p>2003-05-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/log.c (GetLogBlob): Return an error if log.mgk can not
+be accessed.</li>
+<li>locale/C.mgk: Added UnableToAccessLogFile.</li>
+<li>magick/blob.c (GetConfigureBlob): Only return result of
+NTResourceToBlob if it is non-NULL.</li>
+<li>magick/type.c (GetTypeBlob): Search $MAGICK_HOME for
+type.mgk. Only return result of NTResourceToBlob if it is
+non-NULL.</li>
+<li>magick/magick.c (GetMagickInfo): Return an error if GetModuleInfo
+reports an error.</li>
+<li>magick/module.c (GetModuleInfo): Return an error if modules.txt
+fails to load.</li>
+<li>utility.c (SubstituteString): Fixed a bug which was introduced
+while updating the code to use the memory allocation macros.</li>
+</ul>
+</blockquote>
+<p>2003-05-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/GraphicsMagick-config.in (usage): Added example
+usage to the help output.</li>
+<li>magick/magick.c (InitializeMagick): Added a static flag to
+ensure that the Magick library is initialized only one time.
+(DestroyMagick): Ensure that Magick library resources are only
+destroyed if it has previously been initialized.</li>
+<li>magick/nt_base.c (DllMain): Fix contributed by Achim Domma. For
+a DLL build, update PATH during Magick DLL initialization to
+include the directory where the Magick core DLL resides. This
+allows the loadable modules to find the core DLLs, even if the
+core DLLs are not already in the PATH.</li>
+<li>magick/image.c (TextureImage): Incorporate new implementation
+authored by John Cristy of ImageMagick Studio. This
+implementation is a full 7X (run-time) or 14X (user-time) faster
+than the original ImageMagick implementation, and is about 2X
+faster than the speeded-up version I commited on the 19th.</li>
+</ul>
+</blockquote>
+<p>2003-05-20 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagickconfigure : Fixed bug with add on (plug-ins) not
+building automatically in DLL mode.</li>
+</ul>
+</blockquote>
+<p>2003-05-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (TextureImage): Creation of tiled image textures
+is speeded up by 3.7X.</li>
+<li>coders/tile.c (ReadTILEImage): Use TextureImage.</li>
+<li>VisualMagick/bin/modules.mgk: Map "PATTERN" to "LOGO".</li>
+<li>coders/modules.mgk: Map "PATTERN" to "LOGO".</li>
+<li>coders/logo.c (ReadLOGOImage): Add "PATTERN" tiling support in
+order to be compatible with ImageMagick.</li>
+<li>magick/image.c (SetImageInfo): Map "MAGICK" magick to "IMAGE" in
+order to be compatible with ImageMagick.</li>
+</ul>
+</blockquote>
+<p>2003-05-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/Copyright.html: Try to fix formatting of XFig entry.</li>
+<li>www/windows.html: Update file names for 1.0.1 release.</li>
+<li>index.html: Mention 1.0.1 release as latest release.</li>
+<li>magick/magick_config_api.h.in: Add define for HasX11
+so that it is possible to use functions in the installed
+xwindow.h</li>
+<li>*/*.c: Updated to use MagickAllocateMemory macro.</li>
+</ul>
+</blockquote>
+<p>2003-05-17 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: stifled compiler warnings about uninitialized
+chunk and blob variables.</li>
+</ul>
+</blockquote>
+<p>2003-05-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.h (MagickAllocateMemory): New macro to allocate
+memory.
+(MagickFreeMemory): New macro to free memory.
+(MagickReallocMemory): New macro to reallocate memory.</li>
+<li>*/*.c,*/*.h: Updated to use MagickFreeMemory and
+MagickReallocMemory. Eliminated warnings when compiling with
+GCC 3.3 using -Wall.</li>
+<li>images: The logo image was determined to have a copyright
+problem so replace with blank image until a replacement is
+available.</li>
+</ul>
+</blockquote>
+<p>2003-05-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/magick/magick_config.h.in (HAVE_SYS_TYPES_H):
+Moved this define back from nt_base.h since removing it was
+causing some problems for Magick++.</li>
+</ul>
+</blockquote>
+<p>2003-05-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c: (SetMagickInfo): Don't mask failure to
+read magic.mgk.</li>
+<li>magick/constitute.c (ReadImage): Don't overwrite specific
+exception info.</li>
+<li>magick/nt_base.c (NTResourceToBlob): Add logging similar
+to that used in IsAccessible() in order to make operation
+more clear.</li>
+<li>magick/module.c (FindMagickModule): Removed extraneous
+"Searching for module file" log event.
+(GetModuleBlob): Under Windows, don't clear or overwrite
+an existing exception.</li>
+<li>magick/nt_base.h: Imported some obscure defines from
+magickmagick_config.h.</li>
+<li>VisualMagick/magick/magick_config.h.in: Improved description
+text and formatting. Moved some obscure defines to
+magick/nt_base.h.</li>
+<li>locale/C.mgk: Added a "RegistryKeyLookupFailed" error message.</li>
+<li>magick/type.c (GetTypeBlob): Report registry key lookup
+failures. Also ensure correct return value when an error is
+reported.</li>
+<li>magick/log.c (GetLogBlob): Report registry key lookup failures.</li>
+<li>magick/delegate.c (ReadConfigureFile): Report registry key
+lookup failures.</li>
+<li>magick/blob.c (GetConfigureBlob): Report registry key lookup
+failures. Also ensure correct return value when an error is
+reported.</li>
+<li>magick/module.c (FindMagickModule): Report registry key lookup
+failures. Also ensure correct return value when an error is
+reported.</li>
+<li>magick/nt_base.c (NTRegistryKeyLookup): Simplify base key lookup
+code, and improve coding style.</li>
+<li>coders/logo.c, Copyright.txt, www/Copyright.html: Acknowledge
+and respect the XFig copyright.</li>
+<li>VisualMagick/installer/inc/files-documentation.isx: QuickStart.txt
+is no longer distributed so it is removed.</li>
+</ul>
+</blockquote>
+<p>2003-05-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.h (RoundToQuantum): New macro to round positive
+double to Quantum.</li>
+<li>magick/xwindow.c, magick/xwindow.h, magick/studio.h: Use FreeBSD
+portability fixes from FreeBSD ports collection.</li>
+<li>configure.ac: Test for <machine/param.h> as used by some *BSD systems.</li>
+<li>QuickStart.txt, www/QuickStart.html: Don't distribute QuickStart.txt or
+www/QuickStart.html since the content doesn't currently apply to
+GraphicsMagick.</li>
+</ul>
+</blockquote>
+<p>2003-05-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>README.txt: Added text regarding where to obtain dcraw, a simple
+but useful decoder for the proprietary raw file formats produced
+by digital cameras (58 supported cameras!).</li>
+<li>configure.ac: Added support for finding dcraw.</li>
+<li>VisualMagick/bin/delegates.mgk: Added support for dcraw.</li>
+<li>coders/delegates.mgk.in: Added support for dcraw.</li>
+<li>version.sh (PACKAGE_RELEASE_DATE): Extract the most recent
+update date from the ChangeLog file using awk.</li>
+</ul>
+</blockquote>
+<p>2003-05-12 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>modules.mgk, magic.mgk : Sync up both of these for UNIX
+as well as VisualMagick builds. Includes changes for the
+meta.c code.</li>
+</ul>
+</blockquote>
+<p>2003-05-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/formats.html: Documented embedded gray intensity images.</li>
+<li>coders/logo.c: Added the embedded dithered gray intensity images
+gray0, gray5, ..., through gray100 to support bilevel filling and
+painting with an intensity resolution of 5%.</li>
+<li>www/formats.html: Added description of images available via
+"IMAGE:" format tag, as well as providing a tiled preview.</li>
+<li>coders/logo.c: Renamed "transparent" image to "checkerboard"
+since it is a better description. Added a set of tiny bilevel
+images (accessed via IMAGE:) for use when tiling, filling, or for
+use as a texture image. The complete set of image names available
+via the IMAGE: coder are now BRICKS, CIRCLES, CROSSHATCH,
+CROSSHATCH30, CROSSHATCH45, FISHSCALES, GRANITE, HEXAGONS,
+HORIZONTAL, HORIZONTALSAW, HS_BDIAGONAL, HS_CROSS, HS_DIAGCROSS,
+HS_FDIAGONAL, HS_HORIZONTAL, HS_VERTICAL, LEFT30, LEFT45,
+LEFTSHINGLE, LOGO, NETSCAPE, OCTAGONS, RIGHT30, RIGHT45,
+RIGHTSHINGLE, ROSE, SMALLFISHSCALES, CHECKERBOARD, VERTICAL,
+VERTICALBRICKS, VERTICALLEFTSHINGLE, VERTICALRIGHTSHINGLE, &
+VERTICALSAW. The HS_* variants are similar to the standard
+pattern images provided with the Windows GDI.</li>
+<li>coders/msl.c (MSLStartElement): Don't reset gravity if the user
+provides an x,y coordinate. Passing coodinates was loosing the
+gravity setting.</li>
+</ul>
+</blockquote>
+<p>2003-05-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/modules.mgk: Support the IMAGE: format via the LOGO
+module.</li>
+<li>win2k/IMDisplay/IMDisplayView.cpp (DoDisplayImage):
+Transparent tile is created by reading "tile:image:transparent".</li>
+<li>coders/logo.c (ReadLOGOImage): Add IMAGE: format to front for
+embedded images so that adding new images doesn't proliferate coder
+registrations. Legacy logo magick names (GRANITE, LOGO, NETSCAPE,
+and ROSE) are still supported, but they are also available in the
+IMAGE file space (e.g. IMAGE:ROSE).</li>
+</ul>
+</blockquote>
+<p>2003-05-09 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagickconfigure : Further refinements that support both
+the new "big" library and the normal dynamic DLL buidling styles.</li>
+</ul>
+</blockquote>
+<p>2003-05-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/logo.c (ReadLOGOImage): Added a "TRANSPARENT" pattern
+image which can be tiled to form the background of transparent
+images.</li>
+<li>win32/IMDisplay/IMDisplayView.cpp: When displaying images which
+include an opacity channel, use a checker-board pattern as the
+image background so non-opaque pixels become evident.</li>
+</ul>
+</blockquote>
+<p>2003-05-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/meta.c : Add or fix commenting of DebugString so that
+module does not require Windows.</li>
+<li>lcms: Updated to release 1.10.</li>
+</ul>
+</blockquote>
+<p>2003-05-07 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagickbin : Brought the MGK files back into sync with
+the rest of the package and added types for meta.c.</li>
+<li>VisualMagickbinwin32ATL : removed config files in order to
+prevent very old ATL project from being picked up in the config</li>
+</ul>
+</blockquote>
+<p>2003-05-06 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagicklcmsLIBRARY.txt : a define to prevent popup message
+box behaviour.</li>
+<li>VisualMagickconfigure: New feature - -t consolidates all the
+coders into on library for the static build in order to make the
+build process tolerable.</li>
+<li>codersxtrn.c : new support for BSTR - wdie character data</li>
+<li>coderssvg.c : put back logic that allows the -size parameter to
+control the pixel dimensions of the output image.</li>
+<li>codersmeta.c : added support for wide character parsing of iptc
+and 8BIM formats.</li>
+</ul>
+</blockquote>
+<p>2003-05-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh : Update to reflect development status.</li>
+</ul>
+</blockquote>
+<p>2003-05-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>GraphicsMagick 1.0 Released.</li>
+<li>version.sh (LIBRARY_REVISION): Updated for the 1.0 release.</li>
+<li>magick/studio.h: Add fix to avoid problems caused by zlib
+under AIX.</li>
+<li>magick/cache.h: Parameterized prototypes to make them easier
+to follow.</li>
+<li>filters/analyze.c: Replace C++ comments with C comments.</li>
+<li>magick/command.c: For the composite, convert, identify, mogrify,
+and montage commands, make sure a usage error is returned if a
+usage message is printed. This is useful for ImageMagickObject
+users who won't see the usage message if stdio is not supported.</li>
+<li>locale/C.mgk: Added "UsageError" error. Added missing closure
+to <Corrupt> tag which caused most/many message lookups to fail.</li>
+<li>magick/nt_base.h: Fixed a compile problem caused by masking
+internals in delegate.h</li>
+<li>magick/ImageMagick.rc: Added missing .mgk files.</li>
+</ul>
+</blockquote>
+<p>2003-05-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c (lt_dlerror): Defining lt_dlerror to be
+NTGetLastError was not a correct implementation since the
+interface is defined to return a const pointer to a string, but
+NTGetLastError returns an allocated string, causing a memory leak
+if NTGetLastError is used in the place of lt_dlerror. A new
+lt_dlerror function is added to fix this.
+(lt_dlsetsearchpath): lt_dlsetsearchpath should return an int
+and accept a const char *.
+(lt_dlsym): lt_dlsym is supposed to take a const char *.</li>
+<li>magick/nt_base.h: lt_dlclose should return an <cite>int</cite>.</li>
+<li>magick/nt_base.c (lt_dlclose): Return status from lt_dlclose.</li>
+<li>magick/module.c (lt_dlclose): lt_dlclose is supposed to return
+an <cite>int</cite>, not <cite>void</cite>. A return value of zero indicates success.</li>
+<li>VisualMagick/tests/run_constitute.bat: Add batch script to
+run constitute tests.</li>
+<li>magick/module.c: Added a ltdl_initialized static flag to track
+if libltdl has been initialized by lt_dlinit().
+(TagToFunctionName): Use a stack buffer for the string rather than
+allocating heap data.
+(UnregisterModule): Report errors via exception info as the
+interface suggests.
+(UnloadModule): Report errors via exception info as the interface
+suggests.
+(DestroyModuleInfo): Only invoke lt_dlexit() if lt_dlinit() has
+previously been invoked.</li>
+<li>locale/C.mgk: Added FailedToCloseModule module error.</li>
+<li>magick/module.c (UnloadModule): Report exception via exception
+parameter rather than simply printing out an error message and
+exiting.</li>
+<li>magick/Makefile.am (noinst_HEADERS): integral_types.h had to be
+listed *somewhere* in order to make it into the distribution.</li>
+<li>Magick++/lib/Magick++/Image.h: InitializeMagick must be DLL
+exported.</li>
+</ul>
+</blockquote>
+<p>2003-05-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am (magick-version): Perform version.isx substitutions
+via Makefile.am rather than configure.</li>
+<li>magick/magick_config_api.h.in: Added template header for
+the installed magick_config.h.</li>
+<li>magick/magick.c (InitializeMagick): Improved the signal handling
+and registration method. Signal handlers are only registered for a
+signal if the current signal handling disposition for that signal
+is set to the default (SIG_DFL). When a signal is caught,
+DestroyMagick is invoked, the handling for the signal is set back
+to SIG_DFL, and then the signal is re-raised to trigger the
+default handler for that signal. This causes the process to behave
+as closely to the default as possible (e.g. generating a core
+file) while ensuring that DestroyMagick is executed. This also
+ensures that signal handlers registered by API users are not
+overridden by invoking InitializeMagick.</li>
+<li>configure.ac: Added tests for sigemptyset and
+sigaction.
+Add a check for the return type of signal handlers.
+Test for the <cite>raise</cite> function.</li>
+<li>www/formats.html: Add an entry for CUR, Microsoft
+Cursor Icon format.</li>
+</ul>
+</blockquote>
+<p>2003-05-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/semaphore.c (struct SemaphoreInfo): Added
+<cite>locked</cite> and <cite>thread_id</cite> members. These are used to record
+if the semaphore is locked, and to validate the thread
+ID of the unlocker.</li>
+<li>www/links.html: Added link to Nathan Day's MagickDocs
+"ImageMagick and GraphicsMagick documentation project"
+site.
+Added a link to an on-line article regarding the PHP front-end
+to ImageMagick.</li>
+<li>coders/icon.c (ReadIconImage): Add support for Windows
+.CUR format based on advice from Jean Piquemal.</li>
+<li>magick/image.c (SetImageInfo): Added missing CloseBlob
+in error path for failure to allocate temporary file.</li>
+<li>coders/pcx.c (ReadPCXImage): Added support for reading
+uncompressed PCX images based on code from Jean Piquemal.</li>
+</ul>
+</blockquote>
+<p>2003-05-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (AddNoiseImage): For gray images, wrong
+pointer was being used to evaluate intensity, leading to a
+black image with noise.</li>
+<li>magick/image.c (ChannelImage): Return the channel
+image in RGBColorspace. Also properly support extracting
+the opacity channel for images which are not CMYK.</li>
+</ul>
+</blockquote>
+<p>2003-04-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/Makefile.am (install-data-local): Install
+magick_config_api.h rather than magick_config.h.</li>
+<li>magick/api.h: Removed inclusion of integral_types.h from
+magick/api.h. It is included by magick/studio.h.</li>
+<li>magick/delegate.h: Mapped out a block of private implementation
+code.</li>
+<li>configure.ac: Perform substitutions on magick_config_api.h.</li>
+<li>magick/magick_config_api.h.in: New header file template to
+use for installed magick_config.h.</li>
+<li>magick/studio.h (MAGICK_IMPLEMENTATION): Added the define
+MAGICK_IMPLEMENTATION used to enable private types, includes, and
+defines in the headers. This supports hiding implementation stuff
+that API users shouldn't see in the headers.</li>
+<li>utilities/Makefile.am (check): Cleaned up the utilities
+test/demo a bit as well as using the undocumented "tmp:" prefix to
+cause GraphicsMagick to remove temporary input files once they
+have been read. This leaves just the final output file
+"demo.miff" when the test completes.</li>
+<li>coders/jpeg.c (WriteJPEGImage): If the image resolution is
+overwritten with 72DPI, make sure that the resolution units are
+set to PixelsPerInchResolution.</li>
+<li>coders/jpeg.c (WriteJPEGImage): Don't overwrite the image
+resolution if it is valid.</li>
+<li>magick/command.c (MogrifyImageCommand): Added -resample
+option to match documentation.</li>
+<li>VisualMagick/configure: Added rpcrt4.lib to project settings
+for Visual C++ 6.0 so that configure links. The code which
+needs these interfaces is to support Visual C++ 7.0 XML-style
+project files.</li>
+</ul>
+</blockquote>
+<p>2003-04-30 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>utilities/Makefile.am (check) Change % to %% in -label parameter.</li>
+<li>www/gm.html, utilities/gm.1, etc. Documented use of %% to convey
+the % sign in -format, -comment, -label strings.</li>
+</ul>
+</blockquote>
+<p>2003-04-30 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Changes from 2003-04-19 to free the arg
+list when it was still pointed to by the option arg and accessed
+on an exception. This caused gm to crash on any erroneous command
+line argument.</li>
+</ul>
+</blockquote>
+<p>2003-04-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/windows.html: Updated to match current installer.</li>
+<li>VisualMagick/installer/inc/tasks-install-devel.isx (Name):
+Added an installation checkbox so the user can select to install
+development headers and libraries for C & C++.</li>
+<li>VisualMagick/installer/inc/files-perlmagick.isx (Source):
+Only install PerlMagick PPD files if the user selects to install
+PerlMagick.</li>
+<li>VisualMagick/installer/inc/files-com.isx (Source): Only
+install ImageMagickObject files if the user selects to install
+ImageMagickObject.</li>
+<li>magick/version.h.in: Added some documentation for the
+functioning of MagickLibVersion and MagickLibVersionNumber.</li>
+<li>configure.ac: Perform substutions to create
+VisualMagick/installer/inc/version.isx from
+VisualMagick/installer/inc/version.isx.in. This allows Windows
+versioning info to be updated from info in version.sh.</li>
+<li>Makefile.am (magick-version): For a VPATH build, update
+VisualMagick/installer/inc/version.isx in the source directory if
+it is out of date.</li>
+</ul>
+</blockquote>
+<p>2003-04-28 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/cache.c: CloneImagePixels(): applied Cristy's bugfix
+from IM-5.5.7.</li>
+</ul>
+</blockquote>
+<p>2003-04-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/api.html: The demo program on the ImageMagick API page is
+usually intended to be an exercise for the reader. It rarely
+compiles or works. Sure enough the demo code was not even close
+to compiling, didn't run, and did something totally different than
+described. This is not a good way to treat new users. Now the
+demo program compiles and runs, and its description is correct.</li>
+<li>www/magick.css, www/smile.c: Remove "Pair" advertisement which
+was discovered appended at the end of these files.</li>
+<li>coders/jpeg.c (ReadJPEGImage): Check for failure of
+AllocateImage. Close blob prior to error return.</li>
+<li>configure.ac: Perform substitutions on magick/version.h</li>
+<li>magick/version.h.in: New file to provide base for configured
+magick/version.h</li>
+<li>version.sh (PACKAGE_RELEASE_DATE): Support setting a package
+release date.</li>
+<li>configure.ac: Perform substitutions on PerlMagick/Magick.pm.in to
+create PerlMagick/Magick.pm.in.</li>
+<li>PerlMagick/Magick.pm.in: @PACKAGE_VERSION@ is substituted while
+configuring PerlMagick/Magick.pm.</li>
+<li>magick/magic.mgk, VisualMagick/bin/magic.mgk: Removed risky
+entry for PICT which has been demonstrated to lead to a false
+match in the real-world.</li>
+<li>coders/pict.c (ReadPICTImage): Ensure that PICT decoder don't
+loop forever with an EOF condition if none of the PICT op-codes
+encountered result in a condition which terminates the input loop.
+If EOF is dectected while in the input loop a "corrupt image"
+"unexpected end of file" error is reported.</li>
+<li>VisualMagick/installer: Updated installer.</li>
+</ul>
+</blockquote>
+<p>2003-04-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c, magick/blob.c, magick/studio.h: Added
+Compilation fixes recommended by Harold Bien for for Borland C++.</li>
+<li>www/contribute.html: Added text regarding contributing to
+GraphicsMagick.</li>
+<li>www/api/types.html: Documentation for GraphicsMagick API types
+moved from www/api/types/*.html into this one file. Types
+documentation is still very much under development.</li>
+<li>README.txt: Added note regarding the download location for free
+Windows fonts which are kindly made available by Microsoft.</li>
+<li>VisualMagick/installer/gm-dynamic-full-*.iss: Install
+nt_base.h and nt_feature.h.</li>
+</ul>
+</blockquote>
+<p>2003-04-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/windows.html: Updated for GraphicsMagick 1.0 and to
+link to ImageMagickObject.html.</li>
+<li>www/programming.html: Added link to ImageMagickObject.html.</li>
+<li>www/ImageMagickObject.html: New file to provide some
+documentation for ImageMagickObject.</li>
+<li>www: Found and fixed broken URL links.</li>
+</ul>
+</blockquote>
+<p>2003-04-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>FlashPIX: Applied patches from FreeBSD. Bumped package
+version to version to 1.2.0.8.</li>
+<li>www/api.html: Updated to reflect GraphicsMagick</li>
+<li>www/*.html: Updated with format_c_api_docs script.</li>
+<li>Makefile.am (format_c_api_docs): Add a target to update
+the C API documentation.</li>
+<li>scripts/format_c_api_docs: Add script which extracts and
+formats the C API documentation into HTML files in the www/api
+subdirectory.</li>
+</ul>
+</blockquote>
+<p>2003-04-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh (PACKAGE_VERSION): Update release version ID.</li>
+<li>magick/version.h (MagickReleaseDate): Update release date.</li>
+<li>magick/constitute.c (ConstituteImage): Fixed problems with
+reading intensity (gray) pixel arrays.</li>
+<li>magick/image.c (GrayscalePseudoClassImage): Use
+ScaleQuantumToIndex rather than ScaleQuantumToMap.</li>
+<li>magick/constitute.c (ConstituteImage): Use ScaleQuantumToIndex
+macro to scale integral intensity values to colormap range.</li>
+<li>magick/image.h (ScaleQuantumToIndex): New macro to scale a
+quantum to the maximum range of a colormap index. Useful when
+writing to PsuedoClass grayscale images.</li>
+<li>VisualMagick/tests/run_constitute.bat: Batch script to run
+constitute tests.</li>
+<li>VisualMagick/installer/*.iss: Updated for Beta1 release.</li>
+</ul>
+</blockquote>
+<p>2003-04-22 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>utilities/Makefile.am (check) fixed typos (RM -> RMDelegate
+and removed stray "gm"), added -random-threshold, ordered-dither.</li>
+<li>magick/effect.c: Random-threshold was not treating non-gray
+PseudoColor images correctly.</li>
+</ul>
+</blockquote>
+<p>2003-04-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>utilities/Makefile.am (check): Added code to put logo on demo
+output.</li>
+<li>magick/command.c (MontageImageCommand): Pass exception rather
+than &image->exception because image may be null, and it is
+pointless to store the exception where it will not be reported to
+the user anyway.</li>
+<li>utilities/Makefile.am (check): Ported Glenn Randers-Pehrson's
+utilities demo script into the Makefile to serve as a check
+target.
+(check): Add definition to find Generic.ttf.</li>
+<li>locale/C.mgk: Fixed syntax error in <Option><FatalError>
+section.</li>
+<li>www/development.html: New file to describe development
+process.</li>
+<li>index.html, www/*.html: Added link to development.html
+and improved formatting a bit.</li>
+</ul>
+</blockquote>
+<p>2003-04-21 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed bug with compiling png.c with libpng versions
+older than libpng-0.95.</li>
+</ul>
+</blockquote>
+<p>2003-04-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/programming.html: Added links to Delphi and Scheme
+programming interfaces.</li>
+<li>configure.ac : Removed outdated test for jp2conf.h.</li>
+</ul>
+</blockquote>
+<p>2003-04-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Add argument expansion and deallocation code
+to command functions which lacked this functionality.
+Replace calls to Exit with a return to the invoking function.</li>
+<li>utilities/gm.c: Expect each subcommand to expand and deallocate
+its own argument list. Treat subcommands more similarly.</li>
+<li>magick/magick.c (InitializeMagick): Seed the random number
+generator.</li>
+<li>magick/utility.c (ExpandFilenames): Handle tilde expansion
+properly. Handle relative glob specifications. Skip over "*"
+argument to +profile properly. Don't expand VID: specifications
+since the VID: coder will execute ExpandFilenames() later. Apply
+format specifier prefix to globbed file names. Fix double frees
+and rationalize memory management by always copying to a new
+vector.</li>
+</ul>
+</blockquote>
+<p>2003-04-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (InitializeMagick): Decided to
+move clean-up signal-handler registration from gm.c
+to magick.c in order to ensure that resources are
+cleaned up for all library users. This means that
+if a user program wants to do something special for
+signals registered to be caught by InitializeMagick
+(SIGHUP, SIGINT, SIGQUIT, SIGABRT, SIGTERM, SIGXCPU,
+& SIGXFSZ) then the user program should register its
+own signal handlers after invoking InitializeMagick.
+The user is then responsible for making sure that
+DestroyMagick is invoked if an unexpected signal is
+caught.</li>
+<li>tests/Makefile.am (check-constitute): Added
+constitute tests.</li>
+<li>magick/constitute.c: New test program to ensure
+that ConstituteImage and DispatchImage are working
+correctly.</li>
+</ul>
+</blockquote>
+<p>2003-04-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/download.html: Added links to directories
+at ftp.graphicsmagick.org.</li>
+<li>index.html: Add notice regarding 1.0 Beta0
+availability.</li>
+<li>www/cvs.html: Updated CVS checkout information to
+include the GraphicsMagick-1_0 branch.</li>
+<li>coders/psd.c (ReadPSDImage): Applied patch
+(SourceForge patch ID 722849) from Derry Bryson to
+fix a memory leak. An image was being leaked.</li>
+<li>magick/constitute.c (DispatchImage): Applied patch
+(SourceForge patch ID 722655) from Derry Bryson to
+correctly use the switch_map array rather than the
+map array. Without this patch, DispatchImage does
+not work at all.</li>
+<li>GraphicsMagick 1.0.0-beta0 release.</li>
+<li>version.sh: Updated for beta0 release.</li>
+<li>*.c magick/*.h: Update header inclusion to include
+"magick/" prefix in order to ensure that there is no
+confusion with headers from another package.</li>
+</ul>
+</blockquote>
+<p>2003-04-16 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c: 4x4 ordered dither threshold was
+incorrect.</li>
+</ul>
+</blockquote>
+<p>2003-04-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resource.c (InitializeMagickResources):
+Added the ability to obtain the amount of physical
+memory by executing an external command.</li>
+<li>configure.ac: Check for getpagesize().
+(MAGICK_PHYSICAL_MEMORY_COMMAND): Added a test for
+an external command which (quickly) returns the
+amount of physical memory installed on the machine.
+Currently only activated for FreeBSD.
+(MAGICK_PHYSICAL_MEMORY_COMMAND): Use sysctl to
+determine total physical memory for Darwin.</li>
+<li>magick/delegate.c (ListDelegateInfo): If COLUMNS
+environment variable is set, then use it to obtain
+the screen width. Some shells dynamically update
+COLUMNS, but COLUMNS may need to be explicitly
+exported in order for it to be seen by subordinate
+programs (such as gm).</li>
+<li>magick/effect.c (AddNoiseImage): Use IsGrayImage()
+to check if the image is gray. Add missing columns
+loop for intensity case (oops!).</li>
+<li>magick/command.c (DisplayImageCommand): Fix
+-dispose option processing bug reported by
+Felix Heimbrecht.</li>
+<li>coders/fpx.c: Check status from FPX_InitSystem().</li>
+</ul>
+</blockquote>
+<p>2003-04-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Define PERLMAINCC to be the C compiler
+if there are no C++ dependencies, or the C++ compiler
+if there are C++ dependencies.</li>
+<li>PerlMagick/Makefile.PL.in: Use PERLMAINCC to compile
+and link perlmain.c. This allows using the C++ compiler
+to link, which is useful when the build depends on C++
+libraries like libfpx.</li>
+<li>ltmain.sh: Updated to libtool 1.5 release.</li>
+<li>Makefile.am ($(PERLMAGICK)/$(PERLSTATICNAME)): Add
+rules to make sure that static PerlMagick is linked
+against the current GraphicsMagick library.</li>
+<li>coders/miff.c (ReadMIFFImage): Properly scale
+colormap entries.</li>
+<li>magick/image.c (TransformRGBImage): Eliminate 32-bit
+integer overflow condition for Q:32 build while
+transforming CMYK pixels.</li>
+</ul>
+</blockquote>
+<p>2003-04-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/ttf/read.t: Updated signatures and
+reference image for FreeType 2.1.4.</li>
+<li>(PerlMagick/t/write.t, PerlMagick/t/montage.t,
+PerlMagick/t/rad/read.t, PerlMagick/t/rad/write.t):
+Fix signatures which were thrown off by previous
+change to how signatures are specified to functions
+in subroutines.pl.</li>
+<li>PerlMagick/t/cgm/read.t: Updated to use reference
+image.</li>
+<li>PerlMagick/Makefile.PL.in: Perform substitutions
+on generated Makefile to ensure that the proper
+-lGraphicsMagick is used for a static build.</li>
+<li>ttf: Updated to FreeType 2.1.4. Now stored in
+CVS as delegates/freetype2 rather than delegates/ttf
+so be sure to re-checkout the ttf directory so that
+the correct files are used.</li>
+<li>wmf/incude/libwmf/api.h: Updating FreeType caused
+a problem since it introduced a copy of zlib and
+api.h included zlib.h. Fixed problem by adding
+a typedef for gzFile and not including zlib.h.</li>
+<li>utilities/gm.c: Fixed minor compilation problem
+under Windows caused by a typo in the signal
+handler registration code.</li>
+</ul>
+</blockquote>
+<p>2003-04-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am: When building a static PerlMagick,
+build PerlMagick as part of the <cite>all</cite> target and
+don't do a <cite>make clean</cite> of PerlMagick at install
+time.</li>
+<li>configure.ac (LIB_DPS): Add check to see if -lXt
+is required by -ldps. XFree86 -ldps requires -lXt.</li>
+<li>FlashPIX: FlashPIX library now compiles under
+FreeBSD 5.0.</li>
+<li>magick/deprecate.c (ValidateColormapIndex): Remove
+non-interface deprecated function.</li>
+<li>magick/tempfile.c (AcquireTemporaryFileDescriptor):
+Priortize use of mkstemp() over tempname() since *BSD
+compilers whine about tempname() (although we do use
+tempname() safely).</li>
+<li>magick/color.c (ConstrainColormapIndex): Removed
+function since it is no longer used.</li>
+<li>magick/utility.c (TemporaryFilename): Removed
+TemporaryFilename utility function since it is
+no longer used and it makes *BSD compilers
+complain.</li>
+<li>magick/studio.h: Don't define _ISOC99_SOURCE,
+_POSIX_C_SOURCE, or _XOPEN_SOURCE when compiling
+under FreeBSD since this maps out a <cite>ushort</cite>
+definition required by /usr/include/sys/ipc.h.</li>
+</ul>
+</blockquote>
+<p>2003-04-11 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Some grayscale PNG images and the
+JNG alpha channel were decoded improperly at Q:32.</li>
+<li>magick/constitute.c (PopImagePixels): Changed many
+instances of (Quantum) typecast to (unsigned char).</li>
+</ul>
+</blockquote>
+<p>2003-04-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/tiff/read.t: Added signature for 12-bit
+TIFF test and a Q:32 build.</li>
+<li>PerlMagick/t/subroutines.pl: Extended routines
+which are signature based to accept signatures for
+Q:32 as well.</li>
+<li>PerlMagick/t/wmf/read.t: Relax error values slightly
+to pass at Q:32.</li>
+<li>coders/miff.c (PushImageRLEPixels): Fix reading
+RLE MIFF at Q:32. A fragment of old code was being
+used to obtain the length.
+(WriteRunlengthPacket): Fix writing RLE MIFF at Q:32.
+In most cases the wrong scaling macro was being used.</li>
+<li>tests/Makefile.am (check-miff): Added MIFF tests
+for supported compression options.</li>
+</ul>
+</blockquote>
+<p>2003-04-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/color.c (QueryColorDatabase): Extended to
+support parsing Q:32 hex color specification strings.
+Also add error reporting for failure to parse the
+color specification. This resolves a bug that drawing
+via the draw.c APIs was not working for Q:32 builds.</li>
+<li>utilities/gm.c (main): Add signal handlers to
+make sure that program cleans-up on exit by invoking
+DestroyMagick.</li>
+<li>magick/draw.c (DrawSetFillColor): Quote color
+specification.
+(DrawSetStrokeColor): Quote color specification.
+(DrawSetTextUnderColor): Quote color specification.</li>
+<li>ltmain.sh: Update to latest CVS libtool.</li>
+</ul>
+</blockquote>
+<p>2003-04-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/enhance.c (NormalizeImage): Only normalize the opacity
+channel if image->matte is true. This results in some (15%)
+speedup. While it can be argued that the <cite>K</cite> in CMYK should be
+normalized, it can also be argued that this is senseless since <cite>K</cite>
+is not a "linear" measure like C, M, & Y are, and there may not be
+any any value to normalizing CMY at all.
+(EqualizeImage): Only equalize the opacity channel if image->matte
+is true. This results in a 23% speedup.
+(GammaImage): Minor loop optimization.
+(LevelImage): Don't level the opacity channel. Doing so doesn't
+make any sense.
+(LevelImageChannel): Put loops inside switch statement rather than
+around it.</li>
+<li>PerlMagick/t/tiff/read.t: Added grayscale 12-bit and 16-bit TIFF
+read tests.</li>
+</ul>
+</blockquote>
+<p>2003-04-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Add support for reading
+12-bit grayscale TIFFs. Fix reading 16-bit grayscale TIFFs
+when QuantumDepth=8.</li>
+<li>VisualMagick/installer/gm-dynamic-full-8.iss,
+VisualMagick/installer/gm-dynamic-full-16.iss: Many C header
+files were not being included in the distribution. Oops!</li>
+</ul>
+</blockquote>
+<p>2003-04-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>(index.html, www/*.html): Update to new web page style.</li>
+<li>scripts/txt2html: Update to output new web page style.</li>
+<li>ltmain.sh: Updated to latest CVS libtool.</li>
+<li>magick/tempfile.c (DestroyTemporaryFiles): Function was
+crashing if it was executed twice.</li>
+</ul>
+</blockquote>
+<p>2003-04-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/delegates.mgk.in: Ralcgm was appending ".ps" to the
+provided output file name, so change cgm delegate command so that
+the input file is delivered via standard input, output is
+re-directed to a file, and anything printed to stderr (such as
+the Ralcgm program name and version) is sent to /dev/null.</li>
+<li>INSTALL-unix.txt: Added/corrected/improved documentation
+regarding --disable-installed, --enable-shared, and
+--with-modules.</li>
+<li>VisualMagick/magick/magick_config.h.in: Add more documentation
+and explanatory notes in order to lessen confusion.</li>
+<li>Many files: Replaced "UseInstalledImageMagick" with
+"UseInstalledMagick" for obvious reasons.</li>
+</ul>
+</blockquote>
+<p>2003-04-04 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c, utilities/gm.c: Print "help" screen for a
+tool when user types "gm tool" or "gm tool -help"</li>
+<li>magick/command.c, magick/effect.c: add -ordered-dither option.</li>
+</ul>
+</blockquote>
+<p>2003-04-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>locale/C.mgk: Fixed message associated with
+"UnableToCreateTemporaryFile".</li>
+<li>magick/tempfile.c (AcquireTemporaryFileDescriptor): Decided
+to return a pathname (if possible), even on failure, for use
+in error reports. The function return status should be used
+to determine if the function has succeeded.</li>
+<li>locale/locale.mgk: Updated copyright header.</li>
+<li>(magick/annotate.c, magick/attribute.c, magick/blob.c,
+magick/cache.c, magick/constitute.c, magick/delegate.c,
+magick/display.c, magick/image.c, magick/locale.c
+magick/tempfile.c, magick/tempfile.h, magick/utility.c,
+magick/xwindow.c, coders/dcm.c, coders/ept.c,
+coders/histogram.c, coders/mpeg.c, coders/pdf.c,
+coders/pict.c, coders/preview.c, coders/ps2.c,
+coders/ps3.c, coders/ps.c, coders/pwp.c, coders/sfw.c,
+coders/svg.c, coders/tiff.c, coders/url.c, coders/wpg.c):
+Ensure that failure to allocate/create temporary file is
+properly detected and reported.</li>
+</ul>
+</blockquote>
+<p>2003-04-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/type.c (GetTypeBlob): Prioritize hard-coded path
+over Windows registry values.</li>
+<li>magick/log.c (GetLogBlob): Prioritize hard-coded path
+over Windows registry values.</li>
+<li>magick/blob.c (GetConfigureBlob): Prioritize hard-coded path
+over Windows registry values.</li>
+<li>magick/delegate.c (ReadConfigureFile): Perform substitutions
+for "@GMDelegate@", "@GMDisplayDelegate@", "@MPEGDecodeDelegate@",
+"@MPEGEncodeDelegate@", and "@HPGLDecodeDelegate@" while reading
+delegates.mgk under windows.
+(ListDelegateInfo): Format delegate command line to multiple
+lines if necessary rather than truncating.</li>
+<li>configure.ac (MagickBinPathDefine): Added support for
+a MagickBinPath definition.</li>
+<li>configure.ac (GSVersion): Added test to obtain version
+of installed Ghostcript.</li>
+<li>magick/tempfile.c (AcquireTemporaryFileDescriptor): Open
+flag should have been O_RDWR, not O_WRONLY!</li>
+</ul>
+</blockquote>
+<p>2003-04-03 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c: Simplified skipping over the "*" in
+the +profile "*" option when expanding filenames.</li>
+</ul>
+</blockquote>
+<p>2003-04-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/bin/delegates.mgk: Update similarly to
+coders/delegates.mgk.in.</li>
+<li>coders/delegates.mgk.in: Replaced <cite>mpeg-decode</cite> delegate
+specification with <cite>mpeg</cite> delegate specification.</li>
+<li>PerlMagick/t/mpeg/read.t: Since -r option is no longer
+supplied to mpeg2decode, the signatures must be updated.</li>
+<li>magick/utility.c (ExpandFilenames): Skip over no-argument
+commands properly.</li>
+<li>coders/mpeg.c: Removed ReadMPEGImage since this is handled
+entirely by delegate now.</li>
+<li>magick/command.c: Add convert -temporary option for use
+when input files are temporary files which should be
+automatically removed.</li>
+<li>magick/delegate.c (InvokeDelegate): Ensure that temporary
+file access is secure.</li>
+<li>coders/ept.c (ReadEPTImage): Ensure that temporary file
+specified by image_info->filename is liberated before
+allocating a new temporary file name.</li>
+<li>coders/ps.c (ReadPSImage): Ensure that temporary file
+specified by image_info->filename is liberated before
+allocating a new temporary file name.</li>
+<li>coders/pdf.c (ReadPDFImage): Change TemporaryFilename
+to AcquireTemporaryFileName.</li>
+<li>magick/tempfile.c (LiberateTemporaryFile): Now takes
+a <cite>char *</cite> argument rather than <cite>const char *</cite>, and
+erases the provided filename if it is the name of a valid
+temporary file. This helps avoid errors. The return
+status may be used to determine if a file was removed.
+(AcquireTemporaryFileDescriptor): Decided that adding a
+.tmp extension to temporary file names is unnecessary.</li>
+<li>coders/jp2.c (WriteJP2Image): Destroy pixel matrix
+after encoding image. Cristy says that there is memory
+corruption otherwise.</li>
+</ul>
+</blockquote>
+<p>2003-04-01 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Use new temporary file manager for JNG components.
+Merge with IM 5.5.7 (mostly cosmetic changes).</li>
+</ul>
+</blockquote>
+<p>2003-03-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/cache.c (OpenCache): Add some Windows-specific
+open options.</li>
+<li>magick/resource.c (InitializeMagickResources): Increase
+the number of "lowio" file handles available for use under
+Windows.</li>
+<li>ltdl/ltdl.c: Incorporate more Darwin fixes from CVS libtool.</li>
+<li>coders/pcx.c (ReadPCXImage): Incorporate bugfix from
+ImageMagick -- Not enough memory allocated for reading PCX
+(bug report by Trevor Willis).</li>
+<li>magick/magick.c (InitializeMagick): Only invoke
+SetLogEventMask() to set debug options based on
+getenv("MAGICK_DEBUG") if the environment variable is set.</li>
+</ul>
+</blockquote>
+<p>2003-03-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/tempfile.c: Include tempfile.h rather than temporary.h</li>
+<li>magick/magick.c: Include tempfile.h rather than temporary.h</li>
+<li>coders/dcm.c, coders/ept.c, coders/histogram.c, coders/mpeg.c,
+coders/pdf.c, coders/pict.c, coders/preview.c, coders/ps.c,
+coders/ps2.c, coders/ps3.c, coders/pwp.c, coders/sfw.c,
+coders/svg.c, coders/tiff.c, coders/url.c, coders/wpg.c,
+magick/annotate.c, magick/attribute.c, magick/blob.c,
+magick/cache.c, magick/constitute.c, magick/delegate.c,
+magick/display.c, magick/image.c, magick/magick.c,
+magick/utility.c, magick/xwindow.c: Updated to use new temporary
+file allocation APIs.</li>
+<li>magick/tempfile.c: New temporary file allocation subsystem for
+allocating, tracking, and deallocating temporary files. Use of
+this subsystem should reduce the likelyhood that temporary
+files will be left behind once the process exits.
+If the environment variable MAGICK_TMPDIR is set, then its
+value is used as the location to place temporary files.</li>
+<li>magick/utility.c (IsAccessibleAndNotEmpty): New function
+for testing for file exists, is a regular file, and is not empty.
+Used to test if a temporary file has been updated by a delegate.</li>
+<li>magick/log.c (SetLogEventMask): Add support for setting
+TemporaryFileEvent.</li>
+<li>PerlMagick/Magick.xs: Added TemporaryFile log event type.</li>
+<li>magick/log.h (LogEventType): Add TemporaryFileEvent event
+classification.</li>
+</ul>
+</blockquote>
+<p>2003-03-29 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resize.c (SampleImage) and magick/render.c (DrawAffineImage():
+Applied Cristy fix for bug that offset images to the top and left.</li>
+<li>magick/resize.c (ScaleImage): Fixed bug that caused intensity
+levels to be one unit too high.</li>
+<li>coders/png.c: make JNG support depend on HasJPEG. Remove temp files.</li>
+</ul>
+</blockquote>
+<p>2003-03-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resize.c (ResizeImage): Applied fix authored by John
+Cristy for distortion when using the bessel filter.</li>
+<li>magick/display.c: Applied fix authored by John Cristy which
+eliminates bogging down when using the magnifier window on
+large images.</li>
+<li>Several files: A few files included multiple copies of the
+copyright header text due to either pilot error, or equipment
+failure.</li>
+</ul>
+</blockquote>
+<p>2003-03-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/Makefile.am : Removed some debug code which was
+accidentally committed to CVS.</li>
+<li>Copyright.txt: Add copyright statements to all the files,
+including some apparently missing copyrights.</li>
+</ul>
+</blockquote>
+<dl class="docutils">
+<dt>2003-03-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></dt>
+<dd><ul class="first last simple">
+<li>magick/Makefile.am: Added temporary.c and temporary.h. These
+are not finished yet.</li>
+<li>magick/cache.c: Transferred optimization from ImageMagick
+to read/write all requested pixel cache rows in one system
+call when accessing the cache using file I/O, and the
+requested columns equals the image columns.</li>
+<li>magick/resource.c: (ResourceInfo): Use type <cite>double</cite> rather
+than <cite>long double</cite>. For many systems, the range of <cite>long double</cite>
+is the same as <cite>double</cite>. On others, use of <cite>long double</cite> incurs
+the cost of function calls since there is no hardware support.</li>
+</ul>
+</dd>
+</dl>
+<p>2003-03-22 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.h, effect.c, command.c: Revised -random-dither
+to require parameters: channel LOWxHIGH. Channel can presently
+be "intensity", "opacity", or "all".</li>
+</ul>
+</blockquote>
+<p>2003-03-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ltdl/ltdl.c: Updated to latest CVS version. Claimed to
+support loading modules under MacOS-X.</li>
+<li>magick/resource.c (InitializeMagickResources): Enable code
+under Windows which queries system limits.</li>
+<li>magick/cache.c (S_MODE): Fixed portability problems with
+definition.</li>
+<li>VisualMagick/bin/delegates.mgk: Fix typo in "mpeg-decode"
+decode rule.</li>
+<li>libtool: Update to latest CVS version.</li>
+<li>configure.ac: Test zlib for gzseek and gztell.</li>
+<li>magick/effect.c (ChannelThresholdImage): The is_grayscale flag
+was not be evaluated correctly.</li>
+</ul>
+</blockquote>
+<p>2003-03-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.h (RoundSignedToQuantum): Added handy
+RoundSignedToQuantum macro for munging doubles into Quantums.</li>
+<li>magick/effect.c (ThresholdImage): Added optimizations for
+thresholding all pixels to white or black. Threshold using an
+integral value rather than a double so compares are faster.
+(ChannelThresholdImage): Threshold against integral values since
+compares are faster. Invoke ThresholdImage for simple thresholding
+across all channels since it is faster.</li>
+</ul>
+</blockquote>
+<p>2003-03-19 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/meta.c: #ifdef'ed out some dead code.</li>
+<li>magick/annotate.c: #ifdef'ed out some code that is only
+used when HasTTF is defined.</li>
+<li>Added RandomThresholdImage() method and -random-threshold
+commandline option.</li>
+</ul>
+</blockquote>
+<p>2003-03-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac (LIB_TIFF): Check for TIFFReadRGBATile and TIFFReadRGBAStrip
+in libtiff before deciding to use it.</li>
+<li>magick/blob.c (WriteBlob): Move pointer increment into
+paranthesis.
+(ReadBlob): Move pointer increment into paranthesis.</li>
+<li>magick/gem.c (HSLTransform): Removed inline statement.
+(TransformHSL): Removed inline statement.</li>
+<li>magick/random.[c|h]: Removed files from CVS.</li>
+<li>magick/command.c: Don't include random.h.</li>
+<li>PerlMagick/t/reference/jng: Update reference files to current output.</li>
+</ul>
+</blockquote>
+<p>2003-03-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Added tests for pread and pwrite functions.</li>
+<li>magick/image.c (GrayscalePseudoClassImage): Properly invoke
+SyncImagePixels.</li>
+<li>magick/cache.c (SyncCacheNexus): Add back in is_monochrome and
+is_grayscale flag resetting which was lost by copying over
+ImageMagick's cache.c.
+(FilePositionRead): Inline wrapper for reading a chunk of data at
+an offset.
+Cleans up some messy code, and makes it easy to use pread().
+(FilePositionWrite): Inline wrapper for writing a chunk of data at
+an offset.
+Cleans up some messy code, and makes it easy to use pwrite().
+Cache now uses pread() and pwrite() to access the cache if these
+calls are available.</li>
+<li>magick/resource.c (InitializeMagickResources): Support setting
+resource limits via the environment variables MAGICK_LIMIT_DISK,
+MAGICK_LIMIT_FILES, MAGICK_LIMIT_MEMORY, and MAGICK_LIMIT_MAP.</li>
+</ul>
+</blockquote>
+<p>2003-03-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/stream.c (AcquirePixelStream): Store total pixels in
+64-bit type.
+(SetPixelStream): Store total pixels in 64-bit type.</li>
+<li>coders/tiff.c (WriteTIFFImage): CoderError should be
+MissingDelegateError.</li>
+<li>coders/ps3.c (Huffman2DEncodeImage): CoderError should be
+MissingDelegateError.
+(WritePS3Image): CoderError should be MissingDelegateError.</li>
+<li>coders/ps2.c (Huffman2DEncodeImage): CoderError should be
+MissingDelegateError.</li>
+<li>coders/pdf.c (Huffman2DEncodeImage): CoderError should be
+MissingDelegateError.</li>
+<li>coders/fpx.c (ReadFPXImage): CoderError should be
+MissingDelegateError.
+(WriteFPXImage): CoderError should be MissingDelegateError.</li>
+<li>coders/dps.c (ReadDPSImage): CoderError should be
+MissingDelegateError.</li>
+<li>magick/image.c (AnimateImages): DelegateError should be
+MissingDelegateError.</li>
+<li>magick/annotate.c (RenderX11): DelegateError should be
+MissingDelegateError.</li>
+<li>magick/image.c (DisplayImages): DelegateError should be
+MissingDelegateError.</li>
+</ul>
+</blockquote>
+<p>2003-03-17 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c Relocated misplaced break in ChannelImage()
+and sped up SetImageOpacity by avoiding blend operation when
+setting the image fully opaque.</li>
+</ul>
+</blockquote>
+<p>2003-03-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/cache.c: Snarfed cache.c updates from ImageMagick.</li>
+<li>magick/command.c: Added -list resource support.</li>
+</ul>
+</blockquote>
+<p>2003-03-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/Makefile.am (random.c): Removed building, packaging,
+and intialization of random.c functions since it is not actually
+used.</li>
+<li>magick/semaphore.c (InitializeSemaphore): Only initialize
+critical section if active_semaphore is not already true.</li>
+<li>magick/resource.c: Snarf resource.c updates from ImageMagick.</li>
+<li>PerlMagick/Magick.xs: Added missing log event types.</li>
+<li>magick/log.h (enum): Added ResourceEvent enumeration.</li>
+<li>magick/log.c (LogMagickEvent): fflush(stdout) at the end of
+each log. Otherwise output may not be seen for a long time.
+(SetLogEventMask): Add support for "-debug resource".</li>
+<li>coders/tiff.c (RegisterTIFFImage): Don't register encode and
+decode handlers for TIFF if TIFF library is not available.</li>
+<li>magick/constitute.c (WriteImage): Fix cut-n-paste error
+in log message ("decoder" --> "encoder").</li>
+</ul>
+</blockquote>
+<p>2003-03-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>index.html: Added a link to the GraphicsMagick mailing lists.</li>
+<li>Magick++/demo/zoom.cpp: Added dashed option support, including
+a -resample option for image resampling.</li>
+</ul>
+</blockquote>
+<p>2003-03-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am (DIST_SUBDIRS): Filters subdirectory needs to
+be distributed.</li>
+</ul>
+</blockquote>
+<p>2003-03-14 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c Ported Cristy's bugfix to DrawAffineImage().</li>
+</ul>
+</blockquote>
+<p>2003-03-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (DestroyImage): Comment out new assertions until
+we are certain that there are no ill effects.</li>
+<li>coders/mat.c (ReadMATImage): Set image->depth to valid values.</li>
+<li><dl class="first docutils">
+<dt>PerlMagick/Magick.xs: Update so that new DestroyImage assertions</dt>
+<dd>aren't asserted.</dd>
+</dl>
+</li>
+<li>magick/list.c (DestroyImageList): Update so that new DestroyImage
+assertions aren't asserted.</li>
+<li>coders/wpg.c (ReadWPGImage): Don't leave dangling pointer when
+trimming list. Don't set image->depth to invalid values.</li>
+</ul>
+</blockquote>
+<p>2003-03-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (DestroyImage): Add assertions to verify
+that destroyed image is not currently referenced by another
+image. This should help prevent accidental continued use
+of a destroyed image.
+(DestroyImage): Added assertions to enforce that images
+should not continue to reference the destroyed image.</li>
+<li>coders/wpg.c: Incorporated fixes from Jaroslav Fojtik.</li>
+<li>version.sh (PACKAGE_VERSION_ADDENDUM): Construct a package
+snapshot version based on the ChangeLog modification time.
+This requires GNU find to work propery since the -printf
+option is used.</li>
+<li>configure.ac (LIB_GS): Do not test for the Ghostscript
+library by default due to the issue of its embedded libjpeg
+conflicting with libjpeg.</li>
+<li>coders/ept.c (ReadEPTImage): "PostscriptDelegateFailed" should
+be classified as a DelegateError type.</li>
+</ul>
+</blockquote>
+<p>2003-03-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (BlobToFile): Truncate while opening file.
+(ImageToFile): Truncate while opening file.</li>
+<li>magick/annotate.c (RenderFreetype): Missing freetype library
+should result in a MissingDelegateError type rather than a
+DelegateError type.</li>
+<li>INSTALL-windows.txt: Added a note regarding a workaround for
+internal compiler errors while compiling image.c when using
+Visual C++ 7.0.</li>
+<li>coders/jpeg.c (ReadICCProfile): Incorporate ImageMagick fix
+to handle short JPEG ICC profiles.</li>
+<li>magick/integral_types.h: Ignore SIZEOF_LONG_LONG and
+SIZEOF_UNSIGNED_LONG_LONG defines if _VISUALC_ is defined.</li>
+</ul>
+</blockquote>
+<p>2003-03-11 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/gm.html, utilities/gm.1, guide/gm.tex: Expanded description
+of the -affine option.</li>
+</ul>
+</blockquote>
+<p>2003-03-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (GetImageDepth): Re-implemented using a single-pass
+algorithm and 1/2 the code. Previous implementation didn't return
+correct results for Q:32 build. Now it does.</li>
+<li>magick/command.c (IdentifyImageCommand): For identify, when
+%q format specifier is present, image must be read rather than
+pinged. If not, either the value 8 is returned, or there is a
+crash due to reading an uninitialized image.</li>
+</ul>
+</blockquote>
+<p>2003-03-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c: Incorporate fixes from Jaroslav Fojtik. Close
+Blob before rotating image.</li>
+<li>PerlMagick/README.txt: Update to reflect that PerlMagick is
+part of GraphicsMagick.</li>
+<li>PerlMagick/t/input.mat: Added test image for Matlab format.</li>
+<li>PerlMagick/t/input.wpg: Added test image for WordPerfect Graphics Format.</li>
+<li>utilities/Makefile.am (ALLMANPAGES): Install gm.1 rather than
+old utility manual pages.</li>
+</ul>
+</blockquote>
+<p>2003-03-09 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/gm.html, utilities/gm.1, guide/gm.tex: First cut at
+manpage for gm, to replace individual utility manpages.</li>
+</ul>
+</blockquote>
+<p>2003-03-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c: Fix some erroneous log printf specifications.
+Improved blob log messages a bit.</li>
+<li>magick/log.c (IsEventLogging): Use InitializeLogInfo().
+(InitializeLogInfo): New function to intelligently initialize
+logging subsystem. Only locks when initialization may be required,
+and only locks long enough to determine if initialization is required.
+This approach should avoid deadlocking while logging from functions
+used to initialize logging.
+(IsLogAccessible): No longer need this duplicate of IsAccessible().
+(SetLogEventMask): Use InitializeLogInfo().</li>
+<li>coders/fpx.c (ReadFPXImage): FlashPIX library does not support
+BLOB I/O so don't use OpenBlob/CloseBlob. Opening the blob caused
+a conflict when the FlashPIX library attempted to open the file.</li>
+</ul>
+</blockquote>
+<p>2003-03-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Test for libtiff functions (TIFFClientOpen &
+TIFFIsByteSwapped), which are required by GraphicsMagick, but
+not found in older libtiff versions.</li>
+<li>magick/blob.c: Added logging for Blob open/close and memory
+mapping operations.</li>
+</ul>
+</blockquote>
+<p>2003-03-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/rwblob.c (main): DestroyImage asserts on NULL so only
+call it for non-null image.</li>
+<li>tests/rwfile.c (main): DestroyImage asserts on NULL so only
+call it for non-null image.</li>
+</ul>
+</blockquote>
+<p>2003-03-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/rwblob.c (main): Add -pause option to require keypress to
+exit program. Clean-up to avoid any appearance of leaks.</li>
+<li>tests/rwfile.c (main): Add -pause option to require keypress to
+exit program. Clean-up to avoid any appearance of leaks.</li>
+<li>magick/static.c (ExecuteStaticModuleProcess): Don't bind in
+process filter functions for Visual C++ since the build environment
+doesn't support it yet.</li>
+<li>magick/log.c (GetLogBlob) Code wasn't actually testing current
+directory for log.mgk, now it does.</li>
+<li>magick/log.c (IsEventLogging): Eliminate accidental recursive, or
+repeated, initialization of the logging system.</li>
+</ul>
+</blockquote>
+<p>2003-03-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jp2.c (WriteJP2Image): Improved -quality rate estimation
+for very small files.</li>
+</ul>
+</blockquote>
+<p>2003-03-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jp2.c (WriteJP2Image): Add additional logging support.</li>
+<li>tests/rwblob.c: Added BLOB read/write logging.</li>
+<li>tests/rwfile.c: Added file read/write logging.</li>
+<li>magick/module.c (FindMagickModule): Minor code cleanup and limit
+directory and file name lengths to sensible values.</li>
+<li>magick/utility.c (IsAccessible): Log test failures along with
+test failure reason [strerror(errno)]. Also log test success.</li>
+<li>VisualMagick/bin/delegates.mgk: -DSAFER does not work with
+Ghostscript 8.0.</li>
+<li>magick/module.c: Needed to conditionally include nt_feature.h.</li>
+</ul>
+</blockquote>
+<p>2003-03-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/module.c (ExecuteModuleProcess): Updated to support locating
+filter modules based on search rules.
+(CoderInfo): Declare only in module.c since use is private to this
+module.
+(GetCoderInfo): Made static and commented out since currently unused.
+(FindMagickModule): New function to search for a module.
+(GetModuleBlob): Moved from blob.c, made static, and re-implemented
+based on FindMagickModule.</li>
+<li>magick/blob.c: Moved GetTypeBlob() to type.c and made it static.
+Moved GetModuleBlob() to module.c and made it static.</li>
+</ul>
+</blockquote>
+<p>2003-03-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/Makefile.am: MIFF module does not depend on -ljpeg, but
+PNG module does (for JNG).</li>
+<li>filters/analyze.c (AnalyzeImage): Bugfix, image should be passed
+as Image** rather than Image*.</li>
+<li>magick/utility.c (IsAccessible): Don't log errno if errno==0.</li>
+</ul>
+</blockquote>
+<p>2003-03-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/Makefile.am: Link with libFilters convenience library.</li>
+<li>VisualMagick/magick/magick_config.h.in: Change MagickModulesPath
+to MagickCoderModulesPath and add a MagickFilterModulesPath to
+locate filter modules.</li>
+<li>filters/Makefile.am: New makefile to build filter modules.</li>
+<li>configure.ac: Configure magick/GraphicsMagick.pc and
+Magick++/lib/GraphicsMagick++.pc.
+(MagickModulesSubdir): Add quantum depth to modules path to ensure
+that modules with the correct depth are loaded. The modules path
+is now
+${libdir}/GraphicsMagick-${PACKAGE_VERSION}/modules-Q${QuantumDepth}/coders.
+(MagickCoderModulesPath): Rename MagickModulesPath to
+MagickCoderModulesPath.
+(MagickFilterModulesPath): Define to location of filter modules.</li>
+<li>magick/Makefile.am: Added rules to install GraphicsMagick.pc.</li>
+<li>magick/GraphicsMagick.pc.in: Added pkgconfig file for
+-lGraphicsMagick.</li>
+</ul>
+</blockquote>
+<p>2003-02-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jp2.c (WriteJP2Image): Quality factor calculation had
+accidentally been removed. The calculation is back, but has been
+biased up slightly so that a quality factor of 75 results in a
+more reasonable 16:1 compression. Past a quality factor of 99.5,
+the compression is set to 1:1 (non-lossy).</li>
+</ul>
+</blockquote>
+<p>2003-02-27 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed bug with reading interlaced PNG images, introduced
+yesterday.</li>
+<li>Fixed bug with skipping MNG subimages, also introduced
+yesterday.</li>
+</ul>
+</blockquote>
+<p>2003-02-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am (EXTRA_DIST): Forgot to distribute version.sh</li>
+<li>configure.ac: Use definitions from version.sh to drive
+package versioning and naming. These definitions support
+libtool's recommended approach to library versioning.</li>
+<li>version.sh: New file for managing release versioning.
+Edit this file to change the release number, etc.</li>
+<li>PerlMagick/t/tiff/read.t: Added read tests for stripped,
+planar contiguous, and planar seperated TIFFs.</li>
+<li>coders/tiff.c (ReadTIFFImage): Transferred stripped-TIFF
+reading code from ImageMagick.
+Enumerated reading methods to make the logic more clear.</li>
+</ul>
+</blockquote>
+<p>2003-02-27 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>JNG alpha sample depth was sometimes inconsistent.</li>
+<li>Bring only one line at a time into memory during PNG
+read/write (Merge with Cristy's 5.5.6 update).</li>
+</ul>
+</blockquote>
+<p>2003-02-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/Makefile.PL.in (LIBS): Put MAGICKLIB first to
+decrease the probability that the wrong libMagick is used
+when linking static PerlMagick.</li>
+<li>configure.ac (PerlMagick): Fix linker search path for
+-lGraphicsMagick when linking a static PerlMagick. It seems
+that libtool changed the location where it places static
+libraries.</li>
+<li>PerlMagick/t/tiff/read.t: Added test for reading tiled TIFF.</li>
+<li>coders/tiff.c (ReadTIFFImage): Add optimized support for
+reading tiled TIFFs.
+(ReadTIFFImage): Optimize loops for reading tiled TIFFs as well.
+(ReadTIFFImage): Eliminate compiler warning.
+(ReadTIFFImage): Add some missing error handling for tiled TIFF.</li>
+</ul>
+</blockquote>
+<p>2003-02-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Optimize RGBA transfer loop.</li>
+</ul>
+</blockquote>
+<p>2003-02-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawPrimitive): Return DrawPolygonPrimitive
+status (edit transferred from ImageMagick).</li>
+<li>magick/utility.c (GetMagickGeometry): Scaling to an area now
+preserves the image aspect ratio.</li>
+</ul>
+</blockquote>
+<p>2003-02-24 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>png.c: Added missing parentheses in typecast (cristy noticed
+the bug that I introduced on 2/18).</li>
+</ul>
+</blockquote>
+<p>2003-02-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am: Add rules to produce www/README.html,
+www/INSTALL-mac.html, www/INSTALL-unix.html, www/INSTALL-vms.html,
+and www/INSTALL-windows.html</li>
+<li>www/README.html: New file produced from README.txt</li>
+<li>www/INSTALL-mac.html: New file produced from INSTALL-mac.txt.</li>
+<li>www/INSTALL-unix.html: New file produced from INSTALL-unix.txt.</li>
+<li>www/INSTALL-vms.html: New file produced from INSTALL-vms.txt.</li>
+<li>www/INSTALL-windows.html: New file produced from INSTALL-windows.txt.</li>
+<li>NEWS: Added news for GraphicsMagick 1.0.0.</li>
+<li>magick/locale.c: Added error messages to support JP2.</li>
+<li>locale/C.mgk: Added error messages to support JP2.</li>
+<li>locale/locale.mgk: Update to GraphicsMagick copyright.</li>
+<li>coders/jp2.c: Updated to use Jasper 1.700.1 interface
+conventions. Jasper 1.700.1 is required now. Support
+reading arbitrary quantum sizes up to 16-bits. Return
+grayscale images as PseudoClass.</li>
+<li>jp2/: Updated Jasper sources to version 1.700.1.</li>
+</ul>
+</blockquote>
+<p>2003-02-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jp2.c (ReadJP2Image): Obtain channel indexes by
+ID rather than assuming index value. Validate that channel
+geometry and encoding is supported.</li>
+<li>magick/effect.c (ThresholdImage): Additional performance
+optimization. Work faster if image is already gray.</li>
+</ul>
+</blockquote>
+<p>2003-02-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jp2.c (WriteJP2Image): Port to Jasper 1.7.
+For Q:32, don't write 32-bit pixels rather than the
+16-bit pixels we told Jasper we would write.
+(WriteJP2Image): Back-port to Jasper 1.6.</li>
+</ul>
+</blockquote>
+<p>2003-02-18 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/modules.mgk: Added JNG entry.</li>
+</ul>
+</blockquote>
+<p>2003-02-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jp2.c (RegisterJP2Image): Added registration for
+"PGX" magick tag.</li>
+<li>magick/magic.mgk: Added entry for JPEG V2's PGX format.</li>
+<li>PerlMagick/t/jp2/read.t: Added JPEG Version 2 read tests.</li>
+<li>coders/modules.mgk: Added JPC and PGX magick types to
+support JPEG V2.</li>
+<li>magick/color.c (IsMonochromeImage): Re-arranged test logic
+to short-circuit test using ORs.
+(IsGrayImage): Re-arranged test logic to short-circuit test
+using ORs.</li>
+<li>magick/constitute.c (PopImagePixels): Speed GrayQuantum
+and GrayAlphaQuantum cases if is_grayscale is True.</li>
+<li>magick/quantize.c (AssignImageColors): Sync image to
+update DirectClass pixels to new colormap.</li>
+<li>coders/fpx.c (RegisterFPXImage): FlashPIX does not
+provide direct BLOB I/O support.</li>
+<li>magick/blob.c (BlobToImage): Add logging.
+(BlobToFile): Add logging.</li>
+</ul>
+</blockquote>
+<p>2003-02-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/fpx.c (ReadFPXImage): Removing the input file is
+antisocial.</li>
+<li>PerlMagick/t/fpx/*.fpx: Replaced with new copies. Files
+seemed to be corrupt.</li>
+<li>PerlMagick/t/cgm/read.t: Specify file magick so that CGM
+read test passes for BLOB case.</li>
+<li>PerlMagick/t/rad/read.t: Specify file magick so that RAD
+read test passes for BLOB case.</li>
+<li>PerlMagick/t/jng/read.t: Add read tests for JNG.</li>
+<li>PerlMagick/t/jng/write.t: Add read/write tests for JNG.</li>
+<li>configure.ac (DELEGATES): Added <cite>jng</cite> to the DELEGATES list
+so that JNG can be included in the PerlMagick tests.</li>
+</ul>
+</blockquote>
+<p>2003-02-18 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Write proper JNG image_interlace_method.</li>
+<li>coders/png.c: Read and write proper MNG and JNG sRGB intent.</li>
+<li>PerlMagick/t/jng: Add twelve test files in JNG format.</li>
+<li>coders/png.c: Write proper progressive JNG output when
+transparency is present.</li>
+</ul>
+</blockquote>
+<p>2003-02-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/version.c (GetMagickWebSite): New function.</li>
+</ul>
+</blockquote>
+<p>2003-02-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wmf.c (ipa_device_begin): Use MagickWebSite definition.</li>
+<li>www/Copyright.html: Updated to match Copyright.txt</li>
+<li>www/perl: Updated to reflect GraphicsMagick vs ImageMagick.</li>
+<li>magick/xwindow.c (XMakeImageMSBFirst): Minor loop optimizations.</li>
+<li>magick/constitute.c (ConstituteImage): Check for grayscale
+and monochrome image if image is PseudoClass.</li>
+</ul>
+</blockquote>
+<p>2003-02-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/enhance.c (ContrastImage): Preserve is_grayscale flag.
+(EqualizeImage): Preserve is_grayscale flag.
+(ModulateImage): Preserve is_grayscale flag.
+(NegateImage): Preserve is_grayscale flag.
+(NormalizeImage): Preserve is_grayscale flag.</li>
+<li>magick/fx.c (ColorizeImage): Evaluate is_grayscale status.
+(ConvolveImage): Preserve is_grayscale flag.
+(ImplodeImage): Preserve is_grayscale flag.
+(SolarizeImage): Preserve is_grayscale flag.
+(OilPaintImage): Preserve is_grayscale flag.
+(SwirlImage): Preserve is_grayscale flag.
+(WaveImage): Preserve is_grayscale flag.</li>
+<li>magick/resize.c (MagnifyImage): Preserve is_grayscale flag.
+(MinifyImage): Preserve is_grayscale flag.
+(ResizeImage): Preserve is_grayscale flag.</li>
+<li>magick/decorate.c (FrameImage): Evaluate is_grayscale status.
+(RaiseImage): Preserve is_grayscale.</li>
+<li>magick/shear.c (IntegralRotateImage): Preserve is_grayscale.
+flag.
+(XShearImage): Evaluate is_grayscale status.
+(YShearImage): Evaluate is_grayscale status.</li>
+<li>magick/transform.c (ChopImage): Preserve is_grayscale flag.
+(CropImage): Preserve is_grayscale flag.
+(FlipImage): Preserve is_grayscale flag.
+(FlopImage): Preserve is_grayscale flag.
+(RollImage): Preserve is_grayscale flag.</li>
+<li>magick/effect.c (AddNoiseImage): If image colorspace is
+GRAYColorspace, then add intensity noise, and transfer
+image is_grayscale flag to output image.
+(BlurImage): Preserve is_grayscale flag.
+(DespeckleImage): Preserve is_grayscale flag.
+(EdgeImage): Preserve is_grayscale flag.
+(EmbossImage): Preserve is_grayscale flag.
+(GaussianBlurImage): Preserve is_grayscale flag.
+(MotionBlurImage): Preserve is_grayscale flag.
+(ShadeImage): Preserve is_grayscale flag.
+(SharpenImage): Preserve is_grayscale flag.
+(UnsharpMaskImage): Preserve is_grayscale flag.</li>
+<li>magick/quantize.c (QuantizeImage): Pre-reduce gray images
+to PseudoClass in order to quickly determine the number of
+colors, and provide the expected PseudoClass output. Also
+skip slow color quantization if there are already fewer
+colors than requested.</li>
+<li>magick/image.c (GrayscalePseudoClassImage): New function
+to quickly reduce an image to PseudoClass grayscale. This
+is a fast way to determine the number of intensities in a
+grayscale image. Either a compact sorted colormap or a faster,
+contiguous linear colormap is created, depending on the
+optimize_colormap flag. If the image is already PseudoClass,
+and the optimize_colormap flag is True, then the existing
+colormap is sorted and reduced.
+(SyncImage): Preserve is_grayscale flag.
+(ChannelImage): Result is grayscale.
+(CycleColormapImage): Preserve is_grayscale and is_monochrome flags.
+(SetImage): Evaluate is_grayscale flag.
+(SetImageDepth): Preserve is_grayscale flag.
+(SetImageOpacity): Preserve is_grayscale flag.
+(SortColormapByIntensity): Preserve is_grayscale flag.
+(TransformRGBImage): Evaluate is_grayscale flag.</li>
+</ul>
+</blockquote>
+<p>2003-02-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resize.c (SampleImage): Preserve grayscale and
+monochrome flags.</li>
+<li>magick/quantize.c (AssignImageColors): Set image monochrome
+flag to True when quantizing to two colors in GrayColorspace.</li>
+<li>magick/effect.c (SpreadImage): Preserve grayscale and
+monochrome flags.
+(AdaptiveThresholdImage): Short-circuit algorithm if image
+flags indicate it is already monochrome. Set monochrome and
+grayscale flags once algorithm completes.
+(ThresholdImage): Short-circuit algorithm if image
+flags indicate it is already monochrome. Set monochrome and
+grayscale flags once algorithm completes.
+(ChannelThresholdImage): Short-circuit algorithm if image
+flags indicate it is already monochrome. Set monochrome and
+grayscale flags once algorithm completes.
+(ShadeImage): If grayscale shading is done, then set image
+grayscale flag to True.</li>
+<li>magick/color.c (IsGrayImage): If the image is_grayscale
+flag is True, then short-circuit the test. Update the flag
+if the test is performed.
+(IsMonochromeImage): If the image is_monochrome flag is True
+then short-circuit the test. Update the flag if the test is
+performed.</li>
+<li>magick/image.c (CloneImage): Copy image is_grayscale and
+is_monochrome members.</li>
+<li>magick/cache.c (SyncCacheNexus): If image pixels are updated
+then set image is_grayscale and is_monochrome members to False.
+Algorithms which want to preserve the values of these members
+should save their original values before processing the image
+and restore them when processing is complete, or transfer them
+from the input image to the output image.</li>
+<li>magick/constitute.c (ReadImage): If the returned image is
+PseudoClass then invoke IsGrayImage() and IsMonochromeImage()
+and cache the result in image is_grayscale and is_monochrome
+members for later use.</li>
+<li>magick/image.h (Image): Added is_grayscale and is_monochrome
+members to remember if image is grayscale or monochrome.</li>
+</ul>
+</blockquote>
+<p>2003-02-14 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/archives.html: commented out sites not mirroring GM yet.
+Changed "ftp.simplesystems.org" to "ftp.graphicsmagick.org".
+Added link to graphicsmagick.sf.net.</li>
+</ul>
+</blockquote>
+<p>2003-02-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (FormatString): Check for the availability of
+vsprintf.</li>
+<li>magick/log.c (LogMagickEvent): Check for the availability of
+vsprintf.</li>
+<li>configure.ac: Test for vsprintf.</li>
+</ul>
+</blockquote>
+<p>2003-02-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/annotate.c (RenderFreetype): Used smarter code to prepare
+the beta argument for AlphaComposite.</li>
+</ul>
+</blockquote>
+<p>2003-02-12 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/logo.c: updated logo.c to produce the GraphicsMagick logo.</li>
+</ul>
+</blockquote>
+<p>2003-02-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>INSTALL-unix.txt: Document that default quantum depth is now 8.</li>
+<li>VisualMagick/magick/magick_config.h.in: Default quantum depth is now 8.</li>
+<li>configure.ac: Default quantum depth is now 8.</li>
+<li>tests/Makefile.am: Test format types that require a size
+seperately since always specifying the size caused some formats
+(e.g. PCD) to improperly fail.</li>
+</ul>
+</blockquote>
+<p>2003-02-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/NEWS.html: New HTML file for project news.</li>
+<li>scripts/txt2html: New script for formatting text into HTML.</li>
+<li>Makefile.am: Automated the generation of www/Changelog.html and
+www/NEWS.html.</li>
+<li>coders/xpm.c (WritePICONImage): Close blob using correct image.</li>
+<li>tests/Makefile.am (CHECK_SIZED_FILES): Added files to tests
+subdirectory so that tests don't need to use files from
+PerlMagick.</li>
+<li>magick/image.c (TransformColorspace): New function to
+simplify/centralize colorspace transform requests. Replaced calls
+to RGBTransformImage and TransformRGBImage throughout the code
+with calls to TransformColorspace.</li>
+<li>IMDisplay: Disable save function since it is not implemented yet.</li>
+</ul>
+</blockquote>
+<p>2003-02-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/Magick.xs (SetAttribute): Support changing back to
+RGB or Transparent colorspace.</li>
+</ul>
+</blockquote>
+<p>2003-02-10 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Brought MNG handling of final delay into compliance with MNG spec.</li>
+</ul>
+</blockquote>
+<p>2003-02-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (WriteBMPImage): Added support for
+bits_per_pixel==4.
+(WriteBMPImage): Convert PseudoClass images with more than 256
+colors to DirectClass.
+(WriteBMPImage): Do not require 2-color images to pass the
+IsMonochromeImage() test before writing them as one-bit-per-pixel
+BMPs. Decided to allow this after four readers (including Windows
+XP) displayed the image using the proper colormap.
+(WriteBMPImage): BMP2 encoder was writing colormap using wrong format.</li>
+<li>images: Updated logo images to GraphicsMagick</li>
+<li>Added PDF Sages to web page as a sponsor.</li>
+</ul>
+</blockquote>
+<p>2003-02-08 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/GraphicsMagick.html: add "gm " prefix to examples.</li>
+</ul>
+</blockquote>
+<p>2003-02-07 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>index.html: Update to distinguish between ImageMagick and
+GraphicsMagick, and to explain "gm" prefix of commandline utilities.</li>
+</ul>
+</blockquote>
+<p>2003-02-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_feature.c (CropImageToHBITMAP): Remove useless
+autocrop support which was transferred from CropImage when
+creating CropImageToHBITMAP.</li>
+</ul>
+</blockquote>
+<p>2003-02-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (ReadMIFFImage): RLE packet size was not
+calculated correctly, causing RLE-compressed MIFF images with
+depth>8 to not be read.</li>
+</ul>
+</blockquote>
+<p>2003-02-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/paint.c (ColorFloodfillImage): Transfered fix from
+ImageMagick for the problem that floodfill using a tiled image
+failed if the target color happened to match the current fill
+color.</li>
+</ul>
+</blockquote>
+<p>2003-02-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Fixed preview error message.</li>
+<li>coders/preview.c: Previous update had broken noiseimage demo.
+Also some cleanups.</li>
+<li>magick/display.c (XMagickCommand): No longer uses
+MogrifyImage.</li>
+<li>coders/preview.c (WritePreviewImage): Re-wrote so that
+MogrifyImage is no longer used. Resize image outside of the loop
+to improve performance.</li>
+</ul>
+</blockquote>
+<p>2003-02-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (ShadeImage): Use PixelIntensityToDouble macro.</li>
+<li>magick/image.h (PixelIntensityToDouble): Added
+PixelIntensityToDouble macro to handle the case where pixel
+intensity is used for floating arithmetic.</li>
+</ul>
+</blockquote>
+<p>2003-01-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am: Distribute files ChangeLog, INSTALL-mac.txt,
+INSTALL-unix.txt, INSTALL-vms.txt INSTALL-windows.txt, and NEWS.</li>
+</ul>
+</blockquote>
+<p>2003-01-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (SVGStartElement): Applied fix from ImageMagick to
+compute SVG +> MVG viewbox correctly.</li>
+<li>magick/image.c (CloneImage): Applied fix from ImageMagick which
+is purported to solve the problem that "negative (x,y) page offsets
+did not clone properly".</li>
+<li>magick/gem.c (TransformHWB): Replace implementation with
+ImageMagick's new version which is supposed to fix a rounding
+error problem. Hard to say since implementation is totally
+different.</li>
+<li>coders/msl.c (MSLStartElement): Applied fix for missing break
+from ImageMagick.</li>
+<li>magick/integral_types.h: New header to include the integral
+types typedefs. Needed new header in order to include in both
+studio.h and api.h at the right point.</li>
+<li>magick/studio.h: Move nt_feature.h inclusion to the few modules
+which actually use functions from it.</li>
+<li>magick/api.h: Added typedefs gm_int16_t, gm_uint16_t,
+gm_int32_t, gm_uint32_t, gm_int64_t, gm_uint64_t to support
+specifically sized types.</li>
+<li>configure.ac: Test for size of <cite>short</cite>, <cite>unsigned short</cite>, <cite>int</cite>,
+<cite>unsigned int</cite>, <cite>long</cite>, <cite>unsigned long</cite>, <cite>long long</cite>, <cite>unsigned
+long long</cite> assigning the result to the defines SIZEOF_SHORT,
+SIZEOF_UNSIGNED_SHORT, SIZEOF_INT, SIZEOF_UNSIGNED_INT,
+SIZEOF_LONG, SIZEOF_UNSIGNED_LONG, SIZEOF_LONG_LONG, and
+SIZEOF_UNSIGNED_LONG_LONG respectively.</li>
+</ul>
+</blockquote>
+<p>2003-01-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/fx.c (OilPaintImage): Compute histogram using 8-bit quantums
+for more sensible performance with Q:16 and Q:32 builds.</li>
+<li>magick/image.h (PixelIntensityToQuantum): Compute using integral
+arithmetic for Q:8 and Q:16. Much faster than floating point!
+(PixelIntensity): Compute using integral arithmetic for Q:8 and
+Q:16. Much faster than floating point!</li>
+</ul>
+</blockquote>
+<p>2003-01-28 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed bug in png.c, introduced in IM-5.5.1. A pair of
+{ } brackets were omitted when logging was added, which lets
+old versions of libpng write a zero-length iCCP chunk.</li>
+</ul>
+</blockquote>
+<p>2003-01-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (DespeckleImage): Put loops inside of case
+statement rather than outside.
+(SpreadImage): Improved algorithm so that -spread is 12X faster.</li>
+<li>magick/nt_feature.c (CropImageToHBITMAP): New function to return
+a region of the image as a HBITMAP.</li>
+</ul>
+</blockquote>
+<p>2003-01-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fixed Copyright statement on all source files.</li>
+<li>magick/effect.c (ThresholdImage): Optimized loop.</li>
+<li>coders/tiff.c (ReadTIFFImage): Read bits more efficiently for
+bits_per_sample=1.</li>
+<li>magick/command.c (MogrifyImage): Set image->dither to
+image_info->dither prior to invoking SetImageType.</li>
+<li>magick/constitute.c (WriteImage): Set image->dither to
+image_info->dither.</li>
+<li>magick/image.c (SetImageType): For case BilevelType, normalize
+image, and threshold 50% if dithering is disabled. This is at
+least 10X faster than quantizing with dither.
+(AllocateImage): Initialize image->dither.
+(CloneImage): Copy image->dither.</li>
+<li>magick/image.h: Added dither member to Image.</li>
+</ul>
+</blockquote>
+<p>2003-01-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/tiff/read.t: Added a test for reading 16-bit TIFF
+images.</li>
+<li>coders/tiff.c (ReadTIFFImage): Support reading 16-bit TIFF images
+with a Q:8 build.</li>
+<li>magick/color.c (ConstrainColormapIndex): Use VerifyColormapIndex.</li>
+<li>coders/pnm.c (ReadPNMImage): Use VerifyColormapIndex.</li>
+<li>coders/gif.c (DecodeImage): Use VerifyColormapIndex.</li>
+<li>magick/image.c (SyncImage): Use VerifyColormapIndex.</li>
+</ul>
+</blockquote>
+<p>2003-01-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (ReadBlobByte): Use getc when reading from FILE stream.</li>
+<li>configure.ac: Added tests for getc_unlocked and putc_unlocked.</li>
+<li>magick/blob.c (ReadBlobByte): Optimized reading from BlobStream.
+(ReadBlobLSBLong): Optimized reading from BlobStream.
+(ReadBlobLSBShort): Optimized reading from BlobStream.
+(ReadBlobMSBLong): Optimized reading from BlobStream.
+(ReadBlobMSBShort): Optimized reading from BlobStream.
+(ReadBlobStream): New static inline function to read from BlobStream.
+(WriteBlob): "Manually" copy data rather than using memcpy() for
+very small copy sizes.
+(WriteBlobByte): Use putc() when writing to a FILE stream.</li>
+</ul>
+</blockquote>
+<p>2003-01-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/gem.c (Hull): Count down loops. Might help.
+(InterpolateColor): Pre-compute common sub-expressions to improve
+performance.</li>
+<li>magick/segment.c (Classify): Implemented idea from Glenn
+Randers-Pehrson to avoid use of pow() when WeightingExponent is
+2.0 (which it is). This makes image segmentation much faster
+(e.g. 8X).</li>
+<li>magick/annotate.c (RenderFreetype): For images with
+matte==False, simply set the opacity of the pixel to be updated to
+OpaqueOpacity before alpha-compositing the pixel rather than using
+SetImageType(TrueColorMatteType) to initialize the opacity of the
+entire image. This is much faster and scales to large images.</li>
+<li>magick/image.c (SetImageType): Eliminated unnecessary conditionals.</li>
+</ul>
+</blockquote>
+<p>2003-01-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (InsertMedianList): Assign computed quantum
+indexes to variables to avoid extra computations for
+QuantumDepth>8.</li>
+<li>magick/composite.c (AlphaComposite): Pre-compute common
+expressions in order to improve performance.</li>
+<li>magick/fx.c (ConvolveImage): Optimized loops.</li>
+<li>magick/paint.c (TransparentImage): Optimize for case fuzz == 0.</li>
+<li>magick/color.c (FuzzyColorMatch): Minor cleanup and optimization.</li>
+<li>magick/locale.c: Added error messages for convolve option.</li>
+<li>coders/locale.c: Picked up recent changes from ImageMagick version.</li>
+<li>locale/C.mgk: Added error messages for convolve option.</li>
+<li>magick/command.c (MogrifyImage): Added support for convolve option.</li>
+<li>coders/xcf.c (ReadXCFImage): Recognize latest GIMP XCF header.</li>
+<li>coders/dcm.c: Transferred the apparent salient fixes from
+ImageMagick for a bug described as "Some DCM grayscale images did
+not display correctly.".</li>
+<li>coders/miff.c (ReadMIFFImage): Reading RLE-compressed MIFFs is
+now about 4X faster.</li>
+<li>magick/blob.c (OpenBlob): Use setvbuf() to increase stdio buffer
+size to 16K. Solaris default is 1K. This should minimize system
+call overhead for accessing large files.
+(ReadBlob): "Manually" copy data rather than using memcpy() for
+very small copy sizes.
+(ReadBlobZC): New method, similar to ReadBlob, but provides the
+opportunity for zero copy on read.</li>
+<li>magick/constitute.c (PushImagePixels): CMYKA case for
+image->depth=16 was comparing with 8 instead.</li>
+</ul>
+</blockquote>
+<p>2003-01-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (GetMagickGeometry): Removed support for <cite>~</cite>
+and disabled centering code until we learn where it should go (if
+anywhere).</li>
+<li>magick/command.c : Add HWB colorspace transform support.</li>
+<li>PerlMagick/Magick.xs: Add HWB colorspace transform support.</li>
+<li>magick/image.c (RGBTransformImage): Add HWB colorspace transform
+support.
+(TransformRGBImage): Add HWB colorspace transform support.</li>
+</ul>
+</blockquote>
+<p>2003-01-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (GetMagickGeometry): Add support for new new
+<cite>~</cite> geometry string flag. This also fixes a montage bug in which
+thumbnails were mis-sized if the geometry specification incuded x
+or y offsets.</li>
+<li>magick/image.h (GeometryFlags): Added CenterValue enumeration to
+correspond with new <cite>~</cite> geometry string flag. Taking
+ImageMagick's lead on this.</li>
+<li>magick/render.c: Transferred fixes from ImageMagick for an
+artifact which occured at the 360 degree point when rendering
+circles, ellipses, and arcs. Bug reported by <a class="reference external" href="mailto:io219%40attbi.com">io219<span>@</span>attbi<span>.</span>com</a>.</li>
+<li>PerlMagick/Magick.xs: Add HSL colorspace transform support.</li>
+<li>magick/command.c: Add HSL colorspace transform support.</li>
+<li>magick/image.c (RGBTransformImage): Add HSL colorspace transform
+support.
+(TransformRGBImage): Add HSL colorspace transform support.</li>
+</ul>
+</blockquote>
+<p>2003-01-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Updated copyright statement on source files to reflect
+the GraphicsMagick Group rather than ImageMagick Studio.</li>
+<li>magick/constitute.c (ConstituteImage): Simplified the switch
+statement for inner loops by creating a simplified map in advance.
+(DispatchImage): Simplified the switch statement for inner loops
+by creating a simplified map in advance.</li>
+<li>magick/compress.c (HuffmanEncodeImage): Test and cache the
+return value of LocaleCompare(image_info->magick,"FAX") so that
+LocaleCompare is not executed repeatedly in the output loop.</li>
+<li>magick/color.c (IsGrayImage): Optimized loops.
+(IsMonochromeImage): Optimized loops.
+(IsOpaqueImage): Optimized loop.</li>
+<li>magick/delegate.c (InvokePostscriptDelegate): When using the
+Ghostscript library, identify the library as "[ghostscript library]"
+rather then "gsdll32" so that -verbose prints something useful for
+both Windows and Unix.</li>
+</ul>
+</blockquote>
+<p>2003-01-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS: New file.</li>
+<li>magick/montage.c (MontageImages): Use ThumbnailImage() rather
+than ZoomImage() to resize montage thumbnails provided that the
+user has not specified an image filter, and the montage thumbnail
+is smaller than the image. This should provide faster montages
+for large images.</li>
+<li>magick/resize.c (ResizeImage): Added logging support.
+(MagnifyImage): Added logging support.
+(MinifyImage): Added logging support.
+(SampleImage): Added logging support.
+(ScaleImage): Added logging support.</li>
+</ul>
+</blockquote>
+<p>2003-01-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/transform.c (ProfileImage): Duplicate ImageMagick changes
+to image colorspace handling. Avoids using
+SetImageType(image,ColorSeparationMatteType).</li>
+<li>magick/fx.c (OilPaintImage): Replaced with ImageMagick version
+since ImageMagick version has been updated to not penalize Q:8.
+Optimized loops.</li>
+<li>magick/display.c (XDisplayImage): Display to 100% of
+the screen size rather than 90% of the screen size.</li>
+<li>magick/enhance.c (ModulateImage): Ensure that arguments
+are always positive values. Optimized loops.
+(ContrastImage): Optimized loops.</li>
+<li>magick/gem.c (HSLTransform): Optimized performance by
+eliminating redundant intermediate calculations. This
+makes <cite>gm convert -contrast</cite> 21% faster.
+(HSLTransform): Set to inline within the gem.c module.
+(TransformHSL): Set to inline within the gem.c module.
+(Contrast): Moved to bottom of gem.c module so HSLTransform
+and TransformHSL can be inlined. Simplified conditionals.
+(Modulate): Moved to bottom of gem.c module so HSLTransform
+and TransformHSL can be inlined. No longer check/correct
+negative values.</li>
+</ul>
+</blockquote>
+<p>2003-01-14 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c</li>
+<li>magick/blob.h
+Added new stream type flag and support to match with the one
+added to ImageMagick.</li>
+</ul>
+</blockquote>
+<p>2003-01-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (RGBTransformImage): Fixed bug (thanks to
+Bill for finding it) and finished optimizing XYZ table
+creation.
+(AverageImages): Optimized loops.
+(ChannelImage): Optimized loops. 3X speed-up for SPARC.</li>
+<li>magick/enhance.c: Optimized NegateImage().</li>
+</ul>
+</blockquote>
+<p>2003-01-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Set some common API structures to 0xbf prior to deallocation
+to make accidental continued use more obvious.</li>
+</ul>
+</blockquote>
+<p>2003-01-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c: Minor optimizations to PopImagePixels()</li>
+<li>coders/dpx.c: Reading the DPX header was off by 4 bytes.</li>
+<li>coders/(art.c,avs.c,bmp.c,cmyk.c,dcm.c,dib.c,dpx.c,fax.c,
+fits.c,gray.c,icon.c,map.c,miff.c,mono.c,mpc.c,mtv.c,otb.c,
+pcx.c,pdb.c,pict.c,pix.c,pnm.c,pwp.c,rgb.c,rla.c,rle.c,sct.c,
+sgi.c,sun.c,tga.c,tim.c,uyvy.c,vicar.c,viff.c,wbmp.c,xwd.c,
+yuv.c): Ensure that blob is closed on unexpected EOF.</li>
+<li>magick/image.c: Optimized SetImageOpacity().
+Optimized SetImage() for intializing non-opaque images. The
+opacity channel was being intialized twice.</li>
+</ul>
+</blockquote>
+<p>2003-01-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c: Log entry and exit from coders so that
+coders don't need to.</li>
+<li>Finished re-writing PushImagePixels() using coding practices
+which may result in faster code.</li>
+<li>PerlMagick is changed from Image::Magick to Graphics::Magick
+in order to avoid conflicts with the ImageMagick version. This
+means that any Perl scripts based on the ImageMagick version need
+to do a global replace of Image::Magick to Graphics::Magick.</li>
+<li>PerlMagick/reference/filter/Raise.miff: Replaced with new version.</li>
+</ul>
+</blockquote>
+<p>2003-01-08 William Radcliffe <<a class="reference external" href="mailto:billr%40corbis.com">billr<span>@</span>corbis<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_feature.c
+Make ImageToHBITMAP function in nt_feature.c compile under Visual
+C++ again.</li>
+</ul>
+</blockquote>
+<p>2003-01-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/delegates.mgk.in: Fix cgm entry. How did it become so
+terribly broken?</li>
+<li>coders/dps.c: Adding logging support.</li>
+<li>PerlMagick/t/read.t: Changed file read tests to use image
+compares with a reference image rather than comparing with a
+signature.</li>
+<li>PerlMagick/t/wmf/read.t: Ditto.
+magick/shear.c: Fixed documentation for RotateImage.</li>
+</ul>
+</blockquote>
+<p>2003-01-08 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c, magick/magick.h: Add "note" member of magick_info.</li>
+<li>coders/art.c, coders/fax.c, coders/dcm.c, coders/png.c: add notes
+to format registrations.</li>
+<li>fx.c: changed default "colorize" behaviour to preserve image opacity.</li>
+</ul>
+</blockquote>
+<p>2003-01-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/svg.c: Allow the user to specify the initial background
+color via the -background option. This is only useful if the SVG
+doesn't draw its own background rectangle.</li>
+</ul>
+</blockquote>
+<p>2003-01-06 Albert Chin-A-Young <<a class="reference external" href="mailto:china%40thewrittenword.com">china<span>@</span>thewrittenword<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ltdl/Makefile.am, ltdl/ltdl.c: Fix compilation problem
+under Tru64 UNIX 5.1. The GraphicsMagick random.h was being
+included when the system random.h was needed.</li>
+<li>configure.ac: Improve robustness of POSIX thread API tests
+by including pthread.h when building the test program.</li>
+</ul>
+</blockquote>
+<p>2003-01-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c: In IsImagesEqual() only use type <cite>long double</cite>
+for error summation if QuantumDepth > 16 and <cite>long double</cite> has
+more range than <cite>double</cite>.</li>
+<li>magick/quantize.c: In QuantizeImage() only use type <cite>long
+double</cite> for error summation if QuantumDepth > 16 and <cite>long
+double</cite> has more range than <cite>double</cite>.</li>
+<li>Replaced redundant code with macros.</li>
+<li>Optimize mapping to monochrome.</li>
+<li>utilities/conjure.c: Had missed removing this file earlier.</li>
+</ul>
+</blockquote>
+<p>2003-01-04 Derry Bryson <<a class="reference external" href="mailto:dbryson%40techass.com">dbryson<span>@</span>techass<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/decorate.c: Use the ShadowFactor rather than ShadowModule
+define in RaiseImage() (bug-fix).</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2004-12-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (DescribeImage): Add normalized channel
+statistics to output.</li>
+<li>NEWS: Updated with changes since July.</li>
+<li>magick/constitute.c (ImportImagePixelArea): For GrayQuantum,
+GrayInvertedQuantum, GrayAlphaQuantum, and
+GrayInvertedAlphaQuantum, observe image storage_class so that a
+gray DirectClass image may be created.</li>
+<li>coders/tiff.c (ReadTIFFImage): Fix overflow when computing
+colormap size for bits-per-sample of 32.
+(WriteTIFFImage): Support writing 32-bit RGB(A) for
+QuantumDepth=32 build.
+(ReadTIFFImage): Support reading 32-bit RGB(A) for QuantumDepth=32
+build. Support reading 32-bit grayscale without any quality loss
+for QuantumDepth=32 build.</li>
+</ul>
+</blockquote>
+<p>2004-12-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): TrueColor 16-bits/sample RGB
+images were being written incorrectly on little-endian CPUs.
+Added byte swapping to fix this problem.</li>
+</ul>
+</blockquote>
+<p>2004-12-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/operator.c: New file for quantum operator implementation.
+(QuantumOperatorImage): Moved from image.c.
+(QuantumOperatorRegionImage): Moved from from image.c.</li>
+</ul>
+</blockquote>
+<p>2004-12-22 Ralf Wildenhues <<a class="reference external" href="mailto:Ralf.Wildenhues%40gmx.de">Ralf<span>.</span>Wildenhues<span>@</span>gmx<span>.</span>de</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/Makefile.am (MAGICK_BASE_SRCS): Remove mention of
+non-existent mmath.h.</li>
+<li>configure.ac: AC_LIBTOOL_SETUP is an internal macro and must not
+be used externally (will be pulled in automatically).</li>
+<li>PerlMagick/Makefile.am: Missing file needed to be committed to CVS.</li>
+<li>tests/Makefile.am (TESTS_TIFF_XFAIL_TESTS): EPT and PTIF tests
+are expected to fail if libtiff is missing.</li>
+</ul>
+</blockquote>
+<p>2004-12-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>TODO.txt: Organized todo list for 1.2 release.</li>
+</ul>
+</blockquote>
+<p>2004-12-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (WriteBMPImage): Handle the case where the image
+has an over-sized colormap. Was writing on unallocated heap memory.</li>
+<li>coders/dib.c (WriteDIBImage): Handle the case where the image
+has an over-sized colormap. Was writing on unallocated heap memory.</li>
+</ul>
+</blockquote>
+<p>2004-12-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/gem.c (Modulate): Hue argument now represents a rotation
+from -180 degrees to +180 degrees expressed as an argument of 0 to
+2.0 (1.0 for no change). Note that this change also effects the
+-modulate argument and the Magick++ modulate method(). This change
+is made because the previous hue adjustment strategy only
+succeeded in corrupting the image.</li>
+</ul>
+</blockquote>
+<p>2004-12-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c (opendir): Ensure that data may not overwrite
+the stack.
+(readdir): Ensure that data may not overwrite the stack.</li>
+<li>magick/blob.c (ImageToBlob): Ensure that image->logging is
+set prior to encoding image.</li>
+<li>magick/constitute.c (WriteImage): Ensure that image->logging is
+set prior to encoding image.</li>
+</ul>
+</blockquote>
+<p>2004-11-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>rungm.sh.in: Compute final variable definitions from within
+configure in order to improve MinGW test execution times.</li>
+</ul>
+</blockquote>
+<p>2004-11-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/gif.c: Fix two error-path memory leaks which were noticed
+by Glenn Randers-Pehrson.</li>
+</ul>
+</blockquote>
+<p>2004-11-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (UnregisterPNGImage): Eliminate Warning: module
+registration for "JNG" from module "PNG" still present!</li>
+</ul>
+</blockquote>
+<p>2004-11-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (DispatchImage): Fix documentation error
+regarding return status.</li>
+</ul>
+</blockquote>
+<p>2004-11-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.h: Only define HAVE_GLOBALMEMORYSTATUSEX for MSVC
+7.0 and later.</li>
+</ul>
+</blockquote>
+<p>2004-11-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Ensure that words in the
+scanline are converted to little-endian format on little-endian
+CPUs.</li>
+</ul>
+</blockquote>
+<p>2004-11-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (MagickStrlCat): New function which is
+equivalent to to OpenBSD's strlcat() function. Concatenates one
+string onto another within a fixed size buffer while ensuring null
+termination.
+(MagickStrlCpy): New function which is equivalent to OpenBSD's
+strlcpy() function. Copies a string into a fixed size buffer
+while ensuring null termination.</li>
+<li>coders/gif.c (DecodeImage): Improve handling of corrupt GIF
+files. Resolves SourceForge bug #1042904. Also, eliminate a
+potential memory leak.</li>
+<li>magick/constitute.c (WriteImages): ImageInfo argument is now a
+const pointer.</li>
+</ul>
+</blockquote>
+<p>2004-10-26 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40glennrp.com">glennrp<span>@</span>glennrp<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (TracePath): Applied bugfix from Cristy.</li>
+</ul>
+</blockquote>
+<p>2004-10-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resource.c (InitializeMagickResources): Use
+GlobalMemoryStatusEx if it is available.</li>
+<li>magick/nt_base.c (lt_dlopen): Handle errors while loading
+modules rather than allow Windows to display a GUI dialog box.
+(NTKernelAPISupported): New function to support testing to see if
+a Windows kernel API is supported.</li>
+<li>magick/constitute.c (ExportImagePixelArea): Add special-case for
+bilevel gray image in order to restore performance.
+(ImportImagePixelArea): Add special-case for bilevel gray image in
+order to restore performance.</li>
+<li>coders/jpeg.c (ReadJPEGImage): Fix GCC warning about variable
+being clobbered by longjmp.</li>
+<li>Re-port build to MinGW. Modules build passes all tests.</li>
+<li>Skip build and install of modules if a key library is not available.</li>
+<li>Partial recode of metadata handling to use Get/Set profile
+functions. Big job!</li>
+<li>GCC warnings reduction.</li>
+<li>Remove MVG detection from magic.mgk due to security risk.</li>
+</ul>
+</blockquote>
+<p>2004-09-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Properly detect and handle
+errors reported by libtiff so that failure is reported rather than
+writing a corrupted output file.
+(WriteNewsProfile): Re-write so implementation is easier to
+understand.</li>
+</ul>
+</blockquote>
+<p>2004-09-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c: Don't use deprecated tiff.h _SUPPORT defines.
+Support retrieving and saving XMP profile. Use profile set/get
+methods in implementation.</li>
+<li>coders/mat.c,coders/topol.c (ReadBlobWordLSB,ReadBlobDoublesLSB):
+Use better variable name than <cite>I</cite> for image.</li>
+</ul>
+</blockquote>
+<p>2004-09-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (WriteMIFFImage): Ensure that MIFF files are never
+written with bogus compression values.</li>
+<li>magick/image.h: Protected/hid constants which only exist to
+support the library implementation.</li>
+<li>tests/Makefile.am (TESTS_X11_XFAIL_TESTS): Fixed syntax error.</li>
+<li>Makefile.am: Use one Makefile to rule them all as described in
+Peter Miller's excellent paper, Recursive Make Considered Harmful,
+"<a class="reference external" href="http://www.pcug.org.au/~millerp/rmch/recu-make-cons-harm.html">http://www.pcug.org.au/~millerp/rmch/recu-make-cons-harm.html</a>".
+Some glitches may remain.</li>
+<li>coders/tiff.c (TIFFErrors): Prevent possible stack overflow on
+error.
+(TIFFWarnings): Prevent possible stack overflow on error.</li>
+<li>magick/constitute.c (ImportImagePixelArea): For RGBQuantum
+initialize the opacity channel since it is easier than altering
+all code to properly access it.</li>
+</ul>
+</blockquote>
+<p>2004-09-02 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40glennrp.com">glennrp<span>@</span>glennrp<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/transform.c: Bugfix from Cristy in CoalesceImages().</li>
+</ul>
+</blockquote>
+<p>2004-08-26 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40glennrp.com">glennrp<span>@</span>glennrp<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Avoid error introduced in libpng-1.2.6 that causes the encoder
+to write out-of-spec zlib header bytes.</li>
+</ul>
+</blockquote>
+<p>2004-08-24 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40glennrp.com">glennrp<span>@</span>glennrp<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c is said to have a potential buffer overrun.
+Patch from Cristy applied (also to avi.c and dib.c).</li>
+</ul>
+</blockquote>
+<p>2004-08-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Use ExportImagePixelArea to
+write grayscale and colormapped output.</li>
+<li>magick/constitute.c (ImportImagePixelArea): Implemented support
+for GrayInvertedQuantum & GrayInvertedAlphaQuantum.
+(ExportImagePixelArea): Implemented support for
+GrayInvertedQuantum & GrayInvertedAlphaQuantum.</li>
+<li>magick/constitute.h (enum QuantumType): Added
+GrayInvertedQuantum & GrayInvertedAlphaQuantum to support
+min-is-white gray images.</li>
+</ul>
+</blockquote>
+<p>2004-08-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/tiff/write.t: Adjusted file naming.</li>
+<li>PerlMagick/t/tiff/read.t: Added more tests.</li>
+<li>coders/tiff.c (ReadTIFFImage): Use ImportImagePixelArea to read
+PseudoClass tiff.
+(WriteTIFFImage): Allow user to set the bits-per-sample define to
+any value in the range of 1 to 32.
+(ReadTIFFImage): Fix endian-reordering for DirectClass read and
+bits-per-sample values ranging 9-15.</li>
+<li>coders/rgb.c: Support reading & writing 32-bit depths for raw
+RGB images.</li>
+<li>coders/cmyk.c: Support reading & writing 32-bit depths for raw CMYK
+images.</li>
+<li>coders/gray.c: Support reading & writing 32-bit depths for raw gray
+images.</li>
+<li>magick/deprecate.c (PopImagePixels): Deprecated function.
+(PushImagePixels): Deprecated function.</li>
+<li>magick/constitute.c (ExportImagePixelArea): New function to
+export pixel region using specified QuantumType and
+bits-per-sample.
+(ImportImagePixelArea): New function to import pixel region using
+specified QuantumType and bits-per-sample.</li>
+</ul>
+</blockquote>
+<p>2004-08-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/cache.c (ClonePixelCache): It appeared that cloning a
+disk-based pixel cache was limited to the maximum value of
+size_t. This would result in a truncated cache. The offset type
+is changed from size_t to magick_off_t in order to avoid this.</li>
+<li>configure.ac: Check to see if the <cite>char</cite> type is unsigned,
+mostly out of curiosity since the code does not currently make use
+of the result.</li>
+<li>Fixed many compilation warnings when the compiler warning level
+is set as high as possible.</li>
+<li>configure.ac: Check /usr/share/ghostscript/fonts for Ghostscript Type1
+fonts.</li>
+</ul>
+</blockquote>
+<p>2004-08-13 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40glennrp.com">glennrp<span>@</span>glennrp<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tEXt and zTXt were inadvertently included in list of unused chunks.</li>
+</ul>
+</blockquote>
+<p>2004-08-09 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40glennrp.com">glennrp<span>@</span>glennrp<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>fix incorrect argument to png_set_keep_unknown_chunks().</li>
+</ul>
+</blockquote>
+<p>2004-08-07 David R. Linn <<a class="reference external" href="mailto:drl%40vuse.vanderbilt.edu">drl<span>@</span>vuse<span>.</span>vanderbilt<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/formats.html: Titles for JNG and MNG were reversed.</li>
+</ul>
+</blockquote>
+<p>2004-08-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/widget.c (XCommandWidget): Replace ImageMagick logo in
+display command menu with GraphicsMagick logo.</li>
+</ul>
+</blockquote>
+<p>2004-08-05 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40glennrp.com">glennrp<span>@</span>glennrp<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Fixes for CERT security alert TA04-217A described
+at "<a class="reference external" href="http://www.us-cert.gov/cas/techalerts/TA04-217A.html">http://www.us-cert.gov/cas/techalerts/TA04-217A.html</a>".</li>
+</ul>
+</blockquote>
+<p>2004-08-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.h (Image): Changed type of <cite>colors</cite> and <cite>depth</cite>
+members from type <cite>unsigned long</cite> to <cite>unsigned int</cite>. This change
+is made because on 64-bit CPUs, <cite>unsigned long</cite> is a 64-bit
+type. The depth member is often used in switch statements. It is
+not recommended to use 64-bit types in switch statements. The
+maximum number of colors in the colormap is limited to 64K so a
+64-bit type is not required.</li>
+</ul>
+</blockquote>
+<p>2004-08-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Restore previous 8/16
+bits-per-sample support code in order to regain lost performance.</li>
+</ul>
+</blockquote>
+<p>2004-07-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Support reading RGB/CMYK scanline
+oriented TIFF images with arbitrary depth.</li>
+</ul>
+</blockquote>
+<p>2004-07-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am: Update to Automake 1.9.</li>
+</ul>
+</blockquote>
+<p>2004-07-20 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li>BCBMagickmagickGM_magick.bpr: Updated to reflect changes since last update.</li>
+<li>BCBMagickmagicklibMagick.bpr: Updated to reflect changes since last update.</li>
+<li>BCBMagickbzlibGM_bzlib.bpr: Updated version number.</li>
+<li>BCBMagicklcmsBCB6GM_lcms.bpr: Updated version number.</li>
+<li>BCBMagickMagickpplibGM_magickpp.bpr: Updated version number.</li>
+<li>BCBMagickttfGM_ttf.bpr: Updated version number.</li>
+<li>BCBMagickzlibGM_zlib.bpr: Updated version number.</li>
+<li>BCBMagick now support full LZW encoding (read/write).</li>
+</ul>
+</blockquote>
+<p>2004-07-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tiff/libtiff/tif_lzw.c: Replace with version which supports LZW encoding.</li>
+<li>magick/channel.c: New source file.
+(ExportImageChannel): New function to export an image channel.
+(ImportImageChannel): New function to import an image channel.</li>
+</ul>
+</blockquote>
+<p>2004-07-20 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lcms/src/cmsio1.c: Test [testcms.c] related to lcms 1.13 fail
+with error #12288 when perform "Checking saved linearization
+devicelink". Fixed function __cmsSaveProfile(). "...malloc(0) is
+implementation dependent and may return non NULL pointer on some
+compilers, like VC++ and gcc. This is not the case of Borland C++
+Builder" - Thanks to Marti Maria that have supplied me this
+patched file: this will be part of the next lcms 1.14 which
+probabily will be released on summer's end.</li>
+</ul>
+</blockquote>
+<p>2004-07-20 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lcms/include/lcms.h: Modified to achieve BCBMagick DLL compilation.
+Included modifications was introduced in GM in 2004-01-16 and
+probabily lost with latest update of library.</li>
+</ul>
+</blockquote>
+<p>2004-07-20 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li><dl class="first docutils">
+<dt>BCBMagick: Updated lcms to version 1.13.</dt>
+<dd><ul class="first last">
+<li>Modified files: BCBMagickAllbcbMagick.mak; BCBMagicklcmsBCB6GM_lcms.bpr;
+BCBMagicklcmsBCB6lcms.bpg; BCBMagicklcmsBCB6lcms.bpr;
+BCBMagicklcmsBCB6testcms.bpr</li>
+<li>Deleted files: BCBMagicklcmsBCB6lcms.cpp; BCBMagicklcmsBCB6testcms.cpp</li>
+<li>Added file: BCBMagicklcmsBCB6lcms.bpf</li>
+</ul>
+</dd>
+</dl>
+</li>
+</ul>
+</blockquote>
+<p>2004-07-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc: Fix typo regarding -define tiff:samples-per-pixel.</li>
+<li>doc/GNUmakefile (utility-install): Utility HTML targets were not being installed.</li>
+</ul>
+</blockquote>
+<p>2004-07-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lcms: Updated to version 1.13.</li>
+</ul>
+</blockquote>
+<p>2004-07-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh (CVS_BRANCH_TAG): Record the CVS branch tag that
+source package is obtained from.</li>
+</ul>
+</blockquote>
+<p>2004-07-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Pass essential flags on down to subordinate
+configures when performing <cite>make distcheck</cite>. Support DESTDIR
+installs for PERL 5.8.1 and later, which support DESTDIR
+internally.</li>
+</ul>
+</blockquote>
+<p>2004-07-16 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li><dl class="first docutils">
+<dt>BCBMagickcoderslibCoders.bpr; BCBMagickmagickGM_magick.bpr: include</dt>
+<dd>file jbig.h could not be found during compilation. Solved.</dd>
+</dl>
+</li>
+</ul>
+</blockquote>
+<p>2004-07-15 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li>BCBMagickmagickmagick_config.h.: enabled LZW compression by default.</li>
+<li><dl class="first docutils">
+<dt>BCBMagick: included jbig delegate library.</dt>
+<dd><ul class="first last">
+<li>Modified these files into directory BCBMagick: AllbcbMagick.mak;
+AllGMlib.bpg; AllGMdll.bpg; coderslibCoders.bpr; magickGM_magick.bpr;
+utilitiesgm_lib.bpr; utilitiesgm_dll.bpr</li>
+<li>Added these files into new directory BCBMagickjbig: jbig.bpr;
+jbig.bpf; GM_jbig.bpr; GM_jbig.c; tstcodec.bpr</li>
+<li>Modified file jbigjbiglibjbig.h;</li>
+</ul>
+</dd>
+</dl>
+</li>
+<li>BCBMagickreadme.txt: updated documentation.</li>
+</ul>
+</blockquote>
+<p>2004-07-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyUsage): -ordered-dither help was
+formatted incorrectly.</li>
+<li>doc/options.imdoc: Improve formatting a bit for manual pages and
+fix some syntax errors.</li>
+</ul>
+</blockquote>
+<p>2004-07-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS: Updated to reflect changes since last update.</li>
+</ul>
+</blockquote>
+<p>2004-07-09 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (ReadBMPImage): Removed if-test on reading
+red_mask, green_mask, and blue_mask. These are only *valid*
+under certain conditions, but they are always present in the
+file.</li>
+</ul>
+</blockquote>
+<p>2004-07-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Enable LZW compression by default.</li>
+</ul>
+</blockquote>
+<p>2004-07-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (WriteJPEGImage): Don't enable Huffman compression
+for large images (> 16 Mpixels for the moment) in order to
+conserve memory. When Huffman compression is enabled the entire
+image is buffered in memory prior to encoding and writing
+anything. Huffman compression is a method of eliminating
+redundant data so when the Huffman compression is disabled, files
+sizes will be larger, but otherwise the image is the same.</li>
+<li>wand/magick_wand.c (MagickSetPassphrase): String was being
+copied to a null pointer. Now memory is allocated as required
+prior to a copy.
+Ensure that all unimplemented functions return a proper error
+report.</li>
+</ul>
+</blockquote>
+<p>2004-07-01 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li>BCBMagick: updated to GraphicsMagick v.1.2</li>
+<li>BCBMagickAll: project GMlib-1.1.bpr has been replaced with
+GMlib.bpr</li>
+<li>BCBMagickAll: project GMdll-1.1.bpr has been replaced with
+GMdll.bpr</li>
+<li>BCBMagickreadme.txt: updated documentation.</li>
+</ul>
+</blockquote>
+<p>2004-06-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImage): For -units, don't reset
+resolution if units are undefined. Report an error if the -units
+argument is not supported.</li>
+</ul>
+</blockquote>
+<p>2004-06-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImage): When setting image units, also
+adjust existing image x_resolution and y_resolution so that
+existing image resolution is not trashed.
+(MogrifyImage): When re-sampling an image, report an error if the
+image does not contain a valid resolution.</li>
+</ul>
+</blockquote>
+<p>2004-06-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pcx.c (WritePCXImage): Support writing large PCX files.
+(WritePCXImage): Ensure that UndefinedResolution is handled
+properly. Avoid round-off error for centimeter based resolution.</li>
+</ul>
+</blockquote>
+<p>2004-06-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Look for mozilla by default rather than netscape.</li>
+</ul>
+</blockquote>
+<p>2004-06-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/type.c (ReadTypeConfigureFile): Determine location of
+Ghostscript fonts only once in order to improve performance.</li>
+<li>magick/nt_base.c (NTGhostscriptFonts): Properly determine
+Ghostscript font location for Ghostscript 8.0 and later.</li>
+<li>GraphicsMagick.spec.in: Install *-config scripts with mode 755
+rather than default 644.</li>
+</ul>
+</blockquote>
+<p>2004-05-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/module.c (InitializeModuleSearchPath): Evaluate and cache
+module search path.
+(FindMagickModule): Use cached module search path.
+(OpenModules): Load all modules rather than just the modules in
+the directory where the LOGO module is found. Besides allowing
+user-provided modules in non-GraphicsMagick directories to be
+loaded, this allows the "moby" shared build to load additional
+modules via OpenModules.</li>
+</ul>
+</blockquote>
+<p>2004-05-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>utilities/Makefile.am (check): Add convert -list tests.</li>
+</ul>
+</blockquote>
+<p>2004-05-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Magick++ needs to be built as a static library
+under Cygwin and MinGW since C++ exceptions don't work otherwise.
+Be more assertive about that.</li>
+<li>magick/nt_base.h: Avoid conflict with ssize_t definition under
+MinGW.</li>
+</ul>
+</blockquote>
+<p>2004-05-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (DispatchImage): Support 8-bit output to
+common formats BGR, BGRO, BGRP, RGB, RGBO, and I as special cases
+in order to improve performance.
+(ConstituteImage): Support 8-bit input from common formats BGR,
+BGRO, BGRP, RGB, RGBO, and I as special cases in order to improve
+performance.</li>
+</ul>
+</blockquote>
+<p>2004-05-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ltmain.sh: Fix to allow exe wrapper to work under MinGW.</li>
+<li>wand/magick_compat.c (QueryMagickColor): Fixed DLL export.</li>
+<li>wand/magick_wand.c: Fixed some DLL exports (MagickExport->WandExport).</li>
+</ul>
+</blockquote>
+<p>2004-05-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageClipMask): Consistently report any
+exceptions to image->exception.</li>
+</ul>
+</blockquote>
+<p>2004-05-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am: Update to Automake 1.8.5.</li>
+<li>magick/image.h (ImageInfo): New <cite>progress</cite> monitor to indicate
+if progress monitor and busy cursor are enabled while displaying
+an image. Defaults to True.</li>
+<li>magick/display.c, magick/xwindow.c: Use +progress to disable
+progress monitor and busy cursor.</li>
+<li>magick/command.c (MogrifyUsage): Usage didn't list -operator.
+(ConvertUsage): Usage didn't list -operator.</li>
+</ul>
+</blockquote>
+<p>2004-05-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/compress.c (HuffmanDecodeImage): Properly return error status.
+(HuffmanEncode2Image): Properly return error status.</li>
+<li>magick/composite.c (CompositeImage): Properly return error status.</li>
+<li>magick/quantize.c (ClassifyImageColors): Properly return error status.
+(GetImageQuantizeError): Properly return error status.
+(OrderedDitherImage): Properly return error status.</li>
+<li>magick/profile.c (ProfileImage): Properly return error status.</li>
+<li>magick/paint.c (ColorFloodfillImage): Properly return error status.
+(MatteFloodfillImage): Properly return error status.
+(OpaqueImage): Properly return error status.
+(TransparentImage): Properly return error status.</li>
+<li>magick/enhance.c (ContrastImage): Properly return error status.
+(EqualizeImage): Properly return error status.
+(GammaImage): Properly return error status.
+(LevelImage): Properly return error status.
+(LevelImageChannel): Properly return error status.
+(ModulateImage): Properly return error status.
+(NegateImage): Properly return error status.
+(NormalizeImage): Properly return error status.</li>
+<li>magick/image.c (GetImageClipMask): New function to retrieve an
+associated clip-mask image.
+(SetImageClipMask): Clip-mask image parameter may be const since
+it is cloned prior to storage.
+(ChannelImage): Properly return error status.
+(GradientImage): Properly return error status.
+(RGBTransformImage): Properly return error status.
+(TransformRGBImage): Properly return error status.
+(SyncImage): Return an error status.</li>
+<li>magick/enhance.c (NegateImage): If image has a clip mask,
+then force image to DirectClass so clip mask takes effect.</li>
+</ul>
+</blockquote>
+<p>2004-05-15 Vladimir Lukianov <<a class="reference external" href="mailto:lvm%40integrum.ru">lvm<span>@</span>integrum<span>.</span>ru</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageOpacity): Ensure that image is
+DirectClass. If specified opacity is TransparentOpacity, then
+replace existing opacity with TransparentOpacity.</li>
+</ul>
+</blockquote>
+<p>2004-04-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Avoid duplicated test status messages for __func__
+tests. Avoid duplicated test status message for jpeg 6b test.</li>
+</ul>
+</blockquote>
+<p>2004-04-19 Patrick Welche <<a class="reference external" href="mailto:prlw1%40newn.cam.ac.uk">prlw1<span>@</span>newn<span>.</span>cam<span>.</span>ac<span>.</span>uk</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/header.html: HTML syntax fixes.</li>
+</ul>
+</blockquote>
+<p>2004-04-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>: Change web pages to a frames-based design.</li>
+</ul>
+</blockquote>
+<p>2004-04-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>utilities/Makefile.am (check): Change geometry arguments which
+were expressed as 0.0xVAL to avoid the problematic Linux scanf
+feature back to 0xVAL.</li>
+</ul>
+</blockquote>
+<p>2004-04-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/symbols.h (GetMagickDimension): Added GetMagickDimension.</li>
+</ul>
+</blockquote>
+<p>2004-04-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (GetMagickDimension): New function to replace
+occurances of scanf(geometry,"%lfx%lf",&w,&h) since Linux scanf()
+and strtod() misbehave for strings that start with "0x". The Linux
+versions always treat 0x as the start of a value expressed in hex
+and can't be forced to read the leading value as a double. This
+function has been applied globally to replace the problem scanf's.</li>
+<li>magick/version.h.in: Make it clear in the -version output that a
+mutitude of copyrights and licenses apply to this software.</li>
+<li>magick/utility.c (GetPathComponent): Avoid strncpy() of
+overlapping regions.</li>
+<li>magick/command.c (DisplayImageCommand): Eliminate double-free
+of resource_info->image_geometry.
+(DisplayImageCommand): <cite>display</cite> was improperly requiring at least
+one argument (bug was added yesterday).</li>
+</ul>
+</blockquote>
+<p>2004-04-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>utilities/gm.c (main): Default usage message wasn't right for
+aliased utility.</li>
+<li>configure.ac: Added the --enable-magick-compat option to install
+compatibility links to emulate ImageMagick commands.</li>
+<li>magick/command.c: Ensure that each sub-command responds to -help
+and -version appropriately.</li>
+<li>utilities/gm.c (main): Invoke appropriate sub-command if gm is
+executed under a traditional alternate name such as "convert". The
+user may create hard or symbolic links from <cite>gm</cite> to a traditional
+ImageMagick utility name (or just copy <cite>gm</cite> to the desired
+sub-command name) in order to be 100% command-line compatible with
+ImageMagick 5.5.2. This is necessary in order to work with
+existing software designed to execute ImageMagick utilities.</li>
+</ul>
+</blockquote>
+<p>2004-04-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/compress.c (Ascii85Tuple): Encoding bug is indeed fixed
+on DEC Alpha. Also warnings reduction with Digital Unix compiler.</li>
+</ul>
+</blockquote>
+<p>2004-04-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/compress.c (Ascii85Tuple): Add casts to reduce compiler
+warnings, and maybe even fix a bug.</li>
+<li>coders/pdf.c (ReadPDFImage): Double-check that Ghostscript
+produced an output file since sometimes it reports success after
+it has spewed an error message and has produced no output.</li>
+</ul>
+</blockquote>
+<p>2004-04-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/compress.c (HuffmanEncode2Image): Avoid out of bounds
+array access.</li>
+<li>magick/studio.h (_FILE_OFFSET_BITS): Fix _FILE_OFFSET_BITS
+#ifdef to avoid warnings when it is not defined.</li>
+</ul>
+</blockquote>
+<p>2004-04-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Fix minor shell syntax error (used ==).</li>
+</ul>
+</blockquote>
+<p>2004-04-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Merged in updates from 1.1 release branch.</li>
+<li>version.sh (PACKAGE_VERSION): Release version 1.1.
+(PACKAGE_VERSION): Next major release will be 1.1. Bump library
+versions since we anticipate adding interfaces.</li>
+<li>magick/studio.h: Disabled use of Windows message lookups
+entirely since this doesn't seem to work for programs. It
+probably only works for DLLs like ImageMagickObject.</li>
+<li>magick/delegate.c (ListDelegateInfo): Don't get stuck in a loop
+if fprintf() returns zero.</li>
+</ul>
+</blockquote>
+<p>2004-04-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/*/*.bat: Add .exe to exe file names in order to
+ensure that the executable is executed rather than something else
+(such as a batch script).</li>
+<li>magick/locale.c: Only use Windows resource message lookup for
+the DLL build since it doesn't seem to work for static
+executables.</li>
+<li>magick/utility.c (SetClientPath): Ensure that client path is
+null terminated.
+(SetClientFilename): Initialize default client filename to ""
+rather than "gm.exe" and ensure that filename is null terminated.
+(SetClientName): Ensure that client path is null terminated.</li>
+<li>magick/blob.c (GetConfigureBlob): Enable logging the load of
+log.mgk</li>
+<li>magick/log.c: Re-designed logging initialization in order to
+avoid the "chicken and the egg" snafu. This allows logging the
+initialization of the logging subsystem.</li>
+</ul>
+</blockquote>
+<p>2004-04-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/bin/log.mgk: Add comments to help document usage.</li>
+<li>config/log.mgk: Add comments to help document usage.</li>
+<li>magick/utility.c (IsAccessible): Use access() rather than stat().
+(IsAccessibleNoLogging): Use access() rather than stat().
+(IsDirectory): Implemented return status according to existing API
+documentation.
+(GetExecutionPathUsingName): Complete re-write in order to minimize
+path computation logic and fix failure with partial paths.</li>
+</ul>
+</blockquote>
+<p>2004-03-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc: Add "Color" to the arguments available for -list.</li>
+</ul>
+</blockquote>
+<p>2004-03-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh (PACKAGE_CHANGE_DATE): Updated version to 1.1Beta3</li>
+<li>magick/nt_base.c (NTSystemComman): Have not been successful with using
+MsgWaitForMultipleObjects() reliably, so back out usage of it for
+now.</li>
+<li>magick/fx.c (ConvolveImage): Support convolution in CMYK
+colorspace.</li>
+</ul>
+</blockquote>
+<p>2004-03-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh (PACKAGE_CHANGE_DATE): Update release to 1.1Beta2.</li>
+<li>magick/constitute.c (ReadImage): Ignore errors of type
+ConfigureError when loading modules so that error report can still
+report the familiar "No delegate for this image format" message
+while still being able to report problems with loading a module if
+it was found. This is a compromise which reports useless messages
+when the modules are not found at all, but I can't think of a way
+around it.</li>
+<li>magick/nt_base.c (NTSystemComman): Adjust
+MsgWaitForMultipleObjects() arguments to wait for object to be
+signaled only (FALSE) rather wait for object to be signaled as
+well as an input event received(TRUE). It seems that process
+status changes do not result in an input event, so the call was
+deadlocking.</li>
+<li>magick/constitute.c (ReadImage): If module loading reported an
+error, ReadImage immediately returned an error rather than trying
+to use a delegate defined by delegates.mgk.</li>
+</ul>
+</blockquote>
+<p>2004-03-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh: Updated version to 1.1Beta1</li>
+</ul>
+</blockquote>
+<p>2004-03-24 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li>BCBMagick/magick/libMagick.bpr: updated to latest source modifications.</li>
+<li>BCBMagick/magick/GM_Magick.bpr: updated to latest source modifications.</li>
+</ul>
+</blockquote>
+<p>2004-03-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/plasma.c (ReadPlasmaImage): srand() is already invoked by
+InitializeMagick() so don't call it here.</li>
+<li>configure.ac: Check for rand_r().</li>
+<li>magick/tempfile.c (ComposeTemporaryFileName): The full range of
+safe characters was not being used, thereby limiting the number of
+unique temporary file names available.</li>
+</ul>
+</blockquote>
+<p>2004-03-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (GetImageStatistics): New function to obtain
+image statistics (minimum, maximum, mean, variance, and standard
+deviation).
+(DescribeImage): Include image channel statistics in verbose
+output.</li>
+</ul>
+</blockquote>
+<p>2004-03-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (DispatchImage): Removed some unreachable
+code that was accidentially left in the switch statement.</li>
+<li>magick/pixel_iterator.c (PixelIterateDualRead): Extended so that
+the region in each image may use a different origin.
+(PixelIterateDualModify): Extended so that
+the region in each image may use a different origin.</li>
+<li>magick/composite.c (CompositeImage): Fix XorCompositeOp overflow
+condition which occured on non-Intel architectures.</li>
+</ul>
+</blockquote>
+<p>2004-03-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS: Updated with changes up to today's date.</li>
+<li>tests/constitute.c (main): Float type seems to require allowing
+a bit of error for Q:32.</li>
+<li>magick/constitute.c (DispatchImage): Be more careful when
+rounding pixel intensity.
+(ConstituteImage): Be more careful when converting float and
+double to Quantum.</li>
+<li>magick/composite.c (CompositeImage): Fix Multiply composite
+operator for Q:32 build (was all black image).
+(CompositeImage): Tidied up the documented composite operators so
+the implementation is easier to understand.</li>
+<li>PerlMagick/t/ttf/read.t: Set a desired label size so output
+image should be the same size as the reference image even if the
+FreeType type hinter is disabled.</li>
+<li>magick/annotate.c (RenderFreetype): Improve outline bounding box
+computation accuracy.</li>
+</ul>
+</blockquote>
+<p>2004-03-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/x/write.t: Don't test X11 if DISPLAY is not set.</li>
+<li>PerlMagick/t/x/read.t: Don't test X11 if DISPLAY is not set.</li>
+</ul>
+</blockquote>
+<p>2004-03-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/Makefile.am: Removed some apparently unnecessary library
+dependencies.</li>
+<li>Makefile.am (windows-src): Added a way to generate a Windows
+source zip file.</li>
+</ul>
+</blockquote>
+<p>2004-03-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: The -operator command now supports
+floating-point and percent of range arguments.</li>
+</ul>
+</blockquote>
+<p>2004-03-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Added support for -operator command with
+syntax "-operator channel operator rvalue" which applies a
+arithmetic or bitwise operator to a specified image channel
+or all channels.</li>
+</ul>
+</blockquote>
+<p>2004-03-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/filter.t: Fix Solarize test case.</li>
+<li>PerlMagick/t/wmf/read.t: Added another WMF test case.</li>
+<li>coders/wmf.c: Resolve WMF rendering bug with black color.</li>
+<li>magick/utility.c (StringToArgv): Free argv data prior to error
+return.</li>
+</ul>
+</blockquote>
+<p>2004-03-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (WriteJPEGImage): If image_info->colorspace is set
+to GRAYColorspace then make sure that image is in a gray
+colorspace.</li>
+<li>magick/image.c (TransformRGBImage): If colorspace is already an
+RGB type (RGBColorspace, GRAYColorspace, or TransparentColorspace),
+then simply return. Do *not* set image->colorspace to RGBColorspace
+since this potentially loses a valuable setting.</li>
+</ul>
+</blockquote>
+<p>2004-03-10 Peter Boos <<a class="reference external" href="mailto:pedib%40colorfullife.com">pedib<span>@</span>colorfullife<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/annotate.c (RenderFreetype): If DrawAnnotation is called
+with a string containing only one character and this character is
+not recognized by the TrueType engine, a crash occured due to the
+failure of FT_Load_Glyph. The failure caused an uninitialized
+glyph.image pointer to be used by FT_Done_Glyph() later in the
+code. The solution is to initialize the glyph.image pointer to
+null.</li>
+</ul>
+</blockquote>
+<p>2004-03-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (QuantumOperatorRegionImage): Properly handle
+over and underflow of arithmetic operators.</li>
+<li>magick/draw.c (DrawGetFillOpacity): Use fill opacity, and invert
+opacity range so it is 0.0 to 1.0 (was acting like transparency).
+(DrawSetStrokeOpacity): Validate range of stroke_opacity.
+(DrawSetFillOpacity): Save value to context->fill.opacity and
+validate the range of fill_opacity.</li>
+<li>magick/image.c (QuantumOperatorImage): New function to apply an
+arithmetic or bitwise operator to the pixel quantums in an image.
+(QuantumOperatorRegionImage): New function to apply an arithmetic
+or bitwise operator to the pixel quantums in an image region.</li>
+<li>magick/image.c (IsImagesEqual): Re-implemented using the new
+pixel iteration functions as a proof of concept.</li>
+<li>magick/pixel_iterator.h: Added some pixel iteration functions in
+order to make it easier to implement algorithms which only need to
+iteratively access pixels in a region. These functions are not
+part of the API yet so their interface should be considered
+unstable.</li>
+<li>doc/GNUmakefile: Rename Makefile to GNUmakefile since it relies
+on GNU make extensions.</li>
+</ul>
+</blockquote>
+<p>2004-03-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (ConstituteImage): Add support for <cite>T</cite>
+(transparency) and <cite>O</cite> (opacity) map types. Simplify
+implementation.
+(DispatchImage): Add support for <cite>T</cite> (transparency) and <cite>O</cite>
+(opacity) map types. Simplify implementation.</li>
+<li>config/delegates.mgk.in: Quote delegate command names so
+that they can contain embedded spaces.</li>
+<li>VisualMagick/bin/delegates.mgk: Quote delegate command names so
+that they can contain embedded spaces.</li>
+<li>coders/tiff.c (WriteTIFFImage): Use the libtiff default endian
+mode when writing TIFF rather than forcing MSB2LSB bit order.
+(ReadTIFFImage): Enable reading in MSB2LSB bit order (better for
+our byte-level parsing), enable memory mapping, and enable strip
+chopping. Memory mapping and strip chopping are probably enabled
+by default.</li>
+<li>magick/nt_base.c (NTSystemComman): Use
+MsgWaitForMultipleObjects() rather than WaitForSingleObject() in
+order to avoid possible deadlock when application code directly or
+indirectly creates windows.</li>
+</ul>
+</blockquote>
+<p>2004-02-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/animate.c (XMagickCommand): URL should point to
+<a class="reference external" href="http://graphicsmagick.org/">http://graphicsmagick.org/</a>.</li>
+<li>magick/display.c (XMagickCommand): URL should point to
+<a class="reference external" href="http://graphicsmagick.org/">http://graphicsmagick.org/</a>.</li>
+<li>magick/image.c (DisplayImages): Changes to fix memory leaks in
+X11 commands had bugs which seriously broke DisplayImages. Now
+DisplayImages works properly again.</li>
+<li>magick/xwindow.c (XDestroyResourceInfo): New function to destroy
+XResourceInfo.</li>
+<li>coders/x.c (WriteXImage): Implement based on DisplayImages().
+(RegisterXImage): Always register X coder, but with read/write
+support disabled if X11 not available.</li>
+</ul>
+</blockquote>
+<p>2004-02-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (ImportImageCommand): Eliminate memory leaks.</li>
+<li>magick/memory.c (LiberateMemory): Use MagickFreeMemory macro for
+implementation.
+(ReacquireMemory): Use MagickReallocMemory macro for
+implementation.
+(AcquireMemory): Use MagickAllocateMemory for implementation.</li>
+</ul>
+</blockquote>
+<p>2004-02-26 Vladimir <<a class="reference external" href="mailto:lvm%40integrum.ru">lvm<span>@</span>integrum<span>.</span>ru</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/memory.c (CloneMemory): Fixes to compile under Microsoft
+Visual C++ 6.0.</li>
+</ul>
+</blockquote>
+<p>2004-02-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/animate.c (XAnimateImages): Memory leak reduction and
+better integration with gm command.</li>
+<li>magick/display.c (XDisplayImage): Display was leaking memory
+like a sieve. Now it doesn't.</li>
+<li>magick/memory.c (CloneMemory): Computation for when it is safe
+to use memcpy() was incorrect. Use memmove() rather than
+backwards-copy loop.</li>
+<li>Makefile.am ($(DIST_ARCHIVE_SRPM)): Added rules to build a
+source RPM.</li>
+<li>configure.ac: Search for <cite>buildrpm</cite> or <cite>rpm</cite> programs in order to
+support creating RPM packages on a system which has RPM installed.</li>
+<li>version.sh (PACKAGE_VERSION): Changed snapshot release naming so
+that there is only one dash in the name and the snapshot date is
+prefixed with <cite>0</cite> to assure proper directory sorting. This allows
+snapshot naming to be acceptable to RPM. The snapshot package
+name is now similar to GraphicsMagick-1.1.020040218.tar.bz2</li>
+</ul>
+</blockquote>
+<p>2004-02-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xwd.c (RegisterXWDImage): Always register XWD, but only
+register read/write methods if it is supported.</li>
+<li>wand/magick_wand.c: Synchronized with latest ImageMagick API
+changes.</li>
+</ul>
+</blockquote>
+<p>2004-02-16 Lars Ruben Skyum <<a class="reference external" href="mailto:lars.skyum%40stibo.com">lars<span>.</span>skyum<span>@</span>stibo<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resize.c (HorizontalFilter): Fixed: do process K channel
+for CMYK images.
+(VerticalFilter): do process K channel for CMYK images.</li>
+</ul>
+</blockquote>
+<p>2004-02-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tga.c (ReadTGAImage): Fix matte channel handling. For
+16-bit packets, use integer rather than floating point. Return
+gray images as PseudoClass and set is_grayscale flag. Add
+logging.</li>
+<li>magick/fx.c (WaveImage): Ensure that image is
+DirectClass. Ensure that matte channel is initialized if
+necessary. Include background color in is_grayscale evaluation.</li>
+<li>magick/gem.c (GenerateNoise): Scale noise to range of quantum.</li>
+</ul>
+</blockquote>
+<p>2004-02-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jp2.c (WriteJP2Image): Support passing all documented
+Jasper options using -define.</li>
+</ul>
+</blockquote>
+<p>2004-02-13 Peter Boos <<a class="reference external" href="mailto:pedib%40colorfullife.com">pedib<span>@</span>colorfullife<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wmf.c (util_draw_arc): Fixes to improve handling for pie,
+arc, and chord. These fixes produce correct output for
+wmf/examples/fjftest.wmf, but it is not known if they are correct
+for all cases.</li>
+</ul>
+</blockquote>
+<p>2004-02-12 Tim Hunter <<a class="reference external" href="mailto:cyclists%40nc.rr.com">cyclists<span>@</span>nc<span>.</span>rr<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/profile.c (SetImageProfile): Bug fixes.</li>
+</ul>
+</blockquote>
+<p>2004-02-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xpm.c (UnregisterXPMImage): Unregister PICON registration.</li>
+</ul>
+</blockquote>
+<p>2004-02-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/Makefile.am (label_la_LDFLAGS): Add a dependency on the
+math library since floor() is used.</li>
+<li>wand/magick_wand.c (MagickRemoveImageProfile): Use C comments in
+C files.</li>
+<li>magick/constitute.c (MapQuantumType): Fix spurious comma in
+enum definition.</li>
+<li>magick/blob.c (GetBlobStreamHandler): Apparently return type can
+not be const.</li>
+</ul>
+</blockquote>
+<p>2004-02-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Check for Windows fonts under
+/usr/X11R6/lib/X11/fonts/truetype (XFree86 standard location?).</li>
+<li>coders/jp2.c (WriteJP2Image): Support providing a compression
+rate value (range 0.0 to 1.0) using command line syntax similar to
+<cite>-define jp2:rate=0.5</cite>. In Magick++ this option may be accessed
+similar to image.defineValue("jp2","rate","0.5");</li>
+<li>magick/command.c (DisplayImageCommand): Exit status was inverted
+so <cite>gm display</cite> was returning 1 for successful commands, and 0 for
+failures.
+(AnimateImageCommand): Exit status was inverted so <cite>gm animate</cite>
+was returning 1 for successful commands, and 0 for failures.</li>
+</ul>
+</blockquote>
+<p>2004-02-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.h (MagickReallocMemory): Solaris compiler
+complains about cast so remove it.</li>
+<li>coders/xwd.c (WriteXWDImage): Right-size the pixels buffer and
+tune writer loops a bit.</li>
+<li>magick/color.h (VerifyColormapIndex): Improve diagnostics.</li>
+<li>coders/pict.c (WritePICTImage): Eliminate use of uninitialized
+data when writing RGB PICT. Fix OpenBlob assertion when writing
+JPEG PICT.
+(ReadPICTImage): Validate <cite>tile_image</cite> colormap indexes rather
+than <cite>image</cite> colormap indexes. Preserve compression attribute from
+tile image.</li>
+<li>magick/constitute.c (DispatchImage): Don't access image opacity
+channel unless image->matte is True.</li>
+</ul>
+</blockquote>
+<p>2004-02-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (UnregisterPNGImage): Destroy PNG semaphore.</li>
+<li>magick/image.c (SetImageInfo): Since we don't know what the
+"IMPLICIT" specifier is supposed to do, support for it is
+removed. Perhaps by removing support for it, we will be reminded
+why it exists.</li>
+<li>magick/magick.c (DestroyMagickInfo): Invoke
+UnregisterStaticModules().
+(GetMagickInfo): Remove registration for "IMPLICIT" format since
+its purpose is presumed bogus.</li>
+<li>magick/static.c (UnregisterStaticModules): New function so we
+can unregister static modules.</li>
+<li>coders/plasma.c (UnregisterPLASMAImage): Unregister FRACTAL.</li>
+<li>coders/icon.c (UnregisterICONImage): Unregister CUR.</li>
+<li>coders/bmp.c (UnregisterBMPImage): Unregister BMP2 and BMP3.</li>
+<li>coders/meta.c (UnregisterMETAImage): Unregister APP1JPEG, IPTC,
+IPTCTEXT, IPTCWTEXT, and PICON.</li>
+<li>coders/miff.c: Check for run-length termination before testing
+memory and only check opacity channel if matte is valid.</li>
+<li>magick/compress.c: Check for run-length termination before
+testing memory (bad read error).</li>
+</ul>
+</blockquote>
+<p>2004-02-07 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c: Fix off-by-one error while initializing padding bytes.</li>
+<li>coders/dib.c: Fix off-by-one error while initializing padding bytes.</li>
+<li>magick/enhance.c: MaxMap vs MaxRGB error fixed. Reported by Cristy.</li>
+</ul>
+</blockquote>
+<p>2004-02-04 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/compress.c: avoid a reference to uninitialized data.</li>
+</ul>
+</blockquote>
+<p>2004-02-04 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dib.c: initialize padding bytes.</li>
+</ul>
+</blockquote>
+<p>2004-02-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/montage.c (MontageImages): Fix leak of texture image (big
+leak).</li>
+</ul>
+</blockquote>
+<p>2004-02-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Fix detection of when to use a
+temporary file when writing TIFF. Writing to TIFF BLOBs was
+broken by the recent changes to make BlobInfo a private type.</li>
+<li>magick/render.c (DestroyEdge): Use memmove for overlapping copy.</li>
+</ul>
+</blockquote>
+<p>2004-02-03 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c: initialize padding bytes.</li>
+</ul>
+</blockquote>
+<p>2004-02-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (ConstituteImage): Added map support for <cite>P</cite>,
+in order to skip over a pad quantum.
+(DispatchImage): Added map support for <cite>P</cite>, in order to write a pad
+quantum.</li>
+<li>magick/resize.c (HorizontalFilter): Don't process opacity
+channel unless matte is enabled.
+(VerticalFilter): Don't process opacity channel unless matte is
+enabled.</li>
+<li>magick/compress.c (Ascii85Initialize): Don't overwrite an
+existing ascii85 allocation.</li>
+<li>magick/utility.c (Strip): Use <cite>memmove</cite> rather than <cite>memcpy</cite> to
+copy overlapping data.</li>
+<li>tests/rwfile.c (main): Fix memory leak in test. Only apply size
+if format requires it.</li>
+<li>tests/rwblob.c (main): Fix memory leak in test. Only apply size
+if format requires it.</li>
+<li>coders/mono.c (RegisterMONOImage): Mono is a raw format.</li>
+<li>magick/magic.c (GetMagicInfo): Ensure that magic tests are
+within the range of header data which was read.</li>
+</ul>
+</blockquote>
+<p>2004-02-02 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c: fix potential use of uninitialized data.</li>
+<li>coders/png.c: fix potential use of uninitialized data.</li>
+</ul>
+</blockquote>
+<p>2004-01-31 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/studio.h: Fixed problem related to DLL version of BCBMagick.
+Sometimes was incorrectly checked the presence of VC++ DLL. Thanks
+very much to Oliver Bertini for bringing this problem to our attention.</li>
+<li>BCBMagick: added libpng delegate library in both static and DLL
+modes.</li>
+<li>BCBMagick: removed all unuseful files from CVS.</li>
+</ul>
+</blockquote>
+<p>2004-01-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (CloneDrawInfo): Fixed nasty memory leak which
+becomes painfully evident when using Magick++.</li>
+<li>magick/type.c (ReadTypeConfigureFile): Fix problem with parsing
+<include> directive.</li>
+<li>configure.ac: The type.mgk generated had a syntax error.</li>
+<li>magick/effect.c (SpreadImage): Eliminate read from uninitialized
+memory.</li>
+<li>magick/quantize.c (NodeInfo): Store nodes in a list similar to
+ImageMagick.
+(DestroyCubeInfo): Eliminate a small memory leak.</li>
+</ul>
+</blockquote>
+<p>2004-01-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/montage.c (MontageImages): Free thumbnails once they are
+no longer needed (big leak).</li>
+<li>magick/blob.c (OpenBlob): Ensure that magick array is
+fully initialized, even if the fread() is short.</li>
+<li>magick/list.c (ImageListToArray): Add a null pointer to the end
+of the image list to serve as a handy list terminator.</li>
+<li>magick/tempfile.c (DestroyTemporaryFiles): Fix memory leak of
+semaphore.</li>
+<li>magick/map.c (MagickMapDeallocateMap): Fix memory leak of
+semaphore.</li>
+<li>coders/png.c (WriteOneJNGImage): Use DestroyBlob.</li>
+<li>magick/list.c (SyncNextImageInList): Use DestroyBlob.</li>
+<li>magick/image.c (AllocateNextImage): Use DestroyBlob.
+(DestroyImage): DestroyBlob.</li>
+<li>coders/wpg.c (ExtractPostscript): Use DestroyBlob.</li>
+<li>magick/blob.c (DestroyBlob): New function. Similar to
+DestroyBlobInfo except that it requires an Image * argument and
+zeros the blob pointer. This one is preferred for use over
+DestroyBlobInfo.</li>
+</ul>
+</blockquote>
+<p>2004-01-27 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Add DestroyBlobInfo() calls to stop memory leak when
+processing JNG datastreams.</li>
+</ul>
+</blockquote>
+<p>2004-01-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.h (MagickReallocMemory): Added a cast required to
+make C++ Happy.</li>
+<li>coders/tiff.c: Adjust for bitstream API function renaming.</li>
+<li>magick/bit_stream.h: Rename BitStreamRead() to
+BitStreamMSBRead() to indicate that it reads most significant bytes
+first ("big endian" order). Rename BitStreamWrite() to
+BitStreamMSBWrite() to indicate that it writes most significant
+bytes first ("big endian" order).</li>
+<li>wand/magick_wand.c: Updated to lastest ImageMagick API.</li>
+</ul>
+</blockquote>
+<p>2004-01-26 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/stream.c: (SetPixelStream) removed "const" from definition of
+local variable [StreamHandler stream]. Borland C++Builder compiler signal
+error "Cannot modify a const object".</li>
+</ul>
+</blockquote>
+<p>2004-01-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (TIFFMapBlob): Allow libtiff to access memory
+mapped file (or BLOB in memory) directly. This provides a small
+performance increase.</li>
+<li>magick/constitute.c (ReadImage): If a .mpc file is a temporary
+file, then be sure to remove the associated .cache file when
+removing the .mpc file.</li>
+<li>magick/log.h (LogEventType): ExceptionEventMask now maps to
+WarningEventMask|ErrorEventMask|FatalErrorEventMask so that
+<cite>-debug exception</cite> works again.</li>
+<li>magick/blob.c (CloseBlob): Allow CloseBlob to be invoked on a
+blob which is not open (in UndefinedStream state).
+(BlobInfo): The definition of BlobInfo is now private to blob.c.
+(StreamType): The StreamType enumeration is now private to blob.c.
+(GetBlobFileHandle): New function to access the blob file handle.
+(GetBlobStreamHandler): New function to access the blob stream
+handler.
+(GetBlobStreamType): This function is removed entirely.
+(BlobIsSeekable): New function to test if SeekBlob will work
+properly for this blob type.
+(GetBlobClosable): New function to test if the blob is allowed to
+be closed by the library (may be an externally provided file
+descriptor).
+(GetBlobTemporary): New function to test if input file is a
+temporary file which is to be removed.
+(SetBlobClosable): New function to support setting the flag which
+keeps the input file from being closed.
+(SetBlobTemporary): New function to support setting the flag which
+indicates that the input file is a temporary file.</li>
+<li>coders/jpeg.c (ReadJPEGImage): Invoke CloseBlob even if
+blob is in UndefinedStream state.</li>
+<li>magick/error.h (ThrowReaderException): Ditto.
+(ThrowWriterException): Ditto.
+(ThrowWriterException2): Ditto.
+(ThrowWriterException3): Ditto.</li>
+<li>magick/tempfile.h (ThrowReaderTemporaryFileException): Ditto.
+(ThrowWriterTemporaryFileException): Ditto.</li>
+<li>coders/dps.c,coders/jpeg.c, coders/meta.c, coders/mvg.c,
+coders/png.c, coders/tiff.c, magick/constitute.c, magick/stream.c:
+Use new blob accessor functions.</li>
+<li>magick/cache.c (OpenCache): For Windows, set the sequential
+access flag in all cases. Maybe it will make a difference.</li>
+</ul>
+</blockquote>
+<p>2004-01-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (GetConfigureBlob): Don't check Windows registry
+if MagickLibConfigPath or MagickShareConfigPath is defined.</li>
+<li>magick/locale.c: Use a Unix-style message database for MinGW.</li>
+<li>rungm.sh.in: Translate environment paths to Windows format when
+running under MinGW.</li>
+<li>magick/nt_base.c (mmap): Re-wrote mmap emulation to support
+64-bit file offsets and to support anonymous mapping.
+(msync): A crude emulation of Unix msync().</li>
+<li>acinclude.m4 (GM_FUNC_MMAP_FILEIO): Change result define from
+HAVE_MMAP to HAVE_MMAP_FILEIO so that it doesn't conflict with
+Autoconf standard definition.</li>
+</ul>
+</blockquote>
+<p>2004-01-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/cache.c (OpenCache): While allocating the pixel cache
+from the heap, reserve enough memory to contain a full PseudoClass
+image in order to reduce the chance that there will be a memory
+allocation failure while processing the image. This also avoids
+the possibility that the image pixels will be block-copied to a
+new location due to heap memory fragmentation. If there is
+insufficient heap memory (malloc() fails), then a disk-based pixel
+cache will be used.</li>
+<li>coders/wpg.c: Backed out Jaroslav Fojtik's patch from 2004-01-13
+because WPG was failing PerlMagick's existing WPG read test.</li>
+</ul>
+</blockquote>
+<p>2004-01-16 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li>BCBMagick: updated to recent Windows delegate libraries.</li>
+<li>BCBMagick: modified build procedure. Removed all unused directories
+and include files.</li>
+<li>lcms/include/lcms.h: Modified to achieve BCBMagick compilation.</li>
+<li>tiff/libtiff/tiffio.h: Modified to achieve BCBMagick compilation</li>
+<li>ttf/include/freetype/config/ftoption.h: Modified to achieve
+BCBMagick compilation</li>
+<li>Magick++/lib/Magick++/Include.h: Modified to achieve BCBMagick compilation.</li>
+</ul>
+</blockquote>
+<p>2004-01-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c: Applied patch from Jaroslav Fojtik to support
+reading the CTM (current transform matrix). The CTM is not
+applied yet (expect later patch).</li>
+</ul>
+</blockquote>
+<p>2004-01-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sfw.c (ReadSFWImage): Added size_t cast.</li>
+<li>coders/msl.c (MSLStartElement): Added size_t cast.</li>
+<li>coders/meta.c (convertHTMLcodes): Added size_t cast.</li>
+<li>coders/locale.c: Add size_t casts and update to use memory
+allocation macros.</li>
+<li>coders/html.c (WriteHTMLImage): Added size_t cast.</li>
+<li>magick/utility.h (MagickAllocateMemory): Added size_t cast.
+(MagickReallocMemory): Added size_t cast.</li>
+<li>coders/bmp.c (WriteBMPImage): Added size_t cast.</li>
+<li>coders/art.c (ReadARTImage): Use memory allocation macros.</li>
+<li>VisualMagick/configure/configure.cpp: Update to support library
+.def exports files with Visual C++ 7.0.</li>
+<li>Updated Windows delegate libraries: LCMS 1.12, FreeType 2.1.5,
+BIG-KIT 1.5, libpng 1.2.5, libwmf 0.2.8.2, and zlib 1.2.1.</li>
+<li>Verified Windows static and DLL compilation with Visual C++ 6.0.</li>
+<li>Makefile.am: Update to automake 1.8.2.</li>
+<li>coders/gif.c (WriteGIFImage): Use ColorMatch rather than
+FuzzyColorMatch when comparing colormap entries.</li>
+</ul>
+</blockquote>
+<p>2004-01-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/profile.c: Needed to include "magick/profile.h" in order
+to obtain prototypes.</li>
+</ul>
+</blockquote>
+<p>2004-01-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/wandtest.c: Change MagickCloneWand to MagickGetImage since
+the API name changed.</li>
+<li>wand/pixel_wand.c: Synchronized with
+latest daily ImageMagick updates.</li>
+<li>wand/magick_wand.c (MagickRemoveImageProfile): Synchronized with
+latest daily ImageMagick updates.</li>
+<li>magick/profile.c (DeleteImageProfile): New method to make
+it easier to destroy an image profile.</li>
+<li>magick/profile.h: New source file to contain functions for
+dealing with embedded image profiles.</li>
+<li>magick/profile.c: New source file to contain functions for
+dealing with embedded image profiles.</li>
+<li>Makefile.am (DISTDIRS): Distribute TclMagick subdirectory.</li>
+</ul>
+</blockquote>
+<p>2004-01-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c: Ported over the latest ImageMagick Wand API
+updates. Note that a comment now says that the Wand API will not
+be finished until around 4th quarter of 2004. This represents a
+1-1/2 year slip from the original estimate!</li>
+</ul>
+</blockquote>
+<p>2004-01-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (IsImagesEqual): Simplified implementation.</li>
+<li>magick/magick.c: Removed some unused code.</li>
+<li>contrib/win32/ATL7/ImageMagickObject/ImageMagickObject.cpp
+(IDispatch): Comment out InitializeSemaphore() so code compiles.</li>
+<li>libtool.m4: Updated to 2004-01-03 version of CVS libtool. This
+should fix configure problems under AIX and IRIX.</li>
+</ul>
+</blockquote>
+<p>2004-01-03 Glenn Randers-Pehrson <<a class="reference external" href="mailto:randeg%40alum.rpi.edu">randeg<span>@</span>alum<span>.</span>rpi<span>.</span>edu</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sgi.c: opacity channel was lost when writing grayscale
+SGI images. See bug report in magick-users list.</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2005-12-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tiff: Update to libtiff 3.8.0.</li>
+</ul>
+</blockquote>
+<p>2005-12-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS: Updated with latest changes.</li>
+<li>tiff: Update to libtiff 3.7.4.</li>
+</ul>
+</blockquote>
+<p>2005-12-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lcms: Update to lcms 1.15.</li>
+</ul>
+</blockquote>
+<p>2005-12-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/enhance.c (LevelImage): Fix -level command parsing when a
+percent symbol is supplied within the argument rather than at the
+end.</li>
+<li>magick/utility.c (GetGeometry): Bounds-check geometry string
+length.</li>
+</ul>
+</blockquote>
+<p>2005-12-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c: Decided to swap 10-bit subsampled 4:2:2 YCbCr by
+default since this is what practically all sample files I have
+been provided actually do. Ignore the fact that there is nothing
+in the standard which supports this.</li>
+</ul>
+</blockquote>
+<p>2005-12-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (NormalizeSamplingFactor): Generalized
+subsampling notation parsing support.</li>
+</ul>
+</blockquote>
+<p>2005-12-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (NormalizeSamplingFactor): Add some support for
+normalizing industry-standard subsampling notation (e.g. 4:2:2)
+into GraphicsMagick's unusual notation.</li>
+</ul>
+</blockquote>
+<p>2005-12-06 Ralf Wildenhues <<a class="reference external" href="mailto:Ralf.Wildenhues%40gmx.de">Ralf<span>.</span>Wildenhues<span>@</span>gmx<span>.</span>de</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Updates to use latest development autotools, including
+development libtool 2.0.</li>
+</ul>
+</blockquote>
+<p>2005-12-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.h: Added some useful macros for accessing
+PixelPacket members in a generic way.</li>
+<li>coders/dpx.c (ReadDPXImage): For YCbCr with <cite>A</cite> sample, <cite>A</cite>
+sample levels are like Luma.
+(WriteDPXImage): For YCbCr with <cite>A</cite> sample, <cite>A</cite> sample levels are
+like Luma.</li>
+</ul>
+</blockquote>
+<p>2005-12-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (RegisterTIFFImage): Report libtiff release
+version rather than ABI version.</li>
+</ul>
+</blockquote>
+<p>2005-11-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resize.c: Revert yesterday's benign-appearing edits since
+they caused a bizzare bug.</li>
+</ul>
+</blockquote>
+<p>2005-11-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): Improve performance when reading
+YCbCr files. Handle files which use Printing Density on top of
+YCbCr. Default YCbCr to Rec.709 if the transfer characteristic is
+User Defined.</li>
+<li>coders/pcd.c (Upsample): Moved Upsample from gem.c to here since
+PCD is the only user and it is not a general purpose function.</li>
+</ul>
+</blockquote>
+<p>2005-11-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/magick/magick_config.h.in: Remove unnecessary test
+for WIN32.</li>
+</ul>
+</blockquote>
+<p>2005-11-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_compat.c (FormatMagickStringList): MagickExport since this
+function is used by Ch extension.</li>
+<li>magick/log.c (LogMagickEventList): MagickExport since this
+function is used by Ch extension.</li>
+<li>magick/utility.c (FormatStringList): MagickExport since this
+function is used by Ch extension.</li>
+<li>coders/dpx.c (ReadDPXImage): Added support for dpx:swap-samples
+define in order to handle files with Cb and Cr swapped. Fixed a
+bug in the header reading which caused some valid files to fail to
+read at all.
+(WriteDPXImage): Added support for dpx:swap-samples define in
+order to write files with Cb and Cr swapped.</li>
+<li>magick/profile.c (ProfileImage): Add support for ICC CMS
+profiles in YCbCr space.</li>
+</ul>
+</blockquote>
+<p>2005-10-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (ReadSVGImage): Eliminate memory leak.</li>
+</ul>
+</blockquote>
+<p>2005-10-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.h (Image): Added an orientation member to the Image
+structure to record image orientation for the DPX, and TIFF
+formats. Eventually formats which support IPTC and EXIF embedded
+profiles should be supported by the orientation member as well.</li>
+</ul>
+</blockquote>
+<p>2005-10-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/magick/magick_types.h.in: Add patch for Ch.</li>
+<li>magick/command.c (TransmogrifyImage): Complete re-write of
+mogrify file handling. Former version wrote to a temporary file
+and then moved temporary file to replace original if necessary.
+New version moves an existing writable file to a backup file with
+tilde (<cite>~</cite>) added to end of file name, writes to the final output
+file name, and removes the backup file on success. The new
+approach satisfies formats which embed the output name in the file
+(e.g. the DPX format) and still works when the output file exists
+and is writeable, but is in non-writeable directory. The previous
+approach would fail if the output file exists and is writable, but
+the directory is not writeable.</li>
+</ul>
+</blockquote>
+<p>2005-10-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (AttributeToString): Use strncpy rather than
+strlcpy to copy string. This is important since DPX header
+strings are not null terminated and may need to fill all available
+space. Certain short header fields like mp.film.manufacturer.id,
+mp.film.type, and mp.perfs.offset were being truncated!</li>
+</ul>
+</blockquote>
+<p>2005-09-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (GetImageAttribute): Add more general support
+for retrieving wildcarded attributes so that an identify -format
+specification like <cite>%[dpx:*]</cite> works as expected.</li>
+<li>coders/tiff.c (WriteTIFFImage): Transform quality value into zip
+compression quality level similar to what is done for MIFF/MNG/PNG.
+Since default quality value is 75, this means that the default zip
+quality level is 7.</li>
+</ul>
+</blockquote>
+<p>2005-09-24 Peter Wu <<a class="reference external" href="mailto:peterw%40softintegration.com">peterw<span>@</span>softintegration<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Incorporate changes necessary so that GraphicsMagick can work
+with the Ch C/C++ interpreter from SoftIntegration at
+<a class="reference external" href="http://www.softintegration.com/">http://www.softintegration.com/</a>.</li>
+</ul>
+</blockquote>
+<p>2005-09-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c: Incorporate all functionality from
+cache.c, cache_view.c, and stream.c so that all private interfaces
+can be fully hidden. As a result cache.c, cache_view.c, and
+stream.c are now removed.</li>
+</ul>
+</blockquote>
+<p>2005-09-18 Michal Kowalczuk <<a class="reference external" href="mailto:sammael%40brzydal.eu.org">sammael<span>@</span>brzydal<span>.</span>eu<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/gif.c: Free global_colormap before returning with error.</li>
+</ul>
+</blockquote>
+<p>2005-09-18 Stepan Kasal <<a class="reference external" href="mailto:kasal%40ucw.cz">kasal<span>@</span>ucw<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am (BUILT_SOURCES): Removed.</li>
+<li>magick/Makefile.am (MAGICK_BUILT_SRCS): Removed, too.</li>
+</ul>
+</blockquote>
+<p>2005-09-12 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40glennrp.com">glennrp<span>@</span>glennrp<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/profile.c (ProfileImage): Free color_profile->name
+and iptc_profile->name when destroying the profile.</li>
+</ul>
+</blockquote>
+<p>2005-08-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/api.h: Eliminate requirement to include certain system
+headers prior to including <magick/api.h>.</li>
+<li>utilities/gm.c: Move utility implementation to GMCommand() in
+command.c</li>
+</ul>
+</blockquote>
+<p>2005-08-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c: Added support for reading and writing DPX Luma
+files using proper video levels.</li>
+<li>magick/colorspace.h (enum ColorspaceType): Decided that
+GRAYColorspace should be reserved for full-range grayscale data
+while Rec601LumaColorspace and Rec709LumaColorspace should be for
+video colorspaces. Therefore, GRAYColorspace is no longer a
+synonym for Rec601LumaColorspace.</li>
+<li>magick/colorspace.c: Added support for influencing Cineon Log
+colorspace transformations via image attributes.
+Perform colorspace transformations in floating point rather than
+integer in order to reduce the amount of noise added by
+transform table quantization.</li>
+<li>coders/psd.c (WritePSDImage): Ensure that output image is 8 or
+16-bits regardless of specific image depth.</li>
+<li>coders/dpx.c: Added support for planar YCbCr 4:2:2.</li>
+</ul>
+</blockquote>
+<p>2005-08-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (WriteDPXImage): 10 and 12-bit packed data was not
+according to DPX specification. Added dpx:pixel-endian={lsb|msb}
+to allow the user to specify the endian order of the pixel data in
+case it does (or should not) not match the headers. Library Of
+Congress format is 10-bit packed data in big-endian format, but is
+marked as little-endian.</li>
+</ul>
+</blockquote>
+<p>2005-08-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c: Sample order for filled 10 bit samples matches DPX
+specification (was intentionally reversed). RGB sample order is
+changed to match DPX specifiation (i.e. BGR rather than RGB).
+Disabled special support for Library Of Congress little-endian
+10-bit packed format.</li>
+</ul>
+</blockquote>
+<p>2005-08-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c: Extend all image rows to a 32-bit integer
+boundary.</li>
+</ul>
+</blockquote>
+<p>2005-07-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c: Support the little-endian 10-bit packed format as
+used by the Library Of Congress.</li>
+</ul>
+</blockquote>
+<p>2005-07-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jp2.c: Change how Jasper is intialized. Hopefully
+eliminate memory leak when reading ICC color profile.</li>
+<li>Overall: Compilation warning elimination with GCC 4.0.1.</li>
+<li>magick/utility.c (SystemCommand): Always report error status if
+a command fails.</li>
+</ul>
+</blockquote>
+<p>2005-07-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>zlib: Updated to version 1.2.3.</li>
+<li>coders/dpx.c: Use TriangleFilter for scaling chroma.</li>
+</ul>
+</blockquote>
+<p>2005-07-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c: Support proper encode and decode of YCbCr video
+levels.</li>
+<li>magick/colorspace.c: Support Rec709YCbCrColorspace colorspace.</li>
+</ul>
+</blockquote>
+<p>2005-07-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/{animate.c, display.c, import.c, xwindow.c}: Rename all
+symbols starting with <cite>X</cite> so that they are prefixed with <cite>Magick</cite>.
+This eases maintenance since it is almost impossible to understand
+code which pretends to be the X11 libraries. The few programs
+which use the GraphicsMagick <cite>X</cite> functions will need to alter the
+symbol names they use. Sorry.</li>
+<li>magick/command.c (DisplayImageCommand): Don't invoke
+XrmDestroyDatabase() to destroy the resource database associated
+with the display since it seems that XCloseDisplay() does this for
+us.</li>
+<li>magick/image.c (DisplayImages): Don't invoke
+XrmDestroyDatabase() to destroy the resource database associated
+with the display since it seems that XCloseDisplay() does this for
+us.</li>
+<li>coders/uyvy.c: Enforce image width restrictions.</li>
+<li>coders/dpx.c: Enforce image width restrictions when subsampling.</li>
+</ul>
+</blockquote>
+<p>2005-07-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c: Support reading and writing subsampled CbYCr
+images. Colorimetery is not right yet.</li>
+<li>magick/colorspace.h (enum Rec709YCbCrColorspace): New
+enumeration for Rec. 709 YcBCr colorspace.</li>
+</ul>
+</blockquote>
+<p>2005-06-21 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40glennrp.com">glennrp<span>@</span>glennrp<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Fixed a problem with reading 16-bit PNG images
+using the Q8 quantum depth.</li>
+</ul>
+</blockquote>
+<p>2005-06-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): Add read support for CbYCr at 4:4:4.
+(WriteDPXImage): Add write support for CbYCr at 4:4:4.</li>
+</ul>
+</blockquote>
+<p>2005-06-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (WriteDPXImage): Only preserve source image
+dimension and offset information if image size has not changed.
+If image size has changed, the existing information may become
+invalid.
+(WriteDPXImage): Allow user to assign DPX header attribute values
+using syntax like "-define dpx:mp.frame.position=1000".</li>
+</ul>
+</blockquote>
+<p>2005-06-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/fpx.c: Fix compilation problem due to additional
+ExportImagePixelArea parameter.</li>
+</ul>
+</blockquote>
+<p>2005-06-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WriteMNGImage): Use -define mng:need-cacheoff to
+write a libmng-specific nEED request to disable frame buffering.
+This allows the MNG data to stream without increasing memory
+consumption in the libmng client.</li>
+</ul>
+</blockquote>
+<p>2005-06-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (SMPTEStringToBits): Time code and user bits were
+being displayed in wrong order on little endian CPUs. Thanks very
+much for bug report from Jason Howard.
+(SMPTEStringToBits): Similar fix for time code and user bits
+string to binary.</li>
+</ul>
+</blockquote>
+<p>2005-06-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (ReadMIFFImage): Use StringToColorspaceType() to
+parse colorspaces.</li>
+<li>coders/dpx.c (ReadDPXImage): Change existing
+dpx:source-colorspace define to dpx:colorspace so it is easier to
+remember.</li>
+<li>coders/cineon.c (ReadCINEONImage): Extract Cineon header
+attributes in DPX compatible form so that it is possible to
+convert Cineon to DPX while losing as little header information as
+possible. Allow the user to set the existing image colorspace
+using the cineon:colorspace define.</li>
+</ul>
+</blockquote>
+<p>2005-06-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (ReadJPEGImage): Report actual depth of JPEG file
+(8 or 12 bits).</li>
+<li>coders/cineon.c (ReadCINEONImage): Report depth as 10 bits.</li>
+</ul>
+</blockquote>
+<p>2005-05-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c: Retrieve and restore the DPX user defined data
+area. Make available as a "DPXUSERDATA" attached profile.</li>
+</ul>
+</blockquote>
+<p>2005-05-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/meta.c (ReadMETAImage): Fixed reading ICM color profile
+files. Due to a typo ICM color profiles were being stored as IPTC
+profiles. This restores proper operation of the -profile option.
+(ReadMETAImage): Fix double free bug. Hopefully does not result
+in a memory leak in other cases.</li>
+</ul>
+</blockquote>
+<p>2005-05-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (DescribeImage): If the image is DirectClass,
+then don't compute the number of unique colors unless verbose is
+greater than one. This change is made since computing the number
+of unique colors may take hours for some images. The handling of
+the -verbose argument is changed so that it is cumulative.
+Specifying -verbose multiple times increases the level of
+verbosity.</li>
+</ul>
+</blockquote>
+<p>2005-05-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c (NTreaddir): Fix write beyond buffer length
+reported in SourceForge issue #1182003. Only impacts Windows.</li>
+</ul>
+</blockquote>
+<p>2005-05-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadRowSamples): Added necessary masking necessary
+in order to cleanly retrieve DPX 10 bit samples. Happened to work
+properly without the masking with QuantumDepth=16.</li>
+</ul>
+</blockquote>
+<p>2005-05-16 Tavis Ormandy <<a class="reference external" href="mailto:taviso%40gentoo.org">taviso<span>@</span>gentoo<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xwd.c (ReadXWDImage): Fix for infinite loop in the xwd
+decoder when calculating the shift r/g/b values and the mask is
+set to zero.</li>
+</ul>
+</blockquote>
+<p>2005-05-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jp2.c (ReadJP2Image): Return JP2 images as DirectClass
+grayscale rather than PseudoClass.</li>
+<li>coders/gray.c (ReadGRAYImage): Return GRAY images as DirectClass
+grayscale rather than PseudoClass.</li>
+<li>coders/dpx.c: Rewrote the DPX pixel reading/writing code yet
+again to obtain up to 2X better performance. In the process,
+support little-endian pixel storage.</li>
+</ul>
+</blockquote>
+<p>2005-05-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c: Added some performance optimizations for reading
+and writing. Write the motion picture and television headers.</li>
+<li>magick/colorspace.c (TransformRGBImage): Update image colorspace
+to RGB when transforming from Cineon log space to RGB.</li>
+<li>coders/dpx.c (WriteDPXImage): Set image date & time field.
+(ReadDPXImage): Retrieve television header SMTPE time code and
+user bits and return them as a formatted string.
+(WriteDPXImage): Fix colorspace mapping logic. Was converting
+Cineon log to RGB when it shouldn't be.</li>
+</ul>
+</blockquote>
+<p>2005-05-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (WriteDPXImage): Default to big-endian output.</li>
+<li>magick/delegate.c (InvokePostscriptDelegate): Improved
+Ghostscript API-based error reporting and logging.</li>
+<li>magick/attribute.c (GenerateEXIFAttribute): Extend EXIF
+knowledge a bit. Pass more characters from EXIF_FMT_BYTE in case
+the byte stream contains nulls.</li>
+<li>coders/dpx.c: Re-wrote the DPX read/write support in order to
+hopefully surmount problems noticed when testing with files sent
+to me.</li>
+<li>wand/pixel_wand.c (PixelSetYellowQuantum): Wrong PixelPacket
+member was being set. Thanks to Cristy for the heads-up.</li>
+<li>magick/image.c (SetImageType): Revert change from 2005-03-12.
+Some coders require that when the image is set to Bilevel type,
+that it be PseudoClass.</li>
+</ul>
+</blockquote>
+<p>2005-04-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>utilities/tests/convolve.sh: Add a convolution parameter.</li>
+</ul>
+</blockquote>
+<p>2005-04-28 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40glennrp.com">glennrp<span>@</span>glennrp<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: "IsGeometry() test was rejecting valid
+-convolve parameters. Also, the image returned by ConvolveImage()
+was ignored.</li>
+</ul>
+</blockquote>
+<p>2005-04-25 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40glennrp.com">glennrp<span>@</span>glennrp<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Initialize several variables to avoid new
+GCC 4.0.0 warnings.</li>
+<li>coders/pnm.c: Defend against malicious "P7" files that try
+to set the colormap less than 256 bytes (bug fix from ImageMagick)</li>
+</ul>
+</blockquote>
+<p>2005-04-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (WriteDPXImage): Fill out source information
+header.</li>
+<li>Magick++: Added image leveling methods for Magick++.</li>
+</ul>
+</blockquote>
+<p>2005-04-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS: Update with latest news.</li>
+<li>magick/blob.c (WriteBlob): Move BlobStream write support to a
+subroutine for easier maintenance.</li>
+<li>coders/dpx.c (ReadDPXImage): Support retrieving all DPX
+attributes as image attributes.
+(WriteDPXImage): Buffer writes for better performance on some
+platforms.</li>
+</ul>
+</blockquote>
+<p>2005-04-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (WriteDPXImage): Re-write sample marshalling to be
+based on a series of tighter loops. Results in a small
+performance increase.
+(ReadDPXImage): Re-write sample marshalling to be
+based on a series of tighter loops. Results in a small
+performance increase.</li>
+</ul>
+</blockquote>
+<p>2005-04-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/Xwindow.c (XDelay): Prefer use of select() over poll()
+since it is more portable. MacOS-X has a poll() but it doesn't
+work right.</li>
+</ul>
+</blockquote>
+<p>2005-04-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick_endian.h: Renamed from endian.h in order to avoid
+conflict with system headers.</li>
+</ul>
+</blockquote>
+<p>2005-04-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (WriteMIFFImage): Normalize image depth to 8/16/32.</li>
+<li>coders/gray.c (WriteGRAYImage): Normalize image depth to 8/16/32.</li>
+<li>coders/fits.c (WriteFITSImage): Normalize image depth to 8/16.</li>
+<li>tests/Makefile.am: Extended read/write tests to include 10, 12,
+and 16-bit original test images.</li>
+<li>coders/dpx.c (ReadDPXImage): If samples are log encoded, then
+set the image to CineonLogRGBColorspace.
+(WriteDPXImage): If image samples are log encoded, then mark DPX
+file as being log encoded.</li>
+<li>magick/colorspace.c (TransformRGBImage): Support translation
+from log RGB to linear RGB based on Cineon guidelines.
+(RGBTransformImage): Support translation from linear RGB to log RGB.</li>
+<li>magick/colorspace.h (enum CineonLogRGBColorspace): New
+enumeration to record that the RGB values are log encoded in a
+2.048 density range as defined for the Cineon Digital Film System.</li>
+</ul>
+</blockquote>
+<p>2005-04-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Take advantage of ColorspaceTypeToString() and
+StringToColorspaceType() functions in implementation.</li>
+<li>magick/colorspace.c (RGBTransformImage): Added support for
+converting to Rec 709 grayscale colorspace.
+(ColorspaceTypeToString): New function to translate from
+ColorspaceType enumeration value to a string.
+(StringToColorspaceType): New function to translate from a string
+to a ColorspaceType enumeration value. * magick/colorspace.h
+(enum Rec601LumaColorspace): New enumeration to support the Rec
+601 grayscale colorspace. This is the colorspace previously
+represented by GRAYColorspace. If GRAYColorspace is specified,
+then Rec601LumaColorspace is selected.
+(enum Rec709LumaColorspace): New enumeration to support the Rec
+707 grayscale colorspace.</li>
+</ul>
+</blockquote>
+<p>2005-04-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (IdentifyImageCommand): Use +ping to force
+identify to read the image pixels.</li>
+<li>magick/constitute.c (PingImage): Intentionally clear
+user/elapsed timer when ping is used on an image since the results
+are misleading.</li>
+<li>magick/image.c (DescribeImage): Only display pixel read rate if
+the time accumulated is at least the timer's resolution.</li>
+<li>magick/cache.c (OpenCache): Fix a memory resource leak noticed
+by Stefan v. Wachter <<a class="reference external" href="mailto:svwa-dev%40mnet-online.de">svwa-dev<span>@</span>mnet-online<span>.</span>de</a>>. This error with
+keeping track of resources may eventually cause GraphicsMagick to
+run slower and slower due to using disk-based images rather than
+memory-based images.</li>
+</ul>
+</blockquote>
+<p>2005-04-07 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40glennrp.com">glennrp<span>@</span>glennrp<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: encoder now accepts image->depth other than 8 and 16.</li>
+</ul>
+</blockquote>
+<p>2005-04-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (WriteDPXImage): First pass at a new SMPTE268M-2003
+DPX writer.</li>
+</ul>
+</blockquote>
+<p>2005-04-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (AllocateString): Performance enhancement.
+(CloneString): Performance enhancement.
+(ConcatenateString): Performance enhancement.</li>
+</ul>
+</blockquote>
+<p>2005-03-31 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40glennrp.com">glennrp<span>@</span>glennrp<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c: revised EOF test. It was rejecting good image
+files. Needs more work.</li>
+</ul>
+</blockquote>
+<p>2005-03-30 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40glennrp.com">glennrp<span>@</span>glennrp<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pnm.c (ReadPNMImage): Throw a "Corrupt Image" exception
+if EOF is encountered while reading scanlines in P1, P2, P3, or P4
+formatted images (P5 and P6 were OK).</li>
+</ul>
+</blockquote>
+<p>2005-03-29 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40glennrp.com">glennrp<span>@</span>glennrp<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sgi.c (ReadSGIImage): Throw a "Corrupt Image" exception
+if EOF is encountered while reading scanlines.</li>
+</ul>
+</blockquote>
+<p>2005-03-28 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40glennrp.com">glennrp<span>@</span>glennrp<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (ReadJPEGImage): Throw a "Corrupt Image" exception
+if EOF is encountered while reading scanlines.</li>
+<li>coders/pcx.c (ReadPCXImage): Throw a "Corrupt Image" exception
+if EOF is encountered while reading pixels.</li>
+</ul>
+</blockquote>
+<p>2005-03-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): First pass at a new SMPTE268M-2003
+DPX reader.</li>
+<li>magick/bit_stream.h (WordStreamLSBRead): New function to parse
+values from a stream which is defined by 32-bit words. Values are
+read starting with the least significant bits.</li>
+</ul>
+</blockquote>
+<p>2005-03-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ExtensionTagsInitialize): Fix conditional use of
+TIFFSetTagExtender().</li>
+</ul>
+</blockquote>
+<p>2005-03-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/endian.c: Imported libtiff's swab.c since its functions
+are so useful and well-tested.</li>
+<li>magick/utility.c (FormatSize): Extend to support incredibly
+large sizes.</li>
+<li>magick/image.c (DescribeImage): Use GetTimerResolution() when
+computing pixels-per-second rate in order to avoid computing
+astronomical rates when the time consumed is too small to measure.</li>
+<li>magick/timer.c (GetTimerResolution): New function to return the
+timer's resolution.</li>
+</ul>
+</blockquote>
+<p>2005-03-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdf.c (WritePDFImage): Eliminate cause of annoying
+warning when PDFs are read by Ghostscript 8.5.</li>
+</ul>
+</blockquote>
+<p>2005-03-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.h (lt_dlerror): Needed to provide a mapping to
+NTdlerror().</li>
+<li>coders/tiff.c (TIFFErrors): Update to make thread safe via
+thread specific data.
+(TIFFWarnings): Update to make thread safe via thread specific
+data.</li>
+<li>magick/tsd.c (MagickTsdKeyCreate): New function to support
+thread specific data.
+(MagickTsdKeyDelete): ditto
+(MagickTsdSetSpecific): ditto
+(MagickTsdGetSpecific): ditto.</li>
+</ul>
+</blockquote>
+<p>2005-03-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (ReplaceImageColormap): New function to replace
+the image colormap with a user-provided one. Colormap indexes are
+adjusted to point to identical colors in the new colormap.</li>
+<li>magick/nt_base.h: Reorganized a bit to cluster code supporting
+similar features in the same area of the header.</li>
+<li>magick/nt_base.c: Renamed wrappers for standard functions so
+that they have the prefix <cite>NT</cite>. Macros are used to apply the new
+names. This assures that there will not be conflicts if the library
+is linked with a different package's wrapper functions.</li>
+</ul>
+</blockquote>
+<p>2005-03-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/quantize.c (GrayscalePseudoClassImage): Moved to here
+from image.c. Added support for is_monochrome.</li>
+</ul>
+</blockquote>
+<p>2005-03-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>jp2: Updated Jasper library to version 1.701.0.</li>
+<li>magick/nt_base.c (NTGhostscriptFonts): Fixed a coding error
+which was added when strcpy/strcat code was replaced with
+strlcpy/strlcat. Ghostscript fonts were not being found.</li>
+<li>magick/constitute.c (ReadImage): Don't attempt to access image
+members if image pointer is null. Oops!</li>
+</ul>
+</blockquote>
+<p>2005-03-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageType): Bilevel image is not required to
+be PseudoClass type.</li>
+<li>coders/mpc.c (WriteMPCImage): Persist is_monochrome and
+is_grayscale flags.
+(ReadMPCImage): Restore is_monochrome and is_grayscale flags.</li>
+<li>magick/constitute.c (WriteImage): Extended logging to include
+monochrome and grayscale flags.
+(ReadImage): Extended logging to include monochrome and grayscale
+flags.</li>
+<li>magick/image.c (DescribeImage): Include the effective pixel I/O
+rate alongside the image read/write time. This provides an easier
+way to evaluate image read/write performance when looking at
+<cite>identify</cite> or <cite>convert -verbose</cite> output.</li>
+<li>coders/sun.c (ReadSUNImage): Ensure that pixel length value does
+not overflow for large images.</li>
+</ul>
+</blockquote>
+<p>2005-03-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/cache.c (SetImagePixels): Improved documentation.
+(GetImagePixels): Improved documentation.</li>
+</ul>
+</blockquote>
+<p>2005-03-10 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40glennrp.com">glennrp<span>@</span>glennrp<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Avoid attempting to write indexed PNG when
+a color entry has more than one opacity level. The PNG format
+supports this but GM's colormap does not, so erroneous files
+were being written.</li>
+</ul>
+</blockquote>
+<p>2005-03-09 Arne Rusek <<a class="reference external" href="mailto:zonk%40matfyz.cz">zonk<span>@</span>matfyz<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (GenerateEXIFAttribute): Offset type
+correction to fix loop termination if size_t type is not <cite>long</cite>.</li>
+</ul>
+</blockquote>
+<p>2005-03-09 Alexander Yaworsky <<a class="reference external" href="mailto:yaworsky%40users.sourceforge.net">yaworsky<span>@</span>users<span>.</span>sourceforge<span>.</span>net</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jbig.c (WriteJBIGImage): JBIG was writing an empty output
+file. Apparently libjbig parameters have changed. Setting l0
+parameter of jbg_enc_options to zero instead of -1 (like in
+jbigkit's pbmtools) solved the problem.</li>
+</ul>
+</blockquote>
+<p>2005-03-07 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li>BCBMagickmagickGM_magick.bpr: Updated to reflect changes since
+last update.</li>
+<li>BCBMagickmagicklibMagick.bpr: Updated to reflect changes since
+last update.</li>
+</ul>
+</blockquote>
+<p>2005-03-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/alpha_composite.h (AlphaComposite): Moved AlphaComposite
+to new alpha_composite.h header since it was causing porting
+problems.</li>
+<li>magick/constitute.h (enum QuantumType): Added CIEYQuantum and
+CIEXYZQuantum quantum import options.</li>
+<li>coders/tiff.c (ReadTIFFImage): Import LogLuv image data within
+GraphicsMagick (rather than libtiff) so that color resolution is
+not lost. Results in a small speedup as well.</li>
+<li>magick/constitute.c (ImportImagePixelArea): Add a speed-up for
+importing bi-level images. Add support for importing pixels in
+CIE XYZ and CIE Y colorspaces.</li>
+<li>coders/tiff.c (ReadTIFFImage): Support reading TIFF images which
+fail to properly scale the samples to the sample size (e.g. 12
+bits in a 16-bit sample).
+(WriteTIFFImage): Adjustments to strip-size (rows-per-strip)
+estimation.</li>
+<li>magick/constitute.c (ExportImagePixelArea): Support exporting
+unsigned samples with values which span only part of the range.
+For example, 12 bit data may be exported within 16 bit samples,
+with a value range of 0 to 4095.
+(ImportImagePixelArea): Support importing unsigned samples with
+values which span only part of the range.</li>
+</ul>
+</blockquote>
+<p>2005-02-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Support reading TIFF files in
+IEEEFP format.
+(WriteTIFFImage): Support writing TIFF files in IEEEFP format.</li>
+<li>magick/constitute.c (ExportImagePixelArea): Support exporting
+floating point data.
+(ImportImagePixelArea): Support importing floating point data.</li>
+</ul>
+</blockquote>
+<p>2005-02-26 Albert Chin-A-Young <<a class="reference external" href="mailto:china%40thewrittenword.com">china<span>@</span>thewrittenword<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>acinclude.m4 (AC_CXX_IOS_BINARY): Added macro to detect if the
+C++ compiler lacks support for ios::binary.</li>
+<li>configure.ac: Use AC_CXX_IOS_BINARY.</li>
+</ul>
+</blockquote>
+<p>2005-02-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Read grayscale TIFFs as
+DirectClass rather than promoting to PseudoClass. Fix improper
+multiple repeated "disassociate" operations when reading planar
+images which contain an alpha channel.
+(WriteTIFFImage): Fix improper multiple repeated "associate"
+operations when writing planar images with an alpha channel.</li>
+</ul>
+</blockquote>
+<p>2005-02-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>win2k/IMDisplay/IMDisplayView.cpp (DoDisplayImage): Use
+TextureImage to apply background pattern.</li>
+<li>magick/image.c (TextureImage): Alpha blend the texture onto the
+background if the image has a matte channel.</li>
+<li>magick/constitute.h (enum QuantumType): Eliminated
+GrayInvertedQuantum and GrayInvertedAlphaQuantum which were added
+since GraphicsMagick 1.1. Replaced this "inverted" gray
+functionality with the grayscale_inverted flag in
+ExportPixelAreaOptions and ImportPixelAreaOptions.</li>
+<li>magick/constitute.c (ExportImagePixelArea): Added an extra
+parameter for passing seldom used options via an
+ExportPixelAreaOptions structure.
+(ImportImagePixelArea): Added an extra parameter for passing
+seldom used options via an ImportPixelAreaOptions structure.
+(ExportPixelAreaOptionsInit): New function to initialize the
+ExportPixelAreaOptions structure with defaults.
+(ImportPixelAreaOptionsInit): New function to intialize the
+ImportPixelAreaOptions structure with defaults.</li>
+<li>coders/jpeg.c (WriteJPEGImage): Don't use jpeglib private
+BITS_IN_JSAMPLE definition to select JPEG bit depth.</li>
+<li>coders/tiff.c (ReadTIFFImage): Support using -define
+tiff:alpha={unspecified|associated|unassociated} to specify the
+alpha channel type in case the alpha channel is marked
+incorrectly.
+Properly read associated alpha images.
+(WriteTIFFImage): Support using -define
+tiff:alpha={unspecified|associated|unassociated} to override the
+alpha channel type.
+Properly write associated alpha images by default.</li>
+</ul>
+</blockquote>
+<p>2005-02-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WritePTIFImage): Ensure that pyramid image frames
+are the same type as the original image.
+(WriteTIFFImage): Added support for writing tiled TIFF.</li>
+</ul>
+</blockquote>
+<p>2005-01-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (TraceBezier): Avoid probable bug under Visual
+C++ 7.0 or later due to the argument to pow not being promoted to
+double.</li>
+</ul>
+</blockquote>
+<p>2005-01-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Re-wrote TIFF writing code.</li>
+<li>magick/image.h (MaxValueGivenBits): Renamed MaxRGBGivenBits
+macro to MaxValueGivenBits.</li>
+<li>magick/constitute.h (enum QuantumType): Added UndefinedQuantum.</li>
+<li>magick/static.c (RegisterStaticModules): Support compiling
+without PNG.</li>
+</ul>
+</blockquote>
+<p>2005-01-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/color.c (IsPaletteImage): Fix memory leak reported by
+Stefan v. Wachter <<a class="reference external" href="mailto:svwa-dev%40mnet-online.de">svwa-dev<span>@</span>mnet-online<span>.</span>de</a>>.</li>
+<li>magick/Makefile.am (MAGICK_INCLUDE_HDRS): Needed to install
+magick/operator.h.</li>
+<li>coders/tiff.c (ReadTIFFImage): Re-wrote TIFF reading code again
+for more flexibility and performance.</li>
+</ul>
+</blockquote>
+<p>2005-01-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Remove --disable-lzw option and HasLZW define.
+LZW support is always enabled now.</li>
+</ul>
+</blockquote>
+<p>2005-01-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tga.c (WriteTGAImage): Incorporated patch from Stefan
+v. Wachter to enable writing grayscale images as well as adding
+more image type option smarts.</li>
+<li>coders/psd.c (ReadPSDImage): Fix stack overflow vulnerability
+reported by Andrei Nigmatulin. See <a class="reference external" href="http://lwn.net/Articles/119713/">http://lwn.net/Articles/119713/</a>
+for details.</li>
+</ul>
+</blockquote>
+<p>2005-01-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>win2k/IMDisplay/IMDisplayDoc.cpp (DoReadImage): Ensure that image
+is in RGB color space after being read since this is what Windows
+expects.</li>
+</ul>
+</blockquote>
+<p>2005-01-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Handle extra samples in scanline
+TIFFs.</li>
+</ul>
+</blockquote>
+<p>2005-01-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (DescribeImage): Report statistics for a virtual
+gray channel for grayscale images rather than discrete red, green,
+and blue.</li>
+<li>PerlMagick/Makefile.nt: JNG and JP2 to test list.</li>
+<li>configure.ac: Changed --without-fpx to --with-fpx due to
+decision to default FlashPIX to <cite>no</cite>. FlashPIX library is not
+very portable and is only known to work properly under SPARC
+Solaris and Windows.</li>
+<li>NEWS: Updated with latest news.</li>
+<li>lcms: Updated to LCMS 1.14.</li>
+</ul>
+</blockquote>
+<p>2005-01-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jp2.c (ReadJP2Image): Handle images in YCBCR colorspace.
+(ReadJP2Image): Retrieve and store an ICC ICM color profile if
+present.</li>
+<li>PerlMagick/t/tiff/read.t: Added test for reading truecolor
+planar TIFF image.
+Added test for reading 32-bit TrueColor TIFF image.
+Added test for reading 32-bit grayscale TIFF image.</li>
+<li>coders/tiff.c (ReadTIFFImage): Fixed stripped TIFF reader.</li>
+</ul>
+</blockquote>
+<p>2005-01-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Only set TIFFTAG_PREDICTOR to 2
+for bits-per-sample values that libtiff supports.</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2006-11-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/Magick++/Image.html: Fix documentation regarding retrieving
+EXIF attribute.</li>
+<li>magick/command.c: Fix typo in usage messages.</li>
+</ul>
+</blockquote>
+<p>2006-11-02 Daniel Kobras <<a class="reference external" href="mailto:kobras%40debian.org">kobras<span>@</span>debian<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c: (ReadDCMImage) Prevent buffer overflow of
+<cite>photometric</cite> array in DCM coder. Original patch thanks to
+M Joonas Pihlaja. (CVE-2006-5456)</li>
+<li>coders/palm.c: (ReadPALMImage) Fix heap overflows of <cite>one_row</cite>
+array in PALM coder. Original patch thanks to M Joonas Pihlaja.
+(CVE-2006-5456)</li>
+</ul>
+</blockquote>
+<p>2006-10-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Updated libtool to latest CVS head version (1.2352 2006/10/24)
+in order to fix a bootstrap nit.</li>
+</ul>
+</blockquote>
+<p>2006-10-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Updated autoconf to version 2.60, automake to version 1.10, and
+libtool to latest CVS head version (1.2348 2006/10/22).</li>
+</ul>
+</blockquote>
+<p>2006-09-11 Daniel Kobras <<a class="reference external" href="mailto:kobras%40debian.org">kobras<span>@</span>debian<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xcf.c (ReadBlobStringWithLongSize): Add new parameter <cite>max</cite>
+to prevent overflowing the <cite>string</cite> array. (CVE-2006-3743)
+(ReadOneLayer): Adjust callers of ReadBlobStringWithLongSize(), and
+guard against infinite loops on premature end-of-file.
+(ReadXCFImage): Adjust callers of ReadBlobStringWithLongSize(), and
+guard against infinite loops on premature end-of-file.</li>
+</ul>
+</blockquote>
+<p>2006-09-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sgi.c (ReadSGIImage): Mostly applied Debian patch for
+CVE-2006-4144 security issue related to RLE decoding. Also added
+complete verification of file header.</li>
+<li>magick/image.c (ComputePixelError): Add progress monitor.
+(GetImageStatisticsMean): Call progress monitor less often.
+(GetImageStatisticsVariance): Call progress monitor less often.</li>
+</ul>
+</blockquote>
+<p>2006-08-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): ImageInfo <cite>endian</cite> option now
+controls TIFF byte-order rather than bit-order when writing.</li>
+<li>coders/png.c (ReadOnePNGImage): Fix compilation problem. Patch
+submitted by Aron Stansvik.</li>
+</ul>
+</blockquote>
+<p>2006-07-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (WriteJPEGImage): Clear the JPEG library
+structures in order to ensure a completely clean slate.</li>
+</ul>
+</blockquote>
+<p>2006-06-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (ConvertImageCommand): Fix memory leaks which
+occured when an image was not returned.</li>
+<li>magick/command.c (IdentifyImageCommand): Ditto.</li>
+<li>magick/command.c (MogrifyImageCommand): Ditto.</li>
+</ul>
+</blockquote>
+<p>2006-06-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Add mention of -resample to convert and
+mogrify usage messages.</li>
+</ul>
+</blockquote>
+<p>2006-05-31 Ralf Wildenhues <<a class="reference external" href="mailto:Ralf.Wildenhues%40gmx.de">Ralf<span>.</span>Wildenhues<span>@</span>gmx<span>.</span>de</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Fix arguments to AC_CHECK_HEADER.</li>
+</ul>
+</blockquote>
+<p>2006-05-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): -define tiff:alpha= override was
+only working if the TIFFTAG_EXTRASAMPLES tag was present. Now it
+is always available when an alpha channel is present.</li>
+</ul>
+</blockquote>
+<p>2006-05-11 JH <<a class="reference external" href="mailto:jh%40ops.everybox.com">jh<span>@</span>ops<span>.</span>everybox<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>GraphicsMagick.spec.in (files devel): Include
+%{_libdir}/lib%{name}Wand.so.</li>
+</ul>
+</blockquote>
+<p>2006-05-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c (NTGhostscriptEnumerateVersions): Recent GNU
+Ghostscript identifies itself as "GPL Ghostscript".</li>
+</ul>
+</blockquote>
+<p>2006-04-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tiff: Updated bundled libtiff to version 3.8.2.</li>
+</ul>
+</blockquote>
+<p>2006-04-05 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c: Sets image is_grayscale flag as well as added more
+symbolic constants.</li>
+</ul>
+</blockquote>
+<p>2006-04-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (IMAGE_DATA_ROUNDING): Thanks to Steve Sloan for
+noticing that 8K is 8192 rather than 8092. Added a define to
+allow tailoring the pixel data alignment boundary in case 8K is
+not the right answer for some reason.</li>
+</ul>
+</blockquote>
+<p>2006-03-20 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c: Ensure that unusued opacity channel is set to opaque.</li>
+<li>PerlMagick/t/input.art: New ART test image.</li>
+<li>PerlMagick/t/input8.mat: New MATLAB test image (8-bit indexed).</li>
+<li>PerlMagick/t/input_dbl.mat: New MATLAB test image (double grey)</li>
+<li>PerlMagick/t/input_rgb.mat: New MATLAB test image (8-bit RGB)</li>
+</ul>
+</blockquote>
+<p>2006-03-19 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c: Use symbolic constants rather than plain numbers
+so the module is more maintainable. Correct the format for the
+day of the week.</li>
+</ul>
+</blockquote>
+<p>2006-03-13 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c (WriteMATLABImage): Add RGB writer support for
+MATLAB format.</li>
+</ul>
+</blockquote>
+<p>2006-03-11 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c (ReadMATImage): RGB support for MAT reader.</li>
+</ul>
+</blockquote>
+<p>2006-03-02 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c: Fixes for observed crash. Byte and word formats
+are working.</li>
+</ul>
+</blockquote>
+<p>2006-02-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/environment.imdoc: MAGICK_FONT_PATH has not been supported
+since 1.1. Remove mention of it!</li>
+</ul>
+</blockquote>
+<p>2006-02-23 Mike Chiarappa <<a class="reference external" href="mailto:mikechiarappa%40libero.it">mikechiarappa<span>@</span>libero<span>.</span>it</a>></p>
+<blockquote>
+<ul class="simple">
+<li>BCBMagick: Updated to latest changes</li>
+</ul>
+</blockquote>
+<p>2006-02-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sgi.c (ReadSGIImage): Properly compute image depth for
+16-bit SGI image files.</li>
+</ul>
+</blockquote>
+<p>2006-01-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (GetExecutionPathUsingName): Search executable
+search path for binary.</li>
+</ul>
+</blockquote>
+<p>2006-01-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage, WriteDPXImage): Alpha channel in DPX
+uses zero, or reference black, to represent an opaque pixel.</li>
+</ul>
+</blockquote>
+<p>2006-01-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/semaphore.c (AllocateSemaphoreInfo): Allow semaphores to
+recurse on POSIX systems which support recursive semaphores but
+also warn if the semaphore recurses.</li>
+<li><dl class="first docutils">
+<dt>magick/log.c (SetLogEventMask): Avoid deadlock if invoked before</dt>
+<dd>log.mgk has been loaded.</dd>
+</dl>
+</li>
+<li>magick/attribute.c (GenerateEXIFAttribute): Fix memory leak on
+error which was reported by Micha³ Kowalczuk.</li>
+</ul>
+</blockquote>
+<p>2006-01-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (ReadImage): Avoid crash if delegate fails
+to return image.</li>
+</ul>
+</blockquote>
+<p>2006-01-03 Daniel Kobras <<a class="reference external" href="mailto:kobras%40debian.org">kobras<span>@</span>debian<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (GenerateEXIFAttribute): Fix EXIF IFD stack
+overflow vulnerability.</li>
+<li>configure.ac: Fix typo in HTMLDecodeDelegate.</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2007-12-23 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/configure/configure.rc: Better positioning of frog,
+changed original ImageMagick messages.</li>
+<li>VisualMagick/configure/configure.exe: New build.</li>
+</ul>
+</blockquote>
+<p>2007-12-22 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Fix compilability issue for Microsoft Visual
+Studio 6.</li>
+</ul>
+</blockquote>
+<p>2007-12-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Use some improved tests for POSIX standard types
+available in Autoconf 2.61.
+Add support for configuring a magick_uintmax_t type.
+Added support for configuring a magick_uintptr_t type.</li>
+</ul>
+</blockquote>
+<p>2007-12-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.h (MagickSafeMultiplySize_t): New function to
+perform a safe multiply. A multiplication overflow results in
+zero.
+(MagickAllocateMemory): Check for size_t value truncation/overflow
+and zero size before deciding to allocate memory. Any detected
+failure results in a NULL pointer being returned.
+(MagickReallocMemory): Add a type parameter to use in cast in
+order to avoid C++ portability problem.</li>
+<li>PerlMagick/Magick.xs: Eliminate use of deprecated methods.</li>
+<li>magick/memory.c (MagickAcquireMemory): New function to allocate
+memory.
+(MagickAcquireMemoryArray): New function to allocate memory for an
+array of objects.
+(MagickCloneMemory): New function to intelligently copy memory.
+(MagickReallocateMemory): New function to re-allocate memory.
+(MagickReleaseMemory): New function to deallocate memory.</li>
+<li>magick/deprecate.c (AcquireMemory): Deprecated in favor of new
+function MagickAcquireMemory().
+(CloneMemory): Deprecated in favor of new function
+MagickCloneMemory().
+(LiberateMemory): Deprecated in favor of new function
+MagickReleaseMemory().
+(ReacquireMemory): Deprecated in favor of new function
+MagickReallocateMemory().</li>
+</ul>
+</blockquote>
+<p>2007-11-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (ReadImage): Log colorspace of returned image.
+(WriteImage): Log colorspace of image to be written.</li>
+<li>coders/{miff.c,mpc.c,tga.c,tiff.c}: Use MagickBoolToString().</li>
+<li>magick/{constitute.c,xwindow.c}: Use MagickBoolToString().</li>
+<li>magick/image.h (MagickBoolToString): New macro to convert truth
+value to a constant "True" or "False" string.</li>
+</ul>
+</blockquote>
+<p>2007-11-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (IsImagesEqual): Allow comparing images if the
+colorspace enumeration is different but the images are both an RGB
+type.</li>
+</ul>
+</blockquote>
+<p>2007-11-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Add support for -monitor option to <cite>animate</cite>,
+<cite>display</cite>, and <cite>import</cite>.</li>
+<li>coders/fpx.c (WriteFPXImage): Fix compilation problem.</li>
+<li>coders/dpx.c (TentUpsampleChroma): Fix access beyond array. Use
+integer calculations where possible.</li>
+</ul>
+</blockquote>
+<p>2007-11-07 Andy Armstrong <<a class="reference external" href="mailto:andy%40hexten.net">andy<span>@</span>hexten<span>.</span>net</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/setattribute.t: Fix for typo which breaks
+Test::Harness 3.00.</li>
+</ul>
+</blockquote>
+<p>2007-10-20 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li><dl class="first docutils">
+<dt>mat.c: Attempt to read <cite>logic</cite> type modification</dt>
+<dd>as monochrome image.</dd>
+</dl>
+</li>
+</ul>
+</blockquote>
+<p>2007-10-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (ReadBlob?SBFoo): Return 0 on EOF conditions
+rather than a magic value concocted using ~0. The magic value was
+very sensitive to the size/range of the type used to pass and
+store it, leading to increased possibility of error. There was
+also concern that sometimes a successfully read value may match
+the magic value. Added documentation that EOFBlob() may be used
+to determine that the blob is in EOF state.</li>
+<li>coders/pix.c (ReadPIXImage): Avoid reliance on a particular
+magic value being returned from ReadBlobMSBShort on EOF.</li>
+<li>coders/avs.c (ReadAVSImage): Avoid reliance on a particular
+magic value being returned from ReadBlobMSBLong() on EOF.</li>
+</ul>
+</blockquote>
+<p>2007-10-07 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wpg.c: Monochrome images are not using palette -
+palette is discarded in this case.</li>
+</ul>
+</blockquote>
+<p>2007-10-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.h: Blob I/O APIs now use sized types so that passed
+and returned data values are a specific size rather than
+architecture dependent.</li>
+<li>PerlMagick/t/read.t: Added read test for unsigned 32-bit LSB MAT
+format.</li>
+</ul>
+</blockquote>
+<p>2007-10-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dib.c (ReadDIBImage): Use appropriate sized cast for DIB
+width and height values. Validate width and height values.</li>
+<li>coders/bmp.c (ReadBMPImage): Use appropriate sized cast for BMP
+width and height values.</li>
+<li>magick/colorspace.c (RGBTransformImage): Use a better rounding
+algorithm when converting to HSL/HWB colorspaces.</li>
+<li>magick/gem.c (TransformHSL): Avoid GCC opimization bug on
+Opteron which caused wrong results. Ensure that returned values
+fall within bounds 0.0 to 1.0.
+(TransformHWB): Avoid GCC opimization bug on
+Opteron which caused wrong results. Ensure that returned values
+fall within bounds 0.0 to 1.0.</li>
+<li>PerlMagick/t/ttf/read.t: Relax strictness quite a bit for TTF
+read tests in order to allow somewhat different FreeType output.</li>
+</ul>
+</blockquote>
+<p>2007-09-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/colorspace.c (RGBTransformImage): Add missing break
+statement. HWB colorspace was used rather than HSL.
+(TransformRGBImage): Add missing break
+statement. HWB colorspace was used rather than HSL.</li>
+</ul>
+</blockquote>
+<p>2007-09-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sun.c (ReadSUNImage): Properly report SUN image depth.</li>
+</ul>
+</blockquote>
+<p>2007-09-28 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Ability to write multiple images to one MAT file.
+Fixed bug - incorrect matrix size for gray image.</li>
+</ul>
+</blockquote>
+<p>2007-09-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/shear.c (IntegralRotateImage): Rotation by 270 degrees
+was wrong. It was flipped from what it should be.</li>
+</ul>
+</blockquote>
+<p>2007-09-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (CommandProgressMonitor): Remove any preceding
+whitespace in the task descriptions so that we don't need to
+update all of the task descriptions right away.</li>
+<li>magick/colorspace.c (RGBTransformImage): Improve progress monitor message.
+(TransformRGBImage): Improve progress monitor message.</li>
+<li>coders/miff.c (ReadMIFFImage): Add read progress monitor support.</li>
+</ul>
+</blockquote>
+<p>2007-09-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdf.c (WritePDFImage): Fix writing PDF with CCITT
+compression. Addresses SourceForge bug 1209177 "TIFF to PDF CCITT
+compression fails".</li>
+</ul>
+</blockquote>
+<p>2007-09-14 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Ability to read multiple images from one MAT file.
+changed ExtendedSignedIntegralType to magick_off_t that better
+corresponds to file positioning.</li>
+</ul>
+</blockquote>
+<p>2007-09-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdf.c (WritePDFImage): Use ThumbnailImage() to create
+thumbnail.</li>
+<li>coders/preview.c (WritePreviewImage): Use ThumbnailImage() to
+create thumbnail.</li>
+<li>coders/xpm.c (WritePICONImage): Use ThumbnailImage() to create
+thumbnail.</li>
+</ul>
+</blockquote>
+<p>2007-09-14 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Several warnings has been suppressed.</li>
+</ul>
+</blockquote>
+<p>2007-09-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Fix writing to pipes and other
+non-seekable output destinations.</li>
+<li>magick/blob.c (WriteBlobFile): New function to copy a disk file
+to a blob stream.</li>
+<li>magick/profile.c (ProfileImage): Fix removing profiles.</li>
+</ul>
+</blockquote>
+<p>2007-09-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (png_flush_data): Don't invoke SyncBlob() since it
+does far more than force data to the output file.
+(ReadPNGImage): Make sure that PNG read errors are reported to the
+user.</li>
+<li>coders/jpeg.c (TerminateDestination): Don't invoke SyncBlob()
+since it does far more than force data to the output file.</li>
+<li>magick/blob.c (SyncBlob): Remove from public interface.</li>
+</ul>
+</blockquote>
+<p>2007-09-12 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Allowed to read signed integer matrices.
+Fixed loop break.</li>
+</ul>
+</blockquote>
+<p>2007-09-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Ensure that selected photometric
+most closely matches the user's expectation. Remove compression
+if requested compression type is not compatible with the selected
+photometric.</li>
+</ul>
+</blockquote>
+<p>2007-09-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/shear.c (IntegralRotateImage): Use tiles to speed up
+rotation by 90 or 270 degrees.</li>
+</ul>
+</blockquote>
+<p>2007-09-07 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c The flop image has been eliminated in a reader.
+Code has been shrinked a little bit.</li>
+</ul>
+</blockquote>
+<p>2007-09-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (GetImageCharacteristics): Add progress monitor support.</li>
+<li>magick/color.c (IsMonochromeImage): Add progress monitor support.
+(IsGrayImage): Add progress monitor support.
+(IsOpaqueImage): Add progress monitor support.</li>
+<li>coders/dpx.c (ReadDPXImage): Added progress indication.</li>
+<li>coders/cineon.c (WriteCINEONImage): Added progress indication.</li>
+<li>magick/command.c : Added a -monitor command option for
+<cite>composite</cite>, <cite>convert</cite>, <cite>identify</cite>, <cite>mogrify</cite>, and <cite>montage</cite> in
+order to enable a simple progress indicator.</li>
+</ul>
+</blockquote>
+<p>2007-09-06 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Write native gray MAT data when gray image is detected.</li>
+</ul>
+</blockquote>
+<p>2007-09-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (GetExecutionPath): Add support for Apple OS-X,
+Linux, and FreeBSD.</li>
+</ul>
+</blockquote>
+<p>2007-09-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: For Windows MinGW-based build, find Ghostscript
+fonts installed under C:/Program Files/.</li>
+<li>VisualMagick/bin/delegates.mgk: Adjust quoting to Ghostscript arguments
+so that Ghostscript DLL is passed correct commands.</li>
+<li>config/delegates.mgk.in: Adjust quoting to Ghostscript arguments
+so that Ghostscript DLL is passed correct commands.</li>
+<li>configure.ac: Provide defaults for GSColorAlphaDevice and GSGrayDevice.</li>
+<li>magick/nt_base.c (NTGhostscriptGetString): Support "GPL Ghostscript".</li>
+</ul>
+</blockquote>
+<p>2007-09-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/ps.c (WritePSImage): Improved Postscript writer
+performance.</li>
+</ul>
+</blockquote>
+<p>2007-09-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/profile.c (AllocateImageProfileIterator): New function to
+allocate an image profile iterator.
+(DeallocateImageProfileIterator): New function to deallocate an
+image profile iterator.
+(NextImageProfile): New function to advance the image profile
+iterator to the next profile.</li>
+<li>magick/image.h (Image): Profiles are now stored in a generic
+container. As planned years ago, the color_profile, iptc_profile,
+generic_profile, and generic_profiles members are now removed.</li>
+</ul>
+</blockquote>
+<p>2007-09-01 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c Ability to read true color bitmap with invalid palette size
+like other readers do.</li>
+</ul>
+</blockquote>
+<p>2007-08-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (ClonePixelCacheMethods): Remove DLL export.
+(DestroyCacheInfo): Remove DLL export.
+(GetCacheInfo): Remove DLL export.
+(ReferenceCache): Remove DLL export.</li>
+</ul>
+</blockquote>
+<p>2007-08-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageType): More tweaks to obtain the desired
+behavior when converting to a bilevel image.</li>
+<li>coders/tiff.c (WriteTIFFImage): Logic which decided the output
+subformat to write was too convoluted to understand, and in fact
+palette images were not be written sometimes when they should be
+(bug added on 2007-08-19). Deleted the convoluted code and
+replaced with a different design which should be more correct and
+flexible.
+(ReadTIFFImage): Decided to read bilevel TIFF using a colormap
+since there are significant internal advantages to doing so.
+However, the writer is carefully designed to output normal bilevel
+TIFF so this should not annoy TIFF users.</li>
+<li>magick/constitute.c (ImportImagePixelArea): Re-wrote grayscale
+pseudoclass import to be more efficient and more tidy.</li>
+</ul>
+</blockquote>
+<p>2007-08-30 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/art.c Added ART writer</li>
+</ul>
+</blockquote>
+<p>2007-08-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (ReadBlobLSBFloat): Promoted to be a public
+interface (was in mat.c).
+(ReadBlobMSBFloat):Promoted to be a public interface (was in
+mat.c).</li>
+</ul>
+</blockquote>
+<p>2007-08-29 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/art.c InsertRow has been replaced by ImportImagePixelArea</li>
+</ul>
+</blockquote>
+<p>2007-08-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pnm.c (ReadPNMImage): PNM "raw" formats are now read
+using ImportImagePixelArea()</li>
+<li>magick/constitute.c (ExportImagePixelArea): Added an optional
+export_info parameter for returning information back to the user.
+(ImportImagePixelArea): Added an optional import_info parameter
+for returning information back to the user.</li>
+<li>coders/jbig.c (ReadJBIGImage): Use ImportImagePixelArea().
+(WriteJBIGImage): Use ExportImagePixelArea();</li>
+<li>coders/tiff.c (WriteTIFFImage): Make compression logic a bit
+more tidy.</li>
+<li>coders/pcx.c (WritePCXImage): Use GetImageCharacteristics().</li>
+<li>coders/pcl.c (WritePCLImage): Use GetImageCharacteristics().</li>
+<li>coders/dib.c (WriteDIBImage): Use GetImageCharacteristics().</li>
+<li>coders/xpm.c (WritePICONImage): Use GetImageCharacteristics().</li>
+<li>coders/viff.c (WriteVIFFImage): Use GetImageCharacteristics().</li>
+<li>coders/tga.c (WriteTGAImage): Use GetImageCharacteristics().</li>
+<li>coders/sgi.c (WriteSGIImage): Use GetImageCharacteristics().</li>
+<li>coders/ps2.c (WritePS2Image): Use GetImageCharacteristics().</li>
+<li>coders/pdf.c (WritePDFImage): Use GetImageCharacteristics().</li>
+<li>coders/palm.c (WritePALMImage): Use GetImageCharacteristics().</li>
+<li>coders/ps.c (WritePSImage): Use GetImageCharacteristics().</li>
+<li>coders/jp2.c (WriteJP2Image): Use GetImageCharacteristics().</li>
+<li>coders/jpeg.c (WriteJPEGImage): Use GetImageCharacteristics().</li>
+<li>PerlMagick/t/read.t: Added read test for LSB <cite>float</cite> MAT.</li>
+</ul>
+</blockquote>
+<p>2007-08-26 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c: MAT reader now extensively uses ImportImagePixelArea.</li>
+</ul>
+</blockquote>
+<p>2007-08-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/Makefile.am: Add rwblob and rwfile tests for MAT format.</li>
+<li>magick/constitute.c: Re-wrote Export/Import Float/Double macros
+because they did not actually work right, and to eliminate the
+performance penalty for native order.</li>
+</ul>
+</blockquote>
+<p>2007-08-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/Magick.xs: Add support for "native" endian parameter
+in PerlMagick.</li>
+<li>magick/command.c: Utilities now understand "native" as an
+argument to -endian.</li>
+<li>magick/image.h (enum EndianType): Added NativeEndian enum value.</li>
+<li>configure.ac: Test libtiff for TIFFSwabArrayOfTriples().</li>
+<li>magick/constitute.c (ExportImagePixelArea): Support export in
+little, big, and native endian.
+(ImportImagePixelArea): Support import in little, big, and native
+endian.</li>
+</ul>
+</blockquote>
+<p>2007-08-23 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c (WriteMATLABImage): MAT writer uses
+ExportImagePixelArea() now. Fix issues noticed by valgrind.</li>
+</ul>
+</blockquote>
+<p>2007-08-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pnm.c (WritePNMImage): Use <cite>-quality 0</cite> rather than
+<cite>-compress none</cite> to select the PNM ASCII subformats. This change
+is made based on the principle of least surprise.</li>
+<li>magick/constitute.c (ExportImagePixelArea): Add a GrayQuantum
+implementation for exporting from two color PsuedoClass.</li>
+<li>coders/pnm.c (WritePNMImage): Use GetImageCharacteristics() and
+ExportImagePixelArea() in implementation.</li>
+</ul>
+</blockquote>
+<p>2007-08-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (ExportImagePixelArea): Performance
+improvements.
+(ImportImagePixelArea): Performance improvements.</li>
+</ul>
+</blockquote>
+<p>2007-08-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (IdentifyImageCommand): If "%r" is present in
+-format specifier, then read whole image.</li>
+<li>magick/utility.c (TranslateTextEx): Undocumented "%r"
+substitution now returns a string based on GetImageType() rather
+than a concatentation of image class and "Matte".</li>
+<li>coders/tiff.c (WriteTIFFImage): Use GetImageCharacteristics().</li>
+<li>magick/image.c (GetImageCharacteristics): New function to
+evaluate the basic characteristics of the image.
+(GetImageType): Use GetImageCharacteristics().</li>
+</ul>
+</blockquote>
+<p>2007-08-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (RegisterDPXImage): Remove extra newline in usage
+note.</li>
+<li>coders/fax.c (RegisterFAXImage): Fix note to reflect that the
+output from this coder is *not* a TIFF subformat as was previously
+claimed.</li>
+<li>coders/tiff.c (WriteTIFFImage): Output G3 TIFF FAX images as per
+the TIFF Class F specification.</li>
+</ul>
+</blockquote>
+<p>2007-08-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/{api.h, studio.h}: Strip out legacy MacOS 9 and VMS "support".</li>
+<li>magick/{nt_base.c, unix_port.c} (MagickGetMMUPageSize): New function to obtain
+the VM page size.</li>
+<li>magick/pixel_cache.c (PersistCache): Fix a terrible memory leak
+when reading MPC files. Added Cache reference-count logging.</li>
+</ul>
+</blockquote>
+<p>2007-08-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (BenchMarkSubCommand): Added a new <cite>benchmark</cite>
+GraphicsMagick command which can be used to perform benchmarking
+on any other GraphicsMagick command.</li>
+</ul>
+</blockquote>
+<p>2007-08-11 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c (ReadMATImage): Support image is_grayscale flag.
+Add some coder logging.</li>
+</ul>
+</blockquote>
+<p>2007-08-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/{paint.c, render.c, annotate.c}: Use AlphaComposite()
+from alpha_composite.h.</li>
+<li>magick/alpha_composite.h (BlendComposite): Move inline
+BlendComposite() to a header file since it is used in multiple
+places.</li>
+<li>magick/{shear.c, image.c}: Use BlendComposite() from
+alpha_composite.h.</li>
+<li>magick/image.c (SetImageDepth): Don't bother to test current
+depth in advance. Preserve is_monochrome flag. Encapsulate
+bit-reduction algorithm in a macro. Be a bit smarter with
+PseudoClass images.
+(SyncImage): Preserve is_monochrome flag. Improve performance
+when image does not have an opacity channel.</li>
+<li>PerlMagick/t/read.t: Allow some error when reading double MAT.</li>
+</ul>
+</blockquote>
+<p>2007-08-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/read.t: Update MAT read tests according to
+instructions from Fojtik Jaroslav.</li>
+</ul>
+</blockquote>
+<p>2007-08-06 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c (ReadWPGImage): Support WPG files which use XOR
+operator.</li>
+</ul>
+</blockquote>
+<p>2007-08-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (ReadBlobLSBdouble): Migrate from mat.c.
+(ReadBlobMSBdouble): Migrate from mat.c.</li>
+</ul>
+</blockquote>
+<p>2007-08-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (ExportImagePixelArea): Add optimized
+support for 2 and 16 color PseudoClass.
+(ImportImagePixelArea): Add optimized support for 2 and 16 color
+PseudoClass.</li>
+<li>magick/constitute.c (ImportImagePixelArea): Add option to output
+pad bytes at end of pixel data. Added optimized implementation of
+IndexQuantum for bilevel images.</li>
+<li>coders/tiff.c (WriteTIFFImage): Be smarter when writing gray
+Palette and grayscale TIFF images in order to not waste time.</li>
+<li>coders/bmp.c (ReadBMPImage): Use ImportImagePixelArea() when
+reading and writing bilevel and colormapped images.
+(WriteBMPImage): Use ExportImagePixelArea() when writing bilevel
+images.</li>
+<li>magick/version.h.in: Added wrapping for copyright line to a
+reasonable width.</li>
+<li>AUTHORS: Added Daniel Kobras.</li>
+<li>magick/command.c (VersionCommand): Added feature support list to
+-version output.</li>
+</ul>
+</blockquote>
+<p>2007-08-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (AnimateImageCommand): Add support for -type to
+<cite>animate</cite>.
+(DisplayImageCommand): Add support for -type to <cite>convert</cite></li>
+<li>config/delegates.mgk.in, VisualMagick/bin/delegates.mgk: Added
+gs-gray and gs-color+alpha delegate definitions.</li>
+<li>coders/{ept.c, pdf.c, ps.c}: Respect a -type Bilevel, Grayscale,
+TrueColor, or TrueColorMatte request by passing appropriate
+options to Ghostscript for rendering..</li>
+</ul>
+</blockquote>
+<p>2007-07-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (ImportImagePixelArea): Improved read speed
+for bilevel gray image. Many thanks to Mark Mitchell for
+inspiration and ideas.</li>
+<li>coders/caption.c (ReadCAPTIONImage): Eliminate use of strcpy().</li>
+<li>coders/pnm.c (ReadPNMImage): Add logging as well as support for
+is_monochrome and is_grayscale flags.</li>
+<li>magick/color.h (IsMonochrome): Add parenthesis so macro is more
+robust.</li>
+</ul>
+</blockquote>
+<p>2007-07-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/html.c (WriteHTMLImage): Eliminate use of strncat().</li>
+<li>coders/locale.c (ReadConfigureFile): Eliminate use of strncat().</li>
+<li>coders/png.c (ReadOnePNGImage): Eliminate use of strncat().</li>
+<li>magick/fx.c (ConvolveImage): Eliminate use of strncat().</li>
+<li>coders/tiff.c (WriteTIFFImage): Eliminate use of strncat().</li>
+<li>magick/delegate.c (InvokePostscriptDelegate): Eliminate
+doubled-output when running in verbose mode.</li>
+</ul>
+</blockquote>
+<p>2007-07-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/delegate.c (InvokePostscriptDelegate): MagickSpawnVP()
+requires three parameters.</li>
+</ul>
+</blockquote>
+<p>2007-07-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>bzlib: Updated bzip2 to 1.0.4.</li>
+<li>jbig: Updated jbigkit to 1.6</li>
+<li>jp2: Updated JasPer to 1.900.1.</li>
+<li>lcms: Updated lcms to 1.16</li>
+<li>png: Updated libpng to 1.2.18.</li>
+</ul>
+</blockquote>
+<p>2007-07-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xc.c (ReadXCImage): If ImageInfo type field is set to
+TrueColorType or TrueColorMatteType type, then return a
+DirectClass image, otherwise a PseudoClass image is returned as
+before. From the command line this can be used like:
+<cite>gm convert -size 640x480 -type TrueColor xc:red red.miff</cite>.
+Programs may also use this in order to obtain a DirectClass
+canvas image to draw on.</li>
+<li>magick/enhance.c (LevelImage): Fix potential buffer overflow
+which was added since the 1.1 branch.</li>
+</ul>
+</blockquote>
+<p>2007-07-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/delegate.c (UnixShellTextEscape): Don't escape newline
+character since it performs the opposite of what is desired.</li>
+</ul>
+</blockquote>
+<p>2007-07-23 Daniel Kobras <<a class="reference external" href="mailto:kobras%40debian.org">kobras<span>@</span>debian<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li><dl class="first docutils">
+<dt>magick/delegate.c (UnixShellTextEscape): Fix fencepost error</dt>
+<dd>when checking whether escaping is safe.</dd>
+</dl>
+</li>
+</ul>
+</blockquote>
+<p>2007-07-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am: Retire VMS and MacOS 9 support from package.</li>
+</ul>
+</blockquote>
+<p>2007-07-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/{cmyk.c, gray.c, mono.c, rgb.c, uyvy.c, wbmp.c, yuv.c}
+(ReadFOOImage): Check for EOF while searching for start of image
+data.</li>
+<li>tests/Makefile.am: Don't test PTIF format with blob I/O since it
+is not possible to pass the rwblob test and it is really an output
+driver rather than a format.</li>
+<li>libtool: Update to latest CVS libtool.</li>
+<li>magick/constitute.c (ExportModulo8Quantum): Move Import and
+Export macros from header file since they are not used anywhere
+else.</li>
+<li>coders/dpx.c: Add underscore suffix to macro local variable
+names in order to avoid conflict with names in code using the
+macros.</li>
+</ul>
+</blockquote>
+<p>2007-07-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c: Reduce the number of warnings when compiling
+the Wand library.</li>
+<li>coders/xwd.c (XWD_OVERFLOW): Eliminate comparison between signed
+and unsigned.</li>
+<li>coders/pnm.c (ValidateScalingIndex): Eliminate check to see if
+unsigned type is less than zero.</li>
+<li>magick/log.c (LogMagickEvent): Even though log file name comes
+from a controlled source (log.mgk), perform safe numeric
+substitution on it.</li>
+<li>coders/xwd.c (ReadXWDImage): Eliminate conflict between locally
+defined OVERFLOW macro and similarly named macro under Windows.</li>
+</ul>
+</blockquote>
+<p>2007-07-18 Daniel Kobras <<a class="reference external" href="mailto:kobras%40debian.org">kobras<span>@</span>debian<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xwd.c (ReadXWDImage): Integer overflow fix
+(CVE-2007-1797). From Debian patch
+xwd_integer_overflow_fixes_CVE-2007-1797.
+(ReadXWDImage): Fix for integer under/overflow. From Debian patch
+xwd_overflow_fix.</li>
+<li>coders/wpg.c (ReadWPGImage): WPG segfault fix. From Debian
+patch wpg_segfault_fix.</li>
+<li>coders/viff.c (ReadVIFFImage): Verify number of bands prior to
+using image. From Debian patch viff_heap_corruption_fix.</li>
+<li>coders/sun.c (ReadSUNImage): Sun segfault fix. From Debian
+patch sun_segfault_fix.</li>
+<li>magick/blob.c (ReadBlobStream): Never try to read data beyond
+EOF in blob streams. Some (but not all) ReadBlob*() methods
+already implemented similiar checks. Moving it to the central
+ReadBlobStream() increases robustness and prevents out-of-bounds
+reads. From Debian readblob_offset_robustness patch.</li>
+<li>coders/pnm.c (ReadPNMImage): Validate pixel scaling. From
+Debian pnm_scale_fix patch.</li>
+<li>coders/pict.c (ReadPixmap): PICT segfault fix. From Debian
+pict_segfault_fix patch.</li>
+<li>coders/pcx.c (ReadPCXImage): PCX heap overflow fix. From Debian
+pcx_heap_overflow_fix patch.
+(ReadPCXImage): PCX segfault fix. From Debian pcx_segfault_fix.</li>
+<li>magick/montage.c, PerlMagick/t/montage.t: Do not pass bogus
+negative values to modulate shadow in montage. Instead, drop a
+constant grey shadow like current ImageMagick. From Debian
+montage_shadow_fix patch.</li>
+<li>coders/png.c (ReadMNGImage): MNG segfault fix. From Debian
+mng_segfault_fix patch.</li>
+<li>utilities/miff.4: MIFF man page apropos fix. From
+Debian miff_apropos_fix patch.</li>
+<li>coders/icon.c (ReadIconImage): Icon segfault fix. From Debian
+icon_segfault_fix patch.</li>
+<li>tests/drawtest.c: Make sure filename strings do not run out of
+bounds in drawtest. From Debian drawtest_segfault_fix patch.</li>
+<li>config/delegates.mgk.in: Remove obsolete option -2 when calling
+dcraw as a delegate. From Debian dcraw_options_fix patch.</li>
+<li>coders/dcm.c (ReadDCMImage): Fix integer overflow in DCM
+coder. (CVE-2007-1797). From Debian dcm_overflow_fix patch.</li>
+<li>coders/bmp.c (ReadBMPImage): Verify file seek success. From
+Debian bmp_overflow_fix patch.</li>
+</ul>
+</blockquote>
+<p>2007-07-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.h (MagickReallocMemory): It seems that realloc()
+frees the provided memory pointer if the requested size is zero.
+This was causing MagickReallocMemory() to perform a double-free
+under error conditions. Inspired by Debian
+realloc_double_free_fix patch by Daniel Kobras.</li>
+</ul>
+</blockquote>
+<p>2007-07-18 Daniel Kobras <<a class="reference external" href="mailto:kobras%40debian.org">kobras<span>@</span>debian<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/quantize.c (GrayscalePseudoClassImage): Fix computation
+of memory required for colormap index
+(colormap_heap_overflow_fix).</li>
+</ul>
+</blockquote>
+<p>2007-07-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (WriteRunlengthPacket): Converted excessively long
+macro to a function and hopefully eliminate warnings when using
+Visual Studio 2005.</li>
+<li>magick/pixel_cache.c (ClonePixelCache): Eliminate bug when
+size_t is an unsigned type.</li>
+</ul>
+</blockquote>
+<p>2007-07-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageInfo): Address security issue noted by
+CVE-2006-0082
+<a class="reference external" href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-0082">http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-0082</a> in
+which output filenames matching arbitrary printf specifications
+may cause GraphicsMagick to crash.</li>
+<li>magick/utility.c (TranslateTextEx): New version of TranslateText
+which allows copying each attribute via a user-provided callback
+function.</li>
+<li>magick/delegate.c (InvokeDelegate): Implement secure delegate
+execution in POSIX environments in order to avoid injection of
+arbitrary shell commands via carefully crafted filenames. Fixes
+Debian Bug 345238 "[CVE-2005-4601] Shell command injection in
+delegate code (via file names)"
+<a class="reference external" href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=345238">http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=345238</a></li>
+</ul>
+</blockquote>
+<p>2007-07-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/forward.h: New header file to support forward type
+declarations.</li>
+<li><dl class="first docutils">
+<dt>coders/pnm.c (ReadPNMImage): Fix pixel scaling problem caused by</dt>
+<dd>floating point rounding error.</dd>
+</dl>
+</li>
+</ul>
+</blockquote>
+<p>2007-07-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/studio.h: Provide pread() and pwrite() prototypes if they
+are missing.</li>
+<li>configure.ac: Check for missing pread() and pwrite() prototypes.</li>
+<li>m4/ac_func_fseeko.m4: Use fixed version of AC_FUNC_FSEEKO.</li>
+<li>magick/utility.c (SystemCommand): Avoid use of snprintf.</li>
+</ul>
+</blockquote>
+<p>2007-07-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c: Only replace getc_unlocked() and putc__unlocked()
+for a thread-safe build.</li>
+<li>magick/studio.h: Always use fseeko() and ftello() if they are
+available.</li>
+</ul>
+</blockquote>
+<p>2007-07-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): Avoid using seek() if possible, and
+don't use at all if the input is not seekable.</li>
+<li>coders/psd.c (ReadPSDImage): Eliminate memory leak when reading
+PSD files. Fixes Sourceforge issue 1625477 "Memory leak reading
+layered PSD Image".</li>
+</ul>
+</blockquote>
+<p>2007-06-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Fixed -affine command argument
+validation. Fixes SourceForge issue 1743141 "Affine matrix option
+parsing".</li>
+<li>config/magic.mgk: Added detection for BigTIFF.</li>
+<li>coders/tiff.c: Preliminary work to support BigTIFF.</li>
+</ul>
+</blockquote>
+<p>2007-06-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c: Fix problems encountered when reading and writing
+from/to pipes or compressed files.</li>
+</ul>
+</blockquote>
+<p>2007-06-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): Improved the pixel data marshalling
+in order to obtain better read performance for 10-bit DPX.</li>
+<li>magick/blob.c (OpenBlob): Added support for MAGICK_MMAP_READ and
+MAGICK_MMAP_WRITE environment variable options to enable input and
+output file access using mmap().</li>
+</ul>
+</blockquote>
+<p>2007-06-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (OpenBlob): Use MAGICK_IOBUF_SIZE to tune the size
+of the I/O buffer. Sometimes performance is improved by using
+something other than the current default of 16KB.</li>
+</ul>
+</blockquote>
+<p>2007-06-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (ReadMIFFImage): Handle case where compression
+keyword is present but has value of <cite>None</cite>.</li>
+</ul>
+</blockquote>
+<p>2007-06-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (OpenBlob): Disable reading input files using
+memory mapping since it has been learned that some operating
+systems fail to do read-ahead on network files. Without
+read-ahead, performance is poor.</li>
+<li>magick/resource.c (AcquireMagickResource): Map resource limit
+was not being properly checked due to a typo. The memory limit
+was being tested instead.</li>
+<li>coders/tiff.c (ReadTIFFImage): Use libtiff to decode OJPEG
+compressed files into RGB. Probably requires new OJPEG
+implementation from Joris Van Damme which is new in libtiff and
+not yet released. I am not completely sure that this approach is
+correct yet.</li>
+</ul>
+</blockquote>
+<p>2007-05-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/xwindow.c (MagickXGetWindowImage): Set image->depth
+appropriately.</li>
+<li>many files: Compiler warnings reduction.</li>
+</ul>
+</blockquote>
+<p>2007-05-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/cineon.c (ReadCINEONImage): Alter sample scaling
+algorithm a bit.</li>
+<li>tests/rwblob.c, tests/rwfile.c: Allow some slop when testing
+Cineon format with QuantumDepth=8 since we are currently only
+supporting 10 bit samples.</li>
+</ul>
+</blockquote>
+<p>2007-05-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (ReadJPEGImage): Fix reading 12-bit grayscale
+JPEG.</li>
+</ul>
+</blockquote>
+<p>2007-05-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/cineon.c (WriteCINEONImage): Re-wrote Cineon writer from
+scratch. There is no code originating from ImageMagick in this
+source module any more.</li>
+</ul>
+</blockquote>
+<p>2007-04-30 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/art.c, coders.cut.c, coders/mat.c, coders/wpg.c: Add
+support for PingImage() so that image identification is fast by
+default. Also eliminates error message produced by mat.c due to
+rotating an image which has no pixel cache.</li>
+</ul>
+</blockquote>
+<p>2007-04-09 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c (ReadWPGImage): Fix for SourceForge bug id 1431805
+"clip art wpg files cause access violation in graphics magick".</li>
+</ul>
+</blockquote>
+<p>2007-04-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (ModifyCache): Ensure that the cache nexus
+is open. Fix for SourceForge bug id 1173713 "segfault in
+ModifyCache"</li>
+<li>m4/acx_pthread.m4 (ACX_PTHREAD): Apply fixes necessary to
+support C++ compiler properly.</li>
+</ul>
+</blockquote>
+<p>2007-04-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/GraphicsMagick.pc.in: Fix for SourceForge bug id 1576616
+"Fix includedir variable in pkg-config files".</li>
+<li>magick/pixel_cache.c (GetOnePixel): Fix for SourceForge bug id
+1572357 "GetOnePixel definition appears incorrect". It is true
+that this function is intended for read-only purposes and that the
+PixelPacket value is returned directly.</li>
+<li>coders/pdf.c (WritePDFImage): Fix for SourceForge bug id 1510075
+"Failed to write PDF with JPEG compression".</li>
+<li>magick/command.c (MogrifyImageCommand): Properly bubble up
+errors and terminate further mogrify processing immediately. This
+in response to SourceForge bug id 1391421 "problem doing resize on
+273x1 JPEG".</li>
+<li>magick/magick.c (InitializeMagickClientPathAndName): Fix for
+SourceForge bug id 1315109 "segfault in InitializeMagick(NULL)".</li>
+<li>wand/magick_wand.c (MagickGetQuantumDepth): Fix for SourceForge
+bug id 1353744 "MagickGetQuantumDepth doesn't work".</li>
+<li>PerlMagick/t/read.t: Added a test for WPG v1.</li>
+</ul>
+</blockquote>
+<p>2007-04-07 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c: Read Matlab files in both big and little endian
+format.</li>
+</ul>
+</blockquote>
+<p>2007-03-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (WriteDPXImage): Set DPX reference high quantity to
+2.047 rather than 2.048 since zero is assumed to occupy one count
+and 2.047 seems to be the convention even though the DPX
+specification says the default is 2.048. Technicolor uses 2.047.</li>
+<li>m4/acx_pthread.m4: Update version of ACX_PTHREAD macro used.</li>
+</ul>
+</blockquote>
+<p>2007-03-28 Fojtik Jaroslav <<a class="reference external" href="mailto:fojtik%40humusoft.cz">fojtik<span>@</span>humusoft<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c: Support CTM translation in WPG reader.</li>
+</ul>
+</blockquote>
+<p>2007-03-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c: Store 10-bit Luma samples in the filled 32-bit
+storage word starting with the datum in the least significant
+position.</li>
+</ul>
+</blockquote>
+<p>2007-02-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Updated autoconf to version 2.61.</li>
+</ul>
+</blockquote>
+<p>2007-02-10 Daniel Kobras <<a class="reference external" href="mailto:kobras%40debian.org">kobras<span>@</span>debian<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/palm.c: (ReadPALMImage) Do not implicitly call
+ReadBlobByte() twice in Min() macro. Patch thanks to Vladimir
+Nadvornik. This was a regression introduced in patch for
+CVE-2006-5456. (CVE-2007-0770)</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2008-12-28 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/fits.c: Ability to read extension blocks.</li>
+<li>coders/fits.c: Fixed MaxTextExtent limitation of blocks.</li>
+</ul>
+</blockquote>
+<p>2008-12-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/OpenMP.rst: Add results for Window Vista 64-bit / AMD Phenom
+X4 9550.</li>
+<li>VisualMagick/installer/inc/body.isx: Revert yesterday's change
+regarding the placement of config files. Place the config files
+in a <cite>config</cite> subdirectory just as before.</li>
+</ul>
+</blockquote>
+<p>2008-12-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/installer/inc/body.isx: They say that when in Rome
+you should do as the Roman's do. Based on this philosophy, all of
+the coder and filter DLLs are now installed to the same directory
+as the executables and DLLs which depend on them. This eases
+operation under Windows Vista.</li>
+</ul>
+</blockquote>
+<p>2008-12-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c: First pass at supporting large file access under
+Windows.</li>
+</ul>
+</blockquote>
+<p>2008-12-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resource.c (InitializeMagickResources): Improve resource
+estimation for Microsoft Windows systems with large memory.</li>
+<li>magick/segment.c: Added some code to dump histograms with
+<cite>-verbose -verbose</cite>.</li>
+<li>coders/tiff.c: Support reading/writing 16 and 24 bit float TIFF
+files.</li>
+<li>magick/constitute.c (ExportViewPixelArea): Support exporting 16
+and 24 bit short floats. Relies on code developed for
+GraphicsMagick by Richard Nolde.
+(ImportViewPixelArea): Support importing 16 and 24 bit short
+floats. Relies on code developed for GraphicsMagick by Richard
+Nolde.</li>
+</ul>
+</blockquote>
+<p>2008-12-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/operator.h (enum QuantumOperator): Added LogQuantumOp,
+MaxQuantumOp, MinQuantumOp, and PowQuantumOp enumerations as well
+as "Log", "Max", "Min", and "Pow" options to -operator.</li>
+</ul>
+</blockquote>
+<p>2008-12-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImage): The -write option was not
+implemented in a useful fashion and the +write option never worked
+at all. Re-implement -write and eliminate +write from the
+documentation since +write is not needed.</li>
+</ul>
+</blockquote>
+<p>2008-12-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage, WriteTIFFImage) Support reading
+and writing 64-bit integer TIFF.</li>
+<li>magick/constitute.c (ImportViewPixelArea): Add support for
+importing 64-bit integer values.
+(ImportViewPixelArea): Add support for exporting 64-bit integer
+values.</li>
+</ul>
+</blockquote>
+<p>2008-12-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Fix bug with reading one bit per
+sample RGB images.</li>
+</ul>
+</blockquote>
+<p>2008-12-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (OpenCache): Fix a code ordering problem
+which results in <cite>identify</cite> throwing an assertion for PseudoClass
+image files. This bug was added in the 1.3.2 release.</li>
+<li>coders/tiff.c (ReadTIFFImage): Fix bug with <cite>ping</cite> mode.</li>
+</ul>
+</blockquote>
+<p>2008-12-07 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/fits.c: Proper signed to unsigned conversion for 64 bit LSB images.</li>
+</ul>
+</blockquote>
+<p>2008-12-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/Makefile.am: When X11 is disabled, don't compile the
+X11-specific source modules. Don't ever install any X11-related
+header files.</li>
+</ul>
+</blockquote>
+<p>2008-12-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/segment.c (SegmentImage): Use <cite>double</cite> rather than 64-bit
+integer to accumulate totalized values. Make the cluster summary
+report more concise.</li>
+</ul>
+</blockquote>
+<p>2008-12-06 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/fits.c: Fix for 64 bit images.</li>
+</ul>
+</blockquote>
+<p>2008-12-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/segment.c (SegmentImage): Cluster threshold is expressed
+as a percentage of total cluster pixels. Optimize for larger
+images.</li>
+</ul>
+</blockquote>
+<p>2008-12-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/segment.c (SegmentImage): Accelerate using OpenMP.</li>
+</ul>
+</blockquote>
+<p>2008-11-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (ExpandFilenames): Remove some arbitrary
+argument length limits. Pass -convolve argument without any
+additional checking. Verify that strings are not truncated during
+copy.
+(ListFiles): Be more memory efficient.</li>
+<li>magick/fx.c (ConvolveImage): Fix formatting problem when logging
+the convolution kernel used.</li>
+<li>magick/utility.c (TranslateTextEx): Support formatting huge
+comment text.</li>
+</ul>
+</blockquote>
+<p>2008-11-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/fx.c (ConvolveImage): Don`t process opacity channel
+unless image has one.</li>
+<li>magick/effect.c (MotionBlurImage): Use
+AcquireOnePixelByReference() rather than AcquireImagePixels() to
+retrieve one pixel. This is much more efficient.
+(AdaptiveThresholdImage): Don`t process opacity channel unless
+image has one.
+(BlurImage): Don`t process opacity channel unless image has one.</li>
+</ul>
+</blockquote>
+<p>2008-11-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/profile.c (ProfileImage): +profile now supports a simple
+exclusion syntax. For example, to strip all of the profiles
+except for the ICM profile use +profile '!icm,*'. The new syntax
+also allows multiple profile names to be listed at once. The
+primary requirement is that all excluded profiles must be listed
+prior to those to be stripped.</li>
+</ul>
+</blockquote>
+<p>2008-11-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/transform.c (RollImage): Remove image storage class
+alteration.
+(CompositeImageRegion): Ensure that the canvas image storage class
+is correct.</li>
+</ul>
+</blockquote>
+<p>2008-11-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>config/delegates.mgk.in: Since we removed support for <cite>spawn</cite> a
+long time ago, and no longer execute using the Unix shell by
+default, we need to add an ampersand to the end of the two entries
+previously using <cite>spawn</cite> so that the display program does not hang
+when it invokes the external program.</li>
+<li>utilities/Makefile.am (UTILITIES_TESTS): Add preview-based
+tests.</li>
+<li>coders/preview.c (WritePreviewImage): Solarize requires a
+threshold argument.</li>
+<li>coders/vid.c (WriteVIDImage): Eliminate memory leak.</li>
+<li>magick/montage.c (MontageImages): Fix continued use of freed
+memory.</li>
+</ul>
+</blockquote>
+<p>2008-11-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/omp_data_view.c (AccessThreadViewDataById): New function
+to allow retrieving data via the index it was registered with.</li>
+<li>magick/enhance.c (BuildChannelHistograms): EnhanceImage() and
+NormalizeImage() now share one common function for generating the
+histogram.</li>
+<li>magick/enhance.c (ModulateImage): Improve performance a bit.
+(ContrastImage): Improve performance a bit.
+(GammaImage): Improve performance a bit.</li>
+</ul>
+</blockquote>
+<p>2008-11-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/authors.rst: List Mark Mitchell as an author.</li>
+<li>utilities/tests/msl_composite.sh: Fix <cite>rm -f</cite> without a valid
+argument which annoyed NetBSD.</li>
+<li>coders/fits.c: Impose a limit on the length of the row PDU.
+Make sure that GraphicsMagick version information does not
+overflow the length allowed by a row PDU.</li>
+</ul>
+</blockquote>
+<p>2008-11-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (WriteJPEGImage): Use DCT algorithm default from
+the library rather than the header file.</li>
+<li>magick: Adjust OpenMP scheduling options based on observed
+behavior.</li>
+</ul>
+</blockquote>
+<p>2008-11-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/shear.c (IntegralRotateImage): Added OpenMP acceleration
+for rotate by 90 and 270 degrees.</li>
+<li>configure.ac: New --disable-openmp-slow configure for disabling
+use of OpenMP for algorithms which may run slower on operating
+systems with crummy thread libraries. This still allows gaining
+the benefits from OpenMP for CPU hogs. Verified to help with
+FreeBSD 7.0 and Apple OS-X Leopard.</li>
+<li>magick/semaphore.c: Trimmed out the debug code in order to
+obtain a bit more performance.</li>
+</ul>
+</blockquote>
+<p>2008-11-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c: Allow the user to specify the DCT method
+(jpeg:dct-method), or if huffman encoding should be enabled
+(jpeg:optimize-coding=true). Default the DCT method to the
+libjpeg default rather than forcing it to JDCT_FLOAT since float
+is slower on some systems.</li>
+</ul>
+</blockquote>
+<p>2008-11-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jp2.c (BlobClose): Leak a little bit less memory when
+reading a JP2 file.</li>
+</ul>
+</blockquote>
+<p>2008-11-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/wandtest.c: Eliminate memory leak.</li>
+<li>wand/drawing_wand.c (DestroyDrawingWand): Eliminate memory
+leaks.</li>
+<li>coders/xwd.c (WriteXWDImage): Force colormapped images with more
+than 256 colors to DirectClass.</li>
+<li>magick/enhance.c (ModulateImage): Improve progress message.</li>
+<li>coders/msl.c: Eliminate memory leaks.</li>
+<li>GraphicsMagick.spec.in: Apply RPM spec file fixes from Giacomo
+Tenaglia for Red Hat Linux 4.</li>
+</ul>
+</blockquote>
+<p>2008-11-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/msl.c: Fix bug with attributes becoming appended to
+themselves. Resolves SF issue 2255754. Reflowed code.</li>
+</ul>
+</blockquote>
+<p>2008-11-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh: GraphicsMagick 1.3 released.
+Next release on head will be 1.4.</li>
+<li>www/OpenMP.rst: Updated with latest measurement data.</li>
+<li>www/benchmarks.rst: Updated with latest benchmark data.</li>
+<li>coders/url.c (RegisterURLImage): Register HTTP and FTP URL
+support in the "unstable" category since these are capable of
+accessing the network and therefore represent a potential security
+issue. Register the FILE URL support in the "stable" category
+since it is capable of incorporating local disk files, which may
+still represent a security security issue for server applications.
+Note that disabling these functions might cause some existing MSL,
+MVG and SVG scripts to stop working if they use external URLs.</li>
+</ul>
+</blockquote>
+<p>2008-11-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pnm.c (ReadPNMImage): Sequential multi-thread the PNM raw
+format readers. Can improve read performance quite substantially
+for large PBM and PGM files, and less so for PPM. There is most
+benefit for systems with more I/O than one CPU core will support.
+Systems with slow I/O and a relatively fast CPU may see somewhat
+diminished read performance with more CPU consumption. As such,
+this is effectively a verification that multi-threading the reader
+is possible, and may be of benefit to power-users.</li>
+<li>magick/omp_data_view.c (AllocateThreadViewDataArray): New
+function to allocate a thread view data array. Updated modules
+using similar code to use this function in order eliminate
+useless redundancy.</li>
+</ul>
+</blockquote>
+<p>2008-11-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c: Incorporate OMP thread views into the
+pixel cache so usage is less invasive. Update OMP-enhanced source
+modules to suit.
+(GetImagePixelsEx): New function similar to GetImagePixels()
+except that it reports exceptions to a user-provided structure.
+(SetImagePixelsEx): New function similar to SetImagePixels()
+except that it reports exceptions to a user-provided structure.
+(SyncImagePixelsEx): New function similar to SyncImagePixels()
+except that it reports exceptions to a user-provided structure.
+(AccessImmutableIndexes): New function to access read-only
+colormap indexes.
+(AccessMutableIndexes): New function to access writeable colormap
+indexes.
+(AccessMutablePixels): New function to access writeable pixels.
+(AccessDefaultCacheView): New function to access the default cache
+view.</li>
+</ul>
+</blockquote>
+<p>2008-11-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (BenchmarkImageCommand): With no other
+arguments, the benchmark command now defaults to one iteration.</li>
+<li>magick/effect.c (SpreadImage): Offsets array size is a prime
+number to help avoid beating.
+(SpreadImage): Ensure that spread loops are always terminal.</li>
+<li>magick/utility.c (MagickRandReentrant): Fix bug where rand() was
+being continually re-seeded if rand_r() was not available.</li>
+</ul>
+</blockquote>
+<p>2008-11-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>utilities/tests/msl_composite.sh: Replace SVG image generation
+with simpler approach which properly centers the text. Use our
+own font so that tests will pass if the user does not have fonts
+installed.</li>
+<li>magick/utility.c (GetMagickDimension): Extend to support parsing
+optional x and y offset values and use to fix parsing for
+-oil-paint and -unsharp when sscanf() is C'99 compliant.</li>
+</ul>
+</blockquote>
+<p>2008-11-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.h (AcquireOneCacheViewPixel): Pass pixel to
+update by reference.
+(AcquireOnePixelByReference): New private inline method which
+passes pixel to update by reference.</li>
+<li>magick/omp_thread_view.h (AcquireOneThreadViewPixel): Pass pixel
+to update by reference.</li>
+<li>magick/alpha_composite.h (BlendCompositePixel): Replace
+BlendComposite with BlendCompositePixel, which passes the
+composite pixel by reference.
+(AlphaCompositePixel): Replace AlphaComposite with
+AlphaCompositePixel, which passes the composite pixel by
+reference.
+(AtopCompositePixel): Replace AtopComposite with
+AtopCompositePixel, which passes the composite pixel by reference.</li>
+<li>configure.ac: With excessive maintenance releases, the library
+age portion of MAGICK_LIB_VERSION was overflowing its allotted
+space. This resulted in 1.1.X releases reporting the wrong
+MagickLibVersion as of 1.1.10. Fix this by supporting up to 99
+values for each field.</li>
+</ul>
+</blockquote>
+<p>2008-11-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Fix passing the --with-windows-font-dir option via
+DISTCHECK_CONFIG_FLAGS.</li>
+<li>utilities/tests/msl_composite.sh: Integrated MSL composition
+test script contributed by Max Hohenegger, Max at hohenegger.eu.</li>
+<li>magick/command.c (ConjureImageCommand): Return status was
+inverted so one was returned for command success rather than zero.</li>
+</ul>
+</blockquote>
+<p>2008-11-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>png: Updated libpng to 1.2.33 release.</li>
+<li>magick/color.c (FuzzyColorMatch): If fuzz is zero then
+completely use the result of ColorMatch() rather than entering
+unnecessary expensive code.</li>
+</ul>
+</blockquote>
+<p>2008-10-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/studio.h: Make sure we don't conflict with OpenMP
+implementation if it is active but we are not using it.</li>
+</ul>
+</blockquote>
+<p>2008-10-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/studio.h (HAVE_OPENMP): Add logic to make sure that
+OpenMP is only engaged for OpenMP 2.0 or later.</li>
+<li>magick/command.c (VersionCommand): Report OpenMP version.</li>
+<li>Makefile.am: The Magick++ build was supposed to be optional. Now
+it is.</li>
+<li>Makefile.am: Eliminated .tar.bz2 and .zip packages from the
+distribution. The .tar.bz2 package was hardly smaller than the
+.tar.gz package so it wasted 5.9MB with little benefit. The
+compression ratio on the .zip archives is absolutely terrible so
+eliminating zip eliminates huge 9.6MB and 25MB files from the
+distribution equation. Windows users can easily learn how to use
+the vastly more efficient 7-Zip format.</li>
+</ul>
+</blockquote>
+<p>2008-10-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Rationalize OpenMP tests to make sure that OpenMP
+can not be enabled without thread support.</li>
+</ul>
+</blockquote>
+<p>2008-10-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/composite.c (CompositeImageRegion): Add some minimal
+region limit checking. Not completed yet.</li>
+<li>magick/transform.c (RollImage): Accellerate using OpenMP.</li>
+</ul>
+</blockquote>
+<p>2008-10-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/studio.h (omp_get_thread_num): Remove spurious trailing
+<cite>;</cite>.</li>
+<li>magick/render.c (DrawPrimitive): Make method private since
+nothing else is using it.</li>
+<li>magick/omp_thread_view.h (AccessThreadView): Inline function for
+a bit more performance.
+(AcquireOneThreadViewPixel) Inline function for a bit more
+performance.</li>
+</ul>
+</blockquote>
+<p>2008-10-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>pragma omp parallel for: Use consistent static scheduling
+throughout and ensure that 64 threads can be usefully engaged on a
+1024 row image.</li>
+<li>magick/pixel_iterator.c (SetRegionThreads): Implement logic so
+that pixel iterators execute single-threaded when invoked on tiny
+regions.</li>
+<li>magick/pixel_cache.c (SetNexus): Make staging buffer memset()
+conditional in order to dramatically diminish impact to small
+accesses. This memset() only exists to make valgrind happy.</li>
+</ul>
+</blockquote>
+<p>2008-10-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Fix progress monitor for the case
+of reading planar stripped images.</li>
+</ul>
+</blockquote>
+<p>2008-10-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (DespeckleImage): Accelerate using OpenMP.</li>
+<li>magick/paint.c (OpaqueImage): Update to use pixel iterators.
+(TransparentImage): Update to use pixel iterators.</li>
+<li>magick/decorate.c (FrameImage): Accelerate using OpenMP.
+(RaiseImage): Accelerate using OpenMP.</li>
+</ul>
+</blockquote>
+<p>2008-10-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/composite.c (CompositeImageRegion): Start of new function
+to act as a lighter-weight yet more flexible image composition
+interface.</li>
+<li>magick/transform.c (ChopImage): Accelerate using OpenMP.
+(CropImage): Accelerate using OpenMP.
+(FlipImage): Accelerate using OpenMP.
+(FlopImage): Accelerate using OpenMP.</li>
+<li>magick/effect.c (ThresholdImage): Accelerate using OpenMP.</li>
+</ul>
+</blockquote>
+<p>2008-10-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (AcquireOneCacheViewPixel): Optimize
+implementation.</li>
+<li>magick/effect.c (MedianFilterImage): Accelerate using OpenMP.
+(ReduceNoiseImage): Accelerate using OpenMP.</li>
+</ul>
+</blockquote>
+<p>2008-10-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/fx.c (WaveImage): Accelerate using OpenMP.
+(SwirlImage): Accelerate using OpenMP.
+(ImplodeImage): Accelerate using OpenMP.</li>
+</ul>
+</blockquote>
+<p>2008-10-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (GetCacheViewRegion): New function to
+return the region bounded by a pixel cache view.</li>
+<li>magick/constitute.c (ExportViewPixelArea): New function to
+support exporting the pixels from a pixel cache view.
+(ImportViewPixelArea): New function to support importing pixels
+to a pixel cache view.</li>
+<li>magick/pixel_cache.c (ReadStream): Eliminated function.
+(WriteStream): Eliminated function.
+(ClonePixelCacheMethods): Eliminated function.</li>
+<li>magick/image.h: Eliminated StreamHandler call-back type.
+Eliminated ImageInfo stream member.</li>
+<li>magick/pixel_cache.c (GetCacheViewArea): New function to return
+the area of a cache view.
+(AccessCacheViewPixels): New function to access already selected
+cache view pixels.</li>
+</ul>
+</blockquote>
+<p>2008-10-19 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/fits.c: Remove unused exponential data.</li>
+</ul>
+</blockquote>
+<p>2008-10-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/omp_thread_view.c: Move OMP Thread View functions out of
+pixel cache module and put them in this new module.</li>
+<li>coders/xtrn.c (ReadXTRNImage): XTRNSTREAM mode was never
+implemented so remove unfinished stub code.</li>
+</ul>
+</blockquote>
+<p>2008-10-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageDepth): Needed to assign image depth
+attribute to user-specified depth rather than only altering the
+pixels.
+(SetImageOpacity): Reimplement using pixel iterators.
+(AverageImages): Accelerate using OpenMP.
+(GetImageBoundingBox): Accelerate using OpenMP.</li>
+</ul>
+</blockquote>
+<p>2008-10-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (ConstituteTextureImage): Accelerate using
+OpenMP.</li>
+<li>magick/image.c (TextureImage): Accelerate using OpenMP.</li>
+<li>magick/render.c (DrawAffineImage): Accelerate using OpenMP.</li>
+</ul>
+</blockquote>
+<p>2008-10-13 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/fits.c Fixed palette problem for >8 bit images.</li>
+</ul>
+</blockquote>
+<p>2008-10-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImage): Using +page now resets image
+page offsets as documented for convert and mogrify.</li>
+</ul>
+</blockquote>
+<p>2008-10-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (GradientImage): Re-do OpenMP accelleration based
+on new pixel cache interface for better performance.</li>
+<li>coders/dpx.c (ReadDPXImage): Progress monitor needs to tick when
+row count is updated.</li>
+<li>coders/fits.c (ReadFITSImage): Update to use
+MagickFindRawImageMinMax().
+(WriteFITSImage): Expand buffer size to MaxTextExtent. Include
+GraphicsMagick version in FITS header.</li>
+<li>coders/mat.c (ReadMATImage): Update to use
+MagickFindRawImageMinMax().</li>
+<li>magick/constitute.c (MagickFindRawImageMinMax): New internal
+function to assist with finding the minimum and maximum data of
+raw image files.</li>
+</ul>
+</blockquote>
+<p>2008-10-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (AcquireThreadViewPixels): Convert thread
+set view convenience methods into library methods because the
+inline methods were causing the Sun Studio compiler to produce
+thread unsafe code. Due to likely beneficial inlining in the
+library, this is not expected to cause any performance impact.</li>
+</ul>
+</blockquote>
+<p>2008-10-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/filter.t: Add a test for UnsharpMask.</li>
+<li>magick/effect.c (UnsharpMaskImage): Use Blur rather than
+GaussianBlur to create blur image since it is faster.</li>
+<li>magick/pixel_cache.c (AllocateThreadViewDataSet): Add a
+destructor function in case data should not be destroyed, or needs
+something other than MagickFree().
+(AllocateThreadViewDataSet): Use user-provided destructor to free
+user data.</li>
+<li>scripts/format_c_api_doc.py: Improvements from Mark Mitchell to
+perform keyword/target substitions and wrap function prototypes.</li>
+<li>coders/dpx.c (ReadDPXImage): Accellerate reader using OpenMP.</li>
+</ul>
+</blockquote>
+<p>2008-10-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/api/types.rst: Convert types.html to reStructured text
+format.</li>
+</ul>
+</blockquote>
+<p>2008-10-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/monitor.c (MagickMonitorFormatted): New method to support
+issuing a formatted progress monitor message. Use it throughout
+so that file name is included in progress indication.</li>
+</ul>
+</blockquote>
+<p>2008-10-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Bootstrap with autoconf 2.63. Require autoconf
+2.62 to bootstrap.</li>
+</ul>
+</blockquote>
+<p>2008-10-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www: Adopted improved web page design by Mark Mitchell.</li>
+</ul>
+</blockquote>
+<p>2008-10-04 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/fits.c coders/mat.c Used a same piece of code to calculate
+min and max data value.</li>
+</ul>
+</blockquote>
+<p>2008-09-30 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/fits.c Fixed 16 bit fits writer that wrote wrongly
+shaped unsigned ints.</li>
+</ul>
+</blockquote>
+<p>2008-09-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/conjure.imdoc: Applied patches from Max at hohenegger.eu to
+mention previously undocumented elements and to provide a
+composition example.</li>
+</ul>
+</blockquote>
+<p>2008-09-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/shear.c (IntegralRotateImage): Accelerate rotation by 0
+and 180 degrees using OpenMP.
+(XShearImage): Accellerate using OpenMP (accellerates -rotate and
+-shear).
+(YShearImage): Accellerate using OpenMP (accellerates -rotate and
+-shear).</li>
+</ul>
+</blockquote>
+<p>2008-09-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (MotionBlurImage): Enable OpenMP now that pixel
+cache is re-entrant.</li>
+<li>magick/pixel_iterator.c: Updated to use thread view convenience
+inline methods as proof of principle.</li>
+<li>magick/pixel_cache.h: Added convenience inline methods to make
+use of thread views a bit more pleasant.</li>
+</ul>
+</blockquote>
+<p>2008-09-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (ShadeImage): Fix valgrind gripe.
+(MedianFilterImage): Fix valgrind gripe.</li>
+</ul>
+</blockquote>
+<p>2008-09-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c: Pixel cache is believed to be thread safe
+now.</li>
+<li>magick/deprecate.c (AcquireCacheView): Deprecate this function.
+(GetCacheView): Deprecate this function.
+(SetCacheView): Deprecate this function.
+(SyncCacheView): Deprecate this function.</li>
+<li>magick/pixel_cache.c (AcquireCacheViewPixels): New function to
+replace AcquireCacheView().
+(GetCacheViewPixels): New function to replace GetCacheView().
+(SetCacheViewPixels): New function to replace SetCacheView().
+(SyncCacheViewPixels): New function to replace SyncCacheView().</li>
+<li>coders/msl.c: Applied patches from Max at hohenegger.eu which
+fix a MSL parsing error related to gamma, and erroneous text
+comments which claim that elements can't have attributes.</li>
+</ul>
+</blockquote>
+<p>2008-09-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resize.c (ResizeImage): Move OpenMP instrumentation to
+outer loop so that eventually there can be more performance.</li>
+</ul>
+</blockquote>
+<p>2008-09-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resize.c (MinifyImage): Accelerate using OpenMP.</li>
+<li>magick/command.c (ConvertImageCommand, MogrifyImageCommand):
+Accept -gaussian-blur as a synonym for -gaussian.
+(ConvertImageCommand, MogrifyImageCommand): Provide access to
+MinifyImage() via -minify.
+(ConvertImageCommand, MogrifyImageCommand): Provide access to
+Magnifyimage() via -magnify.</li>
+</ul>
+</blockquote>
+<p>2008-09-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/channel.c (ImportImageChannelsMasked): New function to
+import all the channels from an image except for the channels
+specified.</li>
+<li>magick/effect.c (AddNoiseImageChannel): New function to add
+noise to an image channel.
+(BlurImageChannel): New function to blur one image channel.
+(GaussianBlurImageChannel): New function to gaussian blur an image
+channel.
+(UnsharpMaskImageChannel): New function to unsharpmask an image
+channel.
+(SharpenImageChannel): New function to sharpen an image channel.</li>
+</ul>
+</blockquote>
+<p>2008-09-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (MotionBlurImage): Use GetOptimalKernelWidth1D()
+to estimate a reasonable convolution kernel size. Prepare code
+for OpenMP but don't enable OpenMP until it runs faster.
+(AddNoiseImageChannel): New function to apply noise to a specified
+image channel.</li>
+</ul>
+</blockquote>
+<p>2008-09-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (ConvertImageCommand): Provide <cite>convert</cite> access
+to MotionBlurImage() via -motion-blur option.
+(MogrifyImageCommand): Provide <cite>mogrify</cite> access to
+MotionBlurImage() via -motion-blur option.</li>
+</ul>
+</blockquote>
+<p>2008-09-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (SpreadImage): Accelerate using OpenMP.</li>
+<li>coders/msl.c: Applied MSL patch from graphicsmagick-bugs list to
+correct handling of geometry x,y values by setting gravity
+attribute to ForgetGravity.</li>
+</ul>
+</blockquote>
+<p>2008-09-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (ShadeImage): Accelerate using OpenMP.</li>
+</ul>
+</blockquote>
+<p>2008-09-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (RandomChannelThresholdImage): Accelerate using
+OpenMP. Support individual thresholding of the color channels.
+(BlurImage): Blur was failing for PseudoClass images. This bug
+was added on 2008-09-08.</li>
+<li>magick/pixel_cache.c (AcquireOneCacheViewPixel): New function to
+return just one pixel from a cache view.</li>
+</ul>
+</blockquote>
+<p>2008-09-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (EnhanceImage): Accelerate using OpenMP.
+(BlurImageScanlines): Added optimizations.</li>
+<li>magick/shear.c (IntegralRotateImage): Add missing progress
+indication for 90 and 270 degrees rotation.</li>
+<li>www/perl.html: Fix formatting of examples. Should address
+SourceForge issue [ 2100339 ] "Wrong format in example script on
+web page".</li>
+</ul>
+</blockquote>
+<p>2008-09-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (BlurImage): Accelerate using OpenMP.</li>
+</ul>
+</blockquote>
+<p>2008-09-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/fx.c (ColorizeImage): Re-implement using pixel iterators.
+(MorphImages): Re-implement using pixel iterators.
+(OilPaintImage): Accelerate using OpenMP.
+(SolarizeImage): Re-implement using pixel iterators.</li>
+</ul>
+</blockquote>
+<p>2008-09-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/fx.c (ConvolveImage): Accelerate using OpenMP.</li>
+<li>magick/effect.c (AdaptiveThresholdImage): Accelerate using OpenMP.</li>
+</ul>
+</blockquote>
+<p>2008-09-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c: Exhuastive study of the pixel cache code
+reveals that it is inscrutable and not implemented in a fashion
+which enables useful multi-threading. Therefore, the cache view
+interfaces are now made OpenMP-safe via a global critical section.</li>
+</ul>
+</blockquote>
+<p>2008-09-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_iterator.c: Reduce use of critical sections around
+pixel cache to the bare minimum based on analysis and testing.
+Unfortunately, testing shows that the pixel cache views are still
+not 100% thread safe so the extra locking is still required.</li>
+<li>magick/pixel_cache.c (ModifyCache): Make implementation thread
+safe. This required removing a thread-unsafe optimization from
+Bill Radcliffe.</li>
+<li>magick/command.c (BenchmarkImageCommand): Restore original
+client name for each loop so that it is not extended further for
+each iteration.</li>
+<li>magick/semaphore.c (UnlockSemaphoreInfo): Decrement lock depth
+under protection of the lock.</li>
+</ul>
+</blockquote>
+<p>2008-09-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (AddNoiseImagePixels): Update to pass per-thread
+<cite>seed</cite> value for more performance.</li>
+</ul>
+</blockquote>
+<p>2008-08-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/gem.c (GenerateDifferentialNoise): Use
+MagickRandReentrant(). Added a <cite>seed</cite> argument so that we can pass
+a per-thread <cite>seed</cite> value.</li>
+<li>magick/utility.c (MagickRandNewSeed): New function to produce a
+semi-random <cite>seed</cite> value.
+(MagickRandReentrant): New function which works like rand() but
+attempts to be re-entrant if possible by allowing a seed value to
+be passed.</li>
+</ul>
+</blockquote>
+<p>2008-08-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/channel.c (SetImageChannelDepth): Re-implement using
+QuantumOperatorImage().</li>
+<li>magick/image.c (SetImageDepth): Re-implement using
+QuantumOperatorImage().</li>
+<li>magick/operator.h (QuantumOperator): Added DepthQuantumOp for
+setting the channel depth.</li>
+<li>magick/command.c (BenchmarkImageCommand): Add CPU-based
+iteration rate metric to benchmark output.</li>
+<li>magick/resource.c (ListMagickResourceInfo): Include quantum
+depth, bits per pixel, and process address size in resource
+output so that output is more complete.</li>
+</ul>
+</blockquote>
+<p>2008-08-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SyncImage): Re-implement using pixel iterators.
+(SortColormapByIntensity): Re-implement using pixel iterators.
+(ClipPathImage): Re-implement using pixel iterators.
+(CycleColormapImage): Re-implement using pixel iterators.
+(GetImageDepth): Re-implement using pixel iterators.
+(GradientImage): Parallize inner loop for speedup with larger
+images.
+(ReplaceImageColormap): Re-implement using pixel iterators.
+(SetImage): Re-implement using pixel iterators.</li>
+</ul>
+</blockquote>
+<p>2008-08-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/operator.c (QuantumGamma): Removed unnecessary OpenMP
+request on inner loops.</li>
+<li>magick/enhance.c (EqualizeImage,NormalizeImage): Execute
+histogram generation pixel iterator with just one thread to
+decrease contention for the histogram array.</li>
+<li>magick/pixel_iterator.c (InitializePixelIteratorOptions): New
+function to initialize PixelIteratorOptions with defaults.</li>
+<li>magick/pixel_iterator.h (PixelIteratorOptions): New structure to
+support passing pixel iterator execution options.</li>
+</ul>
+</blockquote>
+<p>2008-08-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Updated for changes to date in 1.3 development code.</li>
+<li>magick/pixel_iterator.c: Execute pixel iterators in parallel via
+OpenMP.</li>
+<li>magick/pixel_cache.c (OpenCacheView): Ensure that pixel cache is
+open.
+(GetCacheInfo): Allocate semaphore immediately.</li>
+</ul>
+</blockquote>
+<p>2008-08-16 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/fits.c Writer now creates valid images according to
+<a class="reference external" href="http://fits.gsfc.nasa.gov/fits_verify.html">http://fits.gsfc.nasa.gov/fits_verify.html</a>
+Fixed problems: 1) zeros in HDU, 2) wrong padding. 3) possible
+strlen() overflow.</li>
+</ul>
+</blockquote>
+<p>2008-08-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/{compare.c, channel.c, enhance.c, image.c, operator.c}:
+Update existing pixel iterator callback functions so that they are
+OpenMP safe.</li>
+</ul>
+</blockquote>
+<p>2008-08-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/compare.c (InitializeDifferenceImageOptions): Renamed
+from DifferenceImageOptionsDefaults().
+(InitializeDifferenceStatistics): New function to initialize
+DifferenceStatistics.
+(ComputeAbsoluteError, ComputePeakAbsoluteError,
+ComputeSquaredError): Use local totalizing structure on stack and
+update cumulative statistics when the loop terminates.</li>
+</ul>
+</blockquote>
+<p>2008-08-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www: Convert HTML pages to use a vibrant green theme rather than
+colors stolen from old GIMP web site.</li>
+</ul>
+</blockquote>
+<p>2008-08-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/{compare.imdoc, options.imdoc}: Added documentation for
+<cite>compare</cite>.</li>
+<li>magick/compare.h (enum HighlightStyle): Added
+AssignHighlightStyle for simple color assignment. <cite>Annotate</cite> is
+now <cite>Tint</cite>.</li>
+<li>magick/command.c (CompareImageCommand): Useful options are now
+-metric, -highlight-color, and -hightlight-style.</li>
+</ul>
+</blockquote>
+<p>2008-08-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/compare.c (DifferenceImagePixels): Fixed <cite>Annotate</cite>
+difference annotation algorithm. Added <cite>Threshold</cite> and <cite>Xor</cite>
+difference annotation algorithms.
+(GetImageChannelDifference): New function for computing
+statistical image error using various metrics. Inspired by
+<cite>imgcmp</cite> from Jasper.
+(GetImageChannelDistortion): New function for obtaining
+statistical image error using various metrics for a specified
+image channel. Signature is compatible with similar ImageMagick
+function.
+(GetImageDistortion): New function for obtaining statistical image
+error using various metrics for all the active channels in the
+image. Signature is compatible with similar ImageMagick function.</li>
+<li>magick/command.c (CompareImageCommand): Added a <cite>compare</cite>
+subcommand which compares two images using various metrics, and/or
+generates a difference image using various difference annotation
+algorithms. Documentation not yet updated.</li>
+</ul>
+</blockquote>
+<p>2008-08-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_iterator.c: Split user context in all pixel
+iterator APIs into a mutable data part, and an immutable data
+part. This required modification to all modules using the pixel
+iterator methods.</li>
+</ul>
+</blockquote>
+<p>2008-07-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c (MagickCompareImageChannels): Use
+DifferenceImage().
+(MagickCompareImages): Implement by calling
+MagickCompareImageChannels().</li>
+<li>magick/compare.c (DifferenceImage): The ImageMagick-compatible
+CompareImages() function signature was clearly an example of bad
+design so rename CompareImages() to DifferenceImage() with a
+signature which does not unnecessarily mix functionality and
+allows for ease of future expansion.</li>
+</ul>
+</blockquote>
+<p>2008-07-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/Makefile.am (WAND_TESTS): Added Wand drawtest and wandtest
+to automated test suite.</li>
+</ul>
+</blockquote>
+<p>2008-07-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (ThresholdImage): Don't read uninitialized pixel
+indexes (valgrind gripe).</li>
+<li>coders/tiff.c (CompressionSupported): Use
+TIFFIsCODECConfigured() to test if a codec is supported.</li>
+<li>tests/{rwblob.c, rwfile.c}: use DestroyImageList() rather than
+DestroyImage().</li>
+<li>coders/psd.c (RegisterPSDImage): Fix module registration memory leak.</li>
+<li>coders/jpeg.c (RegisterJPEGImage): Fix module registration memory leak.</li>
+</ul>
+</blockquote>
+<p>2008-07-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (DestroyBlob, DestroyBlobInfo): Implementation is
+a bit more robust.</li>
+</ul>
+</blockquote>
+<p>2008-07-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (ReadJPEGImage): Remove over-write of
+image->client_data. Resolves SourceForge issue [ 2018974 ]
+client_data is not passed to streamhandler.</li>
+<li>coders/png.c (WriteOnePNGImage): Fix crash when writing PNG
+images with transparency and either type Optimize is requested, or
+the image is colormapped.</li>
+</ul>
+</blockquote>
+<p>2008-07-12 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Fixed problem: "In this case, the referenced
+images had previously been deallocated but are still being used.
+Since they are overwritten, their signatures are invalid.</li>
+</ul>
+</blockquote>
+<p>2008-07-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c (ReadDCMImage): Report actual image depth.</li>
+<li>magick/resource.c (InitializeMagickResources): Set default
+maximum memory limit to physical memory rather than 2X physical
+memory. This decision is made since the system paging device is
+often slower than files in the filesystem, and so memory mapping
+is likely faster.</li>
+<li>magick/blob.c (OpenBlob): The MAGICK_IO_FSYNC environment
+variable causes output files to be synchronized to disk when set
+to TRUE.</li>
+</ul>
+</blockquote>
+<p>2008-07-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/GraphicsMagick.html: Improved formatting of documentation.</li>
+</ul>
+</blockquote>
+<p>2008-07-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageInfo): Make use of the new
+<cite>extension_treatment</cite> field.</li>
+<li>coders/dcraw.c (ReadDCRAWImage): Added a coder module to proxy
+from various common RAW camera format extensions to the <cite>dcraw</cite>
+delegate.</li>
+<li>magick/magick.h (MagickInfo): Add an extension_treatment member
+to indicate how file extensions should be treated for this coder.</li>
+</ul>
+</blockquote>
+<p>2008-06-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/{animate.c,quantize.c}: Replace !ColorMatch() with
+NotColorMatch().</li>
+<li>utilities/Makefile.am (install-exec-local-utilities): Add back
+in support for --enable-magick-compat which was accidentally
+dropped in the new makefiles for GraphicsMagick 1.2. Resolves
+SourceForge bug 2005883.</li>
+<li>magick/color.h (NotColorMatch): New macro for testing that two
+colors are not the same. Opposite from existing ColorMatch().</li>
+<li>magick/command.c: Replaced the many duplicate enum conversion
+code fragments with calls to functions in enum_strings.c.</li>
+<li>magick/enum_strings.c: Absorbed the many "ToString" and
+"StringTo" functions from other source modules.</li>
+<li>magick/effect.c (ThresholdImage): Optimize for larger images.</li>
+<li>magick/constitute.c (ConstituteTextureImage): New function to
+return a texture canvas image based on a tile image. Similar to
+existing TextureImage() except better optimized for creating new
+images and inherits tile image properties.</li>
+<li>magick/color.h (IsBlackPixel): New macro to test if a pixel is
+black.
+(IsWhitePixel): New macro to test if a pixel is white.</li>
+<li>coders/tile.c (ReadTILEImage): Use new ConstituteTextureImage()
+function rather than TextureImage(). Also allow the user to
+request a particular image type.</li>
+<li>coders/pdf.c (Huffman2DEncodeImage): Explicitly request a strip
+per page when writing Group4 TIFF.</li>
+<li>coders/tiff.c (WriteTIFFImage): Place a generous default limit
+on rows-per-strip when using Group3 or Group4 FAX compression.
+The default limit is added since it is observed that the Group4
+compressor fails with extremely huge strips. Added a define
+"tiff:rows-per-strip" to allow the user to explicitly set the rows
+per strip. Added a define "tiff:strip-per-page=true" to allow the
+user to force one strip per page no matter what. Added progress
+monitor support to tile writer.</li>
+</ul>
+</blockquote>
+<p>2008-06-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/configure/configure.cpp: The MAT coder now depends
+on zlib so add explicit dependencies for it.</li>
+<li>wand/magick_wand.c (MagickNegateImage): Implemented previously
+unimplemented Wand method.
+(MagickGammaImageChannel): Implemented previously unimplemented
+Wand method.</li>
+<li>magick/operator.h (enum QuantumOperator): Added GammaQuantumOp
+and "gamma" operator. Renamed InvertQuantumOp to NegateQuantumOp.</li>
+</ul>
+</blockquote>
+<p>2008-06-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/operator.h (enum QuantumOperator): Added InvertQuantumOp
+and "invert" operator.</li>
+<li>coders/xcf.c (GIMPBlendModeToCompositeOperator): For XCF format,
+we do support GIMP_DIVIDE_MODE composition now. Disable progress
+monitor during tile composition.</li>
+<li>magick/composite.c (DivideCompositePixels): New Divide composite
+operator contributed by Michael Burian <<a class="reference external" href="mailto:michael.burian%40sbg.at">michael<span>.</span>burian<span>@</span>sbg<span>.</span>at</a>>.</li>
+<li>magick/image.h (enum CompositeOperator): Added DivideCompositeOp.</li>
+<li>magick/enum_strings.c (CompositeOperatorToString): New function
+to convert a composite operator to a string.
+(StringToCompositeOperator): New function to convert a string to a
+composite operator.</li>
+</ul>
+</blockquote>
+<p>2008-06-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c (MagickThresholdImageChannel): Implement
+previously unimplemented Wand function.
+(MagickGetImageExtrema): Implement previously unimplemented Wand
+function.
+(MagickGetImageChannelExtrema): Implement previously unimplemented
+Wand function.
+(MagickQueryFonts): Implement previously unimplemented Wand
+function.</li>
+</ul>
+</blockquote>
+<p>2008-06-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>scripts/format_c_api_docs: Scan compare.c for API definitions.</li>
+<li>wand/magick_wand.c (MagickCompareImageChannels): Enable use of
+this function.
+(MagickCompareImages): Enable use of this function.</li>
+<li>magick/compare.c: New source file.
+(IsImagesEqual): Move here from magick/image.c.
+(CompareImageChannels): Initial implementation of function roughly
+similar to the one in ImageMagick.
+(CompareImages): Initial implementation of function roughly
+similar to the one in ImageMagick.</li>
+<li>magick/pixel_iterator.c (PixelIterateTripleModify): New pixel
+iterator function to access two images as read-only and one as
+read-write for updating existing pixels.
+(PixelIterateTripleNew): New pixel iterator function to access two
+images as read-only and one as read-write for creating new pixels.</li>
+</ul>
+</blockquote>
+<p>2008-06-22 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>mat.c Added CloseBlob().</li>
+</ul>
+</blockquote>
+<p>2008-06-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c (MagickSetImageFormat): Add method to support
+setting the image format.</li>
+</ul>
+</blockquote>
+<p>2008-06-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/profile.c (ProfileImage): Convert to use pixel iterators.</li>
+</ul>
+</blockquote>
+<p>2008-06-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/channel.c (ImportImageChannel): Convert to use pixel
+iterators.
+(SetImageChannelDepth): Convert to use pixel
+iterators.</li>
+<li>Magick++/lib/Image.cpp (quantize): Error measurement support was
+being performed incorrectly. SyncImage() is not needed here.</li>
+</ul>
+</blockquote>
+<p>2008-06-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/channel.c (GetImageChannelDepth): Convert to use pixel
+iterators.</li>
+</ul>
+</blockquote>
+<p>2008-06-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c (RegisterMATImage): Set blob support to false for
+MAT coder until bug related to blobs is fixed.</li>
+</ul>
+</blockquote>
+<p>2008-06-16 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>mat.c Ability to read a new compressed MATLAB image format.</li>
+</ul>
+</blockquote>
+<p>2008-06-15 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>mat.c, wpg.c: For empty images a message ImageFileDoesNotContainAnyImageData
+is returned.</li>
+</ul>
+</blockquote>
+<p>2008-06-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/channel.c (ChannelImage): Convert to use pixel iterators.
+(ExportImageChannel): Convert to use pixel iterators.</li>
+<li>coders/dpx.c (WriteDPXImage): As an experimental feature, when
+the environment variable MAGICK_RESERVE_STORAGE is set to "TRUE",
+then the DPX format writer will request the required storage from
+the filesystem in advance (if supported by the OS) or the full
+amount of memory required (when writing to an in-memory BLOB).</li>
+</ul>
+</blockquote>
+<p>2008-06-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magic.c (InitializeMagicInfo): New function to initialize
+file format detection.
+(GetMagickFileFormat): New internal implementation function to
+detect file format based on file header.
+(GetMagicInfo): This internal implementation function is eliminated.
+(MagicInfo): MagickInfo structure is now private to the
+implementation.</li>
+</ul>
+</blockquote>
+<p>2008-06-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (ListMagickInfo): Replace "blob support"
+indication with the coder stability classification.
+(RegisterMagickInfo): Pay attention to coder classification.</li>
+<li>magick/magick.h (MagickInfo): Added a coder stability
+classification field as well as the MAGICK_CODER_STABILITY
+environment variable to choose which coders are enabled.</li>
+</ul>
+</blockquote>
+<p>2008-06-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (GetImageCharacteristics): Don't access image
+pixels if they are not defined yet.</li>
+<li>coders/{avi.c,avs.c,dcm.c,ept.c,fits.c,mtv.c,palm.c,rla.c,tga.c}:
+Readers are now much more robust when faced with reading random files.</li>
+</ul>
+</blockquote>
+<p>2008-06-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageInfo): Exclude all virtual delegates and
+coders for pseudo-formats.</li>
+</ul>
+</blockquote>
+<p>2008-06-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c (ReadDCMImage): Make DCM reader quit immediately on
+EOF condition.</li>
+<li>coders/avi.c (ReadAVIImage): Make AVI reader more robust at
+rejecting bad files.</li>
+<li>configure.ac: Eliminated --enable-delegate-build option that I
+have not used or tested for almost ten years so it probably did
+not work anyway. Use --with-ttf=/prefix to specify the the
+installation prefix for freetype. Use
+--with-ttf=/prefix/bin/freetype-config to specify the whole path
+to freetype-config.</li>
+</ul>
+</blockquote>
+<p>2008-06-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImage): Add support for
+-black-threshold and -white-threshold.</li>
+<li>magick/image.h (enum ChannelType): Added GrayChannel
+enumeration.</li>
+<li>magick/operator.c (QuantumOperatorImageMultivalue): New
+implementation function to make creating legacy functions like
+black/white thresholding easier.</li>
+<li>wand/magick_wand.c (MagickBlackThresholdImage): Implemented.
+(MagickWhiteThresholdImage): Implemented.</li>
+<li>magick/effect.c (BlackThresholdImage): Implemented a
+BlackThresholdImage() which is similar to (but not identical to)
+the one in ImageMagick.
+(WhiteThresholdImage): Implemented a WhiteThresholdImage() which
+is similar to (but not identical to) the one in ImageMagick.</li>
+</ul>
+</blockquote>
+<p>2008-06-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/operator.c: Added support for additional channel
+operators (-operator) for applying noise to one or more channels.
+The additional operators are Noise-Gaussian, Noise-Impulse,
+Noise-Laplacian, Noise-Multiplicative, Noise-Poisson, and
+Noise-Uniform. The amount of noise applied is controlled via the
+numeric argument, which can specify the percentage of noise to
+apply.</li>
+<li>magick/enum_strings.c: New source module to contain the various
+EnumToString() and StringToEnum() functions which seem to multiply
+like bunny-rabbits.</li>
+<li>magick/gem.c (GenerateNoise): Poisson noise generation was
+taking excessively long and producing wrong results. Noise
+generation was only producing the correct amount of noise in the
+Q8 build.
+(GenerateDifferentialNoise): New function to return noise in a
+floating-point differential format.</li>
+</ul>
+</blockquote>
+<p>2008-06-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_iterator.h: Removed x,y coordinate information from
+all of the callback definitions since a use for this information
+has yet to be found.</li>
+<li>magick/composite.c (CompositeImage): Use individual callback
+functions for the composition operations.</li>
+<li>coders/xcf.c (ReadXCFImage): Deal with grayscale images the
+GraphicsMagick-way.</li>
+</ul>
+</blockquote>
+<p>2008-06-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xcf.c (ReadXCFImage): Validate XCF file data so that
+corrupted files don't crash GraphicsMagick.</li>
+</ul>
+</blockquote>
+<p>2008-05-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): Incrementally read user data
+part and check for EOF so that bogus files are rejected quickly.</li>
+<li>coders/cineon.c (ReadCINEONImage): Incrementally read user data
+part and check for EOF so that bogus files are rejected quickly.</li>
+</ul>
+</blockquote>
+<p>2008-05-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pict.c (ReadPICTImage): Ensure that row_bytes calculation
+does not overflow. Verify that RLE decode does not overflow
+buffer. Validate image frame dimensions.</li>
+<li>coders/palm.c (ReadPALMImage): Validate PALM bits per pixel and
+colormap indexes.</li>
+<li>magick/resource.c (ListMagickResourceInfo): List controlling
+environment variable in <cite>-list resource</cite> output as a configuration
+usage reminder.</li>
+<li>coders/pdf.c (ReadPDFImage): Properly deal with reading rotated
+PDFs.</li>
+</ul>
+</blockquote>
+<p>2008-05-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>FAQ.txt: Added a FAQ for how to extract and combine CMYK image
+channels to individual files.</li>
+</ul>
+</blockquote>
+<p>2008-05-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/fx.c (ConvolveImage): Eliminate unnecessary "range check"
+feature since range checking is not where the CPU time is going.</li>
+<li>magick/effect.c (UnsharpMaskImage): Re-write implementation to
+use pixel iterators.</li>
+<li>magick/pixel_iterator.c: Decided that the old per-pixel
+iterations were not useful enough to keep since the region-based
+ones are working fine. Moved pixel_row_iterator.c to
+pixel_iterator.c and renamed functions to remove the <cite>Row</cite>
+designation.</li>
+<li>magick/composite.c (CompositeImage): Automatically adjust
+colorspace of composite image so that it is compatible with canvas
+image.</li>
+<li>magick/alpha_composite.h (AlphaComposite): Fix alpha composite
+when both pixels contain transparency.</li>
+<li>PerlMagick/demo/demo.pl: Use segmentation parameters which
+are more suitable for our image.</li>
+</ul>
+</blockquote>
+<p>2008-05-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/composite.c (CompositeImage): CMYK copy composition
+operators automatically set the image colorspace to CMYK.</li>
+<li>coders/tiff.c (WriteTIFFImage): CMYK must take precedence over
+JPEG compression. We don't support JPEG compression in TIFF with
+CMYK.</li>
+</ul>
+</blockquote>
+<p>2008-05-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (ChannelThresholdImage): Re-implement using
+pixel iterators. Support thresholding only the red channel by
+eliminating the switch to intensity thresholding if only one
+channel parameter is supplied.</li>
+<li>coders/tiff.c (WriteTIFFImage): Don't accidentially convert CMYK
+images to RGB.</li>
+<li>magick/composite.c (CompositePixels): Handle CopyBlack properly
+for CMYK images.</li>
+<li>magick/command.c (CompositeImageCommand): Support CopyCyan,
+CopyMagenta, CopyYellow, and CopyBlack.</li>
+<li>magick/composite.c (CompositeImage): Preserve the canvas image
+colorspace.</li>
+<li>doc/options.imdoc: Remove mention of thresholding at the channel
+level since this never worked in a useful fashion and now only
+simple intensity thresholding is available via -threshold.</li>
+<li>magick/command.c (MogrifyImage): Revert to using ThresholdImage() rather
+than ChannelThresholdImage().</li>
+<li>PerlMagick/Magick.xs: Revert to using ThresholdImage() rather
+than ChannelThresholdImage().</li>
+</ul>
+</blockquote>
+<p>2008-05-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (AddNoiseImage): Implemented using pixel
+iterators.</li>
+<li>magick/pixel_row_iterator.c (PixelRowIterateDualNew): New pixel
+iterator. Similar to existing PixelRowIterateDualModify except
+that this one is for when initializing a new image.</li>
+</ul>
+</blockquote>
+<p>2008-05-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/composite.c (CompositeImage): Update image composition to
+use pixel iterator methods.</li>
+</ul>
+</blockquote>
+<p>2008-05-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/enhance.c: Re-wrote all enhancement functions in this
+module to be based on the pixel iterator methods.</li>
+<li>magick/command.c (ConvertImageCommand, MogrifyImageCommand,
+DisplayImageCommand): Gamma multiple channel syntax was broken.
+Now it is fixed.</li>
+</ul>
+</blockquote>
+<p>2008-05-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/colorspace.c (RGBTransformImage): Optimized lookup table
+generation performance to the maximum extent possible.
+(TransformRGBImage): Optimized lookup table
+generation performance to the maximum extent possible.</li>
+<li>magick/image.h (RoundDoubleToQuantum): New macro to explicitly
+safely round a <cite>double</cite> to a Quantum.
+(RoundFloatToQuantum): New macro to explicitly safely round a
+<cite>float</cite> to a Quantum.</li>
+<li>configure.ac: Add OpenMP support library to LIBS so that
+dependent applications will pick up this dependency without
+themselves needing to enable OpenMP.</li>
+<li>magick/command.c (CompositeImageList): Don't overwrite matte
+flag for CopyOpacity composition.</li>
+<li>magick/composite.c (CompositeImage): CopyOpacity composition
+needs the opacity channel to be enabled.</li>
+<li>PerlMagick/Magick.xs: Dissolve composition with Opacity was not
+working right. Now it does.</li>
+</ul>
+</blockquote>
+<p>2008-05-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/gem.c (HWBTransform): Hue value range was scaled wrong,
+leading to clipping.
+(TransformHWB): Hue value range was scaled wrong, leading to
+clipping.</li>
+</ul>
+</blockquote>
+<p>2008-05-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/colorspace.c (RGBTransformImage): Re-implement transform
+loops using PixelRowIterateMonoModify() in order to simplify the
+code.</li>
+</ul>
+</blockquote>
+<p>2008-05-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/colorspace.c (TransformRGBImage): Re-implement transform
+loops using PixelRowIterateMonoModify() in order to simplify the
+code.</li>
+<li>magick/{pixel_iterator.h, pixel_row_iterator.h}: Pass pixel
+colormap index/indexes to callback functions. Dependent code is
+adjusted to match.</li>
+</ul>
+</blockquote>
+<p>2008-05-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (ConvertImageCommand, MogrifyImageCommand,
+MogrifyImage): Add command access to the new channel operators.</li>
+<li>magick/operator.c (QuantumOperatorRegionImage): Support the new
+channel operators. Update to use PixelRowIterateMonoModify() for
+a bit more performance.</li>
+<li>magick/operator.h (enum QuantumOperator): Added new operators
+AssignQuantumOp, ThresholdQuantumOp, ThresholdBlackQuantumOp, and
+ThresholdWhiteQuantumOp.</li>
+</ul>
+</blockquote>
+<p>2008-05-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (VersionCommand): Report if OpenMP is supported
+by the build.</li>
+<li>configure.ac, Makefile.am: Install documentation according to
+the conventions established by the configure script. This
+installs the documentation under
+/usr/local/share/doc/GraphicsMagick by default.</li>
+</ul>
+</blockquote>
+<p>2008-05-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>scripts/format_c_api_docs: Add pixel_iterator.c and
+pixel_row_iterator.c to API documentation formatter.</li>
+<li>magick/api.h: Include pixel_iterator.h and pixel_row_iterator.h.</li>
+<li>magick/Makefile.am (MAGICK_INCLUDE_HDRS): Formally install
+pixel_iterator.h and pixel_row_iterator.h.</li>
+<li>magick/image.c (IsImagesEqual): Update to use
+PixelRowIterateDualRead().
+(GetImageStatistics): Update to use PixelRowIterateMonoRead().</li>
+<li>magick/pixel_row_iterator.h: New interfaces which are similar to
+the already existing interfaces in pixel_iterator.h except that
+they pass a row to the callback rather than one pixel.</li>
+<li>magick/operator.c (QuantumOperatorRegionImage): Add progress
+monitor support.</li>
+<li>magick/pixel_iterator.c (PixelIterateMonoRead): Add a
+<cite>description</cite> argument and progress monitor support.
+(PixelIterateMonoModify): Add a
+<cite>description</cite> argument and progress monitor support.
+(PixelIterateDualRead): Add a
+<cite>description</cite> argument and progress monitor support.
+(PixelIterateDualModify): Add a
+<cite>description</cite> argument and progress monitor support.</li>
+<li>magick/resize.c (HorizontalFilter, VerticalFilter): Switch back
+to RoundSignedToQuantum() since some pixels were experiencing
+underflow. Localize some variables so that we don't have to
+declare them as private for OpenMP.</li>
+</ul>
+</blockquote>
+<p>2008-05-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac, magick/resize.c, PerlMagick/Makefile.PL.in: Added
+OpenMP support for parallelizing a task across multiple cores.</li>
+</ul>
+</blockquote>
+<p>2008-05-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac, magick/nt_base.h: Fix using libbz2 under MinGW.</li>
+<li>coders/{msl.c, svg.c, url.c}: Fix compilation with modern
+libxml2 under MinGW.</li>
+</ul>
+</blockquote>
+<p>2008-05-08 Josue Andrade Gomes <<a class="reference external" href="mailto:josuegomes%40gmail.com">josuegomes<span>@</span>gmail<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.h, libxml/include/win32config.h (vsnprintf):
+Fixed compilation issue noticed with Visual C++ 2008.</li>
+</ul>
+</blockquote>
+<p>2008-05-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (GetMagickInfo): Simplify implementation.
+(RegisterMagickInfo): Remove any existing entry since module
+loading may result in duplicate entries.</li>
+</ul>
+</blockquote>
+<p>2008-05-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>libtool: Update to libtool 1.2.4.</li>
+<li>magick/magick.h (MagickInfo): Store string attributes as <cite>const
+char *</cite> to statically allocated data rather than as heap allocated
+strings. THIS IS AN INTERFACE CHANGE. Using a coder written to
+the old interface is non-fatal but may resemble a small memory
+leak. The reason for the change is to avoid at least 880 needless
+malloc()/strlen()/strlcpy() operations at initialization time, and
+at least 880 free() calls at destruction time. While these
+operations did not take long, they are still an unnecessary
+overhead, which is increased in thread-safe applications.</li>
+<li><dl class="first docutils">
+<dt>magick/module.c (OpenModule): Ignore requests to open modules</dt>
+<dd>which have already been opened.</dd>
+</dl>
+</li>
+<li>GraphicsMagick.spec.in: Add --with-included-ltdl to the default
+options since this seems safest until the libltdl validation logic
+is fully robust. This should be made user-configurable in the
+future.</li>
+<li>magick/Makefile.am (magick_libGraphicsMagick_la_LIBADD): Apply
+libltdl dependency argument as required for building.</li>
+<li>configure.ac: Intuit if the GraphicsMagick library will depend
+on -lltdl.</li>
+<li>Magick++/bin/GraphicsMagick++-config.in: Use substitutions
+rather than invoking GraphicsMagick-config in order to determine
+GraphicsMagick library usage requirements. This avoids problems
+when GraphicsMagick-config is not in the executable search path.</li>
+</ul>
+</blockquote>
+<p>2008-05-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>GraphicsMagick.spec.in: NEWS was renamed to NEWS.txt. Enable
+libtool verbose output so it is possible to diagnose build
+failures.</li>
+</ul>
+</blockquote>
+<p>2008-05-01 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>mat.c: gm convert -limit Pixels 1 input_gray_lsb_16bit.mat crap.miff
+don't rotate partial image.</li>
+</ul>
+</blockquote>
+<p>2008-04-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (DestroyMagickInfoList): Use DestroyMagickInfo().
+(UnregisterMagickInfo): Use DestroyMagickInfo().
+(RegisterMagickInfo): Simplify dramatically by adding to the front
+of the list rather than maintaining alpha order.</li>
+<li>magick/image.c (DestroyImageInfo): Tidy up and simplify code.</li>
+<li>magick/constitute.c (WriteImage): Comment out the "bi-modal
+delegate" execution code until we determine what value it offers.
+The test suite passes without it.</li>
+<li>magick/magick.h (struct MagickInfo): There is no need for <cite>name</cite>
+to be allocated data so make it const.
+(DestroyMagickInfo): Add a static function to destroy a MagickInfo
+structure. Renamed previous DestroyMagickInfo to
+DestroyMagickInfoList and made it static.</li>
+</ul>
+</blockquote>
+<p>2008-04-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh: GraphicsMagick 1.2 released.
+CVS head is now 1.3 development.</li>
+<li>png: Updated libpng to 1.2.27.</li>
+</ul>
+</blockquote>
+<p>2008-04-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageInfo): Ignore file extensions which
+match defined virtual delegate entries (including stealth
+entries).</li>
+</ul>
+</blockquote>
+<p>2008-04-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>BENCHMARKS.txt: Added timings for -blur.</li>
+</ul>
+</blockquote>
+<p>2008-04-27 Darko Kojic <<a class="reference external" href="mailto:dkc%40sf.net">dkc<span>@</span>sf<span>.</span>net</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (MedianFilterImage): Fixes to compile on ARM
+CPU.</li>
+</ul>
+</blockquote>
+<p>2008-04-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.h (MagickInfo): Remove image_info member since I
+can not find any purpose for it.</li>
+<li>coders/tiff.c (WriteTIFFImage): Remove assertion check on
+scanline size since it has not caught anything.</li>
+<li>magick/image.c (SetImageInfo): Ensure that the file extension
+does not trigger unwanted activity such as access to an X11
+server, printer, or the launch delegate.</li>
+<li>config/Makefile.am (configshare_DATA): Install colors.mgk in
+share path.</li>
+<li>magick/blob.c (GetConfigureBlob): Search <cite>share</cite> config path
+prior to <cite>lib</cite> config path.</li>
+</ul>
+</blockquote>
+<p>2008-04-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WriteOnePNGImage): TrueColor RGB was usually
+written rather than the desired more compact format. This is a
+first pass at fixing that.</li>
+</ul>
+</blockquote>
+<p>2008-04-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>BENCHMARKS.txt: Added a benchmark summary.</li>
+</ul>
+</blockquote>
+<p>2008-04-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh: Prepare 1.2beta1 release.</li>
+<li>NEWS.txt: Updated with latest news.</li>
+</ul>
+</blockquote>
+<p>2008-04-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>libtool: Update to 1.2965 2008-04-22</li>
+<li>coders/png.c (ReadOneJNGImage): Deal with ReadImage() returning
+a NULL pointer when reading JPEG sub-image.</li>
+</ul>
+</blockquote>
+<p>2008-04-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/channel.c (ExportImageChannel): Added progress monitor
+support.
+(SetImageChannelDepth): Added progress monitor support.
+(ChannelImage): Don't preserve matte channel when extracting
+channel.</li>
+<li>magick/image.c (SetImageOpacity): Avoid integer overflow in Q32
+build. Added progress monitor support.
+(SyncImage): Added progress monitor support.
+(SetImage): Added progress monitor support.
+(CycleColormapImage): Added progress monitor support.
+(GetImageBoundingBox): Added progress monitor support.
+(SortColormapByIntensity): Added progress monitor support.</li>
+</ul>
+</blockquote>
+<p>2008-04-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac, magick/Makefile.am: Don't use libtdl unless we are
+supposed to be using it!</li>
+<li>libtool: Updated to GNU libtool 1.2960 2008-04-19.</li>
+<li>configure.ac, magick/delegate.h: It seems that the modern
+convention is to store ghostscript headers in a subdirectory
+called <cite>ghostscript</cite> rather than <cite>ps</cite>.
+We don't actually need Ghostscript errors.h and that is a good
+thing since it seems that some newer Ghostscript calls it ierrors.h</li>
+</ul>
+</blockquote>
+<p>2008-04-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/installer/inc/files-dlls.isx: Comment out inclusion
+of X11 support DLLs.</li>
+<li>VisualMagick/magick/magick_config.h.in: X11 is no longer in the
+default Windows build.</li>
+</ul>
+</blockquote>
+<p>2008-04-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c: Eliminate various annoying warnings noticed
+under MinGW.</li>
+<li>magick/spinlock.h (_spinlock_release): Use <cite>long</cite> rather than
+<cite>int</cite> in order to eliminate warning under MinGW.</li>
+<li>magick/semaphore.c (spinlock_wait): Use <cite>long</cite> rather than <cite>int</cite>
+in order to eliminate warning under MinGW.</li>
+<li>magick/log.c (LogMagickEventList): Eliminate warning under MinGW.</li>
+<li>magick/compress.h: Clean up interface definitions to use
+magick_uint8_t for unsigned character data.</li>
+<li>coders/jpeg.c (ReadJPEGImage): Don't use GetPixelCachePresent()
+since it is not DLL-exported.</li>
+</ul>
+</blockquote>
+<p>2008-04-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/yuv.c (ReadYUVImage): Report exception info correctly.</li>
+<li>coders/xpm.c (ReadXPMImage): Report exception info correctly.</li>
+<li>coders/xc.c (ReadXCImage): Report exception info correctly.</li>
+<li>coders/tiff.c (ReadTIFFImage): Report exception info correctly.</li>
+<li>coders/null.c (ReadNULLImage): Report exception info correctly.</li>
+<li>coders/jpeg.c (ReadJPEGImage): Report exception info correctly.
+Use of Huffman optimization is now based on available memory
+rather than a hard-coded image size.</li>
+<li>coders/gif.c (ReadGIFImage): Report exception info correctly.</li>
+<li>magick/utility.c (MagickSizeStrToInt64): New function to convert
+a size string with optional units suffix to a 64-bit integer.
+(MagickStrToInt64): New function to convert a string to a 64-bit
+integer, with error checking.</li>
+<li>magick/image.c (SetImage): SetImage now returns error status.</li>
+<li>magick/command.c: Eliminated the long-deprecated -cache resource
+limit option.</li>
+<li>magick/resource.c: Complete re-write of the resource limit
+system. Resource specifications are now absolute except that they
+support a binary metric suffix such as <cite>K</cite> to scale the value.
+Added the <cite>Pixels</cite> limit type to limit the maximum number of
+pixels allowed for each image.</li>
+</ul>
+</blockquote>
+<p>2008-04-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (WriteJPEGImage): Output grayscale images more
+efficiently.</li>
+</ul>
+</blockquote>
+<p>2008-04-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lcms: Updated lcms to 1.17.</li>
+<li>png: Updated libpng to 1.2.26.</li>
+</ul>
+</blockquote>
+<p>2008-04-09 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple....">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOnePNGImage) Use the low bits of the PNG
+tRNS values instead of scaling them when reducing from 16-bits.</li>
+</ul>
+</blockquote>
+<p>2008-04-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Updated to Autoconf 2.62.</li>
+</ul>
+</blockquote>
+<p>2008-04-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImageCommand): New -create-directories
+option automatically creates subdirectories as needed when
+-output-directory option is used. This is useful when one
+directory tree of files is being mogrified to a new tree.</li>
+</ul>
+</blockquote>
+<p>2008-04-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (MagickCreateDirectoryPath): New function to
+create a directory path. Will be used later.</li>
+<li>configure.ac: Tweaks to produce a successful MinGW cross-compile.</li>
+</ul>
+</blockquote>
+<p>2008-04-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Added a simple sentinel
+assertion to hopefully flush out any remaining cases where
+ExportImagePixelArea() writes past the end of its buffer.</li>
+<li>magick/constitute.c (ExportImagePixelArea): GrayQuantum case for
+DirectClass pixels was sometimes writing a zero byte one past the
+end of the allocated buffer. Thanks to Josue Gomes for reporting
+this bug.</li>
+</ul>
+</blockquote>
+<p>2008-04-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/{pcd.c,pcx.c,pdb.c,pict.c,stegano.c,wpg.c,xcf.c}:
+Warnings reduction.</li>
+<li>magick/{channel.c,image.c,unix_port.c,render.c}: Warnings
+reduction.</li>
+<li>coders/mat.c: Convert C99 comments to C89 comments so code can
+compile with a C89 compiler.</li>
+<li>coders/tiff.c (WriteTIFFImage): Add an assertion to enforce that
+the bytes output to the scanline is no more than the bytes
+allocated for the scanline.</li>
+<li>NEWS.txt: Updated with latest NEWS.</li>
+</ul>
+</blockquote>
+<p>2008-04-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdf.c (WritePDFImage): Default to ZIP compression if
+available. Ignore Image compression setting since the useful
+value (set by the user) usually comes from ImageInfo.</li>
+<li>coders/png.c (WriteOnePNGImage): Fix progress monitor when
+writing PNG.</li>
+<li>magick/channel.c (GetImageChannelDepth): Added progress monitor
+support.</li>
+<li>magick/signature.c (SignatureImage): Added progress monitor support.</li>
+<li>magick/image.c (GetImageDepth): Added progress monitor support.</li>
+</ul>
+</blockquote>
+<p>2008-04-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>libtool: Update to libtool 2.2.2.</li>
+<li>coders/jpeg.c: Convert more code to use size_t for sized values
+rather than long.</li>
+<li>coders/wpg.c (InsertRow): Fix log format string specification.</li>
+<li>coders/dpx.c (WriteDPXImage): Fix typo in casts.</li>
+<li>coders/fpx.c (ReadFPXImage): Apply FreeBSD patch from Mikhail
+Teterin to allow FlashPIX to work better for 64-bit builds.
+Addresses SourceForge issue 1824658 "FPX should work again now".</li>
+<li>magick/blob.c (ImageToBlob): Fix typo in cast.</li>
+</ul>
+</blockquote>
+<p>2008-03-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>CONTRIBUTE.txt: Convert contribute.html to reStucturedText
+format and generate HTML version from it.</li>
+<li>PROCESS.txt: Convert description of development process to
+reStucturedText format and generate HTML version from it.</li>
+<li>INSTALL-windows.txt: Add instructions for how to install from
+setup.exe style installer. Also add instructions for how the
+distribution package is built.</li>
+<li>Copyright.txt: Reformat in reStucturedText format and generate
+HTML version from it.</li>
+<li>VisualMagick/installer/inc/body.isx: No longer include
+development headers and libraries in the Windows DLL install
+package since they are large and they may only work with the
+version of Visual C++ used to perform the build. It is much safer
+for the developer to build the package from source with his own
+compiler.</li>
+</ul>
+</blockquote>
+<p>2008-03-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fix compilation issues with Microsoft Visual Studio.</li>
+</ul>
+</blockquote>
+<p>2008-03-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage, WriteDPXImage): Use lookup tables to
+speed up value conversion.</li>
+<li>magick/memory.h (MagickAllocateArray): Renamed from
+MagickAllocateMemoryElements.</li>
+</ul>
+</blockquote>
+<p>2008-03-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/Magick.xs: Use memory allocation macros like the rest
+of the code.</li>
+<li>magick/memory.c (MagickMalloc): New function which behaves
+similar to malloc().
+(MagickMallocArray): New function for allocating an array.
+(MagickRealloc): New function which behaves similar to realloc().
+(MagickFree): New function which behaves similar to free().
+(MagickAllocFunctions): New function to allow the user to specify
+the memory allocation functions.</li>
+<li>magick/memory.h: New header file to define memory allocation
+functions.</li>
+<li>magick/deprecate.c (DeleteImageList, DestroyImages,
+GetImageList, GetImageListIndex, GetImageListSize, GetNextImage,
+GetNumberScenes, GetPreviousImage, ParseImageGeometry,
+PopImageList, PostscriptGeometry, PushImageList,
+SetCacheThreshold, SetImageList, ShiftImageList, SizeBlob,
+SpliceImageList, UnshiftImageList): Remove functions which were
+already deprecated in ImageMagick 5.5.2 or earlier.</li>
+</ul>
+</blockquote>
+<p>2008-03-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (WriteDPXImage): Support writing image which is
+already in a YCbCr colorspace.
+(ReadDPXImage): Return YCbCr images in YCbCr colorspace unless
+they are also Cineon log encoded.</li>
+<li>magick/image.c (CloneImage): Use CloneImageAttributes().</li>
+<li>magick/attribute.c (CloneImageAttributes): New function for
+copying image attributes from one image to another.</li>
+<li>magick/utility.c (TranslateTextEx): Check if the pixel cache is
+initialized before using a function which requires using it.
+Thanks to Micha³ Kowalczuk for bringing this issue to my
+attention.</li>
+<li>magick/attribute.c (SetImageAttribute): Only apply
+transformations to "comment" and "label" attributes.</li>
+<li>magick/pixel_cache.c (GetPixelCachePresent): New function to
+test if the image pixel cache is present and initialized.</li>
+</ul>
+</blockquote>
+<p>2008-03-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/colorspace.c (RGBTransformPacket): Rationalize casts for
+improved performance.</li>
+<li>magick/image.c (GetImageDepth): Use table lookups to improve
+performance.</li>
+</ul>
+</blockquote>
+<p>2008-03-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (AllocateImage): Transfer any attributes from
+ImageInfo to allocated image.
+(SetImageDepth): Use table lookups to improve performance.</li>
+</ul>
+</blockquote>
+<p>2008-03-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImageCommand): Added an
+-output-directory option to <cite>mogrify</cite> to send output files to the
+specified directory.</li>
+</ul>
+</blockquote>
+<p>2008-03-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/read.t: Add input_logical_lsb_08bit.mat to
+PerlMagick tests.</li>
+<li>magick/nt_feature.c (CropImageToHBITMAP, ImageToHBITMAP): Use
+GlobalFree() to free bitmap handle.</li>
+</ul>
+</blockquote>
+<p>2008-03-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/read.t: Added/adjusted WPG test files from Jaroslav
+Fojtik.</li>
+</ul>
+</blockquote>
+<p>2008-03-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>AUTHORS.txt, BUGS.txt, FAQ.txt, NEWS.txt, PLATFORMS.txt,
+TODO.txt, INSTALL-unix.txt, INSTALL-windows.txt: Use
+reStructuredText format.</li>
+<li>Makefile.am: Use reStructuredText for more files.</li>
+</ul>
+</blockquote>
+<p>2008-02-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (ReadImage): Disable colorspace override
+code since it was being wrongly-triggered in X11 display commands.</li>
+</ul>
+</blockquote>
+<p>2008-02-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/body.html: Update to mention 1.1.11 release.</li>
+</ul>
+</blockquote>
+<p>2008-02-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/colorspace.c (RndToInt): Cast result to <cite>unsigned int</cite>
+rather than <cite>int</cite> in order to avoid possible value truncation with
+Q32 build. Problem was reported by Kai-Uwe Behrmann.
+(TransformRGBImage): Fix loop iterator which was looping one past
+the end of the array. Reported by Kai-Uwe Behrmann.</li>
+<li>magick/command.c: Added a -set option to the composite, convert,
+display, mogrify, import commands in order to allow setting an
+image attribute.</li>
+</ul>
+</blockquote>
+<p>2008-02-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/Magick.xs: Use MagickAcquireMemory() rather than
+AquireMemory().</li>
+<li>coders/xwd.c (ReadXWDImage): Eliminate integer overflow
+vulnerability (IDefense 09.19.07).</li>
+<li>coders/xbm.c (ReadXBMImage): ditto</li>
+<li>coders/xcf.c (ReadXCFImage): ditto</li>
+<li>coders/dib.c (ReadDIBImage): ditto</li>
+<li>coders/dcm.c (ReadDCMImage): ditto</li>
+</ul>
+</blockquote>
+<p>2008-02-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): The <a class="reference external" href="http://tools.ietf.org/html/rfc3949.html">RFC 3949</a> specification for
+Internet FAX recommends LSB2MSB fill order so document that.</li>
+</ul>
+</blockquote>
+<p>2008-02-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Use <cite>-define
+tiff:fill-order={msb2lsb|lsb2msb}</cite> to control TIFF bit fill order.</li>
+</ul>
+</blockquote>
+<p>2008-02-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Updated to latest CVS libtool.</li>
+<li>coders/tiff.c (CompressionSupported): Use
+TIFFGetConfiguredCODECs() to test if a requested compression type
+is supported by libtiff. Based on advice from Frank Warmerdam.</li>
+<li>configure.ac: Add test for TIFFGetConfiguredCODECs() in libtiff.</li>
+</ul>
+</blockquote>
+<p>2008-02-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c: With libtiff 3.6.1, including tiff.h and tiffio.h
+is not sufficient to obtain the definitions from tiffconf.h so
+libtiff is assumed to not support any features, such as
+compression. Avoid this problem by explicitly including
+tiffconf.h if it is found. This resolves SourceForge issue
+[1883527] compression of tiff-file has no effect.</li>
+</ul>
+</blockquote>
+<p>2008-02-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/installer/inc/setup.isx: Set Inno Setup installer
+compression to "lzma/max".</li>
+<li>PerlMagick/Magick.xs: Eliminate use of memory allocation macros
+since these failed miserably under Windows where it seems that
+malloc, free, and realloc are redefined via macros by the Perl
+build environment. This reverts changes made on 2007-12-01.</li>
+<li>magick/memory.c (MagickAcquireMemoryArray): Use implementation
+from the 1.1 branch.</li>
+<li>magick/utility.h: Remove MagickSafeMultiplySize_t since it seems
+that use of inline functions in Windows is a disaster area.</li>
+</ul>
+</blockquote>
+<p>2008-02-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am (windows-dist): Create a 7z compressed Windows
+comprehensive source package. See <a class="reference external" href="http://www.7-zip.org/">http://www.7-zip.org/</a> for
+information on Windows 7-Zip and <a class="reference external" href="http://p7zip.sourceforge.net/">http://p7zip.sourceforge.net/</a> for
+information on portable 7-Zip (P7ZIP).</li>
+</ul>
+</blockquote>
+<p>2008-02-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Add logging for image resolution
+and resolution units.</li>
+<li>magick/version.h.in: Update copyright year to 2008.</li>
+</ul>
+</blockquote>
+<p>2008-02-01 Gary V. Vaughan <<a class="reference external" href="mailto:gary%40gnu.org">gary<span>@</span>gnu<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Updated for libtool-2.1b.</li>
+<li>bootstrap (libtoolize): Libtoolize can figure out the mode and
+directory for libltdl from configure.ac.</li>
+</ul>
+</blockquote>
+<p>2008-01-28 Ralf Wildenhues <<a class="reference external" href="mailto:Ralf.Wildenhues%40gmx.de">Ralf<span>.</span>Wildenhues<span>@</span>gmx<span>.</span>de</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/Makefile.am: Update
+magick_libGraphicsMagick_la_DEPENDENCIES to use LTDLDEPS.</li>
+</ul>
+</blockquote>
+<p>2008-01-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageInfo): Successfully read existing file
+names in the form file[123] which were failing to read since they
+appear to be a valid sub-image specification.</li>
+</ul>
+</blockquote>
+<p>2008-01-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (ExpandFilenames): If a filename appears to
+contain a wildcard specification, first check to see if there is
+file matching the unexpanded wildcard prior to engaging in the
+slow task of wildcard expansion. Without this fix, expanding the
+command line takes a very long time if there are a huge number of
+files in the directory, and some file names appear to contain
+wildcard specifications. Inspired by SourceForge bug reports [
+1878992 ] "literal square brackets in file name cause large delay"
+and [ 1783209 ] "converting runs slowly when subimage is
+specified", but this might not be the complete fix for the
+problem.</li>
+</ul>
+</blockquote>
+<p>2008-01-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am: Update to Automake 1.10.1 and enable generation of
+an lzma compressed source package.</li>
+</ul>
+</blockquote>
+<p>2008-01-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Added configure option --with-umem to enable use
+of the umem memory allocation library available in Solaris 9,
+Update 3 and later, or from
+<a class="reference external" href="https://labs.omniti.com/trac/portableumem/">https://labs.omniti.com/trac/portableumem/</a>. This library supports
+concurrency in multi-threaded programs and supports debugging
+memory issues. See
+<a class="reference external" href="http://developers.sun.com/solaris/articles/libumem_library.html">http://developers.sun.com/solaris/articles/libumem_library.html</a>
+for a description of how to use the library for debugging memory
+issues.</li>
+</ul>
+</blockquote>
+<p>2008-01-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (VersionCommand): Include a "Large Memory" item
+in the Feature Support list.</li>
+<li>coders/png.c (RegisterPNGImage): Remove reference to dead PNG
+ftp site.</li>
+<li>VisualMagick/configure/configure.cpp (InitInstance): Remove
+project dependency on dxguid.lib (Direct-X).</li>
+</ul>
+</blockquote>
+<p>2008-01-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Update libtool to latest CVS version.</li>
+</ul>
+</blockquote>
+<p>2008-01-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (DisplayImageCommand): No longer default to
+reading standard input if stdin fails isatty() test. This
+behavior was causing failure to launch from Gnome and it is
+difficult to work around the issue from within a .desktop file.
+(AnimateImageCommand): No longer default to
+reading standard input if stdin fails isatty() test.</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
<p>2009-09-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
<blockquote>
<ul class="simple">
-<li>version.sh: Released GraphicsMagick 1.3.7.</li>
-</ul>
-</blockquote>
-<p>2009-09-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
-<blockquote>
-<ul class="simple">
<li>coders/msl.c, doc/conjure.imdoc: Add support for a new <cite>profile</cite>
command in MSL/conjure which applies, adds, or removes one or more
IPTC, ICC or generic profiles from a file. Work contributed by
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2009-12-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/unix_port.c (MagickSpawnVP): Remove unneeded new line
+character in error message format.</li>
+<li>Magick++/Makefile.am: Allow Magick++ to be built as a shared
+library under MinGW and Cygwin. This requires a modern GCC in
+order for C++ exceptions to work.</li>
+<li>utilities/tests/annotate.sh: MSYS is garbeling up draw command
+so use a command file rather than using command line.</li>
+<li>coders/{fits.c,meta.c,locale.c}: Fix benign warnings noticed
+under Cygwin 1.7.</li>
+<li>magick/{constitute.c,resource.c,utility.c}: Fix benign warnings
+noticed under Cygwin 1.7.</li>
+</ul>
+</blockquote>
+<p>2009-12-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/module.c (DestroyModuleInfo): If the Jasper library is
+used, then we can't invoke lt_dlexit() because this unloads the
+Jasper library and Jasper sometimes registers an atexit() cleanup
+handler. Unfortunately, this may annoy memory leak checkers.</li>
+<li>coders/jp2.c: Defer Jasper initialization to point of use.</li>
+</ul>
+</blockquote>
+<p>2009-12-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c (MagickCdlImage): New method to apply the ASC
+CDL to an image.
+(MagickHaldClutImage): New method to apply a Hald CLUT to an image.</li>
+</ul>
+</blockquote>
+<p>2009-12-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/studio.h atof(), atoi(), and atol() are legacy functions
+which might not be thread safe, might not enforce reasonable
+limits, and should not be used for new code. So we implement them
+via strtod() and strtol().</li>
+</ul>
+</blockquote>
+<p>2009-12-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c (MagickGetImageBoundingBox): New method to
+return the crop bounding box required to remove any solid-color
+border from the image.
+(MagickGetImageFuzz/MagickSetImageFuzz): New methods to get and
+set the color comparison fuzz factor</li>
+<li>wand/pixel_wand.c (ClonePixelWand): New method to deep-copy an
+existing pixel wand.
+(ClonePixelWands): New method to deep-copy an array of existing
+pixel wands.</li>
+<li>wand/magick_wand.c (MagickSetResolution): New method to set the
+wand resolution. This one also works before the image has been
+read (unlike MagickSetImageResolution()).
+(MagickSetResolutionUnits): New method to set the wand resolution
+units. Use in conjunction with MagickSetResolution(). This one
+also works before the image has been read (unlike
+MagickSetImageUnits()).</li>
+</ul>
+</blockquote>
+<p>2009-12-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/demo/demo.cpp (main): Stop using deprecated functions.</li>
+<li>wand/drawtest.c: Stop using deprecated functions.</li>
+</ul>
+</blockquote>
+<p>2009-12-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/module.c (ModuleAliases): J2C is supported by the JP2
+coder.</li>
+<li>coders/jp2.c: JP2 is now an alias for JPC since many files use
+that extension. Problem reported by Stefano Acerbetti.</li>
+</ul>
+</blockquote>
+<p>2009-12-09 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple....">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: The png8 encoder would fail when trying to write
+a 1-color image. Problem reported by Bob Clark.</li>
+</ul>
+</blockquote>
+<p>2009-12-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Define _GNU_SOURCE and _NETBSD_SOURCE so that
+pwrite() and pread() prototypes are available under GNU Linux and
+NetBSD.</li>
+<li>coders/tiff.c: Warnings reduction.</li>
+<li>magick/widget.c: Warnings reduction.</li>
+<li>magick/segment.c (Classify): Warnings reduction.</li>
+<li>magick/magic.c (struct StaticMagic): Length and offset can never
+be negative so use an unsigned type rather than size_t.</li>
+<li>magick/render.c (TracePath): Fix access one beyond the end of
+the points array.</li>
+</ul>
+</blockquote>
+<p>2009-11-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/gem.c (GetOptimalKernelWidth1D, GetOptimalKernelWidth2D):
+In the Q32 build, convolution kernel size was estimated
+incorrectly for large sigmas on 32-bit systems due to arithmetic
+overflow.</li>
+</ul>
+</blockquote>
+<p>2009-11-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (ConvolveImage): Moved here from fx.c since this
+is a more suitable place for it to be.</li>
+<li>magick/enhance.c (GammaImage): Improve performance a bit.
+Preserve full precision in Q32 build.</li>
+</ul>
+</blockquote>
+<p>2009-11-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/{channel.c,constitute.c,nt_base.h}: Start using the C'99
+<cite>restrict</cite> keyword.</li>
+</ul>
+</blockquote>
+<p>2009-11-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c (MagickGetImageAttribute): New method to get
+an image attribute. Patch contributed by Mikko Koppanen.
+(MagickSetImageAttribute): New method to set an image attribute.
+Patch contributed by Mikko Koppanen.</li>
+<li>magick/constitute.c (ReadImage): Log subimage and subrange.</li>
+<li>configure: Update to Autoconf 2.65.</li>
+<li>magick/attribute.c (GenerateIPTCAttribute): Returned IPTC string
+values were one character too short.</li>
+</ul>
+</blockquote>
+<p>2009-11-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (AllocateImage): The documented shorthand for
+specifying image size via filename[WIDTHxHEIGHT] was not working
+for raw formats which use the image tile_info data.</li>
+</ul>
+</blockquote>
+<p>2009-11-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (ParseSubImageSpecification): Try to match
+behavior of previous sub-image specification parser. Some
+incantations did not produce the same results.</li>
+<li>win2k/IMDisplay/res/{IMDisplay.ico, IMDisplayDoc.ico}: Replaced
+with GraphicsMagick icon prepared by Jaroslav Fojtik.</li>
+<li>coders/svg.c (ReadSVGImage): Use runtime initialization of
+SAXModules rather than static initialization.</li>
+<li>magick/command.c: Commands now support reading an image from
+stdin in conjunction with a subrange specification (e.g. "-[1]").
+Problem was reported by Mario Becroft.</li>
+<li>magick/common.h: New header file to incorporate the common bits
+shared by studio.h and api.h.</li>
+<li>ltdl/ltdl.c: Update libltdl to 2.2.6b in order to fix security
+issue. Resolves CVE-2009-3736 as it pertains to GraphicsMagick.</li>
+</ul>
+</blockquote>
+<p>2009-11-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (ConstituteImage, DispatchImage): <cite>A</cite> and
+<cite>T</cite> should indicate transparency and <cite>O</cite> should indicate opacity.
+Behavior was inconsistent. In some cases <cite>O</cite> meant transparency
+while in other cases it meant opacity. Also, in a few cases, matte
+was not getting enabled in the image as it should. Problems were
+reported by Scott Kuhl.</li>
+</ul>
+</blockquote>
+<p>2009-11-10 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple....">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Also suppress new pedantic warnings from most
+older libpng-1.4.0 betas.</li>
+<li>coders/png.c: Added a warning when attempting to use libpng-1.4beta
+older than 1.4.0beta67.</li>
+</ul>
+</blockquote>
+<p>2009-11-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImage): Only invoke ProfileImage() if
+an ICC CMS transform is to be performed. Otherwise invoke
+SetImageProfile() to add the new profile.</li>
+<li>magick/profile.c (ProfileImage): Improve logging messages.</li>
+<li>coders/tiff.c (ReadTIFFImage): Allow CIELAB TIFF to be read.</li>
+<li>coders/jpeg.c (ReadJPEGImage): Detect and apply colorspaces
+appropriately for ITU FAX JPEG.</li>
+</ul>
+</blockquote>
+<p>2009-11-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tiff: Updated to libtiff 3.9.2.</li>
+</ul>
+</blockquote>
+<p>2009-11-08 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple....">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Suppress new pedantic warnings from libpng
+version 1.2.41 and 1.4.0 and later.</li>
+</ul>
+</blockquote>
+<p>2009-11-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc: Document difference between -recolor and
+Adobe Flash color matrix.</li>
+</ul>
+</blockquote>
+<p>2009-11-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImageCommand): Convolve does not accept
+an argument which looks like a geometry. Resolves SourceForge
+issue #2890923 "Different handling of -convolve between convert
+and mogrify".
+(MogrifyImage): Validate that user-provided matrix is square when
+parsing -convolve and -recolor commands in order to avoid a core
+dump.</li>
+<li>coders/tiff.c (ReadTIFFImage): Improved/added more coder logging
+statements.</li>
+<li>magick/xwindow.c: Reflowed some code and comments.</li>
+<li>magick/utility.c (SetClientName): Default client name does need
+to be "Magick", so original value is restored.</li>
+<li>coders/mpc.c (ReadMPCImage): is_monochrome and is_grayscale
+flags were not managed properly for the MPC coder.</li>
+</ul>
+</blockquote>
+<p>2009-10-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (ReadJPEGImage): Added jpeg:block-smoothing and
+jpeg:fancy-upsampling defines to control these JPEG library
+options.</li>
+<li>magick/image.c (SetImageInfo): Fix lockup due to hanging in loop
+while parsing malformed sub-image specification (SourceForge issue
+2886560). Also fixes the ability to pass the image size via the
+filename specification like "myfile.jpg[640x480]" rather than
+needing to use -size.</li>
+<li>coders/jpeg.c (ReadJPEGImage): Fix image scaling when used with
+IJG JPEG library version 7.</li>
+</ul>
+</blockquote>
+<p>2009-10-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resource.c: Added support for a "Threads" limit, which
+specifies how many threads may be used. Note that if
+omp_set_nested(true) is used, GCC's GOMP seems to replicate this
+number of threads for each level of threading rather than sharing
+the specified number of threads across all teams. For example,
+specifying four threads leads to sixteen active threads with
+omp_set_nested(true) and nested threading. This GOMP behavior
+does not seem to cause any harm.
+(GetMagickResourceLimit): New accessor function to retrieve the
+maximum limit for a resource.</li>
+<li>magick/module.c (ReadModuleConfigureFile): Default set of module
+aliases is now statically initialized. The modules.mgk file is
+now optional and can be used to support adding more modules, or
+diverting existing format support to a user-provided module.</li>
+<li>magick/magick.c (DestroyMagick): Document that this function
+should be invoked from the program's primary thread after any
+threads using GraphicsMagick have terminated.
+(GetMagickInfo): Was thread safe for access but not properly
+thread safe during initialization. Is now fully thread safe.
+(InitializeMagick): Fully initialize everything needed to
+read/write files. Document that this function MUST be invoked
+from the program's primary thread prior to using any other
+GraphicsMagick functions.</li>
+<li>magick/color_lookup.c (ReadColorConfigureFile): The colors.mgk
+is now optional so don't throw an exception if it is not found.</li>
+<li>magick/semaphore.c (AcquireSemaphoreInfo): Deprecated this
+internal function. Use AllocateSemaphoreInfo() and
+LockSemaphoreInfo() instead.
+(LiberateSemaphoreInfo): Deprecated this internal function. Use
+UnlockSemaphoreInfo() instead.</li>
+</ul>
+</blockquote>
+<p>2009-10-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>config/colors.mgk: Colors.mkg is now empty since it is used to
+modify or extend the built-in color lookup table.</li>
+<li>magick/{constitute.c,delegate.c,log.c,magic.c,magick.c,tempfile.c}:
+Explicitly initialize semaphores via InitializeMagick().</li>
+<li>magick/type.h: New header file to contain types and function
+prototypes for functions in type.c.</li>
+<li>magick/color_lookup.c (ReadColorConfigureFile): Store RGB color
+table in a static struct. Entries in the colors.mgk file are now
+used to modify statically-defined entries, or add new definitions
+to the color table.</li>
+</ul>
+</blockquote>
+<p>2009-10-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: --enable-libtool-verbose configure option is no
+longer needed now that we have silent build capability.</li>
+</ul>
+</blockquote>
+<p>2009-10-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (GenerateEXIFAttribute): Add support for
+retrieving GPS EXIF attributes. Based on work contributed by
+Jukka Manner.</li>
+<li>Magick++/lib/STL.cpp, Magick++/lib/Magick++/STL.h (shadeImage):
+ShadeImage was the result of a botched cut-and-paste. Corrected
+now. Thanks to Jukka Manner for making me aware of this.</li>
+</ul>
+</blockquote>
+<p>2009-10-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/analyze.c: New source file to contain image analysis
+functions. Moved functions from image.c and color.c to this file.</li>
+<li>magick/color_lookup.c: New source file to contain color lookup
+functions. Moved associated functions from color.c to this file.</li>
+<li>magick/ImageMagick.rc: Remove inclusion of magic.mgk.</li>
+<li>magick/utility.c (MagickRoundUpStringLength): Use a bit less
+memory.</li>
+<li>magick/color.c: Use most efficient string allocation function.</li>
+<li>config/Makefile.am: Eliminate use of magic.mgk.</li>
+<li>magick/magic.c: Store file header magic data in a static struct.</li>
+</ul>
+</blockquote>
+<p>2009-10-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/describe.c (DescribeImage): Include composition operator
+in verbose output. Also use CompressionTypeToString() to convert
+a compression enum to a string.</li>
+</ul>
+</blockquote>
+<p>2009-10-11 Toby Thain <<a class="reference external" href="mailto:qu1j0t3%40users.sourceforge.net">qu1j0t3<span>@</span>users<span>.</span>sourceforge<span>.</span>net</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/psd.c: Further fix for 2783535 reported by Daniel Kirsch.
+Omit 0x0 layers from the image list, or they break compositing.</li>
+</ul>
+</blockquote>
+<p>2009-10-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/xwindow.c: Check for overflow on all array allocations.</li>
+<li>magick/command.c (MogrifyImages): If there is only one image in
+the list, then -flatten does nothing at all.</li>
+<li>magick/transform.c (FlattenImages): If the user provides only
+one image then return a clone of that image rather than reporting
+an error.</li>
+<li>magick/texture.c (TextureImage): If an under-texture is applied,
+then remove the matte channel.</li>
+<li>magick/xwindow.c (MagickXMakeImage): Apply a checkerboard
+pattern when displaying non-opaque TrueColor images. Fix a second
+integer overflow issue related to CVE-2009-1882.</li>
+</ul>
+</blockquote>
+<p>2009-10-10 Toby Thain <<a class="reference external" href="mailto:qu1j0t3%40users.sourceforge.net">qu1j0t3<span>@</span>users<span>.</span>sourceforge<span>.</span>net</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/psd.c: Fix for 2783535 reported by Daniel Kirsch. PSD
+parser was confused by 0x0 pixel layers, resulting in image data
+corruption of all following layers.</li>
+</ul>
+</blockquote>
+<p>2009-10-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/xwindow.c (MagickXMakeImage): Fix for CVE-2009-1882
+"Integer overflow in the XMakeImage function". The problem is
+that the shared memory segment allocated may be smaller than the
+image size requires due to integer overflow. On some systems it
+may be possible to crash GraphicsMagick (while displaying an image
+file) but not likely to overwrite the heap since shared memory
+segments are outside of the heap allocation.</li>
+<li>magick/memory.c (MagickMallocArray): Use MagickArraySize().</li>
+<li>magick/memory.c (MagickArraySize): New private function to
+compute the size of an array and return zero if it overflows the
+size_t type.</li>
+</ul>
+</blockquote>
+<p>2009-10-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c (ReadDCMImage): Handle (UN)known type VRs correctly
+and interpret the transfer syntax correctly. Added define
+"dcm:avoid-scaling" to request that the coder should not scale
+image samples unless necessary (i.e. when bits used > quantum
+depth or maximum colormap depth, depending on image type). Work
+is contributed by John Sergeant.</li>
+</ul>
+</blockquote>
+<p>2009-10-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/Makefile.am (CHECK_PDF_FILE_COMPRESS): Add PDF tests with
+the various compression options.</li>
+<li>coders/pdf.c (WritePDFImage): If the input file used JPEG
+compression and has not been converted to a bilevel or palette
+image, then use JPEG compression with original settings. Problem
+was reported by Marco Atzeri.</li>
+</ul>
+</blockquote>
+<p>2009-10-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>config/modules.mgk: DCRAW module entries were missing.</li>
+<li>coders/tiff.c (WriteGROUP4RAWImage): Was not working properly on
+big-endian CPUs with libtiff 1.4.</li>
+<li>coders/ps2.c (WritePS2Image): Use ImageToJPEGBlob().</li>
+<li>coders/ps3.c (WritePS3Image): Use ImageToJPEGBlob().</li>
+<li>coders/pdf.c (WritePDFImage): Decouple from libtiff. Use ImageToJPEGBlob().</li>
+<li>coders/dcraw.c (RegisterDCRAWImage): Needed to register module
+name.</li>
+<li>coders/cals.c (ReadCALSImage): Fix bug in CALS reader which
+caused reading images taller than the image width to fail with an
+error.</li>
+<li>magick/utility.c (AcquireString): Minor optimizations.
+(AllocateString): Minor optimizations.
+(CloneString): Minor optimizations.
+(LocaleCompare): Minor optimizations.
+(SubstituteString): Re-implemented in a more compact way which
+might avoid some reallocations.</li>
+<li>magick/magick.c (ListModuleMap): Don't crash if <cite>module</cite> was not
+set.</li>
+<li>magick/delegate.c (ListDelegateInfo): Fix insignificant memory
+leak.</li>
+<li>magick/compress.c (ImageToJPEGBlob): Preserve JPEG settings if
+feasable.</li>
+</ul>
+</blockquote>
+<p>2009-09-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdf.c (WritePDFImage): Use ImageToHuffman2DBlob() and
+ImageToJPEGBlob().</li>
+<li>coders/cals.c (WriteCALSImage): Use ImageToHuffman2DBlob().</li>
+<li>magick/compress.c (ImageToHuffman2DBlob): New private
+convenience function to produce a CCIT Group4 blob.
+(ImageToJPEGBlob): New private convenience function to produce a
+JPEG blob.</li>
+</ul>
+</blockquote>
+<p>2009-09-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jp2.c (ReadJP2Image): Fix scaling problem noticed when
+reading 12-bit JP2 format. Problem was reported by Steve Shaw.
+(WriteJP2Image): Support writing JP2 files with arbitrary depth
+ranging from 2 to 16 rather than just 8 or 16.</li>
+</ul>
+</blockquote>
+<p>2009-09-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/unix_port.c (MagickGetMMUPageSize): Cache returned page
+size to eliminated repeated system calls.</li>
+<li>magick/operator.c (QuantumOperatorRegionImage): Fix missing
+percent in progress monitor message.</li>
+</ul>
+</blockquote>
+<p>2009-09-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/meta.c (GetIPTCStream): Should return IPTC block length
+rather than remaining blob length. Patch submitted by John
+Sergeant.</li>
+</ul>
+</blockquote>
+<p>2009-09-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/meta.c (GetIPTCStream): IPTC blobs should be padded to an
+even size. Patch submitted by John Sergeant.</li>
+</ul>
+</blockquote>
+<p>2009-09-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteGROUP4RAWImage): Added a GROUP4RAW encoder.</li>
+<li>coders/cals.c (Huffman2DEncodeImage): Fix test failures when
+doing I/O to an in-memory blob.</li>
+<li>coders/pcl.c (WritePCLImage): Use a different control code to
+(hopefully) eject the page. Patch submitted by John Sergeant.</li>
+</ul>
+</blockquote>
+<p>2009-09-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/Makefile.am: Add CALS tests. Skip testing deep images for
+most formats which don't support deep images.</li>
+<li>coders/cals.c: CALS module was not being built under Windows
+with MSVC. Now it is.</li>
+<li>VisualMagick/configure/configure.cpp (process_library): CALS
+module is dependent on TIFF library.</li>
+<li>coders/cals.c (WriteCALSImage): Allow CALS writing at any time,
+but only enable CALS reader if libtiff is present at build time.</li>
+<li>coders/{cals.c,pdf.c,ps2.c,ps3.c} (Huffman2DEncodeImage): Force
+TIFF image type to bilevel type.</li>
+<li>config/modules.mgk, VisualMagick/bin/modules.mkg: CAL-->CALS
+rather than CALS-->CAL.</li>
+</ul>
+</blockquote>
+<p>2009-09-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/benchmarks.rst: Updated GraphicsMagick vs ImageMagick
+benchmark results.</li>
+</ul>
+</blockquote>
+<p>2009-09-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/cals.c (WriteCALSImage): Initial CALS Type 1 writer
+implementation. Contributed by John Sergeant.</li>
+<li>coders/png.c (ReadOnePNGImage): Fresh pixels should be set using
+SetImagePixels().</li>
+</ul>
+</blockquote>
+<p>2009-09-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh: Released GraphicsMagick 1.3.7.</li>
+</ul>
+</blockquote>
+<p>2009-09-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/msl.c, doc/conjure.imdoc: Add support for a new <cite>profile</cite>
+command in MSL/conjure which applies, adds, or removes one or more
+IPTC, ICC or generic profiles from a file. Work contributed by
+John Sergeant.</li>
+</ul>
+</blockquote>
+<p>2009-09-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c (NTGhostscriptFind): Make sure we close the
+registry key. Log any Windows error messages.</li>
+<li>magick/profile.c (AppendImageProfile): New function to add or
+append a profile. If the profile already exists, then the data
+provided is appended to it.</li>
+<li>coders/jpeg.c (ReadGenericProfile,ReadICCProfile,ReadIPTCProfile):
+Profile chunks need to be concatenated. Otherwise "chunked"
+profiles become corrupted.</li>
+</ul>
+</blockquote>
+<p>2009-09-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/average.c (AverageImages): Moved from image.c to new
+average.c file.</li>
+<li>magick/colormap.h (VerifyColormapIndex): Moved here from color.h</li>
+<li>magick/colormap.c (AllocateImageColormap): Moved from image.c to
+new colormap.c source file.
+(CycleColormapImage): Moved from image.c.
+(ReplaceImageColormap): Moved from image.c.
+(SortColormapByIntensity): Moved from image.c.
+(MagickConstrainColormapIndex): Moved here from color.c.</li>
+<li>magick/describe.c (DescribeImage): Moved from image.c to new
+describe.c source file.</li>
+<li>magick/plasma.c (PlasmaImage): Moved from image.c to new
+plasma.c source file.</li>
+<li>magick/statistics.c (GetImageStatistics): Moved from image.c to
+new statistics.c source file.</li>
+<li>magick/gradient.c (GradientImage): Moved from image.c to new
+gradient.c source file.</li>
+<li>magick/texture.c (ConstituteTextureImage,TextureImage): Moved to
+new texture.c source file.</li>
+<li>coders/svg.c (ENABLE_SVG_WRITER): Disable SVG writer by default
+since it usually does not work correctly and is unlikely to work
+correctly any time soon.</li>
+</ul>
+</blockquote>
+<p>2009-09-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/profile.c (ProfileImage): GlobExpression is case
+sensitive so assure that its glob strings are always upper-cased.
+Without this fix, lower-cased arguments like "icm" would fail to
+be removed. This would not be much of a problem except that the
+documentation claims that lower-case works.
+(SetImageProfile): Assure that profile names are upper-cased.</li>
+<li>magick/fx.c (ColorMatrixImage): Add opaque opacity channel if
+image currently lacks an opacity channel but the matrix updates
+the opacity channel. Requested by Kerry Panchoo.</li>
+</ul>
+</blockquote>
+<p>2009-09-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/meta.c (GetIPTCStream): Updates from John.Sergeant to fix
+issues with IPTC record 2 blocks and to deal better with IPTC
+embedded in an 8BIM profile.</li>
+<li>PerlMagick/t/read.t: Added tests for Topol format.</li>
+</ul>
+</blockquote>
+<dl class="docutils">
+<dt>2009-09-12 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></dt>
+<dd><ul class="first last simple">
+<li>coders/topol.c: Pallette overflow fixed for subtype 3.</li>
+</ul>
+</dd>
+</dl>
+<p>2009-09-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>utilities/tests/msl_composite.sh: Use a draw command file for
+this test script too.</li>
+<li>utilities/tests/{black-threshold.sh,draw.sh,recolor.sh,
+white-threshold.sh}: MSYS is sometimes wreaking havoc on arguments
+with spaces in them so use work-arounds.</li>
+</ul>
+</blockquote>
+<p>2009-09-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c (NTGhostscriptFind): Improve logging messages
+when searching for Ghostscript.</li>
+</ul>
+</blockquote>
+<p>2009-09-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (CacheInfo): Add read_only member to
+indicate if cache is allowed to be modified.
+(ModifyCache): Clone cache if origin cache is read only.
+(PersistCache): Persistent caches which are attached are treated
+as read-only. This avoids crash with MPC images which are read
+and subsequently modified.
+Reverted pixel cache locking changes which were made yesterday
+since I decided that they were too risky until file handle
+management is addressed.</li>
+</ul>
+</blockquote>
+<p>2009-09-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resource.c (InitializeMagickResources): Increase
+operating system file handle limits if necessary.</li>
+<li>magick/pixel_cache.c: Pixel cache file locking is now done at
+point of access.</li>
+<li>magick/nt_base.c (NTGhostscriptFind): New function to find
+Ghostscript under Windows, replacing previous Ghostgum
+implementation.</li>
+<li>Copyright.txt: License is now based on MIT license exactly,
+without extra edits. Ghostgum code has been eliminated so it is
+no longer necessary to include its license.</li>
+</ul>
+</blockquote>
+<p>2009-09-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/delegate.c (GetPostscriptDelegateInfo): Add a gs-palette
+delegate entry in order to force Ghostscript to output a
+colormapped image if <cite>-type palette</cite> is specified prior to the
+input filename. Ghostscript's dithering is much courser than
+GraphicsMagick's -colors default (more similar to
+-ordered-dither), but it is fast and produces smaller intermediate
+files.</li>
+<li>coders/ps.c (ReadPSImage): Eliminate use of NULL pointer when
+progress monitor is enabled. Was referring to image->filename
+rather than image_info->filename as it should have.</li>
+<li>magick/delegate.c (InvokePostscriptDelegate): Added an
+<cite>exception</cite> argument so that failure details can be returned.
+Tried to reorganize the code so that it is more tolerant of errors
+such as a dynamically-loadable DLL failing to load. On POSIX
+systems, Ghostscript was not being invoked as securely as
+expected.</li>
+<li>coders/Makefile.am: Only build the DPS module if the Display
+Postscript library is available.</li>
+<li>coders/ept.c (ReadEPTImage): If we don`t have the Display
+Postscript library, then don't try to use it as a fallback.</li>
+<li>coders/ps.c (ReadPSImage): If we don't have the Display
+Postscript library, then don't try to use it as a fallback.</li>
+<li>magick/blob.c (CloseBlob): If blob was never allocated, then
+don't try to close it.</li>
+</ul>
+</blockquote>
+<p>2009-09-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/index.rst: Mention 1.2.8 release.</li>
+</ul>
+</blockquote>
+<p>2009-09-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++: New Image methods cdl(), colorMatrix(), and haldClut()
+added.</li>
+</ul>
+</blockquote>
+<p>2009-09-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/shear.c (IntegralRotateImage): Select tile sizes in a
+more intelligent fashion.</li>
+<li>magick/pixel_cache.c (GetPixelCacheInCore): New private pixel
+cache method to see if image pixels are in core.</li>
+</ul>
+</blockquote>
+<p>2009-09-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (ReadImage): No longer clear the exception
+at the start of ReadImage() and other similar functions. If the
+user of the function cares, she can clear the exception in
+advance. It is not right to overwrite exceptions which might not
+have been reported/handled yet.</li>
+<li>magick/shear.c (IntegralRotateImage): Rotate by zero degrees
+does not need to do any work.</li>
+<li>coders/*.c, magick/*.c: Include image dimensions in progress
+monitor output when loading or saving a file. Eliminate redundant
+text from progress messages.</li>
+</ul>
+</blockquote>
+<p>2009-08-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wmf.c: Eliminate memory leaks.</li>
+<li>magick/render.c (DrawDashPolygon): Avoid access beyond end of
+array. Resolves SourceForge issue 2832125 "Crash on SVG
+conversion".</li>
+<li>coders/png.c (ReadOnePNGImage): Ensure that opacity channel is
+properly initialized. Resolves SourceForge issue 2831240
+"Possible alpha channel issue with PNG w/palette and tRNS".</li>
+</ul>
+</blockquote>
+<p>2009-08-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.h (HAVE_TIFFSWABARRAYOFTRIPLES): Need to define
+this since libtiff includes this function now.</li>
+<li>VisualMagick/tiff/libtiff/tiffconf.h.in: Enable all the options
+by default.</li>
+<li>tiff: Updated to libtiff 3.9.1. 3.9.0 was broken.</li>
+</ul>
+</blockquote>
+<p>2009-08-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/profile.c (MagickFreeCMSTransform): Add a CMS transform
+destructor since otherwise Visual Studio does not like it.</li>
+<li>tiff: Updated to libtiff 3.9.0.</li>
+</ul>
+</blockquote>
+<p>2009-08-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (TimeImageCommand): Add a simple <cite>time</cite>
+sub-command to time the execution of any other GraphicsMagick
+sub-command. Similar in concept to the <cite>benchmark</cite> sub-command
+but produces output similar to the <cite>time</cite> command offered by the
+zsh command shell. Handy for when <cite>time</cite> is not available, or
+consistent output is desired.</li>
+<li>magick/magick.c (MagickGetFileSystemBlockSize): New private
+function to allow getting desired filesystem block size.
+(MagickSetFileSystemBlockSize): New private function to allow
+setting desired filesystem block size.</li>
+<li>magick/pixel_cache.c (WriteCacheIndexes, WriteCachePixels):
+Temporarily disable pixel cache row coalescing when writing to
+disk until we come up with a good way to optimize write sizes.</li>
+<li>coders/meta.c (ReadMETAImage): Fix memory leak of profile blob.</li>
+</ul>
+</blockquote>
+<p>2009-08-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>utilities/tests/icc-transform.sh: Add a sanity-test for applying
+ICC profiles.</li>
+<li>magick/profile.c (ProfileImage): Improve OpenMP performance.</li>
+</ul>
+</blockquote>
+<p>2009-08-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawPolygonPrimitive): Drawing of points,
+lines, and polygons is now accelerated using OpenMP with good
+speed-up.</li>
+</ul>
+</blockquote>
+<p>2009-08-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/drawing_wand.c (DrawClearException): New function to clear
+drawing wand exception.
+(DrawGetException): New function to retrieve information regarding
+the last drawing wand exception (if any).
+(DrawRender): DrawRender() is now deprecated since it requires an
+Image pointer to be embedded in the drawing wand. The image
+passed is subsequently lost by CloneDrawingWand() since it must
+clone the image using copy-on-write. Subsequent use of
+DrawRender() on a cloned wand scribbles on an image the user does
+not have access to. Use existing Wand function MagickDrawImage()
+instead.
+(DrawAllocateWand): DrawAllocateWand() is now deprecated since it
+requires passing an Image pointer into the drawing wand. Use
+existing DrawingWand function NewDrawingWand() instead.</li>
+</ul>
+</blockquote>
+<p>2009-08-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/drawing_wand.c (CloneDrawingWand): New function to
+deep-copy a drawing wand.
+(NewDrawingWand): Use a boolean flag to track if image is
+allocated by the wand, or by the user. Most of the previous
+DrawAllocateWand() code is moved into NewDrawingWand() so that the
+boolean flag is easy to manage.</li>
+</ul>
+</blockquote>
+<p>2009-08-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Support writing grayscale
+JPEG-compressed TIFF.</li>
+</ul>
+</blockquote>
+<p>2009-08-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Don't override the photometric
+for grayscale JPEG-compressed TIFF.</li>
+</ul>
+</blockquote>
+<p>2009-08-08 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple....">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li><dl class="first docutils">
+<dt>coders/png.c: Made compatible with libpng-1.4.0beta74 and later</dt>
+<dd>(won't work with libpng-1.4.0beta35 through beta73) due to change
+in names of png_struct members "trans" and "trans_values").</dd>
+</dl>
+</li>
+</ul>
+</blockquote>
+<dl class="docutils">
+<dt>2009-08-08 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></dt>
+<dd><ul class="first last simple">
+<li>coders/topol.c: Pallette is ignored for subtype 5 (RGB).</li>
+</ul>
+</dd>
+</dl>
+<p>2009-08-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/{cineon.c, dpx.c, locale.c, svg.c}, magick/{attribute.c,
+effect.c, utility.c}: Eliminate warnings reported by GCC 4.4.0.</li>
+</ul>
+</blockquote>
+<p>2009-07-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Try to be more insistent about compilation failure
+if libjpeg version is less than 6b. IRIX compiler only warns
+about #error preprocessor statement.</li>
+</ul>
+</blockquote>
+<p>2009-07-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c (MagickSetCompressionQuality): New Wand
+method to allow setting the compression quality.</li>
+</ul>
+</blockquote>
+<p>2009-07-29 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/topol.c: Fixed missing break. Added response to ping.</li>
+</ul>
+</blockquote>
+<p>2009-07-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pcx.c (ReadPCXImage): Detect improper rows, columns, or
+depth. Fixes CVE-2008-1097 "Memory corruption in ImageMagick's
+PCX coder".</li>
+<li>configure.ac: Update to Autoconf 2.64.</li>
+</ul>
+</blockquote>
+<p>2009-07-25 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/topol.c: Fixed several issues. Added possibility to read
+TopoL level 2 images.</li>
+</ul>
+</blockquote>
+<p>2009-07-25 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagickconfigureconfigure.cpp: Fixed library absolute path issue.</li>
+</ul>
+</blockquote>
+<p>2009-07-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/random.c (DestroyMagickRandomGenerator): Trick to free
+thread specific random kernel contexts simply locks up with MSVC's
+OpenMP, so remove this functionality.</li>
+</ul>
+</blockquote>
+<p>2009-07-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/random.c (DestroyMagickRandomGenerator): Cleanup thread
+specific random kernel data.</li>
+<li>magick/tsd.c (MagickTsdKeyCreate): Fix glitch when built without
+any threads support.</li>
+</ul>
+</blockquote>
+<p>2009-07-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/benchmarks.rst: Update GraphicsMagick vs ImageMagick image
+processing benchmark results.</li>
+</ul>
+</blockquote>
+<p>2009-07-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/OpenMP.rst: Update performance measurements for readily
+available systems.</li>
+<li>NEWS.txt: Updated to reflect latest changes.</li>
+</ul>
+</blockquote>
+<p>2009-07-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>png: Updated libpng to 1.2.38.</li>
+</ul>
+</blockquote>
+<p>2009-07-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (GetImageInfo): Default interlace for ImageInfo
+is now UndefinedInterlace so that it is possible to preserve the
+original interlace setting for the image file. Code depending on
+the previous default setting of NoInterlace is adjusted to suit.
+This is a potentially risky change given the brittle nature of
+some of the legacy code.</li>
+<li>coders/tiff.c (ReadTIFFImage): Stripped reader needs to read
+planar TIFF plane-wise in order to work with libtiff's internal
+buffering.
+(ReadTIFFImage): Tiled reader needs to read planar TIFF plane-wise
+in order to work with libtiff's internal buffering.
+(WriteTIFFImage): Tiled writer needs to output planar TIFF
+plane-wise in order to work with libtiff's internal buffering.</li>
+</ul>
+</blockquote>
+<p>2009-07-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MontageUsage): Reconcile montage help output
+with actual montage options.</li>
+</ul>
+</blockquote>
+<p>2009-07-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Allow the user to be able to
+specify rows_per_strip when using JPEG compression. The
+rows_per_strip value rounded up to the nearest multiple of 16.</li>
+</ul>
+</blockquote>
+<p>2009-07-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Add the ability for the user to
+manually specify the predictor using syntax like <cite>-define
+tiff:predictor=2</cite>.</li>
+</ul>
+</blockquote>
+<p>2009-07-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/quantize.c (QuantizeImages): Avoid crash when using
+-monitor +map on an image list.</li>
+<li>magick/command.c (BenchmarkImageCommand): Send benchmark report
+to stderr so that it does not interfer with pipes.</li>
+<li>magick/cdl.c (CdlQuantum): Add range limiting of value before
+applying power function.</li>
+<li>coders/dpx.c (ReadDPXImage, WriteDPXImage): Using floating point
+calculations when building sample value lookup tables in order to
+decrease error. In particular input values were being scaled too
+low, resulting in improperly rounding down during processing of
+the image.</li>
+</ul>
+</blockquote>
+<p>2009-07-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdf.c (WritePDFImage): Incorporated updates from John
+Sergeant to remove the font and thumbnail objects from PDF output.</li>
+</ul>
+</blockquote>
+<p>2009-07-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/cdl.c (CdlImage): New function to apply an ASC CDL
+transform to the image. Original implementation by Clément Follet
+from Workflowers but considerably re-worked by Bob Friesenhahn.
+Available as -asc-cdl via the <cite>convert</cite> and <cite>mogrify</cite> subcommands.</li>
+</ul>
+</blockquote>
+<p>2009-07-04 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/formats.rst: MAT module can read compressed files.
+Remove warning about unsupported compression.</li>
+</ul>
+</blockquote>
+<p>2009-07-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c: Eliminate compiler warnings.</li>
+</ul>
+</blockquote>
+<p>2009-07-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c: Significant re-write of the DICOM reader. Work
+contributed by John Sergeant.</li>
+</ul>
+</blockquote>
+<p>2009-07-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (OpenBlob): Subsequent research shows that Direct
+I/O will not be useful to ordinary file I/O due to specific
+requirements for buffer alignments and I/O sizes. Support for
+requesting it is removed.</li>
+</ul>
+</blockquote>
+<p>2009-07-01 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/formats.rst: ART module has writer for more than year.
+So mark this here.</li>
+</ul>
+</blockquote>
+<p>2009-06-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac, magick/blob.c: Add experimental Solaris direct I/O
+support which is enabled by setting the environment variable
+MAGICK_DIRECTIO to TRUE. Direct I/O bypasses the filesystem
+cache. Only works for NFS and UFS, and not for ZFS.</li>
+</ul>
+</blockquote>
+<p>2009-06-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>rungm.sh.in: Fix environment variable issues noticed while
+running the test suite under MinGW.</li>
+<li>Makefile.am (TESTS_ENVIRONMENT): Fix environment variable issues
+noticed while running the test suite under MinGW.</li>
+<li>magick/hclut.c (HaldClutImage): Don't convert Cineon Log to RGB.</li>
+</ul>
+</blockquote>
+<p>2009-06-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImageCommand): Cache mogrify argument
+images so that they are only loaded once when mogrify is used to
+process multiple image files.</li>
+<li>coders/dpx.c (WriteDPXImage): Fix leak of chroma image when
+subsampling to 4:2:2.</li>
+</ul>
+</blockquote>
+<p>2009-06-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (ExpandFilenames): Expand @filename to a list
+of arguments.</li>
+</ul>
+</blockquote>
+<p>2009-06-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImageCommand): Fix memory leak of
+output_directory string buffer, if it was used.</li>
+<li>magick/utility.c (ExpandFilenames): Input wildcard file
+specifications with a subdirectory component such as
+"subdir/*.dpx" were not working.</li>
+</ul>
+</blockquote>
+<p>2009-06-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (InitializeMagick): Invoke InitializeMagickRegistry().</li>
+<li>magick/registry.c (RegistryInfo): There is no reason to expose
+the RegistryInfo structure in the public interface so it is moved
+to registry.c.
+(InitializeMagickRegistry): Add a function for initializing the
+magick registry.</li>
+</ul>
+</blockquote>
+<p>2009-06-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (CompareImageCommand): Report full error rather
+than rounded error in error reports since sometimes the value
+reported was rounded down to zero.</li>
+<li>utilities/tests/hald-clut-transform.sh: New test to verify that
+Hald CLUT interpolation is working perfectly.</li>
+<li>utilities/tests/hald-clut-identity.sh: Renamed from
+hald-clut.sh.</li>
+</ul>
+</blockquote>
+<p>2009-06-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (RegisterJPEGImage): Fix typo which caused IJG
+library version to be shown for "JPG" format but not for "JPEG".
+Also use a more descriptive name for JPEG library.</li>
+<li>magick/image.c (DescribeImage): Filter out spurious EXIF
+attributes which already exist because we previously accessed
+them. We do a full EXIF dump later.</li>
+</ul>
+</blockquote>
+<p>2009-06-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/FAQ.rst: Add a FAQ about how to process many files at once.</li>
+</ul>
+</blockquote>
+<p>2009-06-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Reduce usage of deprecated Autoconf macros.</li>
+<li>coders/jpeg.c (ReadJPEGImage): Set image orientation from EXIF
+Orientation tag if it is present.</li>
+<li>www/formats.rst: Add TopoL format as per Jaroslav Fojtik.</li>
+</ul>
+</blockquote>
+<p>2009-06-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: User provided LDFLAGS was being overwritten under
+Solaris.</li>
+<li>Many files: Additional reduction of shadowing warnings.</li>
+</ul>
+</blockquote>
+<p>2009-06-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImage): Fix leak of the entire mask
+image supplied via -mask.</li>
+<li>utilities/tests/mask.sh: Add a test for applying a mask image
+with -mask.</li>
+</ul>
+</blockquote>
+<p>2009-06-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (GenerateEXIFAttribute): Identify unknown
+tags via their four-character hex value.</li>
+<li>magick/colorspace.c (CMYKToRGBTransform): Use symbolic notation
+to access pixel quantum values.</li>
+<li>utilities/tests/identify.sh: Added a test for <cite>identify
+-verbose</cite> on a well-populated JPEG file.</li>
+<li>PerlMagick/t/{jpeg/write.t, jng/read.t, jng/write.t}: Relax
+allowed error for JPEG-related tests.</li>
+<li>magick/attribute.c (GenerateEXIFAttribute): Attribute allocation
+size was too small causing overrun of memory buffer. Problem was
+added on 2009-06-08.</li>
+<li>magick/image.c (AllocateDepthMap): Allocation size was one
+element too small.
+(GetImageDepth): Forgot to free depth map. Memory leak of 64K
+bytes per iteration.</li>
+</ul>
+</blockquote>
+<p>2009-06-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/{mat.c, miff.c, pdf.c, ps3.c}: Have Zlib use our memory
+allocators.</li>
+<li>magick/memory.c (MagickMallocCleared): New memory allocation
+interface which is similar to MagickMalloc() except that returned
+memory has been cleared first.</li>
+<li>magick/hclut.c (HaldClutImagePixels): Fix wrong accesses
+detected by valgrind. Also improve execution performance.</li>
+<li>coders/xwd.c (WriteXWDImage): Fixed valgrind memcheck complaint
+about access to uninitialized data.</li>
+</ul>
+</blockquote>
+<p>2009-06-09 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/txt.c Handle alpha channel for ImageMagick's alternative .txt</li>
+</ul>
+</blockquote>
+<p>2009-06-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (WriteDPXImage): Fixed valgrind memcheck complaint
+about access to uninitialized data.</li>
+<li>magick/attribute.c (GenerateEXIFAttribute): For EXIF STRING,
+output unprintable characters using three-digit octal notation.</li>
+<li>coders/dpx.c (WriteDPXImage): Assure that offset count is
+correct according to reported bytes written.</li>
+<li>utilities/tests/hald-clut.sh: Add a simple identity test for the
+Hald CLUT support.</li>
+</ul>
+</blockquote>
+<p>2009-06-07 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/txt.c Handle alpha channel for ImageMagick's .txt</li>
+</ul>
+</blockquote>
+<p>2009-06-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/hclut.c (HaldClutImage): Add a Hald CLUT capability as
+described at <a class="reference external" href="http://www.quelsolaar.com/technology/clut.html">http://www.quelsolaar.com/technology/clut.html</a>. This
+allows a color transformation to be easily created and replicated
+on any number of images. The algorithm is accessed by the
+-hald-clut option of <cite>convert</cite> and <cite>mogrify</cite>. The original
+algorithm is by Eskil Steenberg and was adapted for GraphicsMagick
+by Clément Follet from Workflowers with support from Cédric
+Lejeune of Workflowers.</li>
+</ul>
+</blockquote>
+<p>2009-06-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (GetMagickGeometry): Support <cite>^</cite> modifier to
+geometry specification which indicates that specified size is a
+minimum bounding box rather than a maximum bounding box while
+preserving the image aspect ratio.</li>
+</ul>
+</blockquote>
+<p>2009-06-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resource.c (ListMagickResourceInfo): If supporting
+OpenMP, then include a "Threads" limit in the output of <cite>-list
+resource</cite>.</li>
+<li>coders/pnm.c (ReadPNMImage): Fix multi-thread issue detected by
+valgrind's helgrind tool. Diminish compilation warnings.</li>
+<li>coders/dpx.c (ReadDPXImage): Diminish compilation warnings.</li>
+<li>magick/random.c (AcquireMagickRandomKernel): Fix potential
+multi-thread issue detected by valgrind's helgrind tool.</li>
+<li>magick/magick.c (InitializeMagick): Semaphore subsystem needs to be
+initialized before anything which uses it.</li>
+<li>magick/semaphore.c (InitializeSemaphore): Since we are using
+PTHREAD_MUTEX_INITIALIZER to initialize primary POSIX mutex in the
+semaphore subsystem, we should not explicitly initialize the
+semaphore a second time.</li>
+<li>magick/segment.c (Classify): Fix multi-thread issue detected by
+valgrind's helgrind tool.</li>
+<li>magick/render.c (DrawAffineImage): Use InterpolateViewColor() to
+evalute a bi-linear interpolated point rather than obtaining a
+pixel value from a close pixel. This provides better results.</li>
+</ul>
+</blockquote>
+<p>2009-06-02 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/txt.c Attempt to handle alpha channel.</li>
+</ul>
+</blockquote>
+<p>2009-06-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (InterpolateViewColor, InterpolateColor):
+Moved from gem.c. Gem functions should not be accessing the pixel
+cache.</li>
+</ul>
+</blockquote>
+<p>2009-06-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (CompareImageCommand): Add a -maximum-error
+option to <cite>compare</cite> so that it can easily be used in boolean logic
+when comparing images.</li>
+</ul>
+</blockquote>
+<p>2009-05-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/Makefile.am (TESTS_XFAIL_TESTS): If Ghostscript is not
+available then XFAIL the tests which depend on it.</li>
+<li>magick/pixel_cache.c (GetCacheInfo): Assure that allocated
+stuctures do not occupy the same cache lines.</li>
+</ul>
+</blockquote>
+<p>2009-05-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/studio.h (MAGICK_CACHE_LINE_SIZE): Allow cache line size
+to be set in one place in case we want to configure for it later.</li>
+<li>magick/effect.c (AllocateMedianList): Assure that allocated
+stuctures do not occupy the same cache lines.</li>
+<li>magick/random.c (AcquireMagickRandomKernel): Assure that
+allocated random kernels do not occupy the same cache lines.</li>
+<li>magick/gem.c (GenerateDifferentialNoise): User is required to
+supply random kernel.</li>
+<li>doc/options.imdoc: Document -format "%p". Problem was reported
+by Stijn Sanders.</li>
+</ul>
+</blockquote>
+<p>2009-05-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/Makefile.am (coders_tiff_la_LIBADD): Libtiff may now also
+depend on libjbig and the math library.</li>
+<li>doc/gmdoc2html: Fix link to ball.png. Problem was reported by
+Wes Fox.</li>
+<li>VisualMagick/installer/inc/files-documentation.isx: Include Wand
+API documentation.</li>
+<li>VisualMagick/installer/inc/icons-associate.isx: Fix Windows
+Start menu link to web pages.</li>
+<li>configure.ac: --with-perl is changed to --without-perl since
+building PerlMagick is no longer the default. Building PerlMagick
+automatically has caused too many problems.</li>
+<li>PerlMagick/Makefile.am: GraphicsMagick no longer automatically
+installs PerlMagick. Use the procedure described by
+PerlMagick/README.txt to build and install PerlMagick.</li>
+</ul>
+</blockquote>
+<p>2009-05-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Debian stores Ghostscript fonts under
+/usr/share/fonts/type1/gsfonts so check there for fonts. Issue
+reported by Ralf Wildenhues.</li>
+</ul>
+</blockquote>
+<p>2009-05-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/Magick.xs: Fix Ping of blob.</li>
+<li>PerlMagick/t/ping.t: Added tests for pinging files and blobs.</li>
+<li>www/perl.rst: Ping blob syntax is like $image->Ping(blob=>@blob).</li>
+<li>PerlMagick/Makefile.PL.in: Increase the probability of
+PerlMagick build success by using the user-specified C compiler as
+the linker if the C compiler was already used as the linker. This
+helps if the C compiler used to build GraphicsMagick is a more
+recent vintage than the one used to build Perl.</li>
+<li>PerlMagick/t/wmf/read.t: Test needs to be more lenient for
+Linux.</li>
+<li>Makefile.am (TESTS_ENVIRONMENT): Pass a complete text
+environment so that we don't need to execute rungm.sh in order to
+run the test suite.</li>
+</ul>
+</blockquote>
+<p>2009-05-25 Ralf Wildenhues <<a class="reference external" href="mailto:Ralf.Wildenhues%40gmx.de">Ralf<span>.</span>Wildenhues<span>@</span>gmx<span>.</span>de</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh: Define PACKAGE_STRING.</li>
+</ul>
+</blockquote>
+<p>2009-05-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/tempfile.c (ComposeTemporaryFileName): Use new random
+number generator.</li>
+<li>magick/random.c: Implement a random number generation system
+based on George Marsaglia's multiply-with-carry generator.
+Somewhat slower than rand() but produces better random numbers
+with a period >2^60. Suggested by Mark Mitchell.</li>
+</ul>
+</blockquote>
+<p>2009-05-24 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul>
+<li><p class="first">coders/txt.c Small optimization:</p>
+<p>Before: 2000 iter 34.08s user 34.24s total 58.420 iter/s</p>
+<p>After: 2000 iter 21.55s user 21.76s total 91.891 iter/s</p>
+</li>
+</ul>
+</blockquote>
+<p>2009-05-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am (XFAIL_TESTS): Handle the case where FreeType is not
+available by marking tests dependent on FreeType as XFAIL.
+(TESTS): Reorder TESTS so that there will be no trailing spaces
+since this confuses certain older versions of GNU make.</li>
+</ul>
+</blockquote>
+<p>2009-05-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/tempfile.c (ComposeTemporaryFileName): Use simpler code
+(suggested by Mark Mitchell) to compute the substitution index.
+(AcquireTemporaryFileDescriptor): Try harder to generate a
+successful temporary file and fall through to alternative
+implementations if the first does not succeed.</li>
+<li>magick/magick.c (InitializeMagick): Use MagickRandNewSeed() to
+seed the default random number generator.</li>
+<li>magick/utility.c (MagickRandNewSeed): Include PID in random
+number seed generation.</li>
+</ul>
+</blockquote>
+<p>2009-05-22 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li><dl class="first docutils">
+<dt>coders/txt.c Fixed char vs int parameter problem.</dt>
+<dd>Better detection of too dark 16bit or 32bit images.</dd>
+</dl>
+</li>
+</ul>
+</blockquote>
+<p>2009-05-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am (AUTOMAKE_OPTIONS): Enable parallel-tests and
+color-tests options. Parallel test execution does not pass tests
+yet.</li>
+<li>PerlMagick/PerlMagickCheck.sh.in: Run PerlMagick tests via a
+normal check script rather than a check hook.</li>
+<li>coders/identity.c (ReadIdentityImage): Fix compilation with Sun
+compiler.</li>
+</ul>
+</blockquote>
+<p>2009-05-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/rwfile.c: Allow the user to specify the basename for
+temporary files.</li>
+<li>tests/Makefile.am: Add a set of TXT read/write tests. Pass the
+file name specification to use for the rwfile-based tests.</li>
+</ul>
+</blockquote>
+<p>2009-05-21 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/txt.c Fixed endian set to native endian.</li>
+</ul>
+</blockquote>
+<p>2009-05-20 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/txt.c Faster read ImageMagick files.
+Removed BImgBuff=NULL;</li>
+</ul>
+</blockquote>
+<p>2009-05-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/txt.c (WriteTXTImage): Ensure that image depth is 8, 16,
+or 32.</li>
+<li>www/formats.rst: Add CALS to formats list.</li>
+<li>coders/cals.c (RegisterCALSImage): Consolidate duplicate text
+strings.</li>
+</ul>
+</blockquote>
+<p>2009-05-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/cals.c: Add support for reading CALS type 1 format.
+Contributed by John Sergeant.</li>
+<li>coders/identity.c: New coder to return a Hald identity CLUT
+image.</li>
+</ul>
+</blockquote>
+<p>2009-05-19 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/txt.c Ability to read back Q32 txt files.</li>
+</ul>
+</blockquote>
+<p>2009-05-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Support Linux style silent build rules.</li>
+</ul>
+</blockquote>
+<p>2009-05-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am: Updated to Automake 1.11.</li>
+</ul>
+</blockquote>
+<p>2009-05-17 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/txt.c First attempt to read back txt file.
+It is amazingly ineffective, but it seems to work.</li>
+</ul>
+</blockquote>
+<p>2009-05-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resize.c (HorizontalFilter, VerticalFilter): When
+resizing a non-opaque image, attenuate the influence of
+surrounding colors based on their degree of transparency in order
+to avoid "halos" around objects caused by colors which are
+transparent and therefore not part of the visible image. Patch
+contributed by Pavel Merdin via SourceForge Tracker #2792322.
+(VerticalFilter, VerticalFilter): Additional clean-up and
+optimizations.</li>
+</ul>
+</blockquote>
+<p>2009-05-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImage): Added a -recolor command option
+to provide access to ColorMatrixImage().</li>
+<li>magick/fx.c (ColorMatrixImage): New function to apply a color
+matrix similar to Adobe Flash Flash.filters.colorMatrixFilter(),
+and Windows GDI+ ColorMatrix class, (order up to 5x5) to the image
+pixels.</li>
+</ul>
+</blockquote>
+<p>2009-05-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/perl.rst: Add missing PerlMagick debug event types.</li>
+<li>coders/pcl.c: Major improvements from John Sergeant. These
+include: 1) Fixed 2 bit output where Max=BLACK - this always
+produced negative images even when -negate was passed as a
+parameter. The code now uses a two element palette to handle this
+situation. 2) Added support for 8 bit pseudoclass images. 3)
+Changed the coder to allow adjoin, placing each sub-image on a new
+page. 4) Added support for compression. Any compression other
+than "None" will cause the coder to to try to calculate and pick
+the best out of the PCL set of RLE, Tiff RLE or delta compression
+on a per row basis, as well as handling repeated rows and zero
+rows intelligently.</li>
+</ul>
+</blockquote>
+<p>2009-05-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>utilities/Makefile.am (MAGICKPROGRAMS): Add a <cite>compare</cite>
+ImageMagick compatibility link.</li>
+<li>INSTALL-unix.txt: Apply patch regarding GnuWin32 from John Wye,
+SourceForge #2779009.</li>
+</ul>
+</blockquote>
+<p>2009-05-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Add the LDFLAGS option -Wl,-zlazyload when using
+the Solaris linker.</li>
+</ul>
+</blockquote>
+<p>2009-05-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/url.c (ReadURLImage): Fix typos.</li>
+</ul>
+</blockquote>
+<p>2009-05-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (SystemCommand): Added access confirmation
+checks for external commands.</li>
+<li>magick/unix_port.c (MagickSpawnVP): Added access confirmation
+checks for external commands.</li>
+<li>coders/url.c (ReadURLImage): Added access confirmation checks
+for URLs.</li>
+<li>magick/blob.c: Added access confirmation checks for files.</li>
+<li>magick/confirm_access.c (MagickConfirmAccess): Added an access
+confirmation facility to allow the API user to monitor and/or
+block access to files and URLs. This allows the API user to
+implement a security policy based on actual accesses.</li>
+</ul>
+</blockquote>
+<p>2009-05-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>png: Updated libpng to 1.2.35.</li>
+<li>lcms: Updated lcms to 1.18a.</li>
+</ul>
+</blockquote>
+<p>2009-05-01 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple....">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WriteOnePNGImage and WriteOneJNGImage): Changed
+internal attribute png_bit_depth to png:bit-depth-written to avoid
+confusion with planned new public png:bit-depth attribute.</li>
+</ul>
+</blockquote>
+<p>2009-04-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImages): Deal slightly better with the
+case when MogrifyImage() expands one image into several. Still
+don't know of a sane way to deal with -crop WIDTHxHEIGHT.</li>
+<li>magick/transform.c (TransformImage): Image which is updated may
+be a list so account for that.</li>
+<li>configure.ac: Add a test for the <cite>restrict</cite> keyword so that
+eventually we can use it.</li>
+<li>coders/jpeg.c (ReadJPEGImage): Tidy JPEG reader by moving JPEG
+properties analysis code into subroutines.</li>
+</ul>
+</blockquote>
+<p>2009-04-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/display.imdoc: Fix documentation for crop and chop keyboard
+accelerators. Fixes SourceForge bug #2593388 "error in the
+documentation/Keyboard accelarators".</li>
+</ul>
+</blockquote>
+<p>2009-04-20 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple....">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Cosmetic-only, change <cite>True</cite> to <cite>MagickTrue</cite> or
+<cite>MagickPass</cite> and <cite>False</cite> to <cite>MagickFalse</cite> or <cite>MagickFail</cite>.</li>
+</ul>
+</blockquote>
+<p>2009-04-20 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple....">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Check error return from CompressColormapTransFirst()</li>
+</ul>
+</blockquote>
+<p>2009-04-20 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple....">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Refrain from modifying image struct members
+(matte, colors, depth) while writing a PNG.</li>
+</ul>
+</blockquote>
+<p>2009-04-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc: Document the direction of rotation.</li>
+</ul>
+</blockquote>
+<p>2009-04-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/log.c (LogMagickEventList): Use MagickPackageName from
+version.h rather than hard-coding <cite>GraphicsMagick</cite>.</li>
+</ul>
+</blockquote>
+<p>2009-04-18 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple....">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c: Fixed a warning about <cite>shadowed</cite> variables.</li>
+</ul>
+</blockquote>
+<p>2009-04-17 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple....">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Fixed some warnings about <cite>shadowed</cite> variables.</li>
+</ul>
+</blockquote>
+<p>2009-04-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Add tests for some reentrant versions of functions
+where we are still using the non-rentrant versions.</li>
+<li>magick/composite.c (CompositeImage): Fix problem with
+compositing images where the change image overlaps off the left
+side of the canvas. Should fix SourceForge issue #2766200 <cite>memory
+allocation error when compositing small images</cite>.</li>
+</ul>
+</blockquote>
+<p>2009-04-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/semaphore.c: Re-arrange ifdefs so that it is possible to
+use pthreads under the WIN32 API.</li>
+</ul>
+</blockquote>
+<p>2009-04-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/bit_stream.c: Bitstream functions were often not inlining
+and inline functions which don't inline are not much use.
+Bitstream functions are now normal library functions.</li>
+</ul>
+</blockquote>
+<p>2009-03-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/bin/delegates.mgk: Remove bounding box option (-g) from
+Postscript delegate specifications.</li>
+<li>config/delegates.mgk.in: Remove bounding box option (-g) from
+Postscript delegate specifications.</li>
+<li>coders/{ept.c, pdf.c, ps.c} : PDF bounding box is sometimes
+incorrect or not globally applicable so don't specify bounding box
+when reading PDF files. Postscript files do need the bounding box
+so make sure that it is still supplied. Resolves SF tracker issue
+2487651 <cite>convert from pdf chops off rhs</cite>.</li>
+</ul>
+</blockquote>
+<p>2009-03-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/Magick++/Image.rst: Translate Image.html to reStructuredText
+format for easier maintenance.</li>
+</ul>
+</blockquote>
+<p>2009-03-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/rgb.c: Compute the quantum type rather than using a
+recurring conditional statement. It turns out that the -endian
+option is working as it should.</li>
+</ul>
+</blockquote>
+<p>2009-03-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/{gray.c, rgb.c, cymk.c}: Work toward supporting the
+-endian option. Not working properly yet.</li>
+<li>magick/enum_strings.c (EndianTypeToString): New function.
+(InterlaceTypeToString): New function.</li>
+</ul>
+</blockquote>
+<p>2009-03-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/drawing_wand.c: Stripped out unused code.</li>
+<li>www/wand: Added formatted Wand API documentation.</li>
+<li>scripts/format_c_api_doc.py: Now supports --include-rst option.</li>
+</ul>
+</blockquote>
+<p>2009-03-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (GetImageBoundingBox): If we fail to find a
+smaller bounding box, then the returned bounding box is the entire
+image.</li>
+</ul>
+</blockquote>
+<p>2009-02-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/magick/magick_config.h.in: Provide configuration
+access to the DisableSlowOpenMP define.</li>
+<li>PerlMagick/t/read.t: Add a test for HRZ Slow scan TV.</li>
+<li>magick/pixel_cache.c (ModifyCache): Set image <cite>taint</cite> flag and
+clear monochrome and grayscale flags when pixels are accessed
+read/write rather than at sync.</li>
+<li>coders/Makefile.am (MAGICK_CODER_SRCS): Add coders/hrz.c to
+build.</li>
+</ul>
+</blockquote>
+<p>2009-01-27 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/hrz.c: New HRZ reader for slow scan TV.</li>
+</ul>
+</blockquote>
+<p>2009-02-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resize.c (ResizeImage): Make error handling more robust.</li>
+<li>magick/pixel_cache.c (SetNexus): Return a run-time error to
+invoking code rather than exiting the program if the pixel staging
+buffer fails to be allocated.</li>
+</ul>
+</blockquote>
+<p>2009-02-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Allow the user to force the
+returned image to be TrueColor type for min-is-white and
+min-is-black TIFF files. Previous to this, bilevel TIFF files
+were always returned as PseudoClass.</li>
+</ul>
+</blockquote>
+<p>2009-01-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c, coders/pnm.c: Fix several race conditions
+reported by Julian Seward.
+(OpenCache): Restore conservative pre-allocation of pixel indexes
+since a glitch was encountered that needs to be resolved.</li>
+<li>magick/{channel.c,compare.c,constitute.c,decorate.c,effect.c,fx.c,
+image.c,operator.c,pixel_iterator.c,render.c,resize.c,segment.c,
+shear.c,transform.c}: Use explicit OpenMP critical sections to
+avoid possible cross-contention.</li>
+<li>coders/{dpx.c, pnm.c} Use explicit OpenMP critical sections to
+avoid possible cross-contention.</li>
+</ul>
+</blockquote>
+<p>2009-01-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (OpenCache): Remove conservative
+pre-allocation of pixel indexes.</li>
+</ul>
+</blockquote>
+<p>2009-01-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/index.rst: Reduce the amount of text on the front page.</li>
+</ul>
+</blockquote>
+<p>2009-01-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>GraphicsMagick.spec.in: The module .la files need to be
+installed as part of the base install or else the modules will
+fail to load.</li>
+</ul>
+</blockquote>
+<p>2009-01-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dib.c (ReadDIBImage): Fix assertion thrown for DIB files
+with negative image height values.</li>
+</ul>
+</blockquote>
+<p>2009-01-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (ReadBMPImage): Fix assertion thrown for BMP files
+with negative image height values. Resolves SF issue 2523536 <cite>bug
+in bmp coder</cite>.</li>
+<li>Makefile.am: Don't install Magick++ headers if Magick++ is
+disabled.</li>
+<li>GraphicsMagick.spec.in: --enable-lzw option is no longer used.</li>
+</ul>
+</blockquote>
+<p>2009-01-17 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/fits.c: More robust fits parsing.</li>
+</ul>
+</blockquote>
+<p>2009-01-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Updated news.</li>
+</ul>
+</blockquote>
+<p>2009-01-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/colorspace.c (XYZTransformPackets): Fix arithmetic
+overflow problem noticed for Q32 build when using GCC on
+big-endian systems.</li>
+<li>magick/constitute.c: Update Richard Nolde's float 16 and 24
+functions.</li>
+<li>magick/command.c (VersionCommand): Print some build information
+for MSVC builds.</li>
+</ul>
+</blockquote>
+<p>2009-01-10 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/fits.c: Ability to skip unsupported multidimensional object.</li>
+</ul>
+</blockquote>
+<p>2009-01-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (GetBlobSize): It seems that under Windows, the
+zip stream is not usable as a file handle. Switch back to using
+stat instead, but use _stati64 if available.</li>
+</ul>
+</blockquote>
+<p>2009-01-04 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/fits.c: Fixed bug in scene count in extension block.</li>
+<li>coders/fits.c: Supported logging.</li>
+</ul>
+</blockquote>
+<p>2009-01-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Produce sprintf scaling strings for
+platform-specific types.</li>
+<li>magick/magick_types.h.in: Include sprintf scaling strings for
+platform-specific types.</li>
+<li>magick/constitute.c (WriteImage): If output stream is not
+seekable and coder needs to use seek, then divert output to
+temporary file, and then send file to stream.</li>
+<li>magick/blob.c (GetBlobSize): Simplify implementation.
+(OpenBlob): Don't attempt to test header magic on file we are
+writing. Silly benign bug in obtuse code.</li>
+<li>coders/tiff.c (ReadTIFFImage,WriteTIFFImage): Strip out use of
+temporary file. Use TIFFClientOpen() for writing.</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
reported by Patrick Welche.</li>
</ul>
</blockquote>
-<p>2010-03-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
-<blockquote>
-<ul class="simple">
-<li>version.sh: Released GraphicsMagick 1.3.12.</li>
-</ul>
-</blockquote>
<p>2010-03-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
<blockquote>
<ul class="simple">
Vladimir Stavrinov.</li>
</ul>
</blockquote>
-<p>2010-02-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
-<blockquote>
-<ul class="simple">
-<li>version.sh: Released GraphicsMagick 1.3.11.</li>
-</ul>
-</blockquote>
<p>2010-02-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
<blockquote>
<ul class="simple">
Arseny Solokha. Resolves SourceForge patch #2953314.</li>
</ul>
</blockquote>
-<p>2010-02-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
-<blockquote>
-<ul class="simple">
-<li>version.sh: Released GraphicsMagick 1.3.10.</li>
-</ul>
-</blockquote>
<p>2010-02-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
<blockquote>
<ul class="simple">
Coetzee.</li>
</ul>
</blockquote>
-<p>2010-02-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
-<blockquote>
-<ul class="simple">
-<li>version.sh: Released GraphicsMagick 1.3.9.</li>
-</ul>
-</blockquote>
<p>2010-02-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
<blockquote>
<ul class="simple">
of threads is reduced from the original value.</li>
</ul>
</blockquote>
-<p>2010-01-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
-<blockquote>
-<ul class="simple">
-<li>version.sh: Released GraphicsMagick 1.3.8.</li>
-<li>NEWS.txt: Update for the 1.3.8 release.</li>
-</ul>
-</blockquote>
<p>2010-01-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
<blockquote>
<ul class="simple">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2011-01-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c (MagickDescribeImage): Was sending
+descriptive output to stdout rather than returning it in an
+allocated string as intended.</li>
+</ul>
+</blockquote>
+<p>2011-01-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/draw.c, wand/drawing_wand.c (MvgPrintf): Update to handle
+C99 vsnprintf() return values.</li>
+<li>magick/draw.c, wand/drawing_wand.c (DrawAnnotation): Linux
+glibc does not pass extended text characters if "%.1024s"
+formatting convention is used. Apparently it assumes that such
+characters may be UTF8 and returns -1 rather than outputting the
+string, even if it is assured to fit.</li>
+</ul>
+</blockquote>
+<p>2010-12-30 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Matlab file level clarification.</li>
+</ul>
+</blockquote>
+<p>2010-12-27 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mac.c New MacPaint image format reader added.</li>
+</ul>
+</blockquote>
+<p>2010-12-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Default to using a LZMAPRESET
+value of 1 based on testing which observed minimal benefit, and
+substantially more cost, from larger values. Value may be
+specified by the user using command line syntax like <cite>-define
+tiff:lzmapreset=7</cite> for purposes of further experimentation. Also
+adjusted default strip memory values for each preset level.</li>
+</ul>
+</blockquote>
+<p>2010-12-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/Magick.xs: Add LZMA support to PerlMagick.</li>
+<li>coders/tiff.c (WriteTIFFImage): Add TIFF LZMA compressor support.</li>
+</ul>
+</blockquote>
+<p>2010-12-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImages): Should send -verbose output to
+stderr rather than stdout since otherwise usage in pipelines may
+be broken. Resolves SourceForge issue 3131790 "AVS -verbose
+prints to stdout".</li>
+</ul>
+</blockquote>
+<p>2010-11-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>libtool: Upgrade to libtool 2.4.</li>
+<li>coders/pnm.c (ReadPNMImage): Start work on reading NetPBM PAM
+format. Parses PAM header but pixels are not returned yet.</li>
+<li>magick/magic.c (StaticMagic): Be more specific when identifying
+PNM subformats. Return the specific subformat name PBM, PGM, or
+PPM rather than PNM. XV P7 format is now identified as "P7 332".
+Add detection of NetPBM PAM format.</li>
+</ul>
+</blockquote>
+<p>2010-11-04 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple...">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c: Added 5x5, 6x6, and 7x7 circular ordered dither
+patterns to create a halftone effect.</li>
+</ul>
+</blockquote>
+<p>2010-09-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc: Document pcl:fit-to-page define.</li>
+<li>coders/pcl.c: Fix issue with printing a bi-level image on
+Konica-Minolta printers. Define pcl:fit-to-page in order for the
+printer to scale the image to fit the page. Patch by John
+Sergeant.</li>
+</ul>
+</blockquote>
+<p>2010-09-19 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple...">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: removed an apparently harmless extra invocation
+of ScaleShortToQuantum() due to cut-and-paste error in the
+update of 2010-06-02. Also added a line to explicitly set
+the opacity of the background_color to OpaqueOpacity.</li>
+</ul>
+</blockquote>
+<p>2010-09-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdf.c (ReadPDFImage): Enable use of PDF crop box via
+-define pdf:use-cropbox=true. Patch contributed by Chris Gilling.
+SourceForge patch ID 3063794, "Add support for using crop box for
+pdf import".</li>
+</ul>
+</blockquote>
+<p>2010-09-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/lib/Image.cpp (backgroundColor, borderColor, matteColor):
+Opacity part of user-specified color needs to be preserved.
+Problem was reported by Alexander Zheltov.</li>
+</ul>
+</blockquote>
+<p>2010-09-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am: Applied Automake 1.11.1 patch by Ralf Wildenhues
+which is necessary for the test suite to pass under Windows/MinGW
+due to command line length limits.</li>
+</ul>
+</blockquote>
+<p>2010-09-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/draw.c, wand/drawing_wand.c: Pass full user-provided
+double precision resolution to renderer. Truncating the
+resolution causes problems in some cases. Resolves SourceForge
+bug 3058387 "Incorrect Copy Compositing through C interface".</li>
+</ul>
+</blockquote>
+<p>2010-09-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (StringToList): Fix performance problem caused
+by using strlcpy.</li>
+<li>coders/pnm.c (ReadPNMImage): Q8 build should be able to read
+16-bit PGM images.</li>
+</ul>
+</blockquote>
+<p>2010-09-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MontageImageCommand): Fix memory leak of
+MontageInfo structure allocation in error handling path.</li>
+<li>magick/montage.c (MontageImages): Fix crash observed with
+"-geometry x+0+0". Problem reported by Simon Rainer.</li>
+</ul>
+</blockquote>
+<p>2010-08-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am: Update to Automake 1.11.1.</li>
+</ul>
+</blockquote>
+<p>2010-08-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Use AC_USE_SYSTEM_EXTENSIONS to enable system API
+extensions.</li>
+</ul>
+</blockquote>
+<p>2010-08-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (ModifyCache): Fix deadlock in
+ClonePixelCache() which was caused by using the same semaphore
+pointer in the source and destination images. Problem was
+reported by Stefan Schramowski.</li>
+</ul>
+</blockquote>
+<p>2010-08-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/info.c (WriteINFOImage): Added an <cite>INFO</cite> coder which
+produces textual image description output similar to <cite>identify</cite>
+but may be used with convert like "gm convert myfile info:-".
+Feature suggested by Stefan Schramowski.</li>
+</ul>
+</blockquote>
+<p>2010-08-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/Makefile.am (TESTS_PS_XFAIL_TESTS): Expect EPT tests to
+fail if Ghostscript is missing.</li>
+<li>configure.ac: Updated to Autoconf 2.67.</li>
+<li>magick/render.c (DrawImage): Use StringToGravityType() to parse
+gravity values.</li>
+</ul>
+</blockquote>
+<p>2010-07-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc: Document histogram-threshold setting.</li>
+<li>magick/enhance.c (NormalizeImage): Add support for
+histogram-threshold setting to specify the percentage of the
+histogram to discard when computing image normalization parameters
+(default is 0.1%). For example <cite>-set histogram-threshold 0.01
+-normalize</cite>.</li>
+<li>www/api/types.rst: Update Image structure member documentation.</li>
+</ul>
+</blockquote>
+<p>2010-07-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Add a test for posix_spawnp(). Results may be
+used in later development.</li>
+</ul>
+</blockquote>
+<p>2010-07-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/Makefile.am (TESTS_PS_XFAIL_TESTS): PDF tests are expected
+to fail if Ghostscript is not available.</li>
+<li>magick/utility.c (MagickStrlCat, MagickStrlCpy): Add handling
+for the case where size is zero in order to be conformant with the
+strlcat() and strlcpy() formal descriptions. GraphicsMagick does
+its best to never pass a size of zero so an assertion that size is
+not zero remains in order to help catch bugs in GraphicsMagick.
+Issue was reported by Albert Cahalan.</li>
+</ul>
+</blockquote>
+<p>2010-07-10 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple...">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Always scale tRNS color to 16-bit short. Otherwise,
+transparency was sometimes lost while reading PNG files whose depth
+is different from the Quantum depth.</li>
+</ul>
+</blockquote>
+<p>2010-07-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (LOG_TIFF_BLOB_IO): Define LOG_TIFF_BLOB_IO=1 when
+building GraphicsMagick in order to enable verbose logging from
+the TIFFClientOpen() registered callbacks when <cite>coder</cite> logging is
+enabled.</li>
+</ul>
+</blockquote>
+<p>2010-06-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/rwfile.c: Deal with formats which don't have an extension
+by prepending the magic specifier to the file name specification.</li>
+<li>coders/mpr.c (RegisterMPRImage): MPR and MPRI are not useful
+file extensions.</li>
+<li>magick/command.c (CommandAccessMonitor): If the environment
+variable MAGICK_ACCESS_MONITOR is set to TRUE then also log
+invocations of the access monitor callback when -monitor is
+specified. This feature is intended to assist with understanding
+when the access monitor is invoked, and the arguments which are
+passed.</li>
+<li>magick/blob.c (OpenBlob): Throw an exception on error rather
+than depending on the invoking code to do so. Resolves
+SourceForge bug #3023437 "Magick::Image::ping() does not throw
+exception in all cases".</li>
+</ul>
+</blockquote>
+<p>2010-06-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImage): The -colors, -map, and
+-monochrome options now take effect immediately rather than at the
+end of all other processing. This is is more intuitive and
+reasonable but may impact the output of scripts which place these
+options prior to additional image processing operations.</li>
+</ul>
+</blockquote>
+<p>2010-06-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (BlobToImage): If a temporary file must be used
+and the user has specified magic, then preserve the magic
+specifier when reading the temporary file.</li>
+<li>coders/mat.c (RegisterMATImage): More accurately describe MATLAB
+format support as "MATLAB Level 5".</li>
+<li>magick/magic.c (StaticMagic): Automatically detect MATLAB Level
+5 format based on file header.</li>
+<li>PerlMagick/PerlMagickCheck.sh.in: Run PerlMagick tests in
+verbose mode so that all test output appears in "test-suite.log"
+if there is a failure.</li>
+<li>coders/Makefile.am (coders_mat_la_LIBADD): MAT coder is
+optionally dependent on zlib so zlib should be listed as a
+dependency.</li>
+<li>magick/blob.c (BlobToFile): MAGICK_IO_FSYNC=TRUE in the
+environment should cause file data to be explicitly synchronized
+prior to close.</li>
+</ul>
+</blockquote>
+<p>2010-06-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/installer/inc/files-documentation.isx: There are
+not currently any JPEG files in the www/images directory to
+distribute.</li>
+</ul>
+</blockquote>
+<p>2010-06-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ltdl/config/ltmain.sh: Update libtool to 2.2.10.</li>
+<li>magick/profile.c: Support lcms 2.0.</li>
+<li>configure.ac: Add support for configuring for lcms 2.0,
+controlled via a new --without-lcms2 option. By default lcms v2
+is used if it is available, otherwise v1.1X is used if it is
+available.</li>
+</ul>
+</blockquote>
+<p>2010-06-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ltdl/config/ltmain.sh: Update libtool to 2.2.8.</li>
+</ul>
+</blockquote>
+<p>2010-06-02 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple...">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c correctly scale bKGD chunk data in Q16 build</li>
+</ul>
+</blockquote>
+<p>2010-05-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/Magick++/Image.rst: Fix documentation error which wrongly
+recommended multiplication by size of PixelPacket. Correction by
+Roel Baardman.</li>
+</ul>
+</blockquote>
+<p>2010-05-23 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/txt.c (ReadTXTImage): Ability to read multiple images.</li>
+</ul>
+</blockquote>
+<p>2010-05-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (DispatchImage): <cite>K</cite> channel was always
+output as black for "CMYK" specification unless image matte flag
+was True. Bug report and proposed solution by Lance Brown.</li>
+</ul>
+</blockquote>
+<p>2010-05-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/shear.c (ShearImage): When one of the shear angles was
+specified as zero, the shear request was ignored entirely. An
+simple optimization was using || rather than && to test the
+angles. Resolves SourceForge issue #2991685 "Shear command does
+not handle zero angles correctly".</li>
+</ul>
+</blockquote>
+<p>2010-05-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (InitializeMagick, DestroyMagick):
+InitializeMagick and DestroyMagick should be fully thread safe.</li>
+</ul>
+</blockquote>
+<p>2010-05-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/gif.c (ReadGIFImage): Set the opacity value of the opaque
+color to transparent. Patch by Tim Baker.</li>
+<li>magick/image.c (SetImageColor): New function which is similar to
+SetImage() but which accepts the pixel color as a parameter rather
+than using the image background color. Patch by Tim Baker.</li>
+<li>magick/transform.c (CoalesceImages): When applying background
+disposal, fill the image with the transparent color, if one
+exists. Patch by Tim Baker. Resolves SourceForge patch ID
+2989472.</li>
+</ul>
+</blockquote>
+<p>2010-05-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/txt.c (ReadTXTImage): Matte channel was not being enabled
+for non-opaque images.
+(ReadTXTImage): Opacity values need to be inverted prior to
+ingestion.</li>
+</ul>
+</blockquote>
+<p>2010-04-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc: Documentation for -flatten and -mosaic has
+been improved.</li>
+<li>magick/transform.c (MosaicImages): The -mosaic command now
+respects the composition option specified by -compose as well as
+the image background color specified by -background.</li>
+</ul>
+</blockquote>
+<p>2010-04-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/*.c, magick/*.c: Eliminate many benign data race
+conditions.</li>
+</ul>
+</blockquote>
+<p>2010-04-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>GraphicsMagick.spec.in: Avoid duplicate copies of documentation
+files. Put documentation into a versioned directory as used by
+Red Hat and CentOS. Include archive libraries in developer
+package.</li>
+<li>PerlMagick/Makefile.PL.in: Include support for DESTDIR so that
+RPM builds find the installed GraphicsMagick library.</li>
+</ul>
+</blockquote>
+<p>2010-04-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Under Solaris, make sure that OpenWindows Type1
+fonts do exist before deciding to use them. OpenSolaris does not
+provide these fonts.</li>
+</ul>
+</blockquote>
+<p>2010-04-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>GraphicsMagick.spec.in: Fix RPM build. PerlMagick was not being
+built due to Makefile changes. Resolves SourceForge issue
+#2952696 "RPM build broken: (Perl) file not found by glob".</li>
+<li>magick/quantize.c (ReduceImageColors): Progress message should
+include the image file name.</li>
+</ul>
+</blockquote>
+<p>2010-03-24 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple...">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>Revised coders/jpeg.c to preserve the Exif profile.</li>
+</ul>
+</blockquote>
+<p>2010-03-24 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple...">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOnePNGImage): Eliminated some of the deprecated
+direct access to ping_info->members.
+Eliminated support of very old libpng versions (1.0.11 and earlier).</li>
+</ul>
+</blockquote>
+<p>2010-03-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/delegate.c (GetPostscriptDelegateInfo): Add support for
+invoking "gs-cmyk" and "gs-cmyka" entries in delegates.mgk when
+ColorSeparationType or ColorSeparationMatteType is requested.
+Requisite entries in delegates.mgk are left for the user to add.</li>
+</ul>
+</blockquote>
+<p>2010-03-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (InitializeMagick): Don't initialize locale
+settings in InitializeMagick(). Resolves SourceForge bug #2967282
+"setlocale called by GraphicsMagick".</li>
+</ul>
+</blockquote>
+<p>2010-03-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/{command.c, display.c}: Make sure that <cite>animate</cite>,
+<cite>display</cite>, and <cite>identify</cite> report any error only once, and then
+proceed to the next file name rather than quitting. Problem was
+reported by Patrick Welche.</li>
+</ul>
+</blockquote>
+<p>2010-03-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh: Released GraphicsMagick 1.3.12.</li>
+</ul>
+</blockquote>
+<p>2010-03-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/Makefile.am: Update PerlMagick/Magick.pm in the
+source tree (as required) since it is distributed source and
+contains the current version number.</li>
+</ul>
+</blockquote>
+<p>2010-03-03 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple...">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li><dl class="first docutils">
+<dt>coders/png.c: restored missing "US" in PNG_USER_CHUNK_CACHE_MAX</dt>
+<dd>at line 102. Added some (unsigned long) typecasts on print statements
+to stifle warnings.</dd>
+</dl>
+</li>
+</ul>
+</blockquote>
+<p>2010-03-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>png: Updated libpng to 1.2.43. Resolves CVE-2010-0205 as
+pertains to GraphicsMagick Windows build.</li>
+</ul>
+</blockquote>
+<p>2010-03-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/rwfile_DCX_*.sh: Add tests for reading and writing DCX.</li>
+<li>coders/pcx.c (WritePCXImage): DCX is not the same as PCX so only
+write DCX when requested to (and vice-versa).</li>
+<li>utilities/tests/convert-pipe-out.sh: New test to verify that
+<cite>convert</cite> can write to stdout.</li>
+<li>utilities/tests/convert-pipe-in.sh: New test to verify that
+<cite>convert</cite> can read from stdin.</li>
+<li>utilities/tests/convert-pipe-filter.sh: New test to verify that
+<cite>convert</cite> works properly as a filter.</li>
+<li>magick/image.c (SetImageInfo): The <cite>rectify</cite> parameter was found
+to not be sufficient to meet requirements since it was
+overloaded. The utilities would malfunction (hang or throw an
+exception) if requested to write to stdout. As a result, this
+parameter has been changed to a binary flag type parameter.
+Existing True/False values are mapped to equivalents using the new
+binary flag. This is intended to resolve Debian bug 571719
+"graphicsmagick: "convert" command is broken", reported by
+Vladimir Stavrinov.</li>
+</ul>
+</blockquote>
+<p>2010-02-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh: Released GraphicsMagick 1.3.11.</li>
+</ul>
+</blockquote>
+<p>2010-02-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/composite.c (GetCompositionPixelIteratorCallback):
+OverCompositeOp and AtopCompositeOp may be replaced with
+CopyCompositeOp in the case where neither image has a matte
+channel.</li>
+<li>magick/command.c (ConvertImageCommand, MogrifyImageCommand):
+Added -extent option to apply a background color canvas behind the
+image. Added -compose option to allow specifying the composition
+operator to use.</li>
+<li>magick/transform.c (ExtentImage): New function apply a
+background color canvas behind the image.</li>
+</ul>
+</blockquote>
+<p>2010-02-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Added a -thumbnail command to all of the GM
+sub-commands which currently support -resize. This is a resize
+method optimized for speed when reducing the size of the image
+(such as when creating thumbnails).</li>
+</ul>
+</blockquote>
+<p>2010-02-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (LocaleCompare, LocaleNCompare): Fix array
+index underflow which occurs if the char type is signed and the
+character value is in the extended range. Problem reported by
+Arseny Solokha. Resolves SourceForge patch #2953314.</li>
+</ul>
+</blockquote>
+<p>2010-02-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh: Released GraphicsMagick 1.3.10.</li>
+</ul>
+</blockquote>
+<p>2010-02-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/demo/demo.cpp (main): Split demo output frames into
+individual files to enable easier viewing.</li>
+</ul>
+</blockquote>
+<p>2010-02-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/GraphicsMagick.imdoc: Improve usage synopsis for
+<cite>convert</cite>. SourceForge feature request 2845965 "confusing
+documentation".</li>
+<li>magick/display.c (MagickXDisplayImage): Image number was
+incorrect in window title.</li>
+<li>magick/render.c (DrawImage): Path points data allocation was
+much larger than it needed to be. Patch by Vladimir Lukianov.
+Resolves SourceForge issue 2947851 "Memory allocation error on
+vector graphics (or mem bomb)".</li>
+<li>magick/constitute.c (WriteImages): +adjoin was not working
+correctly for the case when only one image frame is present. With
++adjoin and writing one frame to "foo%d.jpg" it was outputting
+"foo%d.jpg" rather than "foo0.jpg". Problem reported by Frans
+Coetzee.</li>
+</ul>
+</blockquote>
+<p>2010-02-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh: Released GraphicsMagick 1.3.9.</li>
+</ul>
+</blockquote>
+<p>2010-02-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/imdoc2man: Bare single quotes at the beginning of a line
+need to be escaped in order to make roff happy. Problem reported
+by Daniel Kobras.</li>
+<li>magick/command.c (ImportImageCommand): Don't assign a pointer to
+static constant data into an array which uses heap allocated data.
+Avoids a "double free" error when using gm import -frame. Patch
+by Daniel Kobras.</li>
+<li>magick/color_lookup.c (QueryColorname): XPM does not support
+RGBA color syntax, but it does support RGB. Patch by Daniel
+Kobras.</li>
+<li>magick/blob.c (OpenBlob): Only form multi-part filename when
+required.</li>
+<li>magick/display.c (MagickXDisplayImage): The display <cite>-update</cite>
+option was only working in conjunction with the <cite>-delay</cite> option
+with a delay setting of 2 or greater. Problem reported by Sami
+Liedes. Patch by Vincent MAUGE. Resolves Debian bug ID 414779.</li>
+</ul>
+</blockquote>
+<p>2010-02-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (OpenBlob): Only apply scene substitution to
+the filename if adjoin is false.</li>
+<li>magick/constitute.c (WriteImage): If adjoin is true, then
+restore original filename specification since opening the blob
+modifies it. Resolves Debian bug ID 552998.</li>
+<li>magick/image.c (SetImageInfo): Don't check filename for scene
+substitution if adjoin is intentionally false. This allows saving
+to file names which look like they contain a scene substitution
+pattern.</li>
+<li>magick/command.c (MogrifyImage): Convolution failure results in
+a crash rather than an error report. Resolves Debian bug ID
+539251.</li>
+<li>magick/deprecate.c: The string constants LoadImageText,
+SaveImageText, LoadImagesText, and SaveImagesText should have been
+deprecated, rather than being entirely removed.</li>
+</ul>
+</blockquote>
+<p>2010-01-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/Makefile.am (install-data-html): Make sure that only the
+necessary documentation files are installed.</li>
+</ul>
+</blockquote>
+<p>2010-01-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/installer/inc/body.isx: Strip out executable
+components which depend on proprietary MFC and ATL libraries.
+This means that "gmdisplay.exe" and "ImageMagickObject" are no
+longer distributed or installed via the Windows setup installer.
+When a new display application is developed based on open source
+libraries, then the display functionality and associations can be
+restored.</li>
+</ul>
+</blockquote>
+<p>2010-01-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/transform.c (FlattenImages): Apply the image background
+color under the initial canvas image if it is non-opaque.</li>
+<li>magick/composite.c (MagickCompositeImageUnderColor): New private
+function to apply a color underneath a non-opaque image.</li>
+</ul>
+</blockquote>
+<p>2010-01-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/prefetch.h: New header to provide wrapper macros for
+compiler-specific explicit prefetch APIs.</li>
+<li>magick/effect.c (BlurImageScanlines): Solid color images which
+only differed in the matte channel were not being blurred.</li>
+<li>magick/color.h (NotPixelMatch,PixelMatch): New macros to
+fully-compare a pixel, including matte.</li>
+<li>magick/resource.c (SetMagickResourceLimit): Invoke
+omp_set_num_threads() to set thread limit if ThreadsResource is
+requested.</li>
+<li>magick/pixel_cache.c (AllocateThreadViewSet): The number of
+cache views to allocate needs to be obtained from
+omp_get_max_threads(). Otherwise there is a crash if the number
+of threads is reduced from the original value.</li>
+</ul>
+</blockquote>
+<p>2010-01-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh: Released GraphicsMagick 1.3.8.</li>
+<li>NEWS.txt: Update for the 1.3.8 release.</li>
+</ul>
+</blockquote>
+<p>2010-01-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/benchmarks.rst: Update benchmark report to compare
+performance with ImageMagick 6.5.8-10.</li>
+</ul>
+</blockquote>
+<p>2010-01-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/shear.c (RotateImage, ShearImage): Ensure that errors
+propagate up to the API user. Don't overwrite a detailed
+exception message with a generic one. Don't return a bogus image
+if there is an error.</li>
+</ul>
+</blockquote>
+<p>2010-01-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/installer/inc/files-base.isx: Third party
+executables not included in the Visual Studio build are no longer
+bundled in the GraphicsMagick installer. This means that
+hp2xx.exe, mpeg2dec.exe, and mpeg2enc.exe are no longer
+distributed.</li>
+<li>www/Magick++/Image.rst: Emphasize that InitializeMagick() MUST
+be invoked, and make sure that all of the examples show use of it.</li>
+</ul>
+</blockquote>
+<p>2010-01-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/delegate.c (InvokeDelegate): Use MagickSpawnVP() under
+Windows as well.
+(InvokePostscriptDelegate): Use MagickSpawnVP() under Windows as
+well.</li>
+<li>magick/utility.c (MagickSpawnVP): Moved from unix_port.c.
+Updated implementation to use spawnvp() rather than fork()/exec()
+under Windows.</li>
+<li>configure.ac: Add check for Windows spawnvp function.
+Add check for process.h.</li>
+<li>magick/semaphore.c (DestroySemaphore): POSIX mutex statically
+initialized via PTHREAD_MUTEX_INITIALIZER should not be destroyed.</li>
+<li>configure.ac: DisableSlowOpenMP is now the default. Use
+--enable-openmp-slow to enable OpenMP for algorithms which
+sometimes run slower rather than faster.</li>
+</ul>
+</blockquote>
+<p>2010-01-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/version.h.in: Added MagickLibInterfaceNewest and
+MagickLibInterfaceOldest preprocessor defines so that applications
+may easily test for library versions while compiling.</li>
+</ul>
+</blockquote>
+<p>2010-01-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawPolygonPrimitive): Use restrict keyword.</li>
+<li>magick/pixel_iterator.c: Use restrict keyword.</li>
+<li>utilities/Makefile.am: Modules are supported in the shared
+library built so list-module.sh test should be expected to pass.</li>
+<li>configure.ac: Add WITH_SHARED_LIBS conditional.</li>
+</ul>
+</blockquote>
+<p>2010-01-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/version.h.in: Update copyright years.</li>
+<li>magick/semaphore.c: The return code from all pthread mutex APIs
+are now checked (not just initialize and destroy), and any error
+results in an immediate fatal exit.</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>ChangeLog-2011.rst</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2011-12-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (AcquireCacheNexus):
+MirrorVirtualPixelMethod was broken.</li>
+</ul>
+</blockquote>
+<p>2011-12-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Improve configuration support for Open64 Compiler
+Suite: Version 4.2.5.2 compiler with OpenMP.</li>
+<li>coders/tga.c (ReadTGAImage): Assume that 32-bit TGA files have
+an alpha channel, even if they are not marked as such. Fixes
+SourceForge issue 3466908 "TGA with alpha".</li>
+<li>configure.ac: Revert changeset eaa27346d8e9 which tried to avoid
+the OpenMP library being included multiple times because in some
+cases it is not included at all.</li>
+</ul>
+</blockquote>
+<p>2011-12-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (VersionCommand): For MSVC builds, report if
+SSE or SSE2 was used in the build.</li>
+<li>Release GraphicsMagick 1.3.13.</li>
+<li>Update libtiff to release 4.0.0</li>
+</ul>
+</blockquote>
+<p>2011-12-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Update libpng to release 1.5.7</li>
+</ul>
+</blockquote>
+<p>2011-12-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Update lcms2 to release 2.3</li>
+</ul>
+</blockquote>
+<p>2011-12-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Update Automake used to 1.11.2.</li>
+</ul>
+</blockquote>
+<p>2011-12-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/OpenMP.rst: Updated with new results, including 12-core
+Intel Xeon E5649 and 16-core AMD Opteron 6220 "Bulldozer" CPUs.</li>
+<li>magick/studio.h: Enable building and running correctly with
+Open64 Compiler Suite: Version 4.2.5.2 compiler with OpenMP.</li>
+<li>magick/command.c (BenchmarkImageCommand): Add -rawcsv option to
+benchmark to output only original data in a CSV format.</li>
+</ul>
+</blockquote>
+<p>2011-12-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Fix various issues noticed when cross-compiling for the
+i686-w64-mingw32 target.</li>
+</ul>
+</blockquote>
+<p>2011-12-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (ConvolveImage): For Q8 and Q16 builds use
+'float' rather than 'double' for computations in order to improve
+performance with some compilers.</li>
+</ul>
+</blockquote>
+<p>2011-12-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (ConvolveImage): Special-case grayscale images
+for better convolution performance.</li>
+</ul>
+</blockquote>
+<p>2011-12-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (BenchmarkUsage): -stepthreads now requires an
+argument which is the increment (starting at zero) to the number
+of threads for each step. This hastens benchmarking with a large
+number of cores.</li>
+</ul>
+</blockquote>
+<p>2011-12-07 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple...">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Eliminate use of FARDATA. It's no longer needed
+and will no longer be supplied by png.h in libpng-1.6.0.</li>
+</ul>
+</blockquote>
+<p>2011-12-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (BenchmarkImageCommand): Added Karp-Flatt
+metric to benchmark output.</li>
+</ul>
+</blockquote>
+<p>2011-12-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>GraphicsMagick.spec.in: Eliminate use of deprecated BuildPrereq
+in RPM spec file.</li>
+</ul>
+</blockquote>
+<p>2011-11-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (WriteImagesFile): Should set file in
+ImageInfo based on provided parameter rather than relying on it
+already being set. File argument was not being used.</li>
+</ul>
+</blockquote>
+<p>2011-11-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c: For packed 10 bits, datums are now represented in
+the same (reversed) order for all RGB and YCbCr formats.
+Previously YCbCr 4:4:4 formats were not swapping the word datums
+because the only real-world files encountered did not swap the
+word datums. Resolves SourceForge bug 2057277 "DPX 10bit CbYCr
+Image seems to be wrong".</li>
+<li>wand/magick_wand.c (MagickWriteImagesFile): New function to
+append images to a provided file handle. Resolves SourceForge
+issue 3046868 "added MagickWriteImagesFile".</li>
+<li>magick/constitute.c (WriteImagesFile): New function to append
+images to a provided file handle.</li>
+<li>magick/blob.c (OpenBlob): Don't rewind already open file handle
+passed to OpenBlob() since we don't know the intended state of
+this file handle, and because it prevents appending to an existing
+file. This change is part of the fix for SourceForge issue
+3046868 "added MagickWriteImagesFile".</li>
+<li>wand/magick_wand.c (MagickSetImageSavedType): New function to
+allow specifying the storage type used when saving the file
+(rather than changing the current image characteristics).
+Resolves SourceForge patch 3110185
+"MagickGetImageSavedType()/MagickSetImageSavedType() API".
+(MagickGetImageSavedType): Return the storage type which will be
+used when the image is saved.</li>
+<li>magick/annotate.c (RenderFreetype): Add support for drawing text
+using a bitmap font. Resolves SourceForge patch 3230719 "add
+support for drawing text with bitmap font to annotate.c".</li>
+<li>magick/profile.c (AppendImageProfile): Don't leak profile buffer
+while appending a chunk to an existing profile. Resolves
+SourceForge patch 3294496 "Fix a memory leak in
+profile.c(AppendImageProfile)".</li>
+</ul>
+</blockquote>
+<p>2011-11-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (BenchmarkImageCommand): Include the number of
+threads used in the benchmark results output.
+(BenchmarkImageCommand): New benchmark option -stepthreads to
+execute the specified command with an increasing number of threads
+to measure how an algorithm benefits from threading.
+(BenchmarkImageCommand): Fix benchmark argument parsing so it is
+not order dependent.
+(BenchmarkImageCommand): Add a speedup indication to -stepthreads
+output.</li>
+<li>config/delegates.mgk.in: File names in gnuplot files need to be
+surrounded by double quotes or gnuplot parser will reject them.</li>
+</ul>
+</blockquote>
+<p>2011-11-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (GetMedianList): Return PixelPacket via pointer
+rather than by value.</li>
+<li>version.sh: For snapshots packages, PACKAGE_CHANGE_DATE now uses
+a form like "snapshot-20111121" rather than "unreleased" so it is
+possible to determine the vintage of an installed snapshot.</li>
+</ul>
+</blockquote>
+<p>2011-11-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tga.c (ReadTGAImage): Fix for poor TGA reading
+performance due to excessive use of GetBlobByte(). Performance is
+fixed by adding local buffering. Fixes SourceForge bug 3439531
+"Slow TGA reading".</li>
+</ul>
+</blockquote>
+<p>2011-11-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (AdaptiveThresholdImage): More performance
+improvements.</li>
+</ul>
+</blockquote>
+<p>2011-11-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/analyze.c (GetImageBoundingBox): Add a special case to
+handle absolute color comparison.</li>
+</ul>
+</blockquote>
+<p>2011-11-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>png: Update libpng to 1.5.6 release.</li>
+</ul>
+</blockquote>
+<p>2011-10-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Avoid linker warnings when building GraphicsMagick
+regarding OpenMP library being included multiple times.</li>
+</ul>
+</blockquote>
+<p>2011-10-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/meta.c (GetIPTCStream): Eliminate possible use of
+uninitialized data when parsing long format tag length.</li>
+</ul>
+</blockquote>
+<p>2011-10-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/import.c: Move low-level pixel import functions from
+constitute.c to new file import.c.</li>
+<li>magick/export.c: Move low-level pixel export functions from
+constitute.c to new file export.c.</li>
+<li>magick/floats.c: Move Richard Nolde's floating point conversion
+functions from constitute.c to new file floats.c.</li>
+</ul>
+</blockquote>
+<p>2011-10-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>libtool: Updated to libtool 2.4.2.</li>
+<li>configure.ac: Automake conditional for HasPNG can not itself be
+conditional. Indent PNG script code appropriately.</li>
+</ul>
+</blockquote>
+<p>2011-10-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am (AUTOMAKE_OPTIONS): Distribute lzma-compressed
+tarball in 'xz' format rather than deprecated 'lzma' format.</li>
+</ul>
+</blockquote>
+<p>2011-10-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Fix syntax error with GSCMYKDevice ('==' rather
+than '='). Thanks to Glenn Randers-Pehrson for noticing and
+reporting the issue.</li>
+</ul>
+</blockquote>
+<p>2011-10-12 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple...">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>Use a "for" loop in configure.ac to find libpngNN.</li>
+</ul>
+</blockquote>
+<p>2011-10-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/pixel_wand.c (NewPixelWand): Invoke InitializeMagick()
+automatically in case user forgets to do so.</li>
+<li>wand/drawing_wand.c (NewDrawingWand): Invoke InitializeMagick()
+automatically in case user forgets to do so.</li>
+<li>wand/magick_wand.c (NewMagickWand): Invoke InitializeMagick()
+automatically in case user forgets to do so.</li>
+<li>png: libpng sources were updated to release 1.5.4.</li>
+</ul>
+</blockquote>
+<p>2011-10-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): TIFFGetField() on
+TIFFTAG_OPIIMAGEID was causing a crash due to an argument
+mis-match between GraphicsMagick and libtiff. Also fixed a few
+GCC 4.6 warnings. Problem was reported by Dylan Millikin.</li>
+</ul>
+</blockquote>
+<p>2011-10-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c (MagickSetDepth): New function to set the
+depth used when reading from an image format which requires that
+the depth be specified in advance.
+(MagickReadImageBlob): Use BlobToImage() to read the blob.</li>
+<li>magick/effect.c (AdaptiveThresholdImage): Reduce or eliminate
+expensive floating point calculations when possible.</li>
+<li>wand/magick_wand.c (MagickSetFormat): New Wand function to allow
+setting the file or blob format before it has been read.</li>
+</ul>
+</blockquote>
+<p>2011-09-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/installer/inc/tasks-install-perlmagick.isx: Windows
+setup installer now installs PerlMagick built against ActiveState
+Perl v5.12.4 build 1205.</li>
+<li>magick/annotate.c (RenderFreetype): Eliminate spurious "out of
+memory" exceptions due to empty text string.</li>
+</ul>
+</blockquote>
+<p>2011-09-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/module.c (ModuleAliases): PAM format is handled by PNM
+coder.</li>
+<li>jpeg: Record that jpeg sources were updated to release v8c.</li>
+<li>lcms: Record that lcms sources were updated to release 2.2.</li>
+<li>png: Record that png sources were updated to release 1.5.4.</li>
+<li>tiff: Record that tiff sources were updated to release 4.0.0beta7.</li>
+<li>xml: Record that libxml2 sources were updated to release 2.7.8.</li>
+<li>zlib: Record that zlib sources were updated to release 1.2.5.</li>
+<li>VisualMagick/installer/inc/body.isx: Set MagickConfigDirectory
+for DLL build so that .mgk files are put in application top
+directory. This makes installation layout between static and DLL
+builds more similar.</li>
+</ul>
+</blockquote>
+<p>2011-08-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/list.c (AppendImageToList): Documentation for
+AppendImageToList() was wrong. Problem was reported by Brad
+Harder.</li>
+</ul>
+</blockquote>
+<p>2011-08-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/display.c (MagickXMagickCommand): Display 'save' and
+'print' should display useful error details. Problem was reported
+by Brad Harder.</li>
+</ul>
+</blockquote>
+<p>2011-08-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/semaphore.c (AllocateSemaphoreInfo): Enable pthread mutex
+error checking if MAGICK_DEBUG is defined when the code is
+compiled. This mode helps validate that mutexes are used
+correctly. No longer enable recursive mutexes since the
+GraphicsMagick logic should be able to operate without this
+assistance.</li>
+</ul>
+</blockquote>
+<p>2011-08-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c (DCM_ReadOffsetTable): Fix wrong cast noticed when
+compiling with LLVM.</li>
+</ul>
+</blockquote>
+<p>2011-08-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/enhance.c (LevelImageChannel): Fix documented prototype.
+Problem was reported by Brad Harder.</li>
+</ul>
+</blockquote>
+<p>2011-07-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (AcquireOneCacheViewPixelInlined): Only use
+image colormap if the image storage class is PseudoClass.
+Eliminates a core dump when the image is in CMYK space.</li>
+</ul>
+</blockquote>
+<p>2011-07-20 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple...">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: account for changed typecast of png_get_iCCP
+argument in libpng15</li>
+</ul>
+</blockquote>
+<p>2011-07-20 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple...">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: look for libpng15, libpng14, libpng12, and libpng
+in that order.</li>
+</ul>
+</blockquote>
+<p>2011-07-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>png: Update to libpng 1.5.4.</li>
+</ul>
+</blockquote>
+<p>2011-06-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/docutils-articles.css: Style sheet syntax fixes. Patch by
+Mark Mitchell.</li>
+<li>scripts/html_fragments.py: Use proper quoting in banner search
+HTML. Patch by Mark Mitchell.</li>
+</ul>
+</blockquote>
+<p>2011-06-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageType): Fix documentation for enumeration
+names. The types need "Type" as part of the name. Problem was
+reported by Brad Harder.</li>
+</ul>
+</blockquote>
+<p>2011-06-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>scripts/html_fragments.py (banner_template): HTML banner
+improvements to go along with style-sheet changes.</li>
+<li>www/docutils-articles.css: Style-sheet improvements by Mark
+Mitchell to work better on small screens.</li>
+</ul>
+</blockquote>
+<p>2011-06-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/project.rst: Add a page for links to pages about the
+project. The intention is to use this page to reduce the clutter
+in the banner.</li>
+</ul>
+</blockquote>
+<p>2011-05-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc: Document tiff:group-three-options define.</li>
+<li>coders/tiff.c (WriteTIFFImage): Add support for a
+tiff:group-three-options define to allow power-users to set the
+value of the GROUP3OPTIONS tag.</li>
+</ul>
+</blockquote>
+<p>2011-05-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/Makefile.am: Include Hg.*, remove CVS.*.</li>
+<li>scripts/html_fragments.py (nav_template): CVS tab changed to
+Source, which links to Hg.html.</li>
+<li>www/Hg.rst: Document Hg repository access.</li>
+</ul>
+</blockquote>
+<p>2011-05-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>scripts/rst2htmldeco.py (docutils_opts): Do not include a
+datestamp of any kind since it unnecessarily churns the
+repository, particularly if the output file did not otherwise
+change.</li>
+<li>INSTALL-unix.txt: Fix typo in description of --without-lzma.</li>
+</ul>
+</blockquote>
+<p>2011-05-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (ReadJPEGImage): Treat exceptions thrown by
+jpeg_finish_decompress() as warnings rather than errors.
+(JPEGErrorHandler): Handle JPEG errors directly rather than
+passing them to a message formatting routine for handling. Also
+added useful logging.
+(JPEGMessageHandler): Only handle JPEG traces and warnings. Also
+added useful logging.</li>
+</ul>
+</blockquote>
+<p>2011-05-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (EmitMessage): Treat an unhandled EXP marker as a
+warning rather than a hard error. Resolves SourceForge issue
+3297995 "Unsupported marker type 0xdf".</li>
+</ul>
+</blockquote>
+<p>2011-05-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (AppendImages): If the input list only contains
+one image, then return a new handle to the one image in the list
+rather than reporting an exception. Problem was reported by Ravil
+Rakhimgulov ("Hunter1972").</li>
+</ul>
+</blockquote>
+<p>2011-04-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageColorRegion): New function to set the
+constant pixel color for a specified region of the image.
+(AppendImages): Only color background pixels when needed.</li>
+</ul>
+</blockquote>
+<p>2011-04-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Added TIFF writer support for
+JBIG1 compression. Not proven to work yet.</li>
+<li>magick/image.h (CompressionType): Added Group3Compression as an
+alias for already existing FaxCompression. Added
+JPEG2000Compression, JBIG1Compression, and JBIG2Compression for
+future use.</li>
+</ul>
+</blockquote>
+<p>2011-04-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: For MinGW32 use 64-bit value formatting
+conventions which will work with any version of the WIN32 CRT.</li>
+</ul>
+</blockquote>
+<p>2011-04-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (WriteJPEGImage): Properly handle errors reported
+by the JPEG library when writing. Up to now, JPEG library simply
+invoked exit(), which crashed or hung if driven by Magick++ API.
+Fixes SourceForge bug 3106947 "Assertion failure when saving an
+"invalid" image as JPEG".</li>
+<li>magick/module.c (ModuleAliases): Delete "XTRNBSTR"-entry. Fix by
+Stefan Graff.</li>
+<li>contrib/win32/ATL7/ImageMagickObject/ImageMagickObject.cpp
+(Perform): Member "Perform" - out-commented SafeArrayAccessData
+and following SafeArrayUnaccessData. Fix by Stefan Graff.</li>
+<li>contrib/win32/ATL/ImageMagickObject/MagickImage.cpp: Delete
+"XTRNSTREAM"-branch because "XTRNSTREAM" doesn't exist
+anymore. Fix by Stefan Graff.</li>
+<li>coders/xtrn.c: In function "WriteXTRNImage" there is no branch
+for XTRNARRAY. Fix by Stefan Graff.</li>
+<li>PerlMagick/Magick.xs: AdaptiveThreshold offset argument was
+being parsed into an 'unsigned long' rather than 'double' as it
+should have been. This resulted in inability to handle negative
+offsets. Fixes SourceForge bug 3288735 "PerlMagick issue with
+AdaptiveThreshold".</li>
+<li>coders/jpeg.c (ReadIPTCProfile): JPEG may deliver IPTC profile
+in chunks but code was only allowing one chunk, even though it was
+otherwise prepared to concatenate chunks. Fixes SourceForge bug
+2978422 "Clipping paths in JPG images are truncated".</li>
+<li>magick/utility.c (GetToken): Fix case where parser may run off
+end of string. Also add asserts to check for passing null
+pointer.</li>
+</ul>
+</blockquote>
+<p>2011-04-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/channel.c (ChannelImage): Report an error if the
+requested channel is not compatible with the image colorspace.
+Only deals with CMYK/RGB conflicts. Resolves SourceForge issue
+3283046 "Bug in CMYK".</li>
+</ul>
+</blockquote>
+<p>2011-03-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/txt.c (ReadTXTImage): Throw error if attempt to read
+empty file.</li>
+<li>coders/{fits.c,mac.c,miff.c,pcd.c,pict.c,ps3.c,rla.c,txt.c}:
+Format requires seekable stream.</li>
+<li>coders/pnm.c (WritePNMImage): Implement writer for PAM format.</li>
+<li>coders/ept.c (WriteEPTImage): Fix error handling for case when
+TIFF writer fails.</li>
+<li>magick/constitute.c (ReadImage): Use of GetBlobStatus() to
+evaluate image reader success is bogus.
+(MagickGetQuantumSamplesPerPixel): New private method to return
+the number of samples returned per pixel for a given quantum type.</li>
+</ul>
+</blockquote>
+<p>2011-03-14 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple...">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WriteOnePNGImage(): Fixed a rounding error in
+writing the pHYs chunk (it was truncating instead of rounding).</li>
+</ul>
+</blockquote>
+<p>2011-02-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (MagickPanicSignalHandler,MagickSignalHandler):
+Don't invoke DestroyMagick() since there may be OpenMP worker
+threads still running which are using data which would be
+deallocated. Instead we invoke PurgeTemporaryFiles() to remove
+any existing temporary files. Valgrind will report leaks if the
+program is terminated by a signal but this causes no actual harm.
+Resolves SourceForge issue 3165456 "^C causes semaphore failure in
+MacOSX".
+(MagickPanicSignalHandler): Invoke abort() in panic signal handler
+so that we will reliably get a core dump.</li>
+<li>magick/tempfile.c (PurgeTemporaryFiles): New private function to
+remove any existing temporary files but without destroying
+temporary file semaphore.</li>
+</ul>
+</blockquote>
+<p>2011-02-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pnm.c (ReadPNMImage): Fix mis-placed break in PAM header
+parser.</li>
+<li>wand/magick_wand.c (MagickWriteImageBlob): Improve the
+documentation to mention the related use of MagickSetImageFormat()
+and MagickResetIterator().</li>
+</ul>
+</blockquote>
+<p>2011-02-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/xwindow.c (MagickXBestFont): Check for a few more common
+font names, and ensure to always check for "fixed" as a final
+fallback.</li>
+</ul>
+</blockquote>
+<p>2011-02-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>config/delegates.mgk.in: Added gs-cmyk entry. Used if '-type
+ColorSeparation' is specified on the command-line prior to the PDF
+or Postscript file name. This entry specifies use of the
+Ghostscript PAM driver which is capable of supporting CMYK output.
+This may be useful if it is desired to apply CMYK color profiles
+to the image returned from the PDF. As fair warning, it seems
+that Ghostscript 8.62 outputs CMYK even if the PDF was in RGB
+space if the PAM driver is used.</li>
+<li>coders/pnm.c (ReadPNMImage): Add support for reading netpbm's
+PAM format.</li>
+</ul>
+</blockquote>
+<p>2011-02-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/rwblob.c, tests/rwfile.c: Fixes to help tests work when
+testing with multiple frames.</li>
+<li>coders/sgi.c: SGI format is not documented to support multiple
+frames. Remove the half-baked extension for it.</li>
+</ul>
+</blockquote>
+<p>2011-02-01 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple...">glennrp<span>@</span>simple<span>.</span><span>.</span><span>.</span></a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (ReadBMPImage): Changed file_size greater than
+expected from a corrupt-image error to a debug log entry.
+File_size too small is still an error, and made that so also for
+BI_RGB images which were previously exempted from the test.</li>
+</ul>
+</blockquote>
+<p>2011-01-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/rwblob.c, tests/rwfile.c: Validate the data in each image
+frame, validate that each read returns the same number of frames,
+and validate that the correct number of frames was ultimately
+returned.</li>
+<li>magick/blob.c (SyncBlob): Disable bogus code which attempted to
+replicate the blob I/O object across all images in the list when
+the blob is synced. Leave a less bogus bit of code in place (but
+commented out) in case such functionality is deemed to actually be
+needed in the future. The previous code was copying structs on
+top of each other, including a pointer member to a semaphore.</li>
+</ul>
+</blockquote>
+<p>2011-01-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/Changes.rst: Add a new Changes page to wrap up the yearly
+change logs to lessen download size.</li>
+<li>scripts/changelog2rst.sh: Simple utility to format ChangeLog
+format into something resembling reStructuredText.</li>
+<li>www/Makefile.am: Use reStructuredText to format the ChangeLog
+files to HTML so that we can inherit the improved formatting and
+page style.</li>
+<li>coders/pnm.c (ReadPNMImage): Support for multi-frame PNM was
+botched due to on-going edits to support PAM format.</li>
+</ul>
+</blockquote>
+<p>2011-01-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c (MagickDescribeImage): Was sending
+descriptive output to stdout rather than returning it in an
+allocated string as intended.</li>
+</ul>
+</blockquote>
+<p>2011-01-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/draw.c, wand/drawing_wand.c (MvgPrintf): Update to handle
+C99 vsnprintf() return values.</li>
+<li>magick/draw.c, wand/drawing_wand.c (DrawAnnotation): Linux
+glibc does not pass extended text characters if "%.1024s"
+formatting convention is used. Apparently it assumes that such
+characters may be UTF8 and returns -1 rather than outputting the
+string, even if it is assured to fit.</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>ChangeLog-2012.rst</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2012-12-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Added -auto-orient to 'convert' and 'mogrify'
+to automatically rotate the image upright for viewing based on its
+current orientation setting.
+Added -orient to support setting the image orientation.</li>
+<li>magick/shear.c (AutoOrientImage): New function to automatically
+orient the image so that it is upright for normal viewing.</li>
+</ul>
+</blockquote>
+<p>2012-12-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>scripts/tap-functions.shi: Tidy TAP tests so that they may be
+run alone, or via Perl's 'prove'.</li>
+</ul>
+</blockquote>
+<p>2012-12-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/rwfile.c (main): Test file name generation was not
+correct.</li>
+</ul>
+</blockquote>
+<p>2012-12-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/rwfile.tap: Added -stdio tests for most file formats.
+This tests I/O using an already-opened file handle passed via the
+ImageInfo file member. Formats using the Ghostscript delegate are
+not working right yet.</li>
+</ul>
+</blockquote>
+<p>2012-12-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/rwfile.c (main): Added a '-stdio' option to test
+reading/writing files using file handles opened by the API user.</li>
+<li>magick/blob.c (CloseBlob): It should be possible to invoke
+CloseBlob() multiple times, including blobs set to "exempt".
+There were some issues when passing in file descriptors.</li>
+</ul>
+</blockquote>
+<p>2012-12-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/api/api.rst: Add another example Core C API example program.</li>
+<li>magick/blob.c (OpenBlob): Restore file position, rather than
+rewind, after reading header bytes.</li>
+<li>magick/image.c (SetImageInfo): Restore file position after
+reading header bytes. Resolves SourceForge issue 3597486
+"ReadImage not working with file descriptors".</li>
+</ul>
+</blockquote>
+<p>2012-12-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick: WIN64 (64-bit Windows) installer improvements to
+bring up to par with 32-bit installer.</li>
+</ul>
+</blockquote>
+<p>2012-12-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick: WIN64 (64-bit Windows) is supported now.</li>
+</ul>
+</blockquote>
+<p>2012-12-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c: Eliminate support for experimental
+MAGICK_MMAP_WRITE, which never quite worked correctly and did not
+provide performance benefits.</li>
+</ul>
+</blockquote>
+<p>2012-12-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (FileToBlob): Rewrite to be based on stdio.</li>
+</ul>
+</blockquote>
+<p>2012-12-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick_types.h.in: Changes to try to work better with the
+Windows WIN64 API.</li>
+</ul>
+</blockquote>
+<p>2012-12-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageColorRegion): The provided color should
+be in the same colorspace as the image. The image is no longer
+converted to RGB with the expectation that the provided color is
+always some particular RGB.
+(AppendImages): No longer transform the canvas image to RGB. Now
+append uses the first listed image to determine the colorspace
+which should be used when appending the additional images and of
+the output image. The additional images are converted to the
+canvas image colorspace. Likewise, the background color is
+assumed to be in the same colorspace as the first listed image so
+that it is compatible and can be used to fill the background color
+without translation.</li>
+</ul>
+</blockquote>
+<p>2012-11-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>rungm.sh.in: Remove extraneous space in first line which
+prevents execution with T-shell (tsch). Reported by William
+Langdon.</li>
+</ul>
+</blockquote>
+<p>2012-11-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/wand/wand.rst: Add a simple example of using the Wand API.</li>
+</ul>
+</blockquote>
+<p>2012-11-21 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simplesystems.org">glennrp<span>@</span>simplesystems<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (ReadBMPImage): Fixed an old bug with decoding
+chromaticity primaries.</li>
+</ul>
+</blockquote>
+<p>2012-11-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.h ("C"): Need to include wand/wand_symbols.h
+after magick/api.h in order for options from magick_config.h to
+take effect.</li>
+<li>magick/symbols.h (PSPageGeometry): Fix typo. Should map to
+GmPSPageGeometry.</li>
+</ul>
+</blockquote>
+<p>2012-11-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/wand_symbols.h, magick/symbol.h: MagickWand API is now
+prefixed with 'Gm' when the --enable-symbol-prefix configure
+option is supplied. These changes are contributed by Ben Wu.
+Details of changes are as follows:<ol class="arabic">
+<li>A new header file wand/wand_symbols.h which prefixes all
+MagickWand API symbols with Gm.</li>
+<li>Modification to all the header files in wand/ to include
+wand_symbols.h.</li>
+<li>Modification to magick/symbols.h to include additional
+symbols which were colliding with names in ImageMagick.</li>
+<li>Modification to magick/error.c to exclude function
+definitions for MagickError, MagickFatalError,
+MagickWarning, and ThrowException when building with
+--enable-symbol-prefix option. There four names were also
+defined as macros so it appears that putting them in a
+symbol-remapping file wont work.</li>
+</ol>
+</li>
+<li>Makefile.am: Update Automake to 1.12.5.</li>
+</ul>
+</blockquote>
+<p>2012-11-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/COPYING: Change Magick++ usage license to be exactly
+the MIT license without the additional sentence about retention of
+copyright (which was already legally implicit).</li>
+</ul>
+</blockquote>
+<p>2012-11-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/symbols.h: Re-generate list of symbols to prefix.</li>
+<li>magick/utility.c (IsGlob): IsGlob can be more efficient.</li>
+<li>magick/floats.c: Use compile-time selection of endian-specific
+code rather than run-time. Fix cast warning with 64-bit builds.</li>
+</ul>
+</blockquote>
+<p>2012-11-07 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simplesystems.org">glennrp<span>@</span>simplesystems<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WriteOnePNGImage): The wrong QuantumType was
+sometimes passed to ExportImagePixelArea() by the PNG encoder.</li>
+<li>coders/png.c (ReadOnePNGImage): Let libpng unpack all sub-8-bit
+pixels (see change of 2012-08-31 which lets libpng unpack sub-8-bit
+palette images; this also lets libpng unpack the grayscale images).</li>
+<li>coders/png.c (ReadOnePNGImage): Corrected the reading of interlaced
+images (see SourceForge bug 3420695, in which all passes are
+displayed in a garbled manner instead of only the completed image).</li>
+</ul>
+</blockquote>
+<p>2012-10-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c (MagickGetImagePage): Need to use 'image'
+rather than 'images' in order to work with iterator.
+(MagickSetImagePage): Need to use 'image'
+rather than 'images' in order to work with iterator.</li>
+</ul>
+</blockquote>
+<p>2012-10-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (TranslateTextEx): Fix bug with input string
+read overrun if the input string ends with a single '%'. This
+sometimes caused random heap data to be added to the output string
+until another null character is reached. A simple work-around
+without this fix is to use "%%" rather than "%". Fixes
+SourceForge bug 3580219 "strange results with '%' in Annotate()".</li>
+</ul>
+</blockquote>
+<p>2012-10-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c (MagickSetImagePage): New method to support
+setting the image page size and offsets.
+(MagickGetImagePage): New method to support getting image page
+size and offsets.</li>
+</ul>
+</blockquote>
+<p>2012-10-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Report fatal error if doing modules build and
+libltdl is not found.</li>
+</ul>
+</blockquote>
+<p>2012-10-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ltdl: Libltdl is no longer bundled. Libltdl must be previously
+installed on the system in order to build the modules
+configuration.</li>
+</ul>
+</blockquote>
+<p>2012-10-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/index.rst: Update top index page for 1.3.17 release.</li>
+<li>NEWS.txt: Update NEWS for 1.3.17 release.</li>
+<li>version.sh: Update shared library versioning for 1.3.17 release.</li>
+<li>coders/jnx.c: Fix format string compilation warnings. Remove
+MS-DOS line terminations.</li>
+<li>configure.ac: Module loading is now only supported by the
+modules build and not just because shared libraries are enabled.
+This means that libltdl is only depended upon by the modules
+build. Sometime in the future, libltdl will no longer be bundled
+in the GraphicsMagick source tree.</li>
+</ul>
+</blockquote>
+<p>2012-10-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac (LTDL_INIT): Request installable libltdl rather
+than convenience.</li>
+</ul>
+</blockquote>
+<p>2012-10-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c: Support alpha channel in uncompressed 32-bit BMP.
+Resolves SourceForge issue 3566239 "Can't open BMP with alpha
+created by photoshop".</li>
+</ul>
+</blockquote>
+<p>2012-10-07 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>dcraw/dcraw.c: Fixed situation when M_PI is not defined.</li>
+</ul>
+</blockquote>
+<p>2012-10-07 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jnx.c: Add image attribute with geolocation.</li>
+</ul>
+</blockquote>
+<p>2012-10-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>dcraw: VisualMagick configure fixes to support linking with JPEG
+and JPEG2000.</li>
+</ul>
+</blockquote>
+<p>2012-09-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>dcraw: Add dcraw to VisualMagick build.</li>
+<li>libxml: Update libxml2 to 2.9.0 release.</li>
+</ul>
+</blockquote>
+<p>2012-09-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tiff: Update libtiff to 4.0.3 release.</li>
+<li>lcms: Update liblcms2 to 2.4 release.</li>
+<li>png: Update libpng to 1.5.13 release.</li>
+</ul>
+</blockquote>
+<p>2012-09-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am: Update to Automake 1.12.4.</li>
+</ul>
+</blockquote>
+<p>2012-09-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc: Fix Debian bug 687738 "graphicsmagick:
+repeated words suitable for suitable for in gm manpage" reported
+by Jonas Smedegaard.</li>
+</ul>
+</blockquote>
+<p>2012-09-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update with news since last release.</li>
+<li>configure.ac: Added the configure option
+--enable-quantum-library-names to enable that shared library name
+includes quantum depth to allow shared libraries with different
+quantum depths to co-exist in same directory (only one can be used
+for development).</li>
+</ul>
+</blockquote>
+<p>2012-09-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (AdaptiveThresholdImage): New implementation
+contributed by Roberto de Deus Barbosa Murta. Executes in linear
+time as threhold area is increased rather than being quadratic.</li>
+</ul>
+</blockquote>
+<p>2012-09-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c: Fix improper injection of XML headers as rendered
+text.</li>
+<li>magick/render.c (DrawImage): Fix SourceForge issue 3499164
+"Drawing of text fails if text starts with "," character". Fix
+SourceForge issue 3411492 "Certain SVGs hang GraphicsMagick". Fix
+SourceForge issue 1961000 "Could not print ',' via convert draw
+text".</li>
+</ul>
+</blockquote>
+<p>2012-09-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wmf.c (lite_font_stringwidth): Simply return zero.
+Returning a computed string width was causing text placement
+problems when testing with libwmf's fulltest.wmf.</li>
+</ul>
+</blockquote>
+<p>2012-08-31 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simplesystems.org">glennrp<span>@</span>simplesystems<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: ReadOnePNGImage: sub-8-bit palette images were
+getting unpacked twice; once by libpng via png_set_packing()
+and again by coders/png.c in a switch() statement around line 2500,
+resulting in horizontally stretched pixels.</li>
+</ul>
+</blockquote>
+<p>2012-08-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am (AUTOMAKE_OPTIONS): Include lzip as a distribution
+format again.</li>
+</ul>
+</blockquote>
+<p>2012-08-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: BrowseDelegate now defaults to 'xdg-open', but if
+it is not found, then configure will search for firefox,
+google-chrome, mozilla (in that order).</li>
+</ul>
+</blockquote>
+<p>2012-08-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: For testing on MinGW, assume that Postscript is
+available since we don't have a good way to check for that.</li>
+<li>scripts/tap-functions.shi (test_count): Always execute the test
+program rather than skipping execution since we want to make sure
+the test program fails correctly as well.</li>
+<li>coders/gif.c (DecodeImage): Add a log message for attempted LZW
+string data table overflow.</li>
+</ul>
+</blockquote>
+<p>2012-08-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (ConvolveImage): Allocate normalized convolution
+kernel using cache-line aligned memory allocator.</li>
+<li>configure.ac: Remove support for legacy LZWDecodeDelegate and
+LZWEncodeDelegate since these are not used any more.</li>
+</ul>
+</blockquote>
+<p>2012-08-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>scripts/tap-functions.shi: If a test declares that it needs
+certain features, skip the test if required features are not
+available.</li>
+<li>configure.ac: Build a supported features list and save to
+common.shi script for use by test scripts.</li>
+<li>Makefile.am (LOG_COMPILER): Run Bourne-shell based TAP scripts
+with the same shell $(SHELL) that configure selected for the
+Makefile to use.</li>
+</ul>
+</blockquote>
+<p>2012-08-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am (AUTOMAKE_OPTIONS): Update to Automake 1.12.3.
+Update test suite to use Automake TAP driver rather than legacy
+tests.</li>
+</ul>
+</blockquote>
+<p>2012-08-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jnx.c (ExtractTileJPG): Add a trace of tile offset and size.</li>
+</ul>
+</blockquote>
+<p>2012-08-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jnx.c (ExtractTileJPG): Use a memory buffer for the JPEG
+tile rather than a temporary file.</li>
+</ul>
+</blockquote>
+<p>2012-08-12 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+* PerlMagick/t/input_jnx.jnx: Small JNX test file.</blockquote>
+<p>2012-08-11 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jnx.c: speedup.</li>
+</ul>
+</blockquote>
+<p>2012-08-10 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jnx.c: changed malloc/free to MagickMalloc/MagickFree.</li>
+</ul>
+</blockquote>
+<p>2012-08-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jnx.c (ReadJNXImage): Add progress monitor support for
+JNX.</li>
+</ul>
+</blockquote>
+<p>2012-08-06 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jnx.c: Image cache is turned off to work-around memory
+overflow.</li>
+</ul>
+</blockquote>
+<p>2012-08-05 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jnx.c: Fixed.</li>
+</ul>
+</blockquote>
+<p>2012-08-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jnx.c: Add JNX coder for "Garmin proprietary Image
+Format" (implementation by Jaroslav Fojtik) to the build. Code is
+not yet working properly at this time.</li>
+</ul>
+</blockquote>
+<p>2012-08-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Remove use of -Wl,-zlazyload under Solaris since
+it seems to decrease the stability of C++ exceptions in x86-64
+build and does not measurably improve runtimes. Don't force use
+of liblzma because libtiff is used. User should always have
+control.</li>
+</ul>
+</blockquote>
+<p>2012-07-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/memory.c (MagickMallocAligned): Use RoundUpToAlignment()
+macro to compute aligned pointer.</li>
+<li>magick/effect.c (EnhanceImage): Eliminate use of ugly Enhance
+macro. Only filter based on color channels (ignore opacity).</li>
+</ul>
+</blockquote>
+<p>2012-07-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/studio.h (MAGICK_CACHE_LINE_SIZE): Assume a cache line
+size of 64 bytes except for on PowerPC which uses 128.</li>
+<li>magick/pixel_cache.c: Use aligned memory allocator to allocate
+structures and buffers which might suffer from false cache line
+sharing</li>
+<li>magick/memory.c (MagickMallocAligned): Also round up allocation
+size to alignment.</li>
+</ul>
+</blockquote>
+<p>2012-07-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c, magick/random.c, magick/semaphore.c: Use
+aligned memory allocator to align allocations which should be
+aligned to cache line boundary.</li>
+</ul>
+</blockquote>
+<p>2012-07-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/memory.h (MagickAllocateAlignedMemory): New macro to
+allocate aligned memory.
+(MagickFreeAlignedMemory): New macro to free aligned memory.</li>
+<li>magick/memory.c (MagickMallocAligned): New internal function to
+allocate aligned memory.
+(MagickFreeAligned): New internal function to free aligned memory.</li>
+</ul>
+</blockquote>
+<p>2012-07-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/common.h (MAGICK_ASSUME_ALIGNED): Add some GCC attribute
+wrappers for useful features added by GCC 4.7.</li>
+</ul>
+</blockquote>
+<p>2012-07-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/gif.c (ReadGIFImage): Try to be better about reporting
+failure when ReadBlob() fails to return the requested number of
+bytes.</li>
+</ul>
+</blockquote>
+<p>2012-06-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/benchmarks.rst: Strip the outdated benchmark results from
+the benchmarks page.</li>
+<li>magick/command.c (ImportImageCommand): Status returned from the
+command was inverted.</li>
+</ul>
+</blockquote>
+<p>2012-06-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Release GraphicsMagick 1.3.16</li>
+</ul>
+</blockquote>
+<p>2012-06-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImage): -units was adjusting existing
+resolution the wrong way around.</li>
+</ul>
+</blockquote>
+<p>2012-06-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>jpeg: Updated to IJG 8d release.</li>
+<li>libxml: Updated libxml to 2.8.0 release.</li>
+<li>zlib: Updated zlib to 1.2.7 release.</li>
+<li>magick/blob.c (MagickFileHandle): Refer to stdio, bzip2, and
+gzip file handles using their own type. Eliminates warnings
+observed when compiling with zlib 1.2.7.</li>
+<li>tiff: Updated libtiff to 4.0.2 release.</li>
+<li>png: Updated libpng to 1.5.11 release.</li>
+</ul>
+</blockquote>
+<p>2012-06-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Fix typo which caused the --without-lzma option to
+be handled incorrectly. Resolves SourceForge issue 3535309
+"graphicsmagick from 1.3.13 to 1.3.15 has broken lzma support".</li>
+</ul>
+</blockquote>
+<p>2012-06-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/rwfile.c (main): Verify that we can 'ping' the file using
+PingImage(). Tests for some formats may take longer to complete.</li>
+<li>tests/rwblob.c (main): Verify that we can 'ping' the blob using
+PingBlob(). Tests for some formats may take longer to complete.</li>
+<li>coders/xbm.c (ReadXBMImage): Fix memory leak of temporary X
+bitmap image allocation encountered when reading in 'ping' mode.</li>
+<li>magick/blob.c (PingBlob): Re-write to be based on BlobToImage()
+so that it works reliably.
+(BlobToImage): Restore original input file name to image if
+temporary file was used so that image 'filename' and
+'magick_filename' do not contain unexpected content due to using a
+temporary file.</li>
+</ul>
+</blockquote>
+<p>2012-06-07 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simplesystems.org">glennrp<span>@</span>simplesystems<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Disable new libpng-1.5.10 test for invalid palette
+index when reading a PNG or MNG (for speed), or when writing a MNG
+(because a zero-length PLTE is valid in a MNG).</li>
+</ul>
+</blockquote>
+<p>2012-06-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (SetImageAttribute): Don't translate
+'comment' and 'label' attributes if the request is made while a
+file is being read. This is a temporary workaround until there is
+opportunity to modify the architecture so that there is a clear
+split between user-provided settings and values obtained from the
+input image.</li>
+<li>magick/blob.c (GetBlobIsOpen): New function to return if blob is
+currently open.</li>
+</ul>
+</blockquote>
+<p>2012-06-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/typemap: Add typemap file needed by Perl 5.16.
+Resolves SourceForge issue 3531512 "PerlMagick does not build with
+perl 5.16".</li>
+</ul>
+</blockquote>
+<p>2012-05-29 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simplesystems.org">glennrp<span>@</span>simplesystems<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Ignore APNG chunks even if we are using a libpng
+that was built with the "APNG patch".</li>
+</ul>
+</blockquote>
+<p>2012-05-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (ConvertImageCommand): +repage does not require
+an argument. Resolves SourceForge issue 3529158 "+repage option
+not respected with convert command".</li>
+<li>configure: Update to Autoconf 2.69.</li>
+<li>magick/effect.c (MotionBlurImage): Motion blur does scale so
+remove DisableSlowOpenMP for it.</li>
+<li>magick/command.c (BenchmarkImageCommand): Remove parenthesis
+from output, and change "iter/sec cpu" to "iter/cpu" to ease
+parsing.</li>
+<li>magick/pixel_cache.c (GetPixelCacheInCore): Consider read-only
+memory-mapped cache as being "in-core". Otherwise MPC input files
+are penalized.</li>
+</ul>
+</blockquote>
+<p>2012-05-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/api.h: Include <sys/types.h> on POSIX systems in order to
+help assure that 'size_t' and 'ssize_t' are declared.</li>
+</ul>
+</blockquote>
+<p>2012-05-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick_config_api.h.in: Need to provide definitions for
+'size_t' and 'ssize_t' in case the system headers lack these types
+because the definition of MagickExtentImage() requires them. This
+should resolve PHP bug #62034 "gmagick does not compile".</li>
+</ul>
+</blockquote>
+<p>2012-05-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_iterator.c (GetRegionThreads): Don't thread region
+if it is not memory-based.</li>
+</ul>
+</blockquote>
+<p>2012-05-09 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simplesystems.org">glennrp<span>@</span>simplesystems<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOnePNGImage): make transparent_color elements
+unsigned long instead of unsigned short, so 65537 is actually out of
+range as expected, and won't match any pixel if no tRNS chunk is
+present.</li>
+</ul>
+</blockquote>
+<p>2012-05-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sfw.c (ReadSFWImage): Reader needs to be more robust
+against corrupt or maligned headers. Resolves SourceForge issue
+"sfw file crash".</li>
+</ul>
+</blockquote>
+<p>2012-05-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdf.c (WritePDFImage): Add file basename as the PDF
+document title. Resolves SourceForge bug ID 2835140
+"GraphicsMagick fails to add title attribute to PDF output".</li>
+<li>coders/sfw.c (ReadSFWImage): Restore original filename and
+format.</li>
+<li>PerlMagick/t/jpeg/read.t: Add a test for reading Seattle
+FilmWorks format based on the sample image from
+<a class="reference external" href="http://www.algonet.se/~cyren/sfw/">http://www.algonet.se/~cyren/sfw/</a>. Image was approved for
+distribution in GraphicsMagick by Bengt Cyrén.</li>
+<li>magick/analyze.c (GetImageBoundingBox): Only apply opacity-based
+bounding box detection if all three test points are non-opaque and
+the same value. Resolves SourceForge bug ID 3522804 "convert
+-trim fails on 8-bit PNG that ImageMagick can trim".</li>
+<li>coders/sfw.c (ReadSFWImage): Fix variety of bugs related to
+closing Image and blob at wrong points. SFW reader is working
+again. Resolves SourceForge bug ID 523430 "sfw file open failed".</li>
+</ul>
+</blockquote>
+<p>2012-05-01 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Animated movies inside 4D matrices are loaded now.</li>
+</ul>
+</blockquote>
+<p>2012-04-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_iterator.c: Limit the number of threads to use in
+the loop rather than the total number of threads available.</li>
+</ul>
+</blockquote>
+<p>2012-04-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Release GraphicsMagick 1.3.15</li>
+</ul>
+</blockquote>
+<p>2012-04-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageInfo): Remove automatic adjoin mode
+support logic.
+(AddDefinition): Fix use of uninitialized variable.</li>
+</ul>
+</blockquote>
+<p>2012-04-23 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simplesystems.org">glennrp<span>@</span>simplesystems<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/*.imdoc: some example commandlines in the documentation
+were missing the leading "gm ".</li>
+</ul>
+</blockquote>
+<p>2012-04-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (FormMultiPartFilename): No longer add a
+printf-style scene formatting specification to filenames which do
+not have one and no longer automatically operate in 'adjoin' mode
+in such cases. This is a BIG CHANGE for users who may have become
+used to this automatic functionality. The simple solution to
+update existing scripts depending on this behavior is to change
+any bare filenames to include a format specification similar to
+"image-%d.jpg" and add +adjoin to the command line. The reason
+why this change is made is that the output files produced by any
+given operation were unpredictable, and it was causing temporary
+files to be leaked due to the renaming.</li>
+</ul>
+</blockquote>
+<p>2012-04-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (WriteBMPImage): Enforce that image width and
+height do not exceed BMP dimensions. BMP dimensions are
+represented by a signed type. BMPv2 supports maximum dimensions
+of 32k by 32k.</li>
+</ul>
+</blockquote>
+<p>2012-04-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/info.c (WriteINFOImage): When driven by the 'convert'
+utility, -format produces user-controlled formatted output similar
+to -format in 'identify'. This is accomplished via a
+'<a class="reference external" href="info:format=value">info:format=value</a>' define.</li>
+<li>magick/image.c (AddDefinition): New function for adding just one
+define to definitions list.</li>
+</ul>
+</blockquote>
+<p>2012-04-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pnm.c (ReadPNMImage): Completely disable OpenMP in reader
+because there is too much contention.</li>
+<li>magick/pixel_iterator.c: Dereference image to be modified in
+non-threaded context in order to lessen contention.</li>
+<li>magick/semaphore.c (AllocateSemaphoreInfo): Make sure that
+SemaphoreInfo does not share cache lines with another semaphore.</li>
+</ul>
+</blockquote>
+<p>2012-04-11 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simplesystems.org">glennrp<span>@</span>simplesystems<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: fixed problem with bit depth when the encoder
+decides to write RGBA instead of indexed PNG, by delaying the
+call to png_set_tRNS() until after calling png_set_IHDR().</li>
+</ul>
+</blockquote>
+<p>2012-03-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>png: Update bundled libpng to 1.5.10 release. Provides security
+fix for CVE-2011-3048.</li>
+<li>wand/magick_compat.c (ParseGeometry): Use strlcpy() rather than
+strncpy().
+(CopyMagickString): Depend on strlcpy() because we provide it if
+it is missing.
+(ConcatenateMagickString): Depend on strlcat().</li>
+<li>coders/xcf.c (ReadXCFImage): Now respects image subimage and
+subrange members so that returned image layers may be selected.
+Based on patch from SourceForge issue 3513025 "XCF reads all
+layers all the time".</li>
+<li>magick/resize.c (ThumbnailImage): Thumbnail default filter is
+intended to be the box filter, but allow the user to override the
+filter used. Resolves SourceForge issue 3513239 "-filter command
+line argument ignored".</li>
+</ul>
+</blockquote>
+<p>2012-03-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (ConvertImageCommand, MogrifyImageCommand):
+Added support for '+noise random' and '-operator noise-random' to
+'convert' and 'mogrify'.</li>
+<li>magick/effect.c (AddNoiseImage): Added support for RandomNoise.
+(AddNoiseImageChannel): Added support for RandomNoise.</li>
+<li>magick/enum_strings.c (StringToNoiseType): New function to
+convert a string to a NoiseType enumeration value.
+(NoiseTypeToString): New function to convert a NoiseType
+enumeration value into a string.</li>
+<li>PerlMagick/Magick.xs: Added support for RandomNoise.</li>
+<li>magick/operator.c (QuantumOperatorRegionImage): Added support for
+RandomNoise.</li>
+<li>magick/effect.c (AddNoiseImageChannel): Added support for
+RandomNoise.</li>
+<li>magick/gem.c (GenerateDifferentialNoise): Added support for
+RandomNoise.</li>
+<li>magick/random.h (MagickRandomRealInlined): The span of
+MagickRandomRealInlined() is now slightly more accurate.</li>
+<li>magick/image.h (enum NoiseType): New enumeration value RandomNoise.</li>
+</ul>
+</blockquote>
+<p>2012-03-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImage): Add support for -repage option
+to composite, convert, mogrify, and montage subcommands. Resets
+or adjusts the current image page offsets based on a provided
+geometry specification.</li>
+<li>magick/image.c (ResetImagePage): Add a function to adjust the
+current image page canvas and position based on a relative page
+specification.</li>
+</ul>
+</blockquote>
+<p>2012-03-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImage): Add support for -strip option
+to composite, convert, mogrify, and montage subcommands. Removes
+all profiles and text attributes from the image.</li>
+<li>magick/image.c (StripImage): New function to remove all profiles
+and text attributes from the image.</li>
+</ul>
+</blockquote>
+<p>2012-02-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Release GraphicsMagick 1.3.14.</li>
+<li>NEWS.txt: Updated to describe updates since last release.</li>
+</ul>
+</blockquote>
+<p>2012-02-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Downgrade to Automake 1.11.2 so that test suite can run on
+systems with limited command line length. This means that lzip
+support is temporarily removed.</li>
+<li>magick/resize.c (ResizeImage): Resize filter argument was being
+ignored. Filter from image 'filter' member was used instead.
+Problem was reported by Steven Bakhtiari.</li>
+</ul>
+</blockquote>
+<p>2012-02-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tiff: Update bundled libtiff to 4.0.1 release.</li>
+<li>png: Update bundled libpng to 1.5.9 release.</li>
+<li>magick/memory.h: Decorate memory allocation functions with GCC
+attribute 'alloc_size'.</li>
+<li>magick/common.h: Add support for GCC 4.3+ attributes
+'alloc_size', 'hot', 'cold'.</li>
+<li>magick/{log.h,monitor.h,utility.h}: Use double-underscore syntax
+in GCC format attribute specifications to defend against
+accidental macro expansion.</li>
+</ul>
+</blockquote>
+<p>2012-02-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xcf.c (ReadXCFImage): Fix reading XCF which is comprised
+of different sized layers.</li>
+</ul>
+</blockquote>
+<p>2012-02-08 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simplesystems.org">glennrp<span>@</span>simplesystems<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/txt.c: Added "-define txt:with-im-header" option.</li>
+</ul>
+</blockquote>
+<p>2012-02-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>png: Updated to libpng 1.5.8 release</li>
+<li>zlib: Updated to zlib 1.2.6 release</li>
+</ul>
+</blockquote>
+<p>2012-02-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am (AUTOMAKE_OPTIONS): Update to Automake 1.11.3. Add
+lzip compressed archive to options.</li>
+</ul>
+</blockquote>
+<p>2012-01-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcraw.c (RegisterDCRAWImage): Add support for Mamiya
+Photo RAW "MEF" format. Resolves SourceForge issue #3481508
+"*.MEF file open incorrect".</li>
+</ul>
+</blockquote>
+<p>2012-01-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (WriteJPEGImage): Convert RGB-compatible
+colorspaces (e.g. CineonLog) to RGB by default since that was the
+case prior to release 1.3.13. User can still override it
+(avoiding removal of log encoding) by explicitly specifying the
+desired colorspace. Problem was reported by Gary Margiotta.</li>
+</ul>
+</blockquote>
+<p>2012-01-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): When reading, save input file
+endianness so that the endianness of the original file is
+preserved by default. The user is able to override this default
+via -endian. Problem was reported by JongAm Park.</li>
+</ul>
+</blockquote>
+<p>2012-01-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/OpenMP.rst: Updated OpenMP results based on latest OpenMP
+tunings and the Intel Xeon E5649 CPU.</li>
+</ul>
+</blockquote>
+<p>2012-01-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcraw.c (ReadDCRAWImage): Fix memory leak of ImageInfo.
+Resolves SourceForge bug #3475148 "memery leaks".</li>
+<li>magick/module.c (ModuleAliases): EMF format is supported by EMF
+module and so mapping EMF to the WMF module caused EMF not to
+work. Resolves SourceForge bug #3475147 "emf files can not be
+opened". Note that the EMF module only works for Microsoft
+Windows.</li>
+</ul>
+</blockquote>
+<p>2012-01-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/gem.c (Hull): Improve performance.</li>
+<li>magick/effect.c (DespeckleImage): Improve performance.</li>
+</ul>
+</blockquote>
+<p>2012-01-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/effect.c (DespeckleImage): Using schedule(static,4)
+blocks any opportunity for speedup. This was a performance
+regression. Oops!</li>
+</ul>
+</blockquote>
+<p>2012-01-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c (MagickExtentImage): Added
+MagickExtentImage() to Wand API. Resolves SourceForge issue
+#3471915 "MagickExtentImage in the Wand C API".</li>
+</ul>
+</blockquote>
+<p>2012-01-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/export.c (ExportViewPixelArea): Break up implementation
+into subroutines to ease compilation.</li>
+</ul>
+</blockquote>
+<p>2012-01-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/import.c (ImportViewPixelArea): Break up implementation
+into subroutines to ease compilation.</li>
+</ul>
+</blockquote>
+<p>2012-01-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/studio.h: Use Magick prefixed macro names for ftruncate,
+mmap, and munmap in order to assure that introducing our macros
+does not cause trouble with system headers.</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>ChangeLog-2013.rst</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2013-12-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh: Update for 1.3.19 release.</li>
+<li>www/index.rst: Update for 1.3.19 release.</li>
+<li>NEWS.txt: Update for 1.3.19 release.</li>
+<li>magick/blob.c (GetBlobTemporary): Add assertions to assure that
+image and blob are valid structures.</li>
+<li>coders/png.c (ReadOnePNGImage): Fix problem peculiar to Q8 build
+with reading 1-bit PNG files.</li>
+<li>PerlMagick/t/png/(write-16.t, read.t, write-16.t, write.t):
+Update expected signatures</li>
+<li>coders/xpm.c (WriteXPMImage): Limit XPM color resolution to what
+XPM can traditionally handle.</li>
+<li>magick/enhance.c (GammaImage): Eliminate a compiler warning.</li>
+<li>coders/png.c (ReadOnePNGImage): Eliminate a compiler warning.</li>
+<li>coders/pcl.c (WritePCLImage): Eliminate a compiler warning.</li>
+</ul>
+</blockquote>
+<p>2013-12-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/delegate.c (InvokePostscriptDelegate): Log return status.</li>
+<li>magick/nt_base.c (NTGhostscriptFonts): For Microsoft Windows,
+also search c:gsfonts for Ghostscript font files.</li>
+<li>coders/ept.c (ReadEPTImage): Fix crash observed when Ghostscript
+fails to produce output.</li>
+</ul>
+</blockquote>
+<p>2013-12-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/annotate.c: Simplify FreeType2 header inclusion.</li>
+<li>configure.ac: Only test for freetype/freetype.h if ft2build.h
+was not found.</li>
+</ul>
+</blockquote>
+<p>2013-12-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ttf: Update FreeType to release 2.5.2.</li>
+<li>Updated build to use Automake 1.14.1.</li>
+</ul>
+</blockquote>
+<p>2013-12-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>libxml: Update libxml2 to release 2.9.1.</li>
+</ul>
+</blockquote>
+<p>2013-12-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lcms/include/lcms2.h: Update lcms to release 2.5.</li>
+<li>png/README: Update PNG library to release 1.6.8.</li>
+<li>jpeg: Update Windows IJG JPEG library to release 9.</li>
+</ul>
+</blockquote>
+<p>2013-12-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/alpha_composite.h (BlendCompositePixel): Fix from Troy
+Patteson to eliminate induced color problems when compositing two
+images which include fully transparent pixels. Now fully
+transparent pixels do not contribute any color to the composed
+result. Opacity used when blending is now based on the average
+opacity of both pixels. Resolves SourceForge issue #148 "Pixel
+interpolation problem with rotated transparent images ".</li>
+</ul>
+</blockquote>
+<p>2013-12-18 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOnePNGImage): Properly scale 16-bit input
+PNG down to 8-bit when using a Q8 build.</li>
+</ul>
+</blockquote>
+<p>2013-12-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/demo/piddle.cpp (main): Use DrawableDashArray to make
+sure that it works.</li>
+<li>wand/drawing_wand.c (DrawSetStrokeDashArray): Fix defective
+stroke-dasharray MVG generation. Resolves SourceForge issue "#255
+DrawSetStrokeDashArray still fails".</li>
+<li>magick/draw.c (DrawSetStrokeDashArray): Fix defective
+stroke-dasharray MVG generation.</li>
+</ul>
+</blockquote>
+<p>2013-12-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c: Add value scaling changes which will be necessary
+to support all the build depths supported by IJG JPEG 9a.</li>
+<li>coders/webp.c (ReadWEBPImage): Support 'ping'. Improve quality
+of error reporting.</li>
+<li>GraphicsMagick.spec.in: Update RPM spec file to add
+libwebp-devel as a build dependency, and libwebp as a run-time
+depdendency.</li>
+</ul>
+</blockquote>
+<p>2013-12-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/webp.c: Incorporated simple WebP support as contributed
+by "TIMEBUG" at users.sf.net plus a few security changes. Does not
+yet support Windows Visual Studio build, input from a pipe,
+attached profiles, animation, or incremental pixel I/O.
+(RegisterWEBPImage): Register WebP as requiring seekable stream so
+input from pipe works.</li>
+</ul>
+</blockquote>
+<p>2013-11-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/drawing_wand.c (DrawSetStrokeDashArray): Use array size
+specified by user and don't expect user-provided array to be
+terminated by 0.0. Resolves SourceForge bug "#250 Unexpected
+results from DrawSetStrokeDashArray".</li>
+<li>magick/draw.c (DrawSetStrokeDashArray): Use array size specified
+by user and don't expect user-provided array to be terminated by
+0.0.</li>
+<li>wand/drawing_wand.c (DrawGetStrokeDashArray): terminating 0.0 to
+array returned to user.</li>
+<li>magick/draw.c (DrawGetStrokeDashArray): Add terminating 0.0 to
+array returned to user.</li>
+</ul>
+</blockquote>
+<p>2013-11-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/annotate.c (RenderFreetype): Support rendering UTF-8
+21-bit code points. Was limited to 16-bit code points due to an
+oversight/bug. Resolves SourceForge bug "#149 Rendering UTF-8
+encoded file displays wrong glyphs".</li>
+</ul>
+</blockquote>
+<p>2013-11-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (ReadImage): Consistently initialize Image
+page width and height to image width and height. Resolves
+SourceForge bug #253 convert pdf output page is the wrong size
+with -geometry "100%".</li>
+</ul>
+</blockquote>
+<p>2013-11-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): TIFFDefaultStripSize() sometimes
+returns zero so make sure that rows-per-strip is at least one to
+avoid divide by zero error. This bug was added in the current
+development cycle.</li>
+</ul>
+</blockquote>
+<p>2013-10-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update news since last release.</li>
+<li>magick/annotate.c (RenderFreetype): Support Johab, Latin-1, and
+Latin-2 encodings.</li>
+</ul>
+</blockquote>
+<p>2013-10-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/drawing_wand.c (DrawSetStrokeLineJoin): BevelJoin should
+produce MVG text "bevel".</li>
+<li>magick/draw.c (DrawSetStrokeLineJoin): BevelJoin should produce
+MVG text "bevel". Fixes SourceForge bug "#245 error occured to
+DrawableStrokeLineJoin(LineJoin.BevelJoin)".</li>
+</ul>
+</blockquote>
+<p>2013-10-16 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added calls to png_set_benign_errors() to allow benign errors
+to be handled as warnings. In particular, GM builds with libpng-1.6.x
+will not crash while copying a PNG with a "known incorrect ICC
+profile".</li>
+</ul>
+</blockquote>
+<p>2013-10-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c (NTGhostscriptEXE): Use gswin64c.exe as
+Ghostscript executable name in a 64-bit application.</li>
+</ul>
+</blockquote>
+<p>2013-10-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c (NTGhostscriptFind): 64-bit application should
+not search for Ghostscript in 32-bit registry. SourceForge bug
+#243 "GM on Windows will find Ghostscript only if both are 32 bit"</li>
+</ul>
+</blockquote>
+<p>2013-09-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pnm.c: As an extension to the standard PNM and PAM
+formats, support writing 32-bit sample depth in the Q32 build, and
+supporting reading 32-bit sample depth in all builds.</li>
+</ul>
+</blockquote>
+<p>2013-09-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c: Allow reading signed integer TIFF files even
+though internal storage uses signed integers. Negative values
+will be handled incorrectly and positive values will be scaled to
+only 1/2 of the available unsigned range. Perhaps the situation
+will improve in the future.</li>
+<li>tests/rwfile_miff.tap: Test MIFF with specific depths.</li>
+<li>tests/rwblob.c: Add support for -quality option.</li>
+<li>tests/rwfile.c: Add support for -quality option.</li>
+<li>tests/rwfile.tap: Add tests for PGM and PPM ASCII subformats.</li>
+<li>coders/pnm.c (WritePNMImage): PGM "P2" format writer was broken
+at 8-bit depth due to lack of white-space between the output
+values. Fixed now.</li>
+</ul>
+</blockquote>
+<p>2013-09-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (ReadMIFFImage): Fixes to be able to read MIFF
+written by ImageMagick 6.X, including DirectClass grayscale
+images. Interoperabilty is not completely assured since
+ImageMagick is not consistent with itself and may only be able to
+read the file it just wrote. Reading DirectClass grayscale RLE
+compressed images is not supported yet.</li>
+</ul>
+</blockquote>
+<p>2013-09-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/profile.c (MagickFreeCMSTransform): Only delete the CMS
+transform if it is non-null. If lcms returned a null transform,
+an assertion was thrown in lcms when the pointer was freed.
+Problem was reported by James Bardin.</li>
+</ul>
+</blockquote>
+<p>2013-09-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c: PseudoClass format was written incorrectly in
+that sample storage size is supposed to be selected based on the
+size of the colormap, but it was being selected based on the depth
+parameter instead, leading to excessively sized files and failure
+to read what was written. RLE compressed formats had the sense of
+the alpha channel inverted from the other compression methods, and
+contrary to the specification. PseudoClass with Alpha was not
+supported at all, and reading a file claiming to be such caused an
+assertion to be thrown. Note that these fixes may cause some
+existing files to no longer be read correctly.</li>
+<li>coders/xpm.c (ReadXPMImage): XPM is rarely used to produce
+16-bit output. Set image depth based on the colormap.</li>
+<li>coders/tim.c (ReadTIMImage): PSX TIM is not able to produce more
+than 8-bit output, set image depth appropriately.</li>
+</ul>
+</blockquote>
+<p>2013-09-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Increase rows-per-strip as
+required to try to avoid more than 32K strips per image since some
+programs seem to use a 16-bit strip counter and fail with more
+than 32K strips. Problem was reported by Kevin Myers.</li>
+<li>magick/transform.c (MosaicImages): Fix unsigned underflow
+problem with -mosaic when page offset is negative and exceeds
+image width or height. This problem caused assertions, out of
+memory errors, or pixel cache limit errors due to requesting an
+image of outrageous size.</li>
+</ul>
+</blockquote>
+<dl class="docutils">
+<dt>2013-08-26 Jaroslav Fojtik <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></dt>
+<dd>* dcrawdcraw.c Updated from autor
+* dcrawdcraw.c.patch</dd>
+</dl>
+<p>2013-08-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pnm.c (ReadPNMImage): Fix SourceForge issue #237
+"Incorrect MAXVAL scaling when reading PAM images".</li>
+</ul>
+</blockquote>
+<p>2013-08-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Improve error handling so that
+rendering bails on image access/update errors. Resolves
+SourceForge issues #233 "Another SVG that hangs GraphicsMagick"
+and #232 "Another SVG that hangs GraphicsMagick". The resolution
+of the bug is to return from image access/update error right away
+rather than adjusting the rendering density to produce a smaller
+image.</li>
+<li>magick/error.h: Hide exception throwing convenience macros under
+MAGICK_IMPLEMENTATION definition.</li>
+<li>Magick++/demo/demos.tap: Fix file naming for 'zoom' demos.</li>
+<li>magick/annotate.c (RenderFreetype): Improve error handling so
+that rendering bails on image access/update errors.</li>
+</ul>
+</blockquote>
+<p>2013-08-02 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOnePNGImage): ping a png faster by
+returning the image without reading the pixel data.</li>
+</ul>
+</blockquote>
+<p>2013-07-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/xwindow.c (MagickXMakeImage): Only use ThumbnailImage()
+for DirectClass images in order to avoid a crash while creating
+the panner image.</li>
+</ul>
+</blockquote>
+<p>2013-04-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>design/pixel-cache-struct.dot: Update structure relationships
+diagram.</li>
+<li>design/pixel-cache.dot: Update call flow diagram.</li>
+<li>magick/pixel_cache.c: Eliminate use of internal functions
+GetNexusIndexes(), GetNexusPixels(). Reduce usage of internal
+function IsNexusInCore().</li>
+</ul>
+</blockquote>
+<p>2013-04-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: MAGICK_SSIZE_T should always be a signed type.</li>
+<li>coders/jpeg.c (WriteXMPProfile): Add support for writing 'XMP'
+profile in JPEG.
+(WriteJPEGImage): Restructure/tidy JPEG profile writing code.</li>
+</ul>
+</blockquote>
+<p>2013-04-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Return DirectClass images by
+default for MINISWHITE and MINISBLACK TIFF formats.</li>
+</ul>
+</blockquote>
+<p>2013-04-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c, magick/attribute.c, magick/map.c, magick/render.c,
+magick/widget.c, magick/xwindow.c: Fixes to reduce warnings with
+GCC 4.8.0 at -O3 optimimization level, and for clang 3.2.</li>
+</ul>
+</blockquote>
+<p>2013-04-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/xwindow.c (MagickXMakeImage): Use ThumbnailImage() rather
+than SampleImage() when creating the panner image to improve the
+quality of the image.</li>
+</ul>
+</blockquote>
+<p>2013-03-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (tag_table): Add support for SubjectArea EXIF
+tag. Resolves SourceForge issue #229 "Cannot Parse the
+SubjectArea EXIF Info".</li>
+</ul>
+</blockquote>
+<p>2013-03-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/Hg.rst, www/index.rst: Update SourceForge Mercurial
+repository location (see
+<a class="reference external" href="http://hg.code.sf.net/p/graphicsmagick/code">http://hg.code.sf.net/p/graphicsmagick/code</a>) due to project
+"upgrade". For the moment there are old and new
+repositories. Changes will be pushed to the new repository.</li>
+</ul>
+</blockquote>
+<p>2013-03-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resource.c (InitializeMagickResources): Revert use of
+omp_set_dynamic() since it caused a severe performance regression
+when doing a -stepthreads benchmark or when the number of OpenMP
+threads is set via OMP_NUM_THREADS.</li>
+</ul>
+</blockquote>
+<p>2013-03-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>INSTALL-unix.txt: Add a section about building Windows binaries
+by cross-compiling from a Unix/Linux system.</li>
+</ul>
+</blockquote>
+<p>2013-03-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac, magick/magick_types.h.in: Fix issues noticed when
+cross-compiling with MinGW64.</li>
+</ul>
+</blockquote>
+<p>2013-03-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh, www/index.rst: Prepare for 1.3.18 release.</li>
+</ul>
+</blockquote>
+<p>2013-03-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (DisplayImageCommand): display is supposed to
+respond to +/-usePixmap, but was not. It was responding to
++/-use_pixmap. Now it responds to both.</li>
+</ul>
+</blockquote>
+<p>2013-03-03 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/GraphicsMagick.imdoc: Relocated some <im> .. </im> tags, to
+include several paragraphs that were omitted from the
+GraphicsMagick man page (Environment, Configuration Files, and
+Copyright).</li>
+<li>doc/imdoc2man: the </pre> tag was being deleted instead of
+replaced with nothing, which caused the first line of the
+subsequent material to be joined to the last line of the <pre>
+block.</li>
+</ul>
+</blockquote>
+<p>2013-03-02 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOnePNGImage): Avoid a libpng16 warning about
+storing unknown chunks.</li>
+</ul>
+</blockquote>
+<p>2013-02-25 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WriteOnePNGImage): Call png_set_bKGD(), etc.,
+after png_set_IHDR() because they depend on members of info_ptr
+which are set by png_set_IHDR().</li>
+</ul>
+</blockquote>
+<p>2013-02-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resource.c (InitializeMagickResources): Enable the
+dynamic adjustment of OpenMP threads if there is more than one
+thread available.</li>
+</ul>
+</blockquote>
+<p>2013-02-18 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac and configure: Check for libpng17 and libpng16.</li>
+</ul>
+</blockquote>
+<p>2013-02-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/programming.rst: Add mention of Clement Farabet's Lua
+scripting language wrapper for GraphicsMagick.</li>
+</ul>
+</blockquote>
+<p>2013-02-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (GetCacheNexus): Re-write function so it
+has a single point of return.
+(AcquireCacheNexus): Reduce the number of return points.
+(SetCacheNexus): Re-write function so it has a single point of
+return.</li>
+</ul>
+</blockquote>
+<p>2013-02-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update with latest news.</li>
+<li>magick/export.c (ExportAlphaQuantumType): Fix export of alpha
+for RGBA image and depth 8. Due to typo, was exporting 16-bits
+rather than 8, causing output corruption or crashes. Resolves
+issue reported in SourceForge GraphicsMagick forum under title
+"CMYK per-channel byte order TIFF crashes gm".</li>
+</ul>
+</blockquote>
+<p>2013-02-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/studio.h (MagickIsBlank): Add macro to substitute for ISO
+C99 isblank() which is not globally available. Update 'gm batch'
+code which had substituted isspace() for isblank() to use it.</li>
+</ul>
+</blockquote>
+<p>2013-01-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (BatchCommand): Flush stdout at key points in
+order to ensure that user sees text when it is produced.</li>
+</ul>
+</blockquote>
+<p>2013-01-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/random.c (InitializeMagickRandomGenerator): Use
+MagickTsdKeyCreate2() in order to avoid a small memory leak.</li>
+<li>magick/tsd.c (MagickTsdKeyCreate2): New private function to
+support allocating a thread-specific data key with a specified
+destructor function. For single-threaded build, MagickTsdKey_t is
+now type void* and there is provision to support the destructor
+function.</li>
+</ul>
+</blockquote>
+<p>2013-01-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (BatchCommand): New 'gm batch' command to
+accept one or more GraphicsMagick commands from a specified text
+file, standard input, or CLI. Feature is implemented by Kenneth
+Xu. Submitted via SourceForge Patch #3602331 "Add interactive or
+batch mode support to 1.3.17".</li>
+</ul>
+</blockquote>
+<p>2013-01-27 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WriteOnePNGImage): Added PNG48 and PNG64 support.
+Added PNG00 support (png encoder that inherits its color-type and
+bit-depth from the input, if the input was a PNG datastream).</li>
+</ul>
+</blockquote>
+<p>2013-01-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WriteOnePNGImage): PNG8 support was using
+image->colors to decide if the input image is PseudoClass. This
+is totally bogus. Use image->storage_class to determine if image
+is PseudoClass and quantize image colors if it is not.</li>
+<li>magick/delegate.c (InvokePostscriptDelegate): Only invoke
+MagickSpawnVP() if Ghostscript filename argument is non-empty.
+This argument may be empty if Ghostscript is not found on a
+Windows system. Report a "Failed to find Ghostscript" error if
+the Ghostscript command name is empty. Resolves SourceForge issue
+#3601816 "Win64 build crashes trying to convert PDF to any other
+format".</li>
+<li>magick/utility.c (MagickSpawnVP): Verify that file argument is
+non-NULL and not empty.</li>
+</ul>
+</blockquote>
+<p>2013-01-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/tiff/LIBRARY.txt: Fix pre-processor definitions for
+libtiff so that they use multiple statements rather than one long
+statement. Resolves SourceForge issue 3601001 "libtiff won't
+compile with ICL".</li>
+</ul>
+</blockquote>
+<p>2013-01-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/memory.h (MagickAllocateAlignedArray): New macro to wrap
+use of MagickMallocAlignedArray().</li>
+<li>magick/memory.c (MagickMallocAlignedArray): New private function
+to support safe allocation of an array in memory with a specified
+alignment. Allocation may only be freed using MagickFreeAligned()
+and the allocation may not be reallocated.</li>
+</ul>
+</blockquote>
+<p>2013-01-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/{animate.c,display.c,utility.c}: Only invoke chdir() if
+path is not an empty string. Previously sometimes chdir() was
+passed an empty string (because chdir() was not needed) and this
+was ok because we ignored the error status. Now that we check the
+chdir() error status, some X11 GUI functions (e.g. save file to
+current directory) encounter annoying issues.</li>
+<li>magick/shear.c (IntegralRotateImage): Limit integral rotate to
+two threads.</li>
+<li>coders/pnm.c (ReadPNMImage): Limit PNM reader to two threads.</li>
+</ul>
+</blockquote>
+<p>2013-01-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac (MAGICK_FEATURES): MinGW static build does not
+build modules so MODULES feature should not be listed as
+supported. Resolves MinGW test failures.</li>
+<li>coders/dpx.c (OrientationTypeToDPXOrientation): Return U16 type
+as stored in DPX format.</li>
+<li>coders/cineon.c: Add support for reading/writing 'orientation'
+setting.</li>
+<li>coders/mpc.c: Add support for reading/writing 'orientation'
+setting.</li>
+<li>coders/miff.c: Add support for reading/writing 'orientation'
+setting.</li>
+<li>Rotate ChangeLog for 2012 and update web page copyright years.</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>ChangeLog-2014.rst</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2014-12-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c (UnpackWPGRaster): Fix some compilation and
+valgrind warnings.</li>
+<li>NEWS.txt: Updated news again.</li>
+</ul>
+</blockquote>
+<p>2014-12-31 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c Fixed 2bpp issue.</li>
+</ul>
+</blockquote>
+<p>2014-12-31 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Validate MHDR chunk length.</li>
+<li>coders/png.c: Use ReadBlob() once instead of ReadBlobByte()
+in a loop.</li>
+<li>coders/png.c: Avoid reading beyond the end of a tEXt keyword.</li>
+</ul>
+</blockquote>
+<p>2014-12-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xpm.c (ReadXPMImage): Detect short XPM rows and report
+error to user rather than overrunning a buffer.</li>
+<li>coders/pcx.c (ReadPCXImage): Validate that header bytes per line
+is sufficient to contain the indicated data.</li>
+<li>coders/pdb.c (ReadPDBImage): Fix indexes array overrun for 2 and
+4-bit PDB image files.</li>
+<li>coders/xpm.c (ReadXPMImage): Avoid strncpy() of overlapping
+memory. Fix memory leaks in error paths.</li>
+<li>coders/viff.c (ReadVIFFImage): Validate index before using it to
+access colormap.</li>
+<li>coders/{cineon.c, dpx.c} (StringToAttribute): Can't use
+strlcpy() to copy string which might not be NULL-terminated since
+strlcpy() continues searching for end of string after size bytes
+have been copied.</li>
+<li>coders/meta.c (convertHTMLcodes): Avoid strcpy() of overlapping
+memory.</li>
+</ul>
+</blockquote>
+<p>2014-12-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/process.rst: Update description of development process to be
+more aligned with the process actually used.</li>
+<li>coders/wpg.c (ReadWPGImage): Avoid use of NULL pointer returned
+from FlipImage(), FlopImage(), and RotateImage().</li>
+<li>coders/rle.c (ReadRLEImage): URT RLE reader is now more robust
+with errant files.</li>
+</ul>
+</blockquote>
+<p>2014-12-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>libtool: Update bundled libtool to version 2.4.4.</li>
+<li>magick/constitute.c (WriteImage): Remove bogus use of
+GetBlobStatus() as a catch-all for write errors. Coders should be
+detecting write errors all by themselves.</li>
+</ul>
+</blockquote>
+<p>2014-12-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Updated with more improvements since previous release.</li>
+<li>coders/palm.c (WritePALMImage): Log header details.</li>
+<li>coders/pdb.c: PDB reader and writer need to be more robust when
+calculating packets and buffer allocation. Also log header
+details. Problem was reported by Hanno Böck.</li>
+</ul>
+</blockquote>
+<p>2014-12-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Updated with more improvements since previous release.</li>
+<li>ttf: Update bundled Freetype to 2.5.4.</li>
+<li>png: Update bundled libpng to 1.6.16.</li>
+</ul>
+</blockquote>
+<p>2014-12-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): The libtiff JBIG coder only
+supports strip images, and fails when scanlines are requested.
+Force use of stripped read method when the file uses JBIG
+compression. It is still not possible to write JBIG compressed
+TIFF files since there is not yet a strip writer. Problem
+reported by Yuriy Kaminskiyon via the GM-bugs mailing list on
+2014-12-22.</li>
+</ul>
+</blockquote>
+<p>2014-12-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (QuantumTransferMode): Fix quantum transfer
+handling for photometrics which might deliver one or three samples
+per pixel. These were assuming that three samples were always
+provided.</li>
+</ul>
+</blockquote>
+<p>2014-12-21 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Impose a 10-million limit on dimensions
+when reading a PNG file.</li>
+</ul>
+</blockquote>
+<p>2014-12-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Updated with improvements since previous release.</li>
+</ul>
+</blockquote>
+<p>2014-12-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/statistics.c (GetImageStatistics): Failed to compute
+statistics for the Black channel of CMYK image files. Problem
+reported by Michael Below via Debian bug 773552:
+"graphicsmagick-imagemagick-compat: convert to cmyk leaves k
+channel empty".</li>
+</ul>
+</blockquote>
+<p>2014-12-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/delegate.c (InvokeDelegate): Windows spawnvp() splits
+arguments into more arguments. Add escaping to avoid the
+splitting. Resolves SourceForge bug #276 "dcraw 9.19 included
+with gm 1.3.20 doesn't support paths with spaces."</li>
+<li>magick/utility.c (TranslateTextEx): Fix regression added on
+2014-12-13 (yesterday) which caused output file name passed to
+delegate programs to be wrong.</li>
+<li>magick/annotate.c (RenderFreetype): Fix regression added in
+1.3.19 which caused spurious drawing errors to be produced while
+rendering with text when all of the text is off the left-hand side
+of the image.</li>
+</ul>
+</blockquote>
+<p>2014-12-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (CompareUsage): Options should be listed in
+alphabetical order.</li>
+<li>magick/annotate.c (RenderFreetype): Immediately quit processing
+and return an error if SyncImagePixels() reports a problem.</li>
+<li>coders/psd.c (ReadPSDImage): Return with an error right away if
+SetImageEx() (to create solid-color background canvas) reports a
+failure.</li>
+<li>magick/annotate.c (AnnotateImage): Document all of the
+attributes which are supported.</li>
+<li>magick/utility.c (TranslateTextEx): Assure that attributes
+requiring ImageInfo pointer are skipped. AnnotateImage() does not
+pass ImageInfo. Also document all of the attributes which are
+supported.</li>
+<li>doc/compare.imdoc: Compare documentation examples referred to
+non-existing option -algorithm rather than the existing option
+-highlight-style. Fixes SourceForge bug #286 "docs are wrong
+about <cite>-algorithm</cite> option of <cite>gm compare</cite>?".</li>
+<li>Magick++/lib/Magick++/Geometry.h (Magick): Re-implemented
+Magick++ Geometry to use bit-fields for booleans and used a union
+to reserve space for the future as well as to achieve the same
+size as in the previous release. Eliminated inline methods
+because they make it impossible to change the class internal
+design. ABI was broken already when limitPixels() and fillArea()
+methods were added on 2014-11-28. Inline method instantiations in
+already compiled applications will malfunction unless the
+dependent applications are re-compiled.</li>
+<li>magick/image.c (SetImageEx): Add a new version of SetImage()
+called SetImageEx() which reports exceptions to a provided
+exception parameter rather than into the image.</li>
+</ul>
+</blockquote>
+<p>2014-12-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/colormap.c (AllocateImageColormap): Refuse to allocate a
+colormap larger than MaxColormapSize.</li>
+<li>coders/psd.c (ReadPSDImage): Avoid extremely long execution time
+if the PSD colormap size is astonishingly large. Problem was
+reported by Hanno Böck.</li>
+</ul>
+</blockquote>
+<p>2014-11-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c: Verify that DCM data is available before
+attempting to use it. Avoids a crash due to improper DCM header.
+Problem was reported by Hanno Böck.
+(DCM_ReadNonNativeImages): Fix array over-run (off by one error)
+while looking for end of multi-fragment frames.</li>
+</ul>
+</blockquote>
+<p>2014-11-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sun.c: Thoroughly validate Sun Rasterfile headers and
+verify that there are no arithmetic overflows in buffer-size
+calculations. Problem was reported by Hanno Böck.</li>
+</ul>
+</blockquote>
+<p>2014-11-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/lib/Magick++/Geometry.h (Magick::Geometry): Add and
+document limitPixels() and fillArea() methods to support '@' and
+'^' geometry qualifiers. Fill area contributed by Long Ho and
+limitPixels() by Bob Friesenhahn.</li>
+<li>www/Magick++/Image.rst: Document extent and resize methods.</li>
+<li>Magick++/lib/STL.cpp (extentImage): New function object to
+invoke image extent method. Original implementation contributed by
+Long Ho. Subsequently modified by Bob Friesenhahn.
+(resizeImage): New function object to invoke image resize
+method. Contributed by Long Ho.</li>
+<li>Magick++/lib/Image.cpp (extent): New method to place image on
+sized canvas of constant color using gravity. Contributed by Long
+Ho.
+(resize): New method to resize image specifying geometry, filter,
+and blur. Original implementation contributed by Long Ho.
+Subsequently modified by Bob Friesenhahn.</li>
+</ul>
+</blockquote>
+<p>2014-11-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/avi.c: AVI support in GraphicsMagick is completely
+unusable and it could never compete with dedicated software like
+'ffmpeg'. Removing AVI support until such time it can be
+supported properly.</li>
+<li>coders/viff.c: Add protections against buffer overflow by
+verifying that buffer size allocation calculations do not
+overflow. Also added header logging for read and write. Work
+performed due to complaint by Hanno Böck.</li>
+</ul>
+</blockquote>
+<p>2014-11-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/common.h (MAGICK_NO_SANITIZE_ADDRESS): Add
+MAGICK_NO_SANITIZE_ADDRESS macro definition for disabling
+clang/GCC address sanitizer on a function if the need arises.</li>
+</ul>
+</blockquote>
+<p>2014-11-24 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadPNGImage): Do not attempt to clean up
+a "previous" NULL PNG image.</li>
+</ul>
+</blockquote>
+<p>2014-11-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xwd.c (ReadXWDImage): Add logging of XWD header values.
+Fix memory leaks in error reporting paths. Ping mode skips
+allocating memory for data and colormap. Added a few more header
+validation checks (not complete). XWD is put in
+UnstableCoderClass until such time as header validation checks are
+complete.</li>
+</ul>
+</blockquote>
+<p>2014-11-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdb.c (WritePDBImage): Use MagickAllocateArray() when
+allocating packets.</li>
+<li>coders/dpx.c (ReadDPXImage): Validate DPX header orientation and
+number of elements. Problem was reported by Hanno Böck.</li>
+</ul>
+</blockquote>
+<p>2014-11-20 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadJNGImage): Do not attempt to clean up
+a "previous" NULL JNG image.</li>
+</ul>
+</blockquote>
+<p>2014-11-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/FAQ.rst: Add a FAQ entry regarding what 'identify' reports.
+Resolves SF issue #280 "Better documentation for spurious gm
+identify in Q8 compilation."</li>
+</ul>
+</blockquote>
+<p>2014-11-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/enhance.c (ModulateImage): ModulateImage() should produce
+a progress indication even if only the colormap is modified.</li>
+</ul>
+</blockquote>
+<p>2014-11-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/psd.c (ReadPSDImage): Patch by Cédric Demière to fix
+"Memory allocation failed" error when reading PSDs files which
+have no layers. Delivered via SF patch #41 "PSD : files without
+layers". Resolves SF bug #242 "Can not convert PSD to JPG or PNG
+(gm convert: Memory allocation failed)".</li>
+</ul>
+</blockquote>
+<p>2014-11-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/webp.c (WriteWEBPImage): WebP fix by Roman Hiestand to
+make WebP lossless format truely lossless.</li>
+<li>tests/rwblob.tap (check_types): Added a test for WebP lossless.</li>
+<li>tests/rwfile.tap: Added a test for WebP lossless.</li>
+<li>tests/rwblob.c: Added support for -define.</li>
+<li>tests/rwfile.c: Added support for -define.</li>
+</ul>
+</blockquote>
+<p>2014-11-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>webp, VisualMagick/webp: Updated bundled WebP to 0.4.2 release.</li>
+</ul>
+</blockquote>
+<p>2014-11-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/tests/attributes.cpp: Add a simple test for
+Image::formatExpression().</li>
+<li>Magick++/lib/Image.cpp (formatExpression): Handle case where
+TranslateText() returns NULL. Problem was reported by Dirk
+Lemstra..</li>
+</ul>
+</blockquote>
+<p>2014-10-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/lib/Image.cpp (formatExpression): New method to format
+a string based on a format similar to command-line -format.
+Feature was requested by Dirk Lemstra.</li>
+<li>magick/blob.c (BlobReserveSize): Don't throw an exception if
+posix_fallocate() fails since it seems that it is not supported
+for all filesystem types, and is only intended for optimization.</li>
+<li>Magick++/lib/Image.cpp (resolutionUnits): Return resolution
+units from Image if available, else return the value from
+ImageInfo. Issue was reported by Dirk Lemstra.</li>
+</ul>
+</blockquote>
+<p>2014-10-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pnm.c (ReadPNMImage): Validate PGM, PPM, and PAM header
+MaxValue parameter. Issue was reported by Hanno Böck.</li>
+<li>coders/pcx.c (ReadPCXImage): Fix for CVE-2014-8355, eliminate
+memory leaks in error paths, and add PCX header logging. Issue
+was reported by Hanno Böck.</li>
+</ul>
+</blockquote>
+<p>2014-10-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/wand_symbols.h (MagickSetImageGamma): Fix typo in
+wand/wand_symbols.h. Resolves SF bug #277.</li>
+</ul>
+</blockquote>
+<p>2014-10-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (TIFFIgnoreTags): Avoid warning about unused
+strtol() return value on Linux.</li>
+<li>magick/random-private.h ("C"): Move random inlined
+implementation bits to random-private.h, which is not installed,
+or used outside of the core C library.</li>
+</ul>
+</blockquote>
+<p>2014-09-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/annotate.c (AnnotateImage): An empty text string should
+not be treated as an error. Resolves Debian bug 759956.</li>
+</ul>
+</blockquote>
+<p>2014-08-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c: Added a new define called tiff:ignore-tags that
+can be used to ignore tags in 'corrupted' files with unknown and
+invalid tags. Without this patch the file cannot be read and
+raises an error. Patch by Dirk Lemstra via SF patches #40.</li>
+<li>magick/type.c (ReadTypeConfigureFile): Support reading type
+configuration file from Windows resource. Patch by Dirk Lemstra
+via SF patches #32.</li>
+<li>Magick++/lib/Magick++/STL.h: Fixed code analysis warning in
+STL.h. Patch by Dirk Lemstra via SF patches #32.</li>
+<li>Magick++/lib/Magick++/Include.h: Autolink WebP in Visual
+Studio. Patch by Dirk Lemstra via SF patches #32.</li>
+</ul>
+</blockquote>
+<p>2014-08-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/psd.c (WritePSDImage): Fix small stack over-write if more
+than 99 layers are written to PSD format. Similar to
+CVE-2014-1947 for ImageMagick. Changed layer naming to use at
+least 4 digits. Issue was brought to our attention by Rex Dieter
+and change is mostly based on his patch.</li>
+</ul>
+</blockquote>
+<p>2014-08-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/enum_strings.c (StringToCompositeOperator): Support
+composite operator names similar to the major brand, without
+losing any compatibility with previous naming.</li>
+</ul>
+</blockquote>
+<dl class="docutils">
+<dt>2014-08-23 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></dt>
+<dd><ul class="first last simple">
+<li>coders/png.c: Fixed handling of transparency when writing
+indexed PNG. Reference: SourceForge Bug tracker [bugs:#267]
+Transparency lost when converting from GIF to PNG.</li>
+</ul>
+</dd>
+</dl>
+<p>2014-08-17 Jaroslav Fojtik <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagickconfigureconfigure.cpp Remove webp when attempting
+to compile with Visual Studio 6.</li>
+</ul>
+</blockquote>
+<p>2014-08-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update for 1.3.20 release.</li>
+<li>www/index.rst: Update for 1.3.20 release.</li>
+<li>version.sh: Update library versioning for next release.</li>
+</ul>
+</blockquote>
+<p>2014-08-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>png: Updated libpng to 1.6.12 release.</li>
+<li>zlib: Updated zlib to 1.2.8 release.</li>
+</ul>
+</blockquote>
+<p>2014-08-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Updated NEWS file to document changes since previous
+release.</li>
+</ul>
+</blockquote>
+<p>2014-08-09 Jaroslav Fojtik <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+* coders/webp.c webp cannot be compiled when HasWEBP is not set.</blockquote>
+<p>2014-08-08 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Eliminated palette and depth optimization (see
+<a class="reference external" href="https://sourceforge.net/p/graphicsmagick/feature-requests/35/">https://sourceforge.net/p/graphicsmagick/feature-requests/35/</a>).</li>
+</ul>
+</blockquote>
+<p>2014-08-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>dcraw/dcraw.c: Fix dcraw build for x64 target when only WIN64 is
+defined (by also defining WIN32).</li>
+<li>VisualMagick/configure/configure.cpp (write_file): Fix problem
+with x64 project naming which caused object file disambiguation
+not to work for x64 target. Make line terminations consistent.</li>
+</ul>
+</blockquote>
+<p>2014-08-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick: VisualMagick fixes by Dirk Lemstra to improve
+configure program so that it is possible to select QuantumDepth,
+OpenMP, and 64-bit build via configure dialog boxes as well as
+options on the command line. Also automatically detects and deals
+with similarly named files in subdirectories so that WebP support
+can now build successfully. Resolves SF patches 31, 33, 35, 37,
+and 38.</li>
+</ul>
+</blockquote>
+<p>2014-07-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c (NTResourceToBlob): Support loading mgk files
+as Windows resource from library if MagickLibName is defined.
+Patch contributed by Dirk Lemstra via SF patch #32.
+(NTGhostscriptDLL): For Microsoft Windows, add support for a
+MAGICK_GHOSTSCRIPT_PATH environment variable which specifies the
+path to Ghostscript. If this environment variable is defined,
+then the Windows registry is not used to find Ghostscript. Patch
+contributed by Dirk Lemstra via SF patch #39.</li>
+<li>magick/log.c: Added SetLogMethod() to allow an
+application/library to specify a function to be called for
+logging. Patch contributed by Dirk Lemstra.</li>
+</ul>
+</blockquote>
+<p>2014-07-20 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c: "opacity" read from a BMP3 is actually "alpha",
+so store q->opacity=MaxRGB-opacity instead of q->opacity=opacity.
+Reference: Bug tracker [bugs:#271] Blank result for BMP resize.</li>
+</ul>
+</blockquote>
+<p>2014-07-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>webp, VisualMagick/webp: Integrate webp 0.4.0 into windows
+build. May require manual renaming of output object files in
+project files to build webp until VisualMagick configure is
+improved!</li>
+</ul>
+</blockquote>
+<p>2014-07-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/composite.c: fmin() and fmax() are defined by C'99 and
+not available everywhere, so add and use MagickFmin() and
+MagickFmax() to improve portability.</li>
+</ul>
+</blockquote>
+<p>2014-07-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/lib/Magick++/Image.h (Magick): Fix complilation errors
+caused by continued raw use of __attribute__.</li>
+</ul>
+</blockquote>
+<p>2014-06-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/composite.c: Fixes by Brendan Lane for color channel
+overflows in modified/new quantum operators. Fixes test suite
+results for Q32 build and makes LinearBurn and LinearDodge work
+correctly at all.</li>
+<li>wand/pixel_wand.c (PixelSetMagenta): Fix documentation.
+Resolves SourceForge bug #273 'Green Magenta' typo in docs.</li>
+</ul>
+</blockquote>
+<p>2014-06-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/composite.c: Composition improvements and additions
+contributed by Brendan Lane via SourceForge patch #34 "Most of the
+missing Photoshop separable compositing operations"
+(<a class="reference external" href="https://sourceforge.net/p/graphicsmagick/patches/34/">https://sourceforge.net/p/graphicsmagick/patches/34/</a>). These
+composition operators were modified to include alpha in their
+computations: Difference, Darken, Lighten, HardLight, and these
+operators were added Overlay, Exclusion, ColorBurn, ColorDodge,
+SoftLight, LinearBurn, LinearDodge, LinearLight, VividLight,
+PinLight, HardMix.</li>
+</ul>
+</blockquote>
+<p>2014-06-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/composite.c (ScreenCompositePixels): Implementation of
+Screen composite contributed by Brendan Lane. SourceForge patch
+#30 "Missing Screen composite operation".</li>
+<li>wand/magick_compat.c: Re-worked Wand library implementation to
+depend directly on GraphicsMagick library functionality rather
+than using ImageMagick shim code from magick_compat.c and
+magick_compat.h. The magick_compat.c source module becomes "dead
+code", which remains only to support the existing ABI, and will be
+deleted at the next major ABI break point.</li>
+<li>magick/utility.c (MagickFormatString): New private function to
+format a string into a buffer with a specified size. Same as
+previously existing FormatString() except requires a length
+argument.</li>
+</ul>
+</blockquote>
+<p>2014-06-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_compat.h: Use MAGICK_ATTRIBUTE definition from
+magick/common.h.</li>
+<li>magick/common.h (MAGICK_ATTRIBUTE): Don't undefine __attribute__
+since this may be used by system or compiler headers. Define
+private macro instead. Resolves SourceForge bug #270 "Compile
+error with g++ -std=c++11".</li>
+</ul>
+</blockquote>
+<p>2014-06-06 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOnePNGImage): Free png_pixels and
+quantum_scanline before error return. Use "png_error()"
+instead of "ThrowException2()" for errors occuring while
+decoding a PNG so proper cleanup will happen.</li>
+</ul>
+</blockquote>
+<p>2014-06-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Make sure that libtiff warnings
+are promoted to errors for critical tags.</li>
+</ul>
+</blockquote>
+<p>2014-06-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Be quite a lot more draconian
+when retrieving the baseline standard TIFF tags we need in order
+to avoid consuming uninitalized data later. An error with these
+tags will result in failure to read the image file.</li>
+</ul>
+</blockquote>
+<p>2014-05-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/operator.c: Decided that ThresholdBlackNegateQuantumOp
+and ThresholdWhiteNegateQuantumOp should set the result to white
+or black respectively rather than being based on subtraction.</li>
+</ul>
+</blockquote>
+<p>2014-05-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am (AUTOMAKE_OPTIONS): Be ultra-pedantic with CPPFLAGS
+and include paths in order to assure that only required
+directories are supplied, and to avoid accidential collision with
+system header files.</li>
+</ul>
+</blockquote>
+<p>2014-05-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/operator.h ("C"): New quantum operators
+ThresholdBlackNegateQuantumOp and ThresholdWhiteNegateQuantumOp.
+These correspond to -operator "Threshold-Black-Negate" and
+"Threshold-White-Negate".</li>
+</ul>
+</blockquote>
+<p>2014-05-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/composite.c (MultiplyCompositePixels): Multiply
+composition now uses SVG interpretation of how alpha should be
+handled. No longer does a simple multiply of alpha channel.
+Behavior change. Patch contributed by Sara Shafaei.</li>
+<li>coders/msl.c (ProcessMSLScript): Deal with case where
+image_info->attributes is NULL.</li>
+</ul>
+</blockquote>
+<p>2014-04-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (TranslateTextEx): Support additional format
+specifiers 'g', 'A', 'C', 'D', 'G', 'H', 'M', 'O', 'P', 'Q', 'T',
+'U', 'W', 'X', and '@'.
+(GetMagickGeometry): Support '>' and '<' qualifiers with '@'
+qualifier to specify if image should be resized if larger or
+lesser than given area specification. Resolves SourceForge bug
+#216 ">" wont take effect when use @ to specify the maximum area.</li>
+<li>magick/transform.c (GetImageMosaicDimensions): Move mosaic
+dimensions code to a static function for possible future re-use.</li>
+</ul>
+</blockquote>
+<p>2014-04-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/gradient.c (GradientImage): Update image is_grayscale and
+is_monochrome flags based on gradient color properties.</li>
+</ul>
+</blockquote>
+<p>2014-04-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (GetMagickGeometry): Deal with resize geometry
+missing width or height (e.g. '640x' or 'x480') by substituting
+the missing value with one which preserves the image aspect ratio.
+This has been documented to be supported since almost the dawn of
+GraphicsMagick but was not actually supported until now.</li>
+</ul>
+</blockquote>
+<p>2014-04-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc: Document WebP encoder options.</li>
+<li>coders/webp.c (WriteWEBPImage): Support all of the WebP encoder
+options via -define arguments. Most of this work is contributed
+by Roman Hiestand.</li>
+<li>configure.ac: User-provided LIBS should be prepended to LIBS
+that configure script produces so that user option takes
+precedence.</li>
+</ul>
+</blockquote>
+<p>2014-04-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/Magick.xs: Added support for HardLight composition
+operator.</li>
+<li>www/perl.rst: Update PerlMagick documentation, including the
+composition operators.</li>
+<li>coders/xcf.c (GIMPBlendModeToCompositeOperator): Use new
+HardLight composition operator to support XCF GIMP_HARDLIGHT_MODE
+blend mode. Contributed by Sara Shafaei.</li>
+<li>coders/psd.c (CompositeOperatorToPSDBlendMode): Use new
+HardLight composition operator to support PSD "hLit" blend mode.
+Contributed by Sara Shafaei.</li>
+<li>wand/magick_wand.c (MagickOperatorImageChannel): New function to
+apply an operator to an image channel. Contributed by Sara
+Shafaei.</li>
+<li>magick/composite.c (HardLightCompositePixels): New HardLight
+composition operator. Contributed by Sara Shafaei.</li>
+</ul>
+</blockquote>
+<p>2014-04-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (BenchmarkImageCommand): Add a CSV title line
+and quoting to benchmark -rawcsv output.</li>
+</ul>
+</blockquote>
+<p>2014-04-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/webp.c: Add progress indication support to WebP writer.</li>
+<li>magick/command.c (VersionCommand): WebP support is included in
+-version output.</li>
+<li>coders/webp.c: WebP coder identifies library version and header
+ABI versions. Improve WebP error reporting.</li>
+</ul>
+</blockquote>
+<p>2014-04-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Allow specifying the TIFF image
+software tag. In the special case that the string length is zero
+(e.g. -set software '') then the tag is skipped entirely. This is
+to support SourceForge feature request #37 "Option to prevent
+addition of Exif Software tag" opened by Jean-Louis Grall. Please
+note that this tag is not an EXIF tag.</li>
+<li>magick/command.c: composite, convert, display, mogrify, and
+import now support +set to remove an existing image attribute.</li>
+</ul>
+</blockquote>
+<p>2014-03-16 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Don't block threads when PNG_SETJMP_SUPPORTED is
+not enabled.</li>
+<li>coders/png.c: Changed prefix of macros defined in coders/png.c
+from PNG_ to GMPNG_. PNG_ is reserved for macros defined by
+libpng.</li>
+</ul>
+</blockquote>
+<p>2014-03-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c: Don't use setvbuf() to set stdio block size if
+filesystem block size is zero (e.g. MAGICK_IOBUF_SIZE=0)</li>
+</ul>
+</blockquote>
+<p>2014-03-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/{rwblob.tap, rwfile.tap}: Added tests for WEBP.</li>
+<li>tests/{rwblob.c, rwfile.c}: Add lossy hint for WEBP.</li>
+<li>coders/webp.c (WriteWEBPImage): Fix inverted return status.
+Added a tiny bit of logging.</li>
+</ul>
+</blockquote>
+<p>2014-03-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ttf: Updated FreeType to release 2.5.3 of March 6, 2014.
+Provides security fixes for CVE-2014-2240.</li>
+<li>jpeg: Update to libjpeg 9a of 19-Jan-2014.</li>
+<li>png: Update to Libpng 1.6.10 - March 6, 2014.</li>
+</ul>
+</blockquote>
+<p>2014-03-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c (NTResourceToBlob): According to Microsoft
+Report article 193678 (<a class="reference external" href="http://support.microsoft.com/kb/193678">http://support.microsoft.com/kb/193678</a>),
+FreeResource() is not needed in WIN32 and performs no useful
+function. Remove use of it. Also remove use of UnlockResource()
+which is similarly unuseful for WIN32.</li>
+<li>configure.ac (MAGICK_LIBRARY_REVISION): Test for Windows
+_aligned_malloc() is not reliable. Use Windows CRT version to
+decide if it is available.</li>
+</ul>
+</blockquote>
+<p>2014-03-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/studio.h: Make sure that Windows _aligned_malloc() is not
+used under MinGW unless the CRT version allows it.</li>
+</ul>
+</blockquote>
+<p>2014-02-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (InterpolateViewColor): Applied patch by
+Troy Patteson plus fixes to ignore opacity channel if image matte
+is false. Replaces most of the code rewritten on 2014-02-16 and
+which produced a faint darkened border. The results look stellar
+now.</li>
+</ul>
+</blockquote>
+<p>2014-02-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/shear.c: Applied patch by Troy Patteson to improve
+non-integral rotation by around 40% by minimizing added image
+borders. This may cause small differences in results for some
+images.</li>
+<li>reference/filter/Rotate10.miff: Update rotate 10 degrees
+reference image so that PerlMagick test passes.</li>
+<li>magick/shear.c: Applied patch by Troy Patteson to fix
+SourceForge issue #260 "Rotation exhibits clipping/shearing errors
+for short wide images at some angles".</li>
+</ul>
+</blockquote>
+<p>2014-02-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc: Fix documentation to note that 'unspecified
+alpha' is the GraphicsMagick default when writing TIFF rather than
+'associated alpha'. Much thanks to Mats Peterson for alerting us
+of this error.</li>
+</ul>
+</blockquote>
+<p>2014-02-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (InterpolateViewColor): Added a hack so that
+affine transformations and displace composite do not have
+background colored fringing on the transferred image edges when
+the background is completely transparent. Fringing problem was
+caused by one or more of the line ends being a transparent pixel
+outside of the bounds of the original image content. May not be
+the final solution.</li>
+</ul>
+</blockquote>
+<p>2014-02-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/semaphore.c (AcquireSemaphoreInfo): Document that this
+function was deprecated.
+(LiberateSemaphoreInfo): Document that this function was
+deprecated.</li>
+</ul>
+</blockquote>
+<p>2014-02-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/psd.c (RegisterPSDImage): Set PSD to UnstableCoderClass
+since its implementation is currently rather marginal. It may
+even be that this coder deserves to be marked with the new
+BrokenCoderClass. We are still looking for a volunteer to iron
+out the wrinkles in the PSD reader.</li>
+<li>magick/magick.h (CoderClass): Added BrokenCoderClass to mark
+coders which often malfunction or are not very useful in their
+current condition. Sometimes there is still hope that problems
+will be resolved and so the source file is not outright deleted.
+This setting allows us to mark and use coders which might
+malfunction by defining MAGICK_CODER_STABILITY=BROKEN in the
+environment while not causing danger for normal use.</li>
+</ul>
+</blockquote>
+<p>2014-02-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c: Documentation improvements for
+MagickSetInterlaceScheme() and MagickSetImageInterlaceScheme().
+Resolves SourceForge bug #262 "setImageInterlaceScheme doesn't
+make image progressive".</li>
+</ul>
+</blockquote>
+<p>2014-02-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/{ps.c, ps2.c, ps3.c, pdf.c}: Only use resolution from
+image or -density if units was properly specified. Without units,
+resolution is worthless.</li>
+<li>coders/ps3.c (WritePS3Image): Use image resolution similar to PDF
+changes.</li>
+<li>coders/ps2.c (WritePS2Image): Use image resolution similar to PDF
+changes.</li>
+<li>coders/ps.c (WritePSImage): Use image resolution similar to PDF
+changes.</li>
+<li>coders/pdf.c (WritePDFImage): Use resolution from image if it
+appears to be valid. Resolves SourceForge issue #261 "PNG Pixel
+Density Not Preserved Converting to PDF".</li>
+<li>magick/enum_strings.c (StringToResolutionType): New function to
+convert ResolutionType to C string.
+(ResolutionTypeToString): New function to convert from C string to
+ResolutionType.</li>
+</ul>
+</blockquote>
+<p>2014-02-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c (MagickGetImageGeometry): New function to get
+the image geometry string. This function and the three others in
+this change set are contributed by Sara Shafaei.
+(MagickGetImageMatte): New function to read the image matte
+(opacity) channel enable flag.
+(MagickSetImageGeometry): New function to set the image geometry
+string.
+(MagickSetImageMatte): New function to set the image matte
+(opacity) channel enable flag.</li>
+</ul>
+</blockquote>
+<p>2014-01-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c (MagickDrawImage): Remove development debug
+fprintf which causes each drawing primitive to be printed to
+stderr.</li>
+</ul>
+</blockquote>
+<p>2014-01-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pnm.c (ReadPNMImage): Fix scaling of alpha in sub-ranged
+pixels. Addresses SourceForge issue #237 "Incorrect MAXVAL
+scaling when reading PAM images", which was not fully fixed in by
+the previous attempt.</li>
+</ul>
+</blockquote>
+<p>2014-01-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/tsd.c: Implement TSD for "pure" OpenMP mode without
+relying on POSIX or WIN32 TSD APIs.</li>
+<li>magick/semaphore.c: Implement OpenMP-based locking so that code
+can compile in a "pure" OpenMP mode without relying on POSIX or
+WIN32 locking APIs.</li>
+<li>configure.ac: --without-threads no longer disables use of
+OpenMP. Use the already existing option --disable-openmp to
+disable OpenMP.</li>
+</ul>
+</blockquote>
+<p>2014-01-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/common.h: Support use of clang/llvm __attribute__ and
+__builtin extensions similar to the existing support for GCC.</li>
+</ul>
+</blockquote>
+<p>2014-01-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/lib/Image.cpp (thumbnail): New method for fast image
+resizing, particularly to make thumbnails.</li>
+<li>coders/gif.c: Log when Netscape loop exension is read and
+written.</li>
+<li>coders/png.c (WriteOnePNGImage): In optimize mode, disable matte
+channel immediately if there are no non-opaque pixels. Also added
+some useful logging. Resolves SourceForge issue #252 "convert an
+8bit PNG result in a corrupted image ".</li>
+<li>wand/magick_wand.c (MagickSetImageGravity): New Wand method to
+set image gravity.
+(MagickGetImageGravity): New wand method to get image gravity.</li>
+</ul>
+</blockquote>
+<p>2014-01-02 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOnePNGImage): Use libpng function
+png_set_strip_16_to_8() when scaling 16-bit input PNG down to
+8-bit in a Q8 build. The png_set_scale_16_to_8() function is
+more accurate, but the slight difference causes reference tests
+to fail and causes unexpected difference between the behavior
+of PNG and other formats. If png_set_strip_16_to_8() is not
+supported in libpng, then we use png_set_scale_16_to_8() if
+that is available.</li>
+</ul>
+</blockquote>
+<p>2014-01-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>INSTALL-windows.txt: Update for 2014.</li>
+<li>INSTALL-unix.txt: Update for 2014.</li>
+<li>Copyright.txt: Update for 2014.</li>
+<li>NEWS.txt: Update for 2014.</li>
+<li>README.txt: Update for 2014.</li>
+<li>doc: Update for 2014.</li>
+<li>www: Update for 2014.</li>
+<li>VisualMagick/installer: Update for 2014.</li>
+<li>ChangeLog: Rotate Changelog to ChangeLog.2013 for 2014.</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>ChangeLog-2015.rst</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2015-12-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>ttf: Update bundled freetype to release 2.6.2.</li>
+<li>libxml: Update bundled libxml2 to release 2.9.3.</li>
+</ul>
+</blockquote>
+<p>2015-11-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>webp: Updated bundled libwebp to release 0.4.4.</li>
+<li>png: Updated bundled libpng to release 1.6.19.</li>
+</ul>
+</blockquote>
+<p>2015-11-05 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WriteOnePNGImage): Added "volatile" to
+several declarations to stop "might be clobbered" warnings.</li>
+</ul>
+</blockquote>
+<p>2015-11-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update NEWS for 1.3.23 release.</li>
+</ul>
+</blockquote>
+<p>2015-11-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (IdentifyImageCommand): Fix problem that
+identify with -format "%A" does not always report correct answer
+due to insufficient analysis of image. Fixes SourceForge bug #326
+"gm identify: transparency detection bug ".</li>
+</ul>
+</blockquote>
+<p>2015-11-05 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WriteOnePNGImage): Restored a "volatile"
+declaration that was accidentally deleted on 2015-11-03.</li>
+</ul>
+</blockquote>
+<p>2015-11-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Add checks for 'ps2write' and 'eps2write' as
+Ghostscript Postscript and Encapsulated Postscript
+writers. Resolves issue reported to graphicsmagick-bugs mailing
+list on 2015-11-01 entitled "Failure to detect pswrite and
+epswrite Ghostscript devices".</li>
+</ul>
+</blockquote>
+<p>2015-11-03 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadRawProfile): Issue a warning instead of
+an error when attempting to read a zero-length profile.</li>
+</ul>
+</blockquote>
+<p>2015-11-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/studio.h (MagickSleep): Provide the macro 'MagickSleep'
+to call a function which delays for one second. No longer provide
+a macro 'sleep' in WIN32 compiles. Resolves issue reported to
+graphicsmagick-bugs mailing list on 2005-11-01 entitled "MinGW
+build error when sleep re#defined as Sleep".</li>
+</ul>
+</blockquote>
+<p>2015-10-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/demo/demos.tap: Add zoom test cases to test resize to
+original dimensions, change height, and change width.</li>
+<li>magick/resize.c (ScaleImage): Fix regression introduced in
+1.3.22 release which results in pixel cache not open if the scale
+width and height match the original. Patch by Troy Patteson.
+Fixes part of SourceForge bug #323 "ScaleImage() issues in
+v1.3.22".
+(ScaleImage): Fix double free problem when scaled rows equals
+original rows. This regression was added in the 1.3.22 release
+via changset 080b99bba574. Based on patch by Troy Patteson.
+Fixes remaining part SourceForge bug #323 "ScaleImage() issues in
+v1.3.22".</li>
+</ul>
+</blockquote>
+<p>2015-10-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/Magick++/Image.rst (thumbnail): Paragraph heading fix.
+Resolves SourceForge issue #321 "find tiny error in
+Magick++/Image.html document".</li>
+</ul>
+</blockquote>
+<p>2015-10-06 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>docs/*.imdoc: Changed synopses in manpages to add "gm "
+prefix to commands. Updated synopsis for "convert" to agree
+with what's in the "gm" manpage.</li>
+</ul>
+</blockquote>
+<p>2015-10-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Remove CFLAGS and LDFLAGS deduplication code.
+Resolves SourceForge bug #320 OS X "universal build failure".</li>
+</ul>
+</blockquote>
+<p>2015-10-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/index.rst: Updated for 1.3.22 release.</li>
+<li>NEWS.txt: Updated for 1.3.22 release.</li>
+</ul>
+</blockquote>
+<p>2015-09-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Brought up to date with changes thus far since last
+release.</li>
+<li>magick/blob.c (OpenBlob): Disable fflush() of read-only handle
+under Microsoft Windows, which produced a spurious error status,
+blocking file reads for Visual Studio 2015 on Windows 2012 server.
+Problem was reported and diagnosed by Dirk Lemstra.</li>
+</ul>
+</blockquote>
+<p>2015-09-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tiff: Update bundled libtiff sources to 4.0.6 release.</li>
+<li>magick/module.c (InitializeModuleSearchPath): Fix compilation
+problem when UseInstalledMagick is not defined.</li>
+</ul>
+</blockquote>
+<p>2015-09-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xpm.c: Static string/array allocations are now more
+const.</li>
+<li>coders/{ps.c, ps2.c, ps3.c}: Static string/array allocations are
+now more const.</li>
+<li>coders/palm.c: Palm static arrays should be 'const'.</li>
+<li>coders/meta.c (jpeg_embed): Stop sharing writeable static string
+'psheader'.
+(tag_spec): The 'tags' static array should be all 'const'.</li>
+<li>coders/jp2.c: Try to reduce the amount of non-const static data.</li>
+<li>coders/dcm.c (dicom_info): Try to make dicom_info array more
+'const'.</li>
+<li>coders/dpx.c: Eliminate use of static buffer strings.</li>
+<li>coders/png.c: Make MNG chunk id strings constant rather than
+initialized data.</li>
+<li>magick/render.c (DrawAffineImage): Fix problem that sometimes
+output rows are skipped when using OpenMP. Problem identification
+and patch by Kevin Matzen. Resolves SourceForge issue #316
+"-affine sometimes produces output with missing rows".</li>
+</ul>
+</blockquote>
+<p>2015-08-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/rwblob.tap: Add specific tests for BMP2 BMP3 subformats.</li>
+<li>tests/rwfile.tap: Add specific tests for BMP2 BMP3 PS2 PS3
+subformats.</li>
+</ul>
+</blockquote>
+<p>2015-08-30 Jaroslav Fojtik <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<p>* magick/ImageMagick.rc Replace Imagemagick.ico by GraphicsMagick.ico</p>
+<p>* magick/Imagemagick.ico is no longer needed and not referenced anywhere.</p>
+</blockquote>
+<p>2015-08-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>README.txt: Fix SourceForge bug 314 "README: bad hg clone URL".</li>
+<li>magick/module.c (GetModuleListForDirectory): Fix Coverity 107017
+"Copy into fixed size buffer" and 107013 "Overlapping buffer in
+memory copy".
+(UnloadModule): Fix SourceForge bug 312 "uninitialized variable
+"name" in UnloadModule".</li>
+<li>coders/bmp.c (WriteBMPImage): Fix typo in fix on 2015-08-17.
+Fixes Coverity 107014 "Test should be assignment".</li>
+<li>magick/module.c (OpenModules): Fix Coverity 107016 "Resource
+leak".
+(GetModuleListForDirectory): Fix Coverity 107015 "Resource leak".</li>
+</ul>
+</blockquote>
+<p>2015-08-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (WriteBMPImage): Fix inverted alpha channel when
+writing BGRA8888 format. Problem was reported by 张铎 via the
+graphicsmagick-help discussion list on 2015-08-17.</li>
+</ul>
+</blockquote>
+<p>2015-08-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (GenerateEXIFAttribute): Verify that entry
+pointer is within the metadata buffer in order to avoid buffer
+overflow. Resolution and patch by Federico Larumbe.</li>
+<li>magick/profile.c (SetImageProfile): Avoid crash given NULL
+profile pointer. Resolution and patch by Federico Larumbe.</li>
+</ul>
+</blockquote>
+<p>2015-08-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (GenerateEXIFAttribute): Fix logic problem
+while validating EXIF GPS_OFFSET. Problem reported by Federico
+Larumbe.</li>
+</ul>
+</blockquote>
+<p>2015-07-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (ReadMIFFImage): Applied fix
+(<a class="reference external" href="http://hg.code.sf.net/u/zacmorris/graphicsmagick/rev/edcc4c184b42">http://hg.code.sf.net/u/zacmorris/graphicsmagick/rev/edcc4c184b42</a>)
+by Zac Morris to detect buffer overrun while reading zip
+compressed data.
+(ReadMIFFImage): Fixed some memory leaks which were occuring when
+an exception was thrown from zip-compressed data reader.</li>
+</ul>
+</blockquote>
+<p>2015-07-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WritePTIFImage): Fix SourceForge issue #269
+"Convert creates SubfileType 0x2 instead of 0x1". From looking at
+the code, this is a regression since the time support for the page
+subfile type was added (probably via changeset 11831
+(037eef0f67f2) on 2007-08-17).</li>
+</ul>
+</blockquote>
+<p>2015-07-19 Jaroslav Fojtik <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>dcraw/dcraw.c: Fixed bad define WIN32.</li>
+</ul>
+</blockquote>
+<p>2015-07-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt, www/Hg.rst, www/index.rst: Applied English bugs patch
+by Amadu Jalloh.</li>
+<li>dcraw/dcraw.c: Add a port replacement for strnlen().</li>
+</ul>
+</blockquote>
+<p>2015-07-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.h: The declaration for MagickGetImageGravity()
+was missing. Resolves SourceForge bug #308 magick_wand.h misses
+declaration of MagickGetImageGravity.</li>
+</ul>
+</blockquote>
+<p>2015-07-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>dcraw: Update bundled dcraw to release 9.26.0.</li>
+<li>png: Updated bundled libpng to release 1.6.17.</li>
+<li>lcms: Update bundled lcms2 to release 2.7.</li>
+</ul>
+</blockquote>
+<p>2015-07-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Brought up to date with changes thus far since last
+release.</li>
+<li>magick/version.h.in (MagickCopyright): Update most recent
+copyright year.</li>
+<li>magick/render.c (DrawAffineImage): Fix problem with negative x
+offset. Resolves SourceForge issue #306 "gm fails to convert svg
+to jpeg if svg has images with negative coordinates".</li>
+<li>magick/pixel_cache.c (ReadCachePixels): Add checks for integer
+overflows.</li>
+</ul>
+</blockquote>
+<p>2015-07-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/module.c (ModuleAliases): Add a module alias for GRAYA.</li>
+</ul>
+</blockquote>
+<p>2015-07-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/montage.c (MontageImages): Fix Coverity 101317 "Resource
+leak".</li>
+<li>magick/blob.c: Limit the data size passed to the read/write
+calls to the filesystem blocksize and make multiple calls if
+required.</li>
+<li>magick/pixel_cache.c: Limit the data size passed to the
+read/write, pread/prwite calls and make multiple calls if
+required.</li>
+</ul>
+</blockquote>
+<p>2015-07-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (WriteBlobFile): Properly handle short read. Read
+data in units of filesystem block size.
+(BlobToFile): Write data in units of filesystem block size.</li>
+<li>patches: Added directory of patches which may be useful when
+integrating new versions of 3rd-party programs or libraries into
+the VisualMagick build.</li>
+<li>libxml: Re-applied libxml changes which were used in prior
+release.</li>
+</ul>
+</blockquote>
+<p>2015-07-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>webp: Updated bundled libwebp to release 0.4.3.</li>
+<li>ttf: Update bundled freetype to release 2.6.</li>
+<li>libxml: Update bundled libxml2 to release 2.9.2.</li>
+<li>tiff/VERSION: Update bundled libtiff to release 4.0.4.</li>
+<li>magick/nt_base.h (HAVE_TIFFISCODECCONFIGURED): Enable use of
+TIFFIsCODECConfigured in MSVC build.</li>
+<li>coders/tiff.c: I am too lazy to modify VisualMagick configure so
+it is possible to include jpeglib.h in tiff.c, so block out this
+low-value code just for MSVC builds.</li>
+</ul>
+</blockquote>
+<p>2015-06-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac, magick/profile.c: Removed support for lcms 1.X.
+No one should be using a lesser version than lcms 2.0.</li>
+</ul>
+</blockquote>
+<p>2015-06-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (DisassociateBlob): Applied patch by Dirk Lemstra
+to assure that the image blob is no longer shared with other
+images when the image is written. This helps with thread safety.</li>
+</ul>
+</blockquote>
+<p>2015-06-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Add/fix utility usage messages for -box,
+-convolve, -gravity, -linewidth, -list, -mattecolor, -render and
+-shave. Resolves SourceForge issue #302 "MogrifyUsage prints
+incomplete information ".</li>
+</ul>
+</blockquote>
+<p>2015-06-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Include JPEG headers to obtain
+its BITS_IN_JSAMPLE definition. This is needed so we can know
+what JPEG depth libtiff supports.</li>
+<li>www/index.rst: Add mention of GraphicsMagick having zero defects
+reported by Coverity.</li>
+</ul>
+</blockquote>
+<p>2015-06-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/lib/STL.cpp (adaptiveThresholdImage): Add a new
+constructor which accepts a 'double' offset value. The previous
+version of this constructor is deprecated and subject to removal
+in the future. The size of the class is enlarged to store a
+'double' and so this is a break in the ABI when this class was
+used. Code using this class should be re-compiled.</li>
+<li>Magick++/lib/Image.cpp (adaptiveThreshold): Add a new version of
+this method which accepts a 'double' offset value. The previous
+version of the method is deprecated and subject to removal in the
+future. Problem was reported by Dirk Lemstra.</li>
+</ul>
+</blockquote>
+<p>2015-05-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/gray.c (ReadGRAYImage): Based on feedback from Glenn,
+return a gray image from the reader, even if a channelized format
+specifier is given.</li>
+</ul>
+</blockquote>
+<p>2015-05-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/gray.c (ReadGRAYImage): Fix read glitch caused by
+incorrect memset(). Added missing break statement to switch.
+Added more logging.
+(RegisterGRAYImage): Register "gray" formats R, G, B, C, M, Y, K,
+O such that they are not triggered by file extension. It is
+necessary to apply a magick prefix to the file name (or set image
+magick in the API) in order to force using these formats. This
+avoids accidents in case the file extension was used for some
+other purpose.</li>
+</ul>
+</blockquote>
+<p>2015-05-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/gray.c: Added support for "GRAYA" format. Format
+specifiers "R", "G", "B", "A", "C", "M", and "Y" may now be used
+to save and restore the associated channel using the same raw
+format as "GRAY". These format specifiers were already supported
+but did not appear to serve any useful function.</li>
+</ul>
+</blockquote>
+<p>2015-05-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Improve handling of libxml2 dependencies. Only
+test for and use libwmflite. Full-up libwmf is no longer used.</li>
+<li>configure.ac: Deduplicate CFLAGS and LDFLAGS.</li>
+</ul>
+</blockquote>
+<p>2015-05-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WriteOnePNGImage): Eliminate a "clobber"
+compilation warning.</li>
+<li>coders/jpeg.c (WriteJPEGImage): Eliminate a "clobber"
+compilation warning.</li>
+<li>configure.ac: Don't compute libwmf2 and libxml2 linkage path
+based on claimed installation prefix. This is hoped to improve
+configure reliability on multi-arch type systems.</li>
+</ul>
+</blockquote>
+<p>2015-05-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Use the first -I, -L, and -l arguments produced by
+freetype-config and don't produce arguments based on installation
+prefix. This is hoped to improve configure reliability on
+multi-arch type systems.</li>
+</ul>
+</blockquote>
+<p>2015-05-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/tempfile.c (AcquireTemporaryFileDescriptor): P_tmpdir is
+not an environment variable. Need to consider Windows environment
+variables for Cygwin.</li>
+<li>magick/random.c (InitializeMagickRandomKernel): For Microsoft
+Windows, use CryptGenRandom() to salt the built-in random number
+generator.</li>
+</ul>
+</blockquote>
+<p>2015-05-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (MagickRandReentrant): Quiet Coverity 10092
+"Calling risky function".
+(MagickRandNewSeed): Quiet Coverity 10093 "Calling risky
+function".</li>
+<li>coders/tga.c (ReadTGAImage): Quiet Coverity 10201 "Identical
+code for different branches".</li>
+<li>coders/pcx.c (ReadPCXImage): Quiet Coverity 10218 "Identical
+code for different branches".</li>
+</ul>
+</blockquote>
+<p>2015-05-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (GetGeometry): Fix handling of area geometries
+in the form "5000000@". Resolves SourceForge issue #299 "-resize
+with @ and > in geometry specification".</li>
+</ul>
+</blockquote>
+<p>2015-05-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Disable matte channel for
+compression types which don't support it. Resolves SourceForge
+bug #297 "GM distorts image using -transform".
+(WriteTIFFImage): When type is Optimize, disable matte channel if
+image is opaque.</li>
+</ul>
+</blockquote>
+<p>2015-05-09 Jaroslav Fojtik <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>webp/src/utils/endian_inl.h: Fixed defect in intrinsic function
+byteswap_ulong for Visual Studio less than 2005.</li>
+</ul>
+</blockquote>
+<p>2015-05-08 Jaroslav Fojtik <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/configure/system_page.cpp,
+VisualMagick/configure/system_page.h: Suppress reloading .vcproj
+when configuration type does not change.</li>
+</ul>
+</blockquote>
+<p>2015-05-08 Jaroslav Fojtik <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/configure/system_page.cpp,
+VisualMagick/configure/system_page.h,
+VisualMagick/configure/target_page.h: Ability to re-use already
+given paths. It is highly frustrating to enter path for different
+configurations again and again.</li>
+</ul>
+</blockquote>
+<p>2015-05-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/vid.c (ReadVIDImage): Fix use of uninitialized variable
+reported by MSVC 2003 (but not GCC, Clang, or Coverity).</li>
+</ul>
+</blockquote>
+<p>2015-05-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (ReadMIFFImage): Fix possible leak of profiles in
+error path.</li>
+<li>coders/mpc.c (ReadMPCImage): Fix memory leak of values
+allocation.
+(ReadMPCImage): Fix possible leak of profiles in error path. Fixes
+Coverity 80697 "Resource leak".</li>
+</ul>
+</blockquote>
+<p>2015-05-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (ReadMIFFImage): Fix memory leak of values
+allocation.</li>
+</ul>
+</blockquote>
+<p>2015-05-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): Hopefully quiet Coverity 10305
+"Untrusted loop bound".</li>
+<li>coders/tga.c (ReadTGAImage): Hopefully quiet Coverity 53418
+"Untrusted loop bound".</li>
+<li>magick/tempfile.c (AcquireTemporaryFileDescriptor): Eliminate
+all use of operating system provided temporary file allocation
+functions (all apparently flawed in one way or another) and rely
+exclusively on our own implementation.</li>
+<li>magick/constitute.c (ConstituteImage): Quiet Coverity 53399
+"Logically dead code".</li>
+<li>coders/webp.c (ReadWEBPImage): Quiet Coverity 53400 "Logically dead
+code".</li>
+<li>coders/miff.c (WriteRunlengthPacket): More work to quiet
+Coverity 10186 and 10214 "Missing break in switch".</li>
+</ul>
+</blockquote>
+<p>2015-05-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/tempfile.c (AcquireTemporaryFileDescriptor): Thoroughly
+vet temporary file path. Might quiet Coverity 64613 "Use of
+untrusted string value".</li>
+<li>wand/magick_compat.c (ParseGeometry): Another try at quieting
+Coverity 10248 "Copy into fixed size buffer" and 10078
+"Overlapping buffer in memory copy" in this dead code.</li>
+<li>magick/tempfile.c (AcquireTemporaryFileDescriptor): Remove
+unneeded, almost certainly never used, and potentially insecure
+use of mkstemp(). Will quiet Coverity 10315 "Insecure temporary
+file".</li>
+</ul>
+</blockquote>
+<p>2015-04-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Keep Ghostscript gibberish from appearing in
+Configure output.</li>
+<li>coders/miff.c (WriteRunlengthPacket): Quiet Coverity 10186 and
+10214 "Missing break in switch".</li>
+<li>magick/pixel_cache.c (GetCacheInfo): Quiet Coverity 10208 "Data
+race condition".</li>
+<li>magick/blob.c (CloneBlobInfo): Quiet Coverity 10188 "Data race
+condition".
+(GetBlobInfo): Quiet Coverity 10191 "Data race condition".</li>
+<li>magick/image.c (AllocateImage): Quiet Coverity 10196 "Data race
+condition".
+(CloneImage): Quiet Coverity 10206 "Data race condition".</li>
+<li>magick/map.c (MagickMapAllocateMap): Quiet Coverity 10192, 10193
+and 10228 "Data race condition".</li>
+<li>configure.ac: Use an algorithm to try to discover the best value
+for GSCMYKDevice.</li>
+<li>VisualMagick/bin/delegates.mgk: Recipe for 'gs-cmyk' contained a
+typo which breaks using '-type ColorSeparation'.</li>
+<li>coders/pwp.c (ReadPWPImage): Fix Coverity CID 64491 "Integer
+handling issues".</li>
+</ul>
+</blockquote>
+<p>2015-04-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xcf.c (load_tile_rle): Quiet Coverity 10259 "Untrusted
+loop bound".</li>
+<li>coders/sct.c (ReadSCTImage): Quiet Coverity 10285 "Untrusted
+loop bound".</li>
+<li>coders/pwp.c (ReadPWPImage): Quiet Coverity 10299 "Untrusted
+loop bound".</li>
+<li>coders/pcd.c (ReadPCDImage): Quiet Coverity 10301 "Untrusted
+loop bound".</li>
+<li>coders/tga.c (ReadTGAImage): Quiet Coverity 53418 "Untrusted
+loop bound".</li>
+<li>wand/magick_compat.c (ParseGeometry): Fix overlap strcpy() in
+dead code. Quiets Coverity 10078 "Overlapping buffer in memory
+copy" and 10248 "Copy into fixed size buffer".</li>
+<li>magick/segment.c (Classify): Fix Coverity 64317 "Resource leak".</li>
+</ul>
+</blockquote>
+<p>2015-04-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xcf.c (ReadXCFImage): Fix Coverity 64064 "Resource leak".</li>
+<li>coders/txt.c (ReadTXTImage): Fix Coverity 64061 "Resource leak".</li>
+<li>coders/rla.c (ReadRLAImage): Fix Coverity 64063 "Resource leak".</li>
+<li>coders/dib.c (ReadDIBImage): Fix Coverity 64057 Resource leak".</li>
+<li>magick/segment.c (Classify): Fix Coverity 64056 "Resource leak".</li>
+<li>magick/resize.c (SampleImage): Fix Coverity 64053, 64054, and
+64062 "Resource leak".</li>
+<li>magick/render.c (TraceStrokePolygon): Fix Coverity 64055, 64059,
+and 64060 "Resource leak".</li>
+<li>magick/magick.c (ListModuleMap): Quiet Coverity 64058 "Resource
+leak".</li>
+</ul>
+</blockquote>
+<p>2015-04-28 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c: Fix Coverity 10305 "Untrusted loop bound".</li>
+<li>coders/cineon.c: Fix Coverity 10310 "Untrusted loop bound".</li>
+</ul>
+</blockquote>
+<p>2015-04-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/memory.c: All use of user-provided allocation functions
+is done via MagickFree(), MagickMalloc(), and MagickRealloc().</li>
+</ul>
+</blockquote>
+<p>2015-04-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/colormap.c (MagickConstrainColormapIndex): For out of
+range condition, specifically return 0 rather than setting index
+to zero, and then returning index.</li>
+<li>coders/pcx.c (ReadPCXImage): Fix Coverity 10197 "Negative loop
+bound".</li>
+<li>coders/map.c (ReadMAPImage): Allocate pixels after return case
+for 'ping' mode.
+(ReadMAPImage): Fix problem added in last commit due to multiple
+uses of 'packet_size'.</li>
+<li>magick/floats.c (_Gm_convert_fp16_to_fp32)
+(_Gm_convert_fp24_to_fp32): Fix Coverity 10094 "Logically dead
+code".</li>
+<li>coders/pcx.c (ReadPCXImage): Fix Coverity 10197 "Negative loop
+bound".</li>
+<li>coders/wpg.c (UnpackWPG2Raster): Always test for EOF from
+ReadBlobByte(). Should fix Coverity 10205 "Negative loop bound".</li>
+</ul>
+</blockquote>
+<p>2015-04-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pcx.c (ReadPCXImage): Add some more integer-overflow
+safety to computations. Add some casts.</li>
+<li>coders/meta.c (formatIPTC): Fix Coverity 10221 "Infinite loop".</li>
+<li>magick/attribute.c (GenerateEXIFAttribute): Fix Coverity 10320
+"Untrusted array index read" and "Untrusted loop bound".</li>
+</ul>
+</blockquote>
+<p>2015-04-24 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/gif.c (ReadGIFImage): Attempt to fix Coverity issue
+10284 by using "opacity = (header[3] & 0xff)".</li>
+</ul>
+</blockquote>
+<p>2015-04-23 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (ReadBlobMSBLong, ReadBlobLSBLong): Attempt
+to fix various "tainted" or "untrusted" variables
+by masking off all but the lower 32 bits returned.</li>
+</ul>
+</blockquote>
+<p>2015-04-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xcf.c (ReadXCFImage): Fix Coverity 10216 "Integer
+overflowed argument".</li>
+<li>magick/transform.c (FlipImage): Fix Coverity 61461 "Division or
+modulo by zero".</li>
+<li>coders/gif.c: Protect against integer overflow in array size
+calculations. Used unsigned type for colormap index.</li>
+</ul>
+</blockquote>
+<p>2015-04-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/map.c (ReadMAPImage): Maybe quiet Coverity 10326
+"Untrusted pointer read".</li>
+<li>magick/utility.c (GlobExpression): See if testing for null
+terminating character quiets Coverity 10246 "Untrusted value as
+argument".</li>
+<li>magick/transform.c (FlipImage): Possibly quiet case #4 of
+Coverity 10311 "Untrusted value as argument".</li>
+<li>magick/utility.c (Base64Encode): Quiet Coverity 10296 and 10272
+"Use of untrusted scalar value".</li>
+</ul>
+</blockquote>
+<p>2015-04-22 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (ReadBlobMSBShort, ReadBlobLSBShort): Attempt
+to fix various "tainted" or "untrusted" variables, e.g., in
+coders/gif.c and coders/sgi.c by masking off all but the lower
+16 bits returned.</li>
+</ul>
+</blockquote>
+<p>2015-04-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tim.c (ReadTIMImage): Make TIM reader more robust against
+EOF.</li>
+<li>coders/sct.c (ReadSCTImage): Make SCT reader more robust against
+EOF.</li>
+<li>coders/pwp.c (ReadPWPImage): Test loop for EOF.</li>
+<li>coders/otb.c (ReadOTBImage): Make error reporting a bit more
+robust.</li>
+<li>coders/jnx.c (ExtractTileJPG): Add some EOF checks.</li>
+<li>coders/cut.c (ReadCUTImage): Limit width/height to range of
+signed integer.</li>
+<li>tests/rwfile.tap: Add a R/W file test for ART.</li>
+<li>tests/rwblob.tap: Add a R/W blob test for ART.</li>
+<li>coders/art.c (ReadARTImage): Improve error checking.</li>
+</ul>
+</blockquote>
+<p>2015-04-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sun.c (ReadSUNImage): Try to quench Coverity 10280
+"Untrusted loop bound".</li>
+<li>coders/mpc.c (ReadMPCImage): Port MIFF header reading fixes.</li>
+</ul>
+</blockquote>
+<p>2015-04-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (ReadMIFFImage): MIFF reader failed to read some
+MIFF headers properly. Fixes SourceForge issue #298 "invalid next
+size (normal)/memory corruption".</li>
+</ul>
+</blockquote>
+<p>2015-04-18 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadMNGImage): Fix Coverity 55862 "Resource leak"
+and quiet Coverity 55825, 55826, and 55827 "Data race condition".</li>
+</ul>
+</blockquote>
+<p>2015-04-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (GetToken): Fix an overlapping strlcpy() which
+caused a crash in pedantic strlcpy() implementations while parsing
+a SVG-style URL from text. Several other issues remain.</li>
+</ul>
+</blockquote>
+<p>2015-04-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (ParseUnixCommandLine): Fix Coverity 59256
+"Unused value".</li>
+</ul>
+</blockquote>
+<p>2015-04-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/display.c (MagickXROIImage): Fix Coverity 10179 "Missing
+break in switch".
+(MagickXCropImage): Fix Coverity 10211 "Missing break in switch".</li>
+<li>magick/utility.c (Base64Decode): Fix Coverity 10203 "Missing
+break in switch".
+(Tokenizer): Quench Coverity 10182 "Missing break in switch". Not
+believed to be an actual problem.</li>
+<li>magick/command.c (ParseUnixCommandLine): Fix Coverity 10174 and
+10178 "Missing break in switch".
+(ProcessBatchOptions): Fix Coverity 10180 "Missing break in
+switch".
+(ParseWindowsCommandLine): Fix Coverity 10220 "Missing break in
+switch".</li>
+<li>coders/xwd.c (ReadXWDImage): Fix Coverity 10095 "Division or
+modulo by zero". 3rd try.</li>
+</ul>
+</blockquote>
+<p>2015-04-14 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneJNGImage): Fix Coverity 55829 and 55846
+"Resource leak".</li>
+</ul>
+</blockquote>
+<p>2015-04-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/quantize.c (GrayscalePseudoClassImage): Fix Coverity
+55831 "Resource leak". 2nd try.</li>
+<li>coders/vid.c (ReadVIDImage): Fix Coverity 55868 and 55874
+"Resource leak". 2nd try.</li>
+</ul>
+</blockquote>
+<p>2015-04-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/psd.c (ReadPSDImage): Fix Coverity 55855 "Resource
+leak". 2nd try.</li>
+<li>coders/pict.c (PictPixmapOp): Fix Coverity 55875 and 55883
+"Resource leak". 2nd try.</li>
+<li>coders/pcx.c (WritePCXImage): Fix Coverity 55877 "Resource
+leak". 2nd try.</li>
+<li>coders/meta.c (format8BIM): Fix Coverity 55842 "Resource
+leak". 2nd try.</li>
+<li>coders/mat.c (WriteMATLABImage): Fix Coverity 55850 "Resource
+leak". 2nd try.</li>
+<li>coders/dpx.c (ReadDPXImage): Fix Coverity 55878 "Resource leak".
+2nd try.</li>
+<li>coders/preview.c (WritePreviewImage): Fix Coverity 55988
+"Resource leak".</li>
+</ul>
+</blockquote>
+<p>2015-04-12 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneJNGImage): Avoid some memory leaks
+newly reported by Coverity (work in progress)</li>
+</ul>
+</blockquote>
+<p>2015-04-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resize.c (ScaleImage): Fix Coverity 55824 "Division or
+modulo by float zero".</li>
+<li>magick/annotate.c (AnnotateImage): Fix Coverity 55863
+"Uninitialized scalar variable".</li>
+<li>wand/magick_wand.c (MagickDrawImage): Fix Coverity 55828
+"Resource leak".
+(MagickMontageImage): Fix Coverity 55835 "Resource leak".</li>
+<li>wand/drawing_wand.c (DrawComposite): Fix Coverity 55849
+"Resource leak".</li>
+<li>magick/widget.c (MagickXColorBrowserWidget): Fix Coverity 55854
+"Resource leak".</li>
+<li>magick/resize.c (ScaleImage): Fix Coverity 55841, 55853, 55858,
+and 55860 "Resource leak".</li>
+<li>magick/render.c (ConvertPathToPolygon): Fix Coverity 55836
+"Resource leak".
+(DrawDashPolygon): Fix Coverity 55837 "Resource leak".</li>
+<li>magick/quantize.c (GrayscalePseudoClassImage): Fix Coverity
+55831 "Resource leak".</li>
+<li>magick/paint.c (ColorFloodfillImage): Fix Coverity 55886
+"Resource leak".</li>
+<li>magick/map.c (MagickMapAddEntry): Possibly silence 55844
+"Resource leak".</li>
+<li>magick/image.c (CloneImage): Fix Coverity 55833 "Resource leak".</li>
+<li>magick/effect.c (BlurImage): Fix Coverity 55851 "Resource leak".</li>
+<li>magick/display.c (MagickXAnnotateEditImage): Fix Coverity 55830
+"Resource leak".
+(MagickXVisualDirectoryImage): Fix Coverity 55894 "Resource leak".</li>
+<li>magick/constitute.c (ReadImages): Fix Coverity 55834 "Resource
+leak".
+(ReadInlineImage): Fix Coverity 55843 "Resource leak".</li>
+<li>magick/compress.c (HuffmanEncode2Image): Fix Coverity 55839
+"Resource leak".
+(HuffmanDecodeImage): Fix Coverity 55859 "Resource leak".</li>
+<li>magick/color.c (GetColorHistogram): Fix Coverity 55845 "Resource
+leak".
+(ComputeCubeInfo): Fix Coverity 55857 "Resource leak".</li>
+<li>coders/yuv.c (ReadYUVImage): Fix Coverity 55890 "Resource leak".</li>
+<li>coders/wpg.c (UnpackWPG2Raster): Fix Coverity 55832 and 55848
+"Resource leak".</li>
+</ul>
+</blockquote>
+<p>2015-04-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/vid.c (ReadVIDImage): Fix Coverity 55868 "Resource leak"
+(ReadVIDImage): Fix Coverity 55874 "Resource leak".</li>
+<li>coders/txt.c (ReadTXTImage): Fix Coverity 55866 "Resource leak".</li>
+<li>coders/topol.c (ReadTOPOLImage): Fix Coverity 55865 "Resource
+leak".</li>
+<li>coders/sgi.c (WriteSGIImage): Fix Coverity 55891 "Resource leak".</li>
+<li>coders/psd.c (ReadPSDImage): Fix Coverity 55855 "Resource leak".</li>
+<li>coders/pict.c (WritePICTImage): Fix Coverity 55867, 55875, 55883
+"Resource leak". Fix Coverity 55892 "Resource leak".</li>
+<li>coders/pdb.c (ReadPDBImage): Fix Coverity 55840, 55856, and
+55885 "Resource leak".</li>
+<li>coders/pcx.c (WritePCXImage): Fix Coverity 55877 "Resource
+leak".</li>
+<li>coders/mvg.c (ReadMVGImage): Fix Coverity 55873 "Resource leak".</li>
+<li>coders/mpeg.c (WriteMPEGImage): Fix Coverity 55880 "Resource
+leak".</li>
+<li>coders/miff.c (WriteMIFFImage): Fix Coverity 55864 "Resource
+leak".
+(WriteMIFFImage): Fix Coverity 55872 "Resource leak".</li>
+<li>coders/meta.c (formatIPTCfromBuffer): Fix Coverity 55838
+"Resource leak".
+(format8BIM): Fix Coverity 55842 and 55852 "Resource leak".
+(formatIPTC): Fix Coverity 5882 "Resource leak".</li>
+<li>coders/mat.c (ReadMATImage): Fix Coverity 55850 "Resource leak".</li>
+<li>coders/map.c (ReadMAPImage): Fix Coverity 55876 "Resource leak".</li>
+<li>coders/logo.c (ReadLOGOImage): Fix Coverity 55870 "Resource
+leak".</li>
+<li>coders/label.c (ReadLABELImage): Fix Coverity 55869 "Resource
+leak".</li>
+<li>coders/icon.c (ReadIconImage): Fix Coverity 55887 "Resource
+leak".</li>
+<li>coders/fits.c (WriteFITSImage): Fix Coverity 55884 "Resource
+leak".</li>
+<li>coders/dpx.c (WriteDPXImage): Fix Coverity 55861 "Resource
+leak".
+(ReadDPXImage): Fix Coverity 55878 "Resource leak".
+(ReadDPXImage): Fix Coverity 55879 "Resource leak".</li>
+<li>coders/dib.c (WriteDIBImage): Fix Coverity 55881 "Resource
+leak".
+(WriteDIBImage): Fix Coverity 55895 "Resource leak".</li>
+<li>coders/cut.c (ReadCUTImage): Fix Coverity 55893 "Resource leak".</li>
+<li>coders/caption.c (ReadCAPTIONImage): Fix Coverity 55888
+"Resource leak".
+(ReadCAPTIONImage): Fix Coverity 55889 "Resource leak".
+(ReadCAPTIONImage): Fix Coverity 55896 "Resource leak".</li>
+<li>magick/annotate.c (RenderX11): Silence Coverity 10106 "Logically
+dead code".</li>
+<li>coders/xcf.c: Silence Coverity 10224, 10233, and 10236 "Improper
+use of negative value".</li>
+<li>coders/mat.c (ReadMATImage): Silence Coverity 10175 "Improper
+use of negative value"</li>
+<li>coders/tga.c (ReadTGAImage): Silence Coverity 10088 "Operands
+don't affect result".</li>
+<li>magick/annotate.c (RenderFreetype): Silence Coverity 14396 and
+44755 "Unused value".</li>
+<li>coders/wpg.c (LoadWPG2Flags): Silence Coverity 10273 and 10253
+"Unused value".</li>
+<li>magick/montage.c (MontageImages): Silence Coverity 10255 "Unused
+value".
+(MontageImages): Silence Coverity 10264 "Unused value".</li>
+</ul>
+</blockquote>
+<p>2015-04-09 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneJNGImage): Avoid using a NULL alpha_image
+or color_image. (ReadJNGImage): Removed an extraneous CloseBlob().</li>
+</ul>
+</blockquote>
+<p>2015-04-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (MagickCreateDirectoryPath): Silence Coverity
+10098 "Logically dead code".</li>
+<li>magick/resource.c (InitializeMagickResources): Silence Coverity
+10101 "Logically dead code".</li>
+<li>magick/magick.c (MagickSignalHandlerMessage): Fix Coverity 44725
+"Logically dead code".</li>
+<li>magick/log.c (DestroyLogInfo): Silence Coverity 53659 and 53661
+"Data race condition".
+(ReadLogConfigureFile): Silence Coverity 53660 "Data race
+condition".</li>
+<li>magick/effect.c (DespeckleImage): Fix error handling issue
+caused by shadowed variable. Fixes Coverity 10099 "Logically dead
+code".</li>
+<li>magick/command.c (TimeImageCommand): Fix Coverity 10097
+"Logically dead code".</li>
+<li>magick/attribute.c (ReadMSBLong): Hopefully silence Coverity
+10276 "Unintended sign extension".</li>
+<li>coders/sgi.c (ReadSGIImage, WriteSGIImage): Fix Coverity 10243,
+10244, 10247, 10254, and 10294 "Unintended sign extension".</li>
+</ul>
+</blockquote>
+<p>2015-04-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/xwindow.c (MagickXMakeImage): Quiet Coverity 10282
+"Unused value".</li>
+</ul>
+</blockquote>
+<p>2015-04-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Another change targeting
+Coverity 44742 and 44746 "Unintended sign extension".</li>
+</ul>
+</blockquote>
+<p>2015-04-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (TracePath): Fix Coverity 10258 "Uninitialized
+scalar variable".</li>
+<li>magick/widget.c (MagickXFontBrowserWidget): Fix Coverity 10323
+"Sizeof not portable". 2nd try.</li>
+<li>coders/xwd.c (ReadXWDImage): Fix Coverity 10095, 10100, 10104
+"Division or modulo by zero". 2nd try.</li>
+<li>magick/analyze.c (GetImageCharacteristics): Fix Coverity 10096
+"Logically dead code".</li>
+<li>coders/yuv.c (ReadYUVImage): Fix Coverity 10260 "Structurally
+dead code".</li>
+<li>coders/xcf.c (ReadXCFImage): Fix Coverity 10226 "Missing break
+in switch".</li>
+<li>coders/tim.c (ReadTIMImage): Fix Coverity 10249 "Unused value".</li>
+<li>coders/tiff.c (CompressionSupported): Fix Coverity 44723
+"Logically dead code".
+(WriteTIFFImage): Fix Coverity 44742 and 44746 "Unintended sign
+extension".</li>
+<li>coders/ps3.c (WritePS3Image): Validate results from TellBlob()
+and SeekBlob(). Should quiet Coverity 10198 "Improper use of
+negative value".</li>
+<li>coders/ps2.c (WritePS2Image): Validate results from TellBlob()
+and SeekBlob(). Should quiet Coverity 10230 "Improper use of
+negative value".</li>
+<li>coders/mpeg.c (WriteMPEGImage): Quiet Coverity 10176 "Missing
+break in switch".</li>
+<li>coders/map.c (WriteMAPImage): Make MAP reader/writer more
+robust. May quiet 10326 "Untrusted pointer read".</li>
+<li>coders/locale.c (ReadLOCALEImage): Quiet Coverity 10108
+"Logically dead code".</li>
+<li>coders/rle.c: Make URT RLE reader more robust. Should quiet
+Coverity CID 10070 "Bad bit shift operation", as well as 10235
+"Improper use of negative value".</li>
+</ul>
+</blockquote>
+<p>2015-04-04 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WriteOneJNGImage): Quiet Coverity CID issue 14370,
+"Unused value" (status was ignored).</li>
+<li>coders/png.c (ReadOneJNGImage): Quiet Coverity CID issue 44724,
+"Logically dead code" (skip_to_iend can't be true).</li>
+<li>coders/png.c (ReadOnePNGImage): Attempt to quiet Coverity
+CID 10232 "Missing unlock", by using png_error() instead of
+throwing an exception.</li>
+</ul>
+</blockquote>
+<p>2015-04-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xwd.c (ReadXWDImage): Fix Coverity 10104 "Division or
+modulo by zero".</li>
+<li>magick/resize.c (ResizeImage): Fix Coverity 53404 "Division or
+modulo by zero".</li>
+<li>coders/ps3.c (WritePS3MaskImage): Fix Coverity 53415 "Improper
+use of negative value".</li>
+<li>coders/meta.c (parse8BIM): Fix Coverity 53413 "Improper use of
+negative value".
+(parse8BIMW): Fix Coverity 53414 "Improper use of negative value".</li>
+<li>magick/utility.c (GetMagickGeometry): Fix Coverity 53403 and
+53405 "Division or modulo by float zero".
+(GetPathComponent): Fix Coverity 53417 "Wrong sizeof argument.</li>
+<li>magick/quantize.c (GrayscalePseudoClassImage): Fix Coverity
+10256 "Wrong sizeof argument".</li>
+<li>magick/image.c (ResetImagePage): Fix Coverity 53401 "Division or
+modulo by float zero" and 53402 "Division or modulo by float
+zero".</li>
+<li>coders/histogram.c (WriteHISTOGRAMImage): Silence Coverity 10107
+"Division or modulo by float zero". 2nd try.</li>
+<li>magick/xwindow.c (MagickXImportImage): Silence Coverity 10207
+"Array compared against 0".</li>
+<li>magick/widget.c (MagickXColorBrowserWidget): Silence Coverity
+53406 "Identical code for different branches".
+(MagickXListBrowserWidget): Silence Coverity 53407 "Identical code
+for different branches".</li>
+<li>magick/animate.c (MagickXMagickCommand): Silence Coverity 53410
+"Identical code for different branches".</li>
+<li>coders/rgb.c (WriteRGBImage): Silence Coverity 53409 "Identical
+code for different branches".</li>
+<li>coders/cmyk.c (WriteCMYKImage): Silence Coverity 53408
+"Identical code for different branches".</li>
+<li>magick/xwindow.c (MagickXMakeImage): Silence Coverity 44727
+"Dereference after null check". 2nd try.</li>
+<li>magick/utility.c (EscapeString): Silence Coverity 53416
+"Dereference before null check".</li>
+<li>coders/gif.c (WriteGIFImage): Fix Coverity 10219 "Dereference
+null return value".</li>
+<li>magick/log.c (InitializeLogInfo): Hopefully silence Coverity
+53411 and 53412 "Data race condition".</li>
+<li>coders/cineon.c (AttributeToString): Silence Coverity 10079
+"Buffer not null terminated". 2nd try. The buffer is not
+required to be null terminated!</li>
+<li>coders/pict.c (ReadPICTImage): 10171 "Resource leak". 2nd try.</li>
+<li>coders/wmf.c (util_set_brush): Silence Coverity 44739
+"Out-of-bounds access". 2nd try.</li>
+</ul>
+</blockquote>
+<p>2015-03-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/log.c (SetLogEventMask): Silence Coverity 10069 "Value
+not atomically updated". Logging initialization is done
+single-threaded entirely in InitializeLogInfo() now.</li>
+</ul>
+</blockquote>
+<p>2015-03-28 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOnePNGImage): Attempt to quiet Coverity
+44734 "Data race condition" by freeing mng_info->png_pixels
+and mng_info->quantum_scanline separately from MngInfoFreeStruct.</li>
+</ul>
+</blockquote>
+<p>2015-03-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/widget.c (XEditText): Silence Coverity 10072 "Overlapping
+buffer in memory copy"</li>
+<li>coders/locale.c (ReadConfigureFile): Silence Coverity 10075
+"Overlapping buffer in memory copy".</li>
+<li>magick/xwindow.c (MagickXMakeWindow): Silence Coverity 10076
+"Overlapping buffer in memory copy".</li>
+<li>coders/dcm.c (funcDCM_TransferSyntax): Silence Coverity 10083
+"Unchecked return value".</li>
+<li>magick/static.c (ExecuteStaticModuleProcess): Silence Coverity
+10082 "Unchecked return value".</li>
+<li>coders/cals.c (ReadCALSImage): Silence Coverity 10086 "Unchecked
+return value from library".
+(ReadCALSImage): Silence Coverity 10085 "Unchecked return value".
+(ReadCALSImage): Silence Coverity 10084 "Unchecked return value
+from library".</li>
+<li>magick/enhance.c (ModulateImage): Silence Coverity 10087
+"Unchecked return value".</li>
+</ul>
+</blockquote>
+<p>2014-03-24 Jaroslav Fojtik <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+* coders/wpg.c More paranoa in checking ReadBlobByte() negative return.</blockquote>
+<p>2015-03-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (Generate8BIMAttribute): Silence Coverity
+10195 "Argument cannot be negative".</li>
+<li>Magick++/lib/Image.cpp (syncPixels): Silence Coverity 44722
+"Unchecked return value".
+(fontTypeMetrics): Silence Coverity 44721 "Unchecked return
+value".</li>
+<li>magick/render.c (ConvertPathToPolygon): Silence Coverity 10120
+"Dereference after null check".</li>
+<li>magick/effect.c (EmbossImage): Silence Coverity 10114
+"Dereference after null check".
+(AdaptiveThresholdImage): Silence Coverity 10118 "Explicit null
+dereferenced".</li>
+<li>coders/msl.c (MSLPushImage): Silence Coverity 10128 "Dereference
+after null check".</li>
+<li>magick/render.c (DrawPolygonPrimitive): Silence Coverity 10136
+"Dereference after null check".</li>
+<li>wand/drawing_wand.c (DrawSetStrokeDashArray): Silence Coverity
+10117 "Dereference after null check".</li>
+<li>magick/draw.c (DrawSetStrokeDashArray): Silence Coverity 10150
+"Dereference after null check".</li>
+<li>wand/drawing_wand.c (DrawPushGraphicContext): Silence Coverity
+10151 "Dereference after null check".</li>
+</ul>
+</blockquote>
+<p>2015-03-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/meta.c (parse8BIM): Silence Coverity 10159 "Explicit null
+dereferenced".
+(parse8BIMW): Silence Coverity 10144 "Explicit null dereferenced".</li>
+<li>coders/uil.c (WriteUILImage): Silence Coverity 10202
+"Dereference after null check". In fact, UIL output was not
+working at all due to this bug.</li>
+<li>magick/xwindow.c (MagickXMakeImage): Silence Coverity 44727
+"Dereference after null check".</li>
+<li>Magick++/lib/Image.cpp (colorMapSize): Silence Coverity 44728
+"Dereference after null check".</li>
+<li>coders/vid.c (ReadVIDImage): Silence Coverity 44730 "Explicit
+null dereferenced".</li>
+<li>coders/mpc.c (ReadMPCImage): Silence Coverity 44732 "Dereference
+after null check".</li>
+<li>Magick++/lib/Image.cpp (signature): Silence Coverity 44735
+"Dereference null return value".</li>
+<li>coders/ps.c (ReadPSImage): Ghostscript options concatenation
+should be more secure against buffer overflow.</li>
+<li>coders/pdf.c (ReadPDFImage): Applied patch by Chris Gilling such
+that '-define pdf:stop-on-error=true' will stop PDF processing
+immediately upon an error.
+(ReadPDFImage): Ghostscript options concatenation should be more
+secure against buffer overflow.</li>
+</ul>
+</blockquote>
+<p>2015-03-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/animate.c (MagickXAnimateImages): Silence Coverity 44736
+"Dereference null return value". Also fixed apparent memory leak
+that Coverity did not notice.</li>
+<li>coders/fits.c (ReadFITSImage): Silence Coverity 10209
+"Dereference before null check".</li>
+<li>magick/color_lookup.c (ReadColorConfigureFile): Silence Coverity
+44743 "Dereference before null check".</li>
+<li>magick/xwindow.c (MagickXMakeImage): Silence Coverity 44745
+"Dereference before null check".</li>
+<li>coders/pict.c (ReadPICTImage): Hopefully address consequences of
+Coverity 10292 "Untrusted loop bound" although it will likely
+still complain.</li>
+<li>magick/utility.c (LocaleCompare, LocaleNCompare): Try to create
+an implementation that Coverity won't label an "tainted sink", and
+therefore result in a Coverity "Use of untrusted scalar value"
+report whenever a string from an external source is compared. The
+original implementations are not believed to be faulty.</li>
+</ul>
+</blockquote>
+<p>2015-03-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (ProcessBatchOptions): Silence Coverity 10080
+"Buffer not null terminated".</li>
+<li>magick/widget.c (MagickXConfirmWidget): Silence Coverity 10089
+"Copy-paste error". This is an amazing find by Coverity.</li>
+<li>magick/xwindow.c (MagickXImportImage): Silence Coverity 10207
+"Array compared against 0".</li>
+<li>magick/quantize.c (GrayscalePseudoClassImage): Silence Coverity
+10256 "Wrong sizeof argument".</li>
+<li>coders/tiff.c (ReadTIFFImage): Fix Coverity 44747 and 44748
+"Extra sizeof expression".</li>
+</ul>
+</blockquote>
+<p>2015-03-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/lib/Magick++/Include.h (Magick): Fix compilation with
+'clang' under Linux. Build was broken yesterday.</li>
+<li>coders/tiff.c (QuantumTransferMode): Fix reading Old JPEG and
+YCbCr sample images from libtiff pics-3.8.0.tar.gz image file
+collection. There was a regression for YCbCr added in last
+release.</li>
+</ul>
+</blockquote>
+<p>2015-03-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (ReadBMPImage): Fix Coverity 44726 "Division or
+modulo by float zero". I don't think that this can actually
+happen due to prior checks.</li>
+<li>magick/xwindow.c (MagickXMakeWindow): Silence Coverity 10281
+"Copy into fixed size buffer".</li>
+<li>coders/pdf.c (ReadPDFImage): Silence Coverity 10241 "Copy into
+fixed size buffer".</li>
+<li>magick/type.c (ReadTypeConfigureFile): Silence Coverity 10242
+"Copy into fixed size buffer".</li>
+<li>magick/utility.c (GetPathComponent): Silence Coverity 10263
+"Copy into fixed size buffer".</li>
+<li>coders/txt.c (ReadTXTImage): Silence Coverity 10287 "Copy into
+fixed size buffer".</li>
+<li>coders/ps.c (WritePSImage): Silence Coverity 10289 "Copy into
+fixed size buffer".</li>
+<li>magick/delegate.c (ReadConfigureFile): Silence Coverity 10297
+"Copy into fixed size buffer".</li>
+<li>magick/log.c (ReadLogConfigureFile): Silence Coverity 10300
+"Copy into fixed size buffer".</li>
+<li>coders/ps3.c (WritePS3Image): Silence Coverity 10303 "Copy into
+fixed size buffer".</li>
+<li>coders/pdf.c (WritePDFImage): Silence Coverity 10304 "Copy into
+fixed size buffer".</li>
+<li>coders/ps.c (ReadPSImage): Silence Coverity 10306 "Copy into
+fixed size buffer".</li>
+<li>coders/msl.c (MSLStartElement): Silence Coverity 10308 "Copy
+into fixed size buffer".</li>
+<li>coders/ps2.c (WritePS2Image): Silence Coverity 10309 "Copy into
+fixed size buffer".</li>
+<li>Magick++/lib/Geometry.cpp (operator): Silence Coverity 44749
+"Copy into fixed size buffer".</li>
+<li>Magick++/lib/Image.cpp (annotate): Silence Coverity 44750 "Copy
+into fixed size buffer".</li>
+<li>coders/ept.c (ReadEPTImage): Silence Coverity 44751 "Copy into
+fixed size buffer".</li>
+<li>coders/wmf.c (ipa_device_begin): Silence Coverity 44753 "Copy
+into fixed size buffer".
+(lite_font_map): Silence Coverity 44752 "Copy into fixed size
+buffer".</li>
+<li>magick/random.c (InitializeMagickRandomKernel): Silence Coverity
+10091 "Don't Call" in the case where /dev/random is available.</li>
+<li>coders/mpeg.c (WriteMPEGParameterFiles): Fix Coverity 10190
+"Resource leak". File descriptor was leaked under certain error
+conditions.</li>
+<li>coders/wpg.c (UnpackWPG2Raster): Fix Coverity 10312
+"Uninitialized scalar variable" gripe.</li>
+<li>magick/utility.c (ListFiles): Possibly address
+Coverity 10245 "Sizeof not portable" gripe.</li>
+<li>magick/widget.c (MagickXFontBrowserWidget): Possibly address
+Coverity 10323 "Sizeof not portable" gripe.</li>
+<li>coders/mat.c (WriteMATLABImage): FormatString() requires a
+buffer of MaxTextExtent bytes. Use sprintf instead. Fix for
+Coverity issue 10170.</li>
+<li>Magick++/lib/Geometry.cpp (string): FormatString() requires a
+buffer of MaxTextExtent bytes. Fix for Coverity issue 44737.</li>
+<li>coders/wmf.c (draw_pattern_push): FormatString() requires a
+buffer of MaxTextExtent bytes. Fix for Coverity issue 44741.
+(ipa_device_begin): FormatString() requires a buffer of
+MaxTextExtent bytes. Fix for Coverity issue 44740.
+(util_set_brush): FormatString() requires a buffer of
+MaxTextExtent bytes. Fix for Coverity issue 44739.
+(ipa_region_clip): FormatString() requires a buffer of
+MaxTextExtent bytes. Fix for Coverity issue 44738.</li>
+</ul>
+</blockquote>
+<p>2015-03-15 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WritePNGImage) Avoid a Coverity gripe about
+potential NULL dereference (actually it is impossible because
+png_error() does not return. Fix for Coverity gripe 44731.</li>
+<li>coders/png.c (WritePNGImage) Avoid a null pointer dereference
+while logging inherited color_type. Fix for Coverity issue 10185.</li>
+<li>coders/png.c (WriteOneJNGImage) Avoid possible unintended sign
+extension. Fix for Coverity issue 44744.</li>
+<li>coders/png.c (WriteOnePNGImage) Quiet a false Coverity warning
+about dereference after NULL check. Fix for Coverity issue 44729.</li>
+<li>coders/png.c (ReadOnePNGImage): Redid the "Respect the
+PixelsResource limit" patch of March 7, using unsigned arithmetic
+to determine the width limit. Sometimes the calculated
+width limit was incorrectly zero.</li>
+</ul>
+</blockquote>
+<p>2015-03-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageInfo): Fix problems with reading
+filenames that include a colon. Resolves SourceForge bug #294
+"display and convert (probably other things too) choke on
+filenames with colons in".</li>
+<li>magick/utility.c (GetPathComponent): Fix SubImagePath
+extraction. Fixes SourceForge bug #66 "converting runs slowly when
+subimage is specified".</li>
+</ul>
+</blockquote>
+<p>2015-03-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc (-geometry): Document the significance of 'x'
+as used in a geometry specification. In particular, document that
+if width is specified without a trailing 'x' that height is set to
+width. This is in response to SourceForge bug #296 "Strange
+-resize WIDTH results with version 1.3.21".</li>
+</ul>
+</blockquote>
+<p>2015-03-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (GlobExpression): Remove use of IsSubimage().</li>
+<li>magick/image.c (IsSubimage): Re-implement with a more robust
+solution. Combined with fixes to ps.c and pdf.c, allows selecting
+specific pages, as well as re-ordering.</li>
+<li>coders/ps.c (ReadPSImage): Set image frame scene ids
+appropriately.</li>
+<li>coders/pdf.c (ReadPDFImage): Set image frame scene ids
+appropriately.</li>
+<li>magick/utility.c (TranslateTextEx): -format %Q should report
+JPEG quality estimate if it is available. Resolves SourceForge
+bug #293 "gm identify bug?".</li>
+<li>doc/options.imdoc: Documented JPEG-specific -format tags.</li>
+</ul>
+</blockquote>
+<p>2015-03-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/lib/Image.cpp (repage): New method to reset page
+settings. Contributed by Dirk Lemstra.</li>
+</ul>
+</blockquote>
+<p>2015-03-07 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOnePNGImage): Respect the PixelsResource
+limit.</li>
+<li>coders/png.c (ReadOnePNGImage): Moved quantum_scanline
+and png_pixels into the MngInfo struct. This prevents
+memory leaks when reading malformed PNG images, but unfortunately
+triggers a new complaint about a possible race condition.</li>
+<li>coders/png.c (ReadOnePNGImage): Removed two superflous calls to
+CloseBlob().</li>
+<li>coders/png.c (ReadOnePNGImage): Do the allocation and free of
+quantum_scanline outside the "pass" loop, i.e., do it once per
+image rather than once per pass while decoding interlaced PNG
+images. Log these when -debug coders is enabled.</li>
+<li>coders/png.c: Fixed typo recently introduced in the JNG reader
+(status != MagickFalse should be status == MagickFalse).</li>
+</ul>
+</blockquote>
+<p>2015-03-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xwd.c (ReadXWDImage): Fix memory leaks in error paths.</li>
+<li>coders/xpm.c (ReadXPMImage): Fix memory leaks in error paths.</li>
+<li>coders/miff.c (ReadMIFFImage): Fix memory leak of Image in error
+case.
+(ReadMIFFImage): Fix memory leaks of zlib and bzlib2 context in
+error path which reports decompression failure.</li>
+<li>coders/bmp.c (ReadBMPImage): BMP reader was wrongly rejecting
+RLE-compressed files as being too small. Fixes SourceForge bug
+#295 "1.3.21 identify regression". Also fixed 'ping' support code
+which was still reading the pixels in 'ping' mode.
+(ReadBMPImage): Fix memory leak when BMP is handled as a sequence.</li>
+</ul>
+</blockquote>
+<p>2015-03-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/palm.c (ReadPALMImage): PALM reader now applies PALM's
+special non-linear colormap if the file does not provide a custom
+colormap. Custom colormap size is verified to not exceed image
+colors. Added logging statements regarding colormap.</li>
+</ul>
+</blockquote>
+<p>2015-02-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/index.rst: Update for 1.3.21 release.</li>
+<li>www/Changes.rst: Update for 1.3.21 release.</li>
+<li>NEWS.txt: Update NEWS for 1.3.21 release.</li>
+<li>version.sh: Bump/adjust library versioning.</li>
+</ul>
+</blockquote>
+<p>2015-02-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/delegate.c: Fix compilation under Cygwin. Thanks to Marco
+Atzeri for advising us of this problem.</li>
+</ul>
+</blockquote>
+<p>2015-02-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/error.h (ThrowReaderException): More significant
+exceptions (e.g. errors) should overwrite less significant
+exceptions (e.g. warnings) thrown earlier.</li>
+<li>coders/bmp.c (ReadBMPImage): Detect 32-bit integer overflows and
+other annoyances caused by intentionally broken files. Also, only
+warn if the file header claims the file is larger than it is since
+this is a benign issue.</li>
+<li>magick/blob.c (OpenBlob): Fix "magic header bytes" log message
+count value.</li>
+</ul>
+</blockquote>
+<p>2015-02-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Updated NEWS with more changes.</li>
+<li>Magick++/lib/Magick++/Include.h (Magick): Add GetImageGeometry
+to MagickLib namespace in order to avoid a compilation problem
+noticed with Visual C++ 6.0.</li>
+</ul>
+</blockquote>
+<p>2014-02-22 Jaroslav Fojtik <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li><dl class="first docutils">
+<dt>VisualMagickconfigureconfigure.cpp Fixed crash.</dt>
+<dd>Renamed debug to configure_d.exe to prevent mess.</dd>
+</dl>
+</li>
+</ul>
+</blockquote>
+<p>2015-02-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (InitializeMagick): Invoke
+NTInitializeExceptionHandlers() under Windows.</li>
+<li>magick/nt_base.c (NTInitializeExceptionHandlers): Add a new
+private function which disables pop-up Windows on exceptions and
+registers a handler for Windows exceptions to clean up temporary
+files prior to program exit.</li>
+<li>magick/magick.c (PanicDestroyMagick): Use
+PurgeTemporaryFilesAsyncSafe() rather than PurgeTemporaryFiles().
+(InitializeMagickSignalHandlers): Always register for SIGINT, even
+under Microsoft Windows.</li>
+<li>magick/tempfile.c (PurgeTemporaryFilesAsyncSafe): New private
+function to clean up temporary files prior to program exit.
+Async-safe so it can be safely called from a signal handler.
+Intentionally leaks memory.</li>
+</ul>
+</blockquote>
+<p>2015-02-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (GenerateEXIFAttribute): Fix crash while
+parsing corrupt EXIF which was reported by Stijn Sanders on
+2015-02-17.</li>
+<li>Magick++/lib/{Blob.cpp, Image.cpp}: Incorrect lock scope
+resulted in Magick++ locking not actually working to protect
+critical sections in spite of no detected problems with locking
+these past 16 years. Problem was detected using the
+misc-unused-raii check from clang-tidy and was reported by Hyrum
+Wright.</li>
+<li>coders/palm.c (ReadPALMImage): Add header logging to writer.
+Writer still seeks and overwrites its own header so logging is not
+entirely accurate yet.</li>
+</ul>
+</blockquote>
+<p>2015-02-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>libtool: Update GNU libtool to 2.4.6.</li>
+<li>coders/palm.c (ReadPALMImage): Fix support for transparency in
+PALM reader.</li>
+</ul>
+</blockquote>
+<p>2015-02-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/palm.c (ReadPALMImage): Major re-work of PALM reader.
+More log message improvements. More header validation.</li>
+</ul>
+</blockquote>
+<p>2015-02-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/palm.c (ReadPALMImage): Improve log messages. Add more
+header validation. Check image pixel limits. Support 'ping'
+mode.</li>
+</ul>
+</blockquote>
+<p>2015-02-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/palm.c (ReadPALMImage): PALM reader now supports 1, 2, 4,
+8, and 16-bit test files we were able to generate using
+'pnmtopalm'. A progress monitor was added. Memory leaks in error
+paths were fixed.</li>
+</ul>
+</blockquote>
+<p>2015-02-12 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Insert "if (QuantumTick(...))" ahead of
+each "if (!MagickMonitorFormatted(...)".</li>
+</ul>
+</blockquote>
+<p>2015-02-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/rla.c (ReadRLAImage): Assure that header ASCII strings
+are properly terminated. Resolves Coverity CID 10322.</li>
+</ul>
+</blockquote>
+<p>2015-02-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.h (STDERR_FILENO): Provide definitions for
+standard POSIX file numbers so that Visual Studio should compile.
+Fixes SourceForge bug #291 "STDERR_FILENO (used in magick.c) is
+not defined under Windows"</li>
+</ul>
+</blockquote>
+<p>2015-02-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/lib/Image.cpp (Image::quiet()): Patch by Dirk Lemstra
+to support silencing warnings in Magick++. Adds a quiet() method
+which blocks (ignores) warning exceptions when passed a true
+argument. Warning exceptions are still generated by default.</li>
+<li>coders/tiff.c: Support '-define tiff:report-warnings=true' to
+enable that warnings reported by libtiff are thrown as warning
+exceptions so that they may be caught or will be reported at the
+gm command-line.</li>
+</ul>
+</blockquote>
+<p>2015-02-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Use YCbCr encoding when JPEG
+compression is requested for an RGB image.</li>
+</ul>
+</blockquote>
+<p>2015-02-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (QuantumTransferMode): Fix reading or writing
+planar min-is-white or min-is-black images with an associated
+alpha channel.</li>
+</ul>
+</blockquote>
+<p>2015-02-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xpm.c (ReadXPMImage): Reading empty XPM file should not
+cause bad memory access.</li>
+<li>coders/gif.c (DecodeImage): Assure that GIF decoder does not use
+unitialized data.</li>
+<li>coders/jpeg.c (ReadJPEGImage): Verify that we support the number
+of output components before proceeding to decode the image.</li>
+</ul>
+</blockquote>
+<p>2015-01-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (ReadMIFFImage): MIFF needs to stop spinning if
+zlib or bzlib report an error while decompressing. Solves problem
+with file provided by Jodie Cunningham on 2015-01-25.</li>
+<li>coders/vicar.c (ReadVICARImage): Fix Vicar reader's dogged
+determination to continue reading when there is nothing left to
+read. Solves problem with file provided by Jodie Cunningham on
+2015-01-25.</li>
+<li>magick/magick.c (PanicDestroyMagick): Replace memory allocation
+functions with dummy functions rather than NULL pointers.
+(InitializeMagickSignalHandlers): Register
+MagickPanicSignalHandler() for SIGSEGV.
+(MagickPanicSignalHandler): Produce an informative message for the
+user.
+(MagickSignalHandlerMessage): Include more detailed information
+from the signal handler via a common routine used by default
+signal handlers.</li>
+</ul>
+</blockquote>
+<p>2015-01-25 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (ReadBMPImage): An attempt to address CID 10291.</li>
+</ul>
+</blockquote>
+<p>2015-01-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c (Exit): Changed to return 'void'. Function can
+not return a value if it does not return.</li>
+<li>magick/error.c (DefaultFatalErrorHandler): Invoke
+PanicDestroyMagick() rather than DestroyMagick(). If we are
+really that short on memory, DestroyMagick() might not work.</li>
+<li>magick/magick.c (MagickPanicSignalHandler): Only use async-safe
+functions in signal handler.
+(PanicDestroyMagick): New function for emergency release of
+persistent resources just prior to program exit. Async-safe and
+does not acquire or release any heap memory.</li>
+<li>magick/export.c: Eliminate two 'clang' warnings.</li>
+</ul>
+</blockquote>
+<p>2015-01-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdb.c (ReadPDBImage): Fix typo.</li>
+<li>coders/cineon.c (ReadCINEONImage): Enforce that Cineon image
+info channels is valid. Solves problem with file provided by
+Jodie Cunningham on 2015-01-24</li>
+<li>coders/fits.c (ReadFITSImage): Enforce valid bits-per-pixel
+values. Add detailed header logging. Solves problem with file
+provided by Jodie Cunningham on 2015-01-24</li>
+</ul>
+</blockquote>
+<p>2015-01-22 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadPNGImage): Check length of various MNG
+chunks before using the chunk data.</li>
+<li>coders/png.c (WriteOnePNGImage): Use png_error() instead of
+throwing an exception so cleanup in the setjmp block can happen,
+including unlocking the semaphore. Addresses Coverity CID 10184.</li>
+</ul>
+</blockquote>
+<p>2015-01-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/gif.c (WriteGIFImage): Don't use an unchecked value from
+GetImageAttribute(), even if the access succeeded before.
+Resolves Coverity CID 10219.</li>
+<li>coders/dpx.c (StringToAttribute): Make sure that string is not
+accidentally shortened by one character if it occupies the full
+field size.
+(ReadDPXImage): Validate that the bits per sample claimed by the
+file header is a supported depth before using it further in the
+code. This might resolve Coverity CID 10071 "Bad shift
+operation".
+(ReadDPXImage): Check for EOF while reading forward to element
+data. Might solve Coverity CID 10305.</li>
+<li>coders/dib.c (ReadDIBImage): Resolve Coverity CID 10228 "Integer
+overflowed argument".
+(ReadDIBImage): Hopefully resolve Coverity CID 10268 "Various",
+which is primarily about placing too much trust in the claimed
+number of colors.</li>
+<li>coders/pnm.c (WritePNMImage): Fix overwrite of status by
+progress monitor. Remaining issues may lurk within. May resolve
+Coverity CID 10288.</li>
+<li>coders/pdb.c: Resolve Coverity CID 11173 "Buffer not null
+terminated".</li>
+</ul>
+</blockquote>
+<p>2015-01-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (GetMagickInfoArray): Resolve Coverity CID 10212
+"Missing unlock".</li>
+<li>magick/colormap.c (ReplaceImageColormap): Allocate new image
+colormap up front in order to avoid the possibility that we are
+left with an image with no colormap due to memory allocation
+failure. If there is a memory allocation failure, then the
+original colormap is preserved. Resolves Coverity CID 10194
+"Dereference after null check".</li>
+<li>magick/utility.c (MagickStripSpacesFromString): New private
+utility function to strip spaces from a string.</li>
+<li>magick/color_lookup.c (GetColorInfoArray): Resolves Coverity CID
+10231 "Missing unlock"
+(ReadColorConfigureFile): Resolves Coverity CID 10261 "Use of
+untrusted scalar value"
+(GetColorInfo): Resolves Coverity CID 10077 "Overlapping buffer in
+memory copy".</li>
+</ul>
+</blockquote>
+<p>2015-01-21 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOnePNGImage): Use png_error() instead of
+throwing an exception so cleanup in the setjmp block can happen,
+including unlocking the semaphore. Resolves Coverity CID 10232.</li>
+<li>coders/png.c (ReadOnePNGImage): Moved a logging statement into a
+block where "attribute" has been checked for NULL. Resolves
+Coverity CIDs 10185 and 10187.</li>
+<li>coders/png.c (ReadMNGImage): Fixed a cut-and-paste typo
+(change_delay should be change_timeout) reported by Coverity
+CID 10090.</li>
+</ul>
+</blockquote>
+<p>2015-01-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (CloneImage): The definition is poor as to what a
+non-orphan clone should do. However, the definition surely does
+not include crashing the software or supplanting the original
+image in an image list. Clone image blob and previous/next
+pointers but do not supplant original image in list. Resolves
+Coverity CID 10155.</li>
+</ul>
+</blockquote>
+<p>2015-01-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (WriteRowSamples): Ensure that callback function is
+always defined. Resolves Coverity CID 10122.
+(ReadRowSamples): Ensure that callback function is always
+defined. Resolves Coverity CID 10125.</li>
+<li>magick/random.c (InitializeMagickRandomKernel): Avoid possible
+double-close of file. Resolves Coverity CID 10257.</li>
+<li>coders/histogram.c (WriteHISTOGRAMImage): Avoid possible divide
+by zero exception. Resolves Coverity CID 10107.</li>
+<li>magick/error.c (MagickFatalError): Document that
+MagickFatalError() is not supposed to return (program must quit)
+and add GCC/Clang hints to that effect.</li>
+<li>magick/bit_stream.c (BitAndMasks): Avoid possible access
+one-beyond end of BitAndMasks array. It is not clear if there is
+a possible bug with 32-bit quantums. If there is a bug, it has
+not been noticed via testing. Resolves Coverity CID 10213.</li>
+<li>magick/tempfile.c (AcquireTemporaryFileDescriptor): Avoid buffer
+overrun in the case of an astonishingly long environment variable
+string. Resolves Coverity CID 10267.
+(AddTemporaryFileToList): Use strlcpy() rather than strlcpy(). In
+practice, should not make a difference. Will quiet Coverity CID
+10321.</li>
+<li>magick/command.c (GMCommandSingle): Don't use the address of a
+stack allocation to update argv[0]. Removed updating argv[0] until
+a better design can be found. Resolves Coverity CID 10223.
+(GMCommandSingle): Plan B: Use static allocation from
+SetClientName() to both store the new command name and provide
+storage for argv[0].</li>
+<li>magick/utility.c (SystemCommand): Fix possible overwrite of
+memory location due to uninitialized 'end' pointer. Resolves
+Coverity CID 10251.</li>
+<li>magick/blob.c (WriteBlobFile): Was not closing file in certain
+error conditions. Resolves Coverity CID 10237.</li>
+<li>coders/cineon.c (ReadCINEONImage): Don't trust file header so
+much. Resolves Coverity CIDs 10079, 10310, 10325.</li>
+<li>coders/art.c (ReadARTImage): Fix signed vs unsigned comparison
+caused by earlier changes.</li>
+</ul>
+</blockquote>
+<p>2014-01-17 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c Do not execute wpg raster read in ping mode.</li>
+</ul>
+</blockquote>
+<p>2014-01-15 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Properly deallocating zip structures.</li>
+</ul>
+</blockquote>
+<p>2015-01-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sfw.c (ReadSFWImage): Fix pixel cache access errors in
+'ping' mode.</li>
+</ul>
+</blockquote>
+<p>2015-01-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wmf.c (ReadWMFImage): Fix memory leak in 'ping' mode and
+some error paths.</li>
+</ul>
+</blockquote>
+<p>2015-01-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jbig.c (ReadJBIGImage): Fix memory leak in 'ping' mode.</li>
+<li>magick/delegate.c (InvokeDelegate): Fix memory leak of argument
+list when invoking external program via MagickSpawnVP().</li>
+</ul>
+</blockquote>
+<p>2015-01-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resource.c (InitializeMagickResources): Base image width
+and height default limits on the range of a 32-bit signed integer,
+even for 64-bit builds. These limits are still beyond what most
+computers in the world can handle. Limits can be increased by the
+user.</li>
+<li>coders/xwd.c (ReadXWDImage): Check image size limits
+immediately.</li>
+<li>coders/xc.c (ReadXCImage): Check image size limits immediately.</li>
+<li>coders/webp.c (ReadWEBPImage): Check image size limits
+immediately.</li>
+<li>coders/viff.c (ReadVIFFImage): Check image size limits
+immediately.</li>
+<li>coders/vicar.c (ReadVICARImage): Check image size limits
+immediately.</li>
+<li>coders/txt.c (ReadTXTImage): Check image size limits
+immediately.</li>
+<li>coders/ttf.c (ReadTTFImage): Check image size limits
+immediately.</li>
+<li>coders/tim.c (ReadTIMImage): Check image size limits
+immediately.</li>
+<li>coders/tiff.c (ReadTIFFImage): Check image size limits
+immediately.</li>
+<li>coders/tga.c (ReadTGAImage): Check image size limits
+immediately.</li>
+<li>coders/sgi.c (ReadSGIImage): Check image size limits
+immediately.</li>
+<li>coders/sct.c (ReadSCTImage): Check image size limits
+immediately.</li>
+<li>coders/rle.c (ReadRLEImage): Check image size limits
+immediately.</li>
+<li>coders/rla.c (ReadRLAImage): Check image size limits
+immediately.</li>
+<li>coders/psd.c (ReadPSDImage): Check image size limits
+immediately.</li>
+<li>coders/pnm.c (ReadPNMImage): Check image size limits
+immediately.</li>
+<li>coders/pix.c (ReadPIXImage): Check image size limits
+immediately.</li>
+<li>coders/pict.c (ReadPICTImage): Check image size limits
+immediately.</li>
+<li>coders/pdb.c (ReadPDBImage): Check image size limits
+immediately.</li>
+<li>coders/pcx.c (ReadPCXImage): Check image size limits
+immediately.</li>
+<li>coders/pcd.c (ReadPCDImage): Check image size limits
+immediately.</li>
+<li>coders/otb.c (ReadOTBImage): Check image size limits
+immediately.</li>
+<li>coders/null.c (ReadNULLImage): Check image size limits
+immediately.</li>
+<li>coders/mvg.c (ReadMVGImage): Check image size limits
+immediately.</li>
+<li>coders/mtv.c (ReadMTVImage): Check image size limits
+immediately.</li>
+<li>coders/mpc.c (ReadMPCImage): Check image size limits
+immediately.</li>
+<li>coders/miff.c (ReadMIFFImage): Check image size limits
+immediately.</li>
+<li>coders/jpeg.c (ReadJPEGImage): Check image size limits
+immediately.</li>
+<li>coders/jp2.c (ReadJP2Image): Check image size limits
+immediately.</li>
+<li>coders/jbig.c (ReadJBIGImage): Check image size limits
+immediately.</li>
+<li>coders/hdf.c (ReadHDFImage): Check image size limits
+immediately.</li>
+<li>coders/gif.c (ReadGIFImage): Check image size limits
+immediately.</li>
+<li>coders/fpx.c (ReadFPXImage): Check image size limits
+immediately.</li>
+<li>coders/fax.c (ReadFAXImage): Check image size limits
+immediately.</li>
+<li>coders/dpx.c (ReadDPXImage): Check image size limits
+immediately.</li>
+<li>coders/dps.c (ReadDPSImage): Check image size limits
+immediately.</li>
+<li>coders/dib.c (ReadDIBImage): Check image size limits
+immediately.</li>
+<li>coders/dcm.c (ReadDCMImage): Check image size limits
+immediately.</li>
+<li>coders/cut.c (ReadCUTImage): Check image size limits
+immediately.</li>
+<li>coders/cineon.c (ReadCINEONImage): Check image size limits
+immediately.</li>
+<li>coders/avs.c (ReadAVSImage): Check image size limits
+immediately.</li>
+<li>coders/art.c (ReadARTImage): Check image size limits
+immediately.</li>
+<li>coders/sun.c (ReadSUNImage): Check image size limits in advance
+of allocating memory for pixels.</li>
+<li>coders/bmp.c (ReadBMPImage): Check image size limits in advance
+of allocating memory for pixels.</li>
+<li>coders/sun.c (ReadSUNImage): There is no definition for Sun map
+type RMT_RAW so it can not be supported. Update DirectClass
+pixels directly rather using SyncImage(). Problem was reported by
+Jodie Cunningham.</li>
+</ul>
+</blockquote>
+<p>2015-01-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pict.c (ReadPICTImage): Fix PICT reader crash when
+reading corrupted file.</li>
+<li>coders/sun.c (ReadSUNImage): Sun reader was still not as robust
+as it should be. Now it is.</li>
+</ul>
+</blockquote>
+<p>2014-01-10 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c Fixed reading behind EOF issue.</li>
+</ul>
+</blockquote>
+<p>2015-01-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (LSBPackedU32WordToOctets): Fix typo which adds
+severe corruption to encoded little-endian 32-bit packed output.
+The good news is that since the corruption is severe, it is easily
+visually detected. The problem has corrupted all such
+(little-endian 10-bit) output since it was originally implemented
+on 2007-06-17 (changeset 11686, first released in GraphicsMagick
+1.1.8). GraphicsMagick preserves the endianness of input DPX
+files by default, defaults to big-endian, and DPX files are
+commonly big-endian, so this problem may not have occured for many
+usages. Problem was reported by Steve Dabner on the
+GraphicsMagick discussion mailing list.</li>
+</ul>
+</blockquote>
+<p>2015-01-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (MagickPanicSignalHandler): Print a message in
+the case of signals SIGXCPU and SIGXFSZ.</li>
+<li>coders/bmp.c (ReadBMPImage): Don't hang in endless loop if EOF
+is encountered while checking for "BA" header.</li>
+<li>coders/icon.c (ReadIconImage): Limit icon image allocation size.</li>
+</ul>
+</blockquote>
+<p>2015-01-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/icon.c (ReadIconImage): Removed all of the
+previously-existing DIB reading code from icon.c and use new
+"ICODIB" reader to read DIB icons, or the PNG reader to read PNG
+icons.</li>
+<li>coders/dib.c (ReadDIBImage): Added an "ICODIB" coder for
+internal use which reads a Windows BMP 3 DIB followed by a Windows
+ICO alpha mask. This allows existing DIB code to be used to read
+ICO directory entries.</li>
+</ul>
+</blockquote>
+<p>2015-01-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/icon.c: The Windows ICO reader is now more robust. Still
+a work in progress since some files still can not be read or read
+incorrectly.</li>
+</ul>
+</blockquote>
+<p>2015-01-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resource.c (ListMagickResourceInfo): "kilo" for binary
+prefixes is supposed to be "Ki".</li>
+<li>magick/utility.c (FormatSize): "kilo" for binary prefixes is
+supposed to be "Ki".</li>
+</ul>
+</blockquote>
+<p>2015-01-01 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Use WidthResource and HeightResource instead
+of fixed 1-million limit for rows and columns.</li>
+</ul>
+</blockquote>
+<p>2015-01-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (FormatSize): Add 'i' to value range
+identifiers since these are all in units of 2^10 rather than 1000.</li>
+<li>magick/pixel_cache.c (CheckImagePixelLimits): Fix typo and
+produce an informative error message.</li>
+<li>magick/resource.c: Added support for Image width and height
+pixels resource limits.</li>
+<li>magick/resource.h (ResourceType): New resource enumerations
+WidthResource and HeightResource.</li>
+<li>magick/enum_strings.c (StringToResourceType): Added support for
+parsing '-limit Width' and '-limit Height'.</li>
+<li>magick/pixel_cache.c (CheckImagePixelLimits): New function to
+test image to see if it exceeds pixels limits.</li>
+<li>coders/viff.c (ReadVIFFImage): Make the VIFF reader robust with
+detecting and reporting problems.</li>
+</ul>
+</blockquote>
+<p>2014-12-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Rotate Changelog for new year. Update documentation copyrights
+for new year.</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>ChangeLog-2016.rst</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2016-12-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pnm.c (WritePNMImage): Support writing GRAYSCALE PAM
+format. Before this fix, grayscale output was marked as type
+BLACKANDWHITE. Problem was reported by Aaron Boxer via email on
+December 31, 2016.</li>
+<li>TclMagick/generic/Makefile.am: Applied patch by Massimo Manghi
+(plus some fixes by me) to add a 'libttkcommon' shared library to
+contain codde common to the TclMagick/TkMagick loadable modules,
+and particularly to allow TkMagick to access TclMagick functions
+without depending on dlopen() with RTLD_GLOBAL behavior.</li>
+</ul>
+</blockquote>
+<p>2016-12-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/compare.c (DifferenceImage): Fix all-black difference
+image if an input file is colormapped. Resolves SourceForge issue
+#404 "Difference file does not work if PNG ".</li>
+</ul>
+</blockquote>
+<p>2016-12-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul>
+<li><p class="first">coders/txt.c (ReadTXTImage): Fix Coverity issue 55866 "Resource
+leak".</p>
+</li>
+<li><p class="first">magick/enum_strings.c (StringToCompositeOperator): Fix Coverity
+issue 139296 "Constant expression result".</p>
+</li>
+<li><p class="first">magick/channel.c (ImportImageChannelsMasked): Fix Coverity issue
+139297 "Constant expression result". This was a bug but only in
+terms of reduced performance, not results.</p>
+</li>
+<li><p class="first">Magick++/lib/Drawable.cpp
+(PathSmoothCurvetoRel::operator): Fix Coverity issue 139301 "Using
+invalid iterator".
+(PathSmoothCurvetoRel::operator): Fix Coverity issue 139302 "Using
+invalid iterator"</p>
+</li>
+<li><p class="first">magick/attribute.c: From SourceForge patches #47
+"GraphicsMagick-1.3.25-get-exif-attribute-gps-fix.patch" and
+"GraphicsMagick-1.3.25-set-exif-orientation-fix.patch" by Troy
+Patteson with description (related to provided Coverity reports in
+coverity.txt): Those coverity errors indicate a problem with the
+earlier patch I sent you to fix getting the EXIF orientation when
+the GPS IFD occurs before the EXIF IFD. Although the patch fixed
+that issue it introduced a new issue in that GPS tags could no
+longer be retrieved. This occurs because the gpsfound flag is set
+when the GPS IFD is pushed onto the stack but then cleared
+immediately when breaking out of the loop processing the directory
+entries for the current IFD. The solution is to push the gpsfound
+flag onto the stack as well as it needs to be set when the GPS IFD
+is popped off the stack rather than being set straight away.</p>
+<p>The second coverity error relates to gpsoffset not being set in
+FindEXIFAttribute(). The code that sets gpsoffset in
+GenerateEXIFAttribute() was embedded in the code that gets tags
+values which was removed in FindEXIFAttribute() as only the DE
+offset is required. I have removed the need for gpsoffset and just
+computed the GPS IFD offset when pushing it onto the stack in the
+same way the EXIF IFD offset is computed.</p>
+</li>
+</ul>
+</blockquote>
+<p>2016-12-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul>
+<li><p class="first">magick/attribute.c: From SourceForge patches #47
+"GraphicsMagick-1.3.25-5-set-exif-orientation.patch" by Troy
+Patteson with description: Rotating an image without resetting the
+EXIF orientation tag is problematic as follow-on viewers that
+support the EXIF orientation tag may incorrectly rotate the image
+a second time. For JPEG images, the current solution is to either
+strip the image, remove the EXIF profile or modify the EXIF data
+of the written image with other software. This patch adds the
+ability to set the orientation tag in the EXIF profile via the
+SetImageAttribute on attribute EXIF:Orientation provided the EXIF
+orientation already exists. AutoOrientImage() has been modified to
+set the EXIF orientation tag on successful rotation of the image.</p>
+<p>The implementation is less than ideal. The EXIF profile must be
+duplicated because it is returned read-only from the profiles
+map. Large amounts of the GenerateEXIFAttribute() function has
+been duplicated in a function called FindEXIFAttribute() which
+returns the offset in the EXIF profile of a given tag ID. Once
+found, the orientation tag value is updated accordingly and the
+new EXIF profile set. Despite the patches shortcomings, I believe
+it is preferable to leaving the EXIF orientation tag unchanged
+after auto-orienting the image.</p>
+</li>
+<li><p class="first">wand/magick_wand.c (MagickClearException): From SourceForge
+patches #47 "GraphicsMagick-1.3.25-1-wand-clear-exception.patch"
+by Troy Patteson with description: This patch adds the ability to
+clear the last Wand exception. This is particularly useful to
+clear any exception on the Wand before calling MagickReadImage()
+which can return success with a warning exception such as "JPEG
+data: premature end of data segment".
+(MagickRemoveImageOption): From SourceForge patches #47
+"GraphicsMagick-1.3.25-2-wand-remove-image-option.patch" by Troy
+Patteson with description: There is MagickSetImageOption() to set
+options like JPEG preserve-settings but no way to remove the
+option once set. Since the mechanism to remove image options
+already exists in lower-level API there seems no reason not to
+expose it in the Wand API.
+(MagickGetImageOrientation, MagickSetImageOrientation): From
+SourceForge patches #47
+"GraphicsMagick-1.3.25-3-wand-get-set-orientation.patch" by Troy
+Patteson with description: MagickGetImageOrientation returns the
+internal orientation setting which is useful to know to determine
+whether an image needs rotation. The function to set the
+orientation is less useful as it only sets the internal
+orientation setting which is only used when writing out TIFF
+files. A future patch addresses this issue.
+(MagickAutoOrientImage): From SourceForge patches #47
+"GraphicsMagick-1.3.25-4-wand-auto-orient.patch" by Troy Patteson
+with description: This patch adds auto-orient image to the Wand
+API.</p>
+</li>
+</ul>
+</blockquote>
+<p>2016-12-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>TclMagick/{configure.ac, Makefile.am}: Applied patches by
+Massimo Manghi to use TEA tcl.m4 version 3.9.</li>
+</ul>
+</blockquote>
+<p>2016-11-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/gif.c (DecodeImage): Applied fixes by Tianyu Lang for
+"Excessive LZW string data" problem leading to "Corrupt image"
+report while reading some GIF files.</li>
+</ul>
+</blockquote>
+<p>2016-11-18 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc, doc/config_files.imdoc, doc/benchmark.imdoc:
+Fixed some indentation in the documentation.</li>
+</ul>
+</blockquote>
+<p>2016-10-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>acinclude.m4 (LIBS): Fix memory leaks in GM_FUNC_MMAP_FILEIO
+macro test-case so that it can be used successfully with ASAN
+compilation options.</li>
+<li>magick/blob.c: Eliminate unused variable compiler warnings when
+HAVE_MMAP_FILEIO is not defined.</li>
+</ul>
+</blockquote>
+<p>2016-10-24 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Ability to read multiple images from Matlab V4 format.</li>
+</ul>
+</blockquote>
+<p>2016-10-21 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<p>*coders/png.c (ReadOneJNGImage): Enforce spec requirement that the
+dimensions of the JPEG embedded in a JDAT chunk must match the
+JHDR dimensions. This issue was assigned CVE-2016-9830 on
+2016-12-04. Please note that GraphicsMagick's pixel, width, and
+height default limits are often greater than the dimension limits
+of JNG and JPEG so the user should add explicit limits (if needed)
+to prevent unexpected memory consumption from properly-constructed
+JNG files with large dimensions.</p>
+<p>*doc/options.imdoc (-strip): Added a caution to not use the -strip
+option to remove author, copyright, and license information
+when redistributing an image that requires them to be retained.</p>
+<p>*doc/options.imdoc (-comment and -label): Document the fact that
+only one comment or label is stored, and how they are stored in
+PNG files.</p>
+</blockquote>
+<p>2016-10-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sgi.c (ReadSGIImage): Adjusts some variable types and
+lessen the amount of casting.</li>
+</ul>
+</blockquote>
+<p>2016-10-09 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadJNGImage): Quiet COVERITY issue about
+a potential memory leak.</li>
+</ul>
+</blockquote>
+<p>2016-10-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xcf.c (ReadXCFImage): Fix memory leak of layer_info for
+some recently added error-return paths.</li>
+</ul>
+</blockquote>
+<p>2016-10-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sgi.c (ReadSGIImage): For RLE SGI image, defer memory
+allocations for as long as possible and allow the file to prove
+itself worthy before making the largest allocations. This helps
+with rejecting bogus RLE files while avoiding rejecting valid
+files.</li>
+</ul>
+</blockquote>
+<p>2016-10-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): If TIFF uses Old JPEG
+compression, then read using full tiles or strips. Solves
+"Improper call to JPEG library in state 0. (LibJpeg)." error.
+Problem was reported via email on October 6, 2016 by John Brown.</li>
+</ul>
+</blockquote>
+<p>2016-10-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (GenerateEXIFAttribute): Fixed SourceForge
+bug 400 "Exif orientation unknown for some JPEG files". Patch
+submitted by Troy Patteson.</li>
+</ul>
+</blockquote>
+<p>2016-10-02 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c Add sanity check for palette. Merge
+RemoveLastImageFromList+AppendImageToList to ReplaceImageInList.
+Possible heap overflow of colormap in Q8 build was assigned
+CVE-2016-7996. Assertion crash due to blob != NULL was assigned
+CVE-2016-7997.</li>
+</ul>
+</blockquote>
+<p>2016-10-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/meta.c (parse8BIM): Fix unsigned underflow leading to
+heap overflow when parsing 8BIM chunk. Problem was reported by
+Marco Grassi via email on October 1, 2016. Problem was already
+known (but not fixed) based on comments in the code. This issue
+has been assigned CVE-2016-7800.</li>
+</ul>
+</blockquote>
+<p>2016-09-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xcf.c: Improve the robustness of the XCF reader by adding
+more error checking.</li>
+</ul>
+</blockquote>
+<p>2016-09-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/rle.c (RLEConstrainColormapIndex): Was not constraining
+colormap index like it should be. This problem was added on
+2016-09-23.</li>
+<li>www/thanks.rst: Added Moshe Kaplan to Thanks.</li>
+<li>www/Hg.rst: Mercurial URL fixes. Patch from Mark Mitchell.</li>
+<li>www/programming.rst: Updated programming APIs page.</li>
+</ul>
+</blockquote>
+<p>2016-09-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (OpenCache): Trace ExtendCache() failures.</li>
+</ul>
+</blockquote>
+<p>2016-09-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sgi.c (ReadSGIImage): Fix unexpectedly large memory
+allocation with corrupt SGI file provided via email by Agostino
+Sarubbo on September 15, 2016.</li>
+<li>coders/rle.c (ReadRLEImage): Only report an invalid colormap
+index once. Fixes slowness problem with corrupt file provided via
+email by Agostino Sarubbo on September 15, 2016.</li>
+</ul>
+</blockquote>
+<p>2016-09-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/thanks.rst: Added a 'thanks' page.</li>
+</ul>
+</blockquote>
+<p>2016-09-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/MANIFEST: Fix content of PerlMagick MANIFEST.</li>
+</ul>
+</blockquote>
+<p>2016-09-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pcx.c (ReadPCXImage): Check that filesize is reasonable
+given header. Fixes excessive memory allocation followed by
+eventual file truncation error for corrupt file. Problem was
+reported via email by Agostino Sarubbo on 2016-09-10.</li>
+<li>coders/sgi.c (ReadSGIImage): Check that filesize is reasonable
+given header. Fixes excessive memory allocation followed by
+eventual file truncation error for corrupt file. Problem was
+reported via email by Agostino Sarubbo on 2016-09-09.</li>
+<li>coders/sct.c (ReadSCTImage): Fix stack-buffer read overflow
+while reading SCT header. Problem was reported via email by
+Agostino Sarubbo on 2016-09-09.</li>
+<li>coders/svg.c: Fix Coverity issue 135772 "RESOURCE_LEAK" and
+issue 135829 "Null pointer dereferences". None of these issues
+were new, but Coverity noticed them now. Reflowed source to GNU C
+style for consistent indentation and so it does not fight with my
+editor.</li>
+</ul>
+</blockquote>
+<p>2016-09-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/common.h (MAGICK_HAS_ATTRIBUTE): Coverity is allergic to
+__has_attribute() so don't use it for Coverity builds.</li>
+</ul>
+</blockquote>
+<p>2016-09-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/index.rst: Update for 1.3.25 release.</li>
+<li>version.sh: Update library versioning for 1.3.25 release.</li>
+<li>NEWS.txt: Make sure is up to date.</li>
+<li>Various fixes for minor issues noticed when compiling under
+Visual Studio.</li>
+</ul>
+</blockquote>
+<p>2016-08-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/studio.h (MAGICK_CACHE_LINE_SIZE): Apply patch from
+Gentoo Linux to increase MAGICK_CACHE_LINE_SIZE to 128 when
+__powerpc__ is defined.</li>
+</ul>
+</blockquote>
+<p>2016-08-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Updated with latest changes.</li>
+</ul>
+</blockquote>
+<p>2016-08-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/rle.c (ReadRLEImage): Reject truncated/absurd Utah RLE
+files. Problem was reported by Agostino Sarubbo on August 19,
+2016. This problem was assigned CVE-2016-7448 after the 1.3.25
+release.</li>
+</ul>
+</blockquote>
+<p>2016-08-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Fix heap-based buffer read
+overflow. TIFF sized attibutes were not being properly copied to
+a null-terminated string if the value was not null terminated.
+Problem was reported by Agostino Sarubbo on August 18, 2016. This
+problem was assigned CVE-2016-7449 after the 1.3.25 release.</li>
+</ul>
+</blockquote>
+<p>2016-08-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lcms/src/cmstypes.c (Type_MLU_Read): "Added an extra check to
+MLU bounds", change based on github mm2/Little-CMS commit
+5ca71a7bc18b6897ab21d815d15e218e204581e2 and announced to the
+oss-security list by Ibrahim M. El-Sayed on Mon, 15 Aug 2016.</li>
+</ul>
+</blockquote>
+<p>2016-08-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>webp: Updated bundled libwebp to release 0.5.1.</li>
+<li>libxml: Updated bundled libxml2 to release 2.9.4.</li>
+<li>lcms: Updated bundled lcms2 to release 2.8.</li>
+<li>png: Update bundled libpng to release 1.6.24.</li>
+<li>coders/jpeg.c (ReadJPEGImage): Log setting resolution and
+resolution units due to JFIF marker.</li>
+<li>coders/sgi.c (SGIDecode): Fix integer overflow of size type in
+Win64 build where sizeof(long) < sizeof(size_t).</li>
+</ul>
+</blockquote>
+<p>2016-08-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders, magick: Compile clean using GCC with -std=c90.</li>
+<li>magick/describe.c (DescribeImage): The 'identify' and 'info'
+functionality only shows the pixel read rate if image was not read
+in 'ping' mode. Provide seconds timing with 6 digits of precision
+since that is what is needed.</li>
+</ul>
+</blockquote>
+<p>2016-08-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/describe.c (DescribeImage): Include milliseconds
+resolution in elapsed time output.</li>
+<li>magick/timer.c (ElapsedTime): Use clock_gettime() (when
+available with default linkage) to obtain elapsed time.</li>
+</ul>
+</blockquote>
+<p>2016-08-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/yuv.c (WriteYUVImage): Fix benign clang compiler warning
+regarding "variable 'x' is incremented both in the loop header and
+in the loop body".</li>
+<li>configure.ac: Fixes to use clang's OpenMP runtime library
+(-lomp) for clang 3.8 and later. Specifically tested with clang
+3.8 on Ubuntu 16.04 'xenial'. Problem was reported by Holger
+Hoffstätte via private email.</li>
+<li>NEWS.txt: Bring up to date with latest changes.</li>
+</ul>
+</blockquote>
+<p>2016-07-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Reject abnormally absurd gradient
+size requests (many absurd requests are still allowed). Provide
+detailed error reports when a gradient is rejected.</li>
+<li>coders/svg.c: Support units for 'stroke-dashoffset'.</li>
+</ul>
+</blockquote>
+<p>2016-07-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/annotate.c (EscapeParenthesis): In private email on
+2016-07-07, Gustavo Grieco notified us of a heap overflow in
+EscapeParenthesis(). I was not able to reproduce the issue but
+changed the implementation with the suspicion that the
+implementation has a bug, and due to noticing arbitary limits and
+inefficiency. This issue was assigned CVE-2016-7447 after the
+1.3.25 release.</li>
+</ul>
+</blockquote>
+<p>2016-07-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Fix absolute and arbitrary gradient
+dimension sanity checks which caused gradient requests to fail.
+Resolves SourceForge issue #392 "SVG 'push defs' fails (Debian
+bugs 829063 and 828120)".</li>
+</ul>
+</blockquote>
+<p>2016-06-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/security.rst: Add discussion of SVG format and SSRF
+vulnerability.</li>
+</ul>
+</blockquote>
+<p>2016-06-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (ReadSVGImage): Assure that SVGInfo data is freed
+when XMP parsing is aborted due to an error.</li>
+</ul>
+</blockquote>
+<p>2016-06-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Updated NEWS with changes since last release.</li>
+<li>www/security.rst: Add a page about GraphicsMagick security.</li>
+</ul>
+</blockquote>
+<p>2016-06-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawPrimitive): Over-aggressive error reporting
+was causing failures when elements were "drawn" off-image.
+Resolves SourceForge issue #389 "Non-conforming drawing primitive
+definition (line)".</li>
+</ul>
+</blockquote>
+<p>2016-05-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Fix problem while reading file
+"tnamkejarz.svg.2532308010849170049" provided via private email
+from Gustavo Grieco on May 31, 2016.</li>
+<li>magick/utility.c (MagickGetToken): Fix problem while reading
+file "vqxwatmqmi.svg.-3669039972557308254" provided via private
+email from Gustavo Grieco on May 31, 2016.</li>
+</ul>
+</blockquote>
+<p>2016-05-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update for 1.3.24 release.</li>
+<li>www/Changes.rst: Mention 1.3.24 release.</li>
+<li>www/index.rst: Update for 1.3.24 release.</li>
+<li>version.sh: Update library ABI information in preparation for
+1.3.24 release.</li>
+<li>NEWS.txt: Updated NEWS to reflect fixes and issues.</li>
+</ul>
+</blockquote>
+<p>2016-05-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Updated with latest news.</li>
+<li>magick/blob.c (OpenBlob): Remove support for reading input from
+a shell command, or writing output to a shell command, by
+prefixing the specified filename (containing the command) with a
+'|'. This feature provided a remote shell execution opportunity
+(CVE-2016-5118).</li>
+<li>coders/mat.c (ReadMATImage): Validate that MAT frames is not
+zero.</li>
+</ul>
+</blockquote>
+<p>2016-05-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Be less optimistic when estimating
+the number of points required to represent a path. This should
+help address CVE-2016-2317 "Heap buffer overflow". This resolves
+SourceForge issue #275 "Applying Clipping Path to high resolution
+JPG".</li>
+</ul>
+</blockquote>
+<p>2016-05-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Fix problem while reading file
+"pxypjhfdxf.svg.7406476585885697806" provided via via private
+email from Gustavo Grieco on May 24, 2016.</li>
+<li>coders/svg.c: Fix problem while reading file
+"pxypjhfdxf.svg.308008972284643989" provided via private email
+from Gustavo Grieco on May 24, 2016.</li>
+</ul>
+</blockquote>
+<p>2016-05-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c ("C"): Support font-size "medium".</li>
+</ul>
+</blockquote>
+<p>2016-05-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Updated NEWS.txt to reflect latest changes.</li>
+<li>magick/render.c (DrawImage): Added DrawImage() recursion
+detection/prevention.</li>
+<li>coders/svg.c (ReadSVGImage): Add basic primitive argument
+validation.</li>
+<li>magick/render.c (DrawImage): Add basic primitive argument
+validation.</li>
+</ul>
+</blockquote>
+<p>2016-05-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/url.c (ReadURLImage): Reading "<a class="reference external" href="file://">file://</a>" URLs was not
+working. Now file URLs are working.</li>
+</ul>
+</blockquote>
+<p>2016-05-21 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Respect JPEG limits (65535x65535) and user width
+and height limits from "-limit" while reading or writing JNG files.</li>
+</ul>
+</blockquote>
+<p>2016-05-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/url.c: Don't hide HTTP, FTP, and FILE URL support from
+'-list format' output. Ignore HTTP, FTP, and FILE as a useful
+file extension for determing the file format.</li>
+</ul>
+</blockquote>
+<p>2016-05-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (ConvertPathToPolygon): Make sure that first
+edge is initialized. Make sure that points is not null.</li>
+</ul>
+</blockquote>
+<p>2016-05-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Fixed segmentation violation while
+reading file "275077586554139424.lqxdgqxtfs.svg" provided via
+private email from Gustavo Grieco on May 15, 2016. This is due to
+another CVE-2016-2317 related issue.</li>
+</ul>
+</blockquote>
+<p>2016-05-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c ("C"): Fixed problems while reading files
+"aaphrbkwwe.svg.-1899680443073025602",
+"aaphrbkwwe.svg.-5751004588641220738",
+"aaphrbkwwe.svg.-8875730334406147537", and
+"aaphrbkwwe.svg.4495884156523242589" provided via private email
+from Gustavo Grieco on February 8, 2016.</li>
+</ul>
+</blockquote>
+<p>2016-05-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dib.c (ReadDIBImage): Verify that DIB file data is
+sufficient to meet claims made by file header. Validate image
+planes. Fixes Fixes problem reported by Hanno Böck on May 8th,
+2016 via private email entitled "malloc issue in ReadDIBImage".</li>
+</ul>
+</blockquote>
+<p>2016-05-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/msl.c (RegisterMSLImage): Ignore the file extension on
+MSL files. The only way to read an image from a MSL file (as
+opposed to explicitly running a MSL script with 'conjure') is by
+reading using a filename specification like "msl:filename". This
+is done for security reasons.</li>
+<li>magick/render.c (DrawPrimitive): Fix Coverity issue 126378
+"Resource leak".</li>
+<li>coders/mat.c (DecompressBlock): Fix Coverity issue 126379
+"Resource leak".</li>
+<li>magick/render.c (DrawImage): Fix Coverity issue 126380 "Resource
+leak".</li>
+</ul>
+</blockquote>
+<p>2016-05-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawPrimitive): Sanity check the image file
+path or URL before passing it to ReadImage().</li>
+<li>config/delegates.mgk.in: Pare down delegates.mgk to reduce
+security exposure due to external programs not under our control.</li>
+</ul>
+</blockquote>
+<p>2016-05-08 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Typo fix - matrix has nothing to do with PostScript.</li>
+</ul>
+</blockquote>
+<p>2016-05-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c (DecompressBlock): Don't hang on a corrupt deflate
+stream when reading matlab v6 file. Fixes problem reported by
+Hanno Böck on May 8, 2016 via private email entitled "hang of
+matlab input file".</li>
+</ul>
+</blockquote>
+<p>2016-05-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageInfo): Undocumented "TMP" magick prefix
+no longer removes the argument file after it has been read. This
+functionality is only used to support the "show" delegate which is
+used by options in the 'display' program which need to display a
+generated image in a new instance of 'display'. The "show"
+delegate is used by writing a temporary file to be viewed, and
+which should be removed before the program quits. Since the "TMP"
+feature was originally implemented, GraphicsMagick added a
+temporary file management subsystem which assures that temporary
+files are removed so this feature is not needed.</li>
+<li>coders/tiff.c (ReadTIFFImage): Fix heap overflow with file
+"gkkxrilssm.tiff.-4678010562506843336" provided by Gustavo Grieco
+on February 8, 2006 via private email.</li>
+<li>coders/viff.c (ReadVIFFImage): Fix problem with a very large
+malloc in sample file provided by Hanno Böck on May 7, 2016 with
+subject "large malloc in ReadVIFFImage".</li>
+<li>coders/mvg.c (RegisterMVGImage): Do not auto-detect MVG format
+based on file extension. MVG files can then only be read by
+adding a "MVG:" prefix to the file name. There is already no
+auto-detection of MVG based on content.</li>
+</ul>
+</blockquote>
+<p>2016-05-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xpm.c (ReadXPMImage): Limit the number of XPM colors and
+assure array initialization. Fixes bad behavior with a sample
+file provided by Hanno Böck on May 6, 2016 with subject "Invalid
+free in ReadXPMImage".</li>
+<li>coders/pcx.c (ReadPCXImage): Limit the number of PCX image
+planes allowed. Fixes an unreasonable memory allocation in a
+sample file provided by Hanno Böck on May 5, 2016.</li>
+</ul>
+</blockquote>
+<p>2016-05-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>config/delegates.mgk.in: Gnuplot files are inherently insecure.
+Remove delegates support for reading them. Reported by John
+Lightsey via private email.
+Added -dSAFER to Ghostscript invokations in delegates.mgk for more
+secure execution. Reported by David Chan via SourceForge bug
+"#386 ghostscript delegates should explicitly use -dSAFER.".</li>
+<li>magick/constitute.c (ReadImages): Avoid possible infinite
+ReadImage() recursion.</li>
+</ul>
+</blockquote>
+<p>2016-05-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawPolygonPrimitive): Fix divide by zero
+exception encountered while reading file "sigfpe.svg" posted by
+Gustavo Grieco on May 1, 2016 to the oss-security mailing list
+with subject "CVE request: DoS in multiple versions of
+GraphicsMagick".
+(DrawDashPolygon): Fix endless loop problem caused by negative
+stroke-dasharray arguments. Resolves problem observed while
+reading file "circular.svg" posted by Gustavo Grieco on May 1,
+2016 to the oss-security mailing list with subject "CVE request:
+DoS in multiple versions of GraphicsMagick".</li>
+<li>magick/import.c (ImportViewPixelArea): Fix assertion while
+reading TIFF file gkkxrilssm.tiff.105123337066 provided by Gustavo
+Grieco.</li>
+</ul>
+</blockquote>
+<p>2016-04-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/locale.c (ReadLOCALEImage): Make sure to close blob
+before returning.</li>
+<li>coders/svg.c ("C"): Provide a hack work-around for double-quoted
+font-family argument.</li>
+<li>magick/render.c (DrawImage): Make SVG path and other primitive
+parsing more robust. Fixes SEGV when reading files provided by
+CVE-2016-2318 test cases. Fixes CVE-2016-2318 completely.</li>
+</ul>
+</blockquote>
+<p>2016-04-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Fix heap buffer overflow when
+reading aaphrbkwwe.svg.-1114777018469422437 from CVE-2016-2317
+test cases. This resolves CVE-2016-2317 completely.</li>
+</ul>
+</blockquote>
+<p>2016-04-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MogrifyImageCommand): Added mogrify
+-preserve-timestamp option to preserve file access and
+modification timestamps. Contributed by Niko Rosvall via
+SourceForge patch #45 "preserve-timestamp option for mogrify
+command."</li>
+</ul>
+</blockquote>
+<p>2016-04-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c: Added ReadBlobLSBSignedShort(),
+ReadBlobMSBSignedShort(),
+ReadBlobLSBSignedLong(),ReadBlobMSBSignedLong(),
+WriteBlobLSBSignedShort(), WriteBlobLSBSignedLong(),
+WriteBlobMSBSignedLong(), WriteBlobMSBSignedShort() for doing I/O
+on signed integer types without the need for dangerous casts or
+unexpected values due to signed/unsigned conversion.</li>
+</ul>
+</blockquote>
+<p>2016-04-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Updated with latest changes.</li>
+<li>magick/constitute.c (ReadImage): Added asserts to check that the
+I/O blob is not still open in the returned image since this causes
+problems.</li>
+<li>magick/blob.c (CloneBlobInfo): Use a cloning approach which does
+not require manually keeping structure members in sync.</li>
+<li>coders/msl.c (ProcessMSLScript): Need to close I/O blob before
+returning.</li>
+<li>coders/psd.c (ReadPSDImage): Assure that allocated image is not
+dereferenced before checking if it is NULL. Check some memory
+calculations for overflow.
+(ReadPSDImage): Need to close I/O blob before returning.</li>
+<li>coders/dib.c (ReadDIBImage): Use DestroyBlob() rather than
+DestroyBlobInfo().</li>
+<li>coders/bmp.c (ReadBMPImage): Use DestroyBlob() rather than
+DestroyBlobInfo().</li>
+<li>magick/blob.c: Improve blob tracing.</li>
+</ul>
+</blockquote>
+<p>2016-04-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (ReadBMPImage): Fix reading 24-bit Microsoft BMP
+which claims to have a colormap.</li>
+</ul>
+</blockquote>
+<p>2016-04-13 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/input_complex_lsb_double_V4.mat Demo Matlab V4
+complex file.</li>
+<li>coders/mat.c Missing break added.</li>
+</ul>
+</blockquote>
+<p>2016-04-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xpm.c (ReadXPMImage): Fix SourceForge issue #361
+"out-of-bounds read in coders/xpm.c:150:24"</li>
+<li>coders/psd.c (ReadPSDImage): Add some defensive code to assure
+that image layers are not freed twice.</li>
+</ul>
+</blockquote>
+<p>2016-04-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/log.c (InitializeLogInfo): Simplify LogInfo structure and
+its allocation in order to lessen the amount of fixed overhead.</li>
+</ul>
+</blockquote>
+<p>2016-04-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jp2.c (WriteJP2Image): Fix SourceForge issue #378 "jp2:
+impossible to create lossless jpeg-2000". With this fix,
+specifying 'define jp2:rate=1.0' or '-quality 100' results in a
+lossless JP2 file.</li>
+</ul>
+</blockquote>
+<p>2016-04-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/common.h: Update for GCC 5.</li>
+<li>PerlMagick/MANIFEST: Update PerlMagick manifest.</li>
+<li>PerlMagick/t/{read.t, write.t}: Add tests for MAT v4.</li>
+</ul>
+</blockquote>
+<p>2016-04-03 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Matlab V4 attempt to read complex part of data.</li>
+</ul>
+</blockquote>
+<p>2016-04-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/features.pl.in: Provide a way that PerlMagick
+feature tests can test if a feature is supported. Use it to make
+the PSD test optional.</li>
+<li>coders/Makefile.am: Only build PSD module if
+ENABLE_BROKEN_CODERS is enabled.</li>
+<li>magick/module.c (UnloadModule): Only invoke the module
+unregister function if it is defined. The module register
+function is not defined if either the register or unregister
+functions were not found in the module which was loaded.</li>
+</ul>
+</blockquote>
+<p>2016-04-02 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li><dl class="first docutils">
+<dt>coders/mat.c Matlab V4 files are also rotated.</dt>
+<dd>* PerlMagick/t/input_gray_lsb_double_V4.mat Demo Matlab V4 file.</dd>
+</dl>
+</li>
+</ul>
+</blockquote>
+<p>2016-04-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (GetMagickInfo): Only declare that ExceptionInfo
+argument is not used if modules are not supported.</li>
+</ul>
+</blockquote>
+<p>2016-03-28 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Attempt to read Matlab V4 files.</li>
+</ul>
+</blockquote>
+<p>2016-03-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (DestroyImage): Simply return if image is NULL
+since it is more user-friendly.</li>
+<li>magick/shear.c (RotateImage): Fix Coverity issue 124519
+"Logically dead code".</li>
+<li>magick/effect.c (BlurImage): Fix Coverity issue 124520
+"Dereference after null check".</li>
+<li>coders/pdb.c (WritePDBImage): Fix SourceForge bug #360
+"out-of-bounds read in utilities/gm+0x80fcc71) (PDB reader)".</li>
+<li>coders/meta.c (convertHTMLcodes): Fix SourceForge bug #373
+"out-of-bounds read in coders/meta.c:444:50"
+(ReadMETAImage): Fix SourceForge bug #364 "out-of-bounds write in
+coders/meta.c:1331:7".</li>
+</ul>
+</blockquote>
+<p>2016-03-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sgi.c (ReadSGIImage): Fix SourceForge bug #366
+"out-of-bounds write in coders/sgi.c:528:4" and bug #369
+"out-of-bounds write in coders/sgi.c:535:4".</li>
+<li>coders/rle.c (ReadRLEImage): Fix SourceForge bug #371
+"out-of-bounds read in coders/rle.c:633:39".</li>
+</ul>
+</blockquote>
+<p>2016-03-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dib.c (ReadDIBImage): Fix SourceForge bug #367
+"out-of-bounds read in coders/dib.c:706:13" and bug #370
+"out-of-bounds read in coders/dib.c:716:15".</li>
+<li>coders/pict.c (ReadPICTImage): Fix SourceForge bug #365
+"out-of-bounds read in magick/image.c:1305:3"</li>
+<li>magick/utility.c (GetPageGeometry): Fix SourceForge bug #374
+"out-of-bounds write in magick/utility.c:4355:7"</li>
+</ul>
+</blockquote>
+<p>2016-03-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (ReadMIFFImage): Fix SourceForge bug #376 "SIGABRT
+in magick/colorspace.c:1052".</li>
+<li>magick/shear.c (RotateImage): Fix SourceForge bug #375 "SIGABRT
+in magick/image.c:1230".</li>
+<li>coders/sun.c (DecodeImage): Fix SourceForge bug #368
+"out-of-bounds read in coders/sun.c:223:17" and bug #363
+"out-of-bounds read in coders/sun.c:221:16".</li>
+</ul>
+</blockquote>
+<p>2016-03-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (GetUserSpaceCoordinateValue): Fix stack buffer
+overflow when reading file 'aaphrbkwwe.svg.-632425326915265752'
+from CVE-2016-2317 problem files. Partial fix for SourceForge bug
+#358 "CVE-2016-2317 - SVG heap/stack buffer overflows".</li>
+<li>magick/utility.c (MagickGetToken): New private function to
+replace GetToken(). The new function accepts a token buffer
+length argument. GetToken() is modified to assume a token buffer
+length 'MaxTextExtent'. All code using GetToken() is updated to
+use MagickGetToken().</li>
+<li>coders/svg.c: Fix heap buffer overflow when reading file
+"aaphrbkwwe.svg.4495884156523242589" from CVE-2016-2317 problem
+files. Partial fix for SourceForge bug #358 "CVE-2016-2317 - SVG
+heap/stack buffer overflows".</li>
+</ul>
+</blockquote>
+<p>2016-03-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/psd.c (ReadPSDImage): Fix SourceForge bug #341
+"out-of-bounds read in coders/psd.c:1435".
+(WriteWhiteBackground): Fix SourceForge bug #350 "SEGV in
+coders/psd.c:1685".
+(DecodeImage): Fix SourceForge bug #351 "heap-buffer-overflow in
+coders/psd.c:142".
+(ReadPSDImage): Fix SourceForge bug #342 "out-of-bounds write in
+coders/psd.c:892"</li>
+<li>coders/xcf.c (load_tile): Fix SourceForge bug #337
+"heap-buffer-overflow in coders/xcf.c:373".</li>
+<li>coders/pict.c (WritePICTImage): Fix SourceForge bug #340
+"out-of-bounds write in coders/pict.c:1929".</li>
+<li>coders/pdb.c (WritePDBImage): Fix SourceForge bug #348
+"heap-buffer-overflow in coders/pdb.c:949:26".</li>
+<li>coders/xpm.c (ReadXPMImage): Fix SourceForge bug #334
+"heap-buffer-overflow in coders/xpm.c:150".</li>
+</ul>
+</blockquote>
+<p>2016-03-09 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Fixed huge image limitation.</li>
+</ul>
+</blockquote>
+<p>2016-03-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sun.c (WriteSUNImage): Fix SourceForge bug #343
+"out-of-bounds write in coders/sun.c:962".</li>
+<li>coders/rle.c (ReadRLEImage): Fix SourceForge bug #344
+"out-of-bounds write in coders/rle.c:524".</li>
+<li>coders/xpm.c (ReadXPMImage): Fix SourceForge bug #335
+"out-of-bounds read in coders/xpm.c:154 ".</li>
+</ul>
+</blockquote>
+<p>2016-03-06 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc (-extent): Revised the example to
+clarify the interaction of -gravity with the "geometry" offsets.</li>
+</ul>
+</blockquote>
+<p>2016-03-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Add support for --enable-broken-coders which
+determines if broken or hazardous file format support should be
+enabled in the build. Currently Adobe Photoshop (PSD) format is
+included in this category.</li>
+<li>Rotate Changelog for new year. Update documentation copyrights
+for new year.</li>
+</ul>
+</blockquote>
+<p>2016-03-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tiff/libtiff/tif_config.h (HAVE_SNPRINTF): Define HAVE_SNPRINTF
+when using Microsoft Visual C++ 14 (Visual Studio 2015) or later.
+This is based on advice by Pablo Elpuro.</li>
+</ul>
+</blockquote>
+<p>2016-02-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/lib/Image.cpp (xResolution): New method to support
+setting the horizontal resolution with double precision.
+(yResolution): New method to support setting the vertical
+resolution with double precision.</li>
+<li>www/Hg.rst: Document the ssh public keys for the server hosting
+the development Mercurial repository.</li>
+</ul>
+</blockquote>
+<p>2016-02-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xpm.c (ReadXPMImage): Fix SourceForge bug #333
+heap-buffer-overflow in coders/xpm.c:409.</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>ChangeLog-2017.rst</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2017-12-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/rwfile.tap: Add tests for MIFF compressed sub-formats.</li>
+</ul>
+</blockquote>
+<p>2017-12-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (OpenBlob): Zlib 1.2.8 does not accept an open
+mode of "w+b" or "wb+". It seems to be allergic to '+'. As a
+result, writing to ".gz" files was not working with Zlib 1.2.8.
+Note that "w+b" must be used in the normal case since the test
+suite fails otherwise!</li>
+</ul>
+</blockquote>
+<p>2017-12-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadMNGImage): Fix SourceForge issue #535
+"heap-buffer-overflow in ReadMNGImage". Problem was caused by
+accessing byte before testing that limit has been reached, rather
+than testing for limit before accessing the byte. This means that
+it could only ever read one past the buffer allocation size.</li>
+<li>coders/webp.c (WriteWEBPImage): Fix SourceForge issue #536
+"stack-buffer-overflow in WriteWEBPImage". Due to a change to use
+WebPMemoryWriter as part of the EXIF and ICC profile support
+addition (enabled with libwebp 0.5.0), the progress indicator
+callback is now passed a pointer to a wrong structure. This is
+quite unfortunate since the progress indication is useful. The
+progress indication is temporarily disabled when the
+WebPMemoryWriter is in use until a solution is implemented.
+(ProgressCallback): Re-implement progress callback so that image
+pointer is stored/retrieved as thread-specific data.</li>
+<li>coders/png.c (ReadMNGImage): Fix SourceForge issue #537 "null
+pointer dereference in ReadMNGImage". DEFI chunk must be at least
+2 bytes long.</li>
+<li>coders/tiff.c (ReadNewsProfile): Fix SourceForge issue #533
+"heap-buffer-overflow on LocaleNCompare". LocaleNCompare() was
+being allowed to read heap data beyond the allocated region.</li>
+</ul>
+</blockquote>
+<p>2017-12-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/shear.c (IntegralRotateImage): Assure that reported error
+in rotate by 270 case does immediately terminate processing.
+Return a NULL Image pointer if there is a problem rather than a
+corrupted image. Fix is related to SourceForge issue #532
+"heap-buffer-overflow bug in ReadWPGImage".</li>
+<li>magick/pixel_cache.c (AcquireCacheNexus): Add a check that the
+pixel cache is compatible with the image dimensions. Fix is
+related to SourceForge issue #532 "heap-buffer-overflow bug in
+ReadWPGImage".</li>
+</ul>
+</blockquote>
+<p>2017-12-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneJNGImage): Fix SourceForge issue #530
+"heap-buffer-overflow in ReadOneJNGImage". In this case there is
+a read one byte beyond the oFFs chunk allocation size due to an
+error in specifying an offset into the chunk.</li>
+<li>coders/palm.c (ReadPALMImage): Fix SourceForge issue #529
+"global-buffer-overflow in ReadPALMImage". This issue only
+occured in builds with QuantumDepth=8 due to the small range of
+IndexPacket.</li>
+</ul>
+</blockquote>
+<p>2017-12-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/{Magick.pm, Magick.pm.in, Makefile.PL.in}: Only base
+PerlMagick version on numeric portion of PACKAGE_VERSION.</li>
+</ul>
+</blockquote>
+<p>2017-12-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/index.rst: Update to 1.3.27.</li>
+<li>www/Changes.rst: Add 1.3.27</li>
+<li>version.sh: Update library versioning.</li>
+<li>NEWS.txt: Update NEWS in preparation for releasing 1.3.27.</li>
+</ul>
+</blockquote>
+<p>2017-12-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c (DCM_ReadElement): Change size checks addressing
+CVE-2017-12140 to be based on size_t rather than magick_off_t due
+to apparent instability of the previous check across compilers.</li>
+</ul>
+</blockquote>
+<p>2017-12-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WriteOnePNGImage): Fix heap read access outside of
+allocated PixelPacket array while testing pixels for opacity.
+Resolves SourceForge issue #526 "heap-buffer-overflow in
+WriteOnePNGImage".</li>
+</ul>
+</blockquote>
+<p>2017-12-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pnm.c (WritePNMImage): Fix SourceForge bug #525
+"heap-buffer-overflow in MagickBitStreamMSBWrite".</li>
+</ul>
+</blockquote>
+<p>2017-12-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c (DCM_ReadElement): Eliminate huge memory allocation
+based on bogus length value. Addresses CVE-2017-12140. Problem was
+reported via email from Petr Gajdos on Tue, 5 Dec 2017.</li>
+</ul>
+</blockquote>
+<p>2017-12-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/lib/Image.cpp (colorMap): Try to eliminate Coverity CID
+172796 "Dereference after null check" which seems to be bogus.</li>
+<li>coders/png.c (WriteOnePNGImage): Fix Coverity CID 168053
+"Dereference after null check". The check for null and the error
+report which attempted to use the null value was not needed at
+all.</li>
+<li>coders/cut.c (GetCutColors): Fix Coverity CID 10181: "Null
+pointer dereferences". SetImagePixels() may return NULL.</li>
+<li>coders/rgb.c (ReadRGBImage): Fix SourceForge issue #523
+"heap-buffer-overflow". Similar issue to cmyk.c.</li>
+<li>coders/gray.c (ReadGRAYImage): Fix SourceForge issue #522
+"heap-buffer-overflow". Similar issue to cmyk.c.</li>
+<li>coders/cmyk.c (ReadCMYKImage): Fix SourceForge issue #521
+"heap-buffer-overflow". The requested tile must be within the
+bounds of the image. As it happens, 'montage' passes size and
+tile information which is useless for reading a raw image so it is
+not possible to read raw CMYK using 'montage'.</li>
+</ul>
+</blockquote>
+<p>2017-12-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pwp.c (ReadPWPImage): Eliminate dereference of null image
+pointer. Addresses CVE-2017-11640. Also address access to
+uninitialized memory. Problem was reported via email from Petr
+Gajdos on Wed, 29 Nov 2017.</li>
+</ul>
+</blockquote>
+<p>2017-11-22 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c Additional check for wrong bpp CVE-2017-14342.</li>
+</ul>
+</blockquote>
+<p>2017-11-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/lib/Image.cpp (autoOrient): Add method to auto-orient
+an image so it looks right-side up by default. Based on patch by
+Przemysław Sobala submitted as SourceForge patch #53 "Add
+Magick::Image::autoOrient() method to Magick++ library".</li>
+<li>www/download.rst: Change "Czechoslovakian ftp mirror" to "Czech
+ftp mirror". Resolves SourceForge bug #520 "[web] Download sites:
+non-existent country".</li>
+</ul>
+</blockquote>
+<p>2017-11-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c (ReadWPGImage): Fix excessive use of disk resources
+due to unreasonable record length. Addresses CVE-2017-14341.
+Notified of this issue (with suggested patch) via email by Petr
+Gajdos on Tue, 21 Nov 2017.</li>
+</ul>
+</blockquote>
+<p>2017-11-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>README.txt: Comprehensive white-space clean-up across
+GraphicsMagick core source files. Hard TAB character is converted
+to spaces. Trailing white-space garbage is stripped.</li>
+<li>magick/colormap.c (MagickConstrainColormapIndex): Deprecate use
+of MagickConstrainColormapIndex() and prefer use of
+VerifyColormapIndex() and VerifyColormapIndexWithColors() due to
+avoiding dependence on index type, allowing provision of colors
+other than image->colors, and capturing more useful source file
+and line information.</li>
+<li>coders/{rle.c, mat.c, xbm.c, sgi.c, png.c}: Eliminate size_t vs
+unsigned 32 conversion warnings in WIN64 build.</li>
+</ul>
+</blockquote>
+<p>2017-11-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tiff: Import libtiff 4.0.9.</li>
+</ul>
+</blockquote>
+<p>2017-11-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (DecodeImage): "Right-size" and "Right-type"
+DecodeImage() variables and check for EOF at every point of the
+way. Pass buffer size as an argument.</li>
+<li>coders/dib.c (DecodeImage): "Right-size" and "Right-type"
+DecodeImage() variables and check for EOF at every point of the
+way. Pass buffer size as an argument.</li>
+<li>coders/bmp.c (_BMPInfo): "Right-size" BMPInfo members. The
+'long' type is promoted to 64-bit on LP64 systems and the large
+size is not needed.</li>
+</ul>
+</blockquote>
+<p>2017-11-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/webp.c: Incorporate patch by Jan Spitalnik to add EXIF
+and ICC metadata support to the WebP coder. While WebP is still
+supported back to libwebp 0.1.99, the metadata support requires at
+least libwebp 0.5.0. Resolves SourceForge patch #52 "Add EXIF/ICC
+metadata support to WebP coder".</li>
+<li>coders/png.c (ReadOneJNGImage): Fix JNG memory leaks when JPEG
+image fails to be read.
+(WriteOnePNGImage): Promotion of indexed PNG to RGBA lacked
+setting of image matte, resulting in undersized buffer allocation
+and heap overflow. Fixes SourceForge bug #453 "Heap overflow in
+source-gra/coders/png.c".</li>
+</ul>
+</blockquote>
+<p>2017-11-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sfw.c (SFWScan): Fix heap buffer overflow
+(CVE-2017-13134). Notified of problem via email (including a
+patch) from Petr Gajdos on Mon, 6 Nov 2017.</li>
+</ul>
+</blockquote>
+<p>2017-11-05 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c Wrong MaxMap check condition - fixed.</li>
+</ul>
+</blockquote>
+<p>2017-11-04 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c Check for InsertRow() return value.</li>
+</ul>
+</blockquote>
+<p>2017-11-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/export.c: Add not-null check for indexes pointer where
+needed.</li>
+<li>magick/import.c: Add not-null check for indexes pointer with
+associated exception report where the indexes pointer is needed.
+(ImportCMYKQuantumType): Was wrongly importing an opacity channel
+in some cases. Would have crashed if these cases were ever used.</li>
+<li>coders/wpg.c (ReadWPGImage): Assure that colormapped image is a
+PseudoClass type with valid colormapped indexes. Fixes
+SourceForge bug 519 "Null Pointer Dereference (Write) with
+malformed WPG Image".</li>
+<li>coders/sfw.c (ReadSFWImage): Avoid possible heap overflow while
+copying JFIF magic into buffer. Reject runt files. Fixes
+CVE-2017-12983. Notified of problem via email from Petr Gajdos on
+Thu, 2 Nov 2017.</li>
+</ul>
+</blockquote>
+<p>2017-10-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Fix SourceForge bug #517 "Push
+operations in DrawImage can lead to negative strncpy when looking
+for pop". Interestingly, valgrind and ASAN only detected a
+problem with one of the test cases since exercised code which
+updated an array using the index. It appears that Linux strncpy()
+simply ignores the bad request.</li>
+</ul>
+</blockquote>
+<p>2017-10-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneJNGImage): Make sure that a reasonable
+exception is reported to the user when there is a read failure.</li>
+</ul>
+</blockquote>
+<p>2017-10-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneJNGImage): Reject JNG files with
+unreasonable dimensions given the file size.</li>
+</ul>
+</blockquote>
+<p>2017-10-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneJNGImage): Fix SourceForge bug #518 "Null
+pointer in". Also make sure that errors are reported properly due
+to problems with transferring JPEG scanlines.
+(ReadOneJNGImage): Add more checks for null value returned from
+SetImagePixels().</li>
+</ul>
+</blockquote>
+<p>2017-10-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/describe.c (DescribeImage): Fix possible heap read
+overflow while accessing heap data, and possible information
+disclosure while describing the IPTC profile. Report was provided
+via email from Maor Shwartz to the graphicsmagick-security mail
+alias on Thu, 19 Oct 2017. Independent security researchers,
+Jeremy Heng (@nn_amon) and Terry Chia (Ayrx), reported this
+vulnerability to Beyond Security’s SecuriTeam Secure Disclosure
+program. Please note that this interface is usually (but not
+exclusively) used from within the command-line utility program, in
+which case there is not much useful information which might be
+disclosed.
+(DescribeImage): Fix possible heap write overflow when describing
+visual image directory. Report was provided via email from Maor
+Shwartz to the graphicsmagick-security mail alias on Thu, 19 Oct
+2017. Independent security researchers, Jeremy Heng (@nn_amon)
+and Terry Chia (Ayrx), reported this vulnerability to Beyond
+Security’s SecuriTeam Secure Disclosure program. Please note that
+this interface is usually (but not exclusively) used from within
+the command-line utility program, in which case the only harm
+would be a program crash.</li>
+<li>magick/constitute.c (WriteImage): Assure that the errno present
+when the blob error status first occured is reported to the user.</li>
+<li>magick/blob.c (GetBlobStatus): Blob error status is now updated
+immediately upon the first error reported.
+(GetBlobFirstErrno): Returns errno value when the first blob error
+was reported. This is useful for error reporting.</li>
+</ul>
+</blockquote>
+<p>2017-10-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (WriteImage): Restore use of GetBlobStatus()
+to test if an I/O error was encountered while writing output file.
+This assures that I/O failure in writers which do not themselves
+verify writes is assured to be reported.</li>
+</ul>
+</blockquote>
+<p>2017-10-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/webp.c (WriterCallback): WebP writer now detects partial
+write to output file. Patch by Przemysław Sobala from a posting
+on Mon, 16 Oct 2017 via the graphicsmagick-help mailing list.</li>
+</ul>
+</blockquote>
+<p>2017-10-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (MontageImageCommand): Fix memory leaks in
+error return path. Only people doing leak testing or the few who
+execute MontageImageCommand() as a function will care about this.</li>
+<li>magick/studio.h (NumberOfObjectsInArray): The
+NumberOfObjectsInArray() macro is used to compute the number of
+whole objects in an array. Instead it was rounding up, resulting
+in scrambling the heap beyond the allocation. Fixes
+CVE-2017-13737 "There is an invalid free in the MagickFree
+function in magick/memory.c in GraphicsMagick 1.3.26 that will
+lead to a remote denial of service attack."</li>
+</ul>
+</blockquote>
+<p>2017-10-09 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOnePNGImage): Suppress "comparison between
+signed and unsigned integer expressions" warning.</li>
+<li>coders/png.c (ReadJNGImage): Fix memory leak in SourceForge
+Issue #469 "use after free in ReadJNGImage".</li>
+<li>coders/png.c (ReadJNGImage): Fix memory leak in SourceForge
+Issue #470 "Assert failure in writeblob".</li>
+</ul>
+</blockquote>
+<p>2017-10-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc: Fix SourceForge issue #444 "gm mogrify: Wrong
+documentation for option -output-directory".</li>
+</ul>
+</blockquote>
+<p>2017-10-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/module.c (InitializeModuleSearchPath): Verify that any
+component paths specified in MAGICK_CODER_MODULE_PATH and
+MAGICK_FILTER_MODULE_PATH exist before adding them to search paths
+actually used, and convert to real paths if possible. This avoids
+possible use of relative paths to load modules (a possible
+security issue) and may improve efficiency by removing
+non-existent paths.</li>
+<li>coders/yuv.c (ReadYUVImage): Fix leak of scanline upon Image
+allocation failure. Patch submitted by Petr Gajdos via email on
+Fri, 6 Oct 2017.</li>
+</ul>
+</blockquote>
+<p>2017-09-13 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Attempt to fix SourceForge Issue #469 "use after
+free in ReadJNGImage". Note that this change was found to replace
+a use after free with a memory leak so the problem is not solved
+yet.</li>
+</ul>
+</blockquote>
+<p>2017-10-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c (DCM_ReadNonNativeImages): Additional fix
+(improvement) for SourceForge issue #512 "NULL Pointer Dereference
+in DICOM Decoder".</li>
+</ul>
+</blockquote>
+<p>2017-10-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c (ReadDCMImage): Fix SourceForge issue #512 "NULL
+Pointer Dereference in DICOM Decoder".</li>
+<li>coders/pict.c (ReadPICTImage): Fix SourceForge issue #511
+"Memory Allocation error due to malformed image file".</li>
+<li>coders/pnm.c (WritePNMImage): Fix SourceForge issue #503 "memory
+leak in WritePNMImage".</li>
+<li>coders/png.c (ReadMNGImage): Fix SourceForge issue #501 "memory
+leak in ReadMNGImage".</li>
+<li>magick/segment.c (InitializeIntervalTree): Fix SourceForge issue
+#507 "null pointer in segment.c" and issue #508 "null pointer in
+segment.c".</li>
+<li>coders/topol.c (ReadTOPOLImage): Fix SourceForge issue #510
+"null pointer and meory leak in topol.c".</li>
+<li>magick/widget.c (MagickXFileBrowserWidget): Fix SourceForge
+issue #506 "null pointer in widget.c".</li>
+<li>coders/tiff.c (WriteTIFFImage): Fix SourceForge issue #509
+"Memory leak in tiff.c".</li>
+<li>magick/module.c (FindMagickModule): Fix SourceForge issue #502
+"null pointer in module.c".</li>
+<li>coders/avs.c (ReadAVSImage): Fix Coverity CID 184115 "Control
+flow issues (DEADCODE)".</li>
+</ul>
+</blockquote>
+<p>2017-09-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/avs.c (ReadAVSImage): Fix SourceForge issue #499 "memory
+leak in avs.c".</li>
+<li>coders/cmyk.c (ReadCMYKImage): Fix SourceForge issue #498
+"memory leak in cmyk.c".</li>
+<li>coders/cut.c (ReadCUTImage): Fix SourceForge issue #497 "memory
+leak in cut.c".</li>
+<li>coders/dpx.c (ReadDPXImage): Fix SourceForge issue #496 "memory
+leak in dpx.c".</li>
+<li>coders/hdf.c (ReadHDFImage): Fix SourceForge issue #495 "memory
+leak in hdf.c".</li>
+<li>coders/pcx.c (ReadPCXImage): Fix SourceForge issue #494 "memory
+leak in pcx.c".</li>
+<li>coders/pcd.c (ReadPCDImage): Fix SourceForge issue #493 "memory
+leak in ReadPCDImage".</li>
+<li>coders/histogram.c (WriteHISTOGRAMImage): Fix SourceForge issue
+#492 "memory leak in WriteHISTOGRAMImage".</li>
+<li>coders/gif.c (WriteGIFImage): Fix SourceForge issue #491 "memory
+leak in WriteGIFImage".</li>
+<li>coders/fits.c (WriteFITSImage): Fix SourceForge issue #490
+"memory leak in WriteFITSImage".</li>
+<li>coders/palm.c (WritePALMImage): Fix SourceForge issue #489
+"memory leak in WritePALMImage".</li>
+<li>coders/rgb.c (ReadRGBImage): Fix SourceForge issue #488 "Memory
+leak in rgb.c".</li>
+<li>coders/palm.c (ReadPALMImage): Fix SourceForge issue #487 "NULL
+pointer dereference in ReadPALMImage".</li>
+<li>Magick++/lib/Options.cpp (strokeDashArray): Fix SourceForge
+issue #486 "NULL pointer dereference in
+Magick::Options::strokeDashArray".</li>
+<li>magick/nt_feature.c (NTGetTypeList): Fix SourceForge issue #485
+"NULL pointer dereference in NTGetTypeList".</li>
+<li>coders/sun.c (ReadSUNImage): Fix SourceForge issue #484 "Memory
+leak in sun.c".</li>
+<li>coders/tim.c (ReadTIMImage): Fix SourceForge issue #483 "Memory
+leak in tim.c".</li>
+<li>magick/nt_base.c (NTRegistryKeyLookup): Fix SourceForge issue
+#482 "NULL pointer dereference in NTRegistryKeyLookup".</li>
+<li>coders/viff.c (ReadVIFFImage): Fix SourceForge issue #481
+"Memory leak in viff.c".</li>
+<li>magick/profile.c (SetImageProfile): Fix SourceForge issue #480
+"assertion failure in MagickMapAllocateMap".</li>
+<li>coders/yuv.c (ReadYUVImage): Fix SourceForge issue #478 "Memory
+leak in yuv.c".</li>
+<li>magick/map.c (MagickMapCloneMap): Fix SourceForge issue #477
+"assertion failure in MagickMapIterateNext".</li>
+<li>coders/emf.c (ReadEnhMetaFile): Fix SourceForge issue #475 "NULL
+pointer dereference in ReadEnhMetaFile".</li>
+<li>coders/cineon.c (ReadCINEONImage): Fix SourceForge issue #473
+"NULL pointer dereference in ReadCINEONImage"</li>
+<li>coders/tiff.c (TIFFIgnoreTags): Fix SourceForge issue #476 "NULL
+Pointer in tiff.c".</li>
+</ul>
+</blockquote>
+<p>2017-09-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (GetConfigureBlob): Fix SourceForge issue #472
+"NULL Pointer in GetConfigureBlob".</li>
+</ul>
+</blockquote>
+<p>2017-09-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/rle.c (ReadRLEImage): Fix SourceForge issue #458 "Heap
+out of bounds read in ReadRLEImage()".</li>
+</ul>
+</blockquote>
+<p>2017-09-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sgi.c (ReadSGIImage): Check for EOF while reading SGI
+file header. Issue was brought to our attention by Petr Gajdos
+via email on Fri, 1 Sep 2017.</li>
+</ul>
+</blockquote>
+<p>2017-09-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Allow a single scanline, strip,
+tile, to be 1000X larger than the input file in order to not cause
+problems for extremely compressible images or tile sizes much
+larger than the pixel dimensions.</li>
+</ul>
+</blockquote>
+<p>2017-09-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/symbols.h, wand/wand_symbols.h: Update C library symbols
+which should be prefixed with 'Gm'. However, GM will not move
+Magick++ namespace because of the ImageMagick version. Resolves
+SourceForge issue #468 "--enable-symbol-prefix does not prevent
+clashes with libMagick++ or libMagickWand?"</li>
+<li>coders/png.c (DestroyJNG): DestroyJNG should be a static
+function. Was wrongly exposed as DestroyJNGInfo in 1.3.26. This
+is not a public function and was not intended to be part of the
+ABI.</li>
+<li>coders/tiff.c (ReadTIFFImage): Limit scanline, strip, and tile
+memory allocations based on file size multiplied by a maximum
+compression ratio. Fixes SourceForge issues #460, #461, #462,
+#463, #464 "allocation failure in ReadTIFFImage".</li>
+<li>coders/pnm.c (ReadPNMImage): Require that XV 332 format have 256
+colors. Fixes SourceForge issue #465 "NULL Pointer Dereference
+triggered by malformed file". In our own testing the test case
+produced an assertion failure because assertions were enabled.</li>
+<li>magick/colormap.c (AllocateImageColormap): Use unsigned array
+index.</li>
+</ul>
+</blockquote>
+<p>2017-09-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c (ReadMATImage): Fix CVE-2016-10070, which is a heap
+overflow in the MAT reader due to an under-sized memory
+allocation. Based on private email from Petr Gajdos on Mon, 11
+Sep 2017.</li>
+</ul>
+</blockquote>
+<p>2017-09-13 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Check MemoryResource before allocating
+ping_pixel array.</li>
+</ul>
+</blockquote>
+<p>2017-09-11 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li><dl class="first docutils">
+<dt>magick/shear.c: Possible evil loop might waste CPU for long time</dt>
+<dd>without any reason.</dd>
+</dl>
+</li>
+</ul>
+</blockquote>
+<p>2017-09-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Fix SourceForge issue #448 "Heap
+out of bounds read in DrawDashPolygon()". Problem was reported by
+Kamil Frankowicz on August 28, 2017.</li>
+<li>coders/uil.c (WriteUILImage): Fix crash in UIL writer when
+writing image containing transparency. Issue was reported by
+LCatro via email on 18 Jul 2017.</li>
+<li>coders/wpg.c (InsertRow): Fix crash which occurs if image is not
+PseudoClass but a PseudoColor scanline is needed. Resolves
+SourceForge issue #449 "Null pointer dereference in InsertRow()".</li>
+<li>coders/rle.c (ReadRLEImage): Impose image dimension limits
+according to Utah RLE specification. Cap number of planes handled
+internally at 4. Remove non-standard multi-frame extension, which
+did not work anyway.</li>
+</ul>
+</blockquote>
+<p>2017-09-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadJNGImage): Complete fixing CVE-2017-8350 crash
+while reading a malformed JNG file.</li>
+<li>coders/{html.c, map.c, plasma.c, png.c, psd.c, rle.c, stegano.c,
+uil.c}: Downgrade claimed coder stability level for HTML, SHTML,
+MAP, FRACTAL, PLASMA, JNG, MNG, RLE, STEGANO, and UIL formats.</li>
+</ul>
+</blockquote>
+<p>2017-09-08 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadJNGImage): More efforts toward fixing
+CVE-2017-8350 while reading a malformed JNG file.</li>
+</ul>
+</blockquote>
+<p>2017-09-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/error.c (ThrowLoggedException): Capture the first
+exception at ErrorException level or greater, or only capture
+exception if it is more severe than an already reported exception.
+This should help lead to better error reports since the first
+error is usually the most significant.</li>
+<li>coders/png.c (ReadJNGImage): Add "improper header" exception
+reporting.</li>
+</ul>
+</blockquote>
+<p>2017-09-01 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadJNGImage): Efforts toward fixing CVE-2017-8350
+while reading a malformed JNG file.</li>
+</ul>
+</blockquote>
+<p>2017-08-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c (ReadWPGImage): Patch submitted by Petr Gajdos to
+check that .Width and .Height are greater than zero before they
+are assigned to image->columns and image->rows respectively
+(CVE-2014-9815).
+(ReadWPGImage): Do more validations on WPG_Palette.StartIndex and
+WPG_Palette.NumOfEntries.</li>
+</ul>
+</blockquote>
+<p>2017-08-29 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneJNGImage): Fix for SourceForge issue #440
+"use-after-free in CloseBlob (blob.c) (INCOMPLETE FIX FOR
+CVE-2017-11403)" and SourceForge issue #438 "heap use after free
+in CloseBlob".</li>
+<li>coders/png.c (ReadOneJNGImage): Fix for SourceForge issue #439
+"assertion failure in magick/pixel_cache.c"</li>
+</ul>
+</blockquote>
+<p>2017-08-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mpeg.c (WriteMPEGImage): Fix MPEG writer memory leak.
+Only the first image in the coalesce image list was being freed.
+Problem was reported by LCatro via email on July 15, 2017.</li>
+<li>magick/attribute.c (TracePSClippingPath, TraceSVGClippingPath):
+Fix SourceForge bug #447 "Heap out of bounds read in
+ReadMSBShort()".</li>
+</ul>
+</blockquote>
+<p>2017-08-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xbm.c (ReadXBMImage): Fix two denial of service (DOS)
+issues in ReadXBMImage() which result in the reader not
+returning. Problem was reported via email on Wed Aug 23 2017 by
+Xiaohei and Wangchu from Alibaba Security Team.</li>
+<li>coders/jnx.c (ReadJNXImage): Fix denial of service (DOS) issue
+in ReadJNXImage() whereby large amounts of CPU and memory
+resources may be consumed although the file itself does not
+support the requests. Problem was reported via email on Wed Aug
+23 2017 by Xiaohei and Wangchu from Alibaba Security Team.</li>
+</ul>
+</blockquote>
+<p>2017-08-14 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneMNGImage): Deal with invalid (too large)
+length of MNG chunks (bug #446).</li>
+</ul>
+</blockquote>
+<p>2017-08-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pnm.c (ReadPNMImage): Verify that sufficient file data
+exists to support what the file header requires before allocating
+memory for it. Fixes problem reported by Agostino Sarubbo via
+email on Wed, 12 Jul 2017 and reported yet again via SourceForge
+bug #441 "memory allocation failure in MagickRealloc".</li>
+</ul>
+</blockquote>
+<p>2017-08-20 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c: Fix SourceForge bug #433 "memory leak in
+ReadMATImage". Credit for discovering and reporting the problem
+is "ADLab of Venustech".</li>
+<li>coders/sun.c (ReadSUNImage): Fix failure to allocate memory due
+to inadequate file data to support claimed image width and height.
+First notified by email from Agostino Sarubbo on 14 Jul 2017 and
+then again as SourceForge bug #442 "memory allocation failure in
+magickmalloc".</li>
+</ul>
+</blockquote>
+<p>2017-08-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (GetStyleTokens): Fix SourceForge bugs 434 "heap
+buffer overflow in GetStyleTokens", 435 "null pointer
+dereference_in_SVGStartElement", and 436 "heap buffer overflow in
+GetStyleTokens" which all originated from a heap buffer overflow
+in GetStyleStokens(), or inconsistent initialization. Now the
+implementation truncates parsing for poorly-formed input (to avoid
+buffer overflow) while still correctly parsing well-formed input.
+The reproducers and problem reports are attributed to "ADLab of
+Venustech".</li>
+</ul>
+</blockquote>
+<p>2017-08-14 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneJNGImage): Fixed double-free after
+reading a malformed JNG (Issue #438).</li>
+</ul>
+</blockquote>
+<p>2017-08-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pcd.c (ReadPCDImage): Fix memory leak on return path due
+to corrupted header. Patch included in email on 14 Aug 2017 by
+Petr Gajdos (ImageMagick CVE CVE-2017-8351).</li>
+</ul>
+</blockquote>
+<p>2017-08-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/gif.c (ReadGIFImage): Assure that global colormap is
+initialized.</li>
+<li>coders/pict.c (ReadPICTImage): Fix memory leaks in error return
+path. ImageMagick CVE CVE-2017-8353. Patch by Petr Gajdos.</li>
+</ul>
+</blockquote>
+<p>2017-08-11 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/rwblob.c and rwfile.c: Write the reason for FAIL in
+test-suite.log.</li>
+<li>magick/image.h: Revised table of image orientations to show
+Exif ImageOrientation values (which happen to be the same as
+the enum values 1 to 8).</li>
+<li>coders/png.c: ReadJNGIMage(): fix memory leak (Issue 431).</li>
+</ul>
+</blockquote>
+<p>2017-08-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mtv.c (ReadMTVImage): Fix memory leak in error return
+path upon unexpected EOF (ImageMagick CVE-2017-9142). Problem was
+brought to our attention via email from Petr Gajdos on Wed, 9 Aug
+2017. Also changed pixel cache access functions used to assure
+delivery of exception to the user.</li>
+</ul>
+</blockquote>
+<p>2017-08-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac (SETJMP_IS_THREAD_SAFE): Decide if setjmp/longjmp
+are thread safe based on host OS. Assume that these interfaces
+are thread safe by default. Declared not to be thread safe under
+Solaris. Declaring these interfaces to be thread safe increases
+available concurrency for coders which use setjmp/longjmp for
+error recovery (e.g. PNG and JPEG).</li>
+</ul>
+</blockquote>
+<p>2017-08-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (RegisterJPEGImage): Add support for the
+SETJMP_IS_THREAD_SAFE preprocessor definition (already used by
+coders/png.c) to indicate if setjmp/longjmp are thread safe on
+this platform and that it is safe for multiple encoders/decoders
+to be active at one time.</li>
+</ul>
+</blockquote>
+<p>2017-07-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sun.c: Fix heap read overflow while indexing into
+colormap. Problem was reported via email on 17 Jul 2017 by
+Agostino Sarubbo.</li>
+</ul>
+</blockquote>
+<p>2017-07-31 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadMNGImage): Stop a leak when rejecting a
+MNG image with dimensions that are too large.</li>
+</ul>
+</blockquote>
+<p>2017-07-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wmf.c (ReadWMFImage): Eliminate use of already freed heap
+data in error reporting path. Problem was reported via email by
+Agostino Sarubbo on Fri, 14 Jul 2017</li>
+</ul>
+</blockquote>
+<p>2017-07-25 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadMNGImage) Free chunk allocation that remains
+after attempting to read a truncated file.</li>
+<li>coders/png.c: Removed some redundant checks for chunk length
+before MagickFreeMemory(chunk), which is safe to call with a
+NULL argument.</li>
+<li>coders/png.c: Fixed writer bug due to missing brackets; a Log
+statement should have been inside the "i" loop but instead was
+using i++ left over from the loop. Bug report by L. Catro.</li>
+<li>coders/png.c: Reject a MNG with dimensions greater than 65k
+by 65k.</li>
+<li>coders/png.c (WriteOnePNGImage): Return without crashing if
+WriteOnePNGImage is passed a NULL image. Fixes CVE-2017-11522.</li>
+</ul>
+</blockquote>
+<p>2017-07-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pcl.c (WritePCLImage): Fix null pointer dereference in
+PCL writer when writing monochrome images. Problem was reported
+by LCatro via email on July 18.</li>
+<li>magick/pixel_cache.c (PersistCache): Fix memory leak while
+writing a MPC file. Problem was reported by LCatro via email on
+July 18.</li>
+<li>coders/map.c (WriteMAPImage): Fix null pointer dereference or
+segmentation violation in the MAP writer if the input image is not
+already colormapped. Problem was reported by LCatro via email on
+July 18.</li>
+<li>coders/gray.c (WriteGRAYImage): Improve tracing and tidy up.</li>
+<li>coders/rgb.c (WriteRGBImage): Fix heap overwrite in raw RGB
+writer (all output subformats) given a multiframe sequence using
+different widths. Problem was reported by LCatro via email on
+July 18.</li>
+<li>coders/cmyk.c (WriteCMYKImage): Fix heap overwrite in raw CMYK
+writer (all output subformats) given a multiframe sequence using
+different widths. Also fix wrong output of CMYKA (and vice-versa)
+when CMYK was intended. Problem was reported by LCatro via email
+on July 18.</li>
+<li>coders/palm.c: Disable the PALM writer since the writer is a
+work in progress and still has implementation problems. Perhaps
+no one in the world remains who cares about the undocumented PALM
+format. Resolves heap overflow and assertion issues reported by
+LCatro via emails on July 11th, and 12th, 2017.</li>
+<li>magick/colormap.c (ReplaceImageColormap): Throw an exception
+rather than assertion if the input image is not colormapped.</li>
+</ul>
+</blockquote>
+<p>2017-07-13 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Implemented eXIf chunk support.</li>
+</ul>
+</blockquote>
+<p>2017-07-12 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Fix typecast of left shifts (patch by Bob F)</li>
+</ul>
+</blockquote>
+<p>2017-07-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/ps.c (ReadPSImage): Fix reference to constant NULL image
+argument which is dereferenced to pass an exception to
+MagickMonitorFormatted(). Problem was reported by Agostino
+Sarubbo via email on Wed, 12 Jul 2017.</li>
+</ul>
+</blockquote>
+<p>2017-07-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c: Add casts to fix undefined behavior in left
+shifts. Issue was reported by Agostino Sarubbo via email on Mon,
+10 Jul 2017.</li>
+</ul>
+</blockquote>
+<p>2017-07-10 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneJNGImage): Ignore out-of-bounds MOVE
+and CLIP object_id's.</li>
+<li>coders/png.c (ReadMNGImage): Fix apparent off-by-one error
+in MNG FRAM change_clipping processing.</li>
+<li>coders/png.c (ReadMNGImage): Fix out-of-order CloseBlob()
+and DestroyImageList() that caused a use-after-free crash.
+Fixes CVE-2017-11403. This bug was discovered by Agostino Sarubbo.</li>
+</ul>
+</blockquote>
+<p>2017-07-08 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneJngImage): Revised double-free fix.</li>
+</ul>
+</blockquote>
+<p>2017-07-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneJNGImage): Fix double-frees caused by
+commit on 2017-07-06.</li>
+<li>coders/jpeg.c (ReadJPEGImage): Defer creating pixel cache until
+after successfully reading first scanline. Classify some serious
+libjpeg reported "warnings" as errors and quit processing
+scanlines immediately upon first error so that corrupt JPEG does
+not consume excessive resources. Resolves excessive resource
+consumption issue reported for two JPEG files provided via email
+by LCatro on Tue, 4 Jul 2017.</li>
+</ul>
+</blockquote>
+<p>2017-07-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneJNGImage): Remove spurious 'n' from log
+statement.</li>
+</ul>
+</blockquote>
+<p>2017-07-06 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Consolidate JNG cleanup into a new DestroyJNG()
+function.</li>
+</ul>
+</blockquote>
+<p>2017-07-05 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: prevent a crash due to zero-length color_image
+while reading a JNG image. (CVE-2017-11102)</li>
+</ul>
+</blockquote>
+<p>2017-07-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Make sure is up to date.</li>
+<li>www/index.rst: Update for 1.3.26 release.</li>
+<li>version.sh: Update library versioning for 1.3.26 release.</li>
+<li>magick/command.c (BatchCommand): Add ferror() checks around
+batch input loop.</li>
+</ul>
+</blockquote>
+<p>2017-07-03 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Reject a PNG file if the file size is too small
+(less than 61 bytes). Reject a JNG file if it is too small (less
+than 147 bytes).</li>
+<li>coders/jpeg.c: Reject a JPEG file if the file size is too small
+(less than 107 bytes).</li>
+</ul>
+</blockquote>
+<p>2017-07-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): Compute required file size and
+verify that sufficient data exists in file before allocating
+memory to decode the image data. Resolves problem with DPX file
+with valid header (but a huge claimed image width) provided
+provided via email on Thu, 29 Jun 2017 by LCatro. This issue has
+been assigned CVE-2017-10799.</li>
+</ul>
+</blockquote>
+<p>2016-07-02 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Check whether reported object size overflows file size.</li>
+</ul>
+</blockquote>
+<p>2016-07-01 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Safety check for forged and or corrupted data.
+This issue has been assigned CVE-2017-10800.</li>
+</ul>
+</blockquote>
+<p>2017-07-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c ("QuantumTransferMode"): Use a generalized method
+to enforce that buffer overflow can not happen while importing
+pixels. Resolves problem with RGB TIFF claiming only one sample
+per pixel provided via email on Thu, 29 Jun 2017 by LCatro. This
+issue has been assigned CVE-2017-10794.</li>
+</ul>
+</blockquote>
+<p>2017-06-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Convert bare 'unsigned int' to MagickPassFail
+where suitable to make intentions clear. Convert True/False to
+MagickTrue/MagickFalse or MagickPass/MagickFail according to
+purpose. This is a continuation of a gradual migration and does
+not represent an API change.</li>
+</ul>
+</blockquote>
+<p>2017-06-25 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Avoid NULL dereference when MAGN chunk processing
+fails (<a class="reference external" href="https://sourceforge.net/p/graphicsmagick/bugs/426/">https://sourceforge.net/p/graphicsmagick/bugs/426/</a>). Expand
+TABs.</li>
+</ul>
+</blockquote>
+<p>2017-06-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update NEWS with changes since the previous release.</li>
+<li>www/programming.rst: Switch the Lua link to
+<a class="reference external" href="https://github.com/arcapos/luagraphicsmagick">https://github.com/arcapos/luagraphicsmagick</a>, which is a more
+complete and direct interface from Lua to GraphicsMagick's Wand
+API.</li>
+</ul>
+</blockquote>
+<p>2017-06-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/installer/gm-foo-dll.iss: Remove PerlMagick from
+the slim Inno Setup installer builder and remove mention of
+PerlMagick from the installer documentation.</li>
+<li>TclMagick/generic/TclMagick.c (magickCmd): Resolve SourceForge
+patch #51 "TclMagick: memory access error; possible segfault".
+(newMagickObj): Fix formatting of pointer value so it is 64-bit
+safe. Resolves SourceForge patch #50 "TclMagick: 64-bit
+portability issue".</li>
+<li>coders/pict.c (ReadPICTImage): Avoid possible use of negative
+value when indexing array, which would cause buffer overflow.
+Resolves SourceForge issue #427 "One possible buffer overflow
+vulnerability in
+GraphicsMagick-1.3.25/coders/pict.c:ReadPICTImage()".</li>
+</ul>
+</blockquote>
+<p>2017-06-22 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Stop memory leak when reading invalid JNG image.
+Fixes CVE-2017-8350.</li>
+</ul>
+</blockquote>
+<p>2017-06-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Fix lcms2.h inclusion logic.</li>
+<li>wand/magick_wand.c (MagickSetImageOrientation): Eliminate use of
+snprintf, which is not supported by older Visual Studio.</li>
+</ul>
+</blockquote>
+<p>2017-06-09 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Accept exIf chunks whose data segment
+erroneously begins with "Exif00".</li>
+</ul>
+</blockquote>
+<p>2017-06-01 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Removed experimental zxIF chunk support. That
+proposal is dead.</li>
+</ul>
+</blockquote>
+<p>2017-05-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>config/log.mgk: Added documentation suggested by SourceForge
+issue #419 "Consider a small patch to log.mgk".</li>
+<li>www/Changes.rst: Add missing link to most recent changes.</li>
+</ul>
+</blockquote>
+<p>2017-05-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/Magick++/Image.rst: Improve documentation for Magick++
+Image::iccColorProfile() and Image::renderingIntent().</li>
+</ul>
+</blockquote>
+<p>2017-05-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tiff: Update to libtiff 4.0.8.</li>
+</ul>
+</blockquote>
+<p>2017-03-19 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Quieted a new Coverity complaint about a potential
+text buffer overrun.</li>
+</ul>
+</blockquote>
+<p>2017-03-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (SetImageInfo): Ignore empty magic prefix
+specification and do not remove colon character from start of
+filename. Resolves SourceForge bug #415 "Inconsistent Behavior w/
+input_file Parameter".</li>
+</ul>
+</blockquote>
+<p>2017-03-18 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Added new private orNT PNG chunk, to
+preserve image->orientation when it is defined and not
+the default TopLeft.</li>
+<li>coders/jpeg.c: Mention image->orientation in the log when
+writing a JPEG.</li>
+</ul>
+</blockquote>
+<p>2017-03-15 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WriteOnePNGImage): Add version info about
+gm, libpng, zlib, and lcms to the PNG debug log.</li>
+</ul>
+</blockquote>
+<p>2017-03-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (ImportImageCommand): Fix handling of -frame
+options. Option handling was incorrect due to option checking the
+frame option after it had been freed. Checking the frame dash
+option before freeing the argument solves the problem. From patch
+provided by Victor Ananjevsky as SourceForge patch #49 "-frame
+doesn't work in gm import".</li>
+<li>Magick++/lib/Image.cpp (attribute): Added Image attribute method
+which accepts a 'char *' argument, and will remove the attribute
+if the value argument is NULL. From patch provided by "Gints" as
+SourceForge patch #46 "C++ api - method to clear/remove
+attribute".</li>
+<li>VisualMagick/configure/configure.cpp (InitInstance): Applied
+patch by Paul McConkey to allow the quantum command line argument
+to set the default value in the wizard drop list. This allows
+setting the quantum depth when the /nowizard argument was
+supplied. Resolves SourceForge patch #48 "When running from the
+command line configure.exe does not use the quantum argument".
+The provided configure.exe still needs to be rebuilt to
+incorporate this change.</li>
+<li>magick/command.c (MogrifyImage): The -orient command now also
+updates the orientation in the EXIF profile, if it exists.</li>
+<li>Magick++/lib/Image.cpp (orientation): Update orientation in EXIF
+profile, if it exists.</li>
+</ul>
+</blockquote>
+<p>2017-03-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jp2.c: Support PGX JPEG 2000 format for reading and
+writing (within the bounds of what JasPer supports).</li>
+</ul>
+</blockquote>
+<p>2017-02-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (QuantumTransferMode): Fix out of bounds read when
+reading CMYKA TIFF which claims to have only 2 samples per pixel.
+Problem was reported via email on February 15, 2017 by Valon
+Chu. This issue was assigned CVE-2017-6335.</li>
+</ul>
+</blockquote>
+<p>2017-01-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/options.imdoc (-geometry): Geometry documentation changes
+suggested by Jon Wong.</li>
+</ul>
+</blockquote>
+<p>2017-01-26 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Added support for a proposed new PNG chunk
+(zxIf, read-only) that is currently being discussed on the
+png-mng-misc at lists.sourceforge.net mailing list. Enable
+exIf and zxIf with CPPFLAGS="-DexIf_SUPPORTED -DxzIf_SUPPORTED".
+If exIf is enabled, only the uncompressed exIF chunk will be
+written and the hex-encoded zTXt chunk containing the raw Exif
+profile won't be written.</li>
+</ul>
+</blockquote>
+<p>2017-01-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/msl.c (MSLStartElement): Change test for NULL image
+pointer to before it is used rather than after it is used.
+Problem reported by Petr Gajdos on 2017-01-25.</li>
+</ul>
+</blockquote>
+<p>2017-01-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>TclMagick/unix/m4/tcl.m4: Update tcl.m4 to TEA 3.10. File
+supplied by Massimo Manghi.</li>
+</ul>
+</blockquote>
+<p>2017-01-21 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Added support for a proposed new PNG
+chunk (exIf read-write, eXIf read-only) that is currently
+being discussed on the png-mng-misc at lists.sourceforge.net
+mailing list.</li>
+</ul>
+</blockquote>
+<p>2017-01-21 Glenn Randers-Pehrson <<a class="reference external" href="mailto:glennrp%40simple.dallas.tx.us">glennrp<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c: Added read_user_chunk_callback() function
+and used it to implement a private PNG caNv (canvas) chunk
+for remembering the original dimensions and offsets when an
+image is cropped. Previously we used the oFFs chunk for this
+purpose, but this had potential conflicts with other applications
+that also use the oFFs chunk.</li>
+</ul>
+</blockquote>
+<p>2017-01-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>TclMagick/Makefile.am (AM_DISTCHECK_CONFIGURE_FLAGS): Applied
+patch by Massimo Manghi to set AM_DISTCHECK_CONFIGURE_FLAGS so
+that 'make distcheck' remembers configuration options, and also to
+uninstall pkgIndex.tcl.</li>
+<li>magick/image.c (SetImageEx): Use PixelIterateMonoSet() for
+possibly improved efficiency.</li>
+<li>magick/pixel_iterator.c (PixelIterateMonoSet): New pixel
+iterator intended for use when initializing image pixels, without
+regard to existing values.</li>
+</ul>
+</blockquote>
+<p>2017-01-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Copyright.txt: Bump copyright years and rotate ChangeLog.</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>ChangeLog-2018.rst</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2018-12-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (ReadJPEGImage): Move return point for 'ping' mode
+until after jpeg_start_decompress() and after JPEG compression
+properties have been estimated. Fixes SourceForge issue #578 "gm
+identify with format "%[JPEG-Colorspace-Name]" does not work" and
+#586 "Identify returning wrong compression values".</li>
+</ul>
+</blockquote>
+<p>2018-12-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul>
+<li><p class="first">coders/gif.c (ReadGIFImage): Don't throw an error if opacity is
+outside of the range of the image colors. Fix suggested by 莫红波
+<<a class="reference external" href="mailto:hongbo.mo%40upai.com">hongbo<span>.</span>mo<span>@</span>upai<span>.</span>com</a>> on the graphicsmagick-bugs mailinb list on
+Fri, 9 Oct 2015.</p>
+</li>
+<li><p class="first">magick/memory.h (MagickAllocateClearedArray): New macro for
+allocating a cleared array.</p>
+</li>
+<li><p class="first">magick/resize.c (ScaleImage): Patch by Troy Patteson which
+resolves SourceForge issue #381 "Artifacts when scaling a PNG with
+semi-transparent pixels".</p>
+<p>ScaleImage() suffers from two problems related to the blending of
+fully transparent pixels with non-fully transparent pixels during
+the scaling operation.</p>
+<p>The first is that the colour values for fully transparent pixels
+are contributing to the colour values of the blended pixels when
+they should not.</p>
+<p>The second is that the colour values of pixels blended with fully
+and non-fully transparent pixels are scaled as though the fully
+transparent pixels contribute to the blended pixels' colour values
+when they should not. For example, if blending 10% of a fully
+opaque white pixel with 90% of a fully transparent black pixel one
+would expect the blended pixel RGBA values to be 255,255,255,25.5
+assuming 8 bit colour but they are in fact 25.5,25.5,25.5,25.5.</p>
+<p>The provided patch solves the first issue by treating the colour
+values of fully transparent pixels as zero and the second issue by
+recording the volume of each blended pixel made up of pxiels that
+are not fully transparent (0.1 in the above example) and then
+scaling the blended pixel RGB values by dividing by that
+amount. In the above example, 25.5/0.1 = 255.</p>
+</li>
+</ul>
+</blockquote>
+<p>2018-12-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dib.c (ReadDIBImage): DIB images claiming more than
+8-bits per pixel are not colormapped. Reject such files. Fixes
+SourceForge issue #585 "Assertion Failure in coders/png.c:7503".
+The problem is in the DIB reader rather than PNG.</li>
+<li>coders/miff.c (ReadMIFFImage): Detect and reject zero-length
+deflate-encoded row in MIFF version 0. Fixes oss-fuzz 11876
+"graphicsmagick/coder_MIFF_fuzzer: Use-of-uninitialized-value in
+deflate_slow". (Credit to OSS-Fuzz)</li>
+<li>configure.ac: Improve search for true Microsoft Windows fonts
+and provide better indication of results. Fix a typo which caused
+DcrawExtraOptions not to be evaluated correctly.</li>
+</ul>
+</blockquote>
+<p>2018-12-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (QuantumTransferMode): Be more strict about the
+requirements for CIE Log2(L) and LOGLUV images.
+(ReadTIFFImage): Apply memory resource limits to strip and tile
+allocations.
+(ReadTIFFImage): Rationalize tile width/height to reject large
+tile sizes which are much larger than the image dimensions. Fixes
+oss-fuzz 11824 "graphicsmagick/coder_BIGTIFF_fuzzer: Out-of-memory
+in graphicsmagick_coder_BIGTIFF_fuzzer". (Credit to OSS-Fuzz)
+(ReadTIFFImage): Return with error if TIFFClientOpen() reports
+errors yet still returns a TIFF handle.</li>
+</ul>
+</blockquote>
+<p>2018-12-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tga.c (WriteTGAImage): Image rows/columns must not be
+larger than 65535. Fixes SourceForge #583 "heap-buffer-overflow in
+WriteTGAImage of tga.c".</li>
+</ul>
+</blockquote>
+<p>2018-12-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (ReadBMPImage): Fix heap overflow in 32-bit build
+due to arithmetic overflow. Only happens if limits are changed
+from defaults. Fixes SourceForge #582 "heap-buffer-overflow in
+ReadBMPImage of bmp.c".</li>
+</ul>
+</blockquote>
+<p>2018-12-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>common.shi.in (MAGICK_FONT): The test suite must pass even on
+systems where we don't find any fonts.</li>
+</ul>
+</blockquote>
+<p>2018-12-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (ReadMIFFImage): Sanitize claimed profile size
+before allocating memory for it. Fixes oss-fuzz 11781
+"graphicsmagick/coder_MIFF_fuzzer: Out-of-memory in
+graphicsmagick_coder_MIFF_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-12-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadMNGImage): Fix non-terminal MNG looping.
+Fixes oss-fuzz 11596 "graphicsmagick/coder_MNG_fuzzer: Timeout in
+graphicsmagick_coder_MNG_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-12-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xpm.c (WriteXPMImage): Assure that added colormap entry
+for transparent XPM is initialized. Fixes oss-fuzz 11617
+"graphicsmagick/coder_XPM_fuzzer: Use-of-uninitialized-value in
+QueryColorname". (Credit to OSS-Fuzz)</li>
+<li>coders/miff.c (ReadMIFFImage): Fix memory leak of profiles
+'name' when claimed length is zero. Fixes oss-fuzz 11710
+"graphicsmagick/coder_MIFF_fuzzer: Direct-leak in AllocateString".
+and oss-fuzz 11688 "graphicsmagick/coder_MIFF_fuzzer:
+Out-of-memory in graphicsmagick_coder_MIFF_fuzzer". (Credit to
+OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-12-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>fuzzing/oss-fuzz-build.sh: Apply patch from Alex Gaynor to add
+Zstd to the oss-fuzz build.</li>
+</ul>
+</blockquote>
+<p>2018-12-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac (DcrawExtraOptions): For QuantumDepth > 8 pass -6
+option to dcraw. Fixes SourceForge issue #568 "dcraw not
+returning 16 bit image even though quantum depth is set to 16".</li>
+<li>fuzzing/oss-fuzz-build.sh (PKG_CONFIG_PATH): Build WebP prior to
+libtiff so that libtiff has a chance to find it.</li>
+</ul>
+</blockquote>
+<p>2018-11-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (TimeImageCommand): Time command now shows 6
+digits of elapsed time indication since this precision is often
+now available and it is useful to see.</li>
+</ul>
+</blockquote>
+<p>2018-11-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/lib/Magick++/Drawable.h: Fix use of clang diagnostic
+syntax. Addresses SourceForge bug #579 "'diagnostic pop' pragma
+without 'diagnostic push' in Drawable.h.".</li>
+</ul>
+</blockquote>
+<p>2018-11-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (WriteImage): Eliminate use of just-freed
+memory in clone_info->magick when throwing exception due to no
+support for format. Fixes SourceForge issue #576 "heap
+use-after-freee when convert one format into another format".</li>
+<li>magick/command.c (BenchmarkImageCommand): Benchmark command now
+shows 6 digits of elapsed time indication since this precision is
+often now available and it is useful to see.</li>
+</ul>
+</blockquote>
+<p>2018-11-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/wand_api.h ("C"): magick/api.h should be included prior to
+wand/wand_symbols.h. Change made due to report by yzh杨振宏 on
+Wed, 21 Nov 2018 via the graphicsmagick-bugs mailing list.</li>
+</ul>
+</blockquote>
+<p>2018-11-20 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c Fix a bug when OS does not support performance counter.</li>
+</ul>
+</blockquote>
+<p>2018-11-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c (NTElapsedTime): Use
+QueryPerformanceFrequency() and QueryPerformanceCounter() to
+measure elapsed time for Windows.</li>
+</ul>
+</blockquote>
+<p>2018-11-19 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tiff/port/snprintf.c Fix for older Microsoft Visual Studio</li>
+</ul>
+</blockquote>
+<p>2018-11-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/index.rst: Update in preparation for 1.3.31 release.</li>
+<li>version.sh: Update library versioning in preparation for
+1.3.31 release.</li>
+<li>NEWS.txt: Update news in preparation for 1.3.31 release.</li>
+</ul>
+</blockquote>
+<p>2018-11-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (BenchmarkUsage): Document the benchmark
+command better.</li>
+</ul>
+</blockquote>
+<p>2018-11-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resize.c (HorizontalFilter, VerticalFilter): quantum is a
+pointer so it's value can not be usefully flushed. Use a local
+variable and then update quantum pointer when done.</li>
+</ul>
+</blockquote>
+<p>2018-11-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/*: Changed row_count tallying to use 'omp atomic' and
+status update to use 'omp flush' for progress and error
+indication. This replaces most use of 'omp critical' for this
+purpose. Changed some lumpy algorithms which were using 'static'
+scheduling to 'guided' scheduling due to observing better results.
+Also added prolific 'restrict' annotations where they were
+missing.</li>
+<li>www/security.rst: Documented a PGP private key for file signing
+or private correspondence.</li>
+</ul>
+</blockquote>
+<p>2018-11-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/authors.rst: Moved "Glenn Randers-Pehrson" and "Gregory J
+Wolfe" to the "Former Contributor" category.</li>
+</ul>
+</blockquote>
+<p>2018-11-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Added many GCC function annotations in the libraries and coders.</li>
+</ul>
+</blockquote>
+<p>2018-11-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Use printf rather than echo to portably expand tab
+requests in configuration summary.</li>
+</ul>
+</blockquote>
+<p>2018-11-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Use pkg-config data as the initial choice when
+configuring for FreeType 2.0 and libxml-2.0. Only fall back to
+invoking an external script (and then traditional methods) if
+pkg-config fails.</li>
+<li>coders/msl.c (ProcessMSLScript): Release msl_image if OpenBlob
+fails. Similar to ImageMagick CVE-2018-18544. Problem was
+reported to us via email from Petr Gajdos on Thu, 1 Nov 2018.</li>
+</ul>
+</blockquote>
+<p>2018-10-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (WriteMIFFImage): Only run
+strlen(attribute->value) once per attribute since the length won't
+change. May address oss-fuzz 11158
+"graphicsmagick/coder_MIFF_fuzzer: Timeout in
+graphicsmagick_coder_MIFF_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>Fix compilation warnings observed with GCC 8.2.0.</li>
+</ul>
+</blockquote>
+<p>2018-10-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_iterator.c (PixelIterateMonoModifyImplementation):
+Use atomic and flush rather than critical construct for a small
+speedup.</li>
+<li>magick/monitor.c (MagickMonitorFormatted): Serialize calls to
+the progress monitor so that the caller does not need to perform
+this serialization.
+(MagickMonitor): Serialize calls to the progress monitor so that
+the caller does not need to perform this serialization. This
+function is now marked as deprecated.
+(InitializeMagickMonitor): New private function to initialize
+monitor functionality.
+(DestroyMagickMonitor): New private function to destroy monitor
+functionality.</li>
+</ul>
+</blockquote>
+<p>2018-10-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/gif.c (ReadGIFImage): Improve the efficiency of storing a
+GIF comment in order to avoid a DOS opportunity. Fixes oss-fuzz
+11096 "graphicsmagick/coder_GIF_fuzzer: Timeout in
+graphicsmagick_coder_GIF_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-10-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/Makefile.PL.in: Use MAGICK_API_LIBS to obtain the
+list of libraries to use when linking.</li>
+<li>configure.ac: OpenMP library is normally supplied due to a
+CFLAGS option so only supply it in cases where the CFLAGS option
+may be lost or it might not be used. Otherwise the compiler may
+apply the library twice when linking.</li>
+</ul>
+</blockquote>
+<p>2018-10-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Remove Ghostscript library support (--with-gslib)
+from configure script. The 'HasGS' pre-processor defines which
+were enabled by this remain in the source code so it is still
+possible to use this library if absolutely necessary
+(e.g. CPPFLAGS=-DHasGS LIBS=-lgs).</li>
+<li>tests/rwfile.tap: Test TIFF format with all supported
+compression options.</li>
+<li>tests/{rwblob.c, rwfile.c} (main): Use StringToCompressionType()
+to parse compression option. Also consider requested compression
+algorithm when deciding if format is lossy.</li>
+<li>coders/tiff.c (WriteTIFFImage): WebP compression needs
+PHOTOMETRIC_RGB. Fix wrong rows-per-strip calculation when using
+LZMA compression.</li>
+<li>tests/rwblob.tap: Added a rwblob test to verify that lower-case
+magick works.</li>
+<li>magick/static.c (OpenModule): Upper case magick string before
+searching static modules list. Fixes Debian bug 911386
+"libgraphicsmagick-q16-3: graphicsmagick 1.3.30 has made formats
+case-sensitive at the API level".</li>
+<li>filters/analyze.c (AnalyzeImage): X and y should be unsigned
+long to match image rows/columns type. Calculate total pixels by
+simple multiplication rather than counting.</li>
+</ul>
+</blockquote>
+<p>2018-10-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Support WebP compression in
+TIFF. This requires a libtiff release after 4.0.9.</li>
+<li>magick/image.h ("C"): WebPCompression added to CompressionType
+enumeration.</li>
+</ul>
+</blockquote>
+<p>2018-10-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Configure for the Zstd library. Use
+--without-zstd to disable searching for this library. Libtiff may
+require this library to successfully link so static linkage could
+fail if searching for libzstd is disabled.</li>
+<li>magick/image.h ("C"): ZSTDCompression added to CompressionType
+enumeration.</li>
+<li>coders/tiff.c (WriteTIFFImage): Support Zstd compression in
+TIFF. This requires a libtiff release after 4.0.9.</li>
+</ul>
+</blockquote>
+<p>2018-10-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (GMCommandSingle): Add 'compare' to the list of
+command names that gm will support as a command if copied to or
+linked from that name. There was already a 'compare' link
+installed when the '--enable-magick-compat' configure option is
+used, but it could not possibly function without being blessed by
+this list. Related to Debian bug #910652
+"graphicsmagick-imagemagick-compat: Doesn't ship a compare tool".</li>
+</ul>
+</blockquote>
+<p>2018-09-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++/lib/Magick++/Drawable.h: Block unused-private-field
+warnings from Clang due to _dummy members which were intentionally
+included in some parent class definitions.</li>
+<li>magick/widget.c (XEditText): Fix compilation warnings about
+cases which fall-through.</li>
+<li>magick/display.c (MagickXAnnotateEditImage): Fix compilation
+warnings about cases which fall-through.</li>
+<li>coders/pict.c (WritePICTImage): Add more checks to memory
+allocation calculations.</li>
+<li>magick/pixel_cache.c (DestroyCacheInfo): Eliminate intentional
+fall-through logic in switch statement which results in compiler
+warnings. Eliminate switch statements entirely and split
+unrelated logic.</li>
+<li>coders/txt.c (ReadTXTImage): Fix comparison between pointer and
+'0' rather than NULL as was obviously intended.</li>
+<li>coders/msl.c (MSLStartElement): Add missing 'break' statements
+after ThrowException() calls. Otherwise execution falls through
+into unrelated switch cases and throws a redundant exception.</li>
+</ul>
+</blockquote>
+<p>2018-09-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/meta.c (parse8BIM): Eliminate repeated use of strlen()
+which scans the entire remaining string on each cycle. Fixes
+oss-fuzz 10667 "graphicsmagick/coder_IPTCTEXT_fuzzer: Timeout in
+graphicsmagick_coder_IPTCTEXT_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-09-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (MagickGetToken): Fix possible read up to four
+bytes beyond end of stack allocated token buffer. Fixes oss-fuzz
+10653 "graphicsmagick/coder_MVG_fuzzer: Stack-buffer-overflow in
+MagickGetToken". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-09-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>fuzzing/coder_fuzzer.cc (LLVMFuzzerTestOneInput): Limit the
+maximum number of JPEG progressive scans to 50.</li>
+<li>coders/jpeg.c (ReadJPEGImage): Apply a default limit of 100
+progressive scans before the reader quits with an error. This
+limit may be adjusted using the -define mechanism like -define
+JPEG:max-scan-number=500. Also respond more quickly to files
+which exceed the maximum image dimensions. Fixes oss-fuzz 10258
+"graphicsmagick/coder_JPEG_fuzzer: Timeout in
+graphicsmagick_coder_JPEG_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-09-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadMNGImage): mng_LOOP chunk must be at least 5
+bytes long. Fixes oss-fuzz 10455
+"graphicsmagick/coder_MNG_fuzzer: Use-of-uninitialized-value in
+ReadMNGImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-09-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (TraceEllipse): Detect arithmetic overflow when
+computing the number of points to allocate for an ellipse. Fixes
+oss-fuzz 10306 "graphicsmagick/coder_MVG_fuzzer:
+Heap-buffer-overflow in TracePoint". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-09-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (GenerateEXIFAttribute): Eliminate undefined
+shift. Also right-sized involved data types. Fixes oss-fuzz
+10309 "graphicsmagick/coder_JPG_fuzzer: Undefined-shift in
+Read32s". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-09-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawClipPath): Fix Coverity 319663 "Null
+pointer dereferences". Totally insignificant.</li>
+<li>coders/wpg.c (ReadWPGImage): Mask/fix Coverity 319664 "Error
+handling issues".</li>
+<li>magick/attribute.c (FindEXIFAttribute): Change size types from
+signed to unsigned and check for unsigned overflow.
+(GenerateEXIFAttribute): Change size types from signed to unsigned
+and check for unsigned overflow. Fixes oss-fuzz 10283
+"graphicsmagick/coder_JPG_fuzzer: Integer-overflow in
+GenerateEXIFAttribute". (Credit to OSS-Fuzz)</li>
+<li>coders/sfw.c (ReadSFWImage): Enforce that file is read using the
+JPEG reader. (Credit to OSS-Fuzz)</li>
+<li>coders/miff.c (ReadMIFFImage): Fix leak of 'values' buffer due
+to change made yesterday.</li>
+<li>coders/mpc.c (ReadMPCImage): Fix leak of 'values' buffer due to
+change made yesterday. Fixes oss-fuzz 10277
+"graphicsmagick/coder_MPC_fuzzer: Direct-leak in
+ReadMPCImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-09-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (ReadMIFFImage): Support legacy keyword
+'color-profile' for ICC color profile as was used by ImageMagick
+4.2.9.</li>
+<li>coders/mpc.c (ReadMPCImage): Require that first keyword/value be
+id=MagickCache</li>
+<li>coders/miff.c (ReadMIFFImage): Require that first keyword/value
+be id=ImageMagick.</li>
+</ul>
+</blockquote>
+<p>2018-09-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c (DCM_ReadElement): Add more size checks.</li>
+<li>coders/jnx.c (ExtractTileJPG): Enforce that JPEG tiles are read
+by the JPEG coder. Fixes oss-fuzz 10147
+"graphicsmagick/coder_JNX_fuzzer: Use-of-uninitialized-value in
+funcDCM_PhotometricInterpretation". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-09-10 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c Zero fill raster error recovery.</li>
+</ul>
+</blockquote>
+<p>2018-08-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (ConvertPrimitiveToPath): Second attempt to
+prevent heap write overflow of PathInfo array. Fixes oss-fuzz
+10096 "Heap-buffer-overflow in ConvertPrimitiveToPath". (Credit to
+OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-08-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c ("QuantumTransferMode"): CIE Log images with an
+alpha channel are not supported. Fixes oss-fuzz 10013
+"graphicsmagick/coder_TIFF_fuzzer: Use-of-uninitialized-value in
+DisassociateAlphaRegion". (Credit to OSS-Fuzz)</li>
+<li>magick/render.c (DrawImage): SetImageAttribute() appends new
+text to any existing value, leading to every increasing memory
+consumption if the existing value is not deleted first by the
+unwary. Fixes oss-fuzz 9983 "graphicsmagick/coder_MVG_fuzzer:
+Timeout in graphicsmagick_coder_MVG_fuzzer" and oss-fuzz 10016
+"graphicsmagick/coder_MVG_fuzzer: Out-of-memory in
+graphicsmagick_coder_MVG_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>magick/utility.c (TranslateTextEx): Fix off-by-one in loop
+bounds check which allowed a one-byte stack write overflow. Fixes
+oss-fuzz 10055 "graphicsmagick/coder_MVG_fuzzer:
+Stack-buffer-overflow in TranslateTextEx". (Credit to OSS-Fuzz)</li>
+<li>magick/render.c (DrawImage): Be more precise about error
+detection and reporting, and return from an error more quickly.
+Also added MAX_DRAWIMAGE_RECURSION pre-processor definition to
+allow adjusting the drawing recursion limit. The drawing
+recursion limit is still 100, which seems exceptionally generous.</li>
+<li>magick/constitute.c (WriteImage): Produce a more useful error
+message if an encoding delegate is not available.</li>
+<li>magick/nt_base.h (isnan): Try adding a MSVC replacement for
+missing isnan() function. Not yet tested.</li>
+</ul>
+</blockquote>
+<p>2018-08-25 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c This should fix intentional 64 bit file offset
+overflow as depictedin OSS-fuzz-9936. Thanks to OSS-Fuzz.</li>
+</ul>
+</blockquote>
+<p>2018-08-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (ConvertPrimitiveToPath): Need to enlarge
+PathInfo array allocation to avoid possible heap write overflow.
+Fixes oss-fuzz 9651 "graphicsmagick/coder_MVG_fuzzer:
+Heap-buffer-overflow in ConvertPrimitiveToPath". (Credit to
+OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-08-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mpc.c (ReadMPCImage): Insist that the format be
+identified prior to any comment, and that there is only one
+comment.</li>
+<li>coders/miff.c (ReadMIFFImage): Insist that the format be
+identified prior to any comment, and that there is only one
+comment. Fixes oss-fuzz 9979 "graphicsmagick/coder_MIFF_fuzzer:
+Timeout in graphicsmagick_coder_MIFF_fuzzer". This is not a
+serious issue, but the code runs slowly under UBSAN. (Credit to
+OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-08-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (MagickAtoFChk): Add additional validation
+checks for floating point values. NAN and +/- INFINITY values
+also map to 0.0. Fixes oss-fuzz 9630
+"graphicsmagick/coder_MVG_fuzzer: Integer-overflow in
+IsNexusInCore" and oss-fuzz 9612 "graphicsmagick/coder_MVG_fuzzer:
+Integer-overflow in SetCacheNexus". (Credit to OSS-Fuzz)</li>
+<li>magick/render.c (DrawImage): Add missing error-reporting logic
+to return immediately upon memory reallocation failure. Apply
+memory resource limits to PrimitiveInfo array allocation. Fixes
+oss-fuzz 9576 "graphicsmagick/coder_MVG_fuzzer: Null-dereference
+READ in DrawImage", oss-fuzz 9593
+"graphicsmagick/coder_MVG_fuzzer: Out-of-memory in
+graphicsmagick_coder_MVG_fuzzer", oss-fuzz 9648
+"graphicsmagick/coder_MVG_fuzzer: Unknown signal in
+DrawImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-08-16 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coder/mat.c Explicitly reject non-seekable streams.</li>
+</ul>
+</blockquote>
+<p>2018-08-15 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coder/mat.c Correctly check GetBlobSize(image) even for zipstreams.</li>
+</ul>
+</blockquote>
+<p>2018-08-14 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c More aggresive data corruption checking.</li>
+</ul>
+</blockquote>
+<p>2018-08-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xbm.c (XBMInteger): Limit the number of hex digits parsed
+to avoid signed integer overflow. Fixes oss-fuzz 9746
+"graphicsmagick/coder_XBM_fuzzer: Undefined-shift in
+XBMInteger". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-08-07 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Typecast difference to quantum.</li>
+</ul>
+</blockquote>
+<p>2018-08-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c (InsertComplexFloatRow): Avoid signed
+overflow. Fixes oss-fuzz 9667 "graphicsmagick/coder_MAT_fuzzer:
+Integer-overflow in InsertComplexFloatRow". (Credit to OSS-Fuzz)</li>
+<li>coders/xbm.c (ReadXBMImage): Add validations for row and column
+dimensions. Fixes oss-fuzz 9736 "graphicsmagick/coder_XBM_fuzzer:
+Out-of-memory in graphicsmagick_coder_XBM_fuzzer". (Credit to
+OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-08-04 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c Add mechanism to approve embedded subformats in
+WPG. This should mute oss-fuzz 9559. (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-07-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mvg.c (ReadMVGImage): Fix memory leak added on
+2018-07-21. Fixes oss-fuzz 9548 "graphicsmagick/coder_MVG_fuzzer:
+Direct-leak in CloneDrawInfo". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-07-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/cineon.c (ReadCINEONImage): Fix SourceForge issue 571
+"Unexpected hang on a crafted Cineon image" by detecting and
+quitting on EOF appropriately, and verifying that file size is
+sufficient for claimed pixel dimensions when possible.</li>
+<li>fuzzing/oss-fuzz-build.sh, fuzzing/dictionaries/MVG.dict: Added
+MVG fuzzing dictionary by Alex Gaynor.</li>
+</ul>
+</blockquote>
+<p>2018-07-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (SetNexus): For requests one pixel tall,
+SetNexus() was wrongly using pixels in-core rather than using a
+staging area for the case where the nexus rows extend beyond the
+image raster boundary, leading to heap overflow. This can happen
+when virtual pixels outside the image bounds are accessed. Fixes
+oss-fuzz 9512 "graphicsmagick/graphicsmagick_coder_MVG_fuzzer:
+Heap-buffer-overflow in AcquireCacheNexus". (Credit to OSS-Fuzz)</li>
+<li>magick/render.c (ExtractTokensBetweenPushPop):
+ExtractTokensBetweenPushPop() needs to always return a valid
+pointer into the primitive string. Fixes oss-fuzz 9511
+"graphicsmagick/graphicsmagick_coder_MVG_fuzzer: Null-dereference
+READ in DrawImage". (Credit to OSS-Fuzz)
+(DrawPolygonPrimitive): Fix leak of polygon set when object is
+completely outside image. Fixes oss-fuzz 9513
+"graphicsmagick/graphicsmagick_coder_MVG_fuzzer: Direct-leak in
+AllocateThreadViewDataSet". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-07-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (FileToBlob): Use confirm access APIs to verify
+that read access to this path is allowed by policy. Check that
+file is a regular file before proceeding to open and read from it.</li>
+<li>coders/mvg.c (ReadMVGImage): Don't allow MVG files to side-load
+a file as the drawing primitive using '@' syntax. Fixes oss-fuzz
+9494 "graphicsmagick/coder_MVG_fuzzer: Sanitizer CHECK failure in
+"((0)) != (0)" (0x0, 0x0)". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-07-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mvg.c (ReadMVGImage): Don't assume that in-memory MVG
+blob is a null-terminated C string. Fixes oss-fuzz 9469
+"graphicsmagick/coder_MVG_fuzzer: Heap-buffer-overflow in
+AllocateString". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-07-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (ReadMIFFImage): Detect EOF when reading using
+ReadBlobZC() and avoid subsequent heap read overflow. Fixes
+oss-fuzz 9357 "graphicsmagick/coder_MIFF_fuzzer:
+Heap-buffer-overflow in ImportRGBQuantumType". (Credit to
+OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-07-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>fuzzing/oss-fuzz-build.sh (CFLAGS): Try disabling SIMD
+instructions in libjpeg-turbo build.</li>
+</ul>
+</blockquote>
+<p>2018-07-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WriteOnePNGImage): Free png_pixels as soon as
+possible. This might help with oss-fuzz 9334
+"graphicsmagick/coder_PNG8_fuzzer: Direct-leak in
+WriteOnePNGImage", which we have yet to reproduce. It is not
+clear if png_pixels is being clobbered by longjmp or if something
+else is going on.</li>
+</ul>
+</blockquote>
+<p>2018-06-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (ReadJPEGImage): Provide a memory resource limit
+(of 1/5th the memory resource limit for Graphicsmagick) to libjpeg
+to limit how much memory it might consume for itself while reading
+a file. Fixes oss-fuzz 9096 "graphicsmagick/coder_JPEG_fuzzer:
+Timeout in graphicsmagick_coder_JPEG_fuzzer". (Credit to
+OSS-Fuzz)
+(ReadJPEGImage): Make sure that JPEG pixels array is initialized
+in case libjpeg fails to completely initialize it. May fix
+oss-fuzz 9115 "graphicsmagick/coder_JPEG_fuzzer:
+Use-of-uninitialized-value in ReadJPEGImage". We are not sure
+since the problem was not reproduced. (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-06-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh: Update library versioning for 1.3.30 release.</li>
+<li>NEWS.txt: Update news for 1.3.30 release.</li>
+</ul>
+</blockquote>
+<p>2018-06-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): Report exception on EOF file
+reading DPX pixel data. Fixes oss-fuzz 8104
+"graphicsmagick/coder_DPX_fuzzer: Use-of-uninitialized-value in
+WriteDPXImage", oss-fuzz 8297 "graphicsmagick/enhance_fuzzer:
+Use-of-uninitialized-value in EnhanceImage", and oss-fuzz 8133
+"graphicsmagick/coder_DPX_fuzzer: Use-of-uninitialized-value in
+RGBTransformPackets". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-06-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/cmyk.c (ReadCMYKImage): Free scanline buffer in error
+path. Fixes SourceForge issue #567 "small memory leak in rgb.c,
+gray.c and cmyk.c" reported by Petr Gajdos.</li>
+<li>coders/gray.c (ReadGRAYImage): Free scanline buffer in error
+path. Fixes SourceForge issue #567 "small memory leak in rgb.c,
+gray.c and cmyk.c" reported by Petr Gajdos.</li>
+<li>coders/rgb.c (ReadRGBImage): Free scanline buffer in error
+path. Fixes SourceForge issue #567 "small memory leak in rgb.c,
+gray.c and cmyk.c" reported by Petr Gajdos.</li>
+<li>coders/jpeg.c (ReadJPEGImage): Avoid memory leak of profile
+buffer when longjmp-based exception is thrown while reading a
+profile. Fixes oss-fuzz 8957 "graphicsmagick/enhance_fuzzer:
+Direct-leak in ReadGenericProfile". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-06-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xcf.c (load_level): Make sure to free 'tile_image' before
+returning exception. Fixes oss-fuzz 8935
+"graphicsmagick/coder_XCF_fuzzer: Indirect-leak in
+CloneImage". (Credit to OSS-Fuzz)</li>
+<li>coders/jpeg.c (ReadJPEGImage): Allow three warnings of any given
+type before promoting the next warning of the same type to a hard
+error. The warning limit may be adjusted by the user using
+-define jpeg:max-warnings=<value>. Fixes oss-fuzz 8704
+"graphicsmagick/coder_JPG_fuzzer: Out-of-memory in
+graphicsmagick_coder_JPG_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>coders/png.c (ReadPNGImage): Detect EOF when reading
+magic_number. Fixes oss-fuzz 8944
+"graphicsmagick/coder_PNG_fuzzer: Use-of-uninitialized-value in
+ReadPNGImage". (Credit to OSS-Fuzz)
+(ReadPNGImage, ReadJNGImage): Makes sure that return value of
+ReadBlob() is always checked to detect EOF.</li>
+</ul>
+</blockquote>
+<p>2018-06-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Re-structure exception reporting
+so that QuantumTransferMode() exceptions thrown for
+PLANARCONFIG_SEPARATE images are handled immediately. Fixes
+oss-fuzz 8896 "graphicsmagick/coder_BIGTIFF_fuzzer:
+Use-of-uninitialized-value in DisassociateAlphaRegion". (Credit to
+OSS-Fuzz)
+(ReadTIFFImage): tsize_t is a signed type so be prepared for
+unexpected negative values produced by libtiff size functions.
+Fixes oss-fuzz 8934 "graphicsmagick/coder_TIFF_fuzzer: Sanitizer
+CHECK failure in "((0)) != (0)" (0x0, 0x0)". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-06-16 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c Fix oss-fuzz 7735 "graphicsmagick/coder_WPG_fuzzer:
+Use-of-uninitialized-value in ReadWPGImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-06-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadMNGImage): ENDL chunk must be at least one
+byte in size. Fixes oss-fuzz 8832
+"graphicsmagick/coder_MNG_fuzzer: Null-dereference READ in
+ReadMNGImage". (Credit to OSS-Fuzz)
+(ReadMNGImage): Length of DISC chunk must be evenly divisible by
+2. Fixes oss-fuzz 8834 "graphicsmagick/coder_MNG_fuzzer:
+Heap-buffer-overflow in ReadMNGImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-06-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mpc.c (ReadMPCImage): Detect end of file while reading
+image directory. Similar to MIFF fixes for ImageMagick
+CVE-2017-18272.
+(RegisterMPCImage): Require seekable stream since MPC is strictly
+a file-based format and so GetBlobSize() is assured to work.
+Similar to MIFF behavior. Claimed to be part of the resolution
+for ImageMagick CVE CVE-2017-11449. Suggested by Petr Gajdos via
+email on January 3, 2018.</li>
+</ul>
+</blockquote>
+<p>2018-06-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (ReadMIFFImage): Detect end of file while reading
+image directory. Fixes SourceForge issue 565 "ImageMagick
+CVE-2017-18272 applies to GraphicsMagick". Thanks to Petr Gajdos
+for reporting this issue to us.</li>
+<li>magick/import.c (ImportViewPixelArea): Use appropriate
+bits_per_sample validations for FloatQuantumSampleType. Fixes
+oss-fuzz 8780 "graphicsmagick/coder_PTIF_fuzzer:
+Use-of-uninitialized-value in HorizontalFilter". (Credit to
+OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-06-09 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c More than 4GiB are not supported in MAT!</li>
+</ul>
+</blockquote>
+<p>2018-06-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c (ReadMATImage): Add casts to avoid arithmetic
+overflow when computing size and offsets. Fixes oss-fuzz 8801
+"graphicsmagick/coder_MAT_fuzzer: Timeout in
+graphicsmagick_coder_MAT_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>magick/blob.c (ReadBlobLSBDoubles, ReadBlobMSBDoubles): Only
+byte-swap doubles or test doubles for NAN if we have read enough
+bytes for at least one double value.
+(ReadBlob): Add an assertion to enforce that ReadBlob() will never
+report reading more bytes than requested due to some
+implementation issue.</li>
+</ul>
+</blockquote>
+<p>2018-06-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (ReadBlob, WriteBlob): gzread(), BZ2_bzread(),
+gzwrite(), BZ2_bzwrite() return type 'int' rather than 'size_t'
+like their stdio equivalents. Use correct signed type to avoid
+returning a negative value into an unsigned type, forming a huge
+positive value. Fixes oss-fuzz 8600
+"graphicsmagick/coder_MAT_fuzzer: Heap-buffer-overflow in
+ReadBlobLSBDoubles". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-06-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (png_read_raw_profile): Try to shore up parsing of
+raw profile reading to avoid heap read overruns. Fixes oss-fuzz
+8763 "graphicsmagick/coder_PNG32_fuzzer: Heap-buffer-overflow in
+png_read_raw_profile". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-06-07 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Reduce stack usage for 64 bit architecture.</li>
+</ul>
+</blockquote>
+<p>2018-06-06 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c Check return values of SeekBlob for more safety.</li>
+</ul>
+</blockquote>
+<p>2018-06-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneJNGImage): Use DestroyImageList() rather
+than DestroyImage() on returned Image from supposed read of JPEG
+data, in case multiple frames were unexpectedly returned. Also
+add "JPEG:" prefix to filename when reading from temporary file to
+force that it can only be read as a JPEG file, disabling format
+auto-detection based on file header. Fixes oss-fuzz 8755
+"graphicsmagick/coder_JNG_fuzzer: Indirect-leak in
+AllocateImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-06-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (EOFBlob): Implement EOF detection for ZipStream.
+Does some archaic zlib not provide gzeof()? Fixes oss-fuzz 8550
+"graphicsmagick/coder_MAT_fuzzer: Timeout in
+graphicsmagick_coder_MAT_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-06-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOnePNGImage): Skip adding empty raw profile.
+Fixes oss-fuzz "graphicsmagick/coder_PNG_fuzzer:
+Heap-buffer-overflow in png_read_raw_profile". (Credit to
+OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-06-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update NEWS with latest changes.</li>
+<li>coders/dcm.c (DCM_ReadRGBImage): Force the image to DirectClass
+to avoid later use of uninitialized indexes. Fixes oss-fuzz 8602
+"graphicsmagick/coder_DCM_fuzzer: Use-of-uninitialized-value in
+DCM_PostRescaleImage". (Credit to OSS-Fuzz)
+(DCM_ReadPlanarRGBImage): Force the image to DirectClass to avoid
+later use of uninitialized indexes.</li>
+<li>coders/png.c (ReadMNGImage): Free chunk memory in error
+reporting path to avoid leak. Fixes oss-fuzz 8721
+"graphicsmagick/coder_MNG_fuzzer: Direct-leak in
+ReadMNGImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-06-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (ReadImage): Assure that an error exception
+is thrown if coder returns null without properly reporting an
+exception.</li>
+<li>magick/blob.c (BlobToImage): Assure that an error exception is
+thrown if coder returns null without properly reporting an
+exception.</li>
+<li>coders/png.c (ReadMNGImage): Disable mystery "linked list is
+corrupted" code. Assure that exceptions are reported to the
+correct place so they are not lost. Fixes oss-fuzz 8710
+"graphicsmagick/coder_MNG_fuzzer: Indirect-leak in
+AllocateImage". (Credit to OSS-Fuzz)</li>
+<li>coders/tiff.c (ReadTIFFImage): Initialize allocated scanline,
+strip, or tile to zero in order to avoid complaint about use of
+uninitialized data if libtiff fails to write all the bytes. Fixes
+oss-fuzz 8551 "graphicsmagick/coder_TIFF_fuzzer:
+Use-of-uninitialized-value in ImportGrayQuantumType". (Credit to
+OSS-Fuzz)</li>
+<li>magick/annotate.c (RenderFreetype): Throw an exception if
+DrawInfo font is null. Should fix oss-fuzz 8557
+"graphicsmagick/coder_PCD_fuzzer: Unknown signal in
+RenderFreetype" and may fix oss-fuzz 8544
+"graphicsmagick/coder_PCD_fuzzer: Null-dereference READ in
+RenderFreetype". (Credit to OSS-Fuzz)</li>
+<li>coders/jpeg.c (ReadGenericProfile): Add/improve tracing for
+profile size and when JPEG header is being read.</li>
+</ul>
+</blockquote>
+<p>2018-06-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneJNGImage): Report a useful exception for
+the case when the JNG file fails to provide the necessary image
+chunks to allocate the color image. Inspired by oss-fuzz 8666
+"graphicsmagick/coder_JNG_fuzzer: ASSERT: data != (const char *)
+NULL" although the reported issue was not reproduced.</li>
+</ul>
+</blockquote>
+<p>2018-05-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadMNGImage): Fix off-by-one in length validation
+for TERM chunk which allowed one byte heap read overflow. Fixes
+oss-fuzz 8615 "graphicsmagick/coder_MNG_fuzzer:
+Heap-buffer-overflow in mng_get_long". (Credit to OSS-Fuzz)
+(ReadMNGImage): Fix leak of MngInfo in error reporting path.
+Fixes oss-fuzz 8604 "graphicsmagick/coder_MNG_fuzzer: Direct-leak
+in ReadMNGImage". (Credit to OSS-Fuzz)
+(ReadMNGImage): Verify that claimed chunk size does not exceed
+input size. Fixes oss-fuzz 8564 "graphicsmagick/coder_MNG_fuzzer:
+Out-of-memory in graphicsmagick_coder_MNG_fuzzer". (Credit to
+OSS-Fuzz)</li>
+<li>coders/tiff.c (ReadTIFFImage): Reject files with excessive
+samples-per-pixel or extra-samples. Avoids potential issues
+observed in oss-fuzz 8634 "graphicsmagick/coder_BIGTIFF_fuzzer:
+Undefined-shift in ImportAlphaQuantumType". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-05-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadMNGImage): Assure that object id index is
+always less than MNG_MAX_OBJECTS to avoid overflow. Fixes
+oss-fuzz 8596 "graphicsmagick/coder_MNG_fuzzer:
+Index-out-of-bounds in ReadMNGImage" and likely other issues yet
+to be reported. (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-05-30 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (CompareEdges): Per ticket #562,
+function CompareEdges() did not conform to the qsort()
+requirement that if CompareEdges(edge0,edge1) returns
+-1 (i.e., edge0 "less than" edge1), then
+CompareEdges(edge1,edge0) should return 1 (edge1
+"greater than" edge0). This has been fixed.</li>
+</ul>
+</blockquote>
+<p>2018-05-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneJNGImage): Deal with JDAA JNG chunk with
+length zero. Fixes oss-fuzz 8562
+"graphicsmagick/coder_JNG_fuzzer: ASSERT: data != (const char *)
+NULL". (Credit to OSS-Fuzz)</li>
+<li>coders/tiff.c (ReadTIFFImage): Check that the bits-per-sample is
+supported by the implementation before attempting to decode the
+image. Fixes oss-fuzz 8554 "graphicsmagick/coder_BIGTIFF_fuzzer:
+Undefined-shift in MagickBitStreamMSBWrite". (Credit to OSS-Fuzz)</li>
+<li>coders/png.c (ReadMNGImage): Eliminate use of uninitialized
+header magic data by checking for EOF first. Fixes oss-fuzz 8597
+"graphicsmagick/coder_MNG_fuzzer: Use-of-uninitialized-value in
+ReadMNGImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-05-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>fuzzing/oss-fuzz-build.sh: More fixes based on what is observed
+in oss-fuzz build log.</li>
+</ul>
+</blockquote>
+<p>2018-05-24 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jnx.c The attribute should belong to only one scene and
+not to whole image list.</li>
+</ul>
+</blockquote>
+<p>2018-05-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>fuzzing/oss-fuzz-build.sh: Changes to add CPPFLAGS to configure
+executions to hopefully get oss-fuzz build closer to success.</li>
+</ul>
+</blockquote>
+<p>2018-05-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/t/jpeg/read.t: Add a JNX reader test case.</li>
+<li>coders/jnx.c (ReadJNXImage): JNX image depth should be 8.</li>
+<li>fuzzing/oss-fuzz-build.sh: Apply patch from Alex Gaynor to
+switch libpng to autotools build system, as well as configure
+GraphicsMagick with '--with-quantum-depth=16'.</li>
+</ul>
+</blockquote>
+<p>2018-05-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Validate tile memory requests for
+the TIFFReadRGBATile() case in the same way as the TIFFReadTile()
+case. Fixes oss-fuzz 8434 "graphicsmagick/coder_BIGTIFF_fuzzer:
+Out-of-memory in graphicsmagick_coder_BIGTIFF_fuzzer". (Credit to
+OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-05-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tile.c (ReadTILEImage): Remove any existing size request
+when while image to tile. This avoids size being used for both
+the input image size and the tile image size. Fixes SourceForge
+issue #563 "tile:<image> appears to blow image up by 100% before
+applying tiling".</li>
+</ul>
+</blockquote>
+<p>2018-05-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>fuzzing/oss-fuzz-build.sh: Patch from Paul Kehrer to disable
+libpng test programs and binaries while building libpng in support
+of oss-fuzz testing.</li>
+<li>coders/dcm.c (DCM_ReadGrayscaleImage): If a palette was
+provided, the image may be in PseudoClass but we need DirectClass
+for gray image when GRAYSCALE_USES_PALETTE is not defined. Fixes
+oss-fuzz 7550 "graphicsmagick/coder_DCM_fuzzer:
+Use-of-uninitialized-value in SyncImageCallBack". (Credit to
+OSS-Fuzz)
+(ReadDCMImage): Restore use of DCM_PostRescaleImage() in order to
+obtain suitably scaled DICOM again. Hopefully it is more robust
+now.
+(DCM_ReadPaletteImage): Assure that DirectClass pixels are
+initialized.</li>
+</ul>
+</blockquote>
+<p>2018-05-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Remove strange addition of
+image->columns to pixel buffer offsets which now causes a heap
+overflow since the buffer has been right-sized. Perhaps the extra
+offset plus the over-sized allocation was some attempt to avoid
+buffer over/underflows due to bugs in libtiff. Fixes oss-fuzz 8384
+"graphicsmagick/coder_BIGTIFF_fuzzer: Heap-buffer-overflow in
+put1bitbwtile" which is described to be a regression. (Credit to
+OSS-Fuzz)</li>
+<li>magick/render.c (DrawImage): Fix wrong range checks which caused
+spurious "Parsing of SVG images fail with "Non-conforming drawing
+primitive definition (push)" failure. Fixes SourceForge issue 561
+"Parsing of SVG images fail with "Non-conforming drawing primitive
+definition (push)"" which is due to problems caused by the fix for
+SourceForge issue 517.</li>
+<li>coders/tiff.c (WritePTIFImage): Use '-define
+ptif:minimum-geometry=<geometry>' to specify the smallest
+subresolution frame which is produced by the PTIF (Pyramid TIFF)
+writer.</li>
+</ul>
+</blockquote>
+<p>2018-05-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WritePTIFImage): Allow 1x1 input image to be
+supported.</li>
+<li>coders/png.c (ReadOneJNGImage): Unconditionally free JDAT chunk
+memory. Fixes oss-fuzz 8366 "graphicsmagick/coder_JNG_fuzzer:
+Direct-leak in ReadOneJNGImage". (Credit to OSS-Fuzz)</li>
+<li>coders/tiff.c (WritePTIFImage): Fix leak of pyramid Image list
+if ResizeImage() fails. Fixes oss-fuzz 8364
+"graphicsmagick/coder_PTIF_fuzzer: Indirect-leak in
+CloneImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-05-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Add and use
+ThrowTIFFWriterException() macro to consistently clean-up when
+throwing writer exception. May fix oss-fuzz 8321
+"graphicsmagick/coder_EPT_fuzzer: Direct-leak in
+TIFFClientOpen". (Credit to OSS-Fuzz)
+(ReadTIFFImage): Add and use ThrowTIFFReaderException() macro to
+consistently clean-up when throwing reader exception.</li>
+</ul>
+</blockquote>
+<p>2018-05-16 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul>
+<li><p class="first">magick/alpha_composite.h (AlphaCompositePixel): The
+macro definition for MagickAlphaCompositeQuantum in
+alpha_composite.h computes an expression of the form:</p>
+<p>a * b + c * d * e</p>
+<p>Code in function AlphaCompositePixel() (also in
+alpha_composite.h) multiplies the result of this macro
+by variable "delta" as follows:</p>
+<p>delta * a * b + c * d * e</p>
+<p>However, the intended result is actually:</p>
+<p>delta * ( a * b + c * d * e )</p>
+<p>The macro definition has been modified to enclose the
+entire expression in parentheses.</p>
+<p>The effects of this bug were particularly evident at the
+boundary between a stroked polygon and a transparent
+black region. More generally, an incorrect composited
+pixel value was being computed by AlphaCompositePixel()
+whenever the output alpha value was not 100% opaque.</p>
+</li>
+</ul>
+</blockquote>
+<p>2018-05-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/rwblob.tap: Add a test for PTIF format.</li>
+<li>coders/tiff.c (WritePTIFImage): Fix Image blob referencing in
+order to avoid double-free when writing PTIF to memory BLOB. Fixes
+oss-fuzz 8280 "graphicsmagick/coder_PTIF_fuzzer: Heap-double-free
+in Magick::BlobRef::~BlobRef". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-05-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Use libtiff's
+TIFFDefaultStripSize() function rather than an old porting macro
+required by some defunct libtiff version. Expected to fix
+oss-fuzz 8248 "graphicsmagick/coder_EPT_fuzzer:
+Floating-point-exception in WriteTIFFImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-05-13 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Fix potentional leak when compressed object is
+corrupted. Fixes oss-fuzz 8251 (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-05-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Fix leak of Image when
+TIFFReadRGBAImage() reports failure. Also harden buffer
+allocation calculation. Fixes oss-fuzz 8275
+"graphicsmagick/coder_BIGTIFF_fuzzer: Indirect-leak in
+AllocateImage". (Credit to OSS-Fuzz)</li>
+<li>coders/ept.c (ReadEPTImage): Add validations of 'count' and
+'filesize' read from EPT file. In response to oss-fuzz 8248
+"graphicsmagick/coder_EPT_fuzzer: Floating-point-exception in
+WriteTIFFImage" but we are unable to recreate the oss-fuzz issue
+since the EPT reader already immediately reports an EOF exception.</li>
+</ul>
+</blockquote>
+<p>2018-05-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>fuzzing/oss-fuzz-build.sh: Apply SourceForge patch #57 "Add
+fuzzing support for jpeg + freetype delegates" by Alex Gaynor.</li>
+<li>coders/png.c (read_user_chunk_callback): Fix memory leak and use
+of uninitialized memory when handling eXIf chunk. Fixes oss-fuzz
+8247 "graphicsmagick/coder_PNG24_fuzzer: Direct-leak in
+png_malloc". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-05-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>fuzzing/oss-fuzz-build.sh: Apply SourceForge patch #56 "Use a
+few delegate libraries in fuzzing" by Alex Gaynor.</li>
+</ul>
+</blockquote>
+<p>2018-05-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/rwfile.tap: MIFF zip and bzip compression tests do not
+fail if zlib and bzlib are not available because the compression
+request is silently changed to no compression.</li>
+</ul>
+</blockquote>
+<p>2018-05-07 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage, InsertAttributeIntoInputStream):
+For a reference such as 'class="classname"', the "classname"
+is now allowed to be undefined.</li>
+<li>coders.svg.c (ProcessStyleClassDefs): Class definitions
+defined within a <style> block may now be empty.</li>
+<li>These relaxed conditions are not specifically called out in
+the SVG spec as being either acceptable or unacceptable, but
+other SVG renderers (e.g., Chrome) handle them this way. These
+changes do not resolve, but are related to, ticket #307.</li>
+</ul>
+</blockquote>
+<p>2018-05-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>utilities/Makefile.am (utilities/tests/montage.log): Fix
+dependency rule so that effects.tap is fully executed before
+execution of montage.tap starts.</li>
+</ul>
+</blockquote>
+<p>2018-05-04 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage, TraceXXX): The PrimitiveInfo
+array used to store points generated by TraceEllipse(), the
+other TraceXXX() functions, and DrawImage() was not always
+being expanded when needed, resulting in writes beyond the
+end of the currently allocated storage. To fix this problem,
+a new data structure PrimitiveInfoMgr, and an associated
+function, PrimtiveInfoRealloc(), were written to handle
+expanding the PrimitiveInfo array as needed. DrawImage() and
+the TraceXXX() functions were modified to prevent the out of
+bounds writes to memory. This fixes ticket #516.</li>
+</ul>
+</blockquote>
+<p>2018-05-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOneJNGImage): Add more JNG chunk
+validations. Fixes an issue reported by "Trace Probe" via a
+follow-up post to SourceForge issue 437 "assertion failure in
+WriteBlob", although the issue described was not reproduced.</li>
+<li>coders/meta.c (ReadMETAImage): Detect and report 8BIMTEXT and
+8BIMWTEXT decoding problems. Fixes oss-fuzz 8125
+"graphicsmagick/coder_8BIMTEXT_fuzzer: Use-of-uninitialized-value
+in format8BIM". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-05-02 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (TraceStrokePolygon): Excessively
+large values of stroke-width were cascading through
+other computations, causing the function to write beyond
+the end of it's array of points when the stroke-linejoin
+attribute value was "round". Code was added to reallocate
+the array of points as needed, and to limit the size of
+stroke-width (for computational purposes) to no more than
+approximately twice the diagonal size of the output image.
+Fixes ticket #515.</li>
+<li>The same limit on stroke-width was applied to all other
+instances of the same computation in render.c.</li>
+</ul>
+</blockquote>
+<p>2018-05-01 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>This change set fixes ticket #471.</li>
+<li>magick/render.c (DrawImage): Polylines with fewer
+than two points were being flagged as an error. The
+SVG spec has no such restriction (fixed).</li>
+<li>coders/svg.c (SVGStartElement) Inner <svg> elements
+could modify the output image dimensions if a geometry
+string was supplied. Now the output image dimensions
+are determined by the outermost <svg> only.</li>
+</ul>
+</blockquote>
+<p>2018-05-01 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (TraceEllipse, TraceRectangle,
+TraceRoundRectangle): Per the SVG spec, rectangles and
+round rectangles having a width or height of zero are
+not rendered. Also per the spec, ellipses having an x
+or y radius of zero are not rendered. Fixes ticket #457.</li>
+</ul>
+</blockquote>
+<p>2018-04-30 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.h, (PrimitiveInfo), magick/render.c: Added
+member "flags" to PrimitiveInfo to support indicating closed
+shapes (e.g., rectangle, circle, path closed using 'z' or 'Z').
+Updated code in render.c (functions TraceXXX) to indicate
+closed shapes. This replaces the previous policy of detecing
+closed shapes by comparing the first and last points to see if
+they are identical (within MagickEpsilon). The old policy
+prevented open subpaths with the same first and last point from
+being rendered properly (per the SVG spec) when round or square
+endcaps were enabled. Part of the fix for ticket #322.</li>
+<li>magick/render.c (ConvertPrimitiveToPath): Modified duplicate
+point elimination code so that the first and last points of
+a subpath are always preserved. Consequences: (1) Allows
+for the correct rendering of the sequence "move x1 y1 line
+x1 y1" with round or square endcaps. Part of the fix for
+ticket #322. (2) Fixes a bug in which eliminating the last
+point as a duplicate caused a closed shape to no longer be
+closed. This would manifest itself, for example, as a small
+"nub" on the boundary of a filled circle.</li>
+<li>magick/render.c (GetPixelOpacity): Fixed a bug in the
+code that computed the distance between a point and a
+segment (polygon edge). Prior to this fix, for zero length
+segments this code would generate a divide-by-zero and
+incorrect output. Part of the fix for ticket #322.</li>
+<li>magick/render.c (DrawPolygonPrimitive): Polygons/paths with
+zero or one points are no longer rendered per the SVG spec.</li>
+<li>magick/render.c (DrawStrokePolygon): Per the SVG spec, a
+polygon consisting of a single move-to command is not stroked.</li>
+<li>magick/render.c (TracePath): Per the SVG spec, if the
+endpoints (x1, y1) and (x2, y2) of an arc subpath are identical,
+then this is equivalent to omitting the elliptical arc segment
+entirely. For rendering purposes the zero length arc is
+treated like a zero length "line to" command to the current
+point.</li>
+<li>magick/render.c (TraceStrokePolygon): Added code to detect
+zero length open subpaths and return a stroked polygon containing
+no points when round or square endcaps are not enabled. This
+satisfies the SVG spec requirement that zero length subpaths are
+only stroked if the 'stroke-linecap' property has a value of
+round or square.</li>
+<li>magick/render.c (TracePath): Fixed a bug in which if a "move to"
+command was followed by additional pairs of points, indicating
+implied "line to" commands, each point was added twice.</li>
+</ul>
+</blockquote>
+<p>2018-04-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pcx.c (ReadPCXImage): Colormap from PCX header is only
+used if colors <= 16. Determination of DirectClass image was
+wrong. Fixes oss-fuzz 8093 "graphicsmagick/coder_PCX_fuzzer:
+Use-of-uninitialized-value in IsMonochromeImage". (Credit to
+OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-04-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh: Updates to prepare for the 1.3.29 release.</li>
+<li>coders/pict.c (DecodeImage): Assure that scanline is initialized
+to avoid use of uninitialized data. Fixes oss-fuzz 8063
+"graphicsmagick/coder_WPG_fuzzer: Use-of-uninitialized-value in
+ReadPICTImage". (Credit to OSS-Fuzz)</li>
+<li>coders/dpx.c (ReadDPXImage): Assure that NULL pixels is not
+used. Fixes oss-fuzz 8078 "graphicsmagick/coder_DPX_fuzzer:
+Null-dereference WRITE in ReadDPXImage". (Credit to OSS-Fuzz)</li>
+<li>NEWS.txt: Update NEWS file with information about changes since
+last release.</li>
+</ul>
+</blockquote>
+<p>2018-04-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dib.c (ReadDIBImage): Disable EOF tests for "ICODIB"
+subformat due to icon file provided by SourceForge issue #557
+"ErrorCorruptImage: Magick: Unexpected end-of-file ()" where an
+EOF error was reported due to no mask data being supplied.</li>
+<li>coders/png.c (ReadOneJNGImage): The embedded JPEG image is
+required to have the same dimensions as the JNG image as provided
+by JHDR. Fixes SourceForge bug 555 "heap-buffer-overflow in
+AcquireCacheNexus when processing jng file". It is likely that
+this issue is precipitated by using 'montage' which seems to set a
+default non-zero image size.
+(ReadMNGImage): By default limit the maximum loops specifiable by
+the MNG LOOP chunk to 512 loops, but allow this to be modified by
+'-define mng:maximum-loops=value'. Also assure that the value is
+in the range of 0-2147483647 as per the MNG specification. This
+is to address the denial of service issue described by
+CVE-2018-10177. This problem was reported to us by Petr Gajdos
+via email on Fri, 20 Apr 2018.</li>
+<li>coders/dpx.c (ReadDPXImage): Move misplaced channel validation
+code. Fixes oss-fuzz 8041 "graphicsmagick/coder_DPX_fuzzer:
+Use-of-uninitialized-value in WriteDPXImage" and oss-fuzz 8055
+"graphicsmagick/enhance_fuzzer: Use-of-uninitialized-value in
+EnhanceImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-04-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xpm.c (StringToListMod): Algorithm fixes to fix use of
+uninitialized data. Fixes oss-fuzz 8046
+"graphicsmagick/coder_XPM_fuzzer: Use-of-uninitialized-value in
+StringToListMod". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-04-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xpm.c (ReadXPMImage): Reduce memory consumption further.
+Hopefully fixes oss-fuzz 8013 "graphicsmagick/coder_XPM_fuzzer:
+Out-of-memory in graphicsmagick_coder_XPM_fuzzer". (Credit to
+OSS-Fuzz)</li>
+<li>magick/utility.c (StringToList): Only allocate the memory
+required when converting string to an ASCII list. May or may not
+fix oss-fuzz 8013 "graphicsmagick/coder_XPM_fuzzer: Out-of-memory
+in graphicsmagick_coder_XPM_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-04-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (ReadBMPImage): Fix benign use of uninitialized
+data when testing header magick. Fixes oss-fuzz 7980
+"graphicsmagick/coder_BMP_fuzzer: Use-of-uninitialized-value in
+LocaleNCompare". (Credit to OSS-Fuzz)</li>
+<li>coders/dpx.c (ReadDPXImage): ColorDifferenceCbCr does require
+even image width. Fixes oss-fuzz 7966
+"graphicsmagick/coder_DPX_fuzzer: Unknown signal in
+TentUpsampleChroma". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-04-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): ColorDifferenceCbCr element
+requires two samples/pixel, not one. Fixes oss-fuzz 7951
+"graphicsmagick/coder_DPX_fuzzer: Heap-buffer-overflow in
+ReadDPXImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-04-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdb.c (ReadPDBImage): Assure that pixels buffer is
+initialized. Fixes oss-fuzz 7937
+"graphicsmagick/coder_PDB_fuzzer: Use-of-uninitialized-value in
+ReadPDBImage". (Credit to OSS-Fuzz)</li>
+<li>coders/mvg.c (ReadMVGImage): Assure that MVG viewbox parameters
+were supplied. Fixes oss-fuzz 7936
+"graphicsmagick/coder_MVG_fuzzer: Use-of-uninitialized-value in
+ReadMVGImage". (Credit to OSS-Fuzz)</li>
+<li>coders/dpx.c (ReadDPXImage): Element descriptors CbYCrY422 and
+CbYACrYA4224 require that the image width be evenly divisible by 2
+so enforce that. Fixes oss-fuzz 7935
+"graphicsmagick/coder_DPX_fuzzer: Heap-buffer-overflow in
+ReadDPXImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-04-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): Reject DPX files which claim to use
+signed data. Fixes oss-fuzz 7758
+"graphicsmagick/coder_DPX_fuzzer: Use-of-uninitialized-value in
+WriteDPXImage". (Credit to OSS-Fuzz)
+(ReadDPXImage): Validate that the image elements do update all of
+the channels, including the alpha channel. Now report an error if
+a color channel is missing. Fixes oss-fuzz 7758
+"graphicsmagick/coder_DPX_fuzzer: Use-of-uninitialized-value in
+WriteDPXImage".</li>
+<li>coders/gif.c (DecodeImage): Finally fix oss-fuzz 7732
+"graphicsmagick/coder_GIF_fuzzer: Heap-buffer-overflow in
+DecodeImage" which was not actually fixed with previous
+changes. (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-04-21 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li><dl class="first docutils">
+<dt>coders/topol.c Emit error when tile storage overflows image data;</dt>
+<dd>fixes oss-fuzz 7769 thanks to oss-fuzz.</dd>
+</dl>
+</li>
+</ul>
+</blockquote>
+<p>2018-04-20 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (ConvertPrimitiveToPath): Fixed a bug
+in which SVG paths containing multiple open subpaths were
+not being processed correctly, resulting in incorrect
+output. This fixes ticket #94.</li>
+</ul>
+</blockquote>
+<p>2018-04-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/gif.c (DecodeImage): Fix use of uninitialized memory
+during error condition in decoder. Fixes oss-fuzz 7732
+"graphicsmagick/coder_GIF_fuzzer: Heap-buffer-overflow in
+DecodeImage". (Credit to OSS-Fuzz)</li>
+<li>coders/txt.c (ReadTXTImage): Assure that all image pixels are
+initialized to black.</li>
+<li>Magick++/demo/zoom.cpp (main): Add a -read-blob option to read
+input file into a Blob so that it is read by the Blob reader
+rather than the file reader. Default the output Geometry to the
+input image geometry in case the user does not specify a resize
+resolution or geometry.</li>
+<li>Magick++/tests/readWriteBlob.cpp (main): Improve the quality of
+code which reads a file into memory for Blob testing.</li>
+<li>magick/blob.c (BlobToImage): Add exception reports for the cases
+where 'magick' was not set and the file format could not be
+deduced from its header. Previously a null Image pointer was
+being returned without any exception being thrown.</li>
+</ul>
+</blockquote>
+<p>2018-04-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): Assure that CbCr layer initializes
+all channels if it is the first element of a planar DPX. Fixes
+oss-fuzz 7703 "graphicsmagick/coder_DPX_fuzzer:
+Use-of-uninitialized-value in WriteDPXImage". (Credit to OSS-Fuzz)</li>
+<li>coders/pict.c (ReadPICTImage): Don't refer to filename member of
+ImageInfo which was just destroyed. Much thanks to Alex Gaynor for
+finding this. Should fix oss-fuzz 6867
+"graphicsmagick/coder_PCT_fuzzer: Heap-use-after-free in
+GetLocaleExceptionMessage". (Credit to OSS-Fuzz).</li>
+</ul>
+</blockquote>
+<p>2018-04-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sgi.c (ReadSGIImage): Assure that iris pixels are fully
+initialized. Fixes oss-fuzz 7543
+"graphicsmagick/coder_SGI_fuzzer: Use-of-uninitialized-value in
+SGIEncode". (Credit to OSS-Fuzz).</li>
+<li>coders/xcf.c (ReadXCFImage): Restore SetImage() which was
+previously commented out. This is needed to assure initialized
+pixels. Fixes oss-fuzz 7430 "graphicsmagick/coder_XCF_fuzzer:
+Use-of-uninitialized-value in AlphaCompositePixel". (Credit to
+OSS-Fuzz).</li>
+<li>coders/pict.c (ReadPICTImage): Properly initialize "black
+canvas" that tiles may be composed on. Fixes oss-fuzz 7574
+"graphicsmagick/enhance_fuzzer: Use-of-uninitialized-value in
+EnhanceImage". (Credit to OSS-Fuzz).</li>
+<li>coders/rle.c (ReadRLEImage): Check for EOF when reading comment.
+Fixes oss-fuzz 7667 "graphicsmagick/coder_RLE_fuzzer:
+Use-of-uninitialized-value in ReadRLEImage". (Credit to OSS-Fuzz).</li>
+<li>coders/pdb.c (WritePDBImage): Avoid use of uninitialized
+bytes. Fixes oss-fuzz 7638 "graphicsmagick/coder_PDB_fuzzer:
+Use-of-uninitialized-value in WritePDBImage". (Credit to
+OSS-Fuzz).</li>
+<li>coders/rla.c (ReadRLAImage): Add many more validations,
+including scanline offsets and number of channels. Fixes oss-fuzz
+7653 "graphicsmagick/coder_RLA_fuzzer: Timeout in
+graphicsmagick_coder_RLA_fuzzer". (Credit to OSS-Fuzz).</li>
+<li>coders/txt.c (ReadTXTImage): Implement missing subrange logic to
+read only the specified range of frames. Limits frames read from
+oss-fuzz test case
+clusterfuzz-testcase-minimized-coder_TEXT_fuzzer-6061076048248832
+"graphicsmagick/coder_TEXT_fuzzer: Timeout in
+graphicsmagick_coder_TEXT_fuzzer". (Credit to OSS-Fuzz).</li>
+<li>Magick++/lib/Image.cpp (read): Set subrange = 1 since this
+interface is intended to read just one frame from the input file.
+Use the STL-based interfaces to read multiple frames.</li>
+<li>coders/fits.c (ReadFITSImage): Verify FITS header before reading
+further. Rejects file from oss-fuzz 7650
+"graphicsmagick/coder_FITS_fuzzer: Out-of-memory in
+graphicsmagick_coder_FITS_fuzzer". (Credit to OSS-Fuzz).</li>
+<li>PerlMagick/Magick.xs (Get): Fix PerlMagick compilation problem
+due to rename/repurposing of image->clip_mask.</li>
+</ul>
+</blockquote>
+<p>2018-04-13 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c, magick/image.h: In order to be able to
+support SVG masks, and to be able to further extend the
+Image data structure without changing its size, new data
+structure ImageExtra (struct _ImageExtra) has been added.
+Header file image.h contains only a forward declaration;
+the members of ImageExtra are defined in file image.c.
+Image member variable Image * clip_mask has been replaced
+by ImageExtra * extra, and function prototypes that enable
+access to ImageExtra have been added to image.h. The
+clip_mask member variable now resides in ImageExtra. All
+references to Image::clip_mask in the GraphicsMagick
+source code have either been replaced with direct references
+to ImageExtra::clip_mask (image.c), or have been replaced
+with calls to access function ImageGetClipMask().</li>
+<li>magick/render.c, magick/render.h: In order to be able to
+support SVG masks, and to be able to further extend the
+DrawInfo data structure without changing its size, new data
+structure DrawInfoExtra (struct _DrawInfoExtra) has been added.
+Header file render.h contains only a forward declaration;
+the members of DrawInfoExtra are defined in file render.c.
+DrawInfo member variable char * clip_path has been replaced by
+DrawInfoExtra * extra, and function prototypes that enable
+access to DrawInfoExtra have been added to render.h. The
+clip_path member variable now resides in ImageExtra. All
+references to DrawInfo::clip_path in the GraphicsMagick
+source code have either been replaced with direct references
+to DrawInfoExtra::clip_path (render.c), or have been
+replaced with calls to access function DrawInfoGetClipPath().</li>
+<li>magick/image.c (new functions CompositePathImage,
+CompositeMaskImage, GetImageCompositeMask,
+SetImageCompositeMask): Defined new data structure ImageExtra,
+added create/destroy logic, and implemented associated access
+functions. Implemented SVG masks.</li>
+<li>magick/render.c (DrawImage, new function DrawCompositeMask):
+Defined new data structure DrawInfoExtra, added create/destroy
+logic, and implemented associated access functions. Impemented
+SVG masks.</li>
+<li>magick/pixel_cache.c (SyncCacheNexus, new function
+CompositeCacheNexus): Fixed references to Image::clip_mask.
+Implemented SVG masks.</li>
+<li>coders/svg.c (SVGStartElement, SVGEndElement): Implemented
+SVG masks.</li>
+<li>locale/c.mgk, magick/gm_messages.mc, magick/local_c.h:
+Added new error codes to support SVG masks.</li>
+<li>coders/ps3.c, magick/enhance.c: Fixed references to
+Image::clip_mask.</li>
+<li>magick/draw.c, wand/drawing_wand.c: Fixed references to
+DrawInfo::clip_path.</li>
+</ul>
+</blockquote>
+<p>2018-04-13 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c Crash on row overflow fixed oss-fuzz 7639 thanks to oss-fuzz.</li>
+</ul>
+</blockquote>
+<p>2018-04-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): Add more header validations.
+Always assure that scanline is initialized for Luma channel. Fixes
+oss-fuzz 7544 "graphicsmagick/coder_DPX_fuzzer:
+Use-of-uninitialized-value in WriteDPXImage". (Credit to OSS-Fuzz)</li>
+<li>coders/pdb.c (ReadPDBImage): Add more EOF checks to avoid benign
+use of uninitialized data. Fixes oss-fuzz 7545
+"graphicsmagick/coder_PDB_fuzzer: Use-of-uninitialized-value in
+ReadPDBImage".</li>
+<li>coders/wpg.c (InsertRow, UnpackWPGRaster): x & y should be
+'unsigned long' to match type used by pixel cache APIs and image
+rows/columns.</li>
+</ul>
+</blockquote>
+<p>2018-04-08 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c Stop reading when last row is reached.
+This should stop oss-fuzz 7528 thanks to oss-fuzz.</li>
+</ul>
+</blockquote>
+<p>2018-04-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xcf.c (ReadXCFImage): Fix use of uninitialized data in
+magick header string for runt file. Fixes oss-fuzz 7521
+"graphicsmagick/coder_XCF_fuzzer: Use-of-uninitialized-value in
+LocaleNCompare". (Credit to OSS-Fuzz).</li>
+</ul>
+</blockquote>
+<p>2018-04-09 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>OVERVIEW: Change set 9aaeeca0224c modified the drawing
+of clipping paths to conform to the SVG spec. This change
+set restores the previous behavior for non-SVG clients of
+render.c, while still satisfying the SVG spec for SVG clients.</li>
+<li>magick/render.h (DrawInfo): Added a bit field in member
+"flags" to indicate that drawing should be SVG compliant.</li>
+<li>magick/render.c (DrawImage): Now recognizes keyword
+"svg-compliant", and tags DrawInfo accordingly. This
+allows for existing features in render.c to be changed
+to comply with the SVG spec without impacting the previous
+behavior expected by non-SVG clients.</li>
+<li>magick/render.c (DrawImage): Now uses DrawInfo "flags"
+bit for SVG compliance in conjunction with "flags" bit
+for "clipping path" to determine when to ignore changes
+to fill color, stroke color, etc. This restores the
+previous behavior for clipping paths for non-SVG clients.</li>
+<li>coders/svg.c (SVGStartElement): The initial set of
+MVG commands for rendering an SVG file now includes
+new keyword "svg-compliant" (to indicate that certain
+graphical elements should be drawn according to the
+SVG spec), and includes an intialization of the SVG
+"fill-rule" to "nonzero" (the SVG default) instead of
+the internally initialized value of "evenodd".</li>
+<li>coders/wpg.c: Fixed C99 "//" comments.</li>
+</ul>
+</blockquote>
+<p>2018-04-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pict.c (ReadPICTImage): Copy tile exception info to main
+image and don't composite tile if it has a problem. Fixes
+oss-fuzz 7169 "graphicsmagick/enhance_fuzzer:
+Use-of-uninitialized-value in EnhanceImage". (Credit to OSS-Fuzz)</li>
+<li>coders/dib.c (ReadDIBImage): Do not increase decode bits/pixel
+if compression=2, but use it to increase pixel packet size when
+estimating bytes per line for decode buffer. Fixes oss-fuzz issue
+7324 "graphicsmagick/coder_WPG_fuzzer: Use-of-uninitialized-value
+in ReadDIBImage". (Credit to OSS-Fuzz)</li>
+<li>coders/dpx.c (ReadDPXImage): When handling the first element of
+a planar DPX, assure that the other channels are
+initialized. Fixes oss-fuzz 7841 "graphicsmagick/coder_DPX_fuzzer:
+Use-of-uninitialized-value in WriteDPXImage". (Credit to OSS-Fuzz)</li>
+<li>coders/tim.c (ReadTIMImage): Only 4 and 8 bit TIM requires a
+colormap. For other depths, force reading as DirectClass even if
+the TIM file provides a colormap. Fixes oss-fuzz 7407
+"graphicsmagick/coder_TIM_fuzzer: Use-of-uninitialized-value in
+SyncImageCallBack". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-04-08 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c The unread data contains crap in memory,
+erase current image data. This should mute oss-fuzz 6604.</li>
+<li>coders/wpg.c - condition "if(y<1) continue;" is redundant
+and could be removed completely.
+Allow logging in MatlabV4 module.</li>
+<li>coders/svg.c - Do not use C++ syntax in C code - removed.</li>
+</ul>
+</blockquote>
+<p>2018-04-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c (UnpackWPGRaster): Fix uninitialized row 0 when
+row-based RLE is used. Fixes oss-fuzz 6603
+"graphicsmagick/enhance_fuzzer: Use-of-uninitialized-value in
+BlendCompositePixel". (Credit to OSS-Fuzz)</li>
+<li>coders/pcd.c: Fix many issues, including oss-fuzz 6016
+"graphicsmagick/coder_PCD_fuzzer: Heap-double-free in
+MagickRealloc" and oss-fuzz 6108 "graphicsmagick/coder_PCD_fuzzer:
+Unknown signal in AllocateThreadViewDataSet". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-04-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c (funcDCM_BitsStored): Limit DICOM significant bits
+to 16. Otherwise rescale map code blows up. Fixes oss-fuzz 7435
+"graphicsmagick/coder_DCM_fuzzer: Out-of-memory in
+graphicsmagick_coder_DCM_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>coders/pix.c (ReadPIXImage): Detect EOF. Reject RLE lenth of
+zero. Fixes oss-fuzz 7440 "graphicsmagick/coder_PIX_fuzzer:
+Out-of-memory in graphicsmagick_coder_PIX_fuzzer". (Credit to
+OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-04-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): Insist on having an element
+descriptor we understand since otherwise we can not decode the
+image. Fixes oss-fuzz 7410 "graphicsmagick/coder_DPX_fuzzer:
+Use-of-uninitialized-value in WriteDPXImage". (Credit to OSS-Fuzz)</li>
+<li>coders/avs.c, etc... (WriteAVSImage): Cache image list length
+before writing image sequence so that progress monitor is
+scalable. Helps with oss-fuzz 7404
+"graphicsmagick/coder_AVS_fuzzer: Timeout in
+graphicsmagick_coder_AVS_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-04-05 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (SVGStartElement, SVGEndElement),
+magick/render.c (DrawImage): The current text position
+is now maintained by DrawImage() instead of by
+SVGStartElement() and SVGEndElement(). This change was
+made to support the recently implmemented "use" and
+"class" elements, which may make changes to the font
+size that are not visible to the code in svg.c.</li>
+<li>coders/svg.c (GetStyleTokens, SVGStartElement): The
+list of SVG attributes is now reordered so that
+"font-size", "class", and "style" are processed first.
+This ensures that a change to the font size will be
+processed before any dimensional attribute whose value
+may depend on the font size (e.g., a width value
+specified in "em" units).</li>
+<li>coders/svg.c (ProcessStyleClassDefs): Fixed two memory
+leaks associated with making an early return when
+malformed input is detected.</li>
+<li>magick/render.c (ExtractTokensBetweenPushPop): Fixed
+an uninitialized variable condition which can occur when
+malformed input is detected.</li>
+<li>magick/render.h (DrawInfo), magick/render.c: DrawInfo
+member "unused1" has been renamed "flags". It is now
+used to tag a DrawInfo as being a clipping path or a
+compositing mask.</li>
+</ul>
+</blockquote>
+<p>2018-04-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdb.c (ReadPDBImage): Update DirectClass pixels to avoid
+use of uninitialized memory for 2 bits/pixel. Fixes oss-fuzz 7350
+"graphicsmagick/coder_PDB_fuzzer: Use-of-uninitialized-value in
+WritePDBImage". (Credit to OSS-Fuzz)</li>
+<li>coders/palm.c (ReadPALMImage): Fix use of uninitialized memory.
+Fixes oss-fuzz 7325 "graphicsmagick/coder_PALM_fuzzer:
+Use-of-uninitialized-value in TransparentImageCallBack". (Credit
+to OSS-Fuzz)</li>
+<li>coders/dcm.c (DCM_ReadNonNativeImages): Break out of reading
+loop on EOF and properly report exception. Fixes oss-fuzz 7349
+"graphicsmagick/coder_DCM_fuzzer: Timeout in
+graphicsmagick_coder_DCM_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-04-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xcf.c (ReadXCFImage): Require that XCF file offsets be in
+ascending order to avoid DOS. Fixes oss-fuzz 7333
+"graphicsmagick/coder_XCF_fuzzer: Out-of-memory in
+graphicsmagick_coder_XCF_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>coders/wpg.c (UnpackWPGRaster): Fix memory leak in error return
+path. Fixes oss-fuzz 7338 "graphicsmagick/enhance_fuzzer:
+Direct-leak in UnpackWPGRaster". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-04-03 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (SVGStartElement): This changeset adds
+support for SVG geometric transforms specified using the
+style="transform: ..." syntax. This syntax is sometimes
+used when exporting SVG files from Adobe Illustrator.</li>
+</ul>
+</blockquote>
+<p>2018-04-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): Validate DPX packing method. Fixes
+oss-fuzz 7296 "graphicsmagick/coder_DPX_fuzzer:
+Use-of-uninitialized-value in WriteDPXImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-04-02 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (SVGStartElement, SVGEndElement),
+magick/render.c (DrawImage): This changeset adds support for
+"class" styling attributes within a <style> section within
+the <defs> section, and the ability to reference them from
+other SVG elements by class="classname". SVG files exported
+from Adobe Illustrator make extensive use of "class" definitions.</li>
+</ul>
+</blockquote>
+<p>2018-04-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pict.c (ReadPICTImage): Fix leak of tile image on EOF.
+This is a recent regression. Fixes oss-fuzz 7287
+"graphicsmagick/coder_PCT_fuzzer: Indirect-leak in
+CloneImage". (Credit to OSS-Fuzz)</li>
+<li>magick/pixel_cache.c (OpenCache): Use image->scene rather than
+GetImageIndexInList(image) for scene-id part of cache info file
+name.</li>
+<li>coders/txt.c (WriteTXTImage): Optimize the progress indicator
+since it is very inefficient with a large number of scenes and
+oss-fuzz 7090 "graphicsmagick/coder_TEXT_fuzzer: Timeout in
+graphicsmagick_coder_TEXT_fuzzer" consistently shows
+GetImageListLength() in its stack traces.</li>
+<li>coders/dcm.c (ReadDCMImage): DICOM reader was no longer
+immediately quitting with excessive samples per pixel. This
+caused spinning for a very long time when reading planar images
+with large samples per pixel. This is a regression due to recent
+changes. Fixes oss-fuzz 7269 "graphicsmagick/coder_DCM_fuzzer:
+Timeout in graphicsmagick_coder_DCM_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>coders/xcf.c (ReadXCFImage): Destroy layer info before returning
+due to exception. This is a new regression due to adding more
+checks. Fixes oss-fuzz 7277 "graphicsmagick/coder_XCF_fuzzer:
+Direct-leak in ReadXCFImage". (Credit to OSS-Fuzz)</li>
+<li>coders/pdb.c (ReadPDBImage): Assure that all bytes of scanline
+are initialized while decoding. Fixes oss-fuzz 7051
+"graphicsmagick/coder_PDB_fuzzer: Use-of-uninitialized-value in
+WritePDBImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-03-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pcx.c (ReadPCXImage): Assure that scanline is
+initialized. Fixes oss-fuzz 6612
+"graphicsmagick/coder_PCX_fuzzer: Use-of-uninitialized-value in
+WriteRLEPixels". (Credit to OSS-Fuzz)</li>
+<li>coders/wpg.c (ReadWPGImage): Detect unexpected EOF and avoid use
+of uninitialized data. Fixes oss-fuzz 6601
+"graphicsmagick/enhance_fuzzer: Use-of-uninitialized-value in
+ImportIndexQuantumType". (Credit to OSS-Fuzz)</li>
+<li>coders/sgi.c (ReadSGIImage): Assure that RLE decode buffer is
+initialized. Fixes oss-fuzz 6599
+"graphicsmagick/coder_SGI_fuzzer: Use-of-uninitialized-value in
+SyncImageCallBack" and oss-fuzz 6600
+"graphicsmagick/coder_SGI_fuzzer: Use-of-uninitialized-value in
+SGIEncode". (Credit to OSS-Fuzz)</li>
+<li>coders/viff.c (ReadVIFFImage): Fix blob I/O size validation to
+avoid use of uninitialized data. Fixes oss-fuzz 6597
+"graphicsmagick/coder_VIFF_fuzzer: Use-of-uninitialized-value in
+ThresholdImage". (Credit to OSS-Fuzz)
+(ReadVIFFImage): Don't execute SetImageType(image,BilevelType) on
+an image which has no pixels yet in order to avoid use of
+uninitialized data. Fixes oss-fuzz 6597. (Credit to OSS-Fuzz)</li>
+<li>coders/wbmp.c (ReadWBMPImage): Fix blob I/O size validation to
+avoid use of uninitialized data. Fixes oss-fuzz 7047
+"graphicsmagick/coder_WBMP_fuzzer: Use-of-uninitialized-value in
+ReadWBMPImage". (Credit to OSS-Fuzz)</li>
+<li>coders/wpg.c (ExtractPostscript): Allow non-Postscript content
+but force reading using the magick we already detected. Also log
+the format that we detected.</li>
+<li>coders/xcf.c (ReadOneLayer): Reject layer size of 0x0. Fixes
+oss-fuzz 6636 "graphicsmagick/coder_XCF_fuzzer: Direct-leak in
+MagickMallocAligned". (Credit to OSS-Fuzz)
+(ReadXCFImage): Verify that seek offsets are within the bounds of
+the file data. Fixes oss-fuzz 6682
+"graphicsmagick/coder_XCF_fuzzer: Out-of-memory in
+graphicsmagick_coder_XCF_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>magick/pixel_cache.c (ModifyCache): Destroy CacheInfo if
+OpenCache() fails so it is not leaked.</li>
+<li>coders/wpg.c (ExtractPostscript): Enforce that embedded file is
+a Postscript file. Fixes oss-fuzz 7235
+"graphicsmagick/coder_WPG_fuzzer: Indirect-leak in MagickRealloc".
+This is indicated to be a regression. (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-03-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pict.c (ReadPICTImage): Check image pixel limits before
+allocating memory for tile. Fixes oss-fuzz 7217
+"graphicsmagick/coder_PICT_fuzzer: Out-of-memory in
+graphicsmagick_coder_PICT_fuzzer".</li>
+</ul>
+</blockquote>
+<p>2018-03-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pcd.c (ReadPCDImage): Add checks for EOF. Fixes oss-fuzz
+issue 7180 "graphicsmagick/coder_PCDS_fuzzer: Timeout in
+graphicsmagick_coder_PCDS_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-03-29 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul>
+<li><p class="first">coders/svg.c (SVGStartElement, SVGEndElement),
+magick/render.c (DrawImage): This changeset implements the SVG
+"use" element. Graphical elements (e.g., "rect", "text", etc.)
+can be tagged with an identifier using 'id="identifier"' when
+defined within the "defs" section. They can then be referenced
+elsewhere in the SVG file using:</p>
+<p><use xlink:href="#identifier" ... /></p>
+<p>When referencing a graphical element by its identifier, the
+following syntaxes are now treated as being the same:</p>
+<p>href="#identifier"
+href="url(#identifier)"
+xlink:href="#identifier"
+xlink:href="url(#identifier)"</p>
+</li>
+</ul>
+</blockquote>
+<p>2018-03-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tim.c (ReadTIMImage): Reader was not observing subimage
+and subrange to quit after the specified frame range. Inspired by
+oss-fuzz 7132 "graphicsmagick/coder_TIM_fuzzer: Timeout in
+graphicsmagick_coder_TIM_fuzzer" (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-03-27 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (SVGStartElement): Enable setting the
+background color from the SVG file when the client
+specifies style="background:color" inside the <svg>
+... </svg> element.</li>
+</ul>
+</blockquote>
+<p>2018-03-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mtv.c (ReadMTVImage): Add some elementary tracing to MTV
+reader.</li>
+<li>coders/png.c (ReadMNGImage): Fix SourceForge issue 554
+"Divide-by-zero in ReadMNGImage (coders/png.c)". (Credit to Trace
+Probe)</li>
+<li>coders/bmp.c (ReadBMPImage): Assure that start position always
+advances to avoid looping BMPs. Fixes oss-fuzz 7045
+"graphicsmagick/coder_BMP_fuzzer: Timeout in
+graphicsmagick_coder_BMP_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>coders/pict.c (DecodeImage): Verify that sufficient backing data
+exists before allocating memory to read it. Fixes oss-fuzz 6629
+"graphicsmagick/coder_PCT_fuzzer: Out-of-memory in
+graphicsmagick_coder_PCT_fuzzer".
+(ReadPICTImage): Destroy tile_image in ThrowPICTReaderException()
+macro to simplify logic.</li>
+</ul>
+</blockquote>
+<p>2018-03-25 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Check whether datablock is really read.
+Fixes oss-fuzz 7056 (Credit to OSS-Fuzz)</li>
+<li>coders/txt.c Duplicate image check for data with fixed geometry
+previous check is skipped. Fixes oss-fuzz 7090.</li>
+</ul>
+</blockquote>
+<p>2018-03-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c (ReadDCMImage): Validate that samples per pixel is
+in valid range. Fixes oss-fuzz 6260
+"graphicsmagick/coder_DCM_fuzzer: Out-of-memory in
+graphicsmagick_coder_DCM_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>coders/meta.c (format8BIM): Allocate space for null termination
+and null terminate string. Fixes oss-fuzz 5985
+"graphicsmagick/coder_8BIMTEXT_fuzzer: Heap-buffer-overflow in
+formatIPTCfromBuffer". (Credit to OSS-Fuzz)</li>
+<li>coders/fits.c (ReadFITSImage): Include number of FITS scenes in
+file size validations. Fixes oss-fuzz 6781
+"graphicsmagick/coder_FITS_fuzzer: Timeout in
+graphicsmagick_coder_FITS_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-03-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/meta.c (format8BIM): Validate size request prior to
+allocation. Fixes oss-fuzz issue 5974
+"graphicsmagick/coder_8BIMTEXT_fuzzer: Out-of-memory in
+graphicsmagick_coder_8BIMTEXT_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-03-23 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul>
+<li><p class="first">coders/mat.c Fix forged amount of frames 7076. (Credit to OSS-Fuzz)</p>
+<blockquote>
+<p>* coders/topol.c Check for forged image that overflows file size
+(fuzz 6836).</p>
+</blockquote>
+</li>
+</ul>
+</blockquote>
+<p>2018-03-23 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul>
+<li><p class="first">magick/render.c, render.h (DrawInfo, CloneDrawInfo,
+DrawClipPath, DrawImage, GetDrawInfo): According to the SVG
+spec, a clipping path is defined only by the geometry of its
+constituent elements, and is not dependent on fill color/opacity,
+stroke color/opacity, or stroke width. To ensure conformity
+with the spec, when a clipping path is created, these SVG
+elements are set to appropriate values, and any attempt to
+modify them is ignored.</p>
+<p>Also, whenever a clipping path is drawn, the associated image
+attributes are now updated from the parent image structure.
+This ensures that any added or modified attributes are up to
+date.</p>
+</li>
+</ul>
+</blockquote>
+<p>2018-03-22 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul>
+<li><dl class="first docutils">
+<dt>coders/topol.c Use rather MagickSwabArrayOfUInt32() to</dt>
+<dd><p class="first">flip all array elements at once.</p>
+<p class="last">* magick/annotate.c Compilation issue - using C++ syntax in C code.</p>
+</dd>
+</dl>
+</li>
+</ul>
+</blockquote>
+<p>2018-03-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): Validate header length and offset
+properties. Fixes oss-fuzz "graphicsmagick/coder_DPX_fuzzer:
+Use-of-uninitialized-value in WriteDPXImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-03-20 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/annotate.c (RenderType): According to the SVG
+spec, the 'font-family' element can be a comma-separated
+list of one or more font family names. Function RenderType
+in file annotate.c has been modified to support multiple
+font family names as follows. The comma-separated list is
+processed until the first available font family is found.
+If no font family is found, or if font substitution occurred,
+then the entire font family string is tested to see if it
+exactly matches a font name, or if the font family string
+with blanks changed to hypens exactly matches a font name.
+If a font name match is found, the matched font overrides
+the font substution. The font name matching functionality
+is beyond what's in the SVG spec and is provided as a
+convenience to the user.</li>
+</ul>
+</blockquote>
+<p>2018-03-20 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Fix forged amount of frames 6755. (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-03-20 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/topol.c Redesign ReadBlobDwordLSB() to be more effective.</li>
+</ul>
+</blockquote>
+<p>2018-03-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xpm.c (ReadXPMImage): Reject XPM if its condensed version
+contains non-whitespace control characters. Fixes oss-fuzz 7027
+"graphicsmagick/coder_XPM_fuzzer: Timeout in
+graphicsmagick_coder_XPM_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-03-19 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/topol.c Fix tile index overflow fuzz 6634. (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-03-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c (DCM_ReadGrayscaleImage): Don't use rescale map if
+it was not allocated. This issue was induced in this development
+cycle due to disabling generating the rescale map. Fixes oss-fuzz
+7021 "graphicsmagick/coder_DCM_fuzzer: Null-dereference READ in
+DCM_ReadGrayscaleImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-03-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/color_lookup.c (QueryColorDatabase): Defend against
+partial scanf() expression matching, resulting in use of
+uninitialized data. Likely fixes oss-fuzz 6596
+"graphicsmagick/coder_XPM_fuzzer: Use-of-uninitialized-value in
+IsMonochromeImage". (Credit to OSS-Fuzz)</li>
+<li>coders/rle.c (ReadRLEImage): Validate number of colormap bits to
+avoid undefined shift behavior. Fixes oss-fuzz 6630
+"graphicsmagick/enhance_fuzzer: Undefined-shift in
+ReadRLEImage". (Credit to OSS-Fuzz)</li>
+<li>coders/dcm.c (DCM_ReadRGBImage): Don't use rescale map if it was
+not allocated. This issue was induced in this development cycle
+due to disabling generating the rescale map. Fixes oss-fuzz 6995
+"graphicsmagick/coder_DCM_fuzzer: Null-dereference READ in
+DCM_ReadRGBImage". (Credit to OSS-Fuzz)</li>
+<li>coders/dib.c (DecodeImage): Report failure to decode to expected
+amount of pixel data as an error. Fixes oss-fuzz 7007
+"graphicsmagick/enhance_fuzzer: Use-of-uninitialized-value in
+EnhanceImage". (Credit to OSS-Fuzz)</li>
+<li>coders/bmp.c (ReadBMPImage): Add file size and offset/seek
+validations. Fixes oss-fuzz 6623
+"graphicsmagick/coder_BMP_fuzzer: Timeout in
+graphicsmagick_coder_BMP_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-03-17 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>dcraw/dcraw.c Updated to version 9.27</li>
+</ul>
+</blockquote>
+<p>2018-03-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/gif.c (ReadGIFImage): Fix botched fixes for use of
+uninitialized data when reading GIF extension blocks. Hopefully
+ok now.</li>
+</ul>
+</blockquote>
+<p>2018-03-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/gif.c (ReadGIFImage): Fix use of uninitialized data when
+reading GIF extension blocks. Fixes oss-fuzz 6609
+"graphicsmagick/coder_GIF_fuzzer: Use-of-uninitialized-value in
+MagickArraySize". This seems to be a totally benign issue. (Credit
+to OSS-Fuzz)</li>
+<li>magick/magick.c (MagickSignal): Use an alternate signal stack,
+if available. This is required for Go lang C language extensions
+since Go lang requests an alternate signal sack, and uses small
+stacks for its threads. If the library user has not allocated an
+alternate signal stack, then behavior should be just as before.
+Issue was originally reported by yzh杨振宏 on March 1, 2018 via
+the graphicsmagick-help SourceForge mailing list.</li>
+</ul>
+</blockquote>
+<p>2018-02-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (AcquireCacheNexus): Add a check that the
+pixel cache is compatible with the image dimensions. Fixes
+oss-fuzz issues 5978 5988 5989 5990 5993 6016, and 6056, which are
+all related to the PICT writer. (Credit to OSS-Fuzz)</li>
+<li>magick/draw.c (DrawGetStrokeDashArray): Check for failure to
+allocate memory. Patch submited by Petr Gajdos via email on
+February 28, 2018.</li>
+</ul>
+</blockquote>
+<p>2018-02-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/fits.c (ReadFITSImage): Fix signed integer overflow when
+computing pixels size. Fixes oss-fuzz 6586
+"graphicsmagick/coder_FITS_fuzzer: Integer-overflow in
+ReadFITSImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-02-27 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (SVGStartElement, SVGEndElement): From the
+SVG spec: "The 'foreignObject' element allows for inclusion
+of a foreign namespace which has its graphical content drawn
+by a different user agent." Code has been added to consume
+and discard the 'foreignObject' element and any settings (e.g.,
+fill color) internal to it. Previously, settings internal
+to the 'foreignObject' element would persist and "leak" into
+the graphic elements that followed it, resulting in undesired
+side effects (e.g., fill color other than the expected default).</li>
+</ul>
+</blockquote>
+<p>2018-02-27 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawPolygonPrimitive): Fixed a bug
+introduced by changeset 39102dd1d456. For SVG, this
+changeset applied both the group AND the fill opacity
+values to fill patterns (similarly for stroke). For WMF,
+however, this caused the fill pattern to be rendered as
+100% transparent. A closer reading of the SVG spec does
+NOT show that the fill opacity should be applied to the
+fill pattern, so as of this latest changeset only the group
+opacity value is applied to fill and stroke patterns.</li>
+</ul>
+</blockquote>
+<p>2018-02-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (ReadBMPImage): Fix divide by zero regression added
+by latest fixes. Fixes oss-fuzz 6583
+"graphicsmagick/coder_BMP_fuzzer: Divide-by-zero in ReadBMPImage".
+(Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-02-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pict.c (ReadPICTImage): Validate that PICT rectangles do
+not have zero dimensions. Specify expected file type when reading
+from a temporary file. Trace PICT rectangle dimensions. More
+detection of blob EOF and more error handling. Fixes oss-fuzz
+issue 6193 "graphicsmagick/coder_PCT_fuzzer: Unknown signal in
+AllocateImageColormap" and likely many oss-fuzz ASAN/UBSAN issues
+reported against "PCT" and "PICT" since this one problem appears
+to be causing a spew of reports.</li>
+<li>coders/png.c (ReadMNGImage): Detect and handle failure to
+allocate global PLTE. Problem was reported via email from Petr
+Gajdos on February 26, 2018.</li>
+</ul>
+</blockquote>
+<p>2018-02-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/blob.c (ReadBlobLSBDouble): Make sure imported double is
+a normal value.
+(ReadBlobLSBDoubles): Make sure imported doubles are normal
+values.
+(ReadBlobLSBFloat): Make sure imported float is a normal value.
+(ReadBlobLSBFloats): Make sure imported floats are normal values.
+(ReadBlobMSBFloat): Make sure imported float is a normal value.
+(ReadBlobMSBFloats): Make sure imported floats are normal values.
+(ReadBlobMSBDouble): Make sure imported double is a normal value.
+(ReadBlobMSBDoubles): Make sure imported doubles are normal
+values.</li>
+<li>magick/import.c (ImportFloat32Quantum): Make sure imported float
+is a normal value.
+(ImportFloat64Quantum): Make sure imported double is a normal
+value.</li>
+<li>magick/image.h (RoundDoubleToQuantum): Restore previous behavior
+(from earlier today).
+(RoundFloatToQuantum): Restore previous behavior (from earlier
+today).</li>
+<li>coders/bmp.c (ReadBMPImage): Fix UBSAN runtime error: left shift
+of 205 by 24 places cannot be represented in type 'int'.</li>
+<li>coders/ept.c (ReadEPTImage): Fix dereference of NULL pointer
+which was detected by UBSAN in the test suite.</li>
+<li>magick/image.h (RoundDoubleToQuantum): Check double value for
+NaN and infinity in order to avoid undefined behavior.
+(RoundFloatToQuantum): Check float value for NaN and infinity in
+order to avoid undefined behavior.</li>
+<li>magick/common.h (MAGICK_ISNAN): Add a isnan() wrapper macro.
+(MAGICK_ISINF): Add a isinf() wrapper macro.</li>
+</ul>
+</blockquote>
+<p>2018-02-25 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Fix oss-fuzz issue 6273 - Heap-use-after-free in
+GetLocaleExceptionMessage. (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-02-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c (DCM_PostRescaleImage): Remove use of
+DCM_PostRescaleImage() since its implementation is wrong and
+accesses non-allocated heap memory. Problem was reported by Petr
+Gajdos via email on February 8, 2018.</li>
+<li>coders/jp2.c (ReadJP2Image): Use a ThrowJP2ReaderException macro
+to automatically clean up when throwing an exception.</li>
+<li>coders/bmp.c (ReadBMPImage): Report an error if RLE decode does
+not produce the expected number of bytes. Fixes oss-fuzz issue
+6015 "graphicsmagick/coder_BMP_fuzzer: Out-of-memory in
+graphicsmagick_coder_BMP_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-02-23 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Fixed a bug in which graphical
+elements defined within <defs> ... </defs> were being rendered,
+contrary to the SVG spec.</li>
+</ul>
+</blockquote>
+<p>2018-02-23 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawPolygonPrimitive): When filling or
+stroking a polygon using a pattern, the fill (or stroke)
+and group/object opacity values were not being applied to
+the pattern (fixed).</li>
+</ul>
+</blockquote>
+<p>2018-02-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (ReadBMPImage): Fix SeekBlob() return value checks.
+Add more EOF checks. Require that a provided ba_offset be a
+forward seek in order to avoid the possibility of endless looping.</li>
+</ul>
+</blockquote>
+<p>2018-02-23 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Fix oss-fuzz issue 6301. (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-02-22 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/alpha_composite.c (BlendQuantumOpacity): The
+pixel compositing equation used when compositing an
+image into the output was incorrect and has been fixed.</li>
+<li>magick/render.c (DrawPolygonPrimitive): When
+compositing polygon edge pixels over a transparent
+black background, the code would composite as if the
+background were opaque black, resulting in the edge
+pixels being too dark (fixed).</li>
+</ul>
+</blockquote>
+<p>2018-02-21 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul>
+<li><p class="first">magick/render.c (DrawImage): Per the SVG spec, opacity,
+fill-opacity, and stroke-opacity values are now clamped
+to [0,1].</p>
+<p>Also fixed two bugs introduced by changeset 91de8039f27d
+(dated 2018-02-12): (1) a group/object opacity value
+specified using a percentage was not being converted to a
+value in [0,1]; (2) if fill-opacity or stroke-opacity was
+1, and the group/object opacity value was set to 1, the
+resulting fill-opacity or stroke-opacity value would be
+set to 0 instead of 1.</p>
+</li>
+</ul>
+</blockquote>
+<p>2018-02-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/viff.c (ReadVIFFImage): Fix excessive memory usage.
+Fixes oss-fuzz 6006 "graphicsmagick/coder_XV_fuzzer: Out-of-memory
+in graphicsmagick_coder_XV_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>coders/txt.c (ReadInt): Avoid benign signed integer overflow due
+to accepting an arbitrary number of digits. Fixes oss-fuzz 6002
+"graphicsmagick/coder_TEXT_fuzzer: Integer-overflow in
+ReadInt". (Credit to OSS-Fuzz)</li>
+<li>coders/viff.c (ReadVIFFImage): Verify that there is sufficient
+data to back up colormap allocation request. Fixes oss-fuzz 5986
+"graphicsmagick/coder_VIFF_fuzzer: Out-of-memory in
+graphicsmagick_coder_VIFF_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>magick/memory.c: Define MAGICK_MEMORY_HARD_LIMIT=value to abort
+when memory request exceeds value. Useful to find location of
+excessive memory requests.</li>
+</ul>
+</blockquote>
+<p>2018-02-19 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (SVGStartElement): Per the SVG spec, the
+SVG coder now initializes the MVG coder (which renders
+SVG graphical elements) with the the SVG defaults for
+fill color, fill-opacity, stroke color, stroke-opacity,
+and stroke-width. This makes the SVG coder independent
+of the MVG coder intial state.</li>
+</ul>
+</blockquote>
+<p>2018-02-19 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (SVGStartElement): Fixed initialization of
+x and y attributes per the SVG spec: for graphical elements
+"image", "pattern", "text", "rect", and "use", if the x or y
+attribute is not specified, the effect is as if a value of
+"0" were specified.</li>
+</ul>
+</blockquote>
+<p>2018-02-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sun.c (ReadSUNImage): Fix edge case which broke file-size
+validation logic. Fixes oss-fuzz issue 5981
+"graphicsmagick/coder_SUN_fuzzer: Out-of-memory in
+graphicsmagick_coder_SUN_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>coders/txt.c (ReadTXTImage): Validate that file size is
+sufficient for claimed image properties. Fixes oss-fuzz issue
+5960 "graphicsmagick/coder_TXT_fuzzer: Out-of-memory in
+graphicsmagick_coder_TXT_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>coders/tga.c (ReadTGAImage): Only allow 1 and 8 bit
+colormapped/grey images. Fixes oss-fuzz issue 6314
+"graphicsmagick/coder_ICB_fuzzer: Undefined-shift in
+ReadTGAImage". (Credit to OSS-Fuzz)</li>
+<li>coders/bmp.c (ReadBMPImage): Detect and report when BMP height
+value is out of range (too negative). Fixes oss-fuzz issue 6394
+"graphicsmagick/coder_BMP_fuzzer: Integer-overflow in
+ReadBMPImage". (Credit to OSS-Fuzz)</li>
+<li>coders/rla.c (ReadRLAImage): Detect when RLE decoding is
+producing too many samples and report as an error. Fixes oss-fuzz
+issue 6312 "graphicsmagick/coder_RLA_fuzzer: Timeout in
+graphicsmagick_coder_RLA_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>coders/fits.c (ReadFITSImage): Validate that file size is
+sufficient for claimed image properties. Fixes oss-fuzz issue
+6429 "graphicsmagick/coder_FITS_fuzzer: Timeout in
+graphicsmagick_coder_FITS_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>magick/image.c (CloneImage): Check image pixel limits in
+CloneImage() when it is used to change the image dimensions. This
+avoids depending on the using code to detect and report such
+issues.</li>
+<li>coders/xcf.c (ReadXCFImage): Check image pixel limits after each
+CloneImage() to assure that image is within specified resource
+limits. Fixes oss-fuzz issue 6399 "graphicsmagick/enhance_fuzzer:
+Timeout in graphicsmagick_enhance_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-02-16 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (TracePath): TracePath() was not
+correctly processing multiple sets of cubic or quadratic
+Bezier coordinates when the previous path data command was
+not a cubic or quadratic Bezier command. This would result
+in the first control point being equal to the current path
+point instead of being computed using the current path
+point and the second control point of the previous Bezier
+command.</li>
+</ul>
+</blockquote>
+<p>2018-02-15 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (TracePath): TracePath() was not
+consuming commas (if present) at the end of a set of
+points when multiple sets of points were specified for
+various path commands (e.g., line, Bezier). This
+resulted in the remaining sets of points being ignored
+(fixed).</li>
+</ul>
+</blockquote>
+<p>2018-02-15 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (TraceArcPath): No points are generated
+by TraceArcPath() if the starting and ending arc points
+are the same. For this case, the coordinate count was not
+being set to zero before returning (fixed).</li>
+</ul>
+</blockquote>
+<p>2018-02-15 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Clipping of polygons in
+DrawImage() would sometime result in a starting pixel
+location that was greater than the ending pixel location,
+causing a subsequent call to GetImagePixelsEx() to fail
+due a column count <= 0. Modified the clipping code to
+eliminate this condition, and also to return early if
+the polygon lies completely outside the image boundaries.
+Also fixed variable declarations from a previous commit
+that were causing problems for the C89 compiler.</li>
+</ul>
+</blockquote>
+<p>2018-02-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/topol.c (ReadTOPOLImage): Detect EOF immediately rather
+than spinning. Fixes oss-fuzz issue 6303
+"graphicsmagick/coder_TOPOL_fuzzer: Timeout in
+graphicsmagick_coder_TOPOL_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>coders/dcm.c (DCM_SetupRescaleMap): Avoid excessive left shift.
+Fixes oss-fuzz issue 6256 "graphicsmagick/coder_DCM_fuzzer:
+Undefined-shift in DCM_SetupRescaleMap". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-02-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c (ExtractPostscript): Detect EOF on input while
+transferring bytes to Postscript file. Fixes oss-fuzz issue 6087
+"graphicsmagick/coder_WPG_fuzzer: NULL". Later identified to be
+CVE-2017-17682 as previously discovered in ImageMagick. (Credit to
+OSS-Fuzz)</li>
+<li>coders/pdb.c (ReadPDBImage): Quit attempting to read image data
+immediately at EOF. Fixes oss-fuzz issue 6252
+"graphicsmagick/coder_PDB_fuzzer: Timeout in
+graphicsmagick_coder_PDB_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-02-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/topol.c (ReadTOPOLImage): Avoid index out of bounds when
+input filename does not use a file extension. Fixes oss-fuzz issue
+6237 "graphicsmagick/coder_TOPOL_fuzzer: Index-out-of-bounds in
+ReadTOPOLImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-02-12 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Object/group opacity,
+when set in DrawImage(), would overwrite the fill
+and stroke opacities. This has been fixed so that
+the object opacity is now combined with the fill
+and stroke opacities per the SVG spec.</li>
+</ul>
+</blockquote>
+<p>2018-02-12 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c Fix oss-fuzz issue 6021. (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-02-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c (ReadDCMImage): Avoid undefined left shift of
+short. Fix memory leaks in error reporting paths. Fixes oss-fuzz
+issue 6217 "graphicsmagick/coder_DCM_fuzzer: Undefined-shift in
+ReadDCMImage". (Credit to OSS-Fuzz)</li>
+<li>coders/dpx.c (ReadDPXImage): Avoid divide by zero exception in
+the case where reference high equals reference low. Fixes oss-fuzz
+issue 6215 "graphicsmagick/coder_DPX_fuzzer: Divide-by-zero in
+ReadDPXImage". (Credit to OSS-Fuzz)</li>
+<li>coders/topol.c (ReadTOPOLImage): Avoid index out of bounds when
+input filename does not use a file extension.</li>
+<li>coders/cut.c (ReadCUTImage): Avoid index out of bounds when
+input filename does not use a file extension. Fixes oss-fuzz issue
+6218 "graphicsmagick/coder_CUT_fuzzer: Index-out-of-bounds in
+ReadCUTImage". (Credit to OSS-Fuzz)</li>
+<li>coders/pwp.c (ReadPWPImage): Force temporary file to be read as
+a SFW file rather than autodetecting the format. Fixes oss-fuzz
+issue 6220 "graphicsmagick/coder_PWP_fuzzer: Indirect-leak in
+AllocateImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-02-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdf.c (WritePDFImage): Assure that xref memory is not
+leaked if an exception is thrown. Fixes oss-fuzz issue 5968
+"graphicsmagick/coder_EPDF_fuzzer: Direct-leak in MagickRealloc".
+(Credit to OSS-Fuzz)</li>
+<li>coders/tim.c (ReadTIMImage): Verify that 4/8 bit PSX TIM
+provides a CLUT and verify indexes. Fixes oss-fuzz issue 5972
+"graphicsmagick/coder_TIM_fuzzer: Null-dereference WRITE in
+ReadTIMImage". (Credit to OSS-Fuzz)</li>
+<li>coders/topol.c (ReadTOPOLImage): Add additional header
+validations. Fixes oss-fuzz issue 5975
+"graphicsmagick/coder_TOPOL_fuzzer: Floating-point-exception in
+ReadTOPOLImage". (Credit to OSS-Fuzz)</li>
+<li>coders/bmp.c (ReadBMPImage): Avoid possible division by zero
+when decoding CIE primary values. (Credit to OSS-Fuzz)</li>
+<li>magick/export.c (ExportViewPixelArea): Only compute
+unsigned_maxvalue if sample_bits <= 32.</li>
+<li>magick/import.c (ImportViewPixelArea): Assure that
+double_maxvalue minus double_minvalue is not zero, or excessively
+close to zero to avoid divide by zero exception or impossible
+scaling factor. (Credit to OSS-Fuzz)
+(ImportViewPixelArea): Only compute unsigned_maxvalue if
+sample_bits <= 32.</li>
+</ul>
+</blockquote>
+<p>2018-02-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dib.c (ReadDIBImage): Validate that image width is not
+too negative such that it's absolute value can not fit in 32-bit
+unsigned width. Resolves oss-fuzz issue 6179
+"graphicsmagick/coder_ICO_fuzzer: Integer-overflow in
+ReadDIBImage". (Credit to OSS-Fuzz)</li>
+<li>coders/dcm.c (funcDCM_BitsStored): Validate DICOM datum size.
+Use a different means to determine the maximum value which does
+not use excessive shifting. Resolves oss-fuzz issue 6165
+"graphicsmagick/coder_DCM_fuzzer: Undefined-shift in
+funcDCM_BitsStored". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-02-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadWordU32BE): Add casts to avoid default type
+promotion from unsigned char to 'int' leading to undefined
+behavior for 24 bit shift. Fixes oss-fuzz issue 6058
+"graphicsmagick/coder_DPX_fuzzer: Undefined-shift in
+ReadWordU32BE". (Credit to OSS-Fuzz)
+(ReadDPXImage): Require that the file has at least one element.
+Add bountiful casts for values which are left-shifted. Fixes
+oss-fuzz issue 5962 "graphicsmagick/coder_DPX_fuzzer:
+Undefined-shift in ReadDPXImage". (Credit to OSS-Fuzz)</li>
+<li>coders/dcm.c (DCM_ReadOffsetTable): Add casts Add casts to avoid
+default type promotion from unsigned char to 'int' leading to
+undefined behavior for 16 bit shift. Fixes oss-fuzz issue 5980
+"graphicsmagick/coder_DCM_fuzzer: Undefined-shift in
+DCM_ReadOffsetTable". (Credit to OSS-Fuzz)</li>
+<li>magick/module_aliases.h (ModuleAliases): Add missing mapping
+from "ICODIB" format to "DIB" module.</li>
+<li>magick/import.c (ImportUInt32Quantum): Add casts to avoid
+default type promotion from unsigned char to 'int' leading to
+undefined behavior for 24 bit shift. Fixes oss-fuzz
+"graphicsmagick/coder_P7_fuzzer: Undefined-shift in
+ImportRGBQuantumType". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-02-07 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c Fix oss-fuzz issue 5964
+"graphicsmagick/coder_MAT_fuzzer: Heap-use-after-free in
+GetLocaleExceptionMessage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2018-02-07 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (IsPoint): Fixed a bug in which
+IsPoint() would reject as a valid coordinate value
+strings that did not begin with an integer: e.g.,
+"0.25" would be accepted, but ".25" would not.</li>
+</ul>
+</blockquote>
+<p>2018-02-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/cut.c (ReadCUTImage): Fix DestroyImageInfo() of NULL
+pointer leading to assertion. Fixes oss-fuzz issue 6067
+"graphicsmagick/coder_CUT_fuzzer: Unknown signal in
+DestroyImageInfo".</li>
+<li>coders/tga.c (ReadTGAImage): Throw exception rather than
+assertion for unexpected comment size. Fixes oss-fuzz issue 5961
+"graphicsmagick/coder_ICB_fuzzer: ASSERT: (size_t)
+(tga_info.id_length+1) == commentsize".</li>
+</ul>
+</blockquote>
+<p>2018-02-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdf.c (WritePDFImage): Free 'xref' allocation before
+error return. Fixes oss-fuzz issue 5968
+"graphicsmagick/coder_EPDF_fuzzer: Direct-leak in MagickRealloc".</li>
+</ul>
+</blockquote>
+<p>2018-02-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdb.c (ReadPDBImage): Fix heap buffer overflow if blob is
+already at EOF when comment is read. Fixes oss-fuzz issue 5997
+"graphicsmagick/coder_PDB_fuzzer: Heap-buffer-overflow in
+SetImageAttribute".</li>
+<li>coders/dpx.c (ReadDPXImage): Fix memory leak of user data if
+user data is truncated. Fix consumption of one uninitialized
+stack bytes. Fixes oss-fuzz issue 5973:
+graphicsmagick/enhance_fuzzer: Direct-leak in ReadDPXImage.</li>
+<li>coders/pnm.c (ReadPNMImage): Detect and avoid division by zero.
+Fixes Issue 5959 in oss-fuzz: graphicsmagick/coder_P7_fuzzer:
+Divide-by-zero in ReadPNMImage</li>
+<li>magick/xwindow.c (MagickXClientMessage): Eliminate valgrind
+gripe about use of uninitialized stack data by clearing allocation
+to zero.
+(MagickXMakeImage): Eliminate valgrind gripe about use of
+uninitialized heap data by clearing allocation to zero.</li>
+<li>coders/pwp.c (ReadPWPImage): Remove bogus EOF test on an image
+with a closed blob. Fixes Issue 5957 in oss-fuzz:
+graphicsmagick/coder_PWP_fuzzer: ASSERT: image->blob->type !=
+UndefinedStream.</li>
+<li>www/Changes.rst: Fix typo with spelling "ChangeLog-2017.html".
+Resolves SourceForge issue #544 "dead link 2017 changelog page on
+GraphicsMagick web site".</li>
+</ul>
+</blockquote>
+<p>2018-02-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/static.c (OpenModule): Assure that status is initialized.
+Resolves Coverity 261207 "Uninitialized scalar variable".</li>
+<li>wand/magick_wand.c (MagickHasColormap): New function to test if
+the image has a colormap.
+(MagickIsGrayImage): New function to test if the image uses only
+gray pixels.
+(MagickIsMonochromeImage): New function to test if the image uses
+only monochrome pixels.
+(MagickIsOpaqueImage): New function to test if the image uses only
+opaque pixels.
+(MagickIsPaletteImage): New function to test if the image is based
+on a color palette. Above functions are written by Troy Patteson
+and submitted via SourceForge patch #54 "Wand API patches: has
+colormap, is gray image, is monochrome image, is opaque image, is
+palette image".</li>
+<li>fuzzing: Added initial OSS-Fuzz integration by Alex Gaynor.
+From SourceForge patch #55 "OSS-Fuzz integration"</li>
+<li>coders/png.c (ReadMNGImage): Fix free using possibly unallocated
+pointer value.</li>
+<li>magick/blob.c (SeekBlob): Remove implicit extension of blob
+allocation size based on seek offset. Besides making an
+assumption about how the blob memory was allocated, this
+reallocation feature provides a memory DOS opportunity. Resolves
+issue reported by Alex Gaynor via email entitled "Security issue
+with memory management in Magick++" to the graphicsmagick-security
+list on 31 Jan 2018.
+(SeekBlob):</li>
+<li>coders/jpeg.c (ReadIPTCProfile): Revert inadvertent wrong return
+codes added by change on December 9, 2017. Fixes SourceForge bug
+542 "Improper call to JPEG library in state 201" since 1.3.28.</li>
+</ul>
+</blockquote>
+<p>2018-02-01 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/annotate.c (RenderFreetype): Fixed the text
+opacity computation in RenderFreeType(). This bug caused
+the text fill color to bleed into the character cell when
+the SVG "fill-opacity" is less than 1.0.</li>
+</ul>
+</blockquote>
+<p>2018-02-01 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (CloneImageAttributes): Fixed a bug
+in which the source image attributes would always replace
+the destination image attributes instead of being appended
+to them, and the destination image attributes would become
+a memory leak.</li>
+</ul>
+</blockquote>
+<p>2018-01-31 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (SVGStartElement): Fixed a bug in which the
+x,y location values for a <text> or <tspan> were overwritten
+by the x,y values for the next <tspan> before the previous
+values were used. This caused the text associated with the
+previous <text> or <tspan> to appear at the location
+specified for the next <tspan>.</li>
+</ul>
+</blockquote>
+<p>2018-01-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/static.c: Use !defined(SupportMagickModules) to enable
+static module loader. Fixes SourceForge bug #543 "Multiple
+definition of "OpenModule" (etc) when cross-compiling shared".</li>
+</ul>
+</blockquote>
+<p>2018-01-29 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (SVGStartElement): A terminating '>' in
+a geometry string is interpreted to mean that the dimensions
+of an image should only be changed if its width or height
+exceeds the geometry specification. For an unapparent and
+undocumented reason, a terminating '>', if present, was
+being nulled out, making this feature unusable for SVG files
+(now fixed).</li>
+</ul>
+</blockquote>
+<p>2018-01-29 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (ReadSVGImage): If there is a geometry string
+in image_info->size (e.g., gm convert -size "50x50%" in.svg
+out.png), AllocateImage() sets image->columns and image->rows
+to the width and height values from the size string. However,
+this makes no sense if the size string was something like
+"50x50%" (we'll get columns = rows = 50). So we set columns
+and rows to 0 after AllocateImage(), which is the same as if
+no size string was supplied by the client. This also results
+in svg_info.bounds to be set to 0,0 (i.e., unknown), so that
+svg_info.bounds will later be set using the image size
+information from either the svg "canvas" width/height or from
+the viewbox. Later, variable "page" is set from
+svg_info->bounds. Then the geometry string in image_info->size
+gets applied to the (now known) "page" width and height when
+SvgStartElement() calls GetMagickGeometry(), and the intended
+result is obtained.</li>
+</ul>
+</blockquote>
+<p>2018-01-24 Greg Wolfe <<a class="reference external" href="mailto:gregory.wolfe%40kodakalaris.com">gregory<span>.</span>wolfe<span>@</span>kodakalaris<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (SVGStartElement): When the density (DPI)
+is specified using the ImageInfo::density member, the derived
+scale factor is incorrectly applied a second time to the
+width and height members of variable RectangleInfo page.
+Fixes SourceForge ticket #451.</li>
+</ul>
+</blockquote>
+<p>2018-01-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/static.c: Use a lazy-loader for static modules with the
+same external interface as the lazy-loader for dynamic modules.</li>
+</ul>
+</blockquote>
+<p>2018-01-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Prepare for 1.3.28 release.</li>
+</ul>
+</blockquote>
+<p>2018-01-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update with changes since previous release.</li>
+</ul>
+</blockquote>
+<p>2018-01-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/Magick.xs: Compiler warnings reduction.</li>
+<li>magick/pixel_cache.h: Mark GetPixels(), GetIndexes(), and
+GetOnePixel() as deprecated. Compilers may produce a warning if
+these functions are used.</li>
+<li>magick/pixel_cache.c (InterpolateColor): Return black pixel if
+InterpolateViewColor() reports failure.</li>
+<li>coders/png.c (ReadMNGImage): Fix memory leak of chunk and
+mng_info in error path.</li>
+<li>coders/gif.c (ReadGIFImage): Fix memory leak of global colormap.</li>
+</ul>
+</blockquote>
+<p>2018-01-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/symbols.h: Fix SourceForge issue #538 "13 symbols in
+common with ImageMagick despite --enable-symbol-prefix".</li>
+<li>coders/bmp.c (ReadBMPImage): Fix non-terminal loop due to
+unexpected bit-field mask value. Fixes SourceForge issue #541
+"Infinite Loop in ReadBMPImage (coders/bmp.c)".</li>
+<li>coders/jpeg.c (JPEGMessageHandler): Revert code added on
+2017-07-08 to promote certain warnings from libjpeg to errors.
+Add code to rationalize claimed image dimensions based on file
+size. Resolves SourceForge issue #539 "Images with libjpeg
+warnings result in error".</li>
+</ul>
+</blockquote>
+<p>2018-01-11 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li><dl class="first docutils">
+<dt>coders/wpg.c Recursive ReadImage could return multiple scenes</dt>
+<dd>fixed.</dd>
+</dl>
+</li>
+</ul>
+</blockquote>
+<p>2018-01-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadOnePNGImage): Quit 'passes' loop if we
+encountered an error</li>
+<li>magick/pixel_cache.c (SetNexus): Fix heap overwrite in
+AcquireCacheNexus() due to SetNexus() not using an allocated
+staging area for the pixels like it should. This problem impacts
+all 1.3.X releases. Resolves SourceForge issues 532
+"heap-buffer-overflow bug in ReadWPGImage" and #531
+"heap-buffer-overflow in AcquireCacheNexus".</li>
+<li>magick/pixel_cache.c (InterpolateViewColor): Now returns
+MagickPassFail rather than void. Code using this function is
+updated to check the return status.</li>
+</ul>
+</blockquote>
+<p>2018-01-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/describe.c (DescribeImage): Discriminate between
+AcquireImagePixels() returning NULL or finding a transparent
+pixel. This avoids use of a null pointer in the case where
+AcquireImagePixels() returns NULL.</li>
+</ul>
+</blockquote>
+<p>2017-12-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/static.c: Change static module initialization to be based
+on an initialized list rather than a squence of function calls in
+order to simplify maintenance and possibly address future
+requirements.</li>
+</ul>
+</blockquote>
+<p>2017-12-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Copyright.txt: Bump copyright years and rotate ChangeLog.</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>ChangeLog-2019.rst</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2019-12-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/gradient.c (ReadGRADIENTImage): QueryColorDatabase() only
+throws a warning so allow the warning to propagate to the user
+rather than failing to report a useful message at all.</li>
+</ul>
+</blockquote>
+<p>2019-12-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/gradient.c (GradientImage): OpenMP portability requires
+that loop variable be signed.</li>
+</ul>
+</blockquote>
+<p>2019-12-30 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/gradient.c: Visual studio does not compile file without
+this fix.</li>
+</ul>
+</blockquote>
+<p>2019-12-30 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagickconfigureconfigure.cpp Add option for speed optimisation
+to achieve better performance.</li>
+</ul>
+</blockquote>
+<p>2019-12-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/version.h.in: Bump copyright years.</li>
+<li>magick/image.c (DisplayImages): Fix return status. Was
+returning inverted return status.</li>
+<li>coders/gradient.c (ReadGRADIENTImage): Support the
+"gradient:direction" definition to produce produce additional
+gradient vector directions corresponding to South, North, West,
+East, NorthWest, NorthEast, SouthWest, and SouthEast. This
+support is similar to a useful feature added in ImageMagick
+6.9.2.5 although there is no claim that the results are identical,
+even if the resulting images appear to be visually
+indistinguishable.</li>
+<li>magick/gradient.c (GradientImage): Add support for using the
+image 'gravity' attribute to produce additional gradient vector
+directions corresponding to SouthGravity (the previously-existing
+default), NorthGravity, WestGravity, EastGravity,
+NorthWestGravity, NorthEastGravity, SouthWestGravity, and
+SouthEastGravity. Gradient images are updated to be PseudoClass
+(color-mapped), if possible.</li>
+</ul>
+</blockquote>
+<p>2019-12-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/gradient.c (GradientImage): Output PseudoClass images if
+we can.</li>
+<li>coders/pcx.c (WritePCXImage): Fix heap overflow in PCX writer
+when bytes per line value overflows its 16-bit storage unit.
+Fixes SourceForge bug #619 "heap-buffer-overflow in WritePCXImage"
+reported by Suhwan Song.</li>
+<li>magick/gradient.c (GradientImage): Gradient levels were still
+not spot-on. Now they are. Unfortunately, this necessitated
+re-generating reference test images based on gradient since the
+gradient output has changed a little bit more than the test error
+margins allow.</li>
+</ul>
+</blockquote>
+<p>2019-12-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Test gradient image resource limits
+using the proper API.</li>
+<li>magick/resource.c (ResourceInfinity): Fix definition of
+ResourceInfinity. Due to parenthesis in the wrong place, the
+defined value was -1 rather than the maximum range value. The
+effect of this is that GetMagickResource() would return -1 rather
+than the maximum range value for the return type as documented.
+Regression was added on Saturday, March 09, 2019 in the 1.3.32
+release via changeset 15927:a5318823758c.</li>
+<li>tests/rwfile.c (main): Allow Ghostscript supported formats to be
+a bit lossy.</li>
+<li>tests/rwblob.c (main): Allow Ghostscript supported formats to be
+a bit lossy.</li>
+<li>magick/gradient.c (GradientImage): Compute blending alpha with
+double precision for more precision.</li>
+</ul>
+</blockquote>
+<p>2019-12-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Updates in preparation for 1.3.34 release.</li>
+</ul>
+</blockquote>
+<p>2019-12-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update with changes since the last GM release.</li>
+<li>coders/png.c (png_read_raw_profile): Use size_t type to store
+profile length and 'nibbles'. Use safer way to test for profile
+buffer overflow.
+(ReadOnePNGImage): Use size_t type to store 'ping_rowbytes',
+'length', and 'row_offset'. Check png_pixels allocation for
+arithemetic overflow when computing the required allocation size.</li>
+<li>coders/tiff.c (WriteNewsProfile): Use size_t type to store
+profile length.</li>
+<li>coders/pict.c (WritePICTImage): Avoid 'alloc-size-larger-than'
+warning from GCC when allocating row_bytes.</li>
+</ul>
+</blockquote>
+<p>2019-12-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tiff/libtiff/tiffconf.h: Add standard/common libtiff 'SUPPORT'
+options which are used in full-fledged Autoconf/Cmake libtiff
+builds but were missing from the Visual C template file. In
+particular, WebP is now supported and JBIG is somewhat supported.</li>
+<li>VisualMagick/jbig/libjbig/LIBRARY.txt (EXCLUDE): Remove
+tstcodec85.c from JBIG library build.</li>
+<li>VisualMagick/configure/configure.cpp: Add JBIG library to
+include path when building libraries. Add WebP as a dependency
+when building libtiff.</li>
+</ul>
+</blockquote>
+<p>2019-12-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.h ("C"): Assume that float versions of functions
+became available in Visual Studio 2008.</li>
+</ul>
+</blockquote>
+<p>2019-12-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/log.c (InitializeLogInfo): Using the compiled-in
+defaults, always log to stderr by default, even under Microsoft
+Windows. The logging output may then be diverted to
+'win32eventlog' as soon as a log.mgk file is loaded if that is
+desired. This should not be much of a problem because loading a
+log.mgk file is the first thing that the library attempts to do.
+This change is made due to users and developers being baffled at
+not seeing any log output due to the log output going to the (very
+unfriendly) Windows application log.</li>
+<li>webp: libwebp is updated to the 1.0.3 release.</li>
+</ul>
+</blockquote>
+<p>2019-12-15 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c Fix user only installation of Ghostscript.</li>
+</ul>
+</blockquote>
+<p>2019-12-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>rungm.sh.in (DIRSEP): DIRSEP should always use Unix conventions for
+Autotools-based builds.</li>
+<li>magick/module.h ("C"): Eliminiate redundant and conflicting
+ListModuleInfo() prototype.</li>
+<li>coders/miff.c (ReadMIFFImage): Eliminate warnings in trace
+statements.</li>
+<li>coders/dib.c (DecodeImage): Eliminate warnings in trace
+statements.</li>
+<li>coders/bmp.c (DecodeImage): Eliminate warnings in trace
+statements.</li>
+<li>magick/studio.h (SupportMagickModules): Fix the preprocessor
+logic controlling SupportMagickModules, which became broken for
+GCC MinGW-based builds starting in the 1.3.29 release when a
+"static" module loader was implemented. Due to an error in the
+preprocessor logic, only the "modules" based build was working for
+MinGW. Much thanks to Giovanni Remigi for making us aware of this
+issue.</li>
+</ul>
+</blockquote>
+<p>2019-12-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pict.c (WritePICTImage): Throw a writer exception if the
+PICT width limit is exceeded. Fixes SourceForge issue 617
+"heap-buffer-overflow in function EncodeImage of coders/pict.c".</li>
+</ul>
+</blockquote>
+<p>2019-12-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>jbig: jbigkit is updated to 2.1 release.</li>
+<li>libxml: libxml2 is updated to 2.9.10 release.</li>
+<li>bzlib: bzip is updated to 1.0.8 release.</li>
+<li>zlib: zlib is updated to 1.2.11 release.</li>
+<li>png: libpng is updated to 1.6.37 release.</li>
+</ul>
+</blockquote>
+<p>2019-12-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lcms: lcms2 is updated to 2.9 release.</li>
+<li>tiff: libtiff is updated to 4.1.0 release.</li>
+</ul>
+</blockquote>
+<p>2019-11-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawPatternPath): Don't leak memory if
+fill_pattern or stroke_pattern of cloned draw_info are not null.
+Fixes oss-fuzz issue 18948 "graphicsmagick:coder_MVG_fuzzer:
+Indirect-leak in CloneImage".
+(PrimitiveInfoRealloc): Clear freshly-allocated PrimitiveInfo
+memory.</li>
+</ul>
+</blockquote>
+<p>2019-11-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (GenerateEXIFAttribute): Fix oss-fuzz issue
+17986 "graphicsmagick:coder_JPG_fuzzer: Heap-buffer-overflow in
+GenerateEXIFAttribute". This problem likely only happens in
+32-bit builds.</li>
+</ul>
+</blockquote>
+<p>2019-11-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadMNGImage): Only magnify the image if the
+requested magnification methods are supported.</li>
+</ul>
+</blockquote>
+<p>2019-11-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/compress.c (HuffmanDecodeImage): Fix signed overflow on
+range check which leads to heap overflow in 32-bit
+applications. Requires a relatively large file input compared with
+typical fuzzer files (greater than a megabyte) to trigger.
+Problem reported to the graphicsmagick-security mail address by
+Justin Tripp on 2019-11-13.
+(Ascii85Tuple): Fix thread safety issue by requiring caller to
+pass in tuple buffer as an argument and having callers allocate
+tuple buffer on the stack.</li>
+</ul>
+</blockquote>
+<p>2019-11-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/bit_stream.c: Add restrict declarations to slightly
+improve performance and decrease code size.</li>
+<li>TclMagick/pkgIndex.tcl: Incorporate recommendations from third
+problem noted in SourceForge issue #420 "TclMagick issues and
+patch". This is supposed to help support using an uninstalled
+GraphicsMagick and allow the installation path to contain a space.</li>
+<li>wand/magick_wand.c (MagickClearException): Destroy any existing
+exception info before re-initializing the exception info or else
+there will be a memory leak.</li>
+<li>TclMagick/generic/libttkcommon.c (myMagickError): Clear
+exception from the Wand after it has been reported. Addresses the
+fourth problem noted by SourceForge issue #420 "TclMagick issues
+and patch". However, MagickClearException() already clears an
+exception in the Wand, so a new function is not needed.</li>
+<li>TclMagick/unix/m4/tcl.m4: Change hard-coded INSTALL path to
+point to config/install-sh. Re-generated/updated Autotools stuff
+by executing the genconf.sh script. Addresses the first problem
+noted by SourceForge issue #420 "TclMagick issues and patch".</li>
+</ul>
+</blockquote>
+<p>2019-11-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (SetNexus): Eliminate warning about
+possibly uninitialized variable from primordial GCC 3.4.3.</li>
+<li>magick/render.c (ConvertPrimitiveToPath): Eliminate warning that
+IsClosedSubPath might be used uninitialized.</li>
+<li>magick/common.h ("MAGICK_FALLTHROUGH"): Added a
+MAGICK_FALLTHROUGH macro to support the GCC/Clang fallthrough
+attribute when the time comes again that it would be useful.</li>
+</ul>
+</blockquote>
+<p>2019-10-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pcx.c (ReadPCXImage): Verify that pixel region is not
+negative. Assure that opacity channel is initialized to
+opaqueOpacity. Update DirectClass representation while
+PseudoClass representation is updated. Improve read performance
+with uncompressed PCX.</li>
+</ul>
+</blockquote>
+<p>2019-10-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xpm.c (ReadXPMImage): Image properties are expected to
+appear within the first 512 bytes of the XPM file header. fixes
+oss-fuzz 18267 "graphicsmagick:coder_PICON_fuzzer: Timeout in
+coder_PICON_fuzzer".</li>
+</ul>
+</blockquote>
+<p>2019-10-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Fix tcmalloc configuration report.</li>
+</ul>
+</blockquote>
+<p>2019-10-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c (ReadWPGImage): Implement subimage/subrange
+support.</li>
+<li>coders/mat.c (ReadMATImage, ReadMATImageV4): Implement
+subimage/subrange support. Should resolve oss-fuzz 14999
+"graphicsmagick/coder_MAT_fuzzer: Out-of-memory in
+graphicsmagick_coder_MAT_fuzzer".</li>
+<li>coders/tiff.c (TIFFMapBlob): Fix compile problem if
+LOG_TIFF_BLOB_IO is defined.</li>
+<li>coders/wpg.c (ExtractPostscript): Improve performance. Avoid
+temporary files if possible. Avoid additional memory allocations
+if possible. Should address oss-fuzz issue 18173
+"graphicsmagick:enhance_fuzzer: Timeout in enhance_fuzzer" and
+oss-fuzz issue 17714 "graphicsmagick:coder_WPG_fuzzer: Timeout in
+coder_WPG_fuzzer".</li>
+</ul>
+</blockquote>
+<p>2019-10-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pnm.c (PNMInteger): Place a generous arbitrary limit on
+the amount of PNM comment text to avoid denial of service
+opportunity. Fixes oss-fuzz 18162 "Timeout · coder_PNM_fuzzer".</li>
+</ul>
+</blockquote>
+<p>2019-10-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dps.c (ReadDPSImage): Fix memory leak when OpenBlob()
+reports failure. Same as ImageMagick CVE CVE-2019-16709.</li>
+</ul>
+</blockquote>
+<p>2019-09-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (GenerateEXIFAttribute): Skip
+unsupported/invalid format 0. Fixes oss-fuzz issue 17597
+"graphicsmagick:coder_SFW_fuzzer: Heap-buffer-overflow in
+GenerateEXIFAttribute".</li>
+</ul>
+</blockquote>
+<p>2019-09-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>fuzzing/oss-fuzz-build.sh: Change by Alex Gaynor so that the
+correct oss-fuzz fuzzing engine should be used.</li>
+</ul>
+</blockquote>
+<p>2019-09-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/static.c (OpenModule): Static module loader should use
+upper-cased magick string when searching for a module alias.
+Fixes SourceForge issue #613 "static module loader is still
+case-sensitive".</li>
+</ul>
+</blockquote>
+<p>2019-09-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Report status of zstd (FaceBook Zstandard)
+compression in configuration summary.</li>
+</ul>
+</blockquote>
+<p>2019-09-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (TraceArcPath): Substitute a lineto command when
+tracing arc is impossible. Fixes oss-fuzz 10765
+"graphicsmagick/coder_MVG_fuzzer: Divide-by-zero in TraceArcPath".</li>
+</ul>
+</blockquote>
+<p>2019-09-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (png_read_raw_profile): Fix validation of raw
+profile length. Fixes oss-fuzz 16906
+"graphicsmagick:coder_ICO_fuzzer: Out-of-memory in
+graphicsmagick_coder_ICO_fuzzer".</li>
+<li>coders/wpg.c (ReallocColormap): Avoid dereferencing a null
+pointer if image->colormap is null. Fixes oss-fuzz 17004
+"graphicsmagick:coder_WPG_fuzzer: Null-dereference READ in
+ReallocColormap".</li>
+</ul>
+</blockquote>
+<p>2019-09-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/memory.c (MagickRealloc): Add a note that the behavior of
+this function is as described for BSD reallocf(3), which is now
+appearing in Linux's GNU libc and elsewhere.</li>
+</ul>
+</blockquote>
+<p>2019-09-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/OpenMP.rst: Document the significant OpenMP speed-up which
+may be obtained by using an alternate memory allocation library.
+Currently 'tcmalloc', 'mtmalloc', and 'umem' are supported as
+options.</li>
+<li>www/INSTALL-unix.rst: Document new --with-tcmalloc option to
+enable using Google gperftools tcmalloc library.</li>
+<li>configure.ac: Add support for using Google gperftools tcmalloc
+library via the --with-tcmalloc option.</li>
+<li>scripts/rst2htmldeco.py: Port to Python 3 syntax and require at
+least Python 2.6.</li>
+<li>scripts/relpath.py: Port to Python 3 syntax and require
+at least Python 2.6.</li>
+<li>scripts/html_fragments.py: Port to Python 3 syntax and require
+at least Python 2.6.</li>
+<li>scripts/format_c_api_doc.py: Port to Python 3 syntax and require
+at least Python 2.6.</li>
+</ul>
+</blockquote>
+<p>2019-08-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>doc/GraphicsMagick.imdoc: Document gm utility exit status codes.</li>
+</ul>
+</blockquote>
+<p>2019-08-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (PRIMITIVE_INFO_POINTS_MAX): SIZE_MAX apparently
+rounds up by one when cast to a double on 64-bit systems. Due to
+this, and in order to set more rational implementation limits, add
+a PRIMITIVE_INFO_POINTS_MAX definition which computes and
+constrains the maximum number of PrimitiveInfo entries allowed.</li>
+</ul>
+</blockquote>
+<p>2019-08-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (GenerateEXIFAttribute): Check that we are
+not being directed to read an IFD that we are already parsing and
+quit in order to avoid a loop. Addresses oss-fuzz 15753
+"graphicsmagick/coder_JPEG_fuzzer: Timeout in
+graphicsmagick_coder_JPEG_fuzzer" and 16068
+"graphicsmagick/coder_SFW_fuzzer: Timeout in
+graphicsmagick_coder_SFW_fuzzer".</li>
+<li>tests/{constitute.c, drawtest.c, rwblob.c, rwfile.c}: Eliminate
+irritating GCC 9 "__builtin_strncpy' output may be truncated"
+warnings due to copying MaxTextExtent-1 characters. Instead
+request copying all of the characters and also assure that string
+is still null terminated.</li>
+<li>doc/environment.imdoc: Update documentation pertaining to HOME
+and MAGICK_DEBUG environment variables.</li>
+</ul>
+</blockquote>
+<p>2019-08-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/log.c (DestroyLogInfo): Only output text to terminate an
+XML format log file if XML format is active.</li>
+</ul>
+</blockquote>
+<p>2019-08-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (ExtractTokensBetweenPushPop): Previous fix for
+non-terminal loop was broken by a last-minute untested edit.
+Finally addresses oss-fuzz 15318 "graphicsmagick/coder_MVG_fuzzer:
+Timeout in graphicsmagick_coder_MVG_fuzzer".</li>
+</ul>
+</blockquote>
+<p>2019-08-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>fuzzing/utils.cc (MemoryResource): Lessen the memory limit used
+for oss-fuzz testing in order to provide more headroom and margin
+for error.</li>
+<li>magick/render.c (TraceBezier): Detect arithmetic overflow and
+return errors via normal error path rather than exiting. Fixes
+oss-fuzz 16450 "graphicsmagick:coder_MVG_fuzzer: Unexpected-exit
+in DefaultFatalErrorHandler".
+(PrimitiveInfoRealloc): Implement more paranoid code related to
+primitive allocation.</li>
+</ul>
+</blockquote>
+<p>2019-08-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawStrokePolygon): Handle case where
+TraceStrokePolygon() returns NULL. Addresses oss-fuzz 15516
+"graphicsmagick/coder_MVG_fuzzer: ASSERT: primitive_info !=
+(PrimitiveInfo *) NULL".
+(DrawDashPolygon): Handle case where DrawStrokePolygon() returns
+MagickFail. Also needed to address oss-fuzz 15516, since otherwise
+test-cases run for a very long time.
+(ExtractTokensBetweenPushPop): Fix non-terminal parsing loop.
+Addresses oss-fuzz 15318 "graphicsmagick/coder_MVG_fuzzer: Timeout
+in graphicsmagick_coder_MVG_fuzzer".</li>
+</ul>
+</blockquote>
+<p>2019-08-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/memory.h (MagickMallocAlignedArray): Add function
+attributes for added value and to quench GCC 9 warning with
+special build options enabled.</li>
+<li>magick/deprecate.h (AcquireMemory): Add more function attributes
+to quench GCC 9 warning with special build options enabled.</li>
+<li>magick/attribute.c (GenerateEXIFAttribute): Fix compilation
+warning in 32-bit build.</li>
+<li>coders/dpx.c (AttributeToString): Eliminate annoying warnings
+from GCC 9, although the code was correct.</li>
+<li>coders/msl.c (MSLStartElement): Fix defective opacity percentage
+code revealed by GCC 9 warning.</li>
+</ul>
+</blockquote>
+<p>2019-08-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadMNGImage): Skip coalescing layers if there is
+only one layer. Fixes oss-fuzz 16274
+"graphicsmagick/coder_MNG_fuzzer: Unexpected-exit in
+DefaultFatalErrorHandler".</li>
+</ul>
+</blockquote>
+<p>2019-08-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadPNGImage): Post-processing to convert the
+image type in the PNG reader based on a specified magick prefix
+string is now disabled. This can (and should) be done after the
+image has been returned. Fixes oss-fuzz 16386
+"graphicsmagick:coder_PNG8_fuzzer: Timeout in
+graphicsmagick_coder_PNG8_fuzzer".</li>
+</ul>
+</blockquote>
+<p>2019-07-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Updates in preparation for 1.3.33 release.</li>
+</ul>
+</blockquote>
+<p>2019-07-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Updated NEWS to reflect updates since last release.</li>
+</ul>
+</blockquote>
+<p>2019-07-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WriteOnePNGImage): Fix saving to palette when
+image has an alpha channel but no color is marked as transparent.
+Patch submitted by Przemysław Sobala via SourceForge patch #61
+"WriteOnePNGImage(): Fix saving to palette when image has an alpha
+channel but no color is marked as transparent".</li>
+<li>doc/options.imdoc (characters): Fix -format documentation to
+reflect that '%r' returns the image type. Patch submitted by
+Przemysław Sobala via SourceForge patch #60 "Fix documentation
+typo".</li>
+</ul>
+</blockquote>
+<p>2019-07-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/tempfile.c (AcquireTemporaryFileDescriptor): Fix
+compilation under Cygwin. Patch by Marco Atzeri and submitted via
+email to the graphicsmagick-help mailing list on Fri, 5 Jul 2019.</li>
+</ul>
+</blockquote>
+<p>2019-06-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/attribute.c (GenerateEXIFAttribute): Added range checks
+and tracing. Fixes oss-fuzz 14998
+"graphicsmagick/coder_JPEG_fuzzer: Heap-buffer-overflow in
+Read32s". This is a tiny read overflow.</li>
+<li>coders/miff.c (ReadMIFFImage): Similar fix as to mpc.c</li>
+<li>coders/mpc.c (ReadMPCImage): Fix faulty signed overflow logic
+for profiles[i].length which still allowed overflow. Fixes
+oss-fuzz issue 15190 "graphicsmagick/coder_MPC_fuzzer:
+Out-of-memory in graphicsmagick_coder_MPC_fuzzer".</li>
+<li>doc/options.imdoc: Add notes about security hazards due to
+commands which support a <a class="reference external" href="mailto:'%40filename">'<span>@</span>filename</a>' syntax.</li>
+<li>www/security.rst: Add notes about security hazards due to
+commands which support a <a class="reference external" href="mailto:'%40filename">'<span>@</span>filename</a>' syntax.</li>
+</ul>
+</blockquote>
+<p>2019-06-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Assure that 'token' is initialized.
+Fixes oss-fuzz issue 14897 "graphicsmagick/coder_MVG_fuzzer:
+Use-of-uninitialized-value in DrawImage".</li>
+<li>magick/animate.c (MagickXAnimateImages): Fix memory leak of
+scene_info.pixels.</li>
+<li>magick/display.c (MagickXDisplayImage): Fix heap overwrite of
+windows->image.name and windows->image.icon_name buffers. It
+appears that the code assumed that CloneString() would always
+allocated a string at least MaxTextExtent in size. I assume that
+this issue has existed for a very long time since CloneString()
+was re-written many years ago.</li>
+<li>coders/caption.c (ReadCAPTIONImage): The CAPTION reader did not
+appear to work at all any more. Now it works again, but still not
+very well.</li>
+<li>magick/command.c: Re-implement '@' file inclusion support for
+-comment, -draw, -format, and -label which was removed for the
+1.3.32 release. Note that arguments from untrusted sources will
+still need to be sanitized to detect attempts to subvert this
+feature to access file data, but this feature has always been
+supported by GraphicsMagick and it originated early in the
+development of ImageMagick.</li>
+</ul>
+</blockquote>
+<p>2019-06-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (MagickStrlCat, MagickStrlCpy): Add debug
+checks enabled by MAGICK_STRL_CHECK.</li>
+<li>magick/montage.c (MontageImages): Fix wrong length argument to
+strlcat() when building montage directory, which could allow heap
+overwrite.</li>
+<li>coders/png.c (RegisterPNGImage): Pass correct size value to
+strlcat(). Under Apple's OS X (and possibly other targets)
+strlcat() writes bytes beyond what it needs to (but within the
+range it is allowed to) causing a crash due to the wrong limit
+value. Fixes SourceForge issue #609 <cite>gm identify foo.png</cite> crashes
+on macOS (v 1.3.32).</li>
+<li>www/Changes.rst: Update ChangeLog links due to new year, and
+1.3.32 release.</li>
+</ul>
+</blockquote>
+<p>2019-06-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (WriteBMPImage): Detect arithmetic overflow of
+image_size. Add more tracing. Reduce compilation warnings.
+(EncodeImage): Reduce compilation warnings.
+(WriteBMPImage): Assure that chromaticity uses double-precision
+for multiply before casting to unsigned integer.</li>
+<li>coders/wpg.c (ReallocColormap): Reduce compilation warnings.</li>
+<li>coders/braille.c (WriteBRAILLEImage): Reduce compilation
+warnings.</li>
+<li>coders/dib.c (WriteDIBImage): Detect arithmetic overflow of
+image_size. Reduce compilation warnings.
+(EncodeImage): Reduce compilation warnings.</li>
+<li>coders/locale.c (WriteLOCALEImage): Reduce compilation warnings.</li>
+</ul>
+</blockquote>
+<p>2019-06-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am (dist-zstd): Use the maximum possible compression
+level (22) when creating a Zstd-compressed tarball to get close to
+lzip/xz compression levels.</li>
+<li>coders/tiff.c (ReadTIFFImage): Fix typo in initialization of
+'tile' pointer variable.</li>
+<li>version.sh: Updates in preparation for 1.3.32 release.</li>
+</ul>
+</blockquote>
+<p>2019-06-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am (release): Add a release target to make it easier to
+produce and sign the release files. Add a zstd-compressed output
+tarball just because we can.</li>
+</ul>
+</blockquote>
+<p>2019-06-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Fix typo when initializing
+number_coordinates. Somehow GCC and clang let this typo slip by.</li>
+</ul>
+</blockquote>
+<p>2019-06-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dib.c (ReadDIBImage): Preserve PseudoClass opaque
+representation if ICO mask is opaque, otherwise return a
+DirectClass image.</li>
+</ul>
+</blockquote>
+<p>2019-06-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Detect an error in TracePath() and
+quit rather than forging on.</li>
+</ul>
+</blockquote>
+<p>2019-06-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Terminate drawing if
+DrawCompositeMask() reports failure. Fixes oss-fuzz 12373
+"graphicsmagick/coder_MVG_fuzzer: Timeout in
+graphicsmagick_coder_MVG_fuzzer".
+(TracePath): Terminate path parsing upon first parsing error.</li>
+</ul>
+</blockquote>
+<p>2019-06-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/txt.c (ReadTXTImage): Use real a new-line character as
+line delimiter rather than 'n' string.</li>
+<li>magick/annotate.c (AnnotateImage): No longer implicitly call
+TranslateText() since this is not suitable for most use-cases and
+causes additional performance impact. The API user can perform
+such translations in advance on the text string using
+TranslateText() if need be. No longer call StringToList() to
+split strings into an array of strings since this can lead to
+unexpected results, and a custom-splitter is more efficient.</li>
+</ul>
+</blockquote>
+<p>2019-06-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Only support <a class="reference external" href="mailto:'%40filename">'<span>@</span>filename</a>' syntax to
+read drawing primitive from a file if we are not already drawing.</li>
+<li>magick/utility.c (TranslateTextEx): Remove support for reading
+from a file using <a class="reference external" href="mailto:'%40filename">'<span>@</span>filename</a>' syntax due to security concerns.
+Problem was reported to us by "Battle Furry" via the
+GraphicsMagick security mail alias on June 6, 2019.</li>
+</ul>
+</blockquote>
+<p>2019-06-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/utility.c (SetClientFilename): Reduce initialized data
+some more.</li>
+</ul>
+</blockquote>
+<p>2019-06-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c: Search for n019003l.pfb (the "Helvetica"-like
+font) rather than fonts.dir since fonts.dir is not present in all
+URW font collections.</li>
+<li>NEWS.txt: Update news.</li>
+</ul>
+</blockquote>
+<p>2019-06-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/logo.c: Tidy logo image definitions, and logo image
+output.</li>
+</ul>
+</blockquote>
+<p>2019-05-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c: Make more data const.</li>
+</ul>
+</blockquote>
+<p>2019-05-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/animate.c: Reduce initialized static allocations.</li>
+<li>magick/display.c: Reduce initialized static allocations.</li>
+<li>magick/widget.c (MagickSplitNDLTextToList): Add static
+implementation function.</li>
+</ul>
+</blockquote>
+<p>2019-05-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/webp.c (RegisterWEBPImage): Use sprintf to format version
+since snprintf is not available in old Visual Studio.</li>
+</ul>
+</blockquote>
+<p>2019-05-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dcm.c: Make more data const.</li>
+<li>www/INSTALL-unix.rst: Add documentation for how to install URW
+fonts from various package management systems.</li>
+</ul>
+</blockquote>
+<p>2019-05-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/authors.rst: Add authorship attribution to Samuel Thibault
+for contributing support for the Braille image format.</li>
+<li>coders/braille.c: Add support for Braille image format by Samuel
+Thibault. Patch submitted via SourceForge patch #59 "Add braille
+image format support.</li>
+</ul>
+</blockquote>
+<p>2019-05-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/tempfile.c: Make more data const.</li>
+<li>magick/signature.c: Make more data const.</li>
+<li>magick/quantize.c: Make more data const.</li>
+<li>magick/attribute.c: Make more data const.</li>
+<li>coders/png.c: Make more data const.</li>
+<li>coders/mpeg.c: Make more data const.</li>
+<li>coders/wmf.c: Make more data const.</li>
+<li>coders/tile.c: Make more data const.</li>
+</ul>
+</blockquote>
+<p>2019-05-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/enum_strings.c: Make more data const.</li>
+</ul>
+</blockquote>
+<p>2019-05-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c: Make more data const.</li>
+<li>magick/type.c (GetTypeInfoByFamily): Make more data const.</li>
+<li>magick/unix_port.c (MagickGetMMUPageSize): Decrease initialized
+data.</li>
+<li>magick/utility.c (GetPageGeometry): Make more data const.</li>
+<li>coders/pdf.c (WritePDFImage): Allocate working buffer on stack
+and pass as argument to EscapeParenthesis() to eliminate a thread
+safety problem and also reduce BSS size.</li>
+<li>coders/webp.c (RegisterWEBPImage): Fix compiler warning.</li>
+<li>coders/jbig.c (RegisterJBIGImage): Make more data const.</li>
+<li>coders/pict.c (DecodeImage): Allocate output buffer used by
+ExpandBuffer() on the stack rather than as static data private to
+ExpandBuffer(). Eliminates a thread safety problem and also
+reduces BSS size.</li>
+<li>coders/webp.c (RegisterWEBPImage): Reduce BSS size.</li>
+</ul>
+</blockquote>
+<p>2019-05-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jp2.c: Make more data const.</li>
+<li>coders/wmf.c: Make more data const.</li>
+<li>coders/ps.c (WritePSImage): Make more data const.</li>
+<li>coders/ps2.c (WritePS2Image): Make more data const.</li>
+</ul>
+</blockquote>
+<p>2019-05-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/static.c: Revert to previous 'name' storage. Callback
+functions in structure block being properly const.</li>
+<li>coders/xpm.c: Make more data const.</li>
+<li>coders/pnm.c: Make more data const.</li>
+<li>coders/palm.c: Make more data const.</li>
+<li>coders/meta.c: Make more data const.</li>
+<li>coders/dcraw.c: Make more data const.</li>
+<li>magick/command.c: Fix compilation problem when HasX11 is not
+defined.</li>
+</ul>
+</blockquote>
+<p>2019-05-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c: Make more data const.</li>
+</ul>
+</blockquote>
+<p>2019-05-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/webp.c (RegisterWEBPImage): Make more data const.</li>
+<li>coders/svg.c (RegisterSVGImage): Reduce BSS size.</li>
+<li>coders/miff.c (RegisterMIFFImage): Fix version reporting.</li>
+<li>coders/ttf.c (RegisterTTFImage): Fixed reporting of FreeType
+version.</li>
+<li>coders/tiff.c (RegisterTIFFImage): Reduce BSS size.</li>
+<li>coders/sfw.c (ReadSFWImage): Make SFW static data completely
+const.</li>
+<li>coders/ps3.c: Make PS3 static data completely const.</li>
+<li>coders/pict.c: Make PICT static data completely const.</li>
+<li>magick/error.c (ThrowException, ThrowLoggedException): Handle
+the case where some passed character strings refer to existing
+exception character strings. Fixes SourceForge issue #603
+"heap-use-after-free in function ThrowLoggedException of
+magick/error.c".
+(CatchException): Restructure so there is one return point.</li>
+<li>coders/miff.c (ImportRLEPixels): Fix heap overflow caused by a
+typo in the code. Also fix undefined behavior caused by large
+left shifts of an unsigned char. Fixes SourceForge issue #608
+"heap-buffer-overflow in ImportRLEPixels of coders/miff.c.</li>
+</ul>
+</blockquote>
+<p>2019-05-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/bmp.c (ReadBMPImage): Fix subrange/scene handling in
+'ping' mode so it is like the other formats. Only the first frame
+was being enumerated while in 'ping' mode.</li>
+</ul>
+</blockquote>
+<p>2019-05-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update news.</li>
+<li>magick/utility.c (ExpandFilenames): Only expand <a class="reference external" href="mailto:'%40filename">'<span>@</span>filename</a>' to a
+list of arguments read from 'filename' if the path <a class="reference external" href="mailto:'%40filename">'<span>@</span>filename</a>'
+does not exist. This fix is made based on an email posting to the
+'graphicsmagick-help' mailing list at SourceForge by "Test User"
+on Tue, 7 May 2019.</li>
+</ul>
+</blockquote>
+<p>2019-05-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/colorspace.c: Reorder initialization of colorspace tables
+for a possible performance improvement.</li>
+<li>magick/fx.c (WaveImage): Use float for sin map.</li>
+<li>configure.ac: Test for float versions of math functions.</li>
+<li>magick/gem.c (GenerateDifferentialNoise): Use float versions of
+math functions when available.</li>
+</ul>
+</blockquote>
+<p>2019-05-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/INSTALL-unix.rst: Expanded configure documentation for
+--with-modules. Added specific configure documentation for
+--with-umem and --with-mtmalloc, which may be useful on
+Solaris-derived systems.</li>
+</ul>
+</blockquote>
+<p>2019-04-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (VersionCommand): Show OpenMP specification
+version corresponding to version enumeration.</li>
+<li>magick/locale.c (GetLocaleMessageFromTag): Eliminate clang
+warning about comparison with a constant value.</li>
+<li>magick/log.c (InitializeLogInfo): Initialize LogInfo log_configured.</li>
+</ul>
+</blockquote>
+<p>2019-04-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magic.c (struct): Ajust StaticMagic definition to be more
+const-friendly.</li>
+<li>magick/color_lookup.c (struct): Adjust StaticColors definition
+to be more const-friendly.</li>
+<li>magick/attribute.c: Ajust tag_table definition to be more
+const-friendly.</li>
+<li>magick/log.c: Allocate LogInfo from heap as we used to do.</li>
+<li>magick/locale.c (GetLocaleMessageFromTag): Adaptations to locale
+coder output changes.</li>
+<li>coders/locale.c (WriteLOCALEImage): Adjust locale coder output
+to be more const.</li>
+</ul>
+</blockquote>
+<p>2019-04-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/color_lookup.c: Make built-in color tables fully const.</li>
+<li>magick/animate.c: Use MagickXTextViewWidgetNDL() to display help
+text.</li>
+<li>magick/display.c: Use MagickXTextViewWidgetNDL() to display help
+text.</li>
+<li>magick/widget.c (MagickXTextViewWidgetNDL): New private function
+to display multi-line null-delimited text in an X11 widget.</li>
+<li>coders/xwd.c (ReadXWDImage): Added even more XWD header
+validation logic. Addresses problems noted by email from Hongxu
+Chen to the graphicsmagick-security mail alias on Fri, 19 Apr 2019
+and Sat, 20 Apr 2019 and entitled "Multiple crashes (FPE and
+invalid read) when processing XWD files".</li>
+</ul>
+</blockquote>
+<p>2019-04-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xwd.c (ReadXWDImage): Added even more XWD header
+validation logic. Addresses problems noted by email from Hongxu
+Chen to the graphicsmagick-security mail alias on Wed, 17 Apr 2019
+and entitled "Multiple crashes (FPE and invalid read) when
+processing XWD files". Also addresses additional issues noted
+that an attacker could request to allocate an arbitrary amount of
+memory based on ncolors and the claimed header size.</li>
+</ul>
+</blockquote>
+<p>2019-04-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xwd.c (ReadXWDImage): Add more XWD header validation
+logic. Addresses problems noted by email from Hongxu Chen to the
+graphicsmagick-security mail alias on Sun, 14 Apr 2019 and
+entitled "Multiple crashes (FPE and invalid read) when processing
+XWD files".</li>
+</ul>
+</blockquote>
+<p>2019-04-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdb.c (WritePDBImage): Assure that input scanline is
+cleared in order to cover up some decoder bug. May fix 14215
+"graphicsmagick/coder_PDB_fuzzer: Use-of-uninitialized-value in
+WritePDBImage", which I have not been able to reproduce.</li>
+<li>magick/render.c (DrawPrimitive): Check primitive point x/y
+values for NaN.
+(DrawImage): Fix oss-fuzz issue 14173
+"graphicsmagick/coder_MVG_fuzzer: Integer-overflow in DrawImage".</li>
+<li>magick/pixel_cache.c (SetNexus): Fix oss-fuzz issue 14208
+"graphicsmagick/coder_MVG_fuzzer: Integer-overflow in SetNexus".</li>
+</ul>
+</blockquote>
+<p>2019-04-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/display.c: Add even more const declarations.</li>
+<li>coders/mat.c (WriteMATLABImage): Add completely missing error
+handling. Fixes SourceForge issue #604 "heap-buffer-overflow in
+function WriteMATLABImage of coders/mat.c".</li>
+</ul>
+</blockquote>
+<p>2019-04-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdb.c (WritePDBImage): Fix SourceForge issue #605
+"heap-buffer-overflow in function WritePDBImage of coders/pdb.c".</li>
+<li>magick/widget.c: Add many const declarations.</li>
+<li>magick/display.c: Incorporate and eliminate display.h. Add many
+const declarations.</li>
+<li>magick/animate.c: Incorporate and eliminate animate.h. Add many
+const declarations.</li>
+</ul>
+</blockquote>
+<p>2019-04-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wmf.c (ReadWMFImage): Reject WMF files with an empty
+bounding box. Fixes SourceForge issue #606 "Division by Zero in
+coders/wmf.c".</li>
+</ul>
+</blockquote>
+<p>2019-04-07 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c Fix a problem of finding ghostscript fonts.
+Variable "font_dir" was useless and thus removed. No need to copy
+text multiple times. Use const char gs_font_dir[] instead of
+pointer.</li>
+</ul>
+</blockquote>
+<p>2019-04-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xwd.c (ReadXWDImage): Perform more header validations and
+a file size validation in order to reject files with bogus
+headers.
+(WriteXWDImage): Fix SourceForge issue #599
+"heap_buffer_overflow_WRITE in function WriteXWDImage of
+coders/xwd.c".</li>
+</ul>
+</blockquote>
+<p>2019-04-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (SVGStartElement): Fix stack buffer overflow while
+parsing quoted font family value. Fixes SourceForge issue #600
+"stack-buffer-overflow in function SVGStartElement of
+coders/svg.c".</li>
+<li>coders/miff.c (ReadMIFFImage): Detect end of file while reading
+RLE packets. Fixes SourceForge issue #598 "heap-buffer-overflow
+in function ReadMIFFImage of coders/miff.c".</li>
+</ul>
+</blockquote>
+<p>2019-04-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/xwd.c (ReadXWDImage): Fix heap buffer overflow while
+reading DirectClass XWD file. Fixes SourceForge issue #597
+"heap-buffer-overflow in function ReadXWDImage of coders/xwd.c".</li>
+</ul>
+</blockquote>
+<p>2019-04-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadMNGImage): Fix small buffer overflow (one
+PixelPacket) of image colormap. Fixes SourceForge issue #596
+"heap-buffer-overflow in function CloneImage of magick/image.c".</li>
+<li>magick/colormap.c (ReallocateImageColormap): New function to
+reallocate an image colormap.</li>
+<li>coders/logo.c: Make more static data const.</li>
+<li>magick/module_aliases.h: Make more static data const.</li>
+<li>magick/static.c: Make more static data const.</li>
+</ul>
+</blockquote>
+<p>2019-04-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/log.c (LogMagickEventList): Log elapsed time with
+microsecond precision.</li>
+</ul>
+</blockquote>
+<p>2019-03-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mpc.c (ReadMPCImage): Deal with a profile length of zero,
+or an irrationally large profile length. Fixes SourceForge issue
+#601 "memory leak in function ReadMPCImage of coders/mpc.c ".</li>
+<li>magick/xwindow.c (MagickXGetWindowInfo): Deal with the unlikely
+case that the memory allocation for window->segment_info
+fails. Fixes SourceForge #595 "use allocate memory before null
+check" as pertains to magick/xwindow.c.</li>
+<li>magick/segment.c (Classify): Add check for memory allocation
+failure when allocating cluster array. Fixes SourceForge #595 "use
+allocate memory before null check" as pertains to
+magick/segment.c.</li>
+<li>coders/pdb.c (ReadPDBImage): Fix use of allocated memory before
+null check. Fixes SourceForge #595 "use allocate memory before
+null check" as pertains to coders/pdb.c.</li>
+</ul>
+</blockquote>
+<p>2019-03-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (AllocateThreadViewSet): Simplify the image
+view model by adding NexusInfo to the View structure (rather than
+referencing it via a pointer) to lessen the number of required
+per-thread allocations and to improve locality of reference.</li>
+</ul>
+</blockquote>
+<p>2019-03-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c (WPG1_Palette): Change to a static declaration.</li>
+<li>coders/dcm.c: dicom_info array is now fully in the data segment.</li>
+</ul>
+</blockquote>
+<p>2019-03-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Add support for using the Solaris mtmalloc
+library. This is primarily for testing or as an alternative to
+Solaris umem.
+Stop using posix_memalign() until it is uniformly more mature and
+reliably quick.</li>
+</ul>
+</blockquote>
+<p>2019-03-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (SetNexus): Smallest staging-area
+allocation is cache line size so declare it as such.</li>
+<li>magick/fx.c: Functions in the fx module which return a new Image
+should return a null Image if an exception was thrown. Also,
+assure that user has an opportunity to see the exception which was
+thrown.</li>
+<li>magick/error.c (ThrowLoggedException): Throwing an exception is
+now thread-safe.</li>
+<li>magick/pixel_cache-private.h: Moved pixel cache private
+definitions to private header.</li>
+</ul>
+</blockquote>
+<p>2019-03-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (SetNexus): Pass x, y, columns, and rows
+rather than a pointer to RectangleInfo. This should be easier to
+inline on modern CPUs.</li>
+</ul>
+</blockquote>
+<p>2019-03-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (SetNexus): Cache resource limits in
+CacheInfo rather than repeatedly calling into the resource code in
+order to lessen the overhead of performing resource limit checks
+on the pixel cache views.</li>
+<li>magick/resource.c (AcquireMagickResource): Use a lock for each
+resource in order to lessen contention. Return a maximum 64-bit
+integer value if the resource has not been limited. Previously
+returned -1 in this case but this was not documented.</li>
+</ul>
+</blockquote>
+<p>2019-03-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/import.c (ImportViewPixelArea): If range between max and
+min is less than MagickEpsilon, produce a black image rather than
+throwing an exception.</li>
+<li>coders/mat.c (ReadMATImage): Fix memory leak on unexpected end
+of file. Fixes oss-fuzz 13556 "graphicsmagick/coder_MAT_fuzzer:
+Direct-leak in ReadMATImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2019-03-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mat.c (ReadMATImage): Quit if image scanlines are not
+fully populated due to exception. Fixes oss-fuzz 13530
+"graphicsmagick/coder_MAT_fuzzer: Use-of-uninitialized-value in
+InsertComplexFloatRow". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2019-03-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/txt.c (ReadTXTImage): Don't start new line if x_max <
+x_min. Avoids calling SetImagePixels() with a width of zero.
+Related to oss-fuzz 13521 "graphicsmagick/coder_TEXT_fuzzer:
+Floating-point-exception in SetNexus". (Credit to OSS-Fuzz)</li>
+<li>magick/pixel_cache.c (SetNexus): Report error for empty region
+rather than crashing due to divide by zero exception. This is a
+new bug due to yesterday's changes. Fixes oss-fuzz 13521
+"graphicsmagick/coder_TEXT_fuzzer: Floating-point-exception in
+SetNexus". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2019-03-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>design/pixel-cache.dot: Update design dot diagram to remove
+IsNexusInCore and add CompositeCacheNexus.</li>
+<li>magick/pixel_cache.c (SetNexus): Apply resource limits to pixel
+nexus allocations using the same limits (total pixels, width,
+height, memory) as applied to the whole image since some requests
+are directly influenced by the input file. Add yet more tests for
+arithmetic overflow. Whole source module is re-arranged so that
+static functions are in order of dependency so that forward
+prototype declarations are no longer needed. Fixes oss-fuzz 13210
+"graphicsmagick/coder_MVG_fuzzer: Integer-overflow in
+SetNexus". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2019-03-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (OpenCache): Use unsigned 64-bit value to
+store CacheInfo offset and length as well as for the total pixels
+calculation. Add some more arithmetic overflow detections.</li>
+<li>coders/topol.c (ReadTOPOLImage): Report a corrupt image
+exception "Unexpected end-of-file" if reader encounters end of
+file while reading header rows. Addresses oss-fuzz 7981
+"graphicsmagick/coder_TOPOL_fuzzer: Use-of-uninitialized-value in
+InsertRow". (Credit to OSS-Fuzz)</li>
+<li>coders/mat.c (ReadMATImage): Report a corrupt image exception
+"Unexpected end-of-file" if reader encounters end of file while
+reading scanlines. Also added some helpful traces. Hopefully
+addresses oss-fuzz 13445 "graphicsmagick/coder_MAT_fuzzer:
+Use-of-uninitialized-value in IsGrayImage". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2019-02-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.h ("C"): Include as "magick/image-private.h" as the
+other headers are.
+("C"): Include "magick/image-private.h" inside the protective
+MAGICK_IMPLEMENTATION guard, as it should have been. This error
+broke the oss-fuzz build.</li>
+</ul>
+</blockquote>
+<p>2019-02-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image-private.h (_ImageExtra): Put ImageExtra definition
+in a private header file so that its definition may be accessed
+directly by library internals. Add some accessor macros to
+provide access and update code to use them.</li>
+<li>coders/wpg.c (ReallocColormap): Make sure that there is not a
+heap overwrite if the number of colors has been reduced. Thanks
+to Jaroslav Fojtik for giving me a heads up about this.</li>
+</ul>
+</blockquote>
+<p>2019-02-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/monitor.c (MagickMonitorActive): Add new private function
+to test if a progress monitor is active. Update all progress
+monitor code in loops to use this information, while also updating
+code to hopefully address concerns expressed by Hongxu Chen about
+data races on the graphicsmagick-bugs mailing list starting on
+February 6, 2019.</li>
+</ul>
+</blockquote>
+<p>2019-02-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/mpc.c (ReadMPCImage): Tally directory length to avoid
+death by strlen().</li>
+<li>coders/miff.c (ReadMIFFImage): Tally directory length to avoid
+death by strlen(). Fixes oss-fuzz 13190
+"graphicsmagick/coder_MIFF_fuzzer: Timeout in
+graphicsmagick_coder_MIFF_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2019-02-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (ReadSVGImage): Don't call xmlCleanupParser()
+in module code since this may cause other libxml users to fail.</li>
+<li>coders/msl.c (ProcessMSLScript): Don't call xmlCleanupParser()
+in module code since this may cause other libxml users to fail.</li>
+<li>magick/render.c (DrawDashPolygon): (DrawDashPolygon): Don't read
+beyond end of dash pattern array. This is a second instance of
+issue identified by SourceForge issue #591. Fixes oss-fuzz 13160
+"graphicsmagick/coder_MVG_fuzzer: Heap-buffer-overflow in
+DrawDashPolygon". The earlier attempt to fix this problem today
+broke dash patterns entirely. (Credit to OSS-Fuzz)</li>
+<li>magick/annotate.c (RenderFreetype): Eliminate memory leak of
+GlyphInfo.image (type FT_Glyph) while rendering some FreeType
+fonts such as the one we use now in the Magick++ test suite.</li>
+</ul>
+</blockquote>
+<p>2019-02-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawDashPolygon): Avoid reading one beyond
+length of dash pattern array, which is terminated by value 0.0.
+Fixes SourceForge issue #591 "Heap buffer overflow in
+DrawDashPolygon when parsing SVG images".
+(DrawPrimitive): Add arithmetic overflow checks when converting
+computed coordinates from 'double' to 'long'.
+(DrawImage): Don't destroy draw_info in graphic_context when
+draw_info has not been allocated yet. Problem reported via email
+by Sami Supperi on Thu, 14 Feb 2019.</li>
+<li>coders/jpeg.c (ReadJPEGImage): JPEG files are observed to
+provide compression ratios as high as 2500 so allow for that.
+Also, the test for "Unreasonable dimensions" delivered yesterday
+was flawed since magick_rows and magick_columns are only set if a
+desired image size was provided. Fixes SourceForge issue 592
+"Non-malicious JPEG file fails with "Unreasonable dimensions"".</li>
+<li>coders/tiff.c (ReadTIFFImage): Only disassociate alpha channel
+for images where photometic is PHOTOMETRIC_RGB. Fixes oss-fuzz
+13115 "graphicsmagick/coder_PTIF_fuzzer:
+Use-of-uninitialized-value in DisassociateAlphaRegion". (Credit to
+OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2019-02-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jpeg.c (ReadJPEGImage): Base test for "Unreasonable
+dimensions" on original JPEG dimensions and not the scaled
+dimensions. Fixes SourceForge issue 593 "gm convert: Insufficient
+image data in file when hinting input image".</li>
+</ul>
+</blockquote>
+<p>2019-02-13 Troy Patteson <<a class="reference external" href="mailto:troyp%40ieee.org">troyp<span>@</span>ieee<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>PerlMagick/Magick.xs (Mogrify): Add decorate argument to Annotate.</li>
+<li>PerlMagick/Magick.xs (Mogrify): Remove reference to undefined
+Annotate argument.</li>
+</ul>
+</blockquote>
+<p>2019-02-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): For planar TIFF, make sure that
+pixels are initialized in case some planes are missing. Fixes
+oss-fuzz 13046 "graphicsmagick/coder_PTIF_fuzzer:
+Use-of-uninitialized-value in DisassociateAlphaRegion". (Credit to
+OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2019-02-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pdf.c (WritePDFImage): Make sure to free 'xref' before
+returning. Similar to ImageMagick CVE-2019-7397 "In ImageMagick
+before 7.0.8-25, several memory leaks exist in WritePDFImage in
+coders/pdf.c.". Thanks to Petr Gajdos for bringing this issue to
+our attention.</li>
+</ul>
+</blockquote>
+<p>2019-02-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c (ReadWPGImage): Use a different way to reallocate
+the colormap which preserves existing content, but also updates
+image->colors and assures that added palette entries are
+initialized.</li>
+<li>coders/png.c (ReadMNGImage): Bound maximum loop iterations by
+subrange as a primitive means of limiting resource consumption.
+This should finally resolve oss-fuzz 12738
+"graphicsmagick/enhance_fuzzer: Out-of-memory in
+graphicsmagick_enhance_fuzzer". (Credit to OSS-Fuzz)</li>
+<li>coders/tiff.c (ReadTIFFImage): Assure that opacity channel is
+initialized in the RGBAStrippedMethod case. Convert
+'CorruptImageError' encountered while testing for more frames to
+'CorruptImageWarning' so we return the frames already read.
+Second try at fixing oss-fuzz 11896
+"graphicsmagick/coder_PTIF_fuzzer: Use-of-uninitialized-value in
+VerticalFilter".</li>
+<li>coders/dpx.c (AttributeToString): Eliminate clang
+"-Wstring-plus-int" warning observed in oss-fuzz build.</li>
+<li>coders/cineon.c (AttributeToString): Eliminate clang
+"-Wstring-plus-int" warning observed in oss-fuzz build.</li>
+</ul>
+</blockquote>
+<p>2019-02-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pict.c (DecodeImage): Avoide a one-byte over-read of
+pixels heap allocation. The cause of the over-read is not yet
+understood. Fixes oss-fuzz 12019
+"graphicsmagick/coder_PICT_fuzzer: Heap-buffer-overflow in
+ExpandBuffer". (Credit to OSS-Fuzz)</li>
+<li>coders/wpg.c (ReadWPGImage): Assure that all colormap entries
+are initialized. Fixes oss-fuzz 12614
+"graphicsmagick/enhance_fuzzer: Use-of-uninitialized-value in
+EnhanceImage". (Credit to OSS-Fuzz)</li>
+<li>coders/tiff.c (ReadTIFFImage): Make sure that image is in
+DirectClass mode and ignore any claimed colormap when the image is
+read using the RGBAStrippedMethod, RGBATiledMethod, or
+RGBAPuntMethod cases. Fixes oss-fuzz 12195
+"graphicsmagick/coder_PTIF_fuzzer: Use-of-uninitialized-value in
+ExportGrayQuantumType". (Credit to OSS-Fuzz)</li>
+<li>coders/miff.c (ReadMIFFImage): Improve pixel buffer calculations
+to defend against overflow. Assure that zlib and bzlib decode the
+expected number of bytes for a pixel row. Fixes oss-fuzz issue
+12448 "graphicsmagick/coder_MIFF_fuzzer:
+Use-of-uninitialized-value in RGBTransformPackets". (Credit to
+OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2019-02-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (ReadMNGImage): Quit processing and report error
+upon failure to insert MNG background layer. Fixes oss-fuzz 12738
+"graphicsmagick/enhance_fuzzer: Out-of-memory in
+graphicsmagick_enhance_fuzzer". (Credit to OSS-Fuzz)</li>
+</ul>
+</blockquote>
+<p>2019-02-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dib.c (ReadDIBImage, WriteDIBImage): Improve buffer-size
+calculations to guard against buffer overflows. The reader
+version was not as complete as it should have been, whereas the
+writer version did not guard against arithmetic overflow at all.</li>
+<li>coders/bmp.c (ReadBMPImage, WriteBMPImage): Improve buffer-size
+calculations to guard against buffer overflows. This is a
+follow-on fix to the previous fix submitted for SourceForge issue
+#582 "heap-buffer-overflow in ReadBMPImage of bmp.c" which is now
+also identified as CVE-2018-20185.</li>
+<li>www/Hg.rst: Updates to reflect current usage and availability.</li>
+<li>www/authors.rst: Promote Troy Patteson to the active contributor
+category.</li>
+</ul>
+</blockquote>
+<p>2019-02-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/version.h.in: Rotate ChangeLog and update copyright
+statements for the new year.</li>
+</ul>
+</blockquote>
+<p>2019-01-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/webp.c (WriteWEBPImage): Patch by Przemysław Sobala to
+support WebP 'use_sharp_yuv' option ("if needed, use sharp (and
+slow) RGB->YUV conversion") via <cite>-define webp:use-sharp-yuv=true</cite>.</li>
+</ul>
+</blockquote>
+<p>2019-01-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (SetNexus): Merge IsNexusInCore()
+implementation code into SetNexus() and add check for if
+cache_info->pixels is null. Fixes SourceForge issue #588 "Bug in
+IsNexusInCore()".</li>
+<li>configure.ac (DcrawExtraOptions): Request TIFF output from dcraw
+if build supports TIFF format in order to obtain more metadata.
+This allows obtaining some metadata from standard TIFF tags
+(e.g. camera make, model, and dcraw version), and any attached ICC
+profile, but not specifically EXIF data since we don't support
+extracting EXIF data from TIFF yet. Inspired by SourceForge issue
+589 "Identify lack of data (no Exif) in RAW formats".</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Changelog.rst</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
+<p>2020-12-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh: Updates in preparation for the 1.3.36 release.</li>
+<li>bootstrap: Fix config.guess and config.sub download URLs.</li>
+</ul>
+</blockquote>
+<p>2020-12-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>design/pixel-cache.dot: Fix reported syntax errors.</li>
+<li>coders/mpc.c (ReadMPCImage): Report correct exception reason.</li>
+<li>coders/miff.c (ReadMIFFImage): Arbitrarily limit the number of
+header keywords to avoid DOS attempts.
+(ReadMIFFImage): Finish updates to use resource-limited memory
+allocator.
+(WriteMIFFImage): Finish updates to use resource-limited memory
+allocator.</li>
+<li>coders/mpc.c (ReadMPCImage): Arbitrarily limit the number of
+header keywords to avoid DOS attempts. Fixes oss-fuzz 28956
+"Timeout - coder_MPC_fuzzer".</li>
+</ul>
+</blockquote>
+<p>2020-12-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (AffineEdge): Use MagickDoubleToLong();</li>
+<li>magick/utility.c (MagickDoubleToLong): New private function to
+convert a 'double' to a 'long' with the minimum amount of harm.</li>
+<li>magick/segment.c (Classify): Remove variables from function
+global scope that don't need outer scope.</li>
+<li>coders/jp2.c: JasPer changed its jas_stream_ops_t callback
+interfaces in releases 2.0.19 and 2.0.20. Revert to providing the
+older interfaces by default, but use a
+MAGICK_JP2_NEW_STREAM_INTERFACE pre-processor definition to
+support selecting the new interfaces. We don't know how to
+usefully tell the JasPer version at compile time! Luckily, using
+the older interfaces only causes a compiler warning rather than a
+run-time issue.</li>
+<li>coders/mac.c (ReadMACImage): Use size_t type for 'ldblk' to
+avoid possible overflow.</li>
+</ul>
+</blockquote>
+<p>2020-12-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update the news to the date December 23, 2020.</li>
+</ul>
+</blockquote>
+<p>2020-12-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/image.c (AllocateImage): Satisfy conditions for
+DestroyImage() as soon as possible and use it for clean-up on
+error. Added more error checks.
+(CloneImage): Satisfy conditions for DestroyImage() as soon as
+possible and use it for clean-up on error. Don't attempt to copy
+colormap if colors is zero. Added more error checks.
+(DestroyImage): Assure that we can destroy a partially-constructed
+Image.</li>
+<li>magick/effect.c (BlurImage): Fix null pointer dereference if
+image failed to be created.
+(DespeckleImage): Fix null pointer dereference if image failed to
+be created.
+(EnhanceImage): Fix null pointer dereference if image failed to be
+created.
+(GaussianBlurImage): Fix null pointer dereference if image failed
+to be created.
+(MedianFilterImage): Fix null pointer dereference if image failed
+to be created.
+(MotionBlurImage): Fix null pointer dereference if image failed to
+be created.
+(ReduceNoiseImage): Fix null pointer dereference if image failed to
+be created.
+(ShadeImage): Fix null pointer dereference if image failed to be
+created.
+(SharpenImage): Fix null pointer dereference if image failed to be
+created.
+(SpreadImage): Fix null pointer dereference if image failed to be
+created.</li>
+</ul>
+</blockquote>
+<p>2020-12-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/jp2.c (BlobWrite): Update Jasper stream OPs callback
+function signatures to exactly match latest jas_stream_ops_t
+definition. This avoids an annoying warning when using Jasper
+2.0.23 but now causes annoying warnings when using 2.0.12 or
+1.900.1. There does not appear to be a useful way to determine the
+Jasper numeric version (only a C string is available) from its
+header files.</li>
+<li>magick/decorate.c (FrameImage): Skip attempting to render top or
+bottom of ornamental border if its height is zero.</li>
+<li>magick/image.c (CloneImage): Set image signature right away in
+case it needs to be destroyed while it is being constructed.</li>
+<li>wand/drawtest.c (main): MagickGetFilename() allocates a new
+string so make sure to free it.</li>
+<li>tests/constitute.c (main): Destroy ExceptionInfo to avoid memory
+leak if an exception was thrown.</li>
+<li>magick/effect.c (EdgeImage): Fix null pointer dereference if
+edge image failed to be created.</li>
+<li>magick/compress.c (HuffmanEncode2Image): Fix error handling
+issues.</li>
+<li>magick/command.c (CompareImageCommand): Fix memory leaks when an
+input image failed to be read.
+(CompositeImageCommand): Fix memory leaks when an input image
+failed to be read.</li>
+<li>coders/fax.c (WriteFAXImage): Fix error handling.</li>
+<li>coders/mpc.c (ReadMPCImage): Use correct deallocator for page
+geometry. Fixes oss-fuzz 28853 "Heap-buffer-overflow READ {*} -
+_MagickReallocateResourceLimitedMemory".</li>
+</ul>
+</blockquote>
+<p>2020-12-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/yuv.c: Use resource-limited memory allocator.</li>
+<li>coders/xwd.c: Use resource-limited memory allocator.</li>
+<li>coders/xpm.c: Use resource-limited memory allocator.</li>
+<li>coders/xcf.c: Use resource-limited memory allocator.</li>
+<li>coders/xbm.c: Use resource-limited memory allocator.</li>
+<li>coders/wpg.c: Use resource-limited memory allocator.</li>
+<li>coders/viff.c: Use resource-limited memory allocator.</li>
+<li>coders/vicar.c: Use resource-limited memory allocator.</li>
+<li>coders/uil.c: Use resource-limited memory allocator.</li>
+<li>coders/txt.c: Use resource-limited memory allocator.</li>
+<li>coders/topol.c: Use resource-limited memory allocator.</li>
+<li>coders/tim.c: Use resource-limited memory allocator.</li>
+<li>coders/tiff.c: Use resource-limited memory allocator.</li>
+<li>coders/tga.c: Use resource-limited memory allocator.</li>
+<li>coders/sun.c: Use resource-limited memory allocator.</li>
+<li>coders/sgi.c: Use resource-limited memory allocator.</li>
+<li>coders/sfw.c: Use resource-limited memory allocator.</li>
+<li>coders/rle.c: Use resource-limited memory allocator.</li>
+<li>coders/rla.c: Use resource-limited memory allocator.</li>
+<li>coders/rgb.c: Use resource-limited memory allocator.</li>
+<li>coders/psd.c: Use resource-limited memory allocator.</li>
+<li>coders/ps3.c: Use resource-limited memory allocator.</li>
+<li>coders/ps2.c: Use resource-limited memory allocator.</li>
+<li>coders/pnm.c: Use resource-limited memory allocator.</li>
+<li>coders/pdf.c: Use resource-limited memory allocator.</li>
+<li>coders/pdb.c: Use resource-limited memory allocator.</li>
+<li>coders/pcl.c: Use resource-limited memory allocator.</li>
+<li>coders/pcd.c: Use resource-limited memory allocator.</li>
+<li>coders/palm.c: Use resource-limited memory allocator.</li>
+<li>coders/mtv.c: Use resource-limited memory allocator.</li>
+<li>coders/mpc.c: Use resource-limited memory allocator.</li>
+<li>coders/meta.c: Use resource-limited memory allocator.</li>
+<li>coders/map.c: Use resource-limited memory allocator.</li>
+<li>coders/jpeg.c: Use resource-limited memory allocator.</li>
+<li>coders/jp2.c: Use resource-limited memory allocator.</li>
+<li>coders/jnx.c: Use resource-limited memory allocator.</li>
+<li>coders/icon.c: Use resource-limited memory allocator.</li>
+<li>coders/hrz.c: Use resource-limited memory allocator.</li>
+<li>coders/histogram.c: Use resource-limited memory allocator.</li>
+<li>coders/gray.c: Use resource-limited memory allocator.</li>
+<li>coders/fpx.c: Use resource-limited memory allocator.</li>
+<li>coders/emf.c: Use resource-limited memory allocator.</li>
+<li>coders/dpx.c: Use resource-limited memory allocator.</li>
+<li>coders/dps.c: Use resource-limited memory allocator.</li>
+<li>coders/dcm.c: Use resource-limited memory allocator.</li>
+<li>coders/cut.c: Use resource-limited memory allocator.</li>
+<li>coders/cmyk.c: Use resource-limited memory allocator.</li>
+<li>coders/cineon.c: Use resource-limited memory allocator.</li>
+<li>coders/avs.c: Use resource-limited memory allocator.</li>
+<li>coders/art.c: Use resource-limited memory allocator.</li>
+<li>coders/pcx.c: Use resource-limited memory allocator.</li>
+<li>coders/mac.c: Use resource-limited memory allocator.</li>
+<li>coders/pict.c: Use resource-limited memory allocator.</li>
+<li>magick/memory.c (_MagickReallocateResourceLimitedMemory): Add a
+'clear' parameter which indicates that freshly allocated memory
+should be zeroed. Added "Cleared" versions of the private managed
+memory macros and updated all managed memory macros to exclusively
+use this function.</li>
+</ul>
+</blockquote>
+<p>2020-12-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Update Automake to 1.16.3 and bootstrap to pick up latest
+config.guess and config.sub.</li>
+</ul>
+</blockquote>
+<p>2020-12-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (ImportRLEPixels): Change from C assertion to
+exception report. Fixes oss-fuzz 28703 "ASSERT · ((quantum_type
+== IndexQuantum) && (image->storage_class ...".
+(ReadMIFFImage): Read Gray DirectClass image as PseudoClass so it
+has a colormap, and we have a RLE decode implementation for it.</li>
+</ul>
+</blockquote>
+<p>2020-12-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/paint.c (OpaqueImage): Changing the image storage class
+is not required.</li>
+</ul>
+</blockquote>
+<p>2020-12-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/paint.c (OpaqueImage): Assure that image type is promoted
+as required based on fill color. Fixes unexpected results
+discovered by Stuart McDonagh and reported via the
+graphicsmagick-help mailing list on December 14, 2020.</li>
+</ul>
+</blockquote>
+<p>2020-12-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Set '[MVG]' image attribute at
+appropriate places outside of DrawImage() since DrawImage()
+sometimes recurses into itself, trashing the image attribute. One
+example of recursion is in the text annotation code.</li>
+<li>coders/svg.c (ReadSVGImage): Properly support 'ping' mode so
+'identify' works as expected.</li>
+<li>magick/render.c (InsertAttributeIntoInputStream): Provide a more
+useful diagnostic for when a "use" or "class" argument id is not
+defined.</li>
+</ul>
+</blockquote>
+<p>2020-12-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Fix regression when parsing "mask"
+which was added by changeset 16305:f33a0fb3d8e4 on July 15, 2020
+since the last formal release. This impacts MVG and SVG.</li>
+</ul>
+</blockquote>
+<p>2020-12-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/INSTALL-unix.rst: Document the '--disable-compressed-files'
+configure option, which was added on July 15th.</li>
+</ul>
+</blockquote>
+<p>2020-12-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magic.c: Don't send files which test positive for PCL to
+the HPGL delegate, which is normally 'hp2xx'. Fixes SourceForge
+bug 607 "Slow to convert HP PCL printer data".</li>
+</ul>
+</blockquote>
+<p>2020-12-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Use unique image attribute space
+for MVG symbols. Fixes oss-fuzz 28111 "Timeout -
+coder_MVG_fuzzer", oss-fuzz 28170 "Stack-overflow - DrawImage",
+and oss-fuzz 28292 "Integer-overflow - DrawPolygonPrimitive".</li>
+</ul>
+</blockquote>
+<p>2020-12-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Verify that affine scaling factors
+are not zero. Fixes oss-fuzz 28293 "Divide-by-zero -
+InverseAffineMatrix".
+(DrawPolygonPrimitive): Thread error status check was at wrong
+scope, resulting in code executing when it should have quit.</li>
+</ul>
+</blockquote>
+<p>2020-12-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick_types.h.in: Stop trying to define PTRDIFF_MAX.</li>
+</ul>
+</blockquote>
+<p>2020-11-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick_types.h.in: Provide PTRDIFF_MAX for Visual Studio
+if it is missing.</li>
+<li>fuzzing/oss-fuzz-build.sh: Disable old JPEG support in libtiff.</li>
+<li>coders/mat.c (ReadMATImage): Use resource-limited memory
+allocator.
+(WriteMATLABImage): Use resource-limited memory allocator.</li>
+</ul>
+</blockquote>
+<p>2020-11-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update the news to the date November 28, 2020.</li>
+<li>coders/png.c (ReadOneJNGImage): Verify and enforce
+Alpha_compression_method values. Request that color and alpha
+decoders return just one frame. Force decoder format to disable
+auto-detection. Assume that coder messed up and might have
+returned more than one frame. Fixes oss-fuzz 28013 "Indirect-leak
+. MagickMalloc".</li>
+<li>magick/memory-private.h (MagickReallocateResourceLimitedMemory):
+Fix typo in macro definition which resulted in a memory
+reallocation leak!</li>
+<li>Magick++/lib/Magick++/Drawable.h: Decided to continue using
+std::unary_function if C++ version is less than C++'17 since
+otherwise it may be changing an interface.</li>
+</ul>
+</blockquote>
+<p>2020-11-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/gif.c (ReadGIFImage): Use resource-limited memory
+allocator when reading the comment extension.</li>
+<li>Magick++/lib/Magick++/Drawable.h: Remove inheritance from
+std::unary_function, which was removed in C++'17.</li>
+<li>coders/webp.c (ReadWEBPImage): Use resource-limited memory
+allocator.
+(WriteWEBPImage): Use resource-limited memory allocator.</li>
+<li>coders/jbig.c (WriteJBIGImage): Use resource-limited memory
+allocator.</li>
+<li>coders/fits.c (ReadFITSImage): Use resource-limited memory
+allocator.
+(WriteFITSImage): Use resource-limited memory allocator.</li>
+<li>coders/dib.c (ReadDIBImage): Use resource-limited memory
+allocator.
+(WriteDIBImage): Use resource-limited memory allocator.</li>
+<li>coders/bmp.c (ReadBMPImage): Use resource-limited memory
+allocator.
+(WriteBMPImage): Use resource-limited memory allocator.</li>
+</ul>
+</blockquote>
+<p>2020-11-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Improve RGBATiledMethod progress
+monitor so it reports more steps.
+(ReadTIFFImage): Improve TiledMethod progress monitor so it
+reports more steps.</li>
+<li>fuzzing/utils.cc (class MagickState): Enable tracing of
+exception events in order to help discover the origin of errors.
+If too much output comes out, then this will be removed.</li>
+<li>magick/render.c (ConvertPathToPolygon): Attempt to fix leak of
+'points' on memory allocation failure.</li>
+</ul>
+</blockquote>
+<p>2020-11-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (ConvertPathToPolygon): Make sure not to leak
+points from added Edge. Fixes oss-fuzz 27608 "Direct-leak in
+_MagickReallocateResourceLimitedMemory".
+(DrawDashPolygon): Place an aribrary limit on stroke dash polygon
+unit maximum length in order to avoid possibly rendering
+"forever". Addresses oss-fuzz 24236 "Timeout in
+coder_MVG_fuzzer".</li>
+</ul>
+</blockquote>
+<p>2020-11-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawPolygonPrimitive): Try to minimize the
+impact of too many threads due to replicated data until such time
+as the data structures can be re-designed to directly support
+threading.</li>
+</ul>
+</blockquote>
+<p>2020-11-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/Hg.rst: Describe how to clone the repository from
+SourceForge using the ssh protocol rather than https.</li>
+<li>coders/ps.c (WritePSImage): Fix problem when writing PseudoClass
+image with a colormap larger than two entries as bilevel.
+Previous implementation was assuming that the colormap would only
+include two entries for a monochrome image, but many entries may
+exist in the colormap which were never used. Fixes SourceForge
+issue #635 "gm convert failure from .pgm to .eps".</li>
+</ul>
+</blockquote>
+<p>2020-11-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>fuzzing/utils.cc (class MagickState): Set DiskResource limit to
+zero so that pixel cache won't spill over to using temporary
+files.</li>
+</ul>
+</blockquote>
+<p>2020-11-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update the news to the date November 16, 2020.</li>
+</ul>
+</blockquote>
+<p>2020-11-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/svg.c (ReadSVGImage): Fix memory leak due to CDATA block,
+and some other possible small leaks.</li>
+<li>magick/magick.c (InitializeMagickEx): Set C pre-processor
+definition USE_GLIBC_MTRACE to 1 in order to enable Linux mtrace
+support.</li>
+<li>magick/render.c (ConvertPathToPolygon): Fix memory leak upon
+memory reallocation failure. Addresses oss-fuzz 27351
+"Direct-leak in _MagickReallocateResourceLimitedMemory".</li>
+<li>magick/memory.c (_MagickReallocateResourceLimitedMemory): Return
+pointer to the allocation similar to realloc() and do not
+automatically free existing memory upon allocation failure.</li>
+</ul>
+</blockquote>
+<p>2020-11-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>common.shi.in: Apply some resource limits while running the test
+suite.
+(Q8_MEMORY_LIMIT): Set the test suite memory limit to 128MB for
+Q8, or 256MB for Q16, or 512MB for the Q32 build.
+(MAGICK_LIMIT_DISK): Set the test suite disk space limit to 0 to
+avoid spilling over into disk files when the memory limit runs
+out.</li>
+<li>coders/miff.c (WriteMIFFImage): Update to use resource-limit
+respecting memory allocators.</li>
+</ul>
+</blockquote>
+<p>2020-11-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/miff.c (ReadMIFFImage): Update to use resource-limit
+respecting memory allocators.</li>
+<li>magick/render.c (DrawImage): Update to use resource-limit
+respecting memory allocators.</li>
+<li>magick/memory.c (_MagickReallocateResourceLimitedMemory): Add
+new private interfaces for allocating private memory while
+respecting resource limits.</li>
+</ul>
+</blockquote>
+<p>2020-10-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40bobsdell">bfriesen<span>@</span>bobsdell</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Reject pattern image with a
+dimension of zero. Fixes oss-fuzz issue 26382
+"graphicsmagick:coder_MVG_fuzzer: Floating-point-exception in
+DrawPrimitive".</li>
+</ul>
+</blockquote>
+<p>2020-10-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (ConstituteImage): Set image depth
+appropriately based on the storage size specified by StorageType
+and QuantumDepth.</li>
+</ul>
+</blockquote>
+<p>2020-10-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawPrimitive): Use DestroyImageList() to
+destroy composite_image since it may be a list. Fixes oss-fuzz
+25247 "Indirect-leak in MagickMalloc".
+(DrawPrimitive): Add ImageInfo properties to request only
+returning the first frame if the in-line image is a list. Also,
+add a missing DestroyImageList() request if multiple-frames were
+returned.</li>
+<li>magick/transform.c (TransformImage): Use ReplaceImageInList()
+replace transformed image in list.</li>
+<li>magick/list.c (ReplaceImageInList): Remove previous and next
+references from removed image before destroying it.</li>
+<li>magick/render.c (DrawClipPath): Remove break statement so that
+added clip-mask image is initialized properly and rendered-on as
+expected. Thanks to László Böszörményi for reporting this problem
+prior to release.</li>
+</ul>
+</blockquote>
+<p>2020-10-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac (AC_PROG_CC_STDC): AC_PROG_CC_STDC is no longer
+required since AC_PROG_CC now provides its useful function.
+AC_PROG_CC_STDC is marked as obsolete after Autoconf 2.69.
+Quote all arguments to m4 macros.</li>
+</ul>
+</blockquote>
+<p>2020-09-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Update syntax to avoid using deprecated syntax
+according to Autoconf 2.69.</li>
+</ul>
+</blockquote>
+<p>2020-09-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/webp.c (ReadWEBPImage): Use SetImageProfile() rather than
+AppendImageProfile().</li>
+</ul>
+</blockquote>
+<p>2020-09-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/magick_wand.c (MagickSetSamplingFactors): Correct
+formatting of sampling factors string. Fixes SourceForge issue
+633 "MagickSetSamplingFactors() API mismatch - comma separated
+values instead of 1x1 ".</li>
+</ul>
+</blockquote>
+<p>2020-09-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawPrimitive): Improve error checking related
+to ImagePrimitive.</li>
+<li>magick/resize.c (ResizeImage): If CloneImage() of resize_image
+to source_image fails then free source_image allocation before
+returning in order to prevent memory leak.</li>
+<li>magick/image.c (CloneImage): Free clone_image allocation if
+ImgExtra allocation fails in order to prevent memory leak. Fixes
+oss-fuzz 25342 "Indirect-leak in MagickMalloc".
+(SetImageOpacity): SetImageOpacity() now returns error status
+since it is possible for it to fail.</li>
+</ul>
+</blockquote>
+<p>2020-09-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Ignore corrupt whitepoint and
+primary chromaticities tags. Fixes oss-fuzz issue 25507
+"Divide-by-zero in DoubleToRational". The divide by zero is
+actually in libtiff, but the bad values from the input file were
+propagated through GraphicsMagick.</li>
+</ul>
+</blockquote>
+<p>2020-09-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/analyze.c (GetImageBoundingBox): Use solution proposed by
+Troy Patteson to solve SourceForge issue 345 "MagickTrimImage with
+extreme fuzz can produce image with negative width".</li>
+</ul>
+</blockquote>
+<p>2020-08-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (ReadTIFFImage): Apply the same resource limits to
+TIFF tile sizes as apply to the image itself. Fixes oss-fuzz
+issues 24523 "Timeout in coder_TIFF_fuzzer" and 24810 "Timeout in
+coder_PTIF_fuzzer".</li>
+</ul>
+</blockquote>
+<p>2020-08-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Add --without-gdi32 configure option to support
+disabling use of the Microsoft Windows gdi32 library if it is not
+wanted.</li>
+</ul>
+</blockquote>
+<p>2020-08-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Remove the assumption that a native Windows build
+means that Ghostscript may be available so that MinGW tests which
+depend on Ghostcript are attributed proper XFAIL status by the
+test suite.</li>
+</ul>
+</blockquote>
+<p>2020-08-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (MagickCondSignal): Explicitly initialize 'oact'
+prior to calling sigaction() in order to attempt to surmount
+apparent oss-fuzz framework issue.</li>
+</ul>
+</blockquote>
+<p>2020-08-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/delegate.c, magick/magick.c, magick/nt_base.c: Fix
+compilation errors under MinGW when Ghostscript support is
+disabled.</li>
+</ul>
+</blockquote>
+<p>2020-08-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/nt_base.c: Fix compilation issue noticed under MinGW.</li>
+<li>magick/render.c (DrawImage): Handle the case that
+ExtractTokensBetweenPushPop() can return NULL. Fixes oss-fuzz
+24659 "Null-dereference READ in DrawImage".</li>
+<li>magick/magick.c (MagickCondSignal): Re-implement to handle the
+case where a new-style 'siginfo' signal handler was previously
+registered, as well as the legacy type. This may address oss-fuzz
+24690 "Use-of-uninitialized-value in MagickCondSignal".</li>
+</ul>
+</blockquote>
+<p>2020-07-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>wand/drawtest.c: Use structured error handling and report all
+output to stderr so it does not screw up TAP tests.</li>
+<li>magick/render.c (DTOLONG_MIN): Correct 32-bit definition of
+DTOLONG_MIN.</li>
+<li>wand/wandtests.tap: Wand drawtest requires FreeType.</li>
+<li>NEWS.txt: Update with changes up to 2020-07-26.</li>
+<li>VisualMagick/magick/magick_config.h.in (HasGS): Default HasGS to
+enabled.</li>
+<li>configure.ac: Add a --without-gs configure option to disable
+reading PS, EPS, and PDF formats via an external Ghostscript
+delegate program. This is intended as an absolute security
+measure for sites that want to be assured to avoid executing
+Ghostscript even though it is installed on the system. Removal of
+PS and PDF reading support breaks reading other formats which are
+handled by executing an external program to first convert to PS or
+PDF formats.</li>
+<li>magick/delegate.c (InvokePostscriptDelegate): Use HasGS to
+enable use of the Ghostscript delegate. Change the existing
+legacy HasGS ifdefs to HasGSLIB.</li>
+</ul>
+</blockquote>
+<p>2020-07-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Fix compilation error when
+COMPRESSION_WEBP is not defined.</li>
+</ul>
+</blockquote>
+<p>2020-07-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>configure.ac: Fix enableval syntax for
+--disable-compressed-files.</li>
+</ul>
+</blockquote>
+<p>2020-07-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (CompareImageCommand): Merge changeset by
+谢致邦 (XIE Zhibang) which adds 'matte' support to the compare
+command. However, substantially reduce the amount of changes
+by avoiding adding a new public function. Documentation
+regarding how 'compare' uses this option is also added.</li>
+<li>magick/command.c: Merge changeset by谢致邦 (XIE Zhibang)
+regarding Some duplicate "verbose" should be "version".</li>
+<li>configure.ac, magick/blob.c: Merge changeset by Przemysław
+Sobala regarding "Configure: add --with(out)-compressed-files
+option". The configure option was changed to
+--disable-compressed-files during the merge since it is more
+appropriate.</li>
+</ul>
+</blockquote>
+<p>2020-07-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update with changes up to 2020-07-15.</li>
+<li>magick/render.c (DrawImage): Improve error handling so errors
+are returned when they should be. Fixes oss-fuzz 24117
+"Stack-overflow in DrawImage" and oss-fuzz 24126 "Timeout in
+coder_MVG_fuzzer". Restore the original behavior of
+DrawClipPath() when there is no matching clip-path attribute.</li>
+</ul>
+</blockquote>
+<p>2020-07-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update with changes up to 2020-07-12.</li>
+</ul>
+</blockquote>
+<p>2020-07-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/xwindow.c (MagickXVisualColormapSize): Fix UBSAN integer
+overflow warning.</li>
+<li>magick/render.c (DrawClipPath): Report only a warning if there
+is no clip mask.
+(ExtractTokensBetweenPushPop): Verify that the expected/required
+pop statement is indeed found. Fixes oss-fuzz 23498 "Timeout in
+coder_MVG_fuzzer".</li>
+</ul>
+</blockquote>
+<p>2020-06-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/constitute.c (ReadImage): Improve error handling related
+to ImageToFile().</li>
+<li>magick/image.c (SetImageInfo): Improve error handling related to
+ImageToFile().</li>
+<li>coders/mat.c: Check MagickFindRawImageMinMax() return status.</li>
+<li>magick/constitute.c (MagickFindRawImageMinMax): Verify that the
+original seek position was restored.</li>
+</ul>
+</blockquote>
+<p>2020-06-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Apply stricter range limits when
+converting a double to a long in order to avoid integer overflow.
+Fixes oss-fuzz 23304 "Integer-overflow in DrawImage".
+(DrawClipPath): If there is no matching clip-path attribute then
+return an informative error. Fixes oss-fuzz 23187 "Stack-overflow
+in DrawImage" which is actually a case of DrawImage() /
+DrawClipPath() recursion.</li>
+</ul>
+</blockquote>
+<p>2020-06-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c (UnpackWPGRaster): Fix oss-fuzz 23042
+"Heap-buffer-overflow in ImportGrayQuantumType" and oss-fuzz
+"Heap-buffer-overflow in InsertRow" which are both from the same
+cause.</li>
+</ul>
+</blockquote>
+<p>2020-06-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (ClipCacheNexus): Change x and y variables
+to unsigned type.</li>
+</ul>
+</blockquote>
+<p>2020-05-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): WebP compression only supports a
+depth of 8. Fixes oss-fuzz 22560 "Use-of-uninitialized-value in
+GammaToLinear".</li>
+</ul>
+</blockquote>
+<p>2020-05-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c (ReadWPGImage): Terminate reading when a pixel
+cache resource limit is hit rather than moving on to heap buffer
+overflow. Fixes oss-fuzz 20045, 20318, 21956</li>
+<li>coders/png.c (ReadMNGImage): If the image width is 1, then X
+magnification is done by by simple pixel replication. If the
+image height is 1, then Y magnification is done by simple pixel
+replication. Fixes oss-fuzz issue 19025 "Heap-buffer-overflow in
+ReadMNGImage" and oss-fuzz issue 19026 "ASSERT: yy < (long)
+large_image->rows". It appears that CERT has assigned
+CVE-2020-12672 for oss-fuzz issue 19025. Note that the heap
+overwrite is only one byte.</li>
+</ul>
+</blockquote>
+<p>2020-05-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update with changes up to 2020-04-23.</li>
+</ul>
+</blockquote>
+<p>2020-04-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadDPXImage): Support dpx:swap-samples-read
+define which behaves similar to dpx:swap-samples, but is only
+applied when reading. This provides for use when there is both
+reading and writing in the same operation.
+(WriteDPXImage): Support dpx:swap-samples-write define which
+behaves similar to dpx:swap-samples, but is only applied when
+writing. This provides for use when there is both reading and
+writing in the same operation.</li>
+</ul>
+</blockquote>
+<p>2020-04-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick: Fix remaining GCC 10 warnings.</li>
+</ul>
+</blockquote>
+<p>2020-04-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/transform.c (GetImageMosaicDimensions): Mark function as pure.</li>
+<li>magick/effect.c (GetNonpeakMedianList): Mark function as pure.</li>
+<li>coders/fits.c (InsertRowHDU): Fix scary-sounding GCC 10 warning,
+which is actually benign.</li>
+<li>config/config.sub: Update to latest config.sub</li>
+<li>config/config.guess: Update to latest config.guess.</li>
+<li>Makefile.am: Update to Automake 1.16.2</li>
+</ul>
+</blockquote>
+<p>2020-04-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (ReadRowSamples): Simplify 10-bit packed decoding.
+(WriteRowSamples): Simplify 10-bit packed encoding.</li>
+<li>coders/locale.c (ReadConfigureFile): Ignore comment element if
+it was not found or is too short.</li>
+<li>magick/pixel_cache.c (ReadCacheIndexes): If SetNexus() has
+previously failed to allocate the staging buffer and thus reported
+an exception to the user, then ReadCacheIndexes() should report an
+error rather than blundering into copying indexes data to a null
+pointer.</li>
+<li>magick/effect.c (AdaptiveThresholdImage): Assure that we don't
+attempt to write to output pixels if they have not been selected
+yet.</li>
+<li>magick/utility.c (ExpandFilenames): Properly handle NULL
+filelist and NULL filelist entries.
+(GetGeometry): Assure that there is no one-character stack read
+overflow when reading the geometry buffer.</li>
+</ul>
+</blockquote>
+<p>2020-03-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>fuzzing/oss-fuzz-build.sh: Restore xz to oss-fuzz build due to
+build problems getting worked out.</li>
+</ul>
+</blockquote>
+<p>2020-03-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>fuzzing/oss-fuzz-build.sh (MAGICK_LIBS): Remove mention of
+liblzma.a in the oss-fuzz build until its build problems get
+worked out.</li>
+</ul>
+</blockquote>
+<p>2020-03-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>fuzzing/oss-fuzz-build.sh: Skip building xz in the oss-fuzz
+build until its build problems get worked out.</li>
+</ul>
+</blockquote>
+<p>2020-03-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/log.c (InitializeLogInfoPost): Don't load log.mgk if
+logging is already configured to use MethodOutput.</li>
+</ul>
+</blockquote>
+<p>2020-03-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/log.c (InitializeLogInfoPost): Mark that logging is
+configured, regardless of if "log.mgk" was discovered.</li>
+</ul>
+</blockquote>
+<p>2020-03-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagick/magick/magick_config.h.in: ProvideDllMain is now
+disabled by default since it causes InitializeMagick() to be
+invoked prior to when the program's main() routine is called,
+thereby blocking configuration activities or use of
+InitializeMagickEx(). With this change it is even more imperative
+that InitializeMagick() be explicitly invoked by all programs
+using GraphicsMagick.</li>
+<li>magick/log.c (LogMagickEventList): Always use/respect the
+configured log format as might be obtained from "log.mgk" or
+SetLogDefaultFormat().</li>
+<li>magick/utility.c (MagickFormatString): Return the size of the
+formatted string.
+(MagickFormatStringList): Return the size of the formatted string.
+(FormatString): Return the size of the formatted string.
+(FormatStringList): Return the size of the formatted string.</li>
+</ul>
+</blockquote>
+<p>2020-03-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/api/types.rst: Improved types documentation and added more
+hyperlinks.</li>
+<li>scripts/format_c_api_doc.py: Add hyperlinks for 'LogMethod' and
+'LogOutputType' type documentation.</li>
+<li>Magick++/lib/Image.cpp (SetLogDefaultEventType): New C++ function to
+forward to C interface.
+(SetLogDefaultGenerations): New C++ function to forward to C
+interface.
+(SetLogDefaultLimit): New C++ function to forward to C interface.
+(SetLogDefaultFormat(): New C++ function to forward to C
+interface.
+(SetLogDefaultLogMethod): New C++ function to forward to C
+interface.
+(SetLogDefaultFileName): New C++ function to forward to C
+interface.
+(SetLogDefaultOutputType): New C++ function to forward to C
+interface.</li>
+<li>magick/log.c (SetLogDefaultEventType): New function to support
+setting the default set of events which will result in a log
+event.
+(SetLogDefaultGenerations): New function to specify the maximum
+number of log files maintain before circulating back to overwrite
+the first name.
+(SetLogDefaultLimit): New function to specify the maximum number
+of logging events which may occur before creating a new log file.
+(SetLogDefaultLogMethod): New function to provide a call-back
+function to be invoked for each log event when the logging method
+type is MethodOutput.
+(SetLogDefaultOutputType): New function to set the logging output
+destination.
+(SetLogDefaultFormat): New function to provide the format of the
+logging output.
+(SetLogDefaultFileName): New function to provide the file name,
+or file path, to be written to for each log event.
+(InitializeLogInfo): If a default logging callback was provided
+via SetLogDefaultLogMethod() then skip searching for "log.mgk".
+In this case it is assumed that the API user has already changed
+any other logging default which would have been updated by
+"log.mgk" so it would be harmful to search for it, or read from
+it.</li>
+</ul>
+</blockquote>
+<p>2020-03-10 Troy Patteson <<a class="reference external" href="mailto:troyp%40ieee.org">troyp<span>@</span>ieee<span>.</span>org</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/png.c (WriteOnePNGImage): Don't skip optional Exif
+identifier code if it isn't present.</li>
+</ul>
+</blockquote>
+<p>2020-03-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/pixel_cache.c (ModifyCache): Destroy clone_image.cache if
+ClonePixelCache() reports failure. Fixes oss-fuzz 20871
+"graphicsmagick:coder_MVG_fuzzer: Direct-leak in
+MagickMallocAligned".</li>
+<li>magick/log.c (LogMagickEventList): Prepare source module base
+name more efficiently. Move MethodOutput implementation to the
+front so it is not filtered by other active blocks.
+(LogMagickEventList): Cache broken-down time structure in LogInfo
+and recompute only when needed.</li>
+</ul>
+</blockquote>
+<p>2020-03-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/resize.c (HorizontalFilter): Improve tracing.
+(VerticalFilter): Improve tracing.
+(ResizeImage): Improve tracing.</li>
+<li>www/api/api.rst: Add functions from log.c and render.c.</li>
+<li>magick/log.c (DestroyLogInfo): DestroyLogInfo is no longer
+marked MagickExport.</li>
+</ul>
+</blockquote>
+<p>2020-03-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/api.h: Add "magick/enum_strings.h" to API headers.
+Requested by Przemysław Sobala via posting to the
+graphicsmagick-help mailing list on 2020-02-27.</li>
+<li>scripts/html_fragments.py: Automatically generate HTML footer
+content and include commented HTML fragment which may be
+substituted with SF tracker for SourceForge web site.</li>
+</ul>
+</blockquote>
<p>2020-02-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
<blockquote>
<ul class="simple">
-<li>version.sh: Updates in preparation for the 1.3.35 release.
-Merge changes for 1.3.35 into GraphicsMagick-1_3 branch.</li>
+<li>version.sh: Updates in preparation for the 1.3.35 release.</li>
<li>www/INSTALL-windows.rst: Update Windows installation and build
documentation.</li>
</ul>
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2020-02-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>version.sh: Updates in preparation for the 1.3.35 release.
+Merge changes for 1.3.35 into GraphicsMagick-1_3 branch.</li>
+<li>www/INSTALL-windows.rst: Update Windows installation and build
+documentation.</li>
+</ul>
+</blockquote>
+<p>2020-02-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>NEWS.txt: Update with News since previous release.</li>
+<li>magick/magick.c (InitializeMagickSignalHandlers): This private
+implementation function is now a static function as it should have
+been.
+(InitializeMagickEx): New function which may be used in place of
+InitializeMagick() to initialize GraphicsMagick. This
+initialization function returns an error status value, may update
+a passed ExceptionInfo structure with error information, and
+provides an options parameter which supports simple bit-flags to
+tailor initialization. The signal handler registrations are
+skipped if the MAGICK_OPT_NO_SIGNAL_HANDER flag is set in the
+options.</li>
+</ul>
+</blockquote>
+<p>2020-02-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/magick.c (MagickToMime): Add a MIME translation for
+"jpg". Issue reported by Pro Turm.</li>
+</ul>
+</blockquote>
+<p>2020-02-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>www/INSTALL-windows.rst: Add quoting to avoid losing backslashes
+in Windows paths.</li>
+</ul>
+</blockquote>
+<p>2020-02-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/common.h: Add missing unsupported handling for some
+recently added GCC/Clang attributes.</li>
+<li>magick/: Move all remaining private implementation code in
+public headers which is guarded by MAGICK_IMPLEMENTATION into
+private headers, which are never installed.</li>
+</ul>
+</blockquote>
+<p>2020-02-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/tiff.c (WriteTIFFImage): Evidence suggests that large
+strip sizes improve performance by reducing the number of I/Os.
+The defaults suggested by libtiff are way to small for today's
+images and computers. Default TIFF strip sizes so that each
+uncompressed strip consumes up to 1MiB of memory, or 4MiB for FAX
+oriented codecs, or based on LZMA compression level when using
+LZMA compression. The default size may be adjusted via the
+TIFF_BYTES_PER_STRIP preprocessor definition.</li>
+</ul>
+</blockquote>
+<p>2020-02-09 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c ZeroFillMissing data will never been triggered when
+y>=image->rows.</li>
+</ul>
+</blockquote>
+<p>2020-02-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Limit pattern dimensions by
+LONG_MAX rather than ULONG_MAX since this seems more likely to
+avoid arithmetic overflows later on.</li>
+</ul>
+</blockquote>
+<p>2020-02-09 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/wpg.c Check for exception in image.</li>
+</ul>
+</blockquote>
+<p>2020-02-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/command.c (VersionCommand): Add Google perftools tcmalloc
+to the available feature support.</li>
+<li>www/INSTALL-unix.rst: Include some information about building
+with MSYS2.</li>
+<li>coders/png.c (ReadOnePNGImage): Eliminate compilation warnings
+about signed/unsigned comparisons.</li>
+<li>magick/image.c: Remove private global string constants, and one
+private global unsigned long constant, from the library ABI.
+Since the global constants were declared via a private header and
+only used within the GraphicsMagick build, removing these does not
+impact the public ABI. The globals removed are BackgroundColor,
+BorderColor, DefaultTileFrame, DefaultTileGeometry,
+DefaultTileLabel, ForegroundColor, HighlightColor, MatteColor,
+PSDensityGeometry, PSPageGeometry, and DefaultCompressionQuality.</li>
+</ul>
+</blockquote>
+<p>2020-02-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Apply draconian pattern
+specification offset and dimension validations. Hopefully there
+is no impact to usability. If so please report it as a bug.
+Fixes oss-fuzz 20586 "graphicsmagick:coder_MVG_fuzzer:
+Integer-overflow in DrawPolygonPrimitive".</li>
+<li>coders/svg.c (ReadSVGImage): Fix dereference of NULL pointer
+when stopping image timer.</li>
+</ul>
+</blockquote>
+<p>2020-02-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pict.c (DecodeImage): Allocate extra scanline memory to
+allow small RLE overrun. Fixes oss-fuzz 20271
+"graphicsmagick:coder_PICT_fuzzer: Heap-buffer-overflow in
+ExpandBuffer" and 20272 "graphicsmagick:coder_PICT_fuzzer:
+Heap-buffer-overflow in DecodeImage".</li>
+<li>PerlMagick/t/wmf/read.t: Update WMF reference images. Relax
+test requirements for ski.wmf.</li>
+<li>locale/C.mgk: Correct error message associated with
+"UnsupportedNumberOfRows". Patch was submitted by Thorsten
+Alteholz via private email on 2020-02-05.</li>
+</ul>
+</blockquote>
+<p>2020-02-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/topol.c: Include magick/magick_endian.h.</li>
+</ul>
+</blockquote>
+<p>2020-02-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick, coders, wand: Added copious casts to avoid possible
+integer overflows in the Microsoft Windows 64-bit build, where
+sizeof(long) < sizeof(size_t).</li>
+</ul>
+</blockquote>
+<p>2020-01-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.h ("PrimitiveInfo"): Change PrimitiveInfo
+coordinates from type 'unsigned long' to 'size_t'.</li>
+</ul>
+</blockquote>
+<p>2020-01-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/gradient.c (GradientImage): Warnings reduction, plus note
+about incorrect diagonal gradients math.</li>
+</ul>
+</blockquote>
+<p>2020-01-20 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagickconfigureconfigure.cpp Option /arch:SSE2 is
+available only for 32 bit build.</li>
+</ul>
+</blockquote>
+<p>2020-01-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pcd.c (DecodeImage): Assure that pcd_length gets
+initialized with something.</li>
+<li>Magick++/lib/Options.cpp (strokeDashArray): Add needless check
+for _drawInfo->dash_pattern null in order to make static analysis
+happy.</li>
+<li>magick/render.c (DestroyPolygonInfo): Make sure to not
+dereference a null edges pointer.</li>
+<li>coders/pdb.c (WritePDBImage): Make sure that null comment value
+is not dereferenced.</li>
+<li>coders/vid.c (ReadVIDImage): Make sure that
+ThrowVIDReaderException does not dereference a null pointer.</li>
+<li>magick/quantize.c (ClassifyImageColors): Fix error handling so a
+null pointer won't be consumed after a memory allocation failure.
+Changed the location of some variable declarations and added some
+comments.</li>
+</ul>
+</blockquote>
+<p>2020-01-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/caption.c (ReadCAPTIONImage): Assure that metrics are
+initialized.</li>
+<li>magick/pixel_cache.c (DestroyThreadViewSet): Check if views
+pointer is not null before destroying views.</li>
+<li>coders/xpm.c (ReadXPMImage): Properly detect the case where the
+XPM colormap is not fully initialized.</li>
+<li>coders/pict.c (DecodeImage): Fix heap buffer over-reads. Fixes
+oss-fuzz issue 20053 "graphicsmagick:coder_PICT_fuzzer:
+Heap-buffer-overflow in ExpandBuffer" and oss-fuzz issue 20048
+"graphicsmagick:coder_PICT_fuzzer: Heap-buffer-overflow in
+DecodeImage". Both of these oss-fuzz issues appeared due to
+recent changes since the last release.</li>
+<li>coders/meta.c (WriteMETAImage): Assure that 'iptc_offset' is
+initialized and valid.</li>
+<li>coders/jpeg.c (ReadJPEGImage): Assure that evaluating the
+embedded profile length does not suffer from undefined behavior.</li>
+</ul>
+</blockquote>
+<p>2020-01-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/render.c (DrawImage): Add more MVG parser validations.</li>
+</ul>
+</blockquote>
+<p>2020-01-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/histogram.c (WriteHISTOGRAMImage): Histogram coder was
+relying on the previously removed '@' file inclusion feature to
+insert the histogram comment text. Write a PseudoClass MIFF image
+with RLE compression. Fixes SourceForge issue #622 "Histogram
+produces incorrect color table attribute ".</li>
+<li>magick/pixel_cache.c (ModifyCache): Re-open the pixel cache if
+the cache rows/columns do not match the owning image rows/columns.</li>
+<li>magick/transform.c (TransformImage): TransformImage now returns
+a MagickPassFail return status value rather than void.</li>
+<li>coders/pict.c (ReadPICTImage): Fix some over-strict validations
+which were preventing some PICT files which were previously read
+successfully from being accepted. Fix problems which occurred when
+the clipping rectangle changed the image size. Improve reading
+embedded JPEG blobs. Now successfully reads all raster PICT files
+I have available.</li>
+</ul>
+</blockquote>
+<p>2020-01-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/pict.c (ReadPICTImage): Be more strict about PICT
+rectangle by treating rectangle dimensions as if they are a 16-bit
+signed type and not allowing negative values. Avoid GCC warnings
+which sprung up similar to "warning: comparison is always false
+due to limited range of data type".</li>
+</ul>
+</blockquote>
+<p>2020-01-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/sfw.c (ReadSFWImage): Restore a DestroyImage() statement
+which was accidentally deleted by recent edits. Fixes oss-fuzz
+"Issue 19819 in oss-fuzz: graphicsmagick:coder_SFW_fuzzer:
+Indirect-leak in AllocateImage".</li>
+<li>coders/png.c (WriteOneJNGImage): Detect when JPEG encoder has
+failed, and throw exception. Fix image dimension limit
+validations. Stop discarding exception report. Fixes SourceForge
+bug #621 "Assertion in WriteBlob at magick/blob.c:4937" which was
+reported by Suhwan Song.</li>
+<li>coders/pict.c (WritePICTImage): Eliminating small buffer overrun
+when run-length encoding pixels. Fixes SourceForge bug #620
+"heap-buffer-overflow in EncodeImage at coders/pict.c:1114" which
+was reported by Suhwan Song.</li>
+<li>coders/logo.c (ReadLOGOImage): PATTERN error handling was
+incomplete. Add appropriate error handling.
+(ReadLOGOImage): Switch to using ConstituteTextureImage() rather
+than TextureImage() since it is more appropriate for this purpose.
+(ReadLOGOImage): Oops! Accidental change of behavior. When size
+is not supplied, simply return the pattern image.</li>
+</ul>
+</blockquote>
+<p>2020-01-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/*.c (ReadFOOImage): Stop image timer just before
+returning from reader so that reported timings are correct when
+used in the future.</li>
+</ul>
+</blockquote>
+<p>2020-01-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>magick/timer.c (StartTimer): Expose previously existing
+StartTimer() function.
+(StopTimer): Expose previously existing StartTimer() function.</li>
+<li>magick/constitute.c (WriteImage): Don't over-write time-stamp
+when output is to INFO format.</li>
+</ul>
+</blockquote>
+<p>2020-01-03 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40seznam.cz">JaFojtik<span>@</span>seznam<span>.</span>cz</a>></p>
+<blockquote>
+<ul class="simple">
+<li>VisualMagickconfigureconfigure.exe: Should not depend on mfcr90.dll.
+It is too bad when end user cannot run this tool because of missing DLL.</li>
+<li>VisualMagickconfigureconfigure.cpp Make speed optimisation as default
+option.</li>
+<li>VisualMagickconfigureconfigure.vcproj Give different filename to debug
+build to avoid accidental committing debug build to repository.</li>
+</ul>
+</blockquote>
+<p>2020-01-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>coders/dpx.c (GenerateDPXTimeStamp): Use reentrant localtime_r()
+function if it is available.</li>
+<li>magick/log.c (LogMagickEventList): Use reentrant
+localtime_r() function if it is available.</li>
+<li>coders/cineon.c (GenerateCineonTimeStamp): Use reentrant
+localtime_r() function if it is available.</li>
+<li>coders/mat.c (WriteMATLABImage): Use reentrant localtime_r()
+function if it is available.</li>
+<li>coders/pdf.c (WritePDFImage): Use reentrant localtime_r()
+function if it is available.</li>
+<li>coders/ps.c (WritePSImage): Use reentrant ctime_r() function
+if it is available.</li>
+<li>coders/ps2.c (WritePS2Image): Use reentrant ctime_r() function
+if it is available.</li>
+<li>coders/ps3.c (WritePS3Image): Use reentrant ctime_r() function
+if it is available.</li>
+<li>configure.ac: Test for getpwnam_r().</li>
+<li>magick/utility.c (ExpandFilename): Use reentrant getpwnam_r()
+function if it is available.</li>
+<li>magick/magick.c (InitializeMagickSignalHandlers): Use the normal
+termination signal handler for SIGXCPU and SIGXFSZ so that ulimit
+or setrlimit(2) may be used to apply CPU (RLIMIT_CPU) and output
+file size (RLIMIT_FSIZE) limits with the normal cleanup, and
+without dumping core. Note that any output files currently being
+written may be truncated and files being written by external
+programs (e.g. Ghostscript) might be left behind unless they are
+to a temporary file assigned by GraphicsMagick.</li>
+<li>coders/xpm.c (ReadXPMImage): Promote a color-lookup
+warning to an error.</li>
+<li>coders/xc.c (ReadXCImage): Promote a color-lookup
+warning to an error.</li>
+<li>coders/null.c (ReadNULLImage): Promote a color-lookup
+warning to an error.</li>
+<li>Makefile.am: Rotate ChangeLogs for the new year.</li>
+<li>coders/gradient.c (ReadGRADIENTImage): Promote a color-lookup
+warning to an error.</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
+2020-12-26 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - version.sh: Updates in preparation for the 1.3.36 release.
+
+ - bootstrap: Fix config.guess and config.sub download URLs.
+
+2020-12-25 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - design/pixel-cache.dot: Fix reported syntax errors.
+
+ - coders/mpc.c (ReadMPCImage): Report correct exception reason.
+
+ - coders/miff.c (ReadMIFFImage): Arbitrarily limit the number of
+ header keywords to avoid DOS attempts.
+ (ReadMIFFImage): Finish updates to use resource-limited memory
+ allocator.
+ (WriteMIFFImage): Finish updates to use resource-limited memory
+ allocator.
+
+ - coders/mpc.c (ReadMPCImage): Arbitrarily limit the number of
+ header keywords to avoid DOS attempts. Fixes oss-fuzz 28956
+ "Timeout - coder\_MPC\_fuzzer".
+
+2020-12-24 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/render.c (AffineEdge): Use MagickDoubleToLong();
+
+ - magick/utility.c (MagickDoubleToLong): New private function to
+ convert a 'double' to a 'long' with the minimum amount of harm.
+
+ - magick/segment.c (Classify): Remove variables from function
+ global scope that don't need outer scope.
+
+ - coders/jp2.c: JasPer changed its jas\_stream\_ops\_t callback
+ interfaces in releases 2.0.19 and 2.0.20. Revert to providing the
+ older interfaces by default, but use a
+ MAGICK\_JP2\_NEW\_STREAM\_INTERFACE pre-processor definition to
+ support selecting the new interfaces. We don't know how to
+ usefully tell the JasPer version at compile time! Luckily, using
+ the older interfaces only causes a compiler warning rather than a
+ run-time issue.
+
+ - coders/mac.c (ReadMACImage): Use size\_t type for 'ldblk' to
+ avoid possible overflow.
+
+2020-12-23 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - NEWS.txt: Update the news to the date December 23, 2020.
+
+2020-12-22 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/image.c (AllocateImage): Satisfy conditions for
+ DestroyImage() as soon as possible and use it for clean-up on
+ error. Added more error checks.
+ (CloneImage): Satisfy conditions for DestroyImage() as soon as
+ possible and use it for clean-up on error. Don't attempt to copy
+ colormap if colors is zero. Added more error checks.
+ (DestroyImage): Assure that we can destroy a partially-constructed
+ Image.
+
+ - magick/effect.c (BlurImage): Fix null pointer dereference if
+ image failed to be created.
+ (DespeckleImage): Fix null pointer dereference if image failed to
+ be created.
+ (EnhanceImage): Fix null pointer dereference if image failed to be
+ created.
+ (GaussianBlurImage): Fix null pointer dereference if image failed
+ to be created.
+ (MedianFilterImage): Fix null pointer dereference if image failed
+ to be created.
+ (MotionBlurImage): Fix null pointer dereference if image failed to
+ be created.
+ (ReduceNoiseImage): Fix null pointer dereference if image failed to
+ be created.
+ (ShadeImage): Fix null pointer dereference if image failed to be
+ created.
+ (SharpenImage): Fix null pointer dereference if image failed to be
+ created.
+ (SpreadImage): Fix null pointer dereference if image failed to be
+ created.
+
+2020-12-21 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - coders/jp2.c (BlobWrite): Update Jasper stream OPs callback
+ function signatures to exactly match latest jas\_stream\_ops\_t
+ definition. This avoids an annoying warning when using Jasper
+ 2.0.23 but now causes annoying warnings when using 2.0.12 or
+ 1.900.1. There does not appear to be a useful way to determine the
+ Jasper numeric version (only a C string is available) from its
+ header files.
+
+ - magick/decorate.c (FrameImage): Skip attempting to render top or
+ bottom of ornamental border if its height is zero.
+
+ - magick/image.c (CloneImage): Set image signature right away in
+ case it needs to be destroyed while it is being constructed.
+
+ - wand/drawtest.c (main): MagickGetFilename() allocates a new
+ string so make sure to free it.
+
+ - tests/constitute.c (main): Destroy ExceptionInfo to avoid memory
+ leak if an exception was thrown.
+
+ - magick/effect.c (EdgeImage): Fix null pointer dereference if
+ edge image failed to be created.
+
+ - magick/compress.c (HuffmanEncode2Image): Fix error handling
+ issues.
+
+ - magick/command.c (CompareImageCommand): Fix memory leaks when an
+ input image failed to be read.
+ (CompositeImageCommand): Fix memory leaks when an input image
+ failed to be read.
+
+ - coders/fax.c (WriteFAXImage): Fix error handling.
+
+ - coders/mpc.c (ReadMPCImage): Use correct deallocator for page
+ geometry. Fixes oss-fuzz 28853 "Heap-buffer-overflow READ {\*} -
+ \_MagickReallocateResourceLimitedMemory".
+
+2020-12-20 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - coders/yuv.c: Use resource-limited memory allocator.
+
+ - coders/xwd.c: Use resource-limited memory allocator.
+
+ - coders/xpm.c: Use resource-limited memory allocator.
+
+ - coders/xcf.c: Use resource-limited memory allocator.
+
+ - coders/xbm.c: Use resource-limited memory allocator.
+
+ - coders/wpg.c: Use resource-limited memory allocator.
+
+ - coders/viff.c: Use resource-limited memory allocator.
+
+ - coders/vicar.c: Use resource-limited memory allocator.
+
+ - coders/uil.c: Use resource-limited memory allocator.
+
+ - coders/txt.c: Use resource-limited memory allocator.
+
+ - coders/topol.c: Use resource-limited memory allocator.
+
+ - coders/tim.c: Use resource-limited memory allocator.
+
+ - coders/tiff.c: Use resource-limited memory allocator.
+
+ - coders/tga.c: Use resource-limited memory allocator.
+
+ - coders/sun.c: Use resource-limited memory allocator.
+
+ - coders/sgi.c: Use resource-limited memory allocator.
+
+ - coders/sfw.c: Use resource-limited memory allocator.
+
+ - coders/rle.c: Use resource-limited memory allocator.
+
+ - coders/rla.c: Use resource-limited memory allocator.
+
+ - coders/rgb.c: Use resource-limited memory allocator.
+
+ - coders/psd.c: Use resource-limited memory allocator.
+
+ - coders/ps3.c: Use resource-limited memory allocator.
+
+ - coders/ps2.c: Use resource-limited memory allocator.
+
+ - coders/pnm.c: Use resource-limited memory allocator.
+
+ - coders/pdf.c: Use resource-limited memory allocator.
+
+ - coders/pdb.c: Use resource-limited memory allocator.
+
+ - coders/pcl.c: Use resource-limited memory allocator.
+
+ - coders/pcd.c: Use resource-limited memory allocator.
+
+ - coders/palm.c: Use resource-limited memory allocator.
+
+ - coders/mtv.c: Use resource-limited memory allocator.
+
+ - coders/mpc.c: Use resource-limited memory allocator.
+
+ - coders/meta.c: Use resource-limited memory allocator.
+
+ - coders/map.c: Use resource-limited memory allocator.
+
+ - coders/jpeg.c: Use resource-limited memory allocator.
+
+ - coders/jp2.c: Use resource-limited memory allocator.
+
+ - coders/jnx.c: Use resource-limited memory allocator.
+
+ - coders/icon.c: Use resource-limited memory allocator.
+
+ - coders/hrz.c: Use resource-limited memory allocator.
+
+ - coders/histogram.c: Use resource-limited memory allocator.
+
+ - coders/gray.c: Use resource-limited memory allocator.
+
+ - coders/fpx.c: Use resource-limited memory allocator.
+
+ - coders/emf.c: Use resource-limited memory allocator.
+
+ - coders/dpx.c: Use resource-limited memory allocator.
+
+ - coders/dps.c: Use resource-limited memory allocator.
+
+ - coders/dcm.c: Use resource-limited memory allocator.
+
+ - coders/cut.c: Use resource-limited memory allocator.
+
+ - coders/cmyk.c: Use resource-limited memory allocator.
+
+ - coders/cineon.c: Use resource-limited memory allocator.
+
+ - coders/avs.c: Use resource-limited memory allocator.
+
+ - coders/art.c: Use resource-limited memory allocator.
+
+ - coders/pcx.c: Use resource-limited memory allocator.
+
+ - coders/mac.c: Use resource-limited memory allocator.
+
+ - coders/pict.c: Use resource-limited memory allocator.
+
+ - magick/memory.c (\_MagickReallocateResourceLimitedMemory): Add a
+ 'clear' parameter which indicates that freshly allocated memory
+ should be zeroed. Added "Cleared" versions of the private managed
+ memory macros and updated all managed memory macros to exclusively
+ use this function.
+
+2020-12-19 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - Update Automake to 1.16.3 and bootstrap to pick up latest
+ config.guess and config.sub.
+
+2020-12-17 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - coders/miff.c (ImportRLEPixels): Change from C assertion to
+ exception report. Fixes oss-fuzz 28703 "ASSERT · ((quantum\_type
+ == IndexQuantum) && (image->storage\_class ...".
+ (ReadMIFFImage): Read Gray DirectClass image as PseudoClass so it
+ has a colormap, and we have a RLE decode implementation for it.
+
+2020-12-15 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/paint.c (OpaqueImage): Changing the image storage class
+ is not required.
+
+2020-12-14 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/paint.c (OpaqueImage): Assure that image type is promoted
+ as required based on fill color. Fixes unexpected results
+ discovered by Stuart McDonagh and reported via the
+ graphicsmagick-help mailing list on December 14, 2020.
+
+2020-12-13 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/render.c (DrawImage): Set '[MVG]' image attribute at
+ appropriate places outside of DrawImage() since DrawImage()
+ sometimes recurses into itself, trashing the image attribute. One
+ example of recursion is in the text annotation code.
+
+ - coders/svg.c (ReadSVGImage): Properly support 'ping' mode so
+ 'identify' works as expected.
+
+ - magick/render.c (InsertAttributeIntoInputStream): Provide a more
+ useful diagnostic for when a "use" or "class" argument id is not
+ defined.
+
+2020-12-12 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/render.c (DrawImage): Fix regression when parsing "mask"
+ which was added by changeset 16305:f33a0fb3d8e4 on July 15, 2020
+ since the last formal release. This impacts MVG and SVG.
+
+2020-12-08 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - www/INSTALL-unix.rst: Document the '--disable-compressed-files'
+ configure option, which was added on July 15th.
+
+2020-12-06 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/magic.c: Don't send files which test positive for PCL to
+ the HPGL delegate, which is normally 'hp2xx'. Fixes SourceForge
+ bug 607 "Slow to convert HP PCL printer data".
+
+2020-12-05 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/render.c (DrawImage): Use unique image attribute space
+ for MVG symbols. Fixes oss-fuzz 28111 "Timeout -
+ coder\_MVG\_fuzzer", oss-fuzz 28170 "Stack-overflow - DrawImage",
+ and oss-fuzz 28292 "Integer-overflow - DrawPolygonPrimitive".
+
+2020-12-04 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/render.c (DrawImage): Verify that affine scaling factors
+ are not zero. Fixes oss-fuzz 28293 "Divide-by-zero -
+ InverseAffineMatrix".
+ (DrawPolygonPrimitive): Thread error status check was at wrong
+ scope, resulting in code executing when it should have quit.
+
+2020-12-03 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/magick\_types.h.in: Stop trying to define PTRDIFF\_MAX.
+
+2020-11-29 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/magick\_types.h.in: Provide PTRDIFF\_MAX for Visual Studio
+ if it is missing.
+
+ - fuzzing/oss-fuzz-build.sh: Disable old JPEG support in libtiff.
+
+ - coders/mat.c (ReadMATImage): Use resource-limited memory
+ allocator.
+ (WriteMATLABImage): Use resource-limited memory allocator.
+
+2020-11-28 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - NEWS.txt: Update the news to the date November 28, 2020.
+
+ - coders/png.c (ReadOneJNGImage): Verify and enforce
+ Alpha\_compression\_method values. Request that color and alpha
+ decoders return just one frame. Force decoder format to disable
+ auto-detection. Assume that coder messed up and might have
+ returned more than one frame. Fixes oss-fuzz 28013 "Indirect-leak
+ . MagickMalloc".
+
+ - magick/memory-private.h (MagickReallocateResourceLimitedMemory):
+ Fix typo in macro definition which resulted in a memory
+ reallocation leak!
+
+ - Magick++/lib/Magick++/Drawable.h: Decided to continue using
+ std::unary\_function if C++ version is less than C++'17 since
+ otherwise it may be changing an interface.
+
+2020-11-27 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - coders/gif.c (ReadGIFImage): Use resource-limited memory
+ allocator when reading the comment extension.
+
+ - Magick++/lib/Magick++/Drawable.h: Remove inheritance from
+ std::unary\_function, which was removed in C++'17.
+
+ - coders/webp.c (ReadWEBPImage): Use resource-limited memory
+ allocator.
+ (WriteWEBPImage): Use resource-limited memory allocator.
+
+ - coders/jbig.c (WriteJBIGImage): Use resource-limited memory
+ allocator.
+
+ - coders/fits.c (ReadFITSImage): Use resource-limited memory
+ allocator.
+ (WriteFITSImage): Use resource-limited memory allocator.
+
+ - coders/dib.c (ReadDIBImage): Use resource-limited memory
+ allocator.
+ (WriteDIBImage): Use resource-limited memory allocator.
+
+ - coders/bmp.c (ReadBMPImage): Use resource-limited memory
+ allocator.
+ (WriteBMPImage): Use resource-limited memory allocator.
+
+2020-11-26 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - coders/tiff.c (ReadTIFFImage): Improve RGBATiledMethod progress
+ monitor so it reports more steps.
+ (ReadTIFFImage): Improve TiledMethod progress monitor so it
+ reports more steps.
+
+ - fuzzing/utils.cc (class MagickState): Enable tracing of
+ exception events in order to help discover the origin of errors.
+ If too much output comes out, then this will be removed.
+
+ - magick/render.c (ConvertPathToPolygon): Attempt to fix leak of
+ 'points' on memory allocation failure.
+
+2020-11-25 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/render.c (ConvertPathToPolygon): Make sure not to leak
+ points from added Edge. Fixes oss-fuzz 27608 "Direct-leak in
+ \_MagickReallocateResourceLimitedMemory".
+ (DrawDashPolygon): Place an aribrary limit on stroke dash polygon
+ unit maximum length in order to avoid possibly rendering
+ "forever". Addresses oss-fuzz 24236 "Timeout in
+ coder\_MVG\_fuzzer".
+
+2020-11-23 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/render.c (DrawPolygonPrimitive): Try to minimize the
+ impact of too many threads due to replicated data until such time
+ as the data structures can be re-designed to directly support
+ threading.
+
+2020-11-21 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - www/Hg.rst: Describe how to clone the repository from
+ SourceForge using the ssh protocol rather than https.
+
+ - coders/ps.c (WritePSImage): Fix problem when writing PseudoClass
+ image with a colormap larger than two entries as bilevel.
+ Previous implementation was assuming that the colormap would only
+ include two entries for a monochrome image, but many entries may
+ exist in the colormap which were never used. Fixes SourceForge
+ issue #635 "gm convert failure from .pgm to .eps".
+
+2020-11-20 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - fuzzing/utils.cc (class MagickState): Set DiskResource limit to
+ zero so that pixel cache won't spill over to using temporary
+ files.
+
+2020-11-16 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - NEWS.txt: Update the news to the date November 16, 2020.
+
+2020-11-15 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - coders/svg.c (ReadSVGImage): Fix memory leak due to CDATA block,
+ and some other possible small leaks.
+
+ - magick/magick.c (InitializeMagickEx): Set C pre-processor
+ definition USE\_GLIBC\_MTRACE to 1 in order to enable Linux mtrace
+ support.
+
+ - magick/render.c (ConvertPathToPolygon): Fix memory leak upon
+ memory reallocation failure. Addresses oss-fuzz 27351
+ "Direct-leak in \_MagickReallocateResourceLimitedMemory".
+
+ - magick/memory.c (\_MagickReallocateResourceLimitedMemory): Return
+ pointer to the allocation similar to realloc() and do not
+ automatically free existing memory upon allocation failure.
+
+2020-11-08 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - common.shi.in: Apply some resource limits while running the test
+ suite.
+ (Q8\_MEMORY\_LIMIT): Set the test suite memory limit to 128MB for
+ Q8, or 256MB for Q16, or 512MB for the Q32 build.
+ (MAGICK\_LIMIT\_DISK): Set the test suite disk space limit to 0 to
+ avoid spilling over into disk files when the memory limit runs
+ out.
+
+ - coders/miff.c (WriteMIFFImage): Update to use resource-limit
+ respecting memory allocators.
+
+2020-11-07 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - coders/miff.c (ReadMIFFImage): Update to use resource-limit
+ respecting memory allocators.
+
+ - magick/render.c (DrawImage): Update to use resource-limit
+ respecting memory allocators.
+
+ - magick/memory.c (\_MagickReallocateResourceLimitedMemory): Add
+ new private interfaces for allocating private memory while
+ respecting resource limits.
+
+2020-10-25 Bob Friesenhahn <bfriesen@bobsdell>
+
+ - magick/render.c (DrawImage): Reject pattern image with a
+ dimension of zero. Fixes oss-fuzz issue 26382
+ "graphicsmagick:coder\_MVG\_fuzzer: Floating-point-exception in
+ DrawPrimitive".
+
+2020-10-15 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/constitute.c (ConstituteImage): Set image depth
+ appropriately based on the storage size specified by StorageType
+ and QuantumDepth.
+
+2020-10-11 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/render.c (DrawPrimitive): Use DestroyImageList() to
+ destroy composite\_image since it may be a list. Fixes oss-fuzz
+ 25247 "Indirect-leak in MagickMalloc".
+ (DrawPrimitive): Add ImageInfo properties to request only
+ returning the first frame if the in-line image is a list. Also,
+ add a missing DestroyImageList() request if multiple-frames were
+ returned.
+
+ - magick/transform.c (TransformImage): Use ReplaceImageInList()
+ replace transformed image in list.
+
+ - magick/list.c (ReplaceImageInList): Remove previous and next
+ references from removed image before destroying it.
+
+ - magick/render.c (DrawClipPath): Remove break statement so that
+ added clip-mask image is initialized properly and rendered-on as
+ expected. Thanks to László Böszörményi for reporting this problem
+ prior to release.
+
+2020-10-03 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - configure.ac (AC\_PROG\_CC\_STDC): AC\_PROG\_CC\_STDC is no longer
+ required since AC\_PROG\_CC now provides its useful function.
+ AC\_PROG\_CC\_STDC is marked as obsolete after Autoconf 2.69.
+ Quote all arguments to m4 macros.
+
+2020-09-28 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - configure.ac: Update syntax to avoid using deprecated syntax
+ according to Autoconf 2.69.
+
+2020-09-21 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - coders/webp.c (ReadWEBPImage): Use SetImageProfile() rather than
+ AppendImageProfile().
+
+2020-09-20 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - wand/magick\_wand.c (MagickSetSamplingFactors): Correct
+ formatting of sampling factors string. Fixes SourceForge issue
+ 633 "MagickSetSamplingFactors() API mismatch - comma separated
+ values instead of 1x1 ".
+
+2020-09-14 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/render.c (DrawPrimitive): Improve error checking related
+ to ImagePrimitive.
+
+ - magick/resize.c (ResizeImage): If CloneImage() of resize\_image
+ to source\_image fails then free source\_image allocation before
+ returning in order to prevent memory leak.
+
+ - magick/image.c (CloneImage): Free clone\_image allocation if
+ ImgExtra allocation fails in order to prevent memory leak. Fixes
+ oss-fuzz 25342 "Indirect-leak in MagickMalloc".
+ (SetImageOpacity): SetImageOpacity() now returns error status
+ since it is possible for it to fail.
+
+2020-09-13 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - coders/tiff.c (ReadTIFFImage): Ignore corrupt whitepoint and
+ primary chromaticities tags. Fixes oss-fuzz issue 25507
+ "Divide-by-zero in DoubleToRational". The divide by zero is
+ actually in libtiff, but the bad values from the input file were
+ propagated through GraphicsMagick.
+
+2020-09-09 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/analyze.c (GetImageBoundingBox): Use solution proposed by
+ Troy Patteson to solve SourceForge issue 345 "MagickTrimImage with
+ extreme fuzz can produce image with negative width".
+
+2020-08-16 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - coders/tiff.c (ReadTIFFImage): Apply the same resource limits to
+ TIFF tile sizes as apply to the image itself. Fixes oss-fuzz
+ issues 24523 "Timeout in coder\_TIFF\_fuzzer" and 24810 "Timeout in
+ coder\_PTIF\_fuzzer".
+
+2020-08-13 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - configure.ac: Add --without-gdi32 configure option to support
+ disabling use of the Microsoft Windows gdi32 library if it is not
+ wanted.
+
+2020-08-12 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - configure.ac: Remove the assumption that a native Windows build
+ means that Ghostscript may be available so that MinGW tests which
+ depend on Ghostcript are attributed proper XFAIL status by the
+ test suite.
+
+2020-08-10 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/magick.c (MagickCondSignal): Explicitly initialize 'oact'
+ prior to calling sigaction() in order to attempt to surmount
+ apparent oss-fuzz framework issue.
+
+2020-08-09 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/delegate.c, magick/magick.c, magick/nt\_base.c: Fix
+ compilation errors under MinGW when Ghostscript support is
+ disabled.
+
+2020-08-08 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/nt\_base.c: Fix compilation issue noticed under MinGW.
+
+ - magick/render.c (DrawImage): Handle the case that
+ ExtractTokensBetweenPushPop() can return NULL. Fixes oss-fuzz
+ 24659 "Null-dereference READ in DrawImage".
+
+ - magick/magick.c (MagickCondSignal): Re-implement to handle the
+ case where a new-style 'siginfo' signal handler was previously
+ registered, as well as the legacy type. This may address oss-fuzz
+ 24690 "Use-of-uninitialized-value in MagickCondSignal".
+
+2020-07-26 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - wand/drawtest.c: Use structured error handling and report all
+ output to stderr so it does not screw up TAP tests.
+
+ - magick/render.c (DTOLONG\_MIN): Correct 32-bit definition of
+ DTOLONG\_MIN.
+
+ - wand/wandtests.tap: Wand drawtest requires FreeType.
+
+ - NEWS.txt: Update with changes up to 2020-07-26.
+
+ - VisualMagick/magick/magick\_config.h.in (HasGS): Default HasGS to
+ enabled.
+
+ - configure.ac: Add a --without-gs configure option to disable
+ reading PS, EPS, and PDF formats via an external Ghostscript
+ delegate program. This is intended as an absolute security
+ measure for sites that want to be assured to avoid executing
+ Ghostscript even though it is installed on the system. Removal of
+ PS and PDF reading support breaks reading other formats which are
+ handled by executing an external program to first convert to PS or
+ PDF formats.
+
+ - magick/delegate.c (InvokePostscriptDelegate): Use HasGS to
+ enable use of the Ghostscript delegate. Change the existing
+ legacy HasGS ifdefs to HasGSLIB.
+
+2020-07-23 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - coders/tiff.c (WriteTIFFImage): Fix compilation error when
+ COMPRESSION\_WEBP is not defined.
+
+2020-07-20 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - configure.ac: Fix enableval syntax for
+ --disable-compressed-files.
+
+2020-07-19 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/command.c (CompareImageCommand): Merge changeset by
+ 谢致邦 (XIE Zhibang) which adds 'matte' support to the compare
+ command. However, substantially reduce the amount of changes
+ by avoiding adding a new public function. Documentation
+ regarding how 'compare' uses this option is also added.
+
+ - magick/command.c: Merge changeset by谢致邦 (XIE Zhibang)
+ regarding Some duplicate "verbose" should be "version".
+
+ - configure.ac, magick/blob.c: Merge changeset by Przemysław
+ Sobala regarding "Configure: add --with(out)-compressed-files
+ option". The configure option was changed to
+ --disable-compressed-files during the merge since it is more
+ appropriate.
+
+2020-07-15 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - NEWS.txt: Update with changes up to 2020-07-15.
+
+ - magick/render.c (DrawImage): Improve error handling so errors
+ are returned when they should be. Fixes oss-fuzz 24117
+ "Stack-overflow in DrawImage" and oss-fuzz 24126 "Timeout in
+ coder\_MVG\_fuzzer". Restore the original behavior of
+ DrawClipPath() when there is no matching clip-path attribute.
+
+2020-07-12 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - NEWS.txt: Update with changes up to 2020-07-12.
+
+2020-07-11 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/xwindow.c (MagickXVisualColormapSize): Fix UBSAN integer
+ overflow warning.
+
+ - magick/render.c (DrawClipPath): Report only a warning if there
+ is no clip mask.
+ (ExtractTokensBetweenPushPop): Verify that the expected/required
+ pop statement is indeed found. Fixes oss-fuzz 23498 "Timeout in
+ coder\_MVG\_fuzzer".
+
+2020-06-14 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/constitute.c (ReadImage): Improve error handling related
+ to ImageToFile().
+
+ - magick/image.c (SetImageInfo): Improve error handling related to
+ ImageToFile().
+
+ - coders/mat.c: Check MagickFindRawImageMinMax() return status.
+
+ - magick/constitute.c (MagickFindRawImageMinMax): Verify that the
+ original seek position was restored.
+
+2020-06-13 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/render.c (DrawImage): Apply stricter range limits when
+ converting a double to a long in order to avoid integer overflow.
+ Fixes oss-fuzz 23304 "Integer-overflow in DrawImage".
+ (DrawClipPath): If there is no matching clip-path attribute then
+ return an informative error. Fixes oss-fuzz 23187 "Stack-overflow
+ in DrawImage" which is actually a case of DrawImage() /
+ DrawClipPath() recursion.
+
+2020-06-06 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - coders/wpg.c (UnpackWPGRaster): Fix oss-fuzz 23042
+ "Heap-buffer-overflow in ImportGrayQuantumType" and oss-fuzz
+ "Heap-buffer-overflow in InsertRow" which are both from the same
+ cause.
+
+2020-06-01 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/pixel\_cache.c (ClipCacheNexus): Change x and y variables
+ to unsigned type.
+
+2020-05-31 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - coders/tiff.c (WriteTIFFImage): WebP compression only supports a
+ depth of 8. Fixes oss-fuzz 22560 "Use-of-uninitialized-value in
+ GammaToLinear".
+
+2020-05-30 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - coders/wpg.c (ReadWPGImage): Terminate reading when a pixel
+ cache resource limit is hit rather than moving on to heap buffer
+ overflow. Fixes oss-fuzz 20045, 20318, 21956
+
+ - coders/png.c (ReadMNGImage): If the image width is 1, then X
+ magnification is done by by simple pixel replication. If the
+ image height is 1, then Y magnification is done by simple pixel
+ replication. Fixes oss-fuzz issue 19025 "Heap-buffer-overflow in
+ ReadMNGImage" and oss-fuzz issue 19026 "ASSERT: yy < (long)
+ large\_image->rows". It appears that CERT has assigned
+ CVE-2020-12672 for oss-fuzz issue 19025. Note that the heap
+ overwrite is only one byte.
+
+2020-05-01 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - NEWS.txt: Update with changes up to 2020-04-23.
+
+2020-04-23 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - coders/dpx.c (ReadDPXImage): Support dpx:swap-samples-read
+ define which behaves similar to dpx:swap-samples, but is only
+ applied when reading. This provides for use when there is both
+ reading and writing in the same operation.
+ (WriteDPXImage): Support dpx:swap-samples-write define which
+ behaves similar to dpx:swap-samples, but is only applied when
+ writing. This provides for use when there is both reading and
+ writing in the same operation.
+
+2020-04-18 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick: Fix remaining GCC 10 warnings.
+
+2020-04-17 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/transform.c (GetImageMosaicDimensions): Mark function as pure.
+
+ - magick/effect.c (GetNonpeakMedianList): Mark function as pure.
+
+ - coders/fits.c (InsertRowHDU): Fix scary-sounding GCC 10 warning,
+ which is actually benign.
+
+ - config/config.sub: Update to latest config.sub
+
+ - config/config.guess: Update to latest config.guess.
+
+ - Makefile.am: Update to Automake 1.16.2
+
+2020-04-04 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - coders/dpx.c (ReadRowSamples): Simplify 10-bit packed decoding.
+ (WriteRowSamples): Simplify 10-bit packed encoding.
+
+ - coders/locale.c (ReadConfigureFile): Ignore comment element if
+ it was not found or is too short.
+
+ - magick/pixel\_cache.c (ReadCacheIndexes): If SetNexus() has
+ previously failed to allocate the staging buffer and thus reported
+ an exception to the user, then ReadCacheIndexes() should report an
+ error rather than blundering into copying indexes data to a null
+ pointer.
+
+ - magick/effect.c (AdaptiveThresholdImage): Assure that we don't
+ attempt to write to output pixels if they have not been selected
+ yet.
+
+ - magick/utility.c (ExpandFilenames): Properly handle NULL
+ filelist and NULL filelist entries.
+ (GetGeometry): Assure that there is no one-character stack read
+ overflow when reading the geometry buffer.
+
+2020-03-29 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - fuzzing/oss-fuzz-build.sh: Restore xz to oss-fuzz build due to
+ build problems getting worked out.
+
+2020-03-28 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - fuzzing/oss-fuzz-build.sh (MAGICK\_LIBS): Remove mention of
+ liblzma.a in the oss-fuzz build until its build problems get
+ worked out.
+
+2020-03-27 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - fuzzing/oss-fuzz-build.sh: Skip building xz in the oss-fuzz
+ build until its build problems get worked out.
+
+2020-03-25 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/log.c (InitializeLogInfoPost): Don't load log.mgk if
+ logging is already configured to use MethodOutput.
+
+2020-03-24 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/log.c (InitializeLogInfoPost): Mark that logging is
+ configured, regardless of if "log.mgk" was discovered.
+
+2020-03-23 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - VisualMagick/magick/magick\_config.h.in: ProvideDllMain is now
+ disabled by default since it causes InitializeMagick() to be
+ invoked prior to when the program's main() routine is called,
+ thereby blocking configuration activities or use of
+ InitializeMagickEx(). With this change it is even more imperative
+ that InitializeMagick() be explicitly invoked by all programs
+ using GraphicsMagick.
+
+ - magick/log.c (LogMagickEventList): Always use/respect the
+ configured log format as might be obtained from "log.mgk" or
+ SetLogDefaultFormat().
+
+ - magick/utility.c (MagickFormatString): Return the size of the
+ formatted string.
+ (MagickFormatStringList): Return the size of the formatted string.
+ (FormatString): Return the size of the formatted string.
+ (FormatStringList): Return the size of the formatted string.
+
+2020-03-22 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - www/api/types.rst: Improved types documentation and added more
+ hyperlinks.
+
+ - scripts/format\_c\_api\_doc.py: Add hyperlinks for 'LogMethod' and
+ 'LogOutputType' type documentation.
+
+ - Magick++/lib/Image.cpp (SetLogDefaultEventType): New C++ function to
+ forward to C interface.
+ (SetLogDefaultGenerations): New C++ function to forward to C
+ interface.
+ (SetLogDefaultLimit): New C++ function to forward to C interface.
+ (SetLogDefaultFormat(): New C++ function to forward to C
+ interface.
+ (SetLogDefaultLogMethod): New C++ function to forward to C
+ interface.
+ (SetLogDefaultFileName): New C++ function to forward to C
+ interface.
+ (SetLogDefaultOutputType): New C++ function to forward to C
+ interface.
+
+ - magick/log.c (SetLogDefaultEventType): New function to support
+ setting the default set of events which will result in a log
+ event.
+ (SetLogDefaultGenerations): New function to specify the maximum
+ number of log files maintain before circulating back to overwrite
+ the first name.
+ (SetLogDefaultLimit): New function to specify the maximum number
+ of logging events which may occur before creating a new log file.
+ (SetLogDefaultLogMethod): New function to provide a call-back
+ function to be invoked for each log event when the logging method
+ type is MethodOutput.
+ (SetLogDefaultOutputType): New function to set the logging output
+ destination.
+ (SetLogDefaultFormat): New function to provide the format of the
+ logging output.
+ (SetLogDefaultFileName): New function to provide the file name,
+ or file path, to be written to for each log event.
+ (InitializeLogInfo): If a default logging callback was provided
+ via SetLogDefaultLogMethod() then skip searching for "log.mgk".
+ In this case it is assumed that the API user has already changed
+ any other logging default which would have been updated by
+ "log.mgk" so it would be harmful to search for it, or read from
+ it.
+
+2020-03-10 Troy Patteson <troyp@ieee.org>
+
+ - coders/png.c (WriteOnePNGImage): Don't skip optional Exif
+ identifier code if it isn't present.
+
+2020-03-08 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/pixel\_cache.c (ModifyCache): Destroy clone\_image.cache if
+ ClonePixelCache() reports failure. Fixes oss-fuzz 20871
+ "graphicsmagick:coder\_MVG\_fuzzer: Direct-leak in
+ MagickMallocAligned".
+
+ - magick/log.c (LogMagickEventList): Prepare source module base
+ name more efficiently. Move MethodOutput implementation to the
+ front so it is not filtered by other active blocks.
+ (LogMagickEventList): Cache broken-down time structure in LogInfo
+ and recompute only when needed.
+
+2020-03-07 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/resize.c (HorizontalFilter): Improve tracing.
+ (VerticalFilter): Improve tracing.
+ (ResizeImage): Improve tracing.
+
+ - www/api/api.rst: Add functions from log.c and render.c.
+
+ - magick/log.c (DestroyLogInfo): DestroyLogInfo is no longer
+ marked MagickExport.
+
+2020-03-04 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ - magick/api.h: Add "magick/enum\_strings.h" to API headers.
+ Requested by Przemysław Sobala via posting to the
+ graphicsmagick-help mailing list on 2020-02-27.
+
+ - scripts/html\_fragments.py: Automatically generate HTML footer
+ content and include commented HTML fragment which may be
+ substituted with SF tracker for SourceForge web site.
+
2020-02-23 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
- version.sh: Updates in preparation for the 1.3.35 release.
- Merge changes for 1.3.35 into GraphicsMagick-1\_3 branch.
- www/INSTALL-windows.rst: Update Windows installation and build
documentation.
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Change Logs</title>
<meta content="GraphicsMagick is a robust collection of tools and libraries to read, write, and manipulate an image in any of the more popular image formats including GIF, JPEG, PNG, PDF, and WebP. With GraphicsMagick you can create GIFs dynamically making it suitable for Web applications. You can also resize, rotate, sharpen, color reduce, or add special effects to an image and save your completed work in the same or differing image format. " name="description" />
<meta content="GraphicsMagick, GM, PerlMagick, Perl Magick, Perl Magic, image processing, software development, TclMagick, Magick++" name="keywords" />
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-change-logs">
<p>The following are the <tt class="docutils literal">GraphicsMagick</tt> change logs since 2001:</p>
<blockquote>
<ul class="simple">
-<li><a class="reference external" href="Changelog.html">2020</a> (1.3.35 released)</li>
+<li><a class="reference external" href="Changelog.html">2020</a> (1.3.35, 1.3.36 released)</li>
<li><a class="reference external" href="ChangeLog-2019.html">2019</a> (1.3.32, 1.3.33, 1.3.34 released)</li>
<li><a class="reference external" href="ChangeLog-2018.html">2018</a> (1.3.28, 1.3.29, 1.3.30, 1.3.31 released)</li>
<li><a class="reference external" href="ChangeLog-2017.html">2017</a> (1.3.26, 1.3.27, 1.3.27a released)</li>
<li><a class="reference external" href="ChangeLog-2001.html">2001</a></li>
</ul>
</blockquote>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Change Logs</title>
+<meta content="GraphicsMagick is a robust collection of tools and libraries to read, write, and manipulate an image in any of the more popular image formats including GIF, JPEG, PNG, PDF, and WebP. With GraphicsMagick you can create GIFs dynamically making it suitable for Web applications. You can also resize, rotate, sharpen, color reduce, or add special effects to an image and save your completed work in the same or differing image format. " name="description" />
+<meta content="GraphicsMagick, GM, PerlMagick, Perl Magick, Perl Magic, image processing, software development, TclMagick, Magick++" name="keywords" />
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-change-logs">
+<h1 class="title">GraphicsMagick Change Logs</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>The following are the <tt class="docutils literal">GraphicsMagick</tt> change logs since 2001:</p>
+<blockquote>
+<ul class="simple">
+<li><a class="reference external" href="Changelog.html">2020</a> (1.3.35 released)</li>
+<li><a class="reference external" href="ChangeLog-2019.html">2019</a> (1.3.32, 1.3.33, 1.3.34 released)</li>
+<li><a class="reference external" href="ChangeLog-2018.html">2018</a> (1.3.28, 1.3.29, 1.3.30, 1.3.31 released)</li>
+<li><a class="reference external" href="ChangeLog-2017.html">2017</a> (1.3.26, 1.3.27, 1.3.27a released)</li>
+<li><a class="reference external" href="ChangeLog-2016.html">2016</a> (1.3.24, 1.3.25 released)</li>
+<li><a class="reference external" href="ChangeLog-2015.html">2015</a> (1.3.21 - 1.3.23 released)</li>
+<li><a class="reference external" href="ChangeLog-2014.html">2014</a> (1.3.20 released)</li>
+<li><a class="reference external" href="ChangeLog-2013.html">2013</a> (1.3.18 - 1.3.19 released)</li>
+<li><a class="reference external" href="ChangeLog-2012.html">2012</a> (1.3.14 - 1.3.17 released)</li>
+<li><a class="reference external" href="ChangeLog-2011.html">2011</a> (1.3.13 released)</li>
+<li><a class="reference external" href="ChangeLog-2010.html">2010</a> (1.2.10, 1.3.8 - 1.3.12 released)</li>
+<li><a class="reference external" href="ChangeLog-2009.html">2009</a> (1.3.4 - 1.3.7 released)</li>
+<li><a class="reference external" href="ChangeLog-2008.html">2008</a> (1.1.11 - 1.1.14, 1.2 - 1.2.9, 1.3 - 1.3.3 released)</li>
+<li><a class="reference external" href="ChangeLog-2007.html">2007</a> (1.1.8 - 1.1.10 released)</li>
+<li><a class="reference external" href="ChangeLog-2006.html">2006</a></li>
+<li><a class="reference external" href="ChangeLog-2005.html">2005</a> (1.1.5 - 1.1.7 released)</li>
+<li><a class="reference external" href="ChangeLog-2004.html">2004</a> (1.0.5 - 1.0.6, 1.1 - 1.1.4 released)</li>
+<li><a class="reference external" href="ChangeLog-2003.html">2003</a> (1.0 - 1.0.4 released)</li>
+<li><a class="reference external" href="ChangeLog-2002.html">2002</a></li>
+<li><a class="reference external" href="ChangeLog-2001.html">2001</a></li>
+</ul>
+</blockquote>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</body>
+</html>
The following are the ``GraphicsMagick`` change logs since 2001:
- * 2020_ (1.3.35 released)
+ * 2020_ (1.3.35, 1.3.36 released)
* 2019_ (1.3.32, 1.3.33, 1.3.34 released)
* 2002_
* 2001_
-
-
---------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-copyrights-and-licenses">
licenses for these libraries is provided in a "licenses" directory.</p>
</li>
</ol>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2018</p>
+</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Copyrights and Licenses</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-copyrights-and-licenses">
+<h1 class="title">GraphicsMagick Copyrights and Licenses</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>This file is part of the GraphicsMagick software distributed by the
+GraphicsMagick Group.</p>
+<blockquote>
+[<em>Please note that the legal community considers 15 or more
+total lines of code or text (not necessarily contiguous) to
+be significant for the purposes of copyright. Repeated
+changes such as renaming a symbol has similar significance
+to changing one line of code.</em>]</blockquote>
+<p>The licenses which components of this software fall under are as follows.</p>
+<ol class="arabic">
+<li><p class="first">In November 2002, the GraphicsMagick Group created GraphicsMagick
+from ImageMagick Studio's ImageMagick and applied the "MIT" style
+license:</p>
+<p>Copyright (C) 2002-2020 GraphicsMagick Group</p>
+<p>Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation files
+(the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of the Software,
+and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:</p>
+<p>The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.</p>
+<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.</p>
+</li>
+<li><p class="first">In October 1999, ImageMagick Studio assumed the responsibility for
+the development of ImageMagick (forking from the distribution by
+E. I. du Pont de Nemours and Company) and applied a new license:</p>
+<p>Copyright (C) 2002 ImageMagick Studio, a non-profit organization dedicated
+to making software imaging solutions freely available.</p>
+<p>Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files ("ImageMagick"),
+to deal in ImageMagick without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of ImageMagick, and to permit persons to whom the
+ImageMagick is furnished to do so, subject to the following conditions:</p>
+<p>The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of ImageMagick.</p>
+<p>The software is provided "as is", without warranty of any kind, express or
+implied, including but not limited to the warranties of merchantability,
+fitness for a particular purpose and noninfringement. In no event shall
+ImageMagick Studio be liable for any claim, damages or other liability,
+whether in an action of contract, tort or otherwise, arising from, out of
+or in connection with ImageMagick or the use or other dealings in
+ImageMagick.</p>
+<p>Except as contained in this notice, the name of the ImageMagick Studio
+shall not be used in advertising or otherwise to promote the sale, use or
+other dealings in ImageMagick without prior written authorization from the
+ImageMagick Studio.</p>
+</li>
+<li><p class="first">From 1991 to October 1999 (through ImageMagick 4.2.9), ImageMagick
+was developed and distributed by E. I. du Pont de Nemours and
+Company:</p>
+<p>Copyright 1999 E. I. du Pont de Nemours and Company</p>
+<p>Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files
+("ImageMagick"), to deal in ImageMagick without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of ImageMagick, and to
+permit persons to whom the ImageMagick is furnished to do so, subject
+to the following conditions:</p>
+<p>The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of ImageMagick.</p>
+<p>The software is provided "as is", without warranty of any kind, express
+or implied, including but not limited to the warranties of
+merchantability, fitness for a particular purpose and noninfringement.
+In no event shall E. I. du Pont de Nemours and Company be liable for
+any claim, damages or other liability, whether in an action of
+contract, tort or otherwise, arising from, out of or in connection with
+ImageMagick or the use or other dealings in ImageMagick.</p>
+<p>Except as contained in this notice, the name of the E. I. du Pont de
+Nemours and Company shall not be used in advertising or otherwise to
+promote the sale, use or other dealings in ImageMagick without prior
+written authorization from the E. I. du Pont de Nemours and Company.</p>
+</li>
+<li><p class="first">The GraphicsMagick Base64Decode() and Base64Encode() functions are
+based on source code obtained from OpenSSH. This source code is
+distributed under the following license:</p>
+<p>Copyright (c) 2000 Markus Friedl. All rights reserved.</p>
+<p>Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:</p>
+<ol class="arabic simple">
+<li>Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.</li>
+<li>Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.</li>
+</ol>
+<p>THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
+</li>
+<li><p class="first">Many of the pattern images in coders/logo.c are derived from XFig,
+which is distributed under the following license:</p>
+<div class="line-block">
+<div class="line">FIG : Facility for Interactive Generation of figures</div>
+<div class="line">Copyright (c) 1985-1988 by Supoj Sutanthavibul</div>
+<div class="line">Parts Copyright (c) 1989-2000 by Brian V. Smith</div>
+<div class="line">Parts Copyright (c) 1991 by Paul King</div>
+</div>
+<p>Any party obtaining a copy of these files is granted, free of charge, a
+full and unrestricted irrevocable, world-wide, paid up, royalty-free,
+nonexclusive right and license to deal in this software and
+documentation files (the "Software"), including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons who receive
+copies from any such party to do so, with the only requirement being
+that this copyright notice remain intact.</p>
+</li>
+<li><p class="first">The documentation for the composition operators is copied from the
+rlecomp manual page, which is authored by Rod Bogart and John W.
+Peterson. Rlecomp is part of the Utah Raster Toolkit distributed by the
+University of Michigan and the University of Utah. The copyright for
+this manual page is as follows:</p>
+<p>Copyright (c) 1986, University of Utah</p>
+<p>This software is copyrighted as noted below. It may be freely copied,
+modified, and redistributed, provided that the copyright notice is
+preserved on all copies.</p>
+<p>There is no warranty or other guarantee of fitness for this software,
+it is provided solely "as is". Bug reports or fixes may be sent
+to the author, who may or may not act on them as he desires.</p>
+<p>You may not include this software in a program or other software product
+without supplying the source, or without informing the end-user that the
+source is available for no extra charge.</p>
+<p>If you modify this software, you should include a notice giving the
+name of the person performing the modification, the date of modification,
+and the reason for such modification.</p>
+</li>
+<li><p class="first">The source code comprising magick_endian.c is originally derived
+from libtiff which has the following license:</p>
+<div class="line-block">
+<div class="line">Copyright (c) 1988-1997 Sam Leffler</div>
+<div class="line">Copyright (c) 1991-1997 Silicon Graphics, Inc.</div>
+</div>
+<p>Permission to use, copy, modify, distribute, and sell this software and
+its documentation for any purpose is hereby granted without fee, provided
+that (i) the above copyright notices and this permission notice appear in
+all copies of the software and related documentation, and (ii) the names of
+Sam Leffler and Silicon Graphics may not be used in any advertising or
+publicity relating to the software without the specific, prior written
+permission of Sam Leffler and Silicon Graphics.</p>
+<p>THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.</p>
+<p>IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
+ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
+OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+OF THIS SOFTWARE.</p>
+</li>
+<li><p class="first">The C++ API known as "Magick++", and which resides in the Magick++
+directory, is distributed under the following license:</p>
+<p>Copyright 1999 - 2012 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<p>Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation files
+("Magick++"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject
+to the following conditions:</p>
+<p>The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.</p>
+<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.</p>
+</li>
+<li><p class="first">The GraphicsMagick HaldClutImagePixels() function in magick/hclut.c
+is based on source code from the HaldCLUT package by Eskil Steenberg
+(<a class="reference external" href="http://www.quelsolaar.com/technology/clut.html">http://www.quelsolaar.com/technology/clut.html</a>) which is
+distributed under the following license:</p>
+<p>Copyright (c) 2005 Eskil Steenberg. All rights reserved.</p>
+<p>Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:</p>
+<ol class="arabic simple">
+<li>Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.</li>
+<li>Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.</li>
+</ol>
+<p>THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
+</li>
+<li><p class="first">GraphicsMagick makes use of third-party "delegate" libraries to
+support certain optional features. These libraries bear their own
+copyrights and licenses, which may be more or less restrictive than the
+GraphicsMagick license. For convenience, when GraphicsMagick is
+bundled with (or compiled with) "delegate" libraries, a copy of the
+licenses for these libraries is provided in a "licenses" directory.</p>
+</li>
+</ol>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2018</p>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick FAQ</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-faq">
<!-- See http://docutils.sourceforge.net/rst.html for details. -->
<!-- URL links -->
<div class="contents topic" id="faq-contents">
-<p class="topic-title first">FAQ Contents</p>
+<p class="topic-title">FAQ Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#how-does-graphicsmagick-differ-from-imagemagick" id="id1">How does GraphicsMagick differ from ImageMagick?</a></li>
<li><a class="reference internal" href="#how-often-does-graphicsmagick-pick-up-new-code-from-imagemagick" id="id2">How often does GraphicsMagick pick up new code from ImageMagick?</a></li>
will be no more need to develop specialized code for a GPU. Today 16
core CPUs are readily available for purchase in systems at reasonable
prices, and this trend is certain to continue.</p>
-<p>Intel's <a class="reference external" href="http://en.wikipedia.org/wiki/Xeon_Phi">Xeon Phi</a> offers a
-61 core 'x86 CPU in a GPU-like plugin form-factor which provides over
-a TeraFLOP of performance. Being based on power-hungry plug-in cards,
-this solution suffers from many of the issues associated with GPUs.
-However, since it supports OpenMP, it may be a suitable target for
-executing some GraphicsMagick algorithms. Effective use of Xeon Phi
-currently requires use of Intel's development tools so from that
-standpoint it is not much more open than GPUs.</p>
<p>Future multi-core CPUs will use a similar amount of power to today's
CPUs, will idle at very low power consumption levels, and will fit
into a very small chassis. Due to this trend, there is no value
obtained by expending energy toward developing specialized code for
-today's GPUs.</p>
+today's GPUs in GraphicsMagick.</p>
</div>
<div class="section" id="what-is-the-meaning-of-magick">
<h1><a class="toc-backref" href="#id4">What is the meaning of "magick"?</a></h1>
-<p>According to the infamous British accultist <a class="reference external" href="http://en.wikipedia.org/wiki/Aleister_Crowley">Aleister Crowley</a>, the definition of
+<p>According to the infamous British occultist <a class="reference external" href="http://en.wikipedia.org/wiki/Aleister_Crowley">Aleister Crowley</a>, the definition of
<a class="reference external" href="http://en.wikipedia.org/wiki/Magick_(Aleister_Crowley)">magick</a> is
"the science and art of causing change to occur in conformity with the
will".</p>
seaworld.jpg JPEG 1530x1020+0+0 DirectClass 8-bit 204.0K 0.000u 0:01
</pre>
<p>but with -verbose it can report on a large number of properties.</p>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick FAQ</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-faq">
+<h1 class="title">GraphicsMagick FAQ</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<!-- URL links -->
+<div class="contents topic" id="faq-contents">
+<p class="topic-title first">FAQ Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#how-does-graphicsmagick-differ-from-imagemagick" id="id1">How does GraphicsMagick differ from ImageMagick?</a></li>
+<li><a class="reference internal" href="#how-often-does-graphicsmagick-pick-up-new-code-from-imagemagick" id="id2">How often does GraphicsMagick pick up new code from ImageMagick?</a></li>
+<li><a class="reference internal" href="#are-there-any-plans-to-use-opencl-or-cuda-to-use-a-gpu" id="id3">Are there any plans to use OpenCL or CUDA to use a GPU?</a></li>
+<li><a class="reference internal" href="#what-is-the-meaning-of-magick" id="id4">What is the meaning of "magick"?</a></li>
+<li><a class="reference internal" href="#how-can-i-process-many-files-at-once" id="id5">How can I process many files at once?</a></li>
+<li><a class="reference internal" href="#i-received-the-following-message-delegation-failed-what-does-it-mean" id="id6">I received the following message, "?????? delegation failed ...". What does it mean?</a></li>
+<li><a class="reference internal" href="#how-do-i-set-the-transparency-index-in-a-gif-image-so-it-displays-properly-within-mozilla" id="id7">How do I set the transparency index in a GIF image so it displays properly within Mozilla?</a></li>
+<li><a class="reference internal" href="#how-can-i-stop-the-filenames-from-changing-in-the-title-bar-of-the-animate-1-image-window" id="id8">How can I stop the filenames from changing in the title bar of the animate(1) image window?</a></li>
+<li><a class="reference internal" href="#the-image-grabbed-by-import-1-does-not-look-like-the-image-on-my-x-server-what-s-wrong" id="id9">The image grabbed by import(1) does not look like the image on my X server. What's wrong?</a></li>
+<li><a class="reference internal" href="#how-do-i-animate-a-digital-yuv-image-sequence" id="id10">How do I animate a digital YUV image sequence?</a></li>
+<li><a class="reference internal" href="#how-do-i-change-the-default-postscript-page-size" id="id11">How do I change the default <em>PostScript</em> page size?</a></li>
+<li><a class="reference internal" href="#i-get-a-memory-allocation-error-what-can-i-do" id="id12">I get a memory allocation error. What can I do?</a></li>
+<li><a class="reference internal" href="#how-do-i-concatenate-three-images-left-to-right-with-no-borders-frames-or-text" id="id13">How do I concatenate three images left-to-right with no borders, frames, or text?</a></li>
+<li><a class="reference internal" href="#how-do-i-create-a-gif-animation-sequence-to-display-within-firefox" id="id14">How do I create a GIF animation sequence to display within Firefox?</a></li>
+<li><a class="reference internal" href="#when-i-display-a-postscript-image-white-borders-are-trimmed" id="id15">When I display a <em>PostScript</em> image, white borders are trimmed.</a></li>
+<li><a class="reference internal" href="#what-are-visual-image-directories-how-do-i-use-them" id="id16">What are visual image directories? How do I use them?</a></li>
+<li><a class="reference internal" href="#how-can-i-include-the-window-frame-when-importing-a-window" id="id17">How can I include the window frame when importing a window?</a></li>
+<li><a class="reference internal" href="#i-displayed-an-image-and-it-appears-as-one-solid-color-what-did-i-do-wrong" id="id18">I displayed an image and it appears as one solid color. What did I do wrong?</a></li>
+<li><a class="reference internal" href="#i-received-the-following-message-library-is-not-available" id="id19">I received the following message, "???? library is not available...".</a></li>
+<li><a class="reference internal" href="#i-want-to-inspect-the-values-of-the-matte-channel-within-my-image" id="id20">I want to inspect the values of the matte channel within my image.</a></li>
+<li><a class="reference internal" href="#how-can-i-add-one-of-those-cool-bevels-to-my-image-that-i-see-used-on-the-web" id="id21">How can I add one of those cool bevels to my image that I see used on the Web?</a></li>
+<li><a class="reference internal" href="#i-try-to-launch-display-from-my-window-manager-and-it-fails-what-s-up" id="id22">I try to launch display from my window manager and it fails. What's up?</a></li>
+<li><a class="reference internal" href="#how-can-i-make-postscript-text-look-good" id="id23">How can I make Postscript text look good?</a></li>
+<li><a class="reference internal" href="#how-can-i-annotate-an-image-with-text-that-is-2-to-3-inches-tall" id="id24">How can I annotate an image with text that is 2 to 3 inches tall?</a></li>
+<li><a class="reference internal" href="#how-can-i-convert-my-gif-animation-sequence-to-individual-image-files" id="id25">How can I convert my GIF animation sequence to individual image files?</a></li>
+<li><a class="reference internal" href="#how-can-i-remove-the-background-that-prints-around-my-image-when-i-display-it-with-firefox" id="id26">How can I remove the background that prints around my image when I display it with Firefox?</a></li>
+<li><a class="reference internal" href="#how-do-i-create-a-gif-or-png-image-with-web-safe-colors" id="id27">How do I create a GIF or PNG image with Web safe colors?</a></li>
+<li><a class="reference internal" href="#how-can-i-add-a-matte-layer-to-my-image" id="id28">How can I add a matte layer to my image?</a></li>
+<li><a class="reference internal" href="#how-can-i-draw-with-text-using-convert-under-windows-nt" id="id29">How can I draw with text using 'convert' under Windows NT?</a></li>
+<li><a class="reference internal" href="#why-are-my-jpeg-files-larger-than-expected" id="id30">Why are my JPEG files larger than expected?</a></li>
+<li><a class="reference internal" href="#how-do-i-extract-a-single-image-from-a-multi-image-file" id="id31">How do I extract a single image from a multi-image file?</a></li>
+<li><a class="reference internal" href="#how-can-i-extract-and-combine-cmyk-channels-in-a-cmyk-image" id="id32">How can I extract and combine CMYK channels in a CMYK image?</a></li>
+<li><a class="reference internal" href="#how-can-i-create-a-solid-or-patterned-canvas-image" id="id33">How can I create a solid or patterned canvas image?</a></li>
+<li><a class="reference internal" href="#what-does-identify-report" id="id34">What does <cite>identify</cite> report?</a></li>
+</ul>
+</div>
+<div class="section" id="how-does-graphicsmagick-differ-from-imagemagick">
+<h1><a class="toc-backref" href="#id1">How does GraphicsMagick differ from ImageMagick?</a></h1>
+<p><em>GraphicsMagick</em> is originally based on (forked from) ImageMagick
+5.5.2 in November 2002, from the version distributed by ImageMagick
+Studio LLC, which is itself forked in August 1999 from ImageMagick
+developed by E. I. du Pont de Nemours and Company starting in
+1992. Other than utilities being executed as sub-commands of the 'gm'
+command, the command-line syntax and programming APIs remain entirely
+upward compatible with ImageMagick 5.5.2. A better question might be
+"<em>How does ImageMagick differ from ImageMagick?</em>" since ImageMagick
+continues to alter and evolve its interfaces so they are no longer
+completely compatible with earlier versions. While GraphicsMagick also
+adds new features, it does so in a way which assures that existing
+features work as they did before. ImageMagick focuses on adding new
+functionality and features and has dramatically mutated several times
+since the fork.</p>
+<p>GraphicsMagick maintains a stable release branch, maintains a detailed
+ChangeLog, and maintains a stable source repository with complete version
+history so that changes are controlled, and changes between releases are
+accurately described. GraphicsMagick provides continued support for a
+release branch. ImageMagick does not offer any of these things.</p>
+<p>Since GraphicsMagick is more stable, more time has been spent optimizing
+and debugging its code.</p>
+<p>GraphicsMagick is much smaller than ImageMagick and has dramatically
+fewer dependencies on external libraries. For example, on the FreeBSD
+operating system, a fully-featured install of GraphicsMagick depends
+on 36 libraries whereas ImageMagick requires 64. GraphicsMagick's
+installation footprint is 3-5X smaller than ImageMagick.</p>
+<p>GraphicsMagick is usually faster than ImageMagick. The baseline execution
+overhead for simple commands is much lower, and GraphicsMagick is also
+more efficient at dealing with large images.</p>
+</div>
+<div class="section" id="how-often-does-graphicsmagick-pick-up-new-code-from-imagemagick">
+<h1><a class="toc-backref" href="#id2">How often does GraphicsMagick pick up new code from ImageMagick?</a></h1>
+<p>GraphicsMagick never picks up new code from ImageMagick as distributed
+by ImageMagick Studio LLC. Not long after the GraphicsMagick project
+was started in November 2002, ImageMagick from ImageMagick Studio LLC
+abandoned the MIT X11 style license it had been using since 1992, and
+switched between several different licenses until it ended up with one
+based on the Apache license, which is intended to penalize projects
+which borrow some of its source code, or fork from it. Since that
+time, GraphicsMagick has not incorporated any ImageMagick source code.</p>
+<p>On November 27, 2003 ImageMagick Studio LLC applied to register
+"ImageMagick" as its trademark, and it was awarded this registered
+trademark (serial number 78333969) on August 30, 2005. Those who
+re-distribute modified versions of "ImageMagick" (e.g. patched or
+improved) under license as "ImageMagick" now face the risk of
+arbitrary trademark infringement claims by ImageMagick Studio LLC.</p>
+<p>Authors of new features are encouraged to independently contribute
+their work to the GraphicsMagick project so that it can be released
+under GraphicsMagick's MIT X11 style license without additional
+encumberment. In order for a work to be accepted, it must have been
+developed entirely outside the ImageMagick source base to avoid any
+possibility of copyright taint.</p>
+</div>
+<div class="section" id="are-there-any-plans-to-use-opencl-or-cuda-to-use-a-gpu">
+<h1><a class="toc-backref" href="#id3">Are there any plans to use OpenCL or CUDA to use a GPU?</a></h1>
+<p>It is well known that some math-intensive algorithms run very quickly
+on video-card (and stand-alone) GPUs. Video card vendors encourage
+you to buy an expensive video card with quite a lot of installed RAM
+and modify applications to use the GPU via their proprietary or
+limited-purpose APIs. GPUs are quite effective at producing images
+for real-time display, such as for video games and virtual reality.
+GraphicsMagick has been significantly updated to use multiple CPU
+cores to speed up the image processing, and work continues to thread
+the few remaining algorithms, or remove inefficiencies in algorithms
+which don't see as much speed-up as they should. Linear speedup as
+cores are added is typical for CPU-bound algorithms on well-designed
+CPUs. Regardless, <a class="reference external" href="http://en.wikipedia.org/wiki/Amdal%27s_law">Amdahl's law</a> is a significant factor
+in GraphicsMagick, with non-parallelizable code paths often dominating
+the time.</p>
+<p>It is my belief that stand-alone GPUs are a poor design (expensive,
+inefficient, failure-prone, bandwidth bottlenecked, lack
+functionality, are insecure, and are not supported in servers) and
+that multi-core CPUs will ultimately prevail. Functionality which
+currently works best in a GPU will simply be integrated into
+tomorrow's multi-core CPUs and C compilers will naturally support that
+functionality. Once GPU capabilities are integrated into CPUs, there
+will be no more need to develop specialized code for a GPU. Today 16
+core CPUs are readily available for purchase in systems at reasonable
+prices, and this trend is certain to continue.</p>
+<p>Intel's <a class="reference external" href="http://en.wikipedia.org/wiki/Xeon_Phi">Xeon Phi</a> offers a
+61 core 'x86 CPU in a GPU-like plugin form-factor which provides over
+a TeraFLOP of performance. Being based on power-hungry plug-in cards,
+this solution suffers from many of the issues associated with GPUs.
+However, since it supports OpenMP, it may be a suitable target for
+executing some GraphicsMagick algorithms. Effective use of Xeon Phi
+currently requires use of Intel's development tools so from that
+standpoint it is not much more open than GPUs.</p>
+<p>Future multi-core CPUs will use a similar amount of power to today's
+CPUs, will idle at very low power consumption levels, and will fit
+into a very small chassis. Due to this trend, there is no value
+obtained by expending energy toward developing specialized code for
+today's GPUs.</p>
+</div>
+<div class="section" id="what-is-the-meaning-of-magick">
+<h1><a class="toc-backref" href="#id4">What is the meaning of "magick"?</a></h1>
+<p>According to the infamous British accultist <a class="reference external" href="http://en.wikipedia.org/wiki/Aleister_Crowley">Aleister Crowley</a>, the definition of
+<a class="reference external" href="http://en.wikipedia.org/wiki/Magick_(Aleister_Crowley)">magick</a> is
+"the science and art of causing change to occur in conformity with the
+will".</p>
+</div>
+<div class="section" id="how-can-i-process-many-files-at-once">
+<h1><a class="toc-backref" href="#id5">How can I process many files at once?</a></h1>
+<p>Use 'gm mogrify'. The 'mogrify' subcommand is designed to operate on
+any number of files in one command. Normally 'mogrify' overwrites the
+input files but the <cite>-output-directory</cite> option (which must appear
+before any input file names!) allows sending the modified files to a
+different directory (which could be in a subdirectory). For example:</p>
+<pre class="literal-block">
+gm mogrify -output-directory .thumbs -resize 320x200 *.jpg
+</pre>
+<p>If you encounter command line length limitations then you can have
+GraphicsMagick expand the file list by quoting the wildcard argument
+to prevent it from being expanded by your command shell:</p>
+<pre class="literal-block">
+gm mogrify -output-directory .thumbs -resize 320x200 "*.jpg"
+</pre>
+<p>and you can also retrieve a list of files to process from a text file
+(e.g. named 'files.txt') like:</p>
+<pre class="literal-block">
+gm mogrify -output-directory .thumbs -resize 320x200 @files.txt
+</pre>
+<p>where files.txt has one line per file name. If the input file paths
+contain relative sub-directory paths (e.g. "foo/file1", "bar/file2"),
+you can instruct GraphicsMagick to create a similar subdirectory
+structure under the output directory by adding the
+<cite>-create-directories</cite> option:</p>
+<pre class="literal-block">
+gm mogrify -output-directory .thumbs -create-directories -resize 320x200 @files.txt
+</pre>
+<p>Note that the algorithm used to generate output file names is quite
+simple. If -output-directory is "/foo" and the file path is
+"bar/none.jpg" then the final path will be "foo/bar/none.jpg". Based
+on this it should be clear that when <cite>-output-directory</cite> is used, file
+paths should be relative paths rather than absolute paths or else the
+concatenation won't work.</p>
+</div>
+<div class="section" id="i-received-the-following-message-delegation-failed-what-does-it-mean">
+<h1><a class="toc-backref" href="#id6">I received the following message, "?????? delegation failed ...". What does it mean?</a></h1>
+<p><em>GraphicsMagick</em> uses several freely available packages to perform the
+translation of certain image formats (<em>PostScript</em>, <em>MPEG</em>, etc.). Make
+sure these packages are available as described in the <a class="reference external" href="README.html">README</a> file. Also
+verify that you have plenty of temporary disk space. If not, set the
+MAGICK_TMPDIR (or TMPDIR) environment variable to an area where
+sufficient space is available. Finally, for <em>PostScript</em>, verify that
+Ghostscript supports the <em>pnmraw</em> or <em>ppmraw</em> device (<tt class="docutils literal">gs <span class="pre">-h</span></tt>) and that
+the document contains valid <em>PostScript</em> statements (<tt class="docutils literal">gs image.ps</tt>).</p>
+</div>
+<div class="section" id="how-do-i-set-the-transparency-index-in-a-gif-image-so-it-displays-properly-within-mozilla">
+<h1><a class="toc-backref" href="#id7">How do I set the transparency index in a GIF image so it displays properly within Mozilla?</a></h1>
+<p>Display your GIF image with <a class="reference external" href="display.html">display</a>. Choose <em>Matte</em> from the <em>Image
+Edit</em> command menu and identify a pixel that has the <em>transparency</em>
+color. Press <em>Method</em> and select a matte edit method from a pop-up menu.
+Choose from these methods:</p>
+<ul class="simple">
+<li>point</li>
+<li>replace</li>
+<li>floodfill</li>
+</ul>
+<p>The <em>point</em> method changes the matte value of any pixel selected with the
+pointer until the button is is released. The <em>replace</em> method changes the
+matte value of any pixel that matches the color of the pixel you select
+with a button press. <em>Floodfill</em> changes the matte value of any pixel
+that matches the color of the pixel you select with a button press and is
+a neighbor.</p>
+<p>Select your transparent pixel with the pointer and press a button. The
+image is redisplayed with any transparent pixels recolored to the
+background color. You can select other pixels or areas to force to
+transparent. When you are satisfied, press Return.</p>
+<p>Finally, choose <em>Save</em> from the command menu and write your GIF image to
+a file. <strong>Note that setting transparency works best on a TrueColor or
+DirectColor visual</strong>. If your server only exports colormapped visuals you
+will need to use a <em>Standard Colormap</em> to set transparency.</p>
+<pre class="literal-block">
+xstdcmap -best
+gm display -map list image.gif
+[ choose Matte Edit ]
+[ select your transparent pixel then press Return ]
+[ choose Save '
+</pre>
+<p>If you do not have the <em>xstdcmap(1)</em> program, try</p>
+<pre class="literal-block">
+gm display -visual TrueColor image.gif
+</pre>
+</div>
+<div class="section" id="how-can-i-stop-the-filenames-from-changing-in-the-title-bar-of-the-animate-1-image-window">
+<h1><a class="toc-backref" href="#id8">How can I stop the filenames from changing in the title bar of the animate(1) image window?</a></h1>
+<p><a class="reference external" href="animate.html">Animate</a> updates the image file name in the title bar of the image window
+as each image is displayed from the image sequence. To display just a
+single name that will not change, use <em>-title</em>:</p>
+<pre class="literal-block">
+gm animate -title "My Image Sequence" images.
+</pre>
+</div>
+<div class="section" id="the-image-grabbed-by-import-1-does-not-look-like-the-image-on-my-x-server-what-s-wrong">
+<h1><a class="toc-backref" href="#id9">The image grabbed by import(1) does not look like the image on my X server. What's wrong?</a></h1>
+<p>Use the <em>-descend</em> option:</p>
+<pre class="literal-block">
+gm import -descend image.miff
+</pre>
+<p>or set this X resource:</p>
+<pre class="literal-block">
+gm import.descend: True
+</pre>
+<p>By default, <a class="reference external" href="import.html">import</a> quickly grabs the image from the X server. However,
+it may not always have the correct colors in some areas. This can happen
+when a subwindow has a different colormap than its parent. With
+<em>-descend</em>, <a class="reference external" href="import.html">import</a> descends the window hierarchy. Descending involves
+grabbing the image and colormap of each window or subwindow associated
+with the window you select and compositing it on a blank canvas. This can
+be significantly slower than just grabbing the top-level window but
+ensures the correct image.</p>
+</div>
+<div class="section" id="how-do-i-animate-a-digital-yuv-image-sequence">
+<h1><a class="toc-backref" href="#id10">How do I animate a digital YUV image sequence?</a></h1>
+<p>Suppose your sequence is 72 352x240 frames titled frame0.Y, frame0.U,
+frame0.V, frame1.Y, frame1.U, etc. Use this command:</p>
+<pre class="literal-block">
+gm animate -geometry 352x240 -scene 0-71 yuv3:frame%d
+</pre>
+</div>
+<div class="section" id="how-do-i-change-the-default-postscript-page-size">
+<h1><a class="toc-backref" href="#id11">How do I change the default <em>PostScript</em> page size?</a></h1>
+<p>The default dimensions of a <em>PostScript</em> page is 612x792. If you prefer
+another default, change the page geometries (PSPageGeometry) in
+<cite>magick/image.h</cite> and recompile.</p>
+</div>
+<div class="section" id="i-get-a-memory-allocation-error-what-can-i-do">
+<h1><a class="toc-backref" href="#id12">I get a memory allocation error. What can I do?</a></h1>
+<p>Memory allocation is a complex topic in GraphicsMagick and image
+processing requires a lot of memory. GraphicsMagick tries to take best
+advantage of the resources available by optimizing its use of <em>virtual</em>
+memory. Virtual memory is normally the amount of RAM (Random Access
+Memory) available to the process plus the amount of free space in the
+system paging area (known as "swap" under Unix, or a "page file" under
+Windows). In addition to the RAM and the paging area, GraphicsMagick is
+able to expand the amount of virtual memory available by using
+memory-mapped files which cause the file to be treated as extra memory. A
+piece of hardware known as the Memory Management Unit (MMU) performs the
+magic which allows the system paging area and memory-mapped files to be
+treated as more memory by your system's CPU.</p>
+<p>Usually when a memory allocation error occurs, it is because the system's
+paging area is full, or the programs memory (heap) is fragmented badly
+enough that there is no large-enough block of memory available to satisfy
+the request. In some cases the operating system may artificially limit
+the memory available to the program. Failures of small memory allocations
+are generally considered fatal by GraphicsMagick. If it is impossible to
+allocate even a little bit of memory, then there is no point in
+continuing. When large memory allocations associated with allocating
+memory for image pixels fail, GraphicsMagick uses that as a key to know
+that it should start using memory-mapped temporary files to increase
+virtual memory. Under Unix and other POSIX-compliant systems, these
+memory-mapped temporary files are created in either the system default
+location (e.g. <cite>/var/tmp</cite>) or the directory set by the TMPDIR environment
+variable. Under Windows, temporary files are created in the directory set
+by the TEMP or TMP environment variable. Use the MAGICK_TMPDIR
+environment variable to specify a directory for GraphicsMagick to write
+its temporary files.</p>
+<p>If the temporary file directory is too small, or is itself mapped to the
+system's paging area (no win!), then GraphicsMagick will fail to allocate
+more virtual memory via the temporary file and will return an error.</p>
+<p>The single biggest factor in how much memory is required by
+GraphicsMagick is the QuantumDepth setting when it was compiled. The
+amount of memory (in bytes) required to store a single image in memory is
+may be calculated via the equation (QuantumDepth*Rows*Columns*5)/8. As a
+means of example, the following table shows the amount of memory consumed
+by a single 1024x768 image using the supported QuantumDepth settings:</p>
+<blockquote>
+<table border="1" class="docutils">
+<colgroup>
+<col width="46%" />
+<col width="54%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">QuantumDepth</th>
+<th class="head">Virtual Memory</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>8</td>
+<td>3MB</td>
+</tr>
+<tr><td>16</td>
+<td>8MB</td>
+</tr>
+<tr><td>32</td>
+<td>15MB</td>
+</tr>
+</tbody>
+</table>
+</blockquote>
+<p>Performing an image processing operation may require that several images
+be in memory at one time. In the case of animations, hundreds of images
+may be in memory at one time.</p>
+<p><em>GraphicsMagick</em> is designed to be general purpose. It can display many
+image storage formats (<em>Monochrome</em>, <em>PseudoColor</em>, or <em>TrueColor</em>) on
+many different types of X visuals (<em>StaticGray, StaticColor, PseudoColor,
+GrayScale, DirectColor,</em> or <em>TrueColor</em>). To support all these
+combinations of image storage formats and X visuals, extra memory is
+required. Additionally, <a class="reference external" href="animate.html">animate</a> and <a class="reference external" href="montage.html">montage</a> store an entire image
+sequence in memory.</p>
+<p>It is recommended that systems used to run <em>GraphicsMagick</em> have at least
+96MB of RAM and 140MB free in their paging area. Systems used to process
+large images (do the math!) may require considerably more memory to
+operate efficiently. GraphicsMagick is proven to be far more efficient at
+processing huge images when it is compiled as a 64-bit application on a
+64-bit capable CPU. RAM is typically 1000 times faster than disk, so it
+is important to keep as much data in RAM as possible (buy lots of RAM).
+The temporary file area should have plenty of free space. The size of the
+temporary file area is usually the deciding factor as to whether
+GraphicsMagick is able to complete an operation. With sufficient free
+disk space, GraphicsMagick is primarily limited by your CPU, your
+operating system's ability to address memory, and your degree of
+patience. GraphicsMagick has been used to process RGB images 64K by 64K
+pixels in size!</p>
+</div>
+<div class="section" id="how-do-i-concatenate-three-images-left-to-right-with-no-borders-frames-or-text">
+<h1><a class="toc-backref" href="#id13">How do I concatenate three images left-to-right with no borders, frames, or text?</a></h1>
+<p>Assume your three images are called image1.ppm, image2.ppm, and
+image3.ppm. Type</p>
+<pre class="literal-block">
+gm montage -mode concatenate -tile 3x1 image1.ppm image2.ppm \
+ image3.ppm concatenated.miff
+</pre>
+<p>To concatenate the images top-to-bottom, use -tile 1x3.</p>
+<p>For more control over the placement of an image, use <a class="reference external" href="composite.html">composite</a>. First
+create a matte image and position your images onto the matte. For
+example,</p>
+<pre class="literal-block">
+gm convert -size 350x500 xc:black composite.miff
+gm composite -geometry +0+0 composite.miff image1.gif composite.miff
+gm composite -geometry "+1"00+0 composite.miff image2.gif composite.miff
+gm composite -geometry +0+300 composite.miff image3.gif composite.miff
+gm composite -geometry +0+375 composite.miff image4.gif composite.miff
+</pre>
+</div>
+<div class="section" id="how-do-i-create-a-gif-animation-sequence-to-display-within-firefox">
+<h1><a class="toc-backref" href="#id14">How do I create a GIF animation sequence to display within Firefox?</a></h1>
+<p>Use <a class="reference external" href="convert.html">convert</a> with the <em>-delay</em> and <em>-page</em> options. The <em>-delay</em> option
+is used to specify the delay in <em>1/100ths of a second</em> between the
+display of each frame of the animation. For example,</p>
+<pre class="literal-block">
+gm convert -delay 20 frame*.gif animation.gif
+</pre>
+<p>You can also declare specific delays for each frame of the image
+sequence. For example, if the delay was 20, 10, and 5, use</p>
+<pre class="literal-block">
+gm convert -delay 20 frame1.gif -delay 10 frame2.gif \
+ -delay 5 frame3.gif animation.gif
+</pre>
+<p>Use <em>-page</em> to specify the <em>left</em> and <em>top</em> locations of the image frame</p>
+<pre class="literal-block">
+gm convert frame1.gif -page +50"+1"00 frame2.gif -page +0"+1"00 \
+ frame3.gif animation.gif
+</pre>
+<p>Finally, if you want the image to loop within <em>FireFox</em>, use <em>-loop</em></p>
+<pre class="literal-block">
+gm convert -loop 50 frame*.gif animation.gif
+</pre>
+<p>Note, that all the images are composited into a single multi-image GIF
+animation. If you want a single image produced for each frame, use
+<em>+adjoin</em></p>
+<pre class="literal-block">
+gm convert +adjoin images.* frames%d.gif
+</pre>
+</div>
+<div class="section" id="when-i-display-a-postscript-image-white-borders-are-trimmed">
+<h1><a class="toc-backref" href="#id15">When I display a <em>PostScript</em> image, white borders are trimmed.</a></h1>
+<p><em>GraphicsMagick</em> automatically trims any <em>PostScript</em> image as defined by
+the bounding box. To preempt this behavior, remove the bounding box
+statement from the <em>Postscript</em> or explicitly set the page size. For
+example,</p>
+<pre class="literal-block">
+gm display -page letter image.ps
+</pre>
+</div>
+<div class="section" id="what-are-visual-image-directories-how-do-i-use-them">
+<h1><a class="toc-backref" href="#id16">What are visual image directories? How do I use them?</a></h1>
+<p>A visual image directory (VID) is an image that contains thumbnails of
+one or more images in a file directory. Rather than displaying each
+individual image at its full resolution, you can browse the visual image
+directory and choose an image to display. You can create a VID with
+either of these commands:</p>
+<pre class="literal-block">
+gm montage *.jpg directory.vid
+gm convert 'vid:*.jpg' directory.vid
+</pre>
+<p>Of course you can substitute any filenames you desire. <a class="reference external" href="montage.html">Montage</a> has many
+relevant command line options. You can exercise more control over the
+appearance of the VID than with <a class="reference external" href="convert.html">convert</a>.</p>
+<p>Next display the directory:</p>
+<pre class="literal-block">
+gm display directory.vid
+</pre>
+<p>Finally browse and select an image to display. Move the pointer to the
+image and press button 3.</p>
+<p>You can create the VID directory with this command:</p>
+<pre class="literal-block">
+gm display 'vid:*.jpg'
+</pre>
+<p>You can also select <em>Visual Image...</em> from the <em>File</em> menu of the command
+widget.</p>
+<p><em>Note, that creating a VID is time consuming</em>. Creating them on-the-fly
+within <a class="reference external" href="display.html">display</a> may be less convenient than using <a class="reference external" href="montage.html">montage</a> or <a class="reference external" href="convert.html">convert</a> .
+Also, if you create them with <a class="reference external" href="montage.html">montage</a>. or <a class="reference external" href="convert.html">convert</a>, you can reuse them
+as often as necessary.</p>
+<p>Note that a visual image directory is useful for looking at individual
+frames of an image sequence:</p>
+<pre class="literal-block">
+gm display vid:movie.mpg
+</pre>
+</div>
+<div class="section" id="how-can-i-include-the-window-frame-when-importing-a-window">
+<h1><a class="toc-backref" href="#id17">How can I include the window frame when importing a window?</a></h1>
+<p>I use the window ID reported by <em>xwininfo(1)</em> with import and it does not
+include the window manager frame as expected. How can I save the window
+with its frame?</p>
+<p>By default, <em>xwininfo(1)</em> returns the ID of the window you click on. Use
+the <em>-frame</em> option to get the reparented window ID:</p>
+<pre class="literal-block">
+xwininfo -frame
+</pre>
+<p>You can then use the returned window ID with <a class="reference external" href="import.html">import</a>:</p>
+<pre class="literal-block">
+gm import -frame -window ID window.miff
+</pre>
+</div>
+<div class="section" id="i-displayed-an-image-and-it-appears-as-one-solid-color-what-did-i-do-wrong">
+<h1><a class="toc-backref" href="#id18">I displayed an image and it appears as one solid color. What did I do wrong?</a></h1>
+<p>A blank image generally means that the image is either corrupt or it has
+a matte channel and the matte values are all zero. <em>GraphicsMagick</em>
+treats a matte value of zero as completely transparent. To determine if
+this is the problem, try</p>
+<pre class="literal-block">
+gm display +matte image.miff
+</pre>
+</div>
+<div class="section" id="i-received-the-following-message-library-is-not-available">
+<h1><a class="toc-backref" href="#id19">I received the following message, "???? library is not available...".</a></h1>
+<p><em>GraphicsMagick</em> requires source libraries not included with the
+distribution to view or convert certain image formats such as JPEG or
+TIFF. The above message means you did not compile the required library
+and link with the <em>GraphicsMagick</em> utilities. See <a class="reference external" href="README.html">README</a> for the
+location of these libraries and compiling instructions.</p>
+</div>
+<div class="section" id="i-want-to-inspect-the-values-of-the-matte-channel-within-my-image">
+<h1><a class="toc-backref" href="#id20">I want to inspect the values of the matte channel within my image.</a></h1>
+<p>View the matte image as a gray scale image. Suppose you have a TIFF image
+that has a matte channel and is 640 pixels in width and 480 in height.
+Type:</p>
+<pre class="literal-block">
+gm convert image.tiff image.matte
+gm display -size 640x480 gray:image.matte
+</pre>
+</div>
+<div class="section" id="how-can-i-add-one-of-those-cool-bevels-to-my-image-that-i-see-used-on-the-web">
+<h1><a class="toc-backref" href="#id21">How can I add one of those cool bevels to my image that I see used on the Web?</a></h1>
+<p>There are four types of ornamental borders you can add to your image
+with GraphicsMagick. Each is listed below with the procedure to use
+them with your image.</p>
+<ul>
+<li><p class="first">Surround the image with a border of color</p>
+<p>Use -border followed by the width and height of the border. Set the
+color of the border with -bordercolor. For example, to surround your
+image with a red border that is 25 pixels wide on each side, use</p>
+<pre class="literal-block">
+gm convert -bordercolor red -border 25x25 image.jpg image.gif
+</pre>
+</li>
+<li><p class="first">Lighten or darken image edges to create a 3-D effect</p>
+<p>Use -raise followed by the width of the image edge. For example, to
+create a raised edge effect of 25 pixels, use</p>
+<pre class="literal-block">
+gm convert -raise 25 image.jpg image.gif
+</pre>
+</li>
+<li><p class="first">Surround the image with an ornamental frame</p>
+<p>Use -frame followed by the width and height of the frame. Set the
+color of the border with -mattecolor. For example, to surround your
+image with a gray frame that is 25 pixels wide on each side, use</p>
+<pre class="literal-block">
+gm convert -mattecolor gray -frame 25x25 image.jpg image.gif
+</pre>
+</li>
+<li><p class="first">Surround the image with a raised or sunken bevel</p>
+<p>Use -frame followed by the width and height of the bevel. Set the
+color of the border with -mattecolor. This is just like the
+description above except you specify a bevel width that matches the
+frame width. For example, to surround your image with a gray bevel
+that is 25 pixels wide on each side, use</p>
+<pre class="literal-block">
+gm convert -mattecolor gray -frame 25x25+0+25 image.jpg image.gif
+gm convert -mattecolor gray -frame 25x25+25+0 image.jpg image.gif
+</pre>
+</li>
+</ul>
+</div>
+<div class="section" id="i-try-to-launch-display-from-my-window-manager-and-it-fails-what-s-up">
+<h1><a class="toc-backref" href="#id22">I try to launch display from my window manager and it fails. What's up?</a></h1>
+<p><a class="reference external" href="display.html">Display</a> determines if it is executing interactively and behaves
+differently depending on the result. To convince display <display.html>
+you are running in an interactive environment when launching from a
+window manager, use either of</p>
+<pre class="literal-block">
+display logo:Untitled
+display < /dev/console
+</pre>
+<p>Note that this issue no longer exists as of GraphicsMagick 1.2.</p>
+</div>
+<div class="section" id="how-can-i-make-postscript-text-look-good">
+<h1><a class="toc-backref" href="#id23">How can I make Postscript text look good?</a></h1>
+<p>Simple. Increase the dots-per-inch when converting and sub-sample:</p>
+<pre class="literal-block">
+gm convert -density 288 -geometry 25% image.ps image.gif
+</pre>
+<p>Change the density to 144 and geometry to 50% if the above command fails
+due to insufficient memory. Alternatively, see the Ghostscript
+documentation about using high-quality fonts.</p>
+<p>The -density option increases the number of pixels (or dots) generated by
+Ghostscript when processing the input postscript file. However as all
+other images formats are generally displayed on screens which are
+typically about 72 to 100 dots per inch, the output image will be larger.</p>
+<p>The <em>-geometry</em> option reduces the large image output of ghostscript
+image back to a normal 72 dpi resolution (25% of 288 dpi gives 72 dpi)
+but in the process anti-aliases (or smooths) the fonts and lines of the
+image so as to remove the jaggies you would otherwise get from a normal
+postscript to image conversion.</p>
+</div>
+<div class="section" id="how-can-i-annotate-an-image-with-text-that-is-2-to-3-inches-tall">
+<h1><a class="toc-backref" href="#id24">How can I annotate an image with text that is 2 to 3 inches tall?</a></h1>
+<p>If you do not access to a particular named font that is large, try
+scalable fonts. First see if you have any scalable fonts. Type</p>
+<pre class="literal-block">
+xlsfonts -fn '*-0-0-0-0-*'
+</pre>
+<p>Or if you are using <a class="reference external" href="display.html">display</a>, use the font pattern above within the Font
+Browser (see Image Edit->Annotate). Next substitute the appropriate
+resolution. Keep in mind that a scalable font must be fully qualified to
+work. That is, all 14 fields must be specified. Here is one example where
+we annotate an image with large <em>Helvetica</em> text:</p>
+<pre class="literal-block">
+gm convert -font '-*-helvetica-*-*-*--300-300-*-*-*-*-iso8859-1' \
+ -fill green -draw 'text 50,300 Magick' image.gif annotated.gif
+</pre>
+<p>If you have the FreeType support built into GraphicsMagick, just
+increase your pointsize and/or density:</p>
+<pre class="literal-block">
+gm convert -font Helvetica -pointsize 100 -density 300 ...
+</pre>
+</div>
+<div class="section" id="how-can-i-convert-my-gif-animation-sequence-to-individual-image-files">
+<h1><a class="toc-backref" href="#id25">How can I convert my GIF animation sequence to individual image files?</a></h1>
+<p>Use the scene embedded file format with <a class="reference external" href="convert.html">convert</a>:</p>
+<pre class="literal-block">
+gm convert animation.gif +adjoin frame%02d.gif
+</pre>
+<p>The resulting image files are titled frame01.gif, frame02.gif,
+frame03.gif, etc.</p>
+</div>
+<div class="section" id="how-can-i-remove-the-background-that-prints-around-my-image-when-i-display-it-with-firefox">
+<h1><a class="toc-backref" href="#id26">How can I remove the background that prints around my image when I display it with Firefox?</a></h1>
+<p>Use the +page option of the <a class="reference external" href="convert.html">convert</a> command:</p>
+<pre class="literal-block">
+gm convert +page alpha.gif beta.gif
+</pre>
+<p>GIF allows for a page offset relative to some background. The page
+offset information may have been in your GIF image already or it
+could have been introduced by GraphicsMagick. Either way, +page
+removes the unwanted page offset and FireFox should behave as
+expected.</p>
+</div>
+<div class="section" id="how-do-i-create-a-gif-or-png-image-with-web-safe-colors">
+<h1><a class="toc-backref" href="#id27">How do I create a GIF or PNG image with Web safe colors?</a></h1>
+<p>Web safe colors are not normally needed any more since almost all
+computers now have true color displays. However, this FAQ may still be
+useful since it demonstrates how a colormap from an image may be
+applied to another image..</p>
+<p>Use the -map option of the <a class="reference external" href="convert.html">convert</a> command:</p>
+<pre class="literal-block">
+gm convert -map netscape: alpha.gif beta.gif
+</pre>
+<p>Netscape predefines 216 colors for colormapped displays. Use the above
+command to ensure only these predefined colors are used. Otherwise
+Netscape dithers your image with varying degrees of image fidelity.</p>
+</div>
+<div class="section" id="how-can-i-add-a-matte-layer-to-my-image">
+<h1><a class="toc-backref" href="#id28">How can I add a matte layer to my image?</a></h1>
+<p>One way is to use a bitmap as your transparency mask First, use the
+-matte option to add an all-opaque opacity channel, then use the
+composite utility to copy the graylevel samples from the mask file
+into your new opacity channel:</p>
+<pre class="literal-block">
+gm convert image.gif -matte temp.miff
+gm composite -compose CopyOpacity mask.xbm temp.miff transparent.gif
+</pre>
+<p>Note, GIF is limited to one transparent color. If your mask has
+variable opacity, use a format like MIFF, TIFF, or PNG as your output
+image format.</p>
+</div>
+<div class="section" id="how-can-i-draw-with-text-using-convert-under-windows-nt">
+<h1><a class="toc-backref" href="#id29">How can I draw with text using 'convert' under Windows NT?</a></h1>
+<p>The problem is that NT interprets the command line differently than
+Unix does, causing the documented command to fail. The following
+command has been reported to work correctly (all on one line):</p>
+<pre class="literal-block">
+gm convert -font Arial -fill blue -draw "text 10,10 'your text here'" \
+ d:\test.tif png:d:\test.png
+</pre>
+<p>and here is another example which is reported to work (which relies
+on Ghostscript's 'gs' program to installed):</p>
+<pre class="literal-block">
+gm convert.exe -pointsize 18 -draw "text 0,0 "This is my text!"" \
+ C:\blank.gif c:\text.gif
+</pre>
+</div>
+<div class="section" id="why-are-my-jpeg-files-larger-than-expected">
+<h1><a class="toc-backref" href="#id30">Why are my JPEG files larger than expected?</a></h1>
+<p>Your JPEG files may contain embedded "profiles" such as Exif or IPTC,
+or they may contain uncompressed thumbnails. You can use the <cite>+profile
+"*"</cite> commandline option or an equivalent API method to remove them.</p>
+</div>
+<div class="section" id="how-do-i-extract-a-single-image-from-a-multi-image-file">
+<h1><a class="toc-backref" href="#id31">How do I extract a single image from a multi-image file?</a></h1>
+<p>Use a square-bracket syntax to indicate which frame or frames you
+want. For example,</p>
+<pre class="literal-block">
+gm convert "Image.gif[0]" first.gif
+</pre>
+<p>Will extract the first image (scene 0) from a GIF animation. Be sure
+to surround the file specification with quotation marks, to prevent
+the shell from interpreting the square brackets.</p>
+</div>
+<div class="section" id="how-can-i-extract-and-combine-cmyk-channels-in-a-cmyk-image">
+<h1><a class="toc-backref" href="#id32">How can I extract and combine CMYK channels in a CMYK image?</a></h1>
+<p>GraphicsMagick 1.2.2 and later support combining multiple channels in of
+any image file format in order to create a CMYK image file. For example,
+starting with a CMYK JPEG file, we can create a set of separate files
+with one file per channel:</p>
+<pre class="literal-block">
+gm convert cmyk.jpg -channel cyan cyan.tiff
+gm convert cmyk.jpg -channel magenta magenta.tiff
+gm convert cmyk.jpg -channel yellow yellow.tiff
+gm convert cmyk.jpg -channel black black.tiff
+</pre>
+<p>and then we can join them back together:</p>
+<pre class="literal-block">
+gm composite -compose CopyMagenta magenta.tiff cyan.tiff result.tiff
+gm composite -compose CopyYellow yellow.tiff result.tiff result.tiff
+gm composite -compose CopyBlack black.tiff result.tiff result.tiff
+</pre>
+<p>Perhaps it is possible to accomplish this in one composite command. We
+will leave that as an exercise for later. Note that it is possible to
+extract just one channel, manipulate it, and then insert it back into the
+original image file.</p>
+<p>There is also built-in support for a <em>Partition</em> interlace format which
+can split to a set of files, and join a set of files, but the only
+supported format is a raw format which is not easy to deal with.</p>
+</div>
+<div class="section" id="how-can-i-create-a-solid-or-patterned-canvas-image">
+<h1><a class="toc-backref" href="#id33">How can I create a solid or patterned canvas image?</a></h1>
+<p>Canvas images may be created using the 'XC:' or 'TILE:' pseudo-image
+formats. XC produces solid color images based on an color you specify
+while TILE produces a tiled image based on an an image you specify. Both
+of these require that the desired size be specified, and the desired
+image type may be specified as well.</p>
+<p>To create a solid red canvas image:</p>
+<pre class="literal-block">
+gm convert -size 640x480 xc:red canvas.tiff
+</pre>
+<p>or using hex syntax to specify the color:</p>
+<pre class="literal-block">
+gm convert -size 640x480 "xc:#f00" canvas.tiff
+</pre>
+<p>To create a solid red canvas image using truecolor pixels:</p>
+<pre class="literal-block">
+gm convert -size 640x480 -type TrueColor xc:red canvas.tiff
+</pre>
+<p>To create a patterned canvas image using a built-in crosshatch pattern:</p>
+<pre class="literal-block">
+gm convert -size 640x480 tile:image:CROSSHATCH45 canvas.tiff
+</pre>
+<p>To create a patterned canvas image using a user-supplied image:</p>
+<pre class="literal-block">
+gm convert -size 640x480 tile:myimage.tiff canvas.tiff
+</pre>
+</div>
+<div class="section" id="what-does-identify-report">
+<h1><a class="toc-backref" href="#id34">What does <cite>identify</cite> report?</a></h1>
+<p>GraphicsMagick is sophisticated image handling software supporting
+perhaps a hundred formats, and hundreds of subformats, yet it needs to
+be able to apply image processing algorithms in a consistent way, and
+save to many output formats. Some image types are radically different
+from others. Due to this, GraphicsMagick normalizes images it reads
+into only nine internal in-memory formats (see the description of
+-type) which are a specialization of just two internal formats. The
+<cite>identify</cite> command reports the characteristics of one of those
+internal formats rather than the genuine properties of the input image
+file. In fact, if the properties of all the input files were to be
+reported, it would require a book to describe all of the properties.
+For example, the WMF vector-drawing format is much different from the
+PNG image file format, yet GraphicsMagick can read both.</p>
+<p>Only limited original properties are preserved, and it depends on how
+GraphicsMagick was built. For example, a "Q8" build can only report
+up to a depth of 8 bits, but a "Q32" build can report a depth of up to
+32 bits. The original image depth is reported if it is at least 8
+bits, and equal to or less than the build depth.</p>
+<p>By default <cite>identify</cite> reports only the most basic properties:</p>
+<pre class="literal-block">
+% gm identify seaworld.jpg
+seaworld.jpg JPEG 1530x1020+0+0 DirectClass 8-bit 204.0K 0.000u 0:01
+</pre>
+<p>but with -verbose it can report on a large number of properties.</p>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</div>
+</body>
+</html>
core CPUs are readily available for purchase in systems at reasonable
prices, and this trend is certain to continue.
-Intel's `Xeon Phi <http://en.wikipedia.org/wiki/Xeon_Phi>`_ offers a
-61 core 'x86 CPU in a GPU-like plugin form-factor which provides over
-a TeraFLOP of performance. Being based on power-hungry plug-in cards,
-this solution suffers from many of the issues associated with GPUs.
-However, since it supports OpenMP, it may be a suitable target for
-executing some GraphicsMagick algorithms. Effective use of Xeon Phi
-currently requires use of Intel's development tools so from that
-standpoint it is not much more open than GPUs.
-
Future multi-core CPUs will use a similar amount of power to today's
CPUs, will idle at very low power consumption levels, and will fit
into a very small chassis. Due to this trend, there is no value
obtained by expending energy toward developing specialized code for
-today's GPUs.
+today's GPUs in GraphicsMagick.
What is the meaning of "magick"?
--------------------------------
-According to the infamous British accultist `Aleister Crowley
+According to the infamous British occultist `Aleister Crowley
<http://en.wikipedia.org/wiki/Aleister_Crowley>`_, the definition of
`magick <http://en.wikipedia.org/wiki/Magick_(Aleister_Crowley)>`_ is
"the science and art of causing change to occur in conformity with the
seaworld.jpg JPEG 1530x1020+0+0 DirectClass 8-bit 204.0K 0.000u 0:01
but with -verbose it can report on a large number of properties.
-
---------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
version" without any options, and looking for "Q:16" in the first line
of output.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
filenames from that file. This is convenient in the event you have too
many image filenames to fit on the command line.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
use different endianness.
</dd>
<dt>dpx:swap-samples={true|false}</dt>
+<dt>dpx:swap-samples-read={true|false}</dt>
+<dt>dpx:swap-samples-write={true|false}</dt>
<dd>GraphicsMagick strives to adhere to the DPX standard but certain
-aspects of the standard can be quite confusing. As a result, some 10-bit
-DPX files have Red and Blue interchanged, or Cb and Cr interchanged due
-to an different interpretation of the standard, or getting the wires
-crossed. The swap-samples option may be supplied when reading or writing
-in order to read or write using the necessary sample order.
+aspects of the standard can be quite confusing. As a result, some
+10-bit DPX files have Red and Blue interchanged, or Cb and Cr
+interchanged due to an different interpretation of the standard, or
+getting the wires crossed. The swap-samples option may be supplied
+when reading or writing in order to read or write using the necessary
+sample order. Use swap-samples-read when swapping should only occur
+in the reader, or swap-samples-write when swapping should only occur
+in the writer.
</dd>
<dt>gradient:direction={South|North|West|East|NorthWest|NorthEast|SouthWest|SouthEast}</dt>
<dd>By default, the gradient coder produces a gradient from top to
<table width="90%" border="0" cellspacing="0" cellpadding="8"> <tr><td width="6%"><br></td><td><font size="-1">
If the image does not have a matte channel, create an opaque one.</font></td></tr></table>
<table width="90%" border="0" cellspacing="0" cellpadding="8"> <tr><td width="6%"><br></td><td><font size="-1">
-Use <strong>+matte</strong> to ignore the matte channel and to avoid writing a
+Use <strong>+matte</strong> to ignore the matte channel (treats it as opaque) and to avoid writing a
matte channel in the output file.</font></td></tr></table>
+<table width="90%" border="0" cellspacing="0" cellpadding="8"> <tr><td width="6%"><br></td><td><font size="-1">
+For the compare command, <strong>-matte</strong> will add an opaque matte
+channel to images if they do not already have a matte channel, and
+matte will be enabled for both images. Likewise, if <strong>+matte</strong> is
+used, the matte channel is disabled for both images. This makes it
+easier to compare images regardless of if they already have a matte
+channel.</font></td></tr></table>
<table BORDER=0 WIDTH="94%">
<tr>
<td width="3%"><br></td>
<table width="90%" border="0" cellspacing="0" cellpadding="8"> <tr><td width="6%"><br></td><td><font size="-1">Select an operator from <strong>Add</strong>, <strong>And</strong>, <strong>Assign</strong>,
<strong>Depth</strong>, <strong>Divide</strong>, <strong>Gamma</strong>, <strong>Negate</strong>,
<strong>LShift</strong>, <strong>Log</strong>, <strong>Max</strong>, <strong>Min</strong>, <strong>Multiply</strong>,
-<strong>Or</strong>, <strong>Pow</strong> <strong>RShift</strong>, <strong>Subtract</strong>,
+<strong>Or</strong>, <strong>Pow</strong>, <strong>RShift</strong>, <strong>Subtract</strong>,
<strong>Threshold</strong>, <strong>Threshold-White</strong>,
<strong>Threshold-White-Negate</strong>, <strong>Threshold-Black</strong>,
<strong>Threshold-Black-Negate</strong>, <strong>Xor</strong>, <strong>Noise-Gaussian</strong>,
<a href="#xres">X Resources</a>
for details.</font></td></tr></table>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
just one thread. See the OpenMP specification for other standard
adjustments and your compiler's manual for vendor-specific settings.</td></tr></table>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
</typemap>
</pre></font></td></tr></table>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
</em>
<br> <br>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
http://www.GraphicsMagick.org/Copyright.html for details.
<p>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<HR>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Mercurial</title>
<meta content="GraphicsMagick is a robust collection of tools and libraries to read, write, and manipulate an image in any of the more popular image formats including GIF, JPEG, PNG, PDF, and Photo CD. With GraphicsMagick you can create GIFs dynamically making it suitable for Web applications. You can also resize, rotate, sharpen, color reduce, or add special effects to an image and save your completed work in the same or differing image format. " name="description" />
<meta content="GraphicsMagick, PerlMagick, visualization, image processing, software development, simulation, image, software, Magick++" name="keywords" />
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-mercurial">
<!-- This text is in reStucturedText format, so it may look a bit odd. -->
<!-- See http://docutils.sourceforge.net/rst.html for details. -->
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#what-is-mercurial" id="id1">What is Mercurial?</a></li>
<li><a class="reference internal" href="#web-access" id="id2">Web Access</a></li>
<pre class="literal-block">
hg clone http://hg.code.sf.net/p/graphicsmagick/code GM
</pre>
+<p>Please note that since the introduction of an HTTP load balancer,
+SourceForge has become unreliable when cloning with the default http
+protocol. Due to this, using ssh protocol may be required. Any
+SourceForge user who has submitted a SSH private key to SourceForge
+may use Mercurial over SSH to clone the repository. The ssh clone
+syntax looks like this (replacing <cite>YOURID</cite> with your SourceForge user
+name):</p>
+<blockquote>
+hg clone <a class="reference external" href="ssh://YOURID@hg.code.sf.net/p/graphicsmagick/code">ssh://YOURID@hg.code.sf.net/p/graphicsmagick/code</a> GM</blockquote>
</div>
<div class="section" id="selecting-a-version-of-the-code">
<h1><a class="toc-backref" href="#id4">Selecting a version of the code</a></h1>
<li><a class="reference external" href="https://www.mercurial-scm.org/wiki/MergeToolConfiguration">Merge Tool Configuration</a></li>
<li><a class="reference external" href="https://www.mercurial-scm.org/wiki/TipsAndTricks#Keep_.22My.22_or_.22Their.22_files_when_doing_a_merge">Keep "My" or "Their" files when doing a merge</a></li>
</ul>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2012 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Mercurial</title>
+<meta content="GraphicsMagick is a robust collection of tools and libraries to read, write, and manipulate an image in any of the more popular image formats including GIF, JPEG, PNG, PDF, and Photo CD. With GraphicsMagick you can create GIFs dynamically making it suitable for Web applications. You can also resize, rotate, sharpen, color reduce, or add special effects to an image and save your completed work in the same or differing image format. " name="description" />
+<meta content="GraphicsMagick, PerlMagick, visualization, image processing, software development, simulation, image, software, Magick++" name="keywords" />
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-mercurial">
+<h1 class="title">GraphicsMagick Mercurial</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#what-is-mercurial" id="id1">What is Mercurial?</a></li>
+<li><a class="reference internal" href="#web-access" id="id2">Web Access</a></li>
+<li><a class="reference internal" href="#cloning-the-mercurial-repository" id="id3">Cloning the Mercurial Repository</a></li>
+<li><a class="reference internal" href="#selecting-a-version-of-the-code" id="id4">Selecting a version of the code</a></li>
+<li><a class="reference internal" href="#updating-from-the-mercurial-repository" id="id5">Updating from the Mercurial Repository</a></li>
+<li><a class="reference internal" href="#mercurial-software" id="id6">Mercurial Software</a></li>
+<li><a class="reference internal" href="#mercurial-for-graphicsmagick-developers" id="id7">Mercurial for GraphicsMagick Developers</a></li>
+<li><a class="reference internal" href="#ssh-public-keys-for-hg-graphicsmagick-org" id="id8">SSH Public Keys For hg.GraphicsMagick.org</a></li>
+<li><a class="reference internal" href="#email-notifications" id="id9">Email Notifications</a></li>
+<li><a class="reference internal" href="#mercurial-topics" id="id10">Mercurial Topics</a></li>
+</ul>
+</div>
+<p>The GraphicsMagick source code is available via <a class="reference external" href="https://www.mercurial-scm.org/">Mercurial</a>. <a class="reference external" href="https://www.mercurial-scm.org/">Mercurial</a>
+is a convenient way for developers from around the country or world to
+download the GraphicsMagick source, fix bugs, or add new features.
+Due to the way <a class="reference external" href="https://www.mercurial-scm.org/">Mercurial</a> works, it may also be used to manage local
+changes to GraphicsMagick.</p>
+<div class="section" id="what-is-mercurial">
+<h1><a class="toc-backref" href="#id1">What is Mercurial?</a></h1>
+<p><a class="reference external" href="https://www.mercurial-scm.org/">Mercurial</a> (also known as <cite>Hg</cite> due to the abbreviation for Mercury in
+the periodic table of the elements) is a modern source control system
+which provides anyone who clones a repository with a stand-alone local
+repository containing the full development history and the ability to
+select any version of the code. Since the local repository is
+fully-functional, you may use the same repository to manage your local
+changes to GraphicsMagick code and you may use the repository to share
+your changes with others.</p>
+</div>
+<div class="section" id="web-access">
+<h1><a class="toc-backref" href="#id2">Web Access</a></h1>
+<p>The <a class="reference external" href="http://hg.code.sf.net/p/graphicsmagick/code/">GraphicsMagick repository at SourceForge</a> web interface is
+available which may be used to interactively view the latest versions
+of files, or the changes to files, using your web browser.</p>
+</div>
+<div class="section" id="cloning-the-mercurial-repository">
+<h1><a class="toc-backref" href="#id3">Cloning the Mercurial Repository</a></h1>
+<p>To get the tree and place it in a sub-directory of your current working
+directory, issue the command:</p>
+<pre class="literal-block">
+hg clone http://hg.code.sf.net/p/graphicsmagick/code GM
+</pre>
+</div>
+<div class="section" id="selecting-a-version-of-the-code">
+<h1><a class="toc-backref" href="#id4">Selecting a version of the code</a></h1>
+<p>By default the cloned directory is populated with files from the
+<cite>default</cite> (i.e. head) branch of the code, which is where active
+development happens.</p>
+<p>If you require a specific release of GraphicsMagick (e.g. 1.3.23), you may select it like:</p>
+<pre class="literal-block">
+hg update -r GraphicsMagick-1_3_23
+</pre>
+<p>or if you require a specific branch of GraphicsMagick (e.g. 1.3), you may use:</p>
+<pre class="literal-block">
+hg update -r GraphicsMagick-1_3
+</pre>
+<p>or you may request the files which were current on a specific date:</p>
+<pre class="literal-block">
+hg update -d 2009-01-14
+</pre>
+<p>Use:</p>
+<pre class="literal-block">
+hg branches
+</pre>
+<p>to see the available branches, and:</p>
+<pre class="literal-block">
+hg tags
+</pre>
+<p>to see the available release tags.</p>
+</div>
+<div class="section" id="updating-from-the-mercurial-repository">
+<h1><a class="toc-backref" href="#id5">Updating from the Mercurial Repository</a></h1>
+<p>To pull more changes from the repository, execute:</p>
+<pre class="literal-block">
+hg pull
+</pre>
+<p>and to make them visible in your files (via a merge), execute:</p>
+<pre class="literal-block">
+hg update
+</pre>
+<p>or just:</p>
+<pre class="literal-block">
+hg pull -u
+</pre>
+<p>The latter pulls down any updates into your local repository and
+automatically does a merge.</p>
+</div>
+<div class="section" id="mercurial-software">
+<h1><a class="toc-backref" href="#id6">Mercurial Software</a></h1>
+<p>The best place to look for the latest version of Mercurial (<cite>Hg</cite>) is
+at the <a class="reference external" href="https://www.mercurial-scm.org/">Mercurial</a> web site. Most free operating systems (e.g. Linux,
+OpenIndiana, and *BSD) will offer a version of Mercurial as an
+installable package and it may already be installed on your system.
+We recommend use of <a class="reference external" href="https://tortoisehg.bitbucket.io/">TortoiseHg</a> on Microsoft Windows systems since it
+provides a very nice graphical interface. <a class="reference external" href="https://tortoisehg.bitbucket.io/">TortoiseHg</a> is also
+available on Linux and other systems.</p>
+</div>
+<div class="section" id="mercurial-for-graphicsmagick-developers">
+<h1><a class="toc-backref" href="#id7">Mercurial for GraphicsMagick Developers</a></h1>
+<p>Since <a class="reference external" href="https://www.mercurial-scm.org/">Mercurial</a> is a distributed revision control system, you may
+clone the GraphicsMagick repository and work for days or weeks (making
+your own local commits) before you decide to push some or all of your
+changes to the GraphicsMagick development repository. GraphicsMagick
+developers first commit changes to their own local respository, then
+they push their changes to the GraphicsMagick development repository
+at hg.graphicsmagick.org, later on (after testing and possible fixes)
+I will push the changes to the stable repository at SourceForge.
+Pushes to the stable repository at SourceForge should occur at least
+as often as source code snapshots are produced.</p>
+<p>The repository hierarchy is as follows:</p>
+<ol class="arabic simple">
+<li>Local</li>
+</ol>
+<blockquote>
+The developer makes any local changes and commits what he likes in his
+own repository. It is best to commit often and whenever all the
+files have been updated to implement a coherent change or feature
+(including the ChangeLog file!) since <a class="reference external" href="https://www.mercurial-scm.org/">Mercurial</a> stores related
+changes as a changeset along with the change message you enter.
+When you push your repository, these changesets and messages are
+preserved.</blockquote>
+<ol class="arabic simple" start="2">
+<li>Unstable</li>
+</ol>
+<blockquote>
+<p>The unstable development repository is available via ssh at
+"<a class="reference external" href="ssh://yourid@hg.GraphicsMagick.org//hg/GraphicsMagick">ssh://yourid@hg.GraphicsMagick.org//hg/GraphicsMagick</a>".</p>
+<p>Where <cite>yourid</cite> is the Unix user ID on the GraphicsMagick server.
+The <cite>yourid@</cite> part may left out if your client system uses the same
+user ID as on the GraphicsMagick server.</p>
+</blockquote>
+<ol class="arabic simple" start="3">
+<li>Stable</li>
+</ol>
+<blockquote>
+The stable repository is available via http at
+"<a class="reference external" href="http://hg.code.sf.net/p/graphicsmagick/code">http://hg.code.sf.net/p/graphicsmagick/code</a>". Any changes in the
+unstable development repository are pushed to the stable repository
+(by the developer responsible for this role) once any necessary
+adjustments have been made, documentation files have been generated,
+and the software test suite has passed on at least one machine.</blockquote>
+<p>To build your local development repository (as quickly as possible),
+you may use these steps:</p>
+<ol class="arabic">
+<li><p class="first">Clone the stable respository at SourceForge:</p>
+<pre class="literal-block">
+hg clone http://hg.code.sf.net/p/graphicsmagick/code GM
+</pre>
+</li>
+<li><p class="first">Adjust your local repository path default to use the unstable repository.</p>
+<p>Edit .hg/hgrc in your local repository so that it contains:</p>
+<pre class="literal-block">
+[paths]
+default = ssh://yourid@hg.GraphicsMagick.org//hg/GraphicsMagick
+</pre>
+<p>where <cite>yourid</cite> is the Unix user ID on the GraphicsMagick server.</p>
+</li>
+<li><p class="first">Pull any additional pending updates from the unstable repository:</p>
+<pre class="literal-block">
+hg pull -u
+</pre>
+</li>
+</ol>
+<p>Please note that when ssh access is used, Mercurial uncompresses any
+data and sends it in uncompressed form. Mercurial expects that
+compression will be enabled in ssh when needed. One way to enable ssh
+compression is to put this in your local .hgrc:</p>
+<pre class="literal-block">
+[ui]
+ssh = ssh -C
+</pre>
+<p>but ssh also provides its own way to enable compression on a
+site-by-site basis (e.g. via .ssh/config). For example an entry in
+.ssh/config will enable use of compression:</p>
+<pre class="literal-block">
+Host hg.GraphicsMagick.org
+ Compression yes
+</pre>
+</div>
+<div class="section" id="ssh-public-keys-for-hg-graphicsmagick-org">
+<h1><a class="toc-backref" href="#id8">SSH Public Keys For hg.GraphicsMagick.org</a></h1>
+<p>For reference, these are the ssh public keys for the server at hg.GraphicsMagick.org:</p>
+<p>DSS (DSA):</p>
+<pre class="literal-block">
+ssh-dss AAAAB3NzaC1kc3MAAACBANZAsDZ9fUWQNwUoRw8HoNl8aLLs97KmyiaA6mSPeM1NeQKrxk0PAFEXMR05CNcZHSyopUx6B8PuTWE4+4rDhFCw7J0JkfFS4uIG3bu3YCRqQrg2k4VsDw60zK9sNum5BcLEWd+qs8X7DrEff5fGmXkc8IdMXPgHTzaJWCT9YJU1AAAAFQCJaFq4/7FqHcHm5abhW5qJyH0RgQAAAIEAgv6s3gfB8p/Elf0ZcIZ5eITCpI9aZFaSLSeKHMmhYps1uMuZ9LtWjZ11cotcuOh0tlwGUixlu/5soZqX6VbnJAuyvfI+7WSUFuJmRjsbXJVCBuSPZ7YgMNuLYlLst7sZLCs5hU61jxnaR2zmkUjDWP4GWROC6AYZXlbJX1qRJ7YAAACBAMsIbVVgz/aP95yCPk1Pw0FjoL5t6C3BpxdA9aiIFBMg14ElaHh+gaXQoZfjAuafZ8pc5woYtQLLkzinCQnmvH/EqqYCe+Fu7jcsYU7oWUXG1O9ZBKI7QZkeCTaYMXIWBplgVD+tkRpH/gxn5iweNMM9e43qPB0b2JYObliqD1E9 root@src
+</pre>
+<p>RSA:</p>
+<pre class="literal-block">
+ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1IuJDYT85qz/w6+vn5hkpzM5Ju5dsMeJD9GnATj3op5dhBWyfbaJpS7yyK2Vhhz26GBUvUtO3LGm0dQvdj83P3DX3aUuzfnC3Bc9dWeARomQPtDy9MfDikD6kqjD9/Lemgvv8I4Na9vUEmYvXUpTrtawJ4S7A7IctPnvKLPGA5+qY5XzMSE0wcOSBdbeV1PAIDOXYH2hKakZwtxXlvfTv6CZphz/jG5nmf+/Zlkr4yopNvPFbtd3vbaaqSuCoGHXKfmpRko2gXf6EGF92wXzbsE1tW3AkSJ2xdhFHRNmQEu2y9F1l9zb8IETBtKMWRJWAsPPpUSkht0DRsTXt/f+Zw== root@src
+</pre>
+<p>ECDSA:</p>
+<pre class="literal-block">
+ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOrGQ6tjmZvm8w+GP7yLFJ1/vkImKkpXv7kPNxA0+Sfx6WCqAjV0pWP5MVCraP8SNbphL8jiS/x3WADXlf+R2KQ= root@src
+</pre>
+<p>ED25519:</p>
+<pre class="literal-block">
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAtwIcJEBiSUWsB2sydInR76gE84Jp1rxmc8lTGPg5cB root@src
+</pre>
+</div>
+<div class="section" id="email-notifications">
+<h1><a class="toc-backref" href="#id9">Email Notifications</a></h1>
+<p>An email notification is sent to the <a class="reference external" href="https://lists.sourceforge.net/lists/listinfo/graphicsmagick-commit">graphicsmagick-commit</a> mailing
+list at SourceForge whenever a change is submitted to the development
+(unstable) repository. Subscribe to this list if you would like to be
+notified by email of changes when they occur.</p>
+</div>
+<div class="section" id="mercurial-topics">
+<h1><a class="toc-backref" href="#id10">Mercurial Topics</a></h1>
+<ul class="simple">
+<li><a class="reference external" href="https://www.mercurial-scm.org/wiki/MergeToolConfiguration">Merge Tool Configuration</a></li>
+<li><a class="reference external" href="https://www.mercurial-scm.org/wiki/TipsAndTricks#Keep_.22My.22_or_.22Their.22_files_when_doing_a_merge">Keep "My" or "Their" files when doing a merge</a></li>
+</ul>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2012 - 2020</p>
+</div>
+</div>
+</body>
+</html>
hg clone http://hg.code.sf.net/p/graphicsmagick/code GM
+Please note that since the introduction of an HTTP load balancer,
+SourceForge has become unreliable when cloning with the default http
+protocol. Due to this, using ssh protocol may be required. Any
+SourceForge user who has submitted a SSH private key to SourceForge
+may use Mercurial over SSH to clone the repository. The ssh clone
+syntax looks like this (replacing `YOURID` with your SourceForge user
+name):
+
+ hg clone ssh://YOURID@hg.code.sf.net/p/graphicsmagick/code GM
+
Selecting a version of the code
========================================
* `Merge Tool Configuration <https://www.mercurial-scm.org/wiki/MergeToolConfiguration>`_
* `Keep "My" or "Their" files when doing a merge <https://www.mercurial-scm.org/wiki/TipsAndTricks#Keep_.22My.22_or_.22Their.22_files_when_doing_a_merge>`_
-
-
---------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2012 - 2020
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>UNIX/Cygwin/MinGW/MSYS2 Compilation</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="unix-cygwin-mingw-msys2-compilation">
<col class="option" />
<col class="description" />
<tbody valign="top">
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--disable-compressed-files</span></kbd></td>
+</tr>
+<tr><td> </td><td><p class="first">disable reading and writing of gzip/bzip stream files</p>
+<p class="last">Normally support for being able to read and write gzip/bzip stream
+files (files which are additionally compressed using gzip or bzip)
+is a good thing, but for some formats it is necessary to
+decompress an entire input file before it may be validated and
+read. Decompressing the file may take a lot of time and disk
+space. If input files are not trustworthy, an apparently small
+file can take much more resources than expected. Use this option
+to reject such files.</p>
+</td></tr>
<tr><td class="option-group">
<kbd><span class="option">--enable-prof</span></kbd></td>
<td>enable 'prof' profiling support (default disabled)</td></tr>
almost as easy to compile GraphicsMagick under MSYS2 as it is under
Linux!</p>
<p>When using MSYS2, requesting to install these packages using 'pacman
--S' (in addition to compilation tools for C/C++) should result in
-getting up to speed very quicky with a featureful build:</p>
-<p>mingw-w64-x86_64-bzip2, mingw-w64-x86_64-freetype,
-mingw-w64-x86_64-ghostscript, mingw-w64-x86_64-jbigkit,
-mingw-w64-x86_64-lcms2, mingw-w64-x86_64-libjpeg-turbo,
-mingw-w64-x86_64-libpng, mingw-w64-x86_64-libtool,
-mingw-w64-x86_64-libwebp mingw-w64-x86_64-libwmf,
-mingw-w64-x86_64-libxml2, mingw-w64-x86_64-zlib</p>
+-S' should result in getting up to speed very quicky with a featureful
+build:</p>
+<p>mingw-w64-x86_64-toolchain, mingw-w64-x86_64-bzip2,
+mingw-w64-x86_64-freetype, mingw-w64-x86_64-ghostscript,
+mingw-w64-x86_64-jbigkit, mingw-w64-x86_64-lcms2,
+mingw-w64-x86_64-libjpeg-turbo, mingw-w64-x86_64-libpng,
+mingw-w64-x86_64-libtool, mingw-w64-x86_64-libwebp
+mingw-w64-x86_64-libwmf, mingw-w64-x86_64-libxml2,
+mingw-w64-x86_64-zlib</p>
<p>GraphicsMagick may also be built using the free MinGW
("Minimalistic GNU for Windows") package, available from</p>
<blockquote>
Install the package</blockquote>
<p>'make check'</p>
<blockquote>
-Run tests using the uninstalled software. On some systems, 'make
+<p>Run tests using the uninstalled software. On some systems, 'make
install' must be done before the test suite will work but usually
-the software can be tested prior to installation.</blockquote>
+the software can be tested prior to installation.</p>
+<p>The test suite requires sufficient RAM memory to run. The memory
+requirement is 128MB for the Q8 build, or 256MB for the Q16
+build, or 512MB for the Q32 build.</p>
+</blockquote>
<p>'make clean'</p>
<blockquote>
Remove everything in the build directory created by 'make'</blockquote>
compiler, the CPU type, and the library versions used. The
GraphicsMagick developers use the current release of all dependent
libraries.</p>
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>UNIX/Cygwin/MinGW/MSYS2 Compilation</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="unix-cygwin-mingw-msys2-compilation">
+<h1 class="title">UNIX/Cygwin/MinGW/MSYS2 Compilation</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#archive-formats" id="id1">Archive Formats</a></li>
+<li><a class="reference internal" href="#build-configuration" id="id2">Build Configuration</a><ul>
+<li><a class="reference internal" href="#optional-features" id="id3">Optional Features</a></li>
+<li><a class="reference internal" href="#optional-packages-options" id="id4">Optional Packages/Options</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#building-under-cygwin" id="id5">Building under Cygwin</a></li>
+<li><a class="reference internal" href="#building-under-mingw-msys2" id="id6">Building under MinGW & MSYS2</a><ul>
+<li><a class="reference internal" href="#cross-compilation-on-unix-linux-host" id="id7">Cross-compilation On Unix/Linux Host</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#dealing-with-configuration-failures" id="id8">Dealing with configuration failures</a></li>
+<li><a class="reference internal" href="#makefile-build-targets" id="id9">Makefile Build Targets</a></li>
+<li><a class="reference internal" href="#build-install" id="id10">Build & Install</a></li>
+<li><a class="reference internal" href="#verifying-the-build" id="id11">Verifying The Build</a></li>
+</ul>
+</div>
+<div class="section" id="archive-formats">
+<h1><a class="toc-backref" href="#id1">Archive Formats</a></h1>
+<p>GraphicsMagick is distributed in a number of different archive formats.
+The source code must be extracted prior to compilation as follows:</p>
+<p>7z</p>
+<blockquote>
+<p>7-Zip archive format. The Z-Zip format may be extracted under Unix
+using '7za' from the P7ZIP package (<a class="reference external" href="http://p7zip.sourceforge.net/">http://p7zip.sourceforge.net/</a>).
+Extract similar to:</p>
+<pre class="literal-block">
+7za x GraphicsMagick-1.3.7z
+</pre>
+</blockquote>
+<p>.tar.bz2</p>
+<blockquote>
+<p>BZip2 compressed tar archive format. Requires that both the bzip2
+(<a class="reference external" href="http://www.sourceware.org/bzip2/">http://www.sourceware.org/bzip2/</a>) and tar programs to be available. Extract
+similar to:</p>
+<pre class="literal-block">
+bzip2 -d GraphicsMagick-1.3.tar.bz | tar -xvf -
+</pre>
+</blockquote>
+<p>.tar.gz</p>
+<blockquote>
+<p>Gzip compressed tar archive format. Requires that both the gzip
+(<a class="reference external" href="http://www.gzip.org/">http://www.gzip.org/</a>) and tar programs to be available. Extract
+similar to:</p>
+<pre class="literal-block">
+gzip -d GraphicsMagick-1.3.tar.gz | tar -xvf -
+</pre>
+</blockquote>
+<p>.tar.lz</p>
+<blockquote>
+<p>Lzip compressed tar archive format. Requires that both the lzip
+(<a class="reference external" href="http://lzip.nongnu.org/lzip.html">http://lzip.nongnu.org/lzip.html</a>) and tar programs to be
+available. Extract similar to:</p>
+<pre class="literal-block">
+lzip -d -c GraphicsMagick-1.3.tar.gz | tar -xvf -
+</pre>
+</blockquote>
+<p>.tar.xz</p>
+<blockquote>
+<p>LZMA compressed tar archive format. Requires that LZMA utils
+(<a class="reference external" href="http://tukaani.org/lzma/">http://tukaani.org/lzma/</a>) and tar programs to be available. Extract
+similar to:</p>
+<pre class="literal-block">
+xz -d GraphicsMagick-1.3.tar.xz | tar -xvf -
+</pre>
+</blockquote>
+<p>zip</p>
+<blockquote>
+<p>PK-ZIP archive format. Requires that the unzip program from Info-Zip
+(<a class="reference external" href="http://www.info-zip.org/UnZip.html">http://www.info-zip.org/UnZip.html</a>) be available. Extract similar to:</p>
+<pre class="literal-block">
+unzip GraphicsMagick-1.3.zip
+</pre>
+</blockquote>
+<p>The GraphicsMagick source code is extracted into a subdirectory
+similar to 'GraphicsMagick-1.3'. After the source code extracted,
+change to the new directory (using the actual directory name) using
+a command similar to:</p>
+<pre class="literal-block">
+cd GraphicsMagick-1.3
+</pre>
+</div>
+<div class="section" id="build-configuration">
+<h1><a class="toc-backref" href="#id2">Build Configuration</a></h1>
+<p>Use 'configure' to automatically configure, build, and install
+GraphicsMagick. The configure script may be executed from the
+GraphicsMagick source directory (e.g ./configure) or from a separate
+build directory by specifying the full path to configure (e.g.
+/src/GraphicsMagick-1.3/configure). The advantage of using a separate
+build directory is that multiple GraphicsMagick builds may share the
+same GraphicsMagick source directory while allowing each build to use a
+unique set of options. Using a separate directory also makes it easier
+to keep track of any files you may have edited.</p>
+<p>If you are willing to accept configure's default options (static
+build, 8 bits/sample), and build from within the source directory,
+type:</p>
+<pre class="literal-block">
+./configure
+</pre>
+<p>and watch the configure script output to verify that it finds everything
+that you think it should. If it does not, then adjust your environment
+so that it does.</p>
+<p>By default, 'make install' will install the package's files
+in '/usr/local/bin', '/usr/local/man', etc. You can specify an
+installation prefix other than '/usr/local' by giving 'configure'
+the option '--prefix=PATH'. This is valuable in case you don't have
+privileges to install under the default paths or if you want to install
+in the system directories instead.</p>
+<p>If you are not happy with configure's choice of compiler, compilation
+flags, or libraries, you can give 'configure' initial values for
+variables by specifying them on the configure command line, e.g.:</p>
+<pre class="literal-block">
+./configure CC=c99 CFLAGS=-O2 LIBS=-lposix
+</pre>
+<p>Options which should be common to packages installed under the same
+directory heirarchy may be supplied via a 'config.site' file located
+under the installation prefix via the path ${prefix}/share/config.site
+where ${prefix} is the installation prefix. This file is used for all
+packages installed under that prefix. As an alternative, the CONFIG_SITE
+environment variable may be used to specify the path of a site
+configuration file to load. This is an example config.site file:</p>
+<pre class="literal-block">
+# Configuration values for all packages installed under this prefix
+CC=gcc
+CXX=c++
+CPPFLAGS='-I/usr/local/include'
+LDFLAGS='-L/usr/local/lib -R/usr/local/lib'
+</pre>
+<p>When the 'config.site' file is being used to supply configuration
+options, configure will issue a message similar to:</p>
+<pre class="literal-block">
+configure: loading site script /usr/local/share/config.site
+</pre>
+<p>The configure variables you should be aware of are:</p>
+<p>CC</p>
+<blockquote>
+Name of C compiler (e.g. 'cc -Xa') to use</blockquote>
+<p>CXX</p>
+<blockquote>
+Name of C++ compiler to use (e.g. 'CC')</blockquote>
+<p>CFLAGS</p>
+<blockquote>
+Compiler flags (e.g. '-g -O2') to compile C code</blockquote>
+<p>CXXFLAGS</p>
+<blockquote>
+Compiler flags (e.g. '-g -O2') to compile C++ code</blockquote>
+<p>CPPFLAGS</p>
+<blockquote>
+Include paths (-I/somedir) to look for header files</blockquote>
+<p>LDFLAGS</p>
+<blockquote>
+Library paths (-L/somedir) to look for libraries Systems that
+support the notion of a library run-path may require an additional
+argument in order to find shared libraries at run time. For
+example, the Solaris linker requires an argument of the form
+'-R/somedir', some Linux systems will work with '-rpath /somedir',
+while some other Linux systems who's gcc does not pass -rpath to
+the linker require an argument of the form '-Wl,-rpath,/somedir'.</blockquote>
+<p>LIBS</p>
+<blockquote>
+Extra libraries (-lsomelib) required to link</blockquote>
+<p>Any variable (e.g. CPPFLAGS or LDFLAGS) which requires a directory
+path must specify an absolute path rather than a relative path.</p>
+<p>The build now supports a Linux-style "silent" build (default
+disabled). To enable this, add the configure option
+--enable-silent-rules or invoke make like 'make V=0'. If the build
+has been configured for silent mode and it is necessary to see a
+verbose build, then invoke make like 'make V=1'.</p>
+<p>Configure can usually find the X include and library files
+automatically, but if it doesn't, you can use the 'configure' options
+'--x-includes=DIR' and '--x-libraries=DIR' to specify their locations.</p>
+<p>The configure script provides a number of GraphicsMagick specific
+options. When disabling an option --disable-something is equivalent
+to specifying --enable-something=no and --without-something is
+equivalent to --with-something=no. The configure options are as
+follows (execute 'configure --help' to see all options).</p>
+<div class="section" id="optional-features">
+<h2><a class="toc-backref" href="#id3">Optional Features</a></h2>
+<table class="docutils option-list" frame="void" rules="none">
+<col class="option" />
+<col class="description" />
+<tbody valign="top">
+<tr><td class="option-group">
+<kbd><span class="option">--enable-prof</span></kbd></td>
+<td>enable 'prof' profiling support (default disabled)</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--enable-gprof</span></kbd></td>
+<td>enable 'gprof' profiling support (default disabled)</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--enable-gcov</span></kbd></td>
+<td>enable 'gcov' profiling support (default disabled)</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--disable-installed</span></kbd></td>
+</tr>
+<tr><td> </td><td>disable building an installed GraphicsMagick (default enabled)</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--enable-broken-coders</span></kbd></td>
+</tr>
+<tr><td> </td><td>enable broken/dangerous file formats support</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--disable-largefile</span></kbd></td>
+</tr>
+<tr><td> </td><td>disable support for large (64 bit) file offsets</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--disable-openmp</span></kbd></td>
+</tr>
+<tr><td> </td><td>disable use of OpenMP (automatic multi-threaded loops) at all</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--enable-openmp-slow</span></kbd></td>
+</tr>
+<tr><td> </td><td>enable OpenMP for algorithms which sometimes run slower</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--enable-symbol-prefix</span></kbd></td>
+</tr>
+<tr><td> </td><td>enable prefixing library symbols with "Gm"</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--enable-magick-compat</span></kbd></td>
+</tr>
+<tr><td> </td><td>install ImageMagick utility shortcuts (default disabled)</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--enable-maintainer-mode</span></kbd></td>
+</tr>
+<tr><td> </td><td>enable additional Makefile rules which update generated files
+included in the distribution. Requires GNU make as well as a
+number of utilities and tools.</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--enable-quantum-library-names</span></kbd></td>
+</tr>
+<tr><td> </td><td>shared library name includes quantum depth to allow shared
+libraries with different quantum depths to co-exist in same
+directory (only one can be used for development)</td></tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="optional-packages-options">
+<h2><a class="toc-backref" href="#id4">Optional Packages/Options</a></h2>
+<table class="docutils option-list" frame="void" rules="none">
+<col class="option" />
+<col class="description" />
+<tbody valign="top">
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-quantum-depth</span></kbd></td>
+</tr>
+<tr><td> </td><td>number of bits in a pixel quantum (default 8). Also see
+'--enable-quantum-library-names.'</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--with-modules</span></kbd></td>
+<td>enable building dynamically loadable modules</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--without-threads</span></kbd></td>
+</tr>
+<tr><td> </td><td>disable POSIX threads API support</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-frozenpaths</span></kbd></td>
+</tr>
+<tr><td> </td><td>enable frozen delegate paths</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--without-magick-plus-plus</span></kbd></td>
+</tr>
+<tr><td> </td><td>disable build/install of Magick++</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--with-perl</span></kbd></td>
+<td>enable build/install of PerlMagick</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-perl=<var>PERL</var></span></kbd></td>
+</tr>
+<tr><td> </td><td>use specified Perl binary to configure PerlMagick</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-perl-options=<var>OPTIONS</var></span></kbd></td>
+</tr>
+<tr><td> </td><td>options to pass on command-line when generating PerlMagick's Makefile from Makefile.PL</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--without-bzlib</span></kbd></td>
+</tr>
+<tr><td> </td><td>disable BZLIB support</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--without-dps</span></kbd></td>
+<td>disable Display Postscript support</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--with-fpx</span></kbd></td>
+<td>enable FlashPIX support</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--without-jbig</span></kbd></td>
+<td>disable JBIG support</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--without-webp</span></kbd></td>
+<td>disable WEBP support</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--without-jp2</span></kbd></td>
+<td>disable JPEG v2 support</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--without-jpeg</span></kbd></td>
+<td>disable JPEG support</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--without-jp2</span></kbd></td>
+<td>disable JPEG v2 support</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--without-lcms2</span></kbd></td>
+</tr>
+<tr><td> </td><td>disable lcms (v2.X) support</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--without-lzma</span></kbd></td>
+<td>disable LZMA support</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--without-png</span></kbd></td>
+<td>disable PNG support</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--without-tiff</span></kbd></td>
+<td>disable TIFF support</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--without-trio</span></kbd></td>
+<td>disable TRIO library support</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--without-ttf</span></kbd></td>
+<td>disable TrueType support</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-tcmalloc</span></kbd></td>
+</tr>
+<tr><td> </td><td>enable Google perftools tcmalloc (minimal) memory allocation
+library support</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-mtmalloc</span></kbd></td>
+</tr>
+<tr><td> </td><td>enable Solaris mtmalloc memory allocation library support</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--with-umem</span></kbd></td>
+<td>enable Solaris libumem memory allocation library support</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--without-wmf</span></kbd></td>
+<td>disable WMF support</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-fontpath</span></kbd></td>
+</tr>
+<tr><td> </td><td>prepend to default font search path</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-gs-font-dir</span></kbd></td>
+</tr>
+<tr><td> </td><td>directory containing Ghostscript fonts</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-windows-font-dir</span></kbd></td>
+</tr>
+<tr><td> </td><td>directory containing MS-Windows fonts</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--without-xml</span></kbd></td>
+<td>disable XML support</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--without-zlib</span></kbd></td>
+<td>disable ZLIB support</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--without-zstd</span></kbd></td>
+<td>disable Zstd support</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--with-x</span></kbd></td>
+<td>use the X Window System</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-share-path=<var>DIR</var></span></kbd></td>
+</tr>
+<tr><td> </td><td>Alternate path to share directory (default share/GraphicsMagick)</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-libstdc=<var>DIR</var></span></kbd></td>
+</tr>
+<tr><td> </td><td>use libstdc++ in DIR (for GNU C++)</td></tr>
+</tbody>
+</table>
+<p>GraphicsMagick options represent either features to be enabled, disabled,
+or packages to be included in the build. When a feature is enabled (via
+--enable-something), it enables code already present in GraphicsMagick.
+When a package is enabled (via --with-something), the configure script
+will search for it, and if is is properly installed and ready to use
+(headers and built libraries are found by compiler) it will be included
+in the build. The configure script is delivered with all features
+disabled and all packages enabled. In general, the only reason to
+disable a package is if a package exists but it is unsuitable for
+the build (perhaps an old version or not compiled with the right
+compilation flags).</p>
+<p>Several configure options require special note:</p>
+<table class="docutils option-list" frame="void" rules="none">
+<col class="option" />
+<col class="description" />
+<tbody valign="top">
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--enable-shared</span></kbd></td>
+</tr>
+<tr><td> </td><td><p class="first">The shared libraries are built and support for loading coder and
+process modules is enabled. Shared libraries are preferred because
+they allow programs to share common code, making the individual
+programs much smaller. In addition shared libraries are required in
+order for PerlMagick to be dynamically loaded by an installed PERL
+(otherwise an additional PERL (PerlMagick) must be installed. This
+option is not the default because all libraries used by
+GraphicsMagick must also be dynamic libraries if GraphicsMagick
+itself is to be dynamically loaded (such as for PerlMagick).</p>
+<p>GraphicsMagick built with delegates (see MAGICK PLUG-INS below)
+can pose additional challenges. If GraphicsMagick is built using
+static libraries (the default without --enable-shared) then
+delegate libraries may be built as either static libraries or
+shared libraries. However, if GraphicsMagick is built using shared
+libraries, then all delegate libraries must also be built as
+shared libraries. Static libraries usually have the extension .a,
+while shared libraries typically have extensions like .so, .sa,
+or .dll. Code in shared libraries normally must compiled using
+a special compiler option to produce Position Independent Code
+(PIC). The only time this is not necessary is if the platform
+compiles code as PIC by default.</p>
+<p>PIC compilation flags differ from vendor to vendor (gcc's is
+-fPIC). However, you must compile all shared library source with
+the same flag (for gcc use -fPIC rather than -fpic). While static
+libraries are normally created using an archive tool like 'ar',
+shared libraries are built using special linker or compiler options
+(e.g. -shared for gcc).</p>
+<p>Building shared libraries often requires subtantial hand-editing
+of Makefiles and is only recommended for those who know what they
+are doing.</p>
+<p class="last">If --enable-shared is not specified, a new PERL interpreter
+(PerlMagick) is built which is statically linked against the
+PerlMagick extension. This new interpreter is installed into the
+same directory as the GraphicsMagick utilities. If --enable-shared
+is specified, the PerlMagick extension is built as a dynamically
+loadable object which is loaded into your current PERL interpreter
+at run-time. Use of dynamically-loaded extensions is preferable over
+statically linked extensions so --enable-shared should be specified
+if possible (note that all libraries used with GraphicsMagick must
+be shared libraries!).</p>
+</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--disable-static</span></kbd></td>
+</tr>
+<tr><td> </td><td>static archive libraries (with extension .a) are not built. If you
+are building shared libraries, there is little value to building
+static libraries. Reasons to build static libraries include: 1) they
+can be easier to debug; 2) the clients do not have external
+dependencies (i.e. libMagick.so); 3) building PIC versions of the
+delegate libraries may take additional expertise and effort; 4) you
+are unable to build shared libraries.</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--disable-installed</span></kbd></td>
+</tr>
+<tr><td> </td><td>By default the GraphicsMagick build is configured to formally install
+into a directory tree. This is the most secure and reliable way to
+install GraphicsMagick. Specifying --disable-installed configures
+GraphicsMagick so that it doesn't use hard-coded paths and locates
+support files by computing an offset path from the executable (or
+from the location specified by the MAGICK_HOME environment variable.
+The uninstalled configuration is ideal for binary distributions which
+are expected to extract and run in any location.</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--enable-broken-coders</span></kbd></td>
+</tr>
+<tr><td> </td><td>The implementation of file format support for some formats is
+incomplete or imperfectly implemented such that file corruption or a
+security exploit might occur. These formats are not included in the
+build by default but may be enabled using
+<tt class="docutils literal"><span class="pre">--enable-broken-coders</span></tt>. The existing implementation may still
+have value in controlled circumstances so it remains but needs to be
+enabled. One of the formats currently controlled by this is Adobe
+Photoshop bitmap format (PSD).</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--with-modules</span></kbd></td>
+<td><p class="first">Image coders and process modules are built as loadable modules which
+are installed under the directory
+[prefix]/lib/GraphicsMagick-X.X.X/modules-QN (where 'N' equals 8, 16,
+or 32 depending on the quantum depth) in the subdirectories 'coders'
+and 'filters' respectively. The modules build option is only
+available in conjunction with --enable-shared. If --enable-shared is
+not also specified, then support for building modules is disabled.
+Note that if --enable-shared is specified, the module loader is
+active (allowing extending an installed GraphicsMagick by simply
+copying a module into place) but GraphicsMagick itself is not built
+using modules.</p>
+<p>Use of the modules build is recommended where it is possible to use
+it. Using modules defers the overhead due to library dependencies
+(searching the filesystem for libraries, shared library relocations,
+initialized data, and constructors) until the point the libraries
+are required to be used to support the file format requested.
+Traditionally it has been thought that a 'static' program will be
+more performant than one built with shared libraries, and perhaps
+this may be true, but building a 'static' GraphicsMagick does not
+account for the many shared libraries it uses on a typical
+Unix/Linux system. These shared libraries may impose unexpected
+overhead. For example, it was recently noted that libxml2 is now
+often linked with the ICU (international character sets) libraries
+which are huge C++ libraries consuming almost 30MB of disk space and
+that simply linking with these libraries causes GraphicsMagick to
+start up much more slowly. By using the modules build, libxml2 (and
+therefore the huge ICU C++ libraries) are only loaded in the few
+cases (e.g. SVG format) where it is needed.</p>
+<p class="last">When applications depend on the GraphicsMagick libraries, using the
+modules build lessens the linkage overhead due to using
+GraphicsMagick.</p>
+</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--enable-symbol-prefix</span></kbd></td>
+</tr>
+<tr><td> </td><td>The GraphicsMagick libraries may contain symbols which conflict with
+other libraries. Specifify this option to prefix "Gm" to all library
+symbols, and use the C pre-processor to allow dependent code to still
+compile as before.</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--enable-magick-compat</span></kbd></td>
+</tr>
+<tr><td> </td><td>Normally GraphicsMagick installs only the 'gm' utility from which all
+commands may be accessed. Existing packages may be designed to invoke
+ImageMagick utilities (e.g. "convert"). Specify this option to
+install ImageMagick utility compatibility links to allow
+GraphicsMagick to substitute directly for ImageMagick. Take care when
+selecting this option since if there is an existing ImageMagick
+installation installed in the same directory, its utilities will be
+replaced when GraphicsMagick is installed.</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-quantum-depth</span></kbd></td>
+</tr>
+<tr><td> </td><td><p class="first">This option allows the user to specify the number of bits to use per
+pixel quantum (the size of the red, green, blue, and alpha pixel
+components. When an image file with less depth is read, smaller
+values are scaled up to this size for processing, and are scaled
+down from this size when a file with lower depth is written. For
+example, "--with-quantum-depth=8" builds GraphicsMagick using 8-bit
+quantums. Most computer display adaptors use 8-bit
+quantums. Currently supported arguments are 8, 16, or 32. The
+default is 8. This option is the most important option in
+determining the overall run-time performance of GraphicsMagick.</p>
+<p>The number of bits in a quantum determines how many values it may
+contain. Each quantum level supports 256 times as many values as
+the previous level. The following table shows the range available
+for various quantum sizes.</p>
+<blockquote>
+<table border="1" class="docutils">
+<colgroup>
+<col width="24%" />
+<col width="42%" />
+<col width="34%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">QuantumDepth</th>
+<th class="head">Valid Range (Decimal)</th>
+<th class="head">Valid Range (Hex)</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>8</td>
+<td>0-255</td>
+<td>00-FF</td>
+</tr>
+<tr><td>16</td>
+<td>0-65535</td>
+<td>0000-FFFF</td>
+</tr>
+<tr><td>32</td>
+<td>0-4294967295</td>
+<td>00000000-FFFFFFFF</td>
+</tr>
+</tbody>
+</table>
+</blockquote>
+<p>Larger pixel quantums cause GraphicsMagick to run more slowly and to
+require more memory. For example, using sixteen-bit pixel quantums
+causes GraphicsMagick to run 15% to 50% slower (and take twice as
+much memory) than when it is built to support eight-bit pixel
+quantums. Regardless, the GraphicsMagick authors prefer to use
+sixteen-bit pixel quantums since they support all common image
+formats and assure that there is no loss of color precision.</p>
+<p>The amount of virtual memory consumed by an image can be computed
+by the equation (QuantumDepth*Rows*Columns*5)/8. This is an
+important consideration when resources are limited, particularly
+since processing an image may require several images to be in
+memory at one time. The following table shows memory consumption
+values for a 1024x768 image:</p>
+<blockquote>
+<table border="1" class="docutils">
+<colgroup>
+<col width="46%" />
+<col width="54%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">QuantumDepth</th>
+<th class="head">Virtual Memory</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>8</td>
+<td>3MB</td>
+</tr>
+<tr><td>16</td>
+<td>8MB</td>
+</tr>
+<tr><td>32</td>
+<td>15MB</td>
+</tr>
+</tbody>
+</table>
+</blockquote>
+<p>GraphicsMagick performs all image processing computations using
+floating point or non-lossy integer arithmetic, so results are very
+accurate. Increasing the quantum storage size decreases the amount
+of quantization noise (usually not visible at 8 bits) and helps
+prevent countouring and posterization in the image.</p>
+<p class="last">Consider also using the --enable-quantum-library-names configure
+option so that installed shared libraries include the quantum depth
+as part of their names so that shared libraries using different
+quantum depth options may co-exist in the same directory.</p>
+</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--without-magick-plus-plus</span></kbd></td>
+</tr>
+<tr><td> </td><td>Disable building Magick++, the C++ application programming interface
+to GraphicsMagick. A suitable C++ compiler is required in order to
+build Magick++. Specify the CXX configure variable to select the C++
+compiler to use (default "g++"), and CXXFLAGS to select the desired
+compiler opimization and debug flags (default "-g -O2"). Antique C++
+compilers will normally be rejected by configure tests so specifying
+this option should only be necessary if Magick++ fails to compile.</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-frozenpaths</span></kbd></td>
+</tr>
+<tr><td> </td><td>Normally external program names are substituted into the
+delegates.mgk file without full paths. Specify this option to enable
+saving full paths to programs using locations determined by
+configure. This is useful for environments where programs are stored
+under multiple paths, and users may use different PATH settings than
+the person who builds GraphicsMagick.</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--without-threads</span></kbd></td>
+</tr>
+<tr><td> </td><td>By default, the GraphicsMagick library is compiled to be fully
+thread safe by using thread APIs to implement required locking.
+This is intended to allow the GraphicsMagick library to be used by
+multi-threaded programs using native POSIX threads. If the locking
+or dependence on thread APIs is undesireable, then specify
+--without-threads. Testing shows that the overhead from thread
+safety is virtually unmeasurable so usually there is no reason to
+disable multi-thread support. While previous versions disabled
+OpenMP support when this option was supplied, that is no longer the
+case since then OpenMP locking APIs are used instead.</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--disable-largefile</span></kbd></td>
+</tr>
+<tr><td> </td><td>By default, GraphicsMagick is compiled with support for large (> 2GB
+on a 32-bit CPU) files if the operating system supports large files.
+Applications which use the GraphicsMagick library might then also
+need to be compiled to support for large files (operating system
+dependent). Normally support for large files is a good thing. Only
+disable this option if there is a need to do so.</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--disable-openmp</span></kbd></td>
+</tr>
+<tr><td> </td><td><p class="first">By default, GraphicsMagick is compiled with support for OpenMP
+(<a class="reference external" href="http://www.openmp.org/">http://www.openmp.org/</a>) if the compilation environment supports it.
+OpenMP automatically parallizes loops across concurrent threads
+based on instructions in pragmas. OpenMP was introduced in GCC
+4.2. OpenMP is a well-established standard and was implemented in
+some other compilers in the late '90s, long before its appearance in
+GCC. OpenMP adds additional build and linkage requirements.
+GraphicsMagick supports OpenMP version 2.0 and later, primarily
+using features defined by version 2.5, but will be optionally using
+features from version 3.1 in the future since it is commonly
+available.</p>
+<p class="last">By default, GraphicsMagick enables as many threads as there are CPU
+cores (or CPU threads). According to the OpenMP standard, the
+OMP_NUM_THREADS environment variable specifies how many threads
+should be used and GraphicsMagick also honors this request. In order
+to obtain the best single-user performance, set OMP_NUM_THREADS
+equal to the number of available CPU cores. On a server with many
+cores and many programs running at once, there may be benefit to
+setting OMP_NUM_THREADS to a much smaller value than the number of
+cores, and sometimes values as low as two (or even one, to disable
+threading) will offer the best overall system performance. Tuning a
+large system with OpenMP programs running in parallel (competing for
+resources) is a complex topic and some research and experimentation
+may be required in order to find the best parameters.</p>
+</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--enable-openmp-slow</span></kbd></td>
+</tr>
+<tr><td> </td><td>On some systems, memory-bound algorithms run slower (rather than
+faster) as threads are added via OpenMP. This may be due to CPU
+cache and memory architecture implementation, or OS thread API
+implementation. Since it is not known how a system will behave
+without testing and pre-built binaries need to work well on all
+systems, these algorithms are now disabled for OpenMP by default.
+If you are using a well-threaded OS on a CPU with a good
+high-performance memory architecture, you might consider enabling
+this option based on experimentation.</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--with-perl</span></kbd></td>
+<td><p class="first">Use this option to include PerlMagick in the GraphicsMagick build
+and test suite. While PerlMagick is always configured by default
+(PerlMagick/Makefile.PL is generated by the configure script),
+PerlMagick is no longer installed by GraphicsMagick's ''make
+install''. The procedure to configure, build, install, and check
+PerlMagick is described in PerlMagick/README.txt. When using a
+shared library build of GraphicsMagick, it is necessary to formally
+install GraphicsMagick prior to building PerlMagick in order to
+achieve a working PerlMagick since otherwise the wrong
+GraphicsMagick libraries may be used.</p>
+<p class="last">If the argument ''--with-perl=/path/to/perl'' is supplied, then
+/path/to/perl will be taken as the PERL interpreter to use. This is
+important in case the 'perl' executable in your PATH is not PERL5,
+or is not the PERL you want to use. Experience suggests that static
+PerlMagick builds may not be fully successful (at least for
+executing the test suite) for Perl versions newer than 5.8.8.</p>
+</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-perl-options</span></kbd></td>
+</tr>
+<tr><td> </td><td>The PerlMagick module is normally installed using the Perl
+interpreter's installation PREFIX, rather than GraphicsMagick's. If
+GraphicsMagick's installation prefix is not the same as PERL's
+PREFIX, then you may find that PerlMagick's 'make install' step tries
+to install into a directory tree that you don't have write
+permissions to. This is common when PERL is delivered with the
+operating system or on Internet Service Provider (ISP) web servers.
+If you want PerlMagick to install elsewhere, then provide a PREFIX
+option to PERL's configuration step via
+"--with-perl-options=PREFIX=/some/place". Other options accepted by
+MakeMaker are 'LIB', 'LIBPERL_A', 'LINKTYPE', and 'OPTIMIZE'. See the
+ExtUtils::MakeMaker(3) manual page for more information on
+configuring PERL extensions.</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--without-x</span></kbd></td>
+<td>By default, GraphicsMagick will use X11 libraries if they are
+available. When --without-x is specified, use of X11 is disabled. The
+display, animate, and import sub-commands are not included. The
+remaining sub-commands have reduced functionality such as no access
+to X11 fonts (consider using Postscript or TrueType fonts instead).</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-gs-font-dir</span></kbd></td>
+</tr>
+<tr><td> </td><td><p class="first">Specify the directory containing the Ghostscript Postscript Type 1
+font files (e.g. "n019003l.pfb") also known as the "URW Fonts" so
+that they can be rendered using the FreeType library. These fonts
+emulate the standard 35 fonts commonly available on printers
+supporting Adobe Postscript so they are very useful to have. If the
+font files are installed using the default Ghostscript installation
+paths (${prefix}/share/ghostscript/fonts), they should be discovered
+automatically by configure and specifying this option is not
+necessary. Specify this option if the Ghostscript fonts fail to be
+located automatically, or the location needs to be overridden.</p>
+<p>The "Ghostscript" fonts (also known as "URW Standard postscript
+fonts (cyrillicized)") are available from</p>
+<blockquote>
+<a class="reference external" href="https://sourceforge.net/projects/gs-fonts/">https://sourceforge.net/projects/gs-fonts/</a></blockquote>
+<p>These fonts may are often available as a package installed by a
+package manager and installing from a package manager is easier than
+installing from source:</p>
+<table border="1" class="last docutils">
+<caption>URW Font Packages</caption>
+<colgroup>
+<col width="22%" />
+<col width="32%" />
+<col width="46%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Distribution</th>
+<th class="head">Package Name</th>
+<th class="head">Fonts Installation Path</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>Cygwin</td>
+<td>urw-base35-fonts</td>
+<td>/usr/share/ghostscript/fonts</td>
+</tr>
+<tr><td>Debian Linux</td>
+<td>fonts-urw-base35</td>
+<td>/usr/share/fonts/type1/gsfonts</td>
+</tr>
+<tr><td>Gentoo Linux</td>
+<td>media-fonts/urw-fonts</td>
+<td>/usr/share/fonts/ghostscript</td>
+</tr>
+<tr><td>Illumos/pkgsrc</td>
+<td>urw-fonts-2.0nb1</td>
+<td>/opt/local/share/fonts/urw</td>
+</tr>
+<tr><td>NetBSD/pkgsrc</td>
+<td>urw-fonts-2.0nb1</td>
+<td>/share/fonts/urw</td>
+</tr>
+<tr><td>OpenIndiana</td>
+<td>gnu-gs-fonts-std</td>
+<td>/usr/share/ghostscript/fonts</td>
+</tr>
+<tr><td>OS X/Homebrew</td>
+<td>font-urw-base35</td>
+<td>[ TBD ]</td>
+</tr>
+<tr><td>Red Hat Linux</td>
+<td>urw-fonts-2.0</td>
+<td>/usr/share/fonts/default/Type1</td>
+</tr>
+<tr><td>Ubuntu Linux</td>
+<td>fonts-urw-base35</td>
+<td>/usr/share/fonts/type1/gsfonts</td>
+</tr>
+</tbody>
+</table>
+</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-windows-font-dir</span></kbd></td>
+</tr>
+<tr><td> </td><td>Specify the directory containing MS-Windows-compatible fonts. This is
+not necessary when GraphicsMagick is running under MS-Windows.</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-tcmalloc</span></kbd></td>
+</tr>
+<tr><td> </td><td>The GNU libc malloc and some other mallocs exhibits poor concurrency
+in multi-threaded OpenMP programs and this can severely impact
+OpenMP speedup. The 'tcmalloc' library provided as part of Google
+<a class="reference external" href="https://github.com/gperftools/gperftools">gperftools</a> has been
+observed to perform far better than the default GNU libc memory
+allocator for multi-threaded use, and also for single-threaded use.
+Overall benchmark performance improvements of up to a factor of two
+are observed for some algorithms (even with just 12 cores) and it is
+expected that the improvements will become much more apparent with
+larger numbers of cores (e.g. 64 cores). Using tcmalloc may improve
+performance dramatically for some work-loads on modern multi-core
+systems.</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--with-umem</span></kbd></td>
+<td>The default Solaris memory allocator exhibits poor concurrency in
+multi-threaded programs and this can impact OpenMP speedup under
+Solaris (and systems derived from it such as Illumos). Use this
+convenience option to enable use of the umem memory allocation
+library, which is observed to be more performant in multi-threaded
+programs. There is a port of umem available for Linux so this
+option is not specific to Solaris.</td></tr>
+<tr><td class="option-group" colspan="2">
+<kbd><span class="option">--with-mtmalloc</span></kbd></td>
+</tr>
+<tr><td> </td><td>The default Solaris memory allocator exhibits poor concurrency in
+multi-threaded programs and this can impact OpenMP speedup under
+Solaris (and systems derived from it such as Illumos). Use this
+convenience option to enable use of the mtmalloc memory allocation
+library, which is more performant in multi-threaded programs than
+the default libc memory allocator, and more performant in
+multi-threaded programs than umem, but is less memory efficient.</td></tr>
+</tbody>
+</table>
+</div>
+</div>
+<div class="section" id="building-under-cygwin">
+<h1><a class="toc-backref" href="#id5">Building under Cygwin</a></h1>
+<p>GraphicsMagick may be built under the Windows '95-XP Cygwin
+Unix-emulation environment available for free from</p>
+<blockquote>
+<a class="reference external" href="http://www.cygwin.com/">http://www.cygwin.com/</a></blockquote>
+<p>It is suggested that the X11R6 package be installed since this enables
+GraphicsMagick's X11 support (animate, display, and import
+sub-commands will work) and it includes the Freetype v2 DLL required
+to support TrueType and Postscript Type 1 fonts. Make sure that
+/usr/X11R6/bin is in your PATH prior to running configure.</p>
+<p>If you are using Cygwin version 1.3.9 or later, you may specify the
+configure option '--enable-shared' to build Cygwin DLLs. Specifying
+'--enable-shared' is required if you want to build PerlMagick under
+Cygwin because Cygwin does not provide the libperl.a static library
+required to create a static PerlMagick. Note that older Cygwin
+compilers may not generate code which supports reliably catching C++
+exceptions thrown by DLL code. The Magick++ library requires that it
+be possible to catch C++ exceptions thrown from DLLs. The test suite
+<tt class="docutils literal">make check</tt> includes several tests to verify that C++ exceptions
+are working properly.</p>
+</div>
+<div class="section" id="building-under-mingw-msys2">
+<h1><a class="toc-backref" href="#id6">Building under MinGW & MSYS2</a></h1>
+<p>GraphicsMagick may easily be built using the free <a class="reference external" href="https://www.msys2.org/">MSYS2</a> distribution which provides GCC compilers,
+libraries, and headers, targeting native Windows along with a
+Unix-like command shell and a package manager ('Pacman') to install
+pre-compiled components. Using the pre-compiled packages, it is
+almost as easy to compile GraphicsMagick under MSYS2 as it is under
+Linux!</p>
+<p>When using MSYS2, requesting to install these packages using 'pacman
+-S' (in addition to compilation tools for C/C++) should result in
+getting up to speed very quicky with a featureful build:</p>
+<p>mingw-w64-x86_64-bzip2, mingw-w64-x86_64-freetype,
+mingw-w64-x86_64-ghostscript, mingw-w64-x86_64-jbigkit,
+mingw-w64-x86_64-lcms2, mingw-w64-x86_64-libjpeg-turbo,
+mingw-w64-x86_64-libpng, mingw-w64-x86_64-libtool,
+mingw-w64-x86_64-libwebp mingw-w64-x86_64-libwmf,
+mingw-w64-x86_64-libxml2, mingw-w64-x86_64-zlib</p>
+<p>GraphicsMagick may also be built using the free MinGW
+("Minimalistic GNU for Windows") package, available from</p>
+<blockquote>
+<a class="reference external" href="http://www.mingw.org/">http://www.mingw.org/</a></blockquote>
+<p>or from</p>
+<blockquote>
+<a class="reference external" href="http://mingw-w64.sourceforge.net/">http://mingw-w64.sourceforge.net/</a></blockquote>
+<p>which consist of GNU-based (GCC) compilation toolsets plus headers and
+libraries required to build programs which are entirely based on
+standard Microsoft Windows DLLs so that they may be used for
+proprietary applications. MSYS provides a Unix-style console shell
+window with sufficient functionality to run the GraphicsMagick
+configure script and execute 'make', 'make check', and 'make install'.
+GraphicsMagick may be executed from the MSYS shell, but since it is a
+normal Windows application, it will work just as well from the Windows
+command line.</p>
+<p>Unlike the Cygwin build which creates programs based on a
+Unix-emulation DLL, and which uses Unix-style paths to access Windows
+files, the MinGW build creates native Windows console applications
+similar to the Visual C++ build. Run-time performance is similar to the
+Microsoft compilers.</p>
+<p>The base MinGW (or MinGW-w64) package and the MSYS package should be
+installed. Other MinGW packages are entirely optional. Once MSYS is
+installed a MSYS icon (blue capital 'M') is added to the
+desktop. Double clicking on this icon starts an instance of the MSYS
+shell.</p>
+<p>Start the MSYS console and follow the Unix configure and build
+instructions. The configure and build for MinGW is the same as for
+Unix. Any additional delegate libraries (e.g. libpng) will need to be
+built under MinGW in order to be used. These libraries should be built
+and installed prior to configuring GraphicsMagick. While some delegate
+libraries are easy to configure and build under MinGW, others may be
+quite a challenge.</p>
+<p>Lucky for us, the most common delegate libraries are available
+pre-built, as part of the GnuWin32 project, from</p>
+<blockquote>
+<a class="reference external" href="http://gnuwin32.sourceforge.net/packages.html">http://gnuwin32.sourceforge.net/packages.html</a></blockquote>
+<p>The relevant packages are bzip2, freetype, jbigkit, libintl, jpeg,
+libpng, libtiff, libwmf and zlib. However, note that for freetype
+to be detected by configure, you must move the <tt class="docutils literal">freetype</tt> directory
+out of <tt class="docutils literal">GnuWin32\include\freetype2</tt> and into <tt class="docutils literal">GnuWin32\include</tt>.</p>
+<p>Note that older MinGW compilers may not generate code which supports
+reliably catching C++ exceptions thrown by DLL code. The Magick++
+library requires that it be possible to catch C++ exceptions thrown
+from DLLs. The test suite (<tt class="docutils literal">make check</tt>) includes several tests to
+verify that C++ exceptions are working properly. If the MinGW you are
+using fails the C++ exception tests, then the solution is to either
+find a MinGW with working C++ exceptions, configure a static build
+with --disable-shared, or disable building Magick++ with
+--without-magick-plus-plus.</p>
+<p>Note that the default installation prefix is MSYS's notion of
+<tt class="docutils literal">/usr/local</tt> which installs the package into a MSYS directory. To
+install outside of the MSYS directory tree, you may specify an
+installation prefix like <tt class="docutils literal">/c/GraphicsMagick</tt> which causes the package
+to be installed under the Windows directory <tt class="docutils literal"><span class="pre">C:\GraphicsMagick</span></tt>. The
+installation directory structure will look very much like the Unix
+installation layout (e.g. <tt class="docutils literal"><span class="pre">C:\GraphicsMagick\bin</span></tt>,
+<tt class="docutils literal"><span class="pre">C:\GraphicsMagick\lib</span></tt>, <tt class="docutils literal"><span class="pre">C:\GraphicsMagick\share</span></tt>, etc.). Paths
+which may be embedded in libraries and configuration files are
+transformed into Windows paths so they don't depend on MSYS.</p>
+<div class="section" id="cross-compilation-on-unix-linux-host">
+<h2><a class="toc-backref" href="#id7">Cross-compilation On Unix/Linux Host</a></h2>
+<p>Given a modern and working MinGW32 or mingw-w64 installation, it is
+easy to cross-compile GraphicsMagick from a Unix-type host to produce
+Microsoft Windows executables.</p>
+<p>This incantation produces a static WIN32 <cite>gm.exe</cite> executable on an
+Ubuntu Linux host with the i686-w64 cross-compiler installed:</p>
+<pre class="literal-block">
+./configure '--host=i686-w64-mingw32' '--disable-shared'
+</pre>
+<p>and this incantation produces a static WIN64 <cite>gm.exe</cite> executable on an
+Ubuntu Linux host with the x86_64-w64 cross-compiler installed:</p>
+<pre class="literal-block">
+./configure '--host=x86_64-w64-mingw32' '--disable-shared'
+</pre>
+<p>For a full-fledged GraphicsMagick program, normally one will want to
+pre-install or cross-compile the optional libraries that
+GraphicsMagick may depend on and install them where the cross-compiler
+will find them, or add extra <cite>CPPFLAGS</cite> and <cite>LDFLAGS</cite> options so that
+the compiler searches for header files and libraries in the correct
+place.</p>
+<p>Configuring for building with shared libraries (libGraphicsMagick,
+libGraphicsMagickWand, and libGraphicsMagick++ DLLs) and modules
+(coders as DLLs) is also supported by the cross-builds. A cross-built
+libtool libltdl needs to be built in advance in order to use the
+<cite>--with-modules</cite> modules option.</p>
+<p>After configuring the software for cross-compilation, the software is
+built using <cite>make</cite> as usual and everything should be as with native
+compilation except that <cite>make check</cite> is likely not available (testing
+might be possible on build system via WINE, not currently
+tested/supported by GraphicsMagick authors).</p>
+<p>Use of the <cite>DESTDIR</cite> approach as described in the <a class="reference internal" href="#build-install">Build & Install</a>
+section is recommended in order to install the build products into a
+formal directory tree before preparing to copy onto the Windows target
+system (e.g. by packaging via an installer).</p>
+</div>
+</div>
+<div class="section" id="dealing-with-configuration-failures">
+<h1><a class="toc-backref" href="#id8">Dealing with configuration failures</a></h1>
+<p>While configure is designed to ease installation of GraphicsMagick, it
+often discovers problems that would otherwise be encountered later
+when compiling GraphicsMagick. The configure script tests for headers
+and libraries by executing the compiler (CC) with the specified
+compilation flags (CFLAGS), pre-processor flags (CPPFLAGS), and linker
+flags (LDFLAGS). Any errors are logged to the file 'config.log'. If
+configure fails to discover a header or library please review this
+log file to determine why, however, please be aware that <em>errors
+in the config.log are normal</em> because configure works by trying
+something and seeing if it fails. An error in config.log is only a
+problem if the test should have passed on your system. After taking
+corrective action, be sure to remove the 'config.cache' file before
+running configure so that configure will re-inspect the environment
+rather than using cached values.</p>
+<p>Common causes of configure failures are:</p>
+<ol class="arabic simple">
+<li>A delegate header is not in the header include path (CPPFLAGS -I
+option).</li>
+<li>A delegate library is not in the linker search/run path (LDFLAGS
+-L/-R option).</li>
+<li>A delegate library is missing a function (old version?).\eOB</li>
+<li>The compilation environment is faulty.</li>
+</ol>
+<p>If all reasonable corrective actions have been tried and the problem
+appears to be due to a flaw in the configure script, please send a
+bug report to the configure script maintainer (currently
+<a class="reference external" href="mailto:bfriesen%40graphicsmagick.org">bfriesen<span>@</span>graphicsmagick<span>.</span>org</a>). All bug reports should contain the
+operating system type (as reported by 'uname -a') and the
+compiler/compiler-version. A copy of the configure script output
+and/or the config.log file may be valuable in order to find the
+problem. If you send a config.log, please also send a script of the
+configure output and a description of what you expected to see (and
+why) so the failure you are observing can be identified and resolved.</p>
+</div>
+<div class="section" id="makefile-build-targets">
+<h1><a class="toc-backref" href="#id9">Makefile Build Targets</a></h1>
+<p>Once GraphicsMagick is configured, these standard build targets are
+available from the generated Makefiles:</p>
+<blockquote>
+<p>'make'</p>
+<blockquote>
+Build the package</blockquote>
+<p>'make install'</p>
+<blockquote>
+Install the package</blockquote>
+<p>'make check'</p>
+<blockquote>
+Run tests using the uninstalled software. On some systems, 'make
+install' must be done before the test suite will work but usually
+the software can be tested prior to installation.</blockquote>
+<p>'make clean'</p>
+<blockquote>
+Remove everything in the build directory created by 'make'</blockquote>
+<p>'make distclean'</p>
+<blockquote>
+Remove everything in the build directory created by 'configure'
+and 'make'. This is useful if you want to start over from scratch.</blockquote>
+<p>'make uninstall'</p>
+<blockquote>
+Remove all files from the system which are (or would be) installed
+by 'make install' using the current configuration. Note that this
+target does not work for PerlMagick since Perl no longer supports
+an 'uninstall' target.</blockquote>
+</blockquote>
+</div>
+<div class="section" id="build-install">
+<h1><a class="toc-backref" href="#id10">Build & Install</a></h1>
+<p>Now that GraphicsMagick is configured, type</p>
+<pre class="literal-block">
+make
+</pre>
+<p>to build the package and</p>
+<pre class="literal-block">
+make install
+</pre>
+<p>to install it.</p>
+<p>To install under a specified directory using the install directory
+tree layout (e.g. as part of the process for packaging the built
+software), specify DESTDIR like</p>
+<pre class="literal-block">
+make DESTDIR=/my/dest/dir install
+</pre>
+</div>
+<div class="section" id="verifying-the-build">
+<h1><a class="toc-backref" href="#id11">Verifying The Build</a></h1>
+<p>To confirm your installation of the GraphicsMagick distribution was
+successful, ensure that the installation directory is in your executable
+search path and type</p>
+<pre class="literal-block">
+gm display
+</pre>
+<p>The GraphicsMagick logo should be displayed on your X11 display.</p>
+<p>Verify that the expected image formats are supported by executing</p>
+<pre class="literal-block">
+gm convert -list formats
+</pre>
+<p>Verify that the expected fonts are available by executing</p>
+<pre class="literal-block">
+gm convert -list fonts
+</pre>
+<p>Verify that delegates (external programs) are configured as expected
+by executing</p>
+<pre class="literal-block">
+gm convert -list delegates
+</pre>
+<p>Verify that color definitions may be loaded by executing</p>
+<pre class="literal-block">
+gm convert -list colors
+</pre>
+<p>If GraphicsMagick is built to use loadable coder modules, then verify
+that the modules load via</p>
+<pre class="literal-block">
+gm convert -list modules
+</pre>
+<p>Verify that GraphicsMagick is properly identifying the resources of
+your machine via</p>
+<pre class="literal-block">
+gm convert -list resources
+</pre>
+<p>For a thorough test, you should run the GraphicsMagick test suite by
+typing</p>
+<pre class="literal-block">
+make check
+</pre>
+<p>Note that due to differences between the developer's environment and
+your own, it is possible that some tests may be indicated as failed
+even though the results are ok. Such failures should be rare, and if
+they do occur, they should be reported as a bug. Differences between
+the developer's environment environment and your own may include the
+compiler, the CPU type, and the library versions used. The
+GraphicsMagick developers use the current release of all dependent
+libraries.</p>
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</div>
+</body>
+</html>
Optional Features
~~~~~~~~~~~~~~~~~
+--disable-compressed-files
+
+ disable reading and writing of gzip/bzip stream files
+
+ Normally support for being able to read and write gzip/bzip stream
+ files (files which are additionally compressed using gzip or bzip)
+ is a good thing, but for some formats it is necessary to
+ decompress an entire input file before it may be validated and
+ read. Decompressing the file may take a lot of time and disk
+ space. If input files are not trustworthy, an apparently small
+ file can take much more resources than expected. Use this option
+ to reject such files.
+
--enable-prof
enable 'prof' profiling support (default disabled)
Linux!
When using MSYS2, requesting to install these packages using 'pacman
--S' (in addition to compilation tools for C/C++) should result in
-getting up to speed very quicky with a featureful build:
+-S' should result in getting up to speed very quicky with a featureful
+build:
-mingw-w64-x86_64-bzip2, mingw-w64-x86_64-freetype,
-mingw-w64-x86_64-ghostscript, mingw-w64-x86_64-jbigkit,
-mingw-w64-x86_64-lcms2, mingw-w64-x86_64-libjpeg-turbo,
-mingw-w64-x86_64-libpng, mingw-w64-x86_64-libtool,
-mingw-w64-x86_64-libwebp mingw-w64-x86_64-libwmf,
-mingw-w64-x86_64-libxml2, mingw-w64-x86_64-zlib
+mingw-w64-x86_64-toolchain, mingw-w64-x86_64-bzip2,
+mingw-w64-x86_64-freetype, mingw-w64-x86_64-ghostscript,
+mingw-w64-x86_64-jbigkit, mingw-w64-x86_64-lcms2,
+mingw-w64-x86_64-libjpeg-turbo, mingw-w64-x86_64-libpng,
+mingw-w64-x86_64-libtool, mingw-w64-x86_64-libwebp
+mingw-w64-x86_64-libwmf, mingw-w64-x86_64-libxml2,
+mingw-w64-x86_64-zlib
GraphicsMagick may also be built using the free MinGW
("Minimalistic GNU for Windows") package, available from
install' must be done before the test suite will work but usually
the software can be tested prior to installation.
+ The test suite requires sufficient RAM memory to run. The memory
+ requirement is 128MB for the Q8 build, or 256MB for the Q16
+ build, or 512MB for the Q32 build.
+
'make clean'
Remove everything in the build directory created by 'make'
compiler, the CPU type, and the library versions used. The
GraphicsMagick developers use the current release of all dependent
libraries.
-
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Windows Installation</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-windows-installation">
<tt class="docutils literal"><span class="pre">GM\VisualMagick\bin\GraphicsMagick-1.3-Q8-dll.exe</span></tt></li>
</ol>
</blockquote>
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Windows Installation</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-windows-installation">
+<h1 class="title">GraphicsMagick Windows Installation</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#installing-using-installer-package" id="id1">Installing Using Installer Package</a><ul>
+<li><a class="reference internal" href="#prerequisites" id="id2">Prerequisites</a></li>
+<li><a class="reference internal" href="#retrieve-install-package" id="id3">Retrieve Install Package</a></li>
+<li><a class="reference internal" href="#start-installation-wizard" id="id4">Start Installation Wizard</a></li>
+<li><a class="reference internal" href="#read-installation-information" id="id5">Read Installation Information</a></li>
+<li><a class="reference internal" href="#select-destination-directory" id="id6">Select Destination Directory</a></li>
+<li><a class="reference internal" href="#select-start-menu-folder" id="id7">Select Start Menu Folder</a></li>
+<li><a class="reference internal" href="#select-additional-tasks" id="id8">Select Additional Tasks</a></li>
+<li><a class="reference internal" href="#ready-to-install" id="id9">Ready to Install</a></li>
+<li><a class="reference internal" href="#installation-progress" id="id10">Installation Progress</a></li>
+<li><a class="reference internal" href="#final-information" id="id11">Final Information</a></li>
+<li><a class="reference internal" href="#finishing-up" id="id12">Finishing Up</a></li>
+<li><a class="reference internal" href="#testing-the-installation" id="id13">Testing The Installation</a></li>
+<li><a class="reference internal" href="#uninstall" id="id14">Uninstall</a></li>
+<li><a class="reference internal" href="#use-from-another-package-or-program" id="id15">Use From Another Package or Program</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#installing-from-source-code" id="id16">Installing From Source Code</a><ul>
+<li><a class="reference internal" href="#applicability" id="id17">Applicability</a></li>
+<li><a class="reference internal" href="#important-notes" id="id18">Important Notes</a></li>
+<li><a class="reference internal" href="#windows-xp-vista-7-visual-c-6-0-through-19-0-compilation" id="id19">Windows XP, Vista, 7 Visual C++ 6.0 through 19.0 Compilation</a></li>
+<li><a class="reference internal" href="#environment-variables" id="id20">Environment Variables</a></li>
+<li><a class="reference internal" href="#windows-distribution-build-procedure" id="id21">Windows Distribution Build Procedure</a></li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="section" id="installing-using-installer-package">
+<h1><a class="toc-backref" href="#id1">Installing Using Installer Package</a></h1>
+<blockquote>
+This section provides information specific to GraphicsMagick installed
+via a "setup.exe" style installation wizard under Microsoft Windows. It
+applies only to the pre-built "binaries" package, and not to versions
+compiled from source code. If you would like to install GraphicsMagick
+from source code, then please refer to the Installing From Source Code
+section.</blockquote>
+<div class="section" id="prerequisites">
+<h2><a class="toc-backref" href="#id2">Prerequisites</a></h2>
+<blockquote>
+<p>While multiple versions of GraphicsMagick may be installed at one
+time, if your intention is to replace a prior installation of
+GraphicsMagick with a newer version, then it is wise to uninstall
+the existing GraphicsMagick (see uninstall procedure) prior to
+installing the newer version.</p>
+<p>While it is not a requirement, it is strongly recommended that the
+<a class="reference external" href="http://sourceforge.net/projects/ghostscript/">Ghostscript</a>
+package (GraphicsMagick is tested with version 9.27) be
+installed. GraphicsMagick uses Ghostscript to render Postscript and
+PDF files, as well as formats where a translator to Postscript is
+available. GraphicsMagick will use the <a class="reference external" href="http://sourceforge.net/projects/gs-fonts/">Ghostscript Fonts</a> (also known as "URW
+Fonts") to support the standard set of Adobe Postscript fonts like
+"Helvetica" and "Times Roman" if these fonts are not available as
+TrueType fonts. The Ghostscript fonts need to manually installed
+with administrator privileges in the Ghostscript installation
+directory (e.g. as <tt class="docutils literal"><span class="pre">C:\Program</span> Files\gs\fonts</tt> or <tt class="docutils literal">C:Program
+Files\gs\gs9.27\fonts</tt>).</p>
+<p>The algorithm used to find the fonts consults the Windows registry
+to learn Ghostscript installation paths, and then looks for a
+"fonts/n019003l.pfb" file in each path until it finds a match.</p>
+<p>Make sure to install a Ghostscript which is compatible with the
+GraphicsMagick you are installing. For example, if you are
+installing a 64-bit GraphicsMagick, you should install a 64-bit
+Ghostscript. The installation order of the two packages is not
+important. Both 32 and 64-bit versions of GraphicsMagick and
+Ghostscript may be installed at the same time.</p>
+</blockquote>
+</div>
+<div class="section" id="retrieve-install-package">
+<h2><a class="toc-backref" href="#id3">Retrieve Install Package</a></h2>
+<blockquote>
+<p>Retrieve the GraphicsMagick Windows binary install package from a one
+of the ftp sites listed at the <a class="reference external" href="download.html">GraphicsMagick Download Sites</a> page. The available install packages are as follows</p>
+<p>Windows Dynamic-Multithread (DLL-based) install package with utilities,
+ImageMagickObject COM object, and web pages:</p>
+<blockquote>
+<pre class="literal-block">
+GraphicsMagick-1.3-Q8-win32-dll.exe
+GraphicsMagick-1.3-Q16-win32-dll.exe
+GraphicsMagick-1.3-Q8-win64-dll.exe
+GraphicsMagick-1.3-Q16-win64-dll.exe
+</pre>
+</blockquote>
+<p>Note that the QuantumDepth=8 version (Q8) which provides industry
+standard 24/32 bit pixels consumes half the memory and about 30% less
+CPU than the QuantumDepth=16 version (Q16) which provides 48/64 bit
+pixels for high-resolution color. A Q8 version is fine for processing
+typical photos intended for viewing on a computer screen. If you are
+dealing with film, scientific, or medical images, use ICC color
+profiles, or deal with images that have limited contrast, then the Q16
+version is recommended.</p>
+<p>The <cite>win32</cite> packages are for 32-bit or 64-bit Windows, whereas the
+<cite>win64</cite> packages are only for 64-bit Windows. The 64-bit version
+allows processing larger images in memory (rather than disk files),
+provided that the system has more than 2GB of RAM installed. Memory
+access is 1000 times faster than disk access.</p>
+</blockquote>
+</div>
+<div class="section" id="start-installation-wizard">
+<h2><a class="toc-backref" href="#id4">Start Installation Wizard</a></h2>
+<blockquote>
+Execute the downloaded file from your browser or by double-clicking on
+the filename from within Windows Explorer. The GraphicsMagick Setup
+Wizard will appear. Click on "<em>Next></em>" to continue.</blockquote>
+</div>
+<div class="section" id="read-installation-information">
+<h2><a class="toc-backref" href="#id5">Read Installation Information</a></h2>
+<blockquote>
+An informational screen is presented which provides a summary of things
+you should know before you proceed. Please take care to read this
+information. Once you have finished, Click on "<em>Next></em>" to continue.</blockquote>
+</div>
+<div class="section" id="select-destination-directory">
+<h2><a class="toc-backref" href="#id6">Select Destination Directory</a></h2>
+<blockquote>
+Specify what drive and directory to install GraphicsMagick into.
+Approximately 15MB of free disk space is required to install all of
+GraphicsMagick (you may choose to install a subset to save space). A
+message at the bottom of the screen will tell you exactly how much
+space is required to install the complete package. The default
+installation directory is similar to <tt class="docutils literal"><span class="pre">C:\Program</span>
+<span class="pre">Files\GraphicsMagick-1.3-Q8</span></tt>. Once you have entered the desired
+installation directory, then select "<em>Next></em>" to continue.</blockquote>
+</div>
+<div class="section" id="select-start-menu-folder">
+<h2><a class="toc-backref" href="#id7">Select Start Menu Folder</a></h2>
+<blockquote>
+Select the folder where you would like the program's shortcuts to
+appear. The default should normally be satisfactory. Click on "<em>Next></em>"
+to continue.</blockquote>
+</div>
+<div class="section" id="select-additional-tasks">
+<h2><a class="toc-backref" href="#id8">Select Additional Tasks</a></h2>
+<blockquote>
+<p>A screen is displayed which presents some (or all) of the following
+options:</p>
+<ul class="simple">
+<li>Create a desktop icon</li>
+<li>Update executable search path</li>
+<li>Associate supported file extensions with GraphicsMagick</li>
+</ul>
+<p>"Creating a desktop icon" and "Update the executable search path"
+are selected by default. The remaining options default to
+un-selected. Select the options you prefer.</p>
+<p>Think twice before selecting "<em>Associate supported file extensions
+with GraphicsMagick</em>" since this will set up approximately fifty
+file associations, including common formats like JPEG, GIF, PNG,
+TIFF, and PDF. These file associations will be to the 'gmdisplay'
+program which is suitable for displaying images, but currently
+offers little more than that. Associations for GraphicsMagick's
+native formats (such as <a class="reference external" href="miff.html">MIFF</a>) will always be made.</p>
+<p>Once you have made your selections, click on "<em>Next></em>" to continue.</p>
+</blockquote>
+</div>
+<div class="section" id="ready-to-install">
+<h2><a class="toc-backref" href="#id9">Ready to Install</a></h2>
+<blockquote>
+A screen is displayed which displays the selected options. If you are
+not satisfied with a selected option, then click on "<em><Back</em>" to go back
+to a previous screen so that the option may be adjusted. If you are
+satisfied with the options and are ready to install, then select
+"<em>Install</em>". To abort the installation entirely, select "<em>Cancel</em>".</blockquote>
+</div>
+<div class="section" id="installation-progress">
+<h2><a class="toc-backref" href="#id10">Installation Progress</a></h2>
+<blockquote>
+While the install program is performing the installation, it will
+display what it is doing in an installation progress window.</blockquote>
+</div>
+<div class="section" id="final-information">
+<h2><a class="toc-backref" href="#id11">Final Information</a></h2>
+<blockquote>
+A summary of post-install steps is provided. These steps include some
+commands you can execute to make sure that GraphicsMagick is working,
+as well as some notes about what has been installed on your system, and
+where to find additional information. Once you have read this
+information, click on "<em>Next></em>" to continue.</blockquote>
+</div>
+<div class="section" id="finishing-up">
+<h2><a class="toc-backref" href="#id12">Finishing Up</a></h2>
+<blockquote>
+By default "<em>View GraphicsMagick.html</em>" is check-marked. This causes the
+GraphicsMagick web pages to be displayed in your web browser when
+"<em>Finish</em>" is selected. If you do not want to view the web pages, then
+de-select "<em>View GraphicsMagick.html</em>". Select "<em>Finish</em>" to exit the
+installation program.</blockquote>
+</div>
+<div class="section" id="testing-the-installation">
+<h2><a class="toc-backref" href="#id13">Testing The Installation</a></h2>
+<blockquote>
+<p>Select "<em>Command Prompt</em>" from the Windows Start menu. Within the window
+type</p>
+<blockquote>
+<pre class="literal-block">
+gm convert logo: logo.miff
+gm convert logo.miff win:
+</pre>
+</blockquote>
+<p>and the GraphicsMagick logo should be displayed in a window.</p>
+</blockquote>
+</div>
+<div class="section" id="uninstall">
+<h2><a class="toc-backref" href="#id14">Uninstall</a></h2>
+<blockquote>
+<p>The GraphicsMagick package incorporates its own uninstall
+functionality. Always remove an installed GraphicsMagick via its
+uninstall function since manually removing it (such as by removing its
+installation directory) will leave behind the registry entries and path
+settings established at install time.</p>
+<p>GraphicsMagick should be removed via the "<em>Add or Remove Programs</em>"
+area of the Windows Control Panel. Select the GraphicsMagick package
+from the list, and click on "<em>Change/Remove</em>" to uninstall it.</p>
+</blockquote>
+</div>
+<div class="section" id="use-from-another-package-or-program">
+<h2><a class="toc-backref" href="#id15">Use From Another Package or Program</a></h2>
+<blockquote>
+<p>The GraphicsMagick gm utility may be executed as a sub-process by
+other programs. If gm utility is not in the systems executable
+search path (it should be since the GraphicsMagick install extends
+the path by default), then the utility should be executed via the
+complete path to the executable.</p>
+<p>The <a class="reference external" href="ImageMagickObject.html">ImageMagickObject</a> COM object may be
+used to execute the gm sub-functions (e.g. "convert") without
+spawning a new process or causing Windows to pop up a window. The
+COM object supports multi-threaded concurrent use. Note that the
+COM object (and other components depending on proprietary libraries)
+is no longer included in the installation packages we create. If
+you need this, then you will need to build GraphicsMagick from
+source code.</p>
+<p>When GraphicsMagick is installed, entries are added to the Windows
+Registry so that other programs may obtain information regarding the
+most recently installed GraphicsMagick. These entries are available
+under the registry path <tt class="docutils literal">HKEY_LOCAL_MACHINE\SOFTWARE\GraphicsMagick\Current</tt>.</p>
+<p>These registry keys are currently available:</p>
+<table border="1" class="docutils">
+<colgroup>
+<col width="25%" />
+<col width="12%" />
+<col width="64%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Key Name</th>
+<th class="head">Key Type</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>BinPath</td>
+<td>REG_SZ</td>
+<td>Directory where GraphicsMagick executables
+are installed</td>
+</tr>
+<tr><td>ConfigurePath</td>
+<td>REG_SZ</td>
+<td>Directory where configuration files are
+installed</td>
+</tr>
+<tr><td>LibPath</td>
+<td>REG_SZ</td>
+<td>Directory where GraphicsMagick core DLLs
+are installed</td>
+</tr>
+<tr><td>CoderModulesPath</td>
+<td>REG_SZ</td>
+<td>Directory where GraphicsMagick loadable
+coder modules are installed</td>
+</tr>
+<tr><td>FilterModulesPath</td>
+<td>REG_SZ</td>
+<td>Directory where GraphicsMagick loadable
+filter modules are installed</td>
+</tr>
+<tr><td>SharePath</td>
+<td>REG_SZ</td>
+<td>Directory where configuration files are
+installed</td>
+</tr>
+</tbody>
+</table>
+</blockquote>
+</div>
+</div>
+<div class="section" id="installing-from-source-code">
+<h1><a class="toc-backref" href="#id16">Installing From Source Code</a></h1>
+<div class="section" id="applicability">
+<h2><a class="toc-backref" href="#id17">Applicability</a></h2>
+<blockquote>
+This section provides instructions for building GraphicsMagick
+Microsoft Windows using the Visual C++ (Visual Studio, etc.)
+IDE. For building using the free Cygwin or MinGW compilers (e.g. as
+part of <a class="reference external" href="https://www.msys2.org/">MSYS2</a>), follow the instructions
+in INSTALL-unix.txt.</blockquote>
+</div>
+<div class="section" id="important-notes">
+<h2><a class="toc-backref" href="#id18">Important Notes</a></h2>
+<blockquote>
+On some platforms Visual C++ may fail with an internal compiler
+error. If this happens to you, then make sure that your compiler is
+updated with the latest fixes from the Microsoft web site and the
+problem will hopefully go away. If the problem does not go away,
+then adjust the settings for the module which failed and disable
+optimization, and the problem is likely to go away (but with less
+performance).</blockquote>
+</div>
+<div class="section" id="windows-xp-vista-7-visual-c-6-0-through-19-0-compilation">
+<h2><a class="toc-backref" href="#id19">Windows XP, Vista, 7 Visual C++ 6.0 through 19.0 Compilation</a></h2>
+<blockquote>
+<p>The Visual C++ distribution targeted at Windows 2000 through Windows
+10 does not provide any stock workspace (DSW) or project files (DSP)
+except for those included with third party libraries. Instead, there
+is a "configure" program that must run to create build
+environments to satisfy various requirements.</p>
+<p>The configure program resides in <tt class="docutils literal">VisualMagick\configure</tt> in the
+GraphicsMagick source tree. A pre-compiled configure.exe is
+provided, as well as Visual Studio project files to recompile it
+from source code if needed.</p>
+<p>Once started, the configure program provides this configuration
+dialog after proceeding past the initial notifications screen:</p>
+<img alt="Configure program screen shot" class="align-center" src="configure-target-setup.png" style="width: 498.0px; height: 473.0px;" />
+<p>In addition to (or as a replacement to) the above dialog, the
+configure.exe program supports these command-line options:</p>
+<dl class="docutils">
+<dt><cite>/Q8 /Q16 /Q32</cite></dt>
+<dd>Set quantum depth</dd>
+<dt><cite>/x64</cite></dt>
+<dd>Add x64 configuration</dd>
+<dt><cite>/mtd /sts /mts /mtsd</cite></dt>
+<dd>Set project type</dd>
+<dt><cite>/noWizard</cite></dt>
+<dd>Do not show the wizard</dd>
+<dt><cite>/openMP</cite></dt>
+<dd>Enable openMP</dd>
+</dl>
+<p>The Visual C++ system provides three different types of "runtimes"
+that must match across all application, library, and DLL code that is
+built. The "configure" program creates a set of build files that are
+consistent for a specific runtime selection.</p>
+<p>The three options for runtime support are:</p>
+<ol class="arabic simple">
+<li>Dynamic Multi-threaded DLL runtimes (VisualDynamicMT), <cite>/mtd</cite> option</li>
+<li>Static Single-threaded runtimes (<cite>VisualStaticST</cite>), <cite>/sts</cite> option</li>
+<li>Static Multi-threaded runtimes (VisualStaticMT), <cite>/mts</cite> option</li>
+<li>Static Multi-threaded DLL runtimes (VisualStaticMTDLL), <cite>/mtsd</cite> option</li>
+</ol>
+<p>In addition to these runtimes, the VisualMagick build environment allows
+you to select whether to include the X11 libraries in the build or not.
+X11 DLLs and headers are provided with the VisualMagick build
+environment. Most Windows users do not use X11 so they will prefer to
+build without X11 support. When X11 is not supported, gm subcommands
+'animate', 'display', and 'import' will not work.</p>
+<p>This leads to five different possible build options, which should
+cover almost any particular situation. The default binary
+distribution is built using #1 from above with the X11 libraries
+excluded. This results build using all DLL's for everything and
+multi-threaded support (the only option for DLL's).</p>
+<p>To do a build for your requirements, simply go to the configure sub-
+directory under VisualMagick and open the configure.dsw workspace
+(for Visual C++ 6.0) or configure.sln (for Visual C++ 7.X through
+9.X). Set the build configuration to "Release" under the</p>
+<blockquote>
+"Build..., Set Active Configuration..." menu.</blockquote>
+<p>Build and execute the configure program and follow the on-screen
+instructions. You should not change any of the defaults unless you have a
+specific reason to do so.</p>
+<p>The configure program provides a button entitled</p>
+<blockquote>
+Edit "magick_config.h"</blockquote>
+<p>Clicking this button brings up magick_config.h in Windows notepad
+for optionally changing any preprocessor defines in GraphicsMagick's
+magick_config.h file. This file is copied to
+<tt class="docutils literal">magick\magick_config.h</tt>. You may safely open
+<tt class="docutils literal">magick\magick_config.h</tt>, modify it, and recompile without
+re-running the configure program. In fact, using Visual Studio to
+edit the copied file may be preferable since it preserves the
+original magick_config.h file.</p>
+<p>Key user tunables in magick_config.h include:</p>
+<blockquote>
+<p>QuantumDepth (default 8)</p>
+<blockquote>
+Specify size of PixelPacket color Quantums (8, 16, or 32) A value of
+8 uses half the memory than 16 and may run 30% faster, but provides
+256 times less color resolution than a value of 16.</blockquote>
+<p>UseInstalledMagick (default undefined)</p>
+<blockquote>
+Define to build a GraphicsMagick which uses registry settings or
+embedded paths to locate installed components (coder modules and
+configuration files). The default is to look for all files in the
+same directory as the executable.</blockquote>
+<p>ProvideDllMain (default undefined)</p>
+<blockquote>
+Define to include a DllMain() function ensures that the GraphicsMagick
+DLL is properly initialized without participation from dependent
+applications. This avoids the requirement to invoke IntializeMagick()
+from dependent applications but only works for DLL builds.</blockquote>
+<p>EnableBrokenCoders (default undefined)</p>
+<blockquote>
+Define to enable broken/dangerous file format support. Only
+enable this if you have complete control over the input files
+and not for arbitrary files such as uploaded from untrusted
+sources via the Internet. Currently this must be enabled to
+enable Adobe Photoshop Format (PSD).</blockquote>
+</blockquote>
+<p>After creating your build environment you can proceed to open the DSW (or
+SLN) file that was generated in the VisualMagick directory and build
+everything from there.</p>
+<p>In the final DSW file you will find a project call "All". In order to
+build everything in the distribution, select this project and make it
+the "active" project. Set the build configuration to the desired one
+(Debug, or Release) and do a "clean" followed by a "build". You should
+do the build in a specific way:</p>
+<blockquote>
+<ol class="arabic simple">
+<li>Make the "All" project the active project (Bold)
+Right click on the All project and select "Set As Active Project"</li>
+<li>Select "Build..., Clean"</li>
+<li>Select "Build..., Build"</li>
+<li>Go get some coffee unless you have a very fast machine!.</li>
+</ol>
+</blockquote>
+<p>The "Clean" step is needed in order to make sure that all of the target
+support libraries are updated with any patches needed to get them to
+compile properly under Visual C++.</p>
+<p>All of the required files that are needed to run any of the command
+line tools will be found in the "bin" subdirectory of the VisualMagick
+subdirectory. This includes EXE, and DLL files. You should be able
+to test the build directly from this directory without having to move
+anything to any of the global SYSTEM or SYSTEM32 areas in the operating
+system installation.</p>
+<p>Note #1:</p>
+<p>The Visual C++ distribution of GraphicsMagick comes with the Magick++
+C++ wrapper by default. This add-on layer has a large number of demo
+and test files that can be found in <tt class="docutils literal"><span class="pre">GraphicsMagick\Magick++\demo</span></tt>, and
+<tt class="docutils literal"><span class="pre">GraphicsMagick\Magick++\tests</span></tt>. There are also a variety of tests that
+use the straight C API as well in <tt class="docutils literal">GraphicsMagick\tests</tt>.</p>
+<p>All of these programs are NOT configured to be built in the default
+workspace created by the configure program. You can cause all of these
+demos and test programs to be built by checking the box in configure
+that says:</p>
+<blockquote>
+"Include all demo and test programs"</blockquote>
+<p>In addition, there is another related checkbox (checked by default)
+that causes all generated project files to be created standalone so
+that they can be copied to other areas of you system.</p>
+<p>This is the checkbox:</p>
+<blockquote>
+"Generate all utility projects with full paths rather then relative
+paths"</blockquote>
+<p>WOW - that a mouthfull - eh?</p>
+<p>Visual C++ uses a concept of "dependencies" that tell it what other
+components need to be build when a particular project is being build. This
+mechanism is also used to ensure that components link properly. In my normal
+development environment, I want to be able to make changes and debug the
+system as a whole, so I like and NEED to use dependencies. However, most
+end users don't want to work this way.</p>
+<p>Instead they really just want to build the package and then get down
+to business working on their application. The solution is to make all
+the utility projects (UTIL_xxxx_yy_exe.dsp) use full absolute paths
+to all the things they need. This way the projects stand on their own
+and can actually be copied and used as templates to get a particular
+custom application compiling with little effort.</p>
+<p>With this feature enabled, you should be able to nab a copy of...</p>
+<blockquote>
+<p><tt class="docutils literal">VisualMagick\utilities\UTIL_gm_xxx_exe.dsp</tt> (for C)</p>
+<blockquote>
+-or-</blockquote>
+<p><tt class="docutils literal"><span class="pre">VisualMagick\Magick++\demo\UTIL_demo_xxx_exe.dsp</span></tt> (for C++)</p>
+</blockquote>
+<p>... and pop it into notepad, modify it (carefully) to your needs and
+be on your way to happy compiling and linking.</p>
+<p>You can feel free to pick any of the standard utilities, tests, or
+demo programs as the basis for a new program by copying the project
+and the source and hacking away.</p>
+<p>The choice of what to use as a starting point is very easy...</p>
+<p>For straight C API command line applications use something from</p>
+<blockquote>
+<p><tt class="docutils literal">GraphicsMagick\tests</tt> or <tt class="docutils literal">GraphicsMagick\utilities</tt> (source code)</p>
+<p><tt class="docutils literal">GraphicsMagick\VisualMagick\tests</tt> or <tt class="docutils literal">GraphicsMagick\Visualmagick\utilities</tt>
+(project - DSP)</p>
+</blockquote>
+<p>For C++ and Magick++ command line applications use something from</p>
+<blockquote>
+<p><tt class="docutils literal"><span class="pre">GraphicsMagick\Magick++\tests</span></tt> or <tt class="docutils literal"><span class="pre">GraphicsMagick\Magick++\demo</span></tt> (source code)</p>
+<p><tt class="docutils literal"><span class="pre">GraphicsMagick\VisualMagick\Magick++\tests</span></tt> or
+<tt class="docutils literal"><span class="pre">GraphicsMagick\VisualMagick\Magick++\demo</span></tt> (project - DSP)</p>
+</blockquote>
+<p>For C++ and Magick++ and MFC windows applications use</p>
+<blockquote>
+<p><tt class="docutils literal">GraphicsMagick\win2k\IMDisplay</tt> (source code)</p>
+<p><tt class="docutils literal">GraphicsMagick\VisualMagick\win32\NtMagick</tt> (project - DSP)</p>
+</blockquote>
+<p>Note #2:</p>
+<p>The GraphicsMagick distribution is very modular. The default
+configuration is there to get you rolling, but you need to make some
+serious choices when you wish to change things around.</p>
+<p>The default options are all targeted at having all the components in one
+place (e.g. the "bin" directory of the VisualMagick build tree). These
+components may be copied to another folder (such as to another computer).</p>
+<p>The folder containing the executables and DLLs should contain the
+following files:</p>
+<blockquote>
+<ol class="arabic simple">
+<li>colors.mgk</li>
+<li>delegates.mgk</li>
+<li>log.mgk</li>
+<li>magic.mgk</li>
+<li>modules.mgk</li>
+<li>type.mgk</li>
+<li>type-ghostscript.mgk (if Ghostscript is used)</li>
+</ol>
+</blockquote>
+<p>The "bin" folder should contains all EXE's and DLL's as well as the
+very important "modules.mgk" file.</p>
+<p>With this default setup, you can use any of the command line tools
+and run scripts as normal. You can actually get by quite nicely this
+way by doing something like <tt class="docutils literal">pushd <span class="pre">e:\xxx\yyy\bin</span></tt> in any scripts you
+write to execute "out of" this directory.</p>
+<p>By default the core of GraphicsMagick on Win32 always looks in the place
+were the exe program is run from in order to find all of the files as
+well as the DLL's it needs.</p>
+</blockquote>
+</div>
+<div class="section" id="environment-variables">
+<h2><a class="toc-backref" href="#id20">Environment Variables</a></h2>
+<blockquote>
+<p>You can use the "System" control panel to allow you to add and delete
+what is in any of the environment variables. You can even have user
+specific environment variables if you wish.</p>
+<p>PATH</p>
+<blockquote>
+<p>This sets the default list of places were Windows looks for EXE's and
+DLL's. Windows CMD shell seems to look in the "current" directory first
+- no matter what, which may make it unnecessary to update the PATH. If
+you wish to run any of utilities from another location then you must
+add the path to your "bin" directory in. For instance, you might add:</p>
+<blockquote>
+<tt class="docutils literal"><span class="pre">D:\Devel\GraphicsMagick\VisualMagick\bin</span></tt></blockquote>
+<p>to do this for the default build environment like I do.</p>
+</blockquote>
+<p>MAGICK_HOME</p>
+<blockquote>
+<p>If all you do is modify the PATH variable, the first problem you
+will run into is that GraphicsMagick may not be able to find any of
+its "modules. Modules are all the IM_MOD*.DLL files you see in the
+distribution. There is one of these for each and every file format
+that GraphicsMagick supports. This environment variable tells the system
+were to look for these DLL's. The compiled in "default" is "execution
+path" - which says - look in the same place that the application is
+running "in". If you are running from somewhere other then "bin" -
+this will no longer work and you must use this variable. If you elect
+to leave the modules in the same place as the EXE's (a good idea)
+then you can simply set this to the same place
+as you did the PATH variable. In my case:</p>
+<blockquote>
+<tt class="docutils literal"><span class="pre">D:\\GraphicsMagick\coders</span></tt></blockquote>
+<p>This is also the place were GraphicsMagick expects to find the
+"colors.mgk", "delegates.mgk", "magic.mgk", "modules.mgk", and
+"type.mgk" files.</p>
+<p>One cool thing about the modules build of GraphicsMagick is that you can
+now leave out file formats and lighten you load. If all you ever need
+is GIF and JPEG, then simply drop all the other DLL's into the local
+trash can and get on with your life.</p>
+<p>WARNING: Always keep the "xc" format, since GM uses it for internal
+purposes.</p>
+</blockquote>
+<p>ALSO. You can elect to changes these things the good old "hard-coded"
+way. Two #defines are applicable.</p>
+<p>defines.h has</p>
+<blockquote>
+<tt class="docutils literal">#define MagickConfigurePath <span class="pre">"c:\\GraphicsMagick\\"</span></tt></blockquote>
+<p>To view any image in a Microsoft window, type</p>
+<blockquote>
+<tt class="docutils literal">gm convert image.ext win:</tt></blockquote>
+<p>Make sure Ghostscript is installed, otherwise, you will be unable to
+convert or view a Postscript document, and Postscript standard fonts will
+not be available.</p>
+<p>You may use any standard web browser (e.g. Internet Explorer) to browse
+the GraphicsMagick documentation.</p>
+<p>The Win2K executables will work under Windows '98 and later.</p>
+</blockquote>
+</div>
+<div class="section" id="windows-distribution-build-procedure">
+<h2><a class="toc-backref" href="#id21">Windows Distribution Build Procedure</a></h2>
+<blockquote>
+<p>The following are the instructions for how to build a Q:8 (or Q:16)
+DLL-based distribution installer package using Visual Studio 2008
+Professional. This is the same procedure used to produce the
+release packages. The PerlMagick steps are skipped as of
+GraphicsMagick 1.3.26):</p>
+<ol class="arabic simple">
+<li>Install prerequisite software:</li>
+</ol>
+<blockquote>
+<ol class="loweralpha simple">
+<li>Install Microsoft Visual Studio.</li>
+<li>Download and install Inno Setup 6
+<"<a class="reference external" href="http://www.jrsoftware.org/isinfo.php">http://www.jrsoftware.org/isinfo.php</a>">.</li>
+<li>Download and install ActiveState ActivePerl (optional)
+<"<a class="reference external" href="http://www.activestate.com/activeperl/downloads/">http://www.activestate.com/activeperl/downloads/</a>">.</li>
+</ol>
+</blockquote>
+<ol class="arabic" start="2">
+<li><p class="first">Disable automatic indexing and virus scanning for the
+GraphicsMagick source tree. In particular, "Windows Defender" in
+Windows 10 (and similar software in earlier Windows releases) has
+been observed to cause Visual Studio builds to fail since the
+virus scanner opens built libraries and executables to inspect
+whem while Visual Studio is still using them. Indexing and
+scanning also cause significant slowdowns since there are many
+megabytes of files to index.</p>
+</li>
+<li><p class="first">Build <cite>GMVisualMagickconfigureconfigure.exe</cite> (if
+missing/outdated)</p>
+<ol class="loweralpha simple">
+<li>Open workspace <cite>GMVisualMagickconfigureconfigure.dsp</cite> by
+double-clicking from Windows Explorer.</li>
+<li>Upgrade Visual Studio project (as required)</li>
+<li>Select <cite>Rebuild All</cite> to build configure.exe</li>
+<li>Close the project.</li>
+</ol>
+</li>
+<li><p class="first">Configure Initial GraphicsMagick Visual Studio Workspace</p>
+<ol class="loweralpha simple">
+<li>Use Windows Explorer to navigate to <cite>GMVisualMagickconfigure</cite>.</li>
+<li>Double-click on <cite>configure.exe</cite> to run configure program.</li>
+<li>Select desired build options: DLL build, Quantum Depth, 64-bit, OpenMP)</li>
+<li>Check <cite>Build demo and test programs</cite>.</li>
+<li>Finish remaining configure wizard screens to complete.</li>
+<li><cite>File</cite> -> <cite>Close Workspace</cite>.</li>
+</ol>
+</li>
+<li><p class="first">Open Workspace, set build configuration, build GraphicsMagick software.</p>
+<ol class="loweralpha simple">
+<li>Open workspace <cite>GMVisualMagickconfigureconfigure.sln</cite> by
+double-clicking from Windows Explorer.</li>
+<li>Build -> "Set Active Configuration" -> "All - Win32 Release" -> OK</li>
+<li>Optionally enable 64-bit (WIN64) compilation. "<cite>Build</cite> /
+<cite>Configuration Manager...</cite> / <cite>Active Solution Platform</cite> /
+<cite>New</cite> / <cite>x64</cite>".</li>
+<li>Open <cite>CORE_magickmagickmagick_config.h</cite> and edit any
+configuration settings you would like to change. For example,
+you might change QuantumDepth to 16 for a"Q:16" build.</li>
+<li>If using Visual Studio Professional Edition, and OpenMP
+support is desired, then select <cite>CORE_magick</cite> in the Solution
+Explorer pane and use the right mouse button menu to select
+<cite>Properties</cite>. In <cite>Configuration Properties</cite> / <cite>C/C++</cite> /
+<cite>Language</cite> set OpenMP support to 'yes'.</li>
+<li>Select "Rebuild All"</li>
+<li>Click on '!' icon to run configure program</li>
+<li>Select DLL build</li>
+<li>Check <cite>Build demo and test programs</cite>.</li>
+<li>Click on Edit <cite>magick_config.h</cite> and verify desired settings
+such as QuantumDepth. You can also defer this step to later
+by opening the header file
+<tt class="docutils literal">CORE_magick\include\magick_config.h</tt> in the Visual Studio
+project.</li>
+<li>Finish remaining configure wizard screens to complete.</li>
+<li>File -> <cite>Close Workspace</cite></li>
+</ol>
+</li>
+<li><p class="first">Build ImageMagickObject</p>
+<ol class="loweralpha simple">
+<li>Open Visual Studio Command Shell Window for WIN32 or WIN64</li>
+<li>Change to GraphicsMagick project directory <tt class="docutils literal">GM</tt></li>
+<li><tt class="docutils literal">cd GM\contrib\win32\ATL7\ImageMagickObject</tt></li>
+<li><tt class="docutils literal">BuildImageMagickObject clean</tt></li>
+<li><tt class="docutils literal">BuildImageMagickObject release</tt></li>
+<li><tt class="docutils literal">cd <span class="pre">..\..\..\..</span></tt></li>
+</ol>
+</li>
+<li><p class="first">Build PerlMagick extension (optional and now rarely done)</p>
+<ol class="loweralpha">
+<li><p class="first">Open Visual Studio Command Shell Window for WIN32 or WIN64</p>
+</li>
+<li><p class="first">Change to GraphicsMagick project directory <tt class="docutils literal">GM</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">cd GM\PerlMagick</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">nmake clean</tt> (only if this is a rebuild)</p>
+</li>
+<li><p class="first"><tt class="docutils literal"><span class="pre">C:\Perl32\bin\perl.exe</span> Makefile.nt</tt> (or Perl64)</p>
+<p>Note that if multiple Perl's are installed, then it may be
+necessary to specify the full path to perl.exe in order to use
+the correct Perl.</p>
+</li>
+<li><p class="first"><tt class="docutils literal">nmake release</tt></p>
+</li>
+</ol>
+</li>
+</ol>
+<p>NOTE: access to <em>nmake</em> requires that there be a path to it. Depending on
+how the install of Visual Studio was done, this may not be the case.
+Visual Studio provides a batch script in VC98Bin called VCVARS32.BAT
+that can be used to do this manually after you open up a command prompt.</p>
+<ol class="arabic simple" start="8">
+<li>Open <cite>GMVisualMagickinstallergm-win32-Q8-dll-full.iss</cite> (or
+<cite>gm-win32-Q16-dll-full.iss</cite> if QuantumDepth=16) by
+double-clicking from Windows Explorer.<ol class="loweralpha">
+<li><cite>File</cite> -> <cite>Compile</cite></li>
+<li>Test install by clicking on green triangle</li>
+</ol>
+</li>
+<li>Test PerlMagick (optional).<ol class="loweralpha">
+<li><tt class="docutils literal">cd PerlMagick</tt></li>
+<li><tt class="docutils literal">nmake test</tt> (All tests must pass!)</li>
+</ol>
+</li>
+<li>Test file format read and write.</li>
+</ol>
+<blockquote>
+<ol class="loweralpha simple">
+<li><tt class="docutils literal">cd VisualMagick\tests</tt></li>
+<li><tt class="docutils literal">run_rwfile.bat</tt> (All tests must pass!)</li>
+<li><tt class="docutils literal">run_rwblob.bat</tt> (All tests must pass!)</li>
+</ol>
+</blockquote>
+<ol class="arabic simple" start="11">
+<li>Run Magick++ test programs.</li>
+</ol>
+<blockquote>
+<ol class="loweralpha simple">
+<li><tt class="docutils literal">cd <span class="pre">Magick++/tests</span></tt></li>
+<li><tt class="docutils literal">run_tests.bat</tt> (All tests must pass!)</li>
+</ol>
+</blockquote>
+<ol class="arabic simple" start="12">
+<li>Run Magick++ demo programs.</li>
+</ol>
+<blockquote>
+<ol class="loweralpha simple">
+<li><tt class="docutils literal">cd <span class="pre">Magick++/demo</span></tt></li>
+<li><tt class="docutils literal">run_demos.bat</tt></li>
+<li>Use <em>gmdisplay</em> to visually inspect all output files.</li>
+</ol>
+</blockquote>
+<ol class="arabic simple" start="13">
+<li>Distribution package is available named similar to
+<tt class="docutils literal"><span class="pre">GM\VisualMagick\bin\GraphicsMagick-1.3-Q8-dll.exe</span></tt></li>
+</ol>
+</blockquote>
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</div>
+</div>
+</body>
+</html>
13. Distribution package is available named similar to
``GM\VisualMagick\bin\GraphicsMagick-1.3-Q8-dll.exe``
-
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>ImageMagickObject</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="imagemagickobject">
working.</p>
<p>Sometime in the future, MagickCMD may assume the place of gm.exe in the
"utils" distribution in order to decrease the overall package size.</p>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>ImageMagickObject</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="imagemagickobject">
+<h1 class="title">ImageMagickObject</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<div class="section" id="overview">
+<h1>Overview</h1>
+<p>The <em>ImageMagickObject</em> is a COM+ compatible component that may be
+invoked from any language capable of using COM objects. The intended use
+is for Windows Scripting Host VBS scripts and Visual Basic, but it can
+also be used from C++, ASP, and other languages like Delphi, Perl and PHP.</p>
+<p>The strategy with the <em>ImageMagickObject</em> COM+ component is not to the
+same as with PerlMagick interface provided with ImageMagick. PerlMagick
+is a low level API based system that defines a whole new way of scripting
+IM operations. The IM COM+ component simply provides access to the
+<a class="reference external" href="convert.html">convert</a>, composite, <a class="reference external" href="mogrify.html">mogrify</a>, <a class="reference external" href="identify.html">identify</a>, and <a class="reference external" href="montage.html">montage</a> tools,
+efficiently executing them as part of your process, rather than as
+external programs. The way you use it is exactly the same. You pass it a
+list of strings including filenames and various options and it does the
+job. In fact, you can take any existing batch scripts that use the
+command line tools and translate them into the equivalent calls to the
+COM+ object in a matter of minutes. Beyond that, there is also a way to
+pass in and retrieve images in memory in the form of standard smart
+arrays (byte arrays). Samples are provided, to show both the simple and
+more elaborate forms of access.</p>
+<p><em>GraphicsMagick</em> provides a statically-built ImageMagick object as part of
+its "utils" <a class="reference external" href="INSTALL-windows.html">Windows installation package</a>. When this package is
+installed, <em>ImageMagickObject</em> and its sample programs are installed to</p>
+<pre class="literal-block">
+c:\Program Files\GraphicsMagick-1.3-Q16\ImageMagickObject
+</pre>
+<p>by default (path shown is for the Q:16 build). <em>ImageMagickObject</em> is
+registered if the checkbox for "Register ImageMagickObject" is checked at
+install time.</p>
+<p>You may execute the sample program from the Windows Command Shell like:</p>
+<pre class="literal-block">
+cscript SimpleTest.vbs
+</pre>
+<p>Since the <em>GraphicsMagick</em> utility command line parsers are incorporated
+within <em>ImageMagickObject</em>, please refer to the command line <a class="reference external" href="utilities.html">utility
+documentation</a> to learn how to use it. The sample VBS scripts show how
+the object should be called and used and have lots of comments.</p>
+<p>For C++ programmers - have a look at the MagickCMD.cpp command line
+utility for an example of how to call the object from C++. This is a bit
+complex because the object requires a variable size list of BSTR's to
+emulate the command line argc, argv style calling conventions of the COM
+component which is more complex in C++ then in VBS or VB.</p>
+</div>
+<div class="section" id="other-goodies">
+<h1>Other goodies...</h1>
+<p>MagickCMD is a C++ sample, but it can also server as a replacement for
+all the other command line utilities in most applications. Instead of
+using "<tt class="docutils literal">convert xxxx yyyy</tt>" you can use "<tt class="docutils literal">MagickCMD convert xxxx
+yyyy</tt>" instead. MagickCMD calls the COM object to get the job done. This
+small tight combination replaces the entire usual binary distribution in
+just a few megabytes.</p>
+</div>
+<div class="section" id="building-imagemagickobject-from-source">
+<h1>Building ImageMagickObject From Source</h1>
+<p>The source code for <em>ImageMagickObject</em> is available from <em>GraphicsMagick</em>
+CVS, or as part of the <em>GraphicsMagick</em> Windows source package. Once the
+source code has been retrieved and extracted, the source for
+<em>ImageMagickObject</em> may be found hidden in the directory
+"<tt class="docutils literal">GraphicsMagick\contrib\win32\ATL7ImageMagickObject</tt>", however,
+<em>GraphicsMagick</em> itself must be built using the "static-multithread"
+(VisualStaticMT) build configuration. Building <em>ImageMagickObject</em>
+requires Microsoft Visual C++ 7.0 as delivered with Microsoft's Visual
+Studio .net package. See the Windows compilation instructions in order to
+get <em>GraphicsMagick</em> itself built before building <em>ImageMagickObject</em>.</p>
+<p>Once the VisualStaticMT project has been built, <em>ImageMagickObject</em> may
+be built by following the procedure:</p>
+<pre class="literal-block">
+cd GraphicsMagick\contrib\win32\ATL7ImageMagickObject
+BuildImageMagickObject release
+</pre>
+<p>This procedure assumes that the VisualStaticMT project has been built
+using the "release" setting for an optimized build. If the "debug"
+setting was used for a debug build, then specify the argument "debug"
+instead.</p>
+<p>To register the DLL as a COM+ server use</p>
+<pre class="literal-block">
+regsvr32 /c /s ImageMagickObject.dll
+</pre>
+<p>To unregister the DLL use</p>
+<pre class="literal-block">
+regsvr32 /u /s ImageMagickObject.dll
+</pre>
+<p>The MagickCMD sample program operates similarly to the gm.exe program,
+and is a great way to exercise <em>ImageMagickObject</em> to verify that it is
+working.</p>
+<p>Sometime in the future, MagickCMD may assume the place of gm.exe in the
+"utils" distribution in order to decrease the overall package size.</p>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</div>
+</body>
+</html>
Sometime in the future, MagickCMD may assume the place of gm.exe in the
"utils" distribution in order to decrease the overall package size.
-
--------------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Magick::Blob</title>
<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="magick-blob">
</pre>
<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Magick::Blob</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="magick-blob">
+<h1 class="title">Magick::Blob</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>Blob provides the means to contain any opaque data. It is named after
+the term <a class="reference external" href="http://en.wikipedia.org/wiki/Binary_large_object">Binary Large OBject</a> commonly used to
+describe unstructured data (such as encoded images) which are stored
+in a database. While the function of Blob is very simple (store a
+pointer and and size associated with allocated data), the Blob class
+provides some very useful capabilities. In particular, it is fully
+reference counted just like the Image class.</p>
+<p>The Blob class supports value assignment while preserving any
+outstanding earlier versions of the object. Since assignment is via a
+pointer internally, Blob is efficient enough to be stored directly in
+an STL container or any other data structure which requires
+assignment. In particular, by storing a Blob in an <a class="reference external" href="http://www.sgi.com/tech/stl/AssociativeContainer.html">associative
+container</a>
+(such as STL's <a class="reference external" href="http://www.sgi.com/tech/stl/Map.html">map</a>) it is
+possible to create simple indexed in-memory "database" of Blobs.</p>
+<p>Magick++ currently uses Blob to contain encoded images (e.g. JPEG) as
+well as ICC and IPTC profiles. Since Blob is a general-purpose class,
+it may be used for other purposes as well.</p>
+<p>The following is the definition of the Magick::Blob class:</p>
+<pre class="literal-block">
+class Blob
+{
+
+public:
+
+ enum Allocator
+ {
+ MallocAllocator,
+ NewAllocator
+ };
+
+ // Default constructor
+ Blob ( void );
+
+ // Construct object with data, making a copy of the supplied data.
+ Blob ( const void* data_, size_t length_ );
+
+ // Copy constructor (reference counted)
+ Blob ( const Blob& blob_ );
+
+ // Destructor (reference counted)
+ virtual ~Blob ();
+
+ // Assignment operator (reference counted)
+ Blob& operator= ( const Blob& blob_ );
+
+ // Update object contents from Base64-encoded string representation.
+ void base64 ( const std::string base64_ );
+ // Return Base64-encoded string representation.
+ std::string base64 ( void );
+
+ // Update object contents, making a copy of the supplied data.
+ // Any existing data in the object is deallocated.
+ void update ( const void* data_, size_t length_ );
+
+ // Update object contents, using supplied pointer directly (no
+ // copy). Any existing data in the object is deallocated. The user
+ // must ensure that the pointer supplied is not deleted or
+ // otherwise modified after it has been supplied to this method.
+ // Specify allocator_ as "MallocAllocator" if memory is allocated
+ // via the C language malloc() function, or "NewAllocator" if
+ // memory is allocated via C++ 'new'.
+ void updateNoCopy ( void* data_, size_t length_,
+ Allocator allocator_ = NewAllocator );
+
+ // Obtain pointer to data. The user should never try to modify or
+ // free this data since the Blob class manages its own data. The
+ // user must be finished with the data before allowing the Blob to
+ // be destroyed since the pointer is invalid once the Blob is
+ // destroyed.
+ const void* data ( void ) const;
+
+ // Obtain data length
+ size_t length ( void ) const;
+
+};
+</pre>
+<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title></title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document">
+
+
+<p>2017-03-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (orientation): Update orientation in EXIF profile,
+if it exists.
+(attribute): Added Image attribute method which accepts a 'char *'
+argument, and will remove the attribute if the value argument is
+NULL.</li>
+</ul>
+</blockquote>
+<p>2014-11-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Geometry.h (Magick::Geometry): Add and document
+limitPixels() and fillArea() methods to support '@' and '^'
+geometry qualifiers. Fill area contributed by Long Ho and
+limitPixels() by Bob Friesenhahn.</li>
+<li>../www/Magick++/Image.rst: Document extent and resize methods.</li>
+<li>lib/STL.cpp (extentImage): New function object to invoke image
+extent method. Original implementation contributed by Long Ho.
+Subsequently modified by Bob Friesenhahn.
+(resizeImage): New function object to invoke image resize
+method. Contributed by Long Ho.</li>
+<li>lib/Image.cpp (extent): New method to place image on sized
+canvas of constant color using gravity. Contributed by Long Ho.
+(resize): New method to resize image specifying geometry, filter,
+and blur. Original implementation contributed by Long Ho.
+Subsequently modified by Bob Friesenhahn.</li>
+</ul>
+</blockquote>
+<p>2014-01-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (thumbnail): New method for fast image resizing,
+particularly to make thumbnails.</li>
+</ul>
+</blockquote>
+<p>2013-12-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableDashArray): DrawableDashArray now uses
+C++ memory allocation rather than from GraphicsMagick library.
+Also, implement direct copy constructor and assignment operator
+rather than using dasyarray() method.</li>
+</ul>
+</blockquote>
+<p>2012-11-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>COPYING: Change Magick++ usage license to be exactly the MIT
+license without the additional sentence about retention of
+copyright (which was already legally implicit).</li>
+</ul>
+</blockquote>
+<p>2012-04-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (defineValue): Use AddDefinition() rather than
+AddDefinitions().</li>
+</ul>
+</blockquote>
+<p>2012-03-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Include.h (Magick): Added support for RandomNoise.</li>
+</ul>
+</blockquote>
+<p>2012-03-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/STL.cpp (stripImage): New unary function to to remove all
+profiles and text attributes from the image.</li>
+<li>lib/Image.cpp (strip): New method to remove all profiles and
+text attributes from the image.</li>
+</ul>
+</blockquote>
+<p>2011-12-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Include.h: Explicitly DLL import/export Magick++
+symbols when building under MinGW GCC.</li>
+</ul>
+</blockquote>
+<p>2010-12-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Include.h (Magick): Add LZMACompression</li>
+</ul>
+</blockquote>
+<p>2010-12-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (InitializeMagick): Don't use atexit(). C++
+destructures are sufficient.</li>
+</ul>
+</blockquote>
+<p>2010-09-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (backgroundColor, borderColor, matteColor):
+Opacity part of user-specified color needs to be preserved.
+Problem was reported by Alexander Zheltov.</li>
+</ul>
+</blockquote>
+<p>2010-04-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/CoderInfo.h: Add default constructor, copy
+constructor, and assignment operator.</li>
+</ul>
+</blockquote>
+<p>2010-01-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (Magick): Fix potential memory leak.</li>
+</ul>
+</blockquote>
+<p>2010-01-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>demo/shapes.cpp (main): Floodfill shape more agressively and
+scale fuzz factor so that it provides the same results across
+quantum depths.</li>
+</ul>
+</blockquote>
+<p>2009-10-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/STL.cpp, lib/Magick++/STL.h (shadeImage): ShadeImage was the
+result of a botched cut-and-paste. Corrected now. Thanks to
+Jukka Manner for making me aware of this.</li>
+</ul>
+</blockquote>
+<p>2009-09-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (cdl): New method to apply the ASC CDL.
+(colorMatrix): New method to apply a color matrix to the image
+channels.
+(haldClut): New method to apply a color lookup table (Hald CLUT)
+to the image.</li>
+</ul>
+</blockquote>
+<p>2009-07-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (attribute): Invoke modifyImage() to assure
+exclusive access to image when updating attributes.</li>
+</ul>
+</blockquote>
+<p>2009-03-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (quantumOperator): New variant of method which
+takes a 'double' argument, as it originally should. Previous
+method taking a Quantum argument is still supported but marked
+deprecated.</li>
+</ul>
+</blockquote>
+<p>2009-01-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Include.h: If the user defines STATIC_MAGICK in his
+project, then the Windows DLL decorations are ignored. Without
+this, Windows DLL-based code can't use a static GraphicsMagick.
+This is recommended by SourceForge bug 2537627.</li>
+<li>lib/Magick++/Drawable.h: Apparently the only STL container which
+may be DLL-exported is <vector> but we are using <list> so disable
+DLL-export of list-based template objects.</li>
+</ul>
+</blockquote>
+<p>2008-10-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Color.cpp: Added an _isValid boolean to represent an invalid
+color. Transparent black is no longer special and can be used in
+drawing.</li>
+<li>lib/Pixels.cpp: Update to use new cache view interfaces provided
+by GraphicsMagick 1.3.</li>
+</ul>
+</blockquote>
+<p>2008-09-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (addNoiseChannel): New method to add noise to a
+specified channel.
+(blurChannel): New method to blur a specified channel.
+(gaussianBlurChannel): New method to gaussian blur a specified
+channel.
+(motionBlur): New method to motion blur the image.
+(randomThresholdChannel): New method to apply random thresholding
+or ordered dithering to the image.
+(randomThresholdChannel): New method to apply random thresholding
+or ordered dithering to the specified image channels.
+(sharpenChannel): New method to sharpen a specified image channel.
+(unsharpmaskChannel): New method to unsharpmask a specified image
+channel.</li>
+</ul>
+</blockquote>
+<p>2008-06-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (quantize): Error measurement support was being
+performed incorrectly. SyncImage() is not needed here.</li>
+</ul>
+</blockquote>
+<p>2008-05-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>demo/demo.cpp (main): Fix segmentation parameters so they are
+more suitable for our image.</li>
+</ul>
+</blockquote>
+<p>2008-04-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (depth): Remove 8/16/32 restriction on depth
+value.</li>
+</ul>
+</blockquote>
+<p>2008-03-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Geometry.cpp, lib/Image.cpp: Include <strings.h> since it is
+needed in order to use strcpy().</li>
+</ul>
+</blockquote>
+<p>2007-12-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/{Drawable.cpp, Geometry.cpp, BlobRef.cpp, Blob.cpp,
+Montage.cpp, Options.cpp, Image.cpp}: Eliminate use of deprecated
+GraphicsMagick functions.</li>
+<li>lib/Magick++/{STL.h, Include.h}: Eliminate use of deprecated
+GraphicsMagick functions.</li>
+</ul>
+</blockquote>
+<p>2007-07-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp: Include <cstdlib></li>
+</ul>
+</blockquote>
+<p>2006-10-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (pixelColor): Don't enforce color "validity" when
+setting the pixel color.</li>
+</ul>
+</blockquote>
+<p>2005-10-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (orientation): New accessor method to support
+image orientation.</li>
+</ul>
+</blockquote>
+<p>2005-04-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/STL.cpp (levelImage): New function object for leveling the
+image channels.
+(levelChannelImage): New function object for leveling a specific
+image channel.</li>
+<li>lib/Image.cpp (level): New method for leveling the image
+channels.
+(levelChannel): New method for leveling a specific image channel.</li>
+</ul>
+</blockquote>
+<p>2005-04-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Include.h (Magick): Import CineonLogRGBColorspace
+into Magick namespace.</li>
+</ul>
+</blockquote>
+<p>2005-04-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Include.h: Import Rec601LumaColorspace (was called
+GRAYColorspace) and Rec709LumaColorspace into Magick
+namespace. Use of GRAYColorspace is mapped via a macro into
+Rec601LumaColorspace in order to avoid a user-visible API change.</li>
+</ul>
+</blockquote>
+<p>2004-08-17 Volker Lukas <<a class="reference external" href="mailto:vlukas%40gmx.de">vlukas<span>@</span>gmx<span>.</span>de</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp: Fixes to ensure that drawable objects remain
+coherent even if an exception is thrown within the assignment
+operator.</li>
+</ul>
+</blockquote>
+<p>2004-07-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>> <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>demo/Makefile.am (AUTOMAKE_OPTIONS): Added nostdinc in order to
+avoid accidentally using magick/list.h when including <list>.</li>
+<li>tests/Makefile.am (AUTOMAKE_OPTIONS): Added nostdinc in order to
+avoid accidentally using magick/list.h when including <list>.</li>
+<li>tests/readWriteBlob.cpp: If MISSING_STD_IOS_BINARY is defined,
+then ios::binary is not used. Use simple ifstream rather than
+std::ifstream since we are already using the std namespace.</li>
+</ul>
+</blockquote>
+<p>2004-06-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Include.h: Disable unavoidable warnings under
+Visual C++ when instantiating STL templates within DLL
+code. Consensus from postings on the net is that as long as the
+same C++ compiler is used throughout, these warnings are of no
+concern.</li>
+</ul>
+</blockquote>
+<p>2004-05-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (coderInfoList): Make error reporting a bit
+more lenient so that if an error occurs while loading a module it
+is not reported as an exception unless no coders were found at
+all.</li>
+</ul>
+</blockquote>
+<p>2004-05-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (clipMask): Use GetImageClipMask.</li>
+</ul>
+</blockquote>
+<p>2004-04-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/CoderInfo.cpp (CoderInfo): Sense of isReadable() and
+isWritable() was inverted.</li>
+</ul>
+</blockquote>
+<p>2004-04-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Include.h: <inttypes.h> is not used. Inclusion
+removed.</li>
+</ul>
+</blockquote>
+<p>2004-03-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Thread.cpp (lock): Have not been successful with using
+MsgWaitForMultipleObjects() reliably, so back out usage of it for
+now.</li>
+</ul>
+</blockquote>
+<p>2004-03-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Thread.cpp (lock): For MsgWaitForMultipleObjects, monitor
+state change only. Otherwise lock may deadlock.</li>
+</ul>
+</blockquote>
+<p>2004-03-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (statistics): New method to obtain image
+statistics (minimum, maximum, mean, variance, and standard
+deviation).</li>
+</ul>
+</blockquote>
+<p>2004-03-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (quantumOperator): New image method to apply an
+arithmetic or bitwise operator to the pixel quantums in an image.
+Still needs documentation.
+(quantumOperator): New image method to apply an arithmetic or
+bitwise operator to the pixel quantums in an image region.</li>
+</ul>
+</blockquote>
+<p>2004-03-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Makefile.am (../www/Magick++/ChangeLog.html): Fix execution of
+txt2html.</li>
+<li>lib/STL.cpp (composeImage): Added a function object to set/get
+the Image composition option.</li>
+<li>lib/Image.cpp (compose): Added a method to set/get the Image
+composition option.</li>
+</ul>
+</blockquote>
+<p>2004-03-06 Vladimir Lukianov <<a class="reference external" href="mailto:lvm%40integrum.ru">lvm<span>@</span>integrum<span>.</span>ru</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Thread.cpp (lock): Use MsgWaitForMultipleObjects() rather
+than WaitForSingleObject() in order to avoid possible deadlock
+when application code directly or indirectly creates windows.</li>
+</ul>
+</blockquote>
+<p>2004-02-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (interlaceType): Retrieve interlace setting from
+Image rather than ImageInfo.</li>
+</ul>
+</blockquote>
+<p>2004-02-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (Image): Delete the allocated image reference
+object if a Magick::Error is thrown by the Image constructor.
+Otherwise the image reference object becomes a memory leak.</li>
+</ul>
+</blockquote>
+<p>2004-01-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (WriteImages): Pass Blob::MallocAllocator to
+updateNoCopy() in order to ensure that correct deallocator is
+used.</li>
+<li>tests/readWriteBlob.cpp (main): Needed to delete character array
+using array [] reference.</li>
+</ul>
+</blockquote>
+<p>2004-01-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>demo/analyze.cpp (main): Fix a GNU C++ library portability
+problem noticed under MinGW. The 'left' iostream manipulator seems
+to be missing.</li>
+</ul>
+</blockquote>
+<p>2004-01-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/Makefile.am: coderInfo test is expected to fail for moby
+builds when the package is not yet installed since a .la file
+exists in the coders directory, but there is no associated .so
+file. Therefore failures of the coderInfo test are now ignored.</li>
+</ul>
+</blockquote>
+<p>2003-12-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (defineValue): New method to support setting
+format-specific defines.
+(defineSet): New method to support setting or testing for
+format-specific flags.</li>
+</ul>
+</blockquote>
+<p>2003-12-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (iccColorProfile): Implementation now uses the
+profile method with profile name "ICM". Note that this now
+invokes the color profile if the image already has one.
+(iccColorProfile): Reimplement using new GetImageProfile function.
+(iptcProfile): Reimplement using the new GetImageProfile and
+SetImageProfile functions.
+(profile): Reimplement using new GetImageProfile function.</li>
+</ul>
+</blockquote>
+<p>2003-12-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Makefile.am (pkglibdir): Improve header file
+install location logic.</li>
+</ul>
+</blockquote>
+<p>2003-12-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>demo/analyze.cpp (main): New program to demonstrate using the
+'analyze' process module.</li>
+<li>demo/Makefile.am: Add rules to build analyze program.</li>
+<li>lib/Image.cpp (process): New method to execute process modules.</li>
+<li>lib/Image.cpp (attribute): New method to get and set named image
+attributes.</li>
+</ul>
+</blockquote>
+<p>2003-10-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Color.cpp: Ensure that all non-default constructors set
+opacity to opaque.</li>
+</ul>
+</blockquote>
+<p>2003-09-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (colorHistogram): If map key is not const,
+then implicit type conversion occurs. Sun's C++ compiler doesn't
+seem to handle that. The map key is now defined as const in the
+insert arguments.</li>
+</ul>
+</blockquote>
+<p>2003-09-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/Makefile.am: Add build support for colorHistogram.cpp.</li>
+<li>tests/colorHistogram.cpp: New test program to test retrieving
+color histograms from the image using colorHistogram().</li>
+<li>lib/Magick++/STL.h (colorHistogram): Added new template function
+to retrieve a color histogram into a user-provided container.
+Verified to work when using STL <vector> and <map> as the target
+container types. When <map> is used, a user-specified color may
+be used to perform lookups in the map to obtain the usage count
+for that color.</li>
+<li>lib/Color.cpp (operator >=): Insufficient resolution was being
+provided in order to reliably sort color objects in STL
+containers. The updated algorithm should be fail-safe.</li>
+</ul>
+</blockquote>
+<p>2003-08-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (channelDepth): New method to set or get the
+modulus depth for a specified channel.</li>
+</ul>
+</blockquote>
+<p>2003-08-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Include.h (Magick): Added support for
+CopyCyanCompositeOp, CopyMagentaCompositeOp,
+CopyYellowCompositeOp, and CopyBlackCompositeOp, composition
+operators.</li>
+</ul>
+</blockquote>
+<p>2003-08-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (depth): Method now only updates the
+Image/ImageInfo depth member and retrieves the value of the Image
+depth member.
+(modulusDepth): New method to inspect the pixels for actual
+modulus depth, or update/reduce the pixels to a specified modulus
+depth. The depth method was performing this function so any code
+which depended on the depth method to compute or set the modulus
+depth should be updated to use modulusDepth() instead.</li>
+</ul>
+</blockquote>
+<p>2003-08-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (matte): If a new matte channel is created,
+initialize it to opaque. Likewise, if the matte channel is
+eliminated, initialize the unused channel to opaque.</li>
+</ul>
+</blockquote>
+<p>2003-07-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>demo/demo.cpp (main): Don't crop logo image.</li>
+<li>*.h, *.cpp: Include "Magick++/Include.h" before including any
+compiler or system header in order to ensure that LFS defines are
+properly applied. Inspired by patch from Albert Chin-A-Young.</li>
+</ul>
+</blockquote>
+<p>2003-06-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Include.h: Needed to import ThrowLoggedException.</li>
+<li>lib/Exception.cpp (throwException): Add originating source
+module, source line, and function name (if available) to exception
+report. This is useful in order to determine the exact conditions
+that lead to the exception being thrown.</li>
+<li>lib/Magick++/Exception.h: Added ErrorCoder, WarningCoder,
+ErrorConfigure, WarningConfigure, ErrorDraw, WarningDraw,
+ErrorImage, WarningImage, ErrorMonitor, WarningMonitor,
+ErrorRegistry, WarningRegistry, ErrorStream, WarningStream,
+ErrorType, and WarningType, exception classes to support the full
+set of exceptions that GraphicsMagick can throw.</li>
+</ul>
+</blockquote>
+<p>2003-06-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/CoderInfo.cpp (CoderInfo): Applied compilation fix from Mike
+Chiarappa to compile using Borland C++.</li>
+</ul>
+</blockquote>
+<p>2003-06-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Geometry.cpp (string): Throw an exception if a string is
+requested from an invalid geometry object.</li>
+</ul>
+</blockquote>
+<p>2003-06-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Geometry.cpp (operator =): If GetGeometry returns NoValue,
+then assign an invalid geometry object to cause an exception if
+the geometry is then used.</li>
+</ul>
+</blockquote>
+<p>2003-06-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Exception.h (ErrorModule): Added class to handle
+module errors.</li>
+<li>lib/Magick++/Exception.h (WarningModule) Added class to handle
+module warnings.</li>
+</ul>
+</blockquote>
+<p>2003-05-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (coderInfoList): Use GetMagickInfoArray to
+access coder list.</li>
+</ul>
+</blockquote>
+<p>2003-05-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (affineTransformImage): Add function object
+contributed by Vladimir Lukianov to apply an affine transform to
+the image.</li>
+<li>lib/Image.cpp (affineTransform): Added method contributed by
+Vladimir Lukianov to apply an affine transform to the image.</li>
+</ul>
+</blockquote>
+<p>2003-05-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Include.h: Decided to back out change which used
+the _VISUALC_ define to trigger inclusion of <sys/types.h>.</li>
+</ul>
+</blockquote>
+<p>2003-05-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Include.h: If _VISUALC_ is defined, include
+<sys/types.h>. This ensures that this necessary header is included
+even if HAVE_SYS_TYPES_H is not defined in magick_config.h.</li>
+</ul>
+</blockquote>
+<p>2003-05-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (InitializeMagick): InitializeMagick is now a C++
+function rather than a namespace inclusion. An atexit() handler
+is registered to invoke DestroyMagick when the program
+exits. Relying on static deconstruction to invoke DestroyMagick
+proved to be unreliable due to translation unit destruction
+uncertainty.</li>
+</ul>
+</blockquote>
+<p>2003-04-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (Image::Image (MagickLib::Image* image_)):
+Incorporated recommended fix from Jukka Manner to avoid
+a scenario which leaks an Options object.</li>
+<li>tests/coalesceImages.cpp: Updated to use modified
+coalesceImages() interface.</li>
+<li>lib/Magick++/STL.h (coalesceImages): Replaced implementation
+with one from Felix Heimbrecht. The template signature has changed
+to return a new image sequence. This template API silently ceased
+to funtion due to an ImageMagick CoalesceImages API change.</li>
+</ul>
+</blockquote>
+<p>2003-03-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/readWriteBlob.cpp (main): Added check for stream read
+failure when reading blob data.
+(class myBlob): Use get rather than read.</li>
+</ul>
+</blockquote>
+<p>2003-03-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/attributes.cpp : Change in the way that Magick++ retrieves
+density caused tests to fail. Density now defaults to 72x72
+(GraphicsMagick default) rather than invalid.</li>
+</ul>
+</blockquote>
+<p>2003-03-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>demo/Makefile.am (CLEANFILES): Fix clean target to
+remove *_out.mvg output files as well.</li>
+<li>demo/zoom.cpp: Added a command-line parser for dash arguments as
+well as an image "resample" capability.</li>
+<li>lib/Image.cpp (density): Obtain density from Image rather than
+ImageInfo if the Image is valid.</li>
+</ul>
+</blockquote>
+<p>2003-03-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Makefile.am : Added rules to install GraphicsMagick++.pc.</li>
+<li>lib/GraphicsMagick++.pc.in : Added pkgconfig file for
+-lGraphicsMagick++.</li>
+</ul>
+</blockquote>
+<p>2003-02-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (colorSpace): Pass image->colorspace to
+TransformRGBColorspace.</li>
+</ul>
+</blockquote>
+<p>2003-01-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (writeImages): Should have been invoking
+WriteImages rather than WriteImage!</li>
+</ul>
+</blockquote>
+<p>2003-01-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Include.h: Add HSL and HWB colorspace
+transformation support.</li>
+</ul>
+</blockquote>
+<p>2003-01-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (colorSpace): Support colorspace transforms other
+than to and from RGB by translating to RGB as an intermediate
+step.</li>
+</ul>
+</blockquote>
+<p>2002-11-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp: Added DrawablePushClipPath,
+DrawablePopClipPath, and DrawableClipPath. Implementation
+contributed by Vladimir <<a class="reference external" href="mailto:lvm%40integrum.ru">lvm<span>@</span>integrum<span>.</span>ru</a>>.</li>
+</ul>
+</blockquote>
+<p>2002-11-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (colorMapSize): New method to set, or return the
+colormap size.</li>
+</ul>
+</blockquote>
+<p>2002-11-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (adaptiveThreshold): New method.</li>
+</ul>
+</blockquote>
+<p>2002-10-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (coderInfoList): Intentionally ignore missing
+delegate exceptions.</li>
+</ul>
+</blockquote>
+<p>2002-09-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Options.cpp (textEncoding): Had forgotten to implement
+textEncoding!</li>
+</ul>
+</blockquote>
+<p>2002-09-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Color.cpp (Color): Use of 'new' and 'delete' in inlines was
+causing memory allocation/deallocation problems for users of the
+DLL build. Problem was identified by Marc Iwan.</li>
+</ul>
+</blockquote>
+<p>2002-09-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (compare): New method to compare current image
+with a reference image.</li>
+</ul>
+</blockquote>
+<p>2002-08-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (textEncoding): New method to allow setting the
+default text encoding (e.g. "UTF-8").</li>
+<li>lib/Drawable.cpp (DrawableText): Added an alternate constructor
+to allow specifying the text encoding (e.g. "UTF-8").</li>
+</ul>
+</blockquote>
+<p>2002-08-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Overall: Now compiles as a DLL using Visual C++.</li>
+</ul>
+</blockquote>
+<p>2002-07-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (profile): Added method to store, delete, or
+retrieve named application profiles.</li>
+</ul>
+</blockquote>
+<p>2002-07-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (type): Set the ImageInfo type attribute when
+setting the image type. If the type attribute is set to something
+other than UndefinedType (implying that the user has set a desired
+output image type), then return that as the image type, otherwise
+use GetImageType() to evaluate the image type.</li>
+</ul>
+</blockquote>
+<p>2002-05-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableTextUnderColor): New class to set the
+text undercolor. When text undercolor is set, a rectangle of the
+specified color is rendered under text annotations.</li>
+</ul>
+</blockquote>
+<p>2002-05-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Magick++ library no longer depends on iostreams at all.</li>
+</ul>
+</blockquote>
+<p>2002-04-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (throwImageException): ExceptionInfo was not being
+properly initialized. This could cause some errors to cause an
+abort in error.c rather than throwing an exception.</li>
+</ul>
+</blockquote>
+<p>2002-04-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (draw): Use draw.h drawing APIs to draw on image.
+This means that MVG output no longer comes from code in
+Drawable.cpp.</li>
+</ul>
+</blockquote>
+<p>2002-04-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/STL.cpp: Moved function object implementations from STL.h to
+STL.cpp.</li>
+</ul>
+</blockquote>
+<p>2002-04-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (getConstPixels): Changed offset parameter type
+from 'unsigned int' to 'int'.
+(getPixels): Changed offset parameter type from 'unsigned int' to
+'int'.
+(setPixels): Changed offset parameter type from 'unsigned int' to
+'int'.
+(cacheThreshold): Changed argument type from 'const long' to
+'const int'.
+(matteFloodfill): Changed offset parameter type from 'const long'
+to 'const int'.</li>
+<li>lib/Pixels.cpp (getConst): New method to return read-only
+pixels.
+(get): Offset parameter types changed from 'unsigned int' to
+'int'.</li>
+</ul>
+</blockquote>
+<p>2002-04-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Drawable.h (DrawableDashOffset): Change dashoffset
+type to 'double' rather than 'unsigned int' in order to match
+ImageMagick.</li>
+<li>lib/Drawable.cpp (DrawableDashArray): Change dasharray type to
+'double' rather than 'unsigned int' in order to match
+ImageMagick. Previous 'unsigned int' methods remain for
+compatability reasons.</li>
+</ul>
+</blockquote>
+<p>2002-04-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableCompositeImage): Always output
+composite images as inlined Base64.</li>
+</ul>
+</blockquote>
+<p>2002-04-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableCompositeImage): If magick attribute
+string is specified, then composite image is supplied to
+ImageMagick as inlined Base64 rather than by MPRI reference.</li>
+<li>lib/Blob.cpp (base64): Added methods to update Blob with data
+from Base64-encoded string, or to return a Base64-encoded string
+from Blob. Still needs documentation.</li>
+</ul>
+</blockquote>
+<p>2002-04-09 Dom Lachowicz <<a class="reference external" href="mailto:cinamod%40hotmail.com">cinamod<span>@</span>hotmail<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (Image::ping): Added PingBlob function</li>
+</ul>
+</blockquote>
+<p>2002-04-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableDashArray::operator=): Added missing
+assignment operator (fixes a bug).
+(DrawableDashArray::DrawableDashArray): Added missing copy
+constructor (fixes a bug).</li>
+<li>lib/Image.cpp (oilPaint): Changed argument type from unsigned
+int to double.
+(chromaBluePrimary): Changed argument type from float to double.
+(chromaGreenPrimary): Changed argument type from float to double.
+(chromaRedPrimary): Changed argument type from float to double.
+(chromaWhitePoint): Changed argument type from float to double.
+(getConstPixels): Changed argument type of x_ & _y from 'int' to
+'unsigned int'.
+(getPixels): Changed argument type of x_ & _y from 'int' to
+'unsigned int'.</li>
+</ul>
+</blockquote>
+<p>2002-04-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (debug): Added method to set ImageMagick debug
+flag so that it prints debugging information while it runs.</li>
+</ul>
+</blockquote>
+<p>2002-04-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp: Fixed a bunch of bugs related to
+DrawableCompositeImage, DrawableFont, and inconsistencies
+discovered by Gimpel lint.</li>
+</ul>
+</blockquote>
+<p>2002-04-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (draw): Properly delimit individual drawing
+commands so that MVG output is correct.</li>
+</ul>
+</blockquote>
+<p>2002-03-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableViewbox): MVG syntax wasn't correct.</li>
+<li>lib/Image.cpp (draw): Fix algorithm used to append newlines to
+MVG commands so that draw() may be invoked multiple times while
+still producing valid MVG.</li>
+</ul>
+</blockquote>
+<p>2002-03-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableViewbox): New class to allow setting
+the MVG output size.</li>
+</ul>
+</blockquote>
+<p>2002-03-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (print): Changed "mpr:" to "mpri:" in order to
+finally get DrawableCompositeImage to work as intended.</li>
+<li>lib/Image.cpp (registerId): Bugfix. Register using
+sizeof(MagickLib::Image) rather than sizeof(Image).</li>
+</ul>
+</blockquote>
+<p>2002-03-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableCompositeImage): Had failed to
+initialize width and height in object to image width and height.</li>
+</ul>
+</blockquote>
+<p>2002-02-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (endianImage): New class to specify the
+endian option for formats which support this notion (e.g. TIFF).</li>
+<li>lib/Image.cpp (endian): New method to specify the endian option
+for formats which support this notion (e.g. TIFF).</li>
+</ul>
+</blockquote>
+<p>2002-02-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableFont): Support specifying a font via
+font-family, font-style, font-weight, and font-stretch. Wildcard
+matches are supported.</li>
+</ul>
+</blockquote>
+<p>2002-02-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (charcoal): Replace Magick++'s charcoal effect
+with the output of ImageMagick's CharcoalImage function in order
+to ensure consistency.</li>
+<li>lib/Magick++/CoderInfo.h (MatchType): Scope the MatchType
+enumeration to the CoderInfo class so these enumeration names can
+be re-used elsewhere without conflict. This results in a minor
+API change to the coderInfoList() templated function since
+enumerations must be specified like "CoderInfo::TrueMatch" rather
+than just "TrueMatch". Hopefully not a problem since this
+function and class were not documented outside of the headers
+until this release.</li>
+</ul>
+</blockquote>
+<p>2002-02-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (coderInfoList): Finally wrote some
+documentation.</li>
+</ul>
+</blockquote>
+<p>2002-01-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Options.cpp : Use DestroyImageList() rather than
+DestroyImage().</li>
+<li>lib/Geometry.cpp (operator =): Use GetPageGeometry() rather than
+PostscriptGeometry() to parse geometry specifications containing a
+page size.</li>
+</ul>
+</blockquote>
+<p>2002-01-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>Remove bogus cast of blob data in readImages().</li>
+</ul>
+</blockquote>
+<p>2002-01-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (throwImageException): Throwing exceptions was
+leaking memory.</li>
+<li>lib/Exception.cpp (throwException): Throwing exceptions was
+leaking memory.</li>
+<li>lib/Image.cpp (replaceImage): Updated to properly handle
+registration ids.
+(modifyImage): Updated to properly handle registration ids.</li>
+</ul>
+</blockquote>
+<p>2002-01-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (Magick::DrawableGravity::print):
+Bugfix. Remove "Gravity" from the end of each gravity
+specification string. Reported as PR#1084 by stefan@dotify.com.</li>
+</ul>
+</blockquote>
+<p>2002-01-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp, Magick++/Include.h: Use DestroyImageList() rather
+than DestroyImages().</li>
+</ul>
+</blockquote>
+<p>2002-01-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Options.h (antiAlias): Bugfix, set
+drawInfo->text_antialias to control text antialiasing.</li>
+</ul>
+</blockquote>
+<p>2002-01-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Include.h : Imported new composition operators to
+namespace: NoCompositeOp, DarkenCompositeOp, LightenCompositeOp,
+HueCompositeOp, SaturateCompositeOp, ValueCompositeOp,
+ColorizeCompositeOp, LuminizeCompositeOp, ScreenCompositeOp,
+OverlayCompositeOp.</li>
+</ul>
+</blockquote>
+<p>2001-12-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (strokePattern): New method to specify image to
+use as pattern while drawing stroked-outlines of drawn objects.
+(fillPattern): New method to specify image to use as pattern while
+filling drawn objects.
+(penTexture): Method is officially deprecated. Don't use anymore.
+(penColor): Method is officially deprecated. Don't use anymore.</li>
+<li>lib/Drawable.cpp (DrawablePushPattern): Support pushing
+(starting) pattern definition.
+(DrawablePopPattern): Support popping (terminating) pattern
+definition.</li>
+</ul>
+</blockquote>
+<p>2001-12-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableCompositeImage): Read image
+immediately if provided by filename, register with peristent
+registry, and pass as perisistant image type.
+(DrawableCompositeImage): Support specifying Image in memory.
+Passed as perisistant image type.</li>
+</ul>
+</blockquote>
+<p>2001-12-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Color.cpp (operator std::string): Color string buffer was
+one character too short!</li>
+</ul>
+</blockquote>
+<p>2001-12-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40sun1107.ssd.usa.alcatel.com">bfriesen<span>@</span>sun1107<span>.</span>ssd<span>.</span>usa<span>.</span>alcatel<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/TypeMetric.cpp (characterWidth): Eliminate method.
+(characterHeight): Eliminate method.
+(all remaining methods): Change return type to 'double'. Fix
+documentation in source files to reflect that units are in pixels
+rather than points.
+(descent): Renamed method from 'decent' to 'descent'.</li>
+</ul>
+</blockquote>
+<p>2001-11-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (Magick): Invoke DestroyMagick() to clean up
+ImageMagick allocations.</li>
+<li>lib/Magick++/Include.h (ImageType): Added some missing enums to
+Magick namespace.</li>
+</ul>
+</blockquote>
+<p>2001-11-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/CoderInfo.h (CoderInfo): Syntax fix.
+ImageMagick bug #975.</li>
+<li>lib/Image.cpp (draw): Delete ostrstream data when it is no
+longer needed. ImageMagick bug #988.</li>
+</ul>
+</blockquote>
+<p>2001-11-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (pixelColor): Implementation didn't handle pixels
+indexes correctly. Now it does.</li>
+</ul>
+</blockquote>
+<p>2001-11-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (matteFloodfill): Coordinates are long values.
+(floodFillOpacity): New method to floodfill opacity across pixels
+matching color (within fuzz-factor) at point. Similar to
+matteFloodfill except that color is selected from starting point.</li>
+</ul>
+</blockquote>
+<p>2001-10-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40sun1107.ssd.usa.alcatel.com">bfriesen<span>@</span>sun1107<span>.</span>ssd<span>.</span>usa<span>.</span>alcatel<span>.</span>com</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (strokeDashArray): Change to type double.
+(strokeDashOffset): Change to type double.</li>
+</ul>
+</blockquote>
+<p>2001-10-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Geometry.cpp (Geometry): Add constructor from
+MagickLib::RectangleInfo.</li>
+<li>lib/Image.cpp (boundingBox): Method to return smallest bounding
+box enclosing non-border pixels.</li>
+</ul>
+</blockquote>
+<p>2001-10-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (getConstIndexes): Add method to obtain read-only
+pixel indexes.
+(getIndexes): Add method to obtain read-write pixel indexes.
+(Image::Image): Send warnings from Image constructor to cerr
+rather than throwing.</li>
+<li>lib/Color.cpp (Color(PixelPacket&)): Change argument to const
+PixelPacket& as it should have been from the beginning.</li>
+<li>lib/Image.cpp (pixelColor): Reimplemented to be a const method.</li>
+</ul>
+</blockquote>
+<p>2001-10-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (getConstPixels): New method for returning a
+read-only pixel view. Still requires documentation.</li>
+<li>lib/Magick++/STL.h (coderInfoList): Fixed compilation problem
+when compiling with Visual C++.</li>
+</ul>
+</blockquote>
+<p>2001-10-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Color.h (scaleQuantumToDouble): Add polymorphic
+version that accepts double to avoid downconversion error.</li>
+</ul>
+</blockquote>
+<p>2001-10-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Color.h (scaleQuantumToDouble): Cast Quantum to
+double prior to division. Hopefully fix bug.</li>
+</ul>
+</blockquote>
+<p>2001-10-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Color.h (Color(const std::string)): Pass argument by reference.</li>
+<li>(operator=): Pass argument by const reference.</li>
+</ul>
+</blockquote>
+<p>2001-09-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (coderInfoList): New function to support
+obtaining format coder information (as a list of type CoderInfo).</li>
+<li>lib/CoderInfo.cpp (CoderInfo): New class to support obtaining
+format coder information.</li>
+</ul>
+</blockquote>
+<p>2001-09-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (depth): Use GetImageDepth and SetImageDepth
+rather than just getting/setting depth attributes.</li>
+<li>lib/Magick++/STL.h (opacityImage): New unary function object to
+set, or attenuate, image pixel opacity throughout the image.</li>
+<li>lib/Image.cpp (opacity): New method to set, or attenuate, image
+pixel opacity throughout the image.</li>
+<li>lib/Magick++/STL.h (typeImage): New unary function object to set
+image type.</li>
+<li>lib/Image.cpp (type): Added ability to set image type.</li>
+</ul>
+</blockquote>
+<p>2001-09-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (write(Blob)): Tell blob to use malloc allocator.</li>
+<li>lib/Blob.cpp (updateNoCopy): Added parameter so that user can
+specify the allocation system (malloc or new) the memory came
+from. Defaults to C++ memory allocator.</li>
+</ul>
+</blockquote>
+<p>2001-09-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (fileSize): Decided to change return type to off_t
+for increased range and portability.</li>
+</ul>
+</blockquote>
+<p>2001-09-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (fileSize): Changed return value to double.</li>
+</ul>
+</blockquote>
+<p>2001-09-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (colorMap): Allocate a colormap if it does not
+already exist.</li>
+<li>lib/Pixels.cpp (indexes): Don't attempt to validate image type.</li>
+<li>lib/Image.cpp (colorMap): Optimized more for performance.</li>
+</ul>
+</blockquote>
+<p>2001-09-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (fontTypeMetrics): New method to support
+retrieving font metrics.</li>
+<li>lib/TypeMetric.cpp : New class to support font metrics
+information.</li>
+</ul>
+</blockquote>
+<p>2001-09-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Color.h (scaleDoubleToQuantum): Inline static
+method made from previous ScaleDoubleToQuantum #define.
+(scaleQuantumToDouble): Inline static method made from previous
+ScaleQuantumToDouble #define. Helps avoid possibility of clash
+with user code.</li>
+</ul>
+</blockquote>
+<p>2001-08-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (colorMap): Automatically extend colormap if
+specified index is past end of current colormap. Colormap is
+limited to a maximum depth of MaxRGB entries.</li>
+</ul>
+</blockquote>
+<p>2001-08-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (clipMask): New method to add a clip mask to the
+image. Adds clipping to any image operation wherever the clip
+mask image is tranparent.</li>
+</ul>
+</blockquote>
+<p>2001-08-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (print): Add single quotes around file names
+and font specifications.</li>
+</ul>
+</blockquote>
+<p>2001-07-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (read): Ensure that only a single image frame is
+read.</li>
+</ul>
+</blockquote>
+<p>2001-07-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (flattenImages): New function to flatten a
+layered image.</li>
+<li>lib/Montage.cpp (Montage): Montage initial defaults are no
+longer drawn from ImageInfo. MontageInfo structure is entirely
+filled out by updateMontageInfo();</li>
+</ul>
+</blockquote>
+<p>2001-07-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Montage.cpp (updateMontageInfo): Bugfix; colors which were
+intentionally specified as invalid (unset) were being ignored.
+This produced unattractive label text when doing a montage.</li>
+</ul>
+</blockquote>
+<p>2001-07-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (medianFilterImage): Changed argument from
+unsigned int to const double.
+(fillColorImage): New method.
+(strokeColorImage): New method.
+(isValidImage): New method.</li>
+<li>lib/Magick++/Image.h (edge): Change argument from unsigned int
+to double.
+(medianFilter): Changed argument from unsigned int to const
+double.</li>
+<li>lib/Magick++/STL.h (edgeImage): Change argument from unsigned
+int to double.</li>
+<li>demo/demo.cpp (main): Updated to match PerlMagick demo.</li>
+</ul>
+</blockquote>
+<p>2001-06-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (shaveImage): New function to shave edges
+from image.</li>
+<li>lib/Image.cpp (shave): New method to shave edges from image.</li>
+</ul>
+</blockquote>
+<p>2001-06-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (quantize): Remove conditions on whether
+quantization should be done. Now quantization is always done.</li>
+</ul>
+</blockquote>
+<p>2001-06-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Image.h (blur,charcoal,emboss,sharpen): Changed
+radius and sigma parameters to match current ImageMagick defaults.</li>
+</ul>
+</blockquote>
+<p>2001-02-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Options.cpp (updateDrawInfo): The updateDrawInfo() method
+was no longer needed. Due to ImageMagick changes, calling it was
+causing some options to be lost.</li>
+</ul>
+</blockquote>
+<p>2001-01-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (fillRule): New method to specify the rule to use
+when filling drawn objects.</li>
+</ul>
+</blockquote>
+<p>2001-01-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (erase): New method to reset image to background
+color.
+(strokeAntiAlias): New method to control antialiasing of stroked
+objects.</li>
+</ul>
+</blockquote>
+<p>2001-01-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (channel): Renamed method from 'layer' to match
+equivalent change in ImageMagick (ChannelImage). Enumeration
+names *Layer renamed to *Channel.</li>
+</ul>
+</blockquote>
+<p>2001-01-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Montage.h (strokeColor): New method.
+(fillColor): New method.</li>
+<li>lib/Image.cpp (replaceImage): Revised logic so that an inValid
+image should be returned if a NULL pointer is passed. Before this
+change the existing image was preserved.
+(label): Work-around ImageMagick SetImageAttribute bug.</li>
+</ul>
+</blockquote>
+<p>2001-01-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp : Adjusted to ImageMagick animation parameter API
+change.</li>
+</ul>
+</blockquote>
+<p>2000-12-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableCompositeImage): Support specifying
+composition rule.</li>
+</ul>
+</blockquote>
+<p>2000-12-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (draw): Bugfix - the primitive string was not
+properly null terminated. It is a wonder that the code usually
+worked at all. Thanks to <a class="reference external" href="mailto:afatela%40marktest.pt">afatela<span>@</span>marktest<span>.</span>pt</a> for reporting it.</li>
+</ul>
+</blockquote>
+<p>2000-12-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (deconstructImages): New STL function for
+deconstructing an image list to assist with creating an animation.
+(mosaicImages): New STL function for inlaying an image list to
+form a single coherent picture.</li>
+</ul>
+</blockquote>
+<p>2000-12-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (convolve): New method to convolve image using
+user-supplied convolution matrix.
+(unsharpmask): New method to replace image with a sharpened
+version of the original image using the unsharp mask algorithm.</li>
+</ul>
+</blockquote>
+<p>2000-12-14 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>: Adapted to ImageMagick API change which eliminates
+AnnotateInfo.</li>
+</ul>
+</blockquote>
+<p>2000-12-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (annotateImage): Brought into sync with
+annotate methods in Image.</li>
+</ul>
+</blockquote>
+<p>2000-12-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (annotate): Usage of Geometry parameter was
+incorrect. Geometry parameter is used to specify bounding
+area. This changes the interpretation for two of the annotate
+methods (which probably weren't usable before).</li>
+</ul>
+</blockquote>
+<p>2000-11-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Color.h (alphaQuantum): Bugfix. Due to change in
+treatment of opacity member, alphaQuantum() was not allowing value
+to be set.</li>
+</ul>
+</blockquote>
+<p>2000-11-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableFillRule): New class to specify fill
+rule (see SVG's fill-rule).
+(DrawableDashOffset): New class to specify initial offset in dash
+array.
+(DrawableDashArray): New class to specify a stroke dash pattern.
+(DrawableStrokeLineCap): New class to specify the shape to be used
+at the end of open subpaths when they are stroked.
+(DrawableStrokeLineJoin): New class to specify the shape to be
+used at the corners of paths (or other vector shapes) when they
+are stroked.
+(DrawableMiterLimit): New class to specify extension limit for
+miter joins.</li>
+</ul>
+</blockquote>
+<p>2000-11-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (annotate): Reimplement text rotation using affine
+member of AnnotateInfo.
+(strokeDashOffset): New method for specifying the dash offset to
+use for drawing vector objects. Similar to SVG stroke-dashoffset.
+(strokeDashArray): New method for specifying the dash pattern to
+use for drawing vector objects. Similar to SVG stroke-dasharray
+(strokeLineCap): New method to specify the shape to be used at the
+end of open subpaths when they are stroked. Similar to SVG
+stroke-linecap.
+(strokLineJoin): New method to specify the shape to be used at the
+corners of paths (or other vector shapes) when they are
+stroked. Similar to SVG stroke-linejoin.
+(strokeMiterLimit): New method to specify the miter limit when
+joining lines using MiterJoin. Similar to SVG stroke-miterlimit.
+(strokeWidth): Renamed lineWidth method to strokeWidth.</li>
+</ul>
+</blockquote>
+<p>2000-10-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Drawable.h (DrawableCompositeImage): Add a
+short-form constructor to support specifying image location and
+name, but without specifying rendered size (use existing image
+size).</li>
+</ul>
+</blockquote>
+<p>2000-10-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Drawable.h (DrawablePopGraphicContext): New class
+to pop graphic context.
+(DrawablePushGraphicContext): New class to push graphic context.</li>
+<li>lib/Drawable.cpp (DrawableStrokeAntialias): New class to set
+stroke antialiasing.
+(DrawableTextAntialias): New class to set text antialiasing.</li>
+</ul>
+</blockquote>
+<p>2000-10-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (transformOrigin): New method to set origin of
+coordinate system for use when annotating with text or drawing
+(transformRotation): New method to set rotation for use when
+annotating with text or drawing
+(transformScale): New method to set scale for use when annotating
+with text or drawing.
+(transformSkewX): New method to set skew for use in X axis when
+annotating with text or drawing.
+(transformSkewY): New method to set skew for use in Y axis when
+annotating with text or drawing.
+(transformReset): New method to reset transformation to default.</li>
+<li>lib/Drawable.cpp (DrawablePath): New class for drawing SVG-style
+vector paths.
+(PathArcArgs): New class. Argument for PathArcArgs & PathArcAbs.
+(PathArcAbs): New class. Draw arc using absolute coordinates.
+(PathArcRel): New class. Draw arc using relative coordinates.
+(PathClosePath): New class. Close drawing path.
+(PathCurvetoArgs): New class. Argument class for PathCurvetoAbs &
+PathCurvetoRel.
+(PathCurvetoAbs): New class. Cubic bezier, absolute coordinates
+(PathCurvetoRel): New class. Cubic bezier, relative coordinates
+(PathSmoothCurvetoAbs): New class. Cubic bezier, absolute
+coordinates
+(PathSmoothCurvetoRel): New class. Cubic bezier, relative
+coordinates
+(PathQuadraticCurvetoArgs): New class. Argument class for
+PathQuadraticCurvetoAbs and PathQuadraticCurvetoRel.
+(PathQuadraticCurvetoAbs): New class. Quadratic bezier, absolute
+coordinates
+(PathQuadraticCurvetoRel): New class. Quadratic bezier, relative
+coordinates
+(PathSmoothQuadraticCurvetoAbs): New class. Quadratic bezier,
+absolute coordinates
+(PathSmoothQuadraticCurvetoRel): New class. Quadratic bezier,
+relative coordinates
+(PathLinetoAbs): New class. Line to, absolute coordinates
+(PathLinetoRel): New class. Line to, relative coordinates
+(PathLinetoHorizontalAbs): New class. Horizontal lineto, absolute
+coordinates
+(PathLinetoHorizontalRel): New class. Horizontal lineto, relative
+coordinates
+(PathLinetoVerticalAbs): New class. Veritical lineto, absolute
+coordinates.
+(PathLinetoVerticalRel): New class. Vertical lineto, relative
+coordinates.
+(PathMovetoAbs): New class. Moveto, absolute coordinates
+(PathMovetoRel): New class. Moveto, relative coordinates</li>
+</ul>
+</blockquote>
+<p>2000-10-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableSkewX): New object to apply skew in X
+direction.
+(DrawableSkewY): New object to apply skew in Y direction.</li>
+</ul>
+</blockquote>
+<p>2000-10-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (edge): Change argument from 'unsigned int' to
+'double' in order to match ImageMagick API.</li>
+</ul>
+</blockquote>
+<p>2000-10-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableCompositeImage): Renamed from
+DrawableImage.
+(DrawableTextDecoration): Renamed form DrawableDecoration.
+(all-classes): Complete re-write to write the drawing command to a
+stream when draw() is invoked rather than at object construction
+time. This may be somewhat slower for individual draw operations
+but but should be at least as fast for lists of drawing commands,
+and is more flexible going into the future. Drawable classes now
+inherit from DrawableBase but are passed into STL lists and Image
+draw() methods via the surrogate class Drawable. The upshot of
+all this is that the existing published API has not been altered
+but things work much differently under the covers.</li>
+</ul>
+</blockquote>
+<p>2000-10-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableStrokeColor): Renamed from
+DrawableStroke
+(DrawableFillColor): Renamed from DrawableFill
+(DrawableRotation): New class to influence object rotation.
+(DrawableScaling): New class to influence object scaling.
+(DrawableTranslation): New class to influence object translation.</li>
+</ul>
+</blockquote>
+<p>2000-10-04 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableAffine): New class to influence object
+scaling, rotation, and translation (as defined by SVG XML).
+(DrawableAngle): New class to influence drawing angle.
+(DrawableDecoration): New class to influence text decoration such
+as underline.
+(DrawableFill): New class to set object filling color.
+(DrawableFillOpacity): New class to set opacity to use when
+filling object.
+(DrawableFont::): New class to set font.
+(DrawableGravity): New class to set text placement gravity.
+(DrawablePointSize): New class to set font point size.
+(DrawableStroke): New class to set drawing stroke color.
+(DrawableStrokeOpacity): New class to set drawing stroke opacity.
+(DrawableStrokeWidth): New class to set drawing stroke width.</li>
+</ul>
+</blockquote>
+<p>2000-10-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableImage): Added width and height
+parameters to specify size to scale rendered image to. This is
+actually a bug-fix since it seems that the correct drawing command
+was no longer being generated.</li>
+</ul>
+</blockquote>
+<p>2000-09-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (read): New overloaded method to read an image
+based on an array of raw pixels, of specified type and mapping, in
+memory.
+(write): New overloaded method to write image to an array of
+pixels, of specified type and mapping.
+(Image): New overloaded constructor to construct an image based on
+an array of raw pixels, of specified type and mapping, in memory.</li>
+</ul>
+</blockquote>
+<p>2000-09-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (colorize): API change to match change in
+ImageMagick. Now accepts percentage of red, green, and blue to
+colorize with using specified pen color.</li>
+</ul>
+</blockquote>
+<p>2000-09-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Drawable.h: Reverted Coordinate implemenation back
+from and STL pair based implementation to a simple class. Maybe
+this will improve portability. It is more understandable anyway.</li>
+</ul>
+</blockquote>
+<p>2000-09-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Options.cpp : Bugfix. Some DrawInfo attributes were not
+being updated. This lead to options like fontPointsize not
+changing the font.</li>
+</ul>
+</blockquote>
+<p>2000-08-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (blurImage, charcoalImage, embossImage,
+sharpenImage): Expand order_ argument to radius_ & sigma_
+arguments for more control (matches ImageMagick API change).</li>
+<li>lib/Image.cpp (blur, charcoal, emboss, sharpen): Expand order_
+argument to radius_ & sigma_ arguments for more control (matches
+ImageMagick API change).</li>
+</ul>
+</blockquote>
+<p>2000-08-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (read): Check returned Image for embedded
+exception, as well as the existing parameter check. This fixes
+the bug that warnings are not reported.</li>
+</ul>
+</blockquote>
+<p>2000-07-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>test/*.cpp demo/*.cpp: Added call to MagickIncarnate() to set
+ImageMagick install location for Windows. Hopefully this hack can
+be removed someday.</li>
+</ul>
+</blockquote>
+<p>2000-07-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (colorFuzz): Changed type to 'double' from
+'unsigned int' to match change in ImageMagick.</li>
+<li>lib/Color.cpp (Color*): Added copy constructor from base class.
+(operator =): Added assignment operator from base class.</li>
+</ul>
+</blockquote>
+<p>2000-06-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Include.h : Changed enumeration FilterType to
+FilterTypes, and QuantumTypes to QuantumType in order to match
+last-minute API change in ImageMagick.</li>
+</ul>
+</blockquote>
+<p>2000-06-22 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Pixels.cpp (indexes): Bugfix, use
+GetCacheViewIndexes() rather than GetIndexes().</li>
+</ul>
+</blockquote>
+<p>2000-05-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Montage.h (gravity): Type of gravity_ argument, and
+return value changed from 'unsigned int' to GravityType.</li>
+</ul>
+</blockquote>
+<p>2000-04-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (DrawableArc, DrawableBezier, DrawablePolyline,
+RoundRectangle): Added support for new drawing objects.</li>
+</ul>
+</blockquote>
+<p>2000-04-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp: Removed all public methods which accept
+Coordinate arguments except those that accept lists of
+Coordinates. Converted remaining drawable object methods into
+individual classes which inherit from Drawable (e.g. "circle"
+becomes "DrawableCircle"). The constructor for each class is
+compatible with the original method. This results in annoying
+changes to user code but provides more implementation flexibility.</li>
+</ul>
+</blockquote>
+<p>2000-04-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp
+(fillEllipse,fillRectangle,fillCircle,fillPolygon): Removed
+methods. Object filling is now based on whether fillColor or
+penTexture are valid or not. This reflects ImageMagick internal
+changes.</li>
+<li>lib/Image.cpp (fillColor): New method to specify fill color when
+drawing objects.
+(strokeColor): New method to specify outline color when drawing
+objects.
+(penColor): Setting penColor now sets fillColor and
+strokeColor. Getting penColor retrieves the value of
+strokeColor. This supports backwards compatability.</li>
+</ul>
+</blockquote>
+<p>2000-03-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (lineWidth): Type changed from unsigned int to
+double.</li>
+</ul>
+</blockquote>
+<p>2000-03-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (Magick):</li>
+</ul>
+</blockquote>
+<p>2000-03-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h
+(blurImage,charcoalImage,edgeImage,embossImage,
+reduceNoiseImage,sharpenImage): Modified to support order of the
+pixel neighborhood. Backward compatable function objects
+constructors are provided for embossImage, and reduceNoiseImage.</li>
+<li>lib/Image.cpp (blur,charcoal,edge,emboss,reduceNoise,sharpen):
+Now accept unsigned int argument which represents the order of the
+pixel neighborhood (e.g. 3). This is not a backwards compatable
+change, however, backward compatable methods are provided for
+emboss, and reduceNoise.</li>
+</ul>
+</blockquote>
+<p>2000-03-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Pixels.h (Pixels): Moved Image pixel methods to
+Pixels class.</li>
+</ul>
+</blockquote>
+<p>2000-02-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (annotate): Re-wrote to improve performance.
+(draw): Re-wrote to improve performance.</li>
+</ul>
+</blockquote>
+<p>2000-02-26 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Drawable.cpp (text): Bugfix: support spaces in annotation
+text.</li>
+</ul>
+</blockquote>
+<p>2000-02-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (gaussianBlurImage): New function object to
+Gaussian blur image.</li>
+<li>lib/Image.cpp (gaussianBlur): New method to Gaussian blur image.</li>
+</ul>
+</blockquote>
+<p>2000-02-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp : Call-back based LastError class is eliminated in
+favor of ImageMagick 5.2's re-entrant ExceptionInfo reporting.
+This should make Magick++ thread safe under Win32.</li>
+</ul>
+</blockquote>
+<p>2000-02-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (floodFillTexture): Fixed bug due to pixel pointer
+becoming invalid in ImageMagick function.</li>
+</ul>
+</blockquote>
+<p>2000-01-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp : Added locking to reference counting to ensure
+thread (pthread) safety.</li>
+<li>lib/Blob.cpp : Added locking to reference counting to ensure
+thread (pthread) safety.</li>
+<li>lib/LastError.cpp: Added support for thread specific data
+(pthreads) so that error reporting is thread safe.</li>
+<li>lib/Magick++/Thread.h: Added thread wrapper class to provide
+thread-safe locking (pthreads) to Magick++.</li>
+</ul>
+</blockquote>
+<p>2000-01-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp: Added methods getPixels, setPixels, syncPixels,
+readPixels, and writePixels, in order to provide low-level access
+to Image pixels. This approach (direct wrapper around ImageMagick
+functions) does not mean that the planned object-oriented wrapper
+has been forgotten, only that this wrapper is not ready yet, and
+users need to manipulate pixels *now*.</li>
+</ul>
+</blockquote>
+<p>2000-01-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/LastError.cpp: Complete re-implementation of LastError so
+that it hides its implementation. Also assures that all memory is
+explicitly deallocated at program exit to avoid the appearance of
+a leak.</li>
+</ul>
+</blockquote>
+<p>2000-01-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (size): Bug-fix. Set image columns and rows as
+well as image options columns and rows.</li>
+<li>lib/Image.cpp :Depth parameters are now all unsigned in for
+consistency.</li>
+<li>lib/Image.cpp (write): Parameters for writing Blobs re-arranged
+again to hopefully be more sensible.</li>
+<li>lib/Magick++/STL.h: Bug-fix. Re-number scenes from zero when
+linking image range in container into a list. This provides
+expected results.</li>
+</ul>
+</blockquote>
+<p>1999-12-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp
+(write): Additional overloaded methods for BLOBs.
+(read): Additional overloaded methods for BLOBs. Re-ordered
+parameters for one existing method.
+(Image): Additional overloaded methods for BLOBs. Re-ordered
+parameters for one existing method.</li>
+</ul>
+</blockquote>
+<p>1999-12-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (floodFillTexture): Changed coordinates to
+unsigned.</li>
+</ul>
+</blockquote>
+<p>1999-12-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (medianFilter): New method.</li>
+</ul>
+</blockquote>
+<p>1999-12-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (density): Bug fix. Was not setting image x & y
+density.</li>
+</ul>
+</blockquote>
+<p>1999-11-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (page): psPageSize() is renamed to page() and now
+properly returns the attribute from the image.</li>
+</ul>
+</blockquote>
+<p>1999-11-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp: Rename transformColorSpace() to colorSpace().
+Added colorSpace() accessor method.</li>
+</ul>
+</blockquote>
+<p>1999-11-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Color.cpp: Re-implemented PixelPacket pointer so that it is
+never NULL and added a 'valid' field for tracking object validity.</li>
+</ul>
+</blockquote>
+<p>1999-11-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (quantizeError): Eliminated method.</li>
+</ul>
+</blockquote>
+<p>1999-11-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (annotate & draw): Changed implementation to
+reflect change to the way AnnotateInfo is managed by ImageMagick.</li>
+</ul>
+</blockquote>
+<p>1999-11-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (cacheThreshold): New method to set the pixel
+cache threshold.</li>
+<li>lib/Magick++/Include.h (Magick): Added new enumerations from
+classify.h.</li>
+</ul>
+</blockquote>
+<p>1999-10-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Options.h (fontPointsize): Argument is now a double
+to match change in ImageMagick.</li>
+<li>lib/Image.cpp (fontPointsize): Argument is now a double to match
+change in ImageMagick.</li>
+</ul>
+</blockquote>
+<p>1999-10-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Blob.cpp (BlobRef): Bugfix -- start blob reference count at
+one rather than zero.</li>
+</ul>
+</blockquote>
+<p>1999-10-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (Image): Fixed Image constructors from Blob. The
+image reference was not being instantiated as it should have been,
+causing a crash.</li>
+</ul>
+</blockquote>
+<p>1999-10-05 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Blob.cpp: All blob length parameters are now of type size_t.</li>
+<li>lib/Image.cpp (write): Length estimate is now of type size_t.</li>
+</ul>
+</blockquote>
+<p>1999-09-20 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (rotate): No longer accepts a crop option since
+ImageMagick no longer supports this.
+(shear): No longer accepts a crop option since ImageMagick no
+longer supports this.</li>
+</ul>
+</blockquote>
+<p>1999-09-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp:
+(rotate): No longer accepts sharpen argument. User must sharpen
+seperately if desired. This change is due to a similar change in
+ImageMagick 5.0.
+(condense): Removed method.
+(uncondense): Removed method.
+(condensed): Removed method.
+(pixelColor): Adapted to 5.0.</li>
+<li>lib/Magick++/Color.h : Rewrote to efficiently use ImageMagick
+5.0's PixelPacket color representation.</li>
+<li>lib/Color.cpp : Rewrote to efficiently use ImageMagick 5.0's
+PixelPacket color representation.</li>
+</ul>
+</blockquote>
+<p>1999-09-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (condensed): Bug fix. The condensed() method was
+returning the opposite bool value than it should. Oops!</li>
+</ul>
+</blockquote>
+<p>1999-09-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Include.h (MagickLib): Eliminated requirement for
+including <magick/define.h>.</li>
+</ul>
+</blockquote>
+<p>1999-08-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp: Added accessor methods for other key ImageMagick
+structs.</li>
+<li>lib/Options.cpp (penTexture): Fixed bug with removing texture
+caused by change in Image constructor.</li>
+<li>lib/Image.cpp: Changed strategy such that an Image containing a
+null MagickLib::Image pointer is never constructed except for
+under error conditions. Removed existing checks for null image
+pointer on attribute methods.
+Use image() and constImage() accessor methods as part of Image
+implementation in order to clean-up code and ensure
+const-correctness.</li>
+</ul>
+</blockquote>
+<p>1999-08-03 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/STL.h (Magick): Added STL function readImages().
+Not tested yet.
+(Magick): Added STL function writeImages(). Not tested yet.</li>
+<li>lib/Image.cpp: Removed support for 'text' attribute as this is
+no longer present in ImageMagick as of 4.2.8.</li>
+</ul>
+</blockquote>
+<p>1999-07-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Image.cpp (condense): Skip condensing image if already
+condensed.
+(uncondense): Skip uncondensing image if not condensed.
+(condensed): New method to test if image is condensed.
+(classType): New method which supports conversion of the image
+storage class. May result in loss of color information
+(quantization is used) if a DirectClass image is converted to
+PseudoClass.</li>
+</ul>
+</blockquote>
+<p>1999-07-18 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Magick++/Color.h (Magick::Color): Color parameters are now
+stored in a MagickLib::RunlengthPacket structure which is
+referenced via a pointer. This structure is either allocated by a
+Magick::Color constructor or passed as an argument to a
+Magick::Color constructor so that it may refer to to a
+MagickLib::Image pixel. The owner of the structure is managed so
+that the structure is only deleted if it was allocated by
+Magick::Color.</li>
+</ul>
+</blockquote>
+<p>1999-07-09 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>overall : Removed 'Magick' prefix from all source file
+names. Moved class headers to Magick++ subdirectory. This should
+not break any code using the documented interface (via
+Magick++.h).</li>
+</ul>
+</blockquote>
+<p>1999-07-08 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/MagickImage.cpp (composite): Support composition placement
+by gravity like PerlMagick does.</li>
+</ul>
+</blockquote>
+<p>1999-07-07 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/MagickImage.cpp (Image): Added constructors to construct an
+Image from a BLOB.</li>
+</ul>
+</blockquote>
+<p>1999-07-06 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/manipulate.cpp (main): Wrote a basic sanity test for
+reading and writing BLOBS.</li>
+</ul>
+</blockquote>
+<p>1999-06-21 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/MagickImage.cpp (read): Added support for reading an encoded
+image stored in a BLOB. Uses new ImageMagick APIs introduced on
+July 21, 1999.
+(write): Added support for writing an encoded image to a BLOB.</li>
+</ul>
+</blockquote>
+<p>1999-06-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/MagickInclude.h : Use new <magick/api.h> interface to
+ImageMagick to avoid namespace-induced problems.</li>
+<li>configure.in : CPPFLAGS and LDFLAGS specified via the
+environment take precidence over flags from Magick-config.</li>
+</ul>
+</blockquote>
+<p>1999-05-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/MagickSTL.h (mapImages): New algorithm to map the sequence
+of images to the color map of a provided image.
+(quantizeImages): New algorithm to quantize a sequence of images
+to a common color map.</li>
+</ul>
+</blockquote>
+<p>1999-05-24 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/MagickBlob.cpp (updateNoCopy): New method to allow derived
+classes to insert data into the base class without making a copy
+of the data. This represents a transfer of ownership of the data
+from the derived class to the base class.</li>
+</ul>
+</blockquote>
+<p>1999-05-23 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/MagickColor.cpp (operator =): Adapted to new ImageMagick
+4.2.6 as of 5/23/99 which removes X11 compatability functions.</li>
+<li>lib/MagickGeometry.cpp (operator =): Adapted to new ImageMagick
+4.2.6 as of 5/23/99 which removes X11 compatability functions.</li>
+</ul>
+</blockquote>
+<p>1999-05-17 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/MagickBlob.cpp (Blob): Support default constructor for Blob.</li>
+</ul>
+</blockquote>
+<p>1999-05-16 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/MagickSTL.h (transformColorSpaceImage): New unary function
+object to invoke transformColorSpace on STL container object.</li>
+<li>lib/MagickImage.cpp (transformColorSpace): New method to
+transform the image data to a new colorspace.</li>
+</ul>
+</blockquote>
+<p>1999-05-15 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/MagickImage.cpp (ping): Re-implemented to match (requested)
+API change in ImageMagick 4.2.5. Method signature has changed to
+be like 'read'.
+(annotate): Added two new overloaded methods for text annotation
+in order to support the new rotated text capability in ImageMagick
+4.2.5. To accomplish this, the default for gravity had to be
+removed from several methods. This may impact existing code.
+Still not sure if this is the best set of method signatures.</li>
+</ul>
+</blockquote>
+<p>1999-05-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/MagickImage.cpp (ping): New method to obtain image size in
+bytes and geometry without the overhead of reading the complete
+image.
+(uncondense): New method to uncompress run-length encoded pixels
+into a simple array to make them easy to operate on.</li>
+</ul>
+</blockquote>
+<p>1999-05-12 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/MagickImage.cpp (comment): Passing an empty string as the
+comment results in no comment at all rather than a comment with no
+data.</li>
+</ul>
+</blockquote>
+<p>1999-05-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/MagickImage.cpp (iccColorProfile): Implemented method to set
+ICC color profile from opaque object in memory (must be formatted
+outside of Magick++).
+(iptcProfile): Implemented method to set IPTC profile from opaque
+object in memory (must be formatted outside of Magick++).</li>
+<li>lib/MagickBlob.cpp: New class to support managing user-supplied
+opaque Binary Large OBjects (BLOBS) in the API. Reference counted
+to improve semantics and to possibly reduce memory consumption.</li>
+</ul>
+</blockquote>
+<p>1999-05-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/Makefile.am (libMagick): Updated to use libtool 1.3 so that
+shared library can be built.</li>
+</ul>
+</blockquote>
+<p>1999-04-25 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/MagickImage.cpp (montageGeometry): Return Magick::Geometry
+rather than std::string.</li>
+</ul>
+</blockquote>
+<p>1999-04-19 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/MagickColor.cpp (alpha): Added support for setting alpha via
+scaled-double to the Color class. The new method name is 'alpha'.</li>
+</ul>
+</blockquote>
+<p>1999-04-13 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>lib/MagickColor.cpp: Added support for setting an alpha value
+(unscaled Quantum only) for use on DirectColor images that have
+matte enabled. This requires ImageMagick 4.2.2 dated April 13,
+1999 or later to compile since Cristy added a special flag to
+allow testing to see if the user has specified an opacity value:
+"I added XColorFlags to magick/classify.h. If DoMatte is set in
+color->flags then the opacity value is valid in color->pixel."</li>
+</ul>
+</blockquote>
+<p>1999-04-11 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>demo/flip.cpp (main): New file. Demonstrates use of flipImage
+function object as well as morphImages algorithm.</li>
+</ul>
+</blockquote>
+<p>1999-04-10 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p>
+<blockquote>
+<ul class="simple">
+<li>tests/color.cpp : New file to support testing the Magick::Color
+classes.</li>
+<li>lib/MagickOptions.cpp: The ImageInfo filter member is now
+ignored by ImageMagick (as of ImageMagick 4.2.2 April 10, 1998) so
+support for setting it is removed. The Image filter member is
+still updated. According to Cristy, this ImageMagick version
+removes automatic sharpening of resized images. The blur member
+is added to the Image structure. A blur value < 1 causes the image
+to be sharpened when resizing while a value > 1 leaves the image
+blurry. Magick++ does not yet support the blur member.</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Magick::CoderInfo Class</title>
<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="magick-coderinfo-class">
</pre>
<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Magick::CoderInfo Class</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="magick-coderinfo-class">
+<h1 class="title">Magick::CoderInfo Class</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>The CoderInfo class supports obtaining information about
+GraphicsMagick support for an image format (designated by a magick
+string). It may be used to provide support for a specific named format
+(provided as an argument to the constructor), or as an element of a
+container when format support is queried using the coderInfoList()
+templated function.</p>
+<p>The following code fragment illustrates how CoderInfo may be used:</p>
+<pre class="literal-block">
+CoderInfo info("GIF");
+cout << info->name() << ": (" << info->description() << ") : ";
+cout << "Readable = ";
+if ( info->isReadable() )
+ cout << "true";
+else
+ cout << "false";
+cout << ", ";
+cout << "Writable = ";
+if ( info->isWritable() )
+ cout << "true";
+else
+ cout << "false";
+cout << ", ";
+cout << "Multiframe = ";
+if ( info->isMultiframe() )
+ cout << "true";
+else
+ cout << "false";
+cout << endl;
+</pre>
+<p>The definition of class 'Magick::CoderInfo' is:</p>
+<pre class="literal-block">
+namespace Magick
+{
+ class MagickDLLDecl CoderInfo
+ {
+ public:
+
+ enum MatchType {
+ AnyMatch, // match any coder
+ TrueMatch, // match coder if true
+ FalseMatch // match coder if false
+ };
+
+ // Default constructor
+ CoderInfo ( void );
+
+ // Copy constructor
+ CoderInfo ( const CoderInfo &coder_ );
+
+ // Construct with coder name
+ CoderInfo ( const std::string &name_ );
+
+ // Destructor
+ ~CoderInfo ( void );
+
+ // Format name
+ std::string name( void ) const;
+
+ // Format description
+ std::string description( void ) const;
+
+ // Format is readable
+ bool isReadable( void ) const;
+
+ // Format is writeable
+ bool isWritable( void ) const;
+
+ // Format supports multiple frames
+ bool isMultiFrame( void ) const;
+
+ // Assignment operator
+ CoderInfo& operator= (const CoderInfo &coder_ );
+
+ };
+}
+</pre>
+<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Magick::Color Class</title>
<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="magick-color-class">
<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Magick::Color Class</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="magick-color-class">
+<h1 class="title">Magick::Color Class</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>Color is the base color class in Magick++. It is a simple container
+class for the pixel red, green, blue, and alpha values scaled to fit
+GraphicsMagick's Quantum (number of bits in a color component value)
+size. Normally users will instantiate a class derived from Color which
+supports the color model that fits the needs of the application. The
+Color class may be constructed directly from an X11-style color
+string. As a perhaps odd design decision, the value transparent black
+is considered to represent an unset value (invalid color) in many
+cases. This choice was made since it avoided using more memory. The
+default Color constructor constructs an invalid color
+(i.e. transparent black) and may be used as a parameter in order to
+remove a color setting.</p>
+<div class="section" id="quantum">
+<h1>Quantum</h1>
+<p>The base type used to represent color samples in GraphicsMagick is the
+Quantum type. Pixels are represented by a structure of Quantum
+values. For example, an RGB pixel contains red, green, and blue
+quantums, while an RGBA pixel contains red, green, blue, and opacity
+quantums. The maximum value that a Quantum can attain is specified by
+a constant value represented by the MaxRGB define, which is itself
+determined by the number of bits in a Quantum. The QuantumDepth build
+option determines the number of bits in a Quantum.</p>
+</div>
+<div class="section" id="pixelpacket">
+<h1>PixelPacket</h1>
+<p>PixelPacket is the internal representation of a pixel in
+GraphicsMagick. GraphicsMagick may be compiled to support 32, 64, or
+128 bit pixels of type PixelPacket. This is controlled by the value of
+the QuantumDepth define. The default is 32 bit pixels
+(QuantumDepth=8), which provides the best performance and the least
+resource consumption. If additional color precision or range is
+desired, then GraphicsMagick may be compiled with QuantumDepth=16 or
+QuantumDepth=32. The following table shows the relationship between
+QuantumDepth, the type of Quantum, and the overall PixelPacket size:</p>
+<table border="1" class="docutils">
+<caption>Effect Of QuantumDepth Values</caption>
+<colgroup>
+<col width="28%" />
+<col width="35%" />
+<col width="37%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">QuantumDepth</th>
+<th class="head">Quantum Typedef</th>
+<th class="head">PixelPacket Size</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>8</td>
+<td>unsigned char</td>
+<td>32 bits</td>
+</tr>
+<tr><td>16</td>
+<td>unsigned short</td>
+<td>64 bits</td>
+</tr>
+<tr><td>32</td>
+<td>unsigned int</td>
+<td>128 bits</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="color-class">
+<h1>Color Class</h1>
+<p>The Color base class is not intended to be used directly. Normally a
+user will construct a derived class or inherit from this class. Color
+arguments are must be scaled to fit the Quantum size according to the
+range of MaxRGB. The Color class contains a pointer to a PixelPacket,
+which may be allocated by the Color class, or may refer to an existing
+pixel in an image.</p>
+<p>An alternate way to construct the class is via an X11-compatible color
+specification string (e.g. Color(“red”) or Color (“#FF0000”)). Since
+the class may be constructed from a string, convenient strings may be
+passed in place of an explicit Color object in methods which accept a
+reference to Color. Color may also be converted to a std::string for
+convenience in user interfaces, and for saving settings to a text
+file.</p>
+<p>The following is the definition of the Color class:</p>
+<pre class="literal-block">
+// Compare two Color objects regardless of LHS/RHS
+int MagickDLLDecl operator == ( const Magick::Color& left_, const Magick::Color& right_ );
+int MagickDLLDecl operator != ( const Magick::Color& left_, const Magick::Color& right_ );
+int MagickDLLDecl operator > ( const Magick::Color& left_, const Magick::Color& right_ );
+int MagickDLLDecl operator < ( const Magick::Color& left_, const Magick::Color& right_ );
+int MagickDLLDecl operator >= ( const Magick::Color& left_, const Magick::Color& right_ );
+int MagickDLLDecl operator <= ( const Magick::Color& left_, const Magick::Color& right_ );
+
+// Base color class stores RGB components scaled to fit Quantum
+class MagickDLLDecl Color
+{
+public:
+ Color ( Quantum red_,
+ Quantum green_,
+ Quantum blue_ );
+ Color ( Quantum red_,
+ Quantum green_,
+ Quantum blue_,
+ Quantum alpha_ );
+ Color ( const std::string &x11color_ );
+ Color ( const char * x11color_ );
+ Color ( void );
+ virtual ~Color ( void );
+ Color ( const Color & color_ );
+
+ // Red color (range 0 to MaxRGB)
+ void redQuantum ( Quantum red_ );
+ Quantum redQuantum ( void ) const;
+
+ // Green color (range 0 to MaxRGB)
+ void greenQuantum ( Quantum green_ );
+ Quantum greenQuantum ( void ) const;
+
+ // Blue color (range 0 to MaxRGB)
+ void blueQuantum ( Quantum blue_ );
+ Quantum blueQuantum ( void ) const;
+
+ // Alpha level (range OpaqueOpacity=0 to TransparentOpacity=MaxRGB)
+ void alphaQuantum ( Quantum alpha_ );
+ Quantum alphaQuantum ( void ) const;
+
+ // Scaled (to 1.0) version of alpha for use in sub-classes
+ // (range opaque=0 to transparent=1.0)
+ void alpha ( double alpha_ );
+ double alpha ( void ) const;
+
+ // Does object contain valid color?
+ void isValid ( bool valid_ );
+ bool isValid ( void ) const;
+
+ // Set color via X11 color specification string
+ const Color& operator= ( const std::string &x11color_ );
+ const Color& operator= ( const char * x11color_ );
+
+ // Assignment operator
+ Color& operator= ( const Color& color_ );
+
+ // Return X11 color specification string
+ /* virtual */ operator std::string() const;
+
+ // Return ImageMagick PixelPacket
+ operator PixelPacket() const;
+
+ // Construct color via ImageMagick PixelPacket
+ Color ( const PixelPacket &color_ );
+
+ // Set color via ImageMagick PixelPacket
+ const Color& operator= ( const PixelPacket &color_ );
+
+};
+</pre>
+</div>
+<div class="section" id="color-derived-classes">
+<h1>Color Derived Classes</h1>
+<p>Available derived color specification classes are shown in the following table:</p>
+<table border="1" class="docutils">
+<caption>Color Derived Classes</caption>
+<colgroup>
+<col width="14%" />
+<col width="86%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Class</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td><a class="reference internal" href="#colorrgb">ColorRGB</a></td>
+<td>Representation of RGB color with red, green, and blue specified
+as ratios (0 to 1)</td>
+</tr>
+<tr><td><a class="reference internal" href="#colorgray">ColorGray</a></td>
+<td>Representation of grayscale RGB color (equal parts red, green,
+and blue) specified as a ratio (0 to 1)</td>
+</tr>
+<tr><td><a class="reference internal" href="#colormono">ColorMono</a></td>
+<td>Representation of a black/white color (true/false)</td>
+</tr>
+<tr><td><a class="reference internal" href="#colorhsl">ColorHSL</a></td>
+<td>Representation of a color in Hue/Saturation/Luminosity (HSL)
+colorspace</td>
+</tr>
+<tr><td><a class="reference internal" href="#coloryuv">ColorYUV</a></td>
+<td>Representation of a color in the YUV colorspace</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="colorrgb">
+<h1>ColorRGB</h1>
+<p>Representation of an RGB color in floating point. All color arguments
+have a valid range of 0.0 - 1.0. Note that floating point alpha may be
+set via the alpha() method in the Color base class:</p>
+<pre class="literal-block">
+class ColorRGB : public Color
+{
+public:
+ ColorRGB ( double red_, double green_, double blue_ );
+ ColorRGB ( void );
+ ColorRGB ( const Color & color_ );
+ /* virtual */ ~ColorRGB ( void );
+
+ void red ( double red_ );
+ double red ( void ) const;
+
+ void green ( double green_ );
+ double green ( void ) const;
+
+ void blue ( double blue_ );
+ double blue ( void ) const;
+
+ // Assignment operator from base class
+ ColorRGB& operator= ( const Color& color_ );
+
+protected:
+ // Constructor to construct with PixelPacket*
+ ColorRGB ( PixelPacket* rep_, PixelType pixelType_ );
+};
+</pre>
+</div>
+<div class="section" id="colorgray">
+<h1>ColorGray</h1>
+<p>Representation of a floating point grayscale color (in RGB
+colorspace). Grayscale is simply RGB with equal parts of red, green,
+and blue. All double arguments have a valid range of 0.0 - 1.0:</p>
+<pre class="literal-block">
+class ColorGray : public Color
+{
+public:
+ ColorGray ( double shade_ );
+ ColorGray ( void );
+ ColorGray ( const Color & color_ );
+ /* virtual */ ~ColorGray ();
+
+ void shade ( double shade_ );
+ double shade ( void ) const;
+
+ // Assignment operator from base class
+ ColorGray& operator= ( const Color& color_ );
+
+};
+</pre>
+</div>
+<div class="section" id="colormono">
+<h1>ColorMono</h1>
+<p>Representation of a black/white pixel (in RGB colorspace). Color
+arguments are constrained to 'false' (black pixel) and 'true' (white
+pixel):</p>
+<pre class="literal-block">
+class ColorMono : public Color
+{
+public:
+ ColorMono ( bool mono_ );
+ ColorMono ( void );
+ ColorMono ( const Color & color_ );
+ /* virtual */ ~ColorMono ();
+
+ void mono ( bool mono_ );
+ bool mono ( void ) const;
+
+ // Assignment operator from base class
+ ColorMono& operator= ( const Color& color_ );
+
+};
+</pre>
+</div>
+<div class="section" id="colorhsl">
+<h1>ColorHSL</h1>
+<p>Representation of a color in Hue/Saturation/Luminosity (HSL) colorspace:</p>
+<pre class="literal-block">
+class MagickDLLDecl ColorHSL : public Color
+{
+public:
+ ColorHSL ( double hue_, double saturation_, double luminosity_ );
+ ColorHSL ( void );
+ ColorHSL ( const Color & color_ );
+ /* virtual */ ~ColorHSL ( );
+
+ void hue ( double hue_ );
+ double hue ( void ) const;
+
+ void saturation ( double saturation_ );
+ double saturation ( void ) const;
+
+ void luminosity ( double luminosity_ );
+ double luminosity ( void ) const;
+
+ // Assignment operator from base class
+ ColorHSL& operator= ( const Color& color_ );
+
+};
+</pre>
+</div>
+<div class="section" id="coloryuv">
+<h1>ColorYUV</h1>
+<p>Representation of a color in YUV colorspace (used to encode color for
+television transmission). Argument ranges are</p>
+<blockquote>
+<table border="1" class="docutils">
+<colgroup>
+<col width="11%" />
+<col width="89%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Y</td>
+<td>0.0 through 1.0</td>
+</tr>
+<tr><td>U</td>
+<td>-0.5 through 0.5</td>
+</tr>
+<tr><td>V</td>
+<td>-0.5 through 0.5</td>
+</tr>
+</tbody>
+</table>
+</blockquote>
+<pre class="literal-block">
+class ColorYUV : public Color
+{
+public:
+ ColorYUV ( double y_, double u_, double v_ );
+ ColorYUV ( void );
+ ColorYUV ( const Color & color_ );
+ /* virtual */ ~ColorYUV ( void );
+
+ void u ( double u_ );
+ double u ( void ) const;
+
+ void v ( double v_ );
+ double v ( void ) const;
+
+ void y ( double y_ );
+ double y ( void ) const;
+
+ // Assignment operator from base class
+ ColorYUV& operator= ( const Color& color_ );
+
+};
+</pre>
+<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Magick::Drawable</title>
<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="magick-drawable">
<!-- This text is in reStucturedText format, so it may look a bit odd. -->
<!-- See http://docutils.sourceforge.net/rst.html for details. -->
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#coordinate-structure" id="id8">Coordinate structure</a></li>
<li><a class="reference internal" href="#drawable-classes" id="id9">Drawable classes</a></li>
<h1><a class="toc-backref" href="#id9">Drawable classes</a></h1>
<p>Drawable classes represent objects to be drawn on the image.</p>
<div class="contents local topic" id="id2">
-<p class="topic-title first">Drawable classes</p>
+<p class="topic-title">Drawable classes</p>
<ul class="simple">
<li><a class="reference internal" href="#drawableaffine" id="id11">DrawableAffine</a></li>
<li><a class="reference internal" href="#drawablearc" id="id12">DrawableArc</a></li>
coordinate transforms may be used to <a class="reference external" href="#DrawableTranslation">translate the origin</a> in order to position the object, rotate it,
skew it, or scale it.</p>
<div class="contents local topic" id="vector-path-commands">
-<p class="topic-title first">Vector path commands</p>
+<p class="topic-title">Vector path commands</p>
<ul class="simple">
<li><a class="reference internal" href="#the-moveto-commands" id="id58">The "moveto" commands</a></li>
<li><a class="reference internal" href="#the-closepath-command" id="id59">The "closepath" command</a></li>
</li>
</ul>
<div class="contents local topic" id="id4">
-<p class="topic-title first">Curve Commands</p>
+<p class="topic-title">Curve Commands</p>
<ul class="simple">
<li><a class="reference internal" href="#cubic-bezier-curve-commands" id="id62">Cubic Bézier curve commands</a></li>
<li><a class="reference internal" href="#quadratic-bezier-curve-commands" id="id63">Quadratic Bézier curve commands</a></li>
<div class="section" id="cubic-bezier-curve-commands">
<h3><a class="toc-backref" href="#id62">Cubic Bézier curve commands</a></h3>
<div class="contents local topic" id="id5">
-<p class="topic-title first">Cubic Bézier curve commands</p>
+<p class="topic-title">Cubic Bézier curve commands</p>
<ul class="simple">
<li><a class="reference internal" href="#pathcurvetoargs" id="id65">PathCurvetoArgs</a></li>
<li><a class="reference internal" href="#pathcurvetoabs" id="id66">PathCurvetoAbs</a></li>
<div class="section" id="quadratic-bezier-curve-commands">
<h3><a class="toc-backref" href="#id63">Quadratic Bézier curve commands</a></h3>
<div class="contents local topic" id="id6">
-<p class="topic-title first">Quadratic Bézier curve commands</p>
+<p class="topic-title">Quadratic Bézier curve commands</p>
<ul class="simple">
<li><a class="reference internal" href="#pathquadraticcurvetoargs" id="id70">PathQuadraticCurvetoArgs</a></li>
<li><a class="reference internal" href="#pathquadraticcurvetoabs" id="id71">PathQuadraticCurvetoAbs</a></li>
<div class="section" id="elliptical-arc-curve-commands">
<h3><a class="toc-backref" href="#id64">Elliptical arc curve commands</a></h3>
<div class="contents local topic" id="id7">
-<p class="topic-title first">Elliptical arc curve commands</p>
+<p class="topic-title">Elliptical arc curve commands</p>
<ul class="simple">
<li><a class="reference internal" href="#patharcargs" id="id75">PathArcArgs</a></li>
<li><a class="reference internal" href="#patharcabs" id="id76">PathArcAbs</a></li>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Magick::Drawable</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="magick-drawable">
+<h1 class="title">Magick::Drawable</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#coordinate-structure" id="id8">Coordinate structure</a></li>
+<li><a class="reference internal" href="#drawable-classes" id="id9">Drawable classes</a></li>
+<li><a class="reference internal" href="#vector-path-classes" id="id10">Vector Path Classes</a></li>
+</ul>
+</div>
+<p>Drawable provides a convenient interface for preparing vector, image,
+or text arguments for the Image::draw() method. Each instance of a
+Drawable sub-class represents a single drawable object. Drawable
+objects may be drawn "one-by-one" via multiple invocations of the
+Image <a class="reference external" href="Image.html#draw">draw()</a> method, or may be drawn
+"all-at-once" by passing a list of Drawable objects to the Image
+<a class="reference external" href="Image.html#draw">draw()</a> method. The one-by-one approach is
+convenient for simple drawings, while the list-based approach is
+appropriate for drawings which require more sophistication.</p>
+<p>The following is an example using the Drawable subclasses with a
+one-by-one approach to draw the following figure:</p>
+<img alt="Figure showing drawing example" src="Drawable_example_1.png" style="width: 300px; height: 200px;" />
+<pre class="literal-block">
+#include <string>
+#include <iostream>
+#include <Magick++.h>
+
+using namespace std;
+using namespace Magick;
+
+int main(int /*argc*/,char **argv)
+{
+ try {
+ InitializeMagick(*argv);
+
+ // Create base image (white image of 300 by 200 pixels)
+ Image image( Geometry(300,200), Color("white") );
+
+ // Set draw options
+ image.strokeColor("red"); // Outline color
+ image.fillColor("green"); // Fill color
+ image.strokeWidth(5);
+
+ // Draw a circle
+ image.draw( DrawableCircle(100,100, 50,100) );
+
+ // Draw a rectangle
+ image.draw( DrawableRectangle(200,200, 270,170) );
+
+ // Display the result
+ image.display( );
+ }
+ catch( exception &error_ )
+ {
+ cout << "Caught exception: " << error_.what() << endl;
+ return 1;
+ }
+
+ return 0;
+}
+</pre>
+<p>Since Drawable is an object it may be saved in an array or a list for
+later (perhaps repeated) use. The following example shows how to draw
+the same figure using the list-based approach:</p>
+<pre class="literal-block">
+#include <string>
+#include <iostream>
+#include <list>
+#include <Magick++.h>
+
+using namespace std;
+using namespace Magick;
+
+int main(int /*argc*/,char **/*argv*/)
+{
+ try {
+
+ InitializeMagick(*argv);
+
+ // Create base image (white image of 300 by 200 pixels)
+ Image image( Geometry(300,200), Color("white") );
+
+ // Construct drawing list
+ std::list<Magick::Drawable> drawList;
+
+ // Add some drawing options to drawing list
+ drawList.push_back(DrawableStrokeColor("red")); // Outline color
+ drawList.push_back(DrawableStrokeWidth(5)); // Stroke width
+ drawList.push_back(DrawableFillColor("green")); // Fill color
+
+ // Add a Circle to drawing list
+ drawList.push_back(DrawableCircle(100,100, 50,100));
+
+ // Add a Rectangle to drawing list
+ drawList.push_back(DrawableRectangle(200,100, 270,170));
+
+ // Draw everything using completed drawing list
+ image.draw(drawList);
+
+ // Display the result
+ image.display( );
+ }
+ catch( exception &error_ )
+ {
+ cout << "Caught exception: " << error_.what() << endl;
+ return 1;
+ }
+
+ return 0;
+}
+</pre>
+<div class="section" id="coordinate-structure">
+<h1><a class="toc-backref" href="#id8">Coordinate structure</a></h1>
+<p>Drawable depends on the simple Coordinate structure which represents a
+pair of x,y coodinates. The Coordinate structure is defined as
+follows:</p>
+<pre class="literal-block">
+class Coordinate
+{
+public:
+
+ // Default Constructor
+ Coordinate ( void );
+
+ // Constructor, setting first & second
+ Coordinate ( double x_, double y_ );
+
+ // Destructor
+ virtual ~Coordinate ();
+
+ // x coordinate member
+ void x ( double x_ );
+ double x ( void ) const;
+
+ // y coordinate member
+ void y ( double y_ );
+ double y ( void ) const;
+};
+</pre>
+</div>
+<div class="section" id="drawable-classes">
+<h1><a class="toc-backref" href="#id9">Drawable classes</a></h1>
+<p>Drawable classes represent objects to be drawn on the image.</p>
+<div class="contents local topic" id="id2">
+<p class="topic-title first">Drawable classes</p>
+<ul class="simple">
+<li><a class="reference internal" href="#drawableaffine" id="id11">DrawableAffine</a></li>
+<li><a class="reference internal" href="#drawablearc" id="id12">DrawableArc</a></li>
+<li><a class="reference internal" href="#drawablebezier" id="id13">DrawableBezier</a></li>
+<li><a class="reference internal" href="#drawableclippath" id="id14">DrawableClipPath</a></li>
+<li><a class="reference internal" href="#drawablecircle" id="id15">DrawableCircle</a></li>
+<li><a class="reference internal" href="#drawablecolor" id="id16">DrawableColor</a></li>
+<li><a class="reference internal" href="#drawablecompositeimage" id="id17">DrawableCompositeImage</a></li>
+<li><a class="reference internal" href="#drawabledasharray" id="id18">DrawableDashArray</a></li>
+<li><a class="reference internal" href="#drawabledashoffset" id="id19">DrawableDashOffset</a></li>
+<li><a class="reference internal" href="#drawableellipse" id="id20">DrawableEllipse</a></li>
+<li><a class="reference internal" href="#drawablefillcolor" id="id21">DrawableFillColor</a></li>
+<li><a class="reference internal" href="#drawablefillrule" id="id22">DrawableFillRule</a></li>
+<li><a class="reference internal" href="#drawablefillopacity" id="id23">DrawableFillOpacity</a></li>
+<li><a class="reference internal" href="#drawablefont" id="id24">DrawableFont</a></li>
+<li><a class="reference internal" href="#drawablegravity" id="id25">DrawableGravity</a></li>
+<li><a class="reference internal" href="#drawableline" id="id26">DrawableLine</a></li>
+<li><a class="reference internal" href="#drawablematte" id="id27">DrawableMatte</a></li>
+<li><a class="reference internal" href="#drawablemiterlimit" id="id28">DrawableMiterLimit</a></li>
+<li><a class="reference internal" href="#drawablepath" id="id29">DrawablePath</a></li>
+<li><a class="reference internal" href="#drawablepoint" id="id30">DrawablePoint</a></li>
+<li><a class="reference internal" href="#drawablepointsize" id="id31">DrawablePointSize</a></li>
+<li><a class="reference internal" href="#drawablepolygon" id="id32">DrawablePolygon</a></li>
+<li><a class="reference internal" href="#drawablepolyline" id="id33">DrawablePolyline</a></li>
+<li><a class="reference internal" href="#drawablepopclippath" id="id34">DrawablePopClipPath</a></li>
+<li><a class="reference internal" href="#drawablepopgraphiccontext" id="id35">DrawablePopGraphicContext</a></li>
+<li><a class="reference internal" href="#drawablepushclippath" id="id36">DrawablePushClipPath</a></li>
+<li><a class="reference internal" href="#drawablepushgraphiccontext" id="id37">DrawablePushGraphicContext</a></li>
+<li><a class="reference internal" href="#drawablepushpattern" id="id38">DrawablePushPattern</a></li>
+<li><a class="reference internal" href="#drawablepoppattern" id="id39">DrawablePopPattern</a></li>
+<li><a class="reference internal" href="#drawablerectangle" id="id40">DrawableRectangle</a></li>
+<li><a class="reference internal" href="#drawablerotation" id="id41">DrawableRotation</a></li>
+<li><a class="reference internal" href="#drawableroundrectangle" id="id42">DrawableRoundRectangle</a></li>
+<li><a class="reference internal" href="#drawablescaling" id="id43">DrawableScaling</a></li>
+<li><a class="reference internal" href="#drawableskewx" id="id44">DrawableSkewX</a></li>
+<li><a class="reference internal" href="#drawableskewy" id="id45">DrawableSkewY</a></li>
+<li><a class="reference internal" href="#drawablestrokeantialias" id="id46">DrawableStrokeAntialias</a></li>
+<li><a class="reference internal" href="#drawablestrokecolor" id="id47">DrawableStrokeColor</a></li>
+<li><a class="reference internal" href="#drawablestrokelinecap" id="id48">DrawableStrokeLineCap</a></li>
+<li><a class="reference internal" href="#drawablestrokelinejoin" id="id49">DrawableStrokeLineJoin</a></li>
+<li><a class="reference internal" href="#drawablestrokeopacity" id="id50">DrawableStrokeOpacity</a></li>
+<li><a class="reference internal" href="#drawablestrokewidth" id="id51">DrawableStrokeWidth</a></li>
+<li><a class="reference internal" href="#drawabletext" id="id52">DrawableText</a></li>
+<li><a class="reference internal" href="#drawabletextantialias" id="id53">DrawableTextAntialias</a></li>
+<li><a class="reference internal" href="#drawabletextdecoration" id="id54">DrawableTextDecoration</a></li>
+<li><a class="reference internal" href="#drawabletextundercolor" id="id55">DrawableTextUnderColor</a></li>
+<li><a class="reference internal" href="#drawabletranslation" id="id56">DrawableTranslation</a></li>
+<li><a class="reference internal" href="#drawableviewbox" id="id57">DrawableViewbox</a></li>
+</ul>
+</div>
+<div class="section" id="drawableaffine">
+<h2><a class="toc-backref" href="#id11">DrawableAffine</a></h2>
+<p>Specify a transformation matrix to adjust scaling, rotation, and
+translation (coordinate transformation) for subsequently drawn objects
+in the same or decendent drawing context. The <cite>sx_</cite> & <cite>sy_</cite> parameters
+represent the x & y scale factors, the <cite>rx_</cite> & <cite>ry_</cite> parameters represent
+the x & y rotation, and the <cite>tx_</cite> & <cite>ty_</cite> parameters represent the x & y
+translation:</p>
+<pre class="literal-block">
+DrawableAffine ( double sx_, double sy_,
+ double rx_, double ry_,
+ double tx_, double ty_ );
+</pre>
+<p>Specify a transformation matrix to adjust scaling, rotation, and
+translation (coordinate transformation) for subsequently drawn objects
+in the same or decendent drawing context. Initialized to unity (no
+effect) affine values. Use class methods (not currently documented but
+defined in the Drawable.h header file) to adjust individual parameters
+from their unity values:</p>
+<pre class="literal-block">
+DrawableAffine ( void );
+</pre>
+</div>
+<div class="section" id="drawablearc">
+<h2><a class="toc-backref" href="#id12">DrawableArc</a></h2>
+<p>Draw an arc using the stroke color and based on the circle starting at
+coordinates <cite>startX_</cite>,`startY_`, and ending with coordinates
+<cite>endX_</cite>,`endY_`, and bounded by the rotational arc
+<cite>startDegrees_</cite>,`endDegrees_`:</p>
+<pre class="literal-block">
+DrawableArc ( double startX_, double startY_,
+ double endX_, double endY_,
+ double startDegrees_, double endDegrees_ );
+</pre>
+</div>
+<div class="section" id="drawablebezier">
+<h2><a class="toc-backref" href="#id13">DrawableBezier</a></h2>
+<p>Draw a bezier curve using the stroke color and based on the
+coordinates specified by the <cite>coordinates_</cite> list:</p>
+<pre class="literal-block">
+DrawableBezier ( const CoordinateList &coordinates_ );
+</pre>
+</div>
+<div class="section" id="drawableclippath">
+<h2><a class="toc-backref" href="#id14">DrawableClipPath</a></h2>
+<p>Select a drawing clip path matching <cite>id_</cite>:</p>
+<pre class="literal-block">
+DrawableClipPath ( const std::string &id_ );
+</pre>
+</div>
+<div class="section" id="drawablecircle">
+<h2><a class="toc-backref" href="#id15">DrawableCircle</a></h2>
+<p>Draw a circle using the stroke color and thickness using specified
+origin and perimeter coordinates. If a fill color is specified, then
+the object is filled:</p>
+<pre class="literal-block">
+DrawableCircle ( double originX_, double originY_,
+ double perimX_, double perimY_ )
+</pre>
+</div>
+<div class="section" id="drawablecolor">
+<h2><a class="toc-backref" href="#id16">DrawableColor</a></h2>
+<p>Color image according to paintMethod. The point method recolors the
+target pixel. The replace method recolors any pixel that matches the
+color of the target pixel. Floodfill recolors any pixel that matches
+the color of the target pixel and is a neighbor, whereas filltoborder
+recolors any neighbor pixel that is not the border color. Finally,
+reset recolors all pixels:</p>
+<pre class="literal-block">
+DrawableColor ( double x_, double y_,
+ PaintMethod paintMethod_ )
+</pre>
+</div>
+<div class="section" id="drawablecompositeimage">
+<h2><a class="toc-backref" href="#id17">DrawableCompositeImage</a></h2>
+<p>Composite current image with contents of specified image, at specified
+coordinates. If the matte attribute is set to true, then the image
+composition will consider an alpha channel, or transparency, present
+in the image file so that non-opaque portions allow part (or all) of
+the composite image to show through:</p>
+<pre class="literal-block">
+DrawableCompositeImage ( double x_, double y_,
+ const std::string &filename_ );
+DrawableCompositeImage ( double x_, double y_,
+ const Image &image_ );
+</pre>
+<p>Composite current image with contents of specified image, rendered
+with specified width and height, at specified coordinates. If the
+matte attribute is set to true, then the image composition will
+consider an alpha channel, or transparency, present in the image file
+so that non-opaque portions allow part (or all) of the composite image
+to show through. If the specified width or height is zero, then the
+image is composited at its natural size, without enlargement or
+reduction:</p>
+<pre class="literal-block">
+DrawableCompositeImage ( double x_, double y_,
+ double width_, double height_,
+ const std::string &filename_ );
+
+DrawableCompositeImage ( double x_, double y_,
+ double width_, double height_,
+ const Image &image_ );
+</pre>
+<p>Composite current image with contents of specified image, rendered
+with specified width and height, using specified composition
+algorithm, at specified coordinates. If the matte attribute is set to
+true, then the image composition will consider an alpha channel, or
+transparency, present in the image file so that non-opaque portions
+allow part (or all) of the composite image to show through. If the
+specified width or height is zero, then the image is composited at its
+natural size, without enlargement or reduction:</p>
+<pre class="literal-block">
+DrawableCompositeImage ( double x_, double y_,
+ double width_, double height_,
+ const std::string &filename_,
+ CompositeOperator composition_ );
+
+DrawableCompositeImage ( double x_, double y_,
+ double width_, double height_,
+ const Image &image_,
+ CompositeOperator composition_ );
+</pre>
+</div>
+<div class="section" id="drawabledasharray">
+<h2><a class="toc-backref" href="#id18">DrawableDashArray</a></h2>
+<p>Specify the pattern of dashes and gaps used to stroke paths. The
+strokeDashArray represents a zero-terminated array of numbers that
+specify the lengths of alternating dashes and gaps in pixels. If an
+odd number of values is provided, then the list of values is repeated
+to yield an even number of values. A typical <cite>strokeDashArray_</cite> array
+might contain the members 5 3 2 0, where the zero value indicates the
+end of the pattern array:</p>
+<pre class="literal-block">
+DrawableDashArray( const double* dasharray_ );
+</pre>
+</div>
+<div class="section" id="drawabledashoffset">
+<h2><a class="toc-backref" href="#id19">DrawableDashOffset</a></h2>
+<p>Specify the distance into the dash pattern to start the dash. See
+documentation on SVG's <a class="reference external" href="http://www.w3.org/TR/SVG/painting.html#StrokeDashoffsetProperty">stroke-dashoffset</a>
+property for usage details:</p>
+<pre class="literal-block">
+DrawableDashOffset ( const double offset_ )
+</pre>
+</div>
+<div class="section" id="drawableellipse">
+<h2><a class="toc-backref" href="#id20">DrawableEllipse</a></h2>
+<p>Draw an ellipse using the stroke color and thickness, specified
+origin, x & y radius, as well as specified start and end of arc in
+degrees. If a fill color is specified, then the object is filled:</p>
+<pre class="literal-block">
+DrawableEllipse ( double originX_, double originY_,
+ double radiusX_, double radiusY_,
+ double arcStart_, double arcEnd_ )
+</pre>
+</div>
+<div class="section" id="drawablefillcolor">
+<h2><a class="toc-backref" href="#id21">DrawableFillColor</a></h2>
+<p>Specify drawing object fill color:</p>
+<blockquote>
+DrawableFillColor ( const Color &color_ );</blockquote>
+</div>
+<div class="section" id="drawablefillrule">
+<h2><a class="toc-backref" href="#id22">DrawableFillRule</a></h2>
+<p>Specify the algorithm which is to be used to determine what parts of
+the canvas are included inside the shape. See documentation on SVG's
+<a class="reference external" href="http://www.w3.org/TR/SVG/painting.html#FillRuleProperty">fill-rule</a>
+property for usage details:</p>
+<pre class="literal-block">
+DrawableFillRule ( const FillRule fillRule_ )
+</pre>
+</div>
+<div class="section" id="drawablefillopacity">
+<h2><a class="toc-backref" href="#id23">DrawableFillOpacity</a></h2>
+<p>Specify opacity to use when drawing using fill color:</p>
+<pre class="literal-block">
+DrawableFillOpacity ( double opacity_ )
+</pre>
+</div>
+<div class="section" id="drawablefont">
+<h2><a class="toc-backref" href="#id24">DrawableFont</a></h2>
+<p>Specify font family, style, weight (one of the set { 100 | 200 | 300 |
+400 | 500 | 600 | 700 | 800 | 900 } with 400 being the normal size),
+and stretch to be used to select the font used when drawing
+text. Wildcard matches may be applied to style via the AnyStyle
+enumeration, applied to weight if weight is zero, and applied to
+stretch via the AnyStretch enumeration:</p>
+<pre class="literal-block">
+DrawableFont ( const std::string &font_ );
+
+DrawableFont ( const std::string &family_,
+ StyleType style_,
+ const unsigned long weight_,
+ StretchType stretch_ );
+</pre>
+</div>
+<div class="section" id="drawablegravity">
+<h2><a class="toc-backref" href="#id25">DrawableGravity</a></h2>
+<p>Specify text positioning gravity:</p>
+<pre class="literal-block">
+DrawableGravity ( GravityType gravity_ )
+</pre>
+</div>
+<div class="section" id="drawableline">
+<h2><a class="toc-backref" href="#id26">DrawableLine</a></h2>
+<p>Draw a line using stroke color and thickness using starting and ending
+coordinates:</p>
+<pre class="literal-block">
+DrawableLine ( double startX_, double startY_,
+ double endX_, double endY_ )
+</pre>
+</div>
+<div class="section" id="drawablematte">
+<h2><a class="toc-backref" href="#id27">DrawableMatte</a></h2>
+<p>Change the pixel matte value to transparent. The point method changes
+the matte value of the target pixel. The replace method changes the
+matte value of any pixel that matches the color of the target
+pixel. Floodfill changes the matte value of any pixel that matches the
+color of the target pixel and is a neighbor, whereas filltoborder
+changes the matte value of any neighbor pixel that is not the border
+color, Finally reset changes the matte value of all pixels:</p>
+<pre class="literal-block">
+DrawableMatte ( double x_, double y_,
+ PaintMethod paintMethod_ )
+</pre>
+</div>
+<div class="section" id="drawablemiterlimit">
+<h2><a class="toc-backref" href="#id28">DrawableMiterLimit</a></h2>
+<p>Specify miter limit. When two line segments meet at a sharp angle and
+miter joins have been specified for 'lineJoin', it is possible for the
+miter to extend far beyond the thickness of the line stroking the
+path. The miterLimit' imposes a limit on the ratio of the miter length
+to the 'lineWidth'. The default value of this parameter is 4:</p>
+<pre class="literal-block">
+DrawableMiterLimit ( unsigned int miterlimit_ )
+</pre>
+</div>
+<div class="section" id="drawablepath">
+<h2><a class="toc-backref" href="#id29">DrawablePath</a></h2>
+<p>Draw on image using vector path:</p>
+<pre class="literal-block">
+DrawablePath ( const VPathList &path_ );
+</pre>
+</div>
+<div class="section" id="drawablepoint">
+<h2><a class="toc-backref" href="#id30">DrawablePoint</a></h2>
+<p>Draw a point using stroke color and thickness at coordinate:</p>
+<pre class="literal-block">
+DrawablePoint ( double x_, double y_ )
+</pre>
+</div>
+<div class="section" id="drawablepointsize">
+<h2><a class="toc-backref" href="#id31">DrawablePointSize</a></h2>
+<p>Set font point size:</p>
+<pre class="literal-block">
+DrawablePointSize ( double pointSize_ )
+</pre>
+</div>
+<div class="section" id="drawablepolygon">
+<h2><a class="toc-backref" href="#id32">DrawablePolygon</a></h2>
+<p>Draw an arbitrary polygon using stroke color and thickness consisting
+of three or more coordinates contained in an STL list. If a fill color
+is specified, then the object is filled:</p>
+<pre class="literal-block">
+DrawablePolygon ( const CoordinateList &coordinates_ )
+</pre>
+</div>
+<div class="section" id="drawablepolyline">
+<h2><a class="toc-backref" href="#id33">DrawablePolyline</a></h2>
+<p>Draw an arbitrary polyline using stroke color and thickness consisting
+of three or more coordinates contained in an STL list. If a fill color
+is specified, then the object is filled:</p>
+<pre class="literal-block">
+DrawablePolyline ( const CoordinateList &coordinates_ )
+</pre>
+</div>
+<div class="section" id="drawablepopclippath">
+<h2><a class="toc-backref" href="#id34">DrawablePopClipPath</a></h2>
+<p>Pop (terminate) clip path definition started by DrawablePushClipPath:</p>
+<pre class="literal-block">
+DrawablePopClipPath ( void )
+</pre>
+</div>
+<div class="section" id="drawablepopgraphiccontext">
+<h2><a class="toc-backref" href="#id35">DrawablePopGraphicContext</a></h2>
+<p>Pop Graphic Context. Removing the current graphic context from the
+graphic context stack restores the options to the values they had
+prior to the preceding <a class="reference internal" href="#drawablepushgraphiccontext">DrawablePushGraphicContext</a> operation:</p>
+<pre class="literal-block">
+DrawablePopGraphicContext ( void )
+</pre>
+</div>
+<div class="section" id="drawablepushclippath">
+<h2><a class="toc-backref" href="#id36">DrawablePushClipPath</a></h2>
+<p>Push (create) clip path definition with <cite>id_</cite>. Clip patch definition
+consists of subsequent drawing commands, terminated by
+<a class="reference internal" href="#drawablepopclippath">DrawablePopClipPath</a>:</p>
+<pre class="literal-block">
+DrawablePushClipPath ( const std::string &id_)
+</pre>
+</div>
+<div class="section" id="drawablepushgraphiccontext">
+<h2><a class="toc-backref" href="#id37">DrawablePushGraphicContext</a></h2>
+<p>Push Graphic Context. When a graphic context is pushed, options set
+after the context is pushed (such as coordinate transformations, color
+settings, etc.) are saved to a new graphic context. This allows
+related options to be saved on a graphic context "stack" in order to
+support heirarchical nesting of options. When
+<a class="reference internal" href="#drawablepopgraphiccontext">DrawablePopGraphicContext</a> is used to pop the current graphic context,
+the options in effect during the last <a class="reference internal" href="#drawablepushgraphiccontext">DrawablePushGraphicContext</a>
+operation are restored:</p>
+<pre class="literal-block">
+DrawablePushGraphicContext ( void )
+</pre>
+</div>
+<div class="section" id="drawablepushpattern">
+<h2><a class="toc-backref" href="#id38">DrawablePushPattern</a></h2>
+<p>Start a pattern definition with arbitrary pattern name specified by
+<cite>id_</cite>, pattern offset specified by <cite>x_</cite> and <cite>y_</cite>, and pattern size
+specified by <cite>width_</cite> and <cite>height_</cite>. The pattern is defined within the
+coordinate system defined by the specified offset and size. Arbitrary
+drawing objects (including <a class="reference internal" href="#drawablecompositeimage">DrawableCompositeImage</a>) may be specified
+between <a class="reference internal" href="#drawablepushpattern">DrawablePushPattern</a> and <a class="reference internal" href="#drawablepoppattern">DrawablePopPattern</a> in order to draw
+the pattern. Normally the pair <a class="reference internal" href="#drawablepushgraphiccontext">DrawablePushGraphicContext</a> &
+<a class="reference internal" href="#drawablepopgraphiccontext">DrawablePopGraphicContext</a> are used to enclose a pattern
+definition. Pattern definitions are terminated by a
+<a class="reference internal" href="#drawablepoppattern">DrawablePopPattern</a> object:</p>
+<pre class="literal-block">
+DrawablePushPattern ( const std::string &id_, long x_, long y_,
+ long width_, long height_ )
+</pre>
+</div>
+<div class="section" id="drawablepoppattern">
+<h2><a class="toc-backref" href="#id39">DrawablePopPattern</a></h2>
+<p>Terminate a pattern definition started via <a class="reference internal" href="#drawablepushpattern">DrawablePushPattern</a>:</p>
+<pre class="literal-block">
+DrawablePopPattern ( void )
+</pre>
+</div>
+<div class="section" id="drawablerectangle">
+<h2><a class="toc-backref" href="#id40">DrawableRectangle</a></h2>
+<p>Draw a rectangle using stroke color and thickness from upper-left
+coordinates to lower-right coordinates. If a fill color is specified,
+then the object is filled:</p>
+<pre class="literal-block">
+DrawableRectangle ( double upperLeftX_, double upperLeftY_,
+ double lowerRightX_, double lowerRightY_ )
+</pre>
+</div>
+<div class="section" id="drawablerotation">
+<h2><a class="toc-backref" href="#id41">DrawableRotation</a></h2>
+<p>Set rotation to use when drawing (coordinate transformation):</p>
+<pre class="literal-block">
+DrawableRotation ( double angle_ )
+</pre>
+</div>
+<div class="section" id="drawableroundrectangle">
+<h2><a class="toc-backref" href="#id42">DrawableRoundRectangle</a></h2>
+<p>Draw a rounded rectangle using stroke color and thickness, with
+specified center coordinate, specified width and height, and specified
+corner width and height. If a fill color is specified, then the
+object is filled:</p>
+<pre class="literal-block">
+DrawableRoundRectangle ( double centerX_, double centerY_,
+ double width_, double hight_,
+ double cornerWidth_, double cornerHeight_ )
+</pre>
+</div>
+<div class="section" id="drawablescaling">
+<h2><a class="toc-backref" href="#id43">DrawableScaling</a></h2>
+<p>Apply scaling in x and y direction while drawing objects (coordinate
+transformation):</p>
+<pre class="literal-block">
+DrawableScaling ( double x_, double y_ )
+</pre>
+</div>
+<div class="section" id="drawableskewx">
+<h2><a class="toc-backref" href="#id44">DrawableSkewX</a></h2>
+<p>Apply Skew in X direction (coordinate transformation):</p>
+<pre class="literal-block">
+DrawableSkewX ( double angle_ )
+</pre>
+</div>
+<div class="section" id="drawableskewy">
+<h2><a class="toc-backref" href="#id45">DrawableSkewY</a></h2>
+<p>Apply Skew in Y direction:</p>
+<pre class="literal-block">
+DrawableSkewY ( double angle_ )
+</pre>
+</div>
+<div class="section" id="drawablestrokeantialias">
+<h2><a class="toc-backref" href="#id46">DrawableStrokeAntialias</a></h2>
+<p>Antialias while drawing lines or object outlines:</p>
+<pre class="literal-block">
+DrawableStrokeAntialias ( bool flag_ )
+</pre>
+</div>
+<div class="section" id="drawablestrokecolor">
+<h2><a class="toc-backref" href="#id47">DrawableStrokeColor</a></h2>
+<p>Set color to use when drawing lines or object outlines:</p>
+<pre class="literal-block">
+DrawableStrokeColor ( const Color &color_ )
+</pre>
+</div>
+<div class="section" id="drawablestrokelinecap">
+<h2><a class="toc-backref" href="#id48">DrawableStrokeLineCap</a></h2>
+<p>Specify the shape to be used at the end of open subpaths when they are
+stroked. Values of LineCap are UndefinedCap, ButtCap, RoundCap, and
+SquareCap:</p>
+<pre class="literal-block">
+DrawableStrokeLineCap ( LineCap linecap_ )
+</pre>
+</div>
+<div class="section" id="drawablestrokelinejoin">
+<h2><a class="toc-backref" href="#id49">DrawableStrokeLineJoin</a></h2>
+<p>Specify the shape to be used at the corners of paths (or other vector
+shapes) when they are stroked. Values of LineJoin are UndefinedJoin,
+MiterJoin, RoundJoin, and BevelJoin:</p>
+<pre class="literal-block">
+DrawableStrokeLineJoin ( LineJoin linejoin_ )
+</pre>
+</div>
+<div class="section" id="drawablestrokeopacity">
+<h2><a class="toc-backref" href="#id50">DrawableStrokeOpacity</a></h2>
+<p>Opacity to use when drawing lines or object outlines:</p>
+<pre class="literal-block">
+DrawableStrokeOpacity ( double opacity_ )
+</pre>
+</div>
+<div class="section" id="drawablestrokewidth">
+<h2><a class="toc-backref" href="#id51">DrawableStrokeWidth</a></h2>
+<p>Set width to use when drawing lines or object outlines:</p>
+<pre class="literal-block">
+DrawableStrokeWidth ( double width_ )
+</pre>
+</div>
+<div class="section" id="drawabletext">
+<h2><a class="toc-backref" href="#id52">DrawableText</a></h2>
+<p>Annotate image with text using stroke color, font, font pointsize, and
+box color (text background color), at specified coordinates. If text
+contains <a class="reference external" href="FormatCharacters.html">special format characters</a> the
+image filename, type, width, height, or other image attributes may be
+incorporated in the text (see label()):</p>
+<pre class="literal-block">
+DrawableText ( const double x_, const double y_,
+ const std::string &text_ )
+</pre>
+<p>Annotate image with text represented with text encoding, using current
+stroke color, font, font pointsize, and box color (text background
+color), at specified coordinates. If text contains <a class="reference external" href="FormatCharacters.html">special format
+characters</a> the image filename, type, width,
+height, or other image attributes may be incorporated in the text (see
+label()).</p>
+<p>The text encoding specifies the code set to use for text
+annotations. The only character encoding which may be specified at
+this time is "UTF-8" for representing <a class="reference external" href="http://www.unicode.org/">Unicode</a> as a sequence of bytes. Specify an empty
+string to set text encoding to the system's default. Successful text
+annotation using Unicode may require fonts designed to support
+Unicode:</p>
+<pre class="literal-block">
+DrawableText ( const double x_, const double y_,
+ const std::string &text_, const std::string &encoding_)
+</pre>
+</div>
+<div class="section" id="drawabletextantialias">
+<h2><a class="toc-backref" href="#id53">DrawableTextAntialias</a></h2>
+<p>Antialias while drawing text (default true). The main reason to
+disable text antialiasing is to avoid adding new colors to the image:</p>
+<pre class="literal-block">
+DrawableTextAntialias ( bool flag_ )
+</pre>
+</div>
+<div class="section" id="drawabletextdecoration">
+<h2><a class="toc-backref" href="#id54">DrawableTextDecoration</a></h2>
+<p>Specify decoration (e.g. UnderlineDecoration) to apply to text:</p>
+<pre class="literal-block">
+DrawableTextDecoration ( DecorationType decoration_ )
+</pre>
+</div>
+<div class="section" id="drawabletextundercolor">
+<h2><a class="toc-backref" href="#id55">DrawableTextUnderColor</a></h2>
+<p>Draw a box under rendered text using the specified color:</p>
+<pre class="literal-block">
+DrawableTextUnderColor ( const Color &color_ )
+</pre>
+</div>
+<div class="section" id="drawabletranslation">
+<h2><a class="toc-backref" href="#id56">DrawableTranslation</a></h2>
+<p>Apply coordinate translation (set new coordinate origin):</p>
+<pre class="literal-block">
+DrawableTranslation ( double x_, double y_ )
+</pre>
+</div>
+<div class="section" id="drawableviewbox">
+<h2><a class="toc-backref" href="#id57">DrawableViewbox</a></h2>
+<p>Dimensions of the output viewbox. If the image is to be written to a
+vector format (e.g. MVG or SVG), then a <a class="reference internal" href="#drawablepushgraphiccontext">DrawablePushGraphicContext</a>
+object should be pushed to the head of the list, followed by a
+<a class="reference internal" href="#drawableviewbox">DrawableViewbox</a> object to establish the output canvas size. A
+matching <a class="reference internal" href="#drawablepopgraphiccontext">DrawablePopGraphicContext</a> object should be pushed to the
+tail of the list:</p>
+<pre class="literal-block">
+DrawableViewbox(unsigned long x1_, unsigned long y1_,
+ unsigned long x2_, unsigned long y2_)
+</pre>
+</div>
+</div>
+<div class="section" id="vector-path-classes">
+<h1><a class="toc-backref" href="#id10">Vector Path Classes</a></h1>
+<p>The vector paths supported by Magick++ are based on those supported by
+the <a class="reference external" href="http://www.w3.org/TR/SVG/paths.html">SVG XML specification</a>. Vector paths are not directly
+drawable, they must first be supplied as a constructor argument to the
+<a class="reference internal" href="#drawablepath">DrawablePath</a> class in order to create a drawable object. The
+<a class="reference internal" href="#drawablepath">DrawablePath</a> class effectively creates a drawable compound component
+which may be replayed as desired. If the drawable compound component
+consists only of vector path objects using relative coordinates then
+the object may be positioned on the image by preceding it with a
+<a class="reference internal" href="#drawablepath">DrawablePath</a> which sets the current drawing coordinate. Alternatively
+coordinate transforms may be used to <a class="reference external" href="#DrawableTranslation">translate the origin</a> in order to position the object, rotate it,
+skew it, or scale it.</p>
+<div class="contents local topic" id="vector-path-commands">
+<p class="topic-title first">Vector path commands</p>
+<ul class="simple">
+<li><a class="reference internal" href="#the-moveto-commands" id="id58">The "moveto" commands</a></li>
+<li><a class="reference internal" href="#the-closepath-command" id="id59">The "closepath" command</a></li>
+<li><a class="reference internal" href="#the-lineto-commands" id="id60">The "lineto" commands</a></li>
+<li><a class="reference internal" href="#curve-commands" id="id61">Curve commands</a></li>
+</ul>
+</div>
+<div class="section" id="the-moveto-commands">
+<h2><a class="toc-backref" href="#id58">The "moveto" commands</a></h2>
+<p>The "moveto" commands establish a new current point. The effect is as
+if the "pen" were lifted and moved to a new location. A path data
+segment must begin with either one of the "moveto" commands or one of
+the "arc" commands. Subsequent "moveto" commands (i.e., when the
+"moveto" is not the first command) represent the start of a new
+subpath.</p>
+<p>Start a new sub-path at the given coordinate. PathMovetoAbs indicates
+that absolute coordinates will follow; PathMovetoRel indicates that
+relative coordinates will follow. If a relative moveto appears as the
+first element of the path, then it is treated as a pair of absolute
+coordinates. If a moveto is followed by multiple pairs of coordinates,
+the subsequent pairs are treated as implicit lineto commands.</p>
+<div class="section" id="pathmovetoabs">
+<h3>PathMovetoAbs</h3>
+<p>Simple moveto:</p>
+<pre class="literal-block">
+PathMovetoAbs ( const Magick::Coordinate &coordinate_ )
+</pre>
+<p>Moveto followed by implicit linetos:</p>
+<pre class="literal-block">
+PathMovetoAbs ( const CoordinateList &coordinates_ )
+</pre>
+</div>
+<div class="section" id="pathmovetorel">
+<h3>PathMovetoRel</h3>
+<p>Simple moveto:</p>
+<pre class="literal-block">
+PathMovetoRel ( const Magick::Coordinate &coordinate_ );
+</pre>
+<p>Moveto followed by implicit linetos:</p>
+<pre class="literal-block">
+PathMovetoRel ( const CoordinateList &coordinates_ );
+</pre>
+</div>
+</div>
+<div class="section" id="the-closepath-command">
+<h2><a class="toc-backref" href="#id59">The "closepath" command</a></h2>
+<p>The "closepath" command causes an automatic straight line to be drawn from the current point to the initial point of the current subpath.</p>
+<div class="section" id="pathclosepath">
+<h3>PathClosePath</h3>
+<p>Close the current subpath by drawing a straight line from the current
+point to current subpath's most recent starting point (usually, the
+most recent moveto point):</p>
+<pre class="literal-block">
+PathClosePath ( void )
+</pre>
+</div>
+</div>
+<div class="section" id="the-lineto-commands">
+<h2><a class="toc-backref" href="#id60">The "lineto" commands</a></h2>
+<p>The various "lineto" commands draw straight lines from the current
+point to a new point.</p>
+<div class="section" id="pathlinetoabs">
+<h3>PathLinetoAbs</h3>
+<p>Draw a line from the current point to the given coordinate which
+becomes the new current point. <em>PathLinetoAbs</em> indicates that absolute
+coordinates are used. A number of coordinates pairs may be specified
+in a list to draw a polyline. At the end of the command, the new
+current point is set to the final set of coordinates provided.</p>
+<p>Draw to a single point:</p>
+<pre class="literal-block">
+PathLinetoAbs ( const Magick::Coordinate& coordinate_ );
+</pre>
+<p>Draw to multiple points:</p>
+<pre class="literal-block">
+PathLinetoAbs ( const CoordinateList &coordinates_ );
+</pre>
+</div>
+<div class="section" id="pathlinetorel">
+<h3>PathLinetoRel</h3>
+<p>Draw a line from the current point to the given coordinate which
+becomes the new current point. <em>PathLinetoRel</em> indicates that relative
+coordinates are used. A number of coordinates pairs may be specified
+in a list to draw a polyline. At the end of the command, the new
+current point is set to the final set of coordinates provided.</p>
+<p>Draw to a single point:</p>
+<pre class="literal-block">
+PathLinetoRel ( const Magick::Coordinate& coordinate_ );
+</pre>
+<p>Draw to multiple points:</p>
+<pre class="literal-block">
+PathLinetoRel ( const CoordinateList &coordinates_ );
+</pre>
+</div>
+<div class="section" id="pathlinetohorizontalabs">
+<h3>PathLinetoHorizontalAbs</h3>
+<p>Draws a horizontal line from the current point (cpx, cpy) to (x,
+cpy). <em>PathLinetoHorizontalAbs</em> indicates that absolute coordinates
+are supplied. At the end of the command, the new current point
+becomes (x, cpy) for the final value of x:</p>
+<pre class="literal-block">
+PathLinetoHorizontalAbs ( double x_ )
+</pre>
+</div>
+<div class="section" id="pathlinetohorizontalrel">
+<h3>PathLinetoHorizontalRel</h3>
+<p>Draws a horizontal line from the current point (cpx, cpy) to (x,
+cpy). <em>PathLinetoHorizontalRel</em> indicates that relative coordinates
+are supplied. At the end of the command, the new current point becomes
+(x, cpy) for the final value of x:</p>
+<pre class="literal-block">
+PathLinetoHorizontalRel ( double x_ )
+</pre>
+</div>
+<div class="section" id="pathlinetoverticalabs">
+<h3>PathLinetoVerticalAbs</h3>
+<p>Draws a vertical line from the current point (cpx, cpy) to (cpx,
+y). <em>PathLinetoVerticalAbs</em> indicates that absolute coordinates are
+supplied. At the end of the command, the new current point becomes
+(cpx, y) for the final value of y:</p>
+<pre class="literal-block">
+PathLinetoVerticalAbs ( double y_ )
+</pre>
+</div>
+<div class="section" id="pathlinetoverticalrel">
+<h3>PathLinetoVerticalRel</h3>
+<p>Draws a vertical line from the current point (cpx, cpy) to (cpx, y).
+<em>PathLinetoVerticalRel</em> indicates that relative coordinates are
+supplied. At the end of the command, the new current point becomes
+(cpx, y) for the final value of y:</p>
+<pre class="literal-block">
+PathLinetoVerticalRel ( double y_ )
+</pre>
+</div>
+</div>
+<div class="section" id="curve-commands">
+<h2><a class="toc-backref" href="#id61">Curve commands</a></h2>
+<p>These three groups of commands draw curves:</p>
+<ul>
+<li><p class="first">Cubic Bézier commands.</p>
+<p>A cubic Bézier segment is defined by a start point, an end point,
+and two control points.</p>
+</li>
+<li><p class="first">Quadratic Bézier commands.</p>
+<p>A quadratic Bézier segment is defined by a start point, an end
+point, and one control point.</p>
+</li>
+<li><p class="first">Elliptical arc commands.</p>
+<p>An elliptical arc segment draws a segment of an ellipse.</p>
+</li>
+</ul>
+<div class="contents local topic" id="id4">
+<p class="topic-title first">Curve Commands</p>
+<ul class="simple">
+<li><a class="reference internal" href="#cubic-bezier-curve-commands" id="id62">Cubic Bézier curve commands</a></li>
+<li><a class="reference internal" href="#quadratic-bezier-curve-commands" id="id63">Quadratic Bézier curve commands</a></li>
+<li><a class="reference internal" href="#elliptical-arc-curve-commands" id="id64">Elliptical arc curve commands</a></li>
+</ul>
+</div>
+<div class="section" id="cubic-bezier-curve-commands">
+<h3><a class="toc-backref" href="#id62">Cubic Bézier curve commands</a></h3>
+<div class="contents local topic" id="id5">
+<p class="topic-title first">Cubic Bézier curve commands</p>
+<ul class="simple">
+<li><a class="reference internal" href="#pathcurvetoargs" id="id65">PathCurvetoArgs</a></li>
+<li><a class="reference internal" href="#pathcurvetoabs" id="id66">PathCurvetoAbs</a></li>
+<li><a class="reference internal" href="#pathcurvetorel" id="id67">PathCurvetoRel</a></li>
+<li><a class="reference internal" href="#pathsmoothcurvetoabs" id="id68">PathSmoothCurvetoAbs</a></li>
+<li><a class="reference internal" href="#pathsmoothcurvetorel" id="id69">PathSmoothCurvetoRel</a></li>
+</ul>
+</div>
+<div class="section" id="pathcurvetoargs">
+<h4><a class="toc-backref" href="#id65">PathCurvetoArgs</a></h4>
+<p>The cubic Bézier commands depend on the <a class="reference internal" href="#pathcurvetoargs">PathCurvetoArgs</a> argument
+class, which has the constructor signature:</p>
+<pre class="literal-block">
+PathCurvetoArgs( double x1_, double y1_,
+ double x2_, double y2_,
+ double x_, double y_ );
+</pre>
+<p>PathCurveto:</p>
+<p>Draws a cubic Bézier curve from the current point to (<em>x</em>,*y*) using
+(<em>x1</em>,*y1*) as the control point at the beginning of the curve and
+(<em>x2</em>,*y2*) as the control point at the end of the
+curve. <a class="reference internal" href="#pathcurvetoabs">PathCurvetoAbs</a> indicates that absolutecoordinates will follow;
+<a class="reference internal" href="#pathcurvetorel">PathCurvetoRel</a> indicates that relative coordinates will
+follow. Multiple sets of coordinates may be specified to draw a
+polybezier. At the end of the command, the new current point becomes
+the final (<em>x</em>,*y*) coordinate pair used in the polybezier.</p>
+</div>
+<div class="section" id="pathcurvetoabs">
+<h4><a class="toc-backref" href="#id66">PathCurvetoAbs</a></h4>
+<p>Draw a single curve:</p>
+<pre class="literal-block">
+PathCurvetoAbs ( const PathCurvetoArgs &args_ );
+</pre>
+<p>Draw multiple curves:</p>
+<pre class="literal-block">
+PathCurvetoAbs ( const PathCurveToArgsList &args_ );
+</pre>
+</div>
+<div class="section" id="pathcurvetorel">
+<h4><a class="toc-backref" href="#id67">PathCurvetoRel</a></h4>
+<p>Draw a single curve:</p>
+<pre class="literal-block">
+PathCurvetoRel ( const PathCurvetoArgs &args_ );
+</pre>
+<p>Draw multiple curves:</p>
+<pre class="literal-block">
+PathCurvetoRel ( const PathCurveToArgsList &args_ );
+</pre>
+<p>PathSmoothCurveto:</p>
+<p>Draws a cubic Bézier curve from the current point to (x,y). The first
+control point is assumed to be the reflection of the second control
+point on the previous command relative to the current point. (If there
+is no previous command or if the previous command was not an
+PathCurvetoAbs, PathCurvetoRel, PathSmoothCurvetoAbs or
+PathSmoothCurvetoRel, assume the first control point is coincident
+with the current point.) (x2,y2) is the second control point (i.e.,
+the control point at the end of the curve). PathSmoothCurvetoAbs
+indicates that absolute coordinates will follow; PathSmoothCurvetoRel
+indicates that relative coordinates will follow. Multiple sets of
+coordinates may be specified to draw a polybezier. At the end of the
+command, the new current point becomes the final (x,y) coordinate pair
+used in the polybezier.</p>
+</div>
+<div class="section" id="pathsmoothcurvetoabs">
+<h4><a class="toc-backref" href="#id68">PathSmoothCurvetoAbs</a></h4>
+<p>Draw a single curve:</p>
+<pre class="literal-block">
+PathSmoothCurvetoAbs ( const Magick::Coordinate &coordinates_ );
+</pre>
+<p>Draw multiple curves</p>
+<blockquote>
+PathSmoothCurvetoAbs ( const CoordinateList &coordinates_ );</blockquote>
+</div>
+<div class="section" id="pathsmoothcurvetorel">
+<h4><a class="toc-backref" href="#id69">PathSmoothCurvetoRel</a></h4>
+<p>Draw a single curve:</p>
+<pre class="literal-block">
+PathSmoothCurvetoRel ( const Coordinate &coordinates_ );
+</pre>
+<p>Draw multiple curves:</p>
+<pre class="literal-block">
+PathSmoothCurvetoRel ( const CoordinateList &coordinates_ );
+</pre>
+</div>
+</div>
+<div class="section" id="quadratic-bezier-curve-commands">
+<h3><a class="toc-backref" href="#id63">Quadratic Bézier curve commands</a></h3>
+<div class="contents local topic" id="id6">
+<p class="topic-title first">Quadratic Bézier curve commands</p>
+<ul class="simple">
+<li><a class="reference internal" href="#pathquadraticcurvetoargs" id="id70">PathQuadraticCurvetoArgs</a></li>
+<li><a class="reference internal" href="#pathquadraticcurvetoabs" id="id71">PathQuadraticCurvetoAbs</a></li>
+<li><a class="reference internal" href="#pathquadraticcurvetorel" id="id72">PathQuadraticCurvetoRel</a></li>
+<li><a class="reference internal" href="#pathsmoothquadraticcurvetoabs" id="id73">PathSmoothQuadraticCurvetoAbs</a></li>
+<li><a class="reference internal" href="#pathsmoothquadraticcurvetorel" id="id74">PathSmoothQuadraticCurvetoRel</a></li>
+</ul>
+</div>
+<div class="section" id="pathquadraticcurvetoargs">
+<h4><a class="toc-backref" href="#id70">PathQuadraticCurvetoArgs</a></h4>
+<p>The quadratic Bézier commands depend on the <a class="reference internal" href="#pathquadraticcurvetoargs">PathQuadraticCurvetoArgs</a>
+argument class, which has the constructor signature:</p>
+<pre class="literal-block">
+PathQuadraticCurvetoArgs( double x1_, double y1_,
+ double x_, double y_ );
+</pre>
+</div>
+<div class="section" id="pathquadraticcurvetoabs">
+<h4><a class="toc-backref" href="#id71">PathQuadraticCurvetoAbs</a></h4>
+<p>Draw a single curve:</p>
+<pre class="literal-block">
+PathQuadraticCurvetoAbs ( const Magick::PathQuadraticCurvetoArgs &args_ );
+</pre>
+<p>Draw multiple curves:</p>
+<pre class="literal-block">
+PathQuadraticCurvetoAbs ( const PathQuadraticCurvetoArgsList &args_ );
+</pre>
+</div>
+<div class="section" id="pathquadraticcurvetorel">
+<h4><a class="toc-backref" href="#id72">PathQuadraticCurvetoRel</a></h4>
+<p>Draw a single curve:</p>
+<pre class="literal-block">
+PathQuadraticCurvetoRel ( const Magick::PathQuadraticCurvetoArgs &args_ );
+</pre>
+<p>Draw multiple curves:</p>
+<pre class="literal-block">
+PathQuadraticCurvetoRel ( const PathQuadraticCurvetoArgsList &args_ );
+</pre>
+</div>
+<div class="section" id="pathsmoothquadraticcurvetoabs">
+<h4><a class="toc-backref" href="#id73">PathSmoothQuadraticCurvetoAbs</a></h4>
+<p>Draw a single curve:</p>
+<pre class="literal-block">
+PathSmoothQuadraticCurvetoAbs ( const Magick::Coordinate &coordinate_ );
+</pre>
+<p>Draw multiple curves:</p>
+<pre class="literal-block">
+PathSmoothQuadraticCurvetoAbs ( const CoordinateList &coordinates_ );
+</pre>
+</div>
+<div class="section" id="pathsmoothquadraticcurvetorel">
+<h4><a class="toc-backref" href="#id74">PathSmoothQuadraticCurvetoRel</a></h4>
+<p>Draw a single curve:</p>
+<pre class="literal-block">
+PathSmoothQuadraticCurvetoRel ( const Magick::Coordinate &coordinate_ );
+</pre>
+<p>Draw multiple curves:</p>
+<pre class="literal-block">
+PathSmoothQuadraticCurvetoRel ( const CoordinateList &coordinates_ );
+</pre>
+</div>
+</div>
+<div class="section" id="elliptical-arc-curve-commands">
+<h3><a class="toc-backref" href="#id64">Elliptical arc curve commands</a></h3>
+<div class="contents local topic" id="id7">
+<p class="topic-title first">Elliptical arc curve commands</p>
+<ul class="simple">
+<li><a class="reference internal" href="#patharcargs" id="id75">PathArcArgs</a></li>
+<li><a class="reference internal" href="#patharcabs" id="id76">PathArcAbs</a></li>
+<li><a class="reference internal" href="#patharcrel" id="id77">PathArcRel</a></li>
+</ul>
+</div>
+<div class="section" id="patharcargs">
+<h4><a class="toc-backref" href="#id75">PathArcArgs</a></h4>
+<p>The elliptical arc curve commands depend on the PathArcArgs argument
+class, which has the constructor signature:</p>
+<pre class="literal-block">
+PathArcArgs( double radiusX_, double radiusY_,
+ double xAxisRotation_, bool largeArcFlag_,
+ bool sweepFlag_, double x_, double y_ );
+</pre>
+<p>Draws an elliptical arc from the current point to (<em>x</em>, <em>y</em>). The size and
+orientation of the ellipse are defined by two radii (<em>radiusX</em>, <em>radiusY</em>)
+and an <em>xAxisRotation</em>, which indicates how the ellipse as a whole is
+rotated relative to the current coordinate system. The center (cx, cy)
+of the ellipse is calculated automatically to satisfy the constraints
+imposed by the other parameters. <em>largeArcFlag</em> and <em>sweepFlag</em> contribute
+to the automatic calculations and help determine how the arc is
+drawn. If <em>largeArcFlag</em> is true then draw the larger of the available
+arcs. If <em>sweepFlag</em> is true, then draw the arc matching a clock-wise
+rotation.</p>
+</div>
+<div class="section" id="patharcabs">
+<h4><a class="toc-backref" href="#id76">PathArcAbs</a></h4>
+<p>Draw a single arc segment:</p>
+<pre class="literal-block">
+PathArcAbs ( const PathArcArgs &coordinates_ );
+</pre>
+<p>Draw multiple arc segments:</p>
+<pre class="literal-block">
+PathArcAbs ( const PathArcArgsList &coordinates_ );
+</pre>
+</div>
+<div class="section" id="patharcrel">
+<h4><a class="toc-backref" href="#id77">PathArcRel</a></h4>
+<p>Draw a single arc segment:</p>
+<pre class="literal-block">
+PathArcRel ( const PathArcArgs &coordinates_ );
+</pre>
+<p>Draw multiple arc segments:</p>
+<pre class="literal-block">
+PathArcRel ( const PathArcArgsList &coordinates_ );
+</pre>
+<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
+</div>
+</div>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Enumerations</title>
<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="enumerations">
<!-- This text is in reStucturedText format, so it may look a bit odd. -->
<!-- See http://docutils.sourceforge.net/rst.html for details. -->
<div class="contents topic" id="magick-enumerations">
-<p class="topic-title first">Magick++ Enumerations</p>
+<p class="topic-title">Magick++ Enumerations</p>
<ul class="simple">
<li><a class="reference internal" href="#channeltype" id="id2">ChannelType</a></li>
<li><a class="reference internal" href="#classtype" id="id3">ClassType</a></li>
<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Enumerations</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="enumerations">
+<h1 class="title">Enumerations</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<div class="contents topic" id="magick-enumerations">
+<p class="topic-title first">Magick++ Enumerations</p>
+<ul class="simple">
+<li><a class="reference internal" href="#channeltype" id="id2">ChannelType</a></li>
+<li><a class="reference internal" href="#classtype" id="id3">ClassType</a></li>
+<li><a class="reference internal" href="#colorspacetype" id="id4">ColorspaceType</a></li>
+<li><a class="reference internal" href="#compositeoperator" id="id5">CompositeOperator</a></li>
+<li><a class="reference internal" href="#compressiontype" id="id6">CompressionType</a></li>
+<li><a class="reference internal" href="#decorationtype" id="id7">DecorationType</a></li>
+<li><a class="reference internal" href="#endiantype" id="id8">EndianType</a></li>
+<li><a class="reference internal" href="#fillrule" id="id9">FillRule</a></li>
+<li><a class="reference internal" href="#filtertypes" id="id10">FilterTypes</a></li>
+<li><a class="reference internal" href="#gravitytype" id="id11">GravityType</a></li>
+<li><a class="reference internal" href="#imagetype" id="id12">ImageType</a></li>
+<li><a class="reference internal" href="#interlacetype" id="id13">InterlaceType</a></li>
+<li><a class="reference internal" href="#id1" id="id14">ChannelType</a></li>
+<li><a class="reference internal" href="#linecap" id="id15">LineCap</a></li>
+<li><a class="reference internal" href="#linejoin" id="id16">LineJoin</a></li>
+<li><a class="reference internal" href="#noisetype" id="id17">NoiseType</a></li>
+<li><a class="reference internal" href="#orientationtype" id="id18">OrientationType</a></li>
+<li><a class="reference internal" href="#paintmethod" id="id19">PaintMethod</a></li>
+<li><a class="reference internal" href="#quantumtypes" id="id20">QuantumTypes</a></li>
+<li><a class="reference internal" href="#renderingintent" id="id21">RenderingIntent</a></li>
+<li><a class="reference internal" href="#resolutiontype" id="id22">ResolutionType</a></li>
+<li><a class="reference internal" href="#storagetype" id="id23">StorageType</a></li>
+<li><a class="reference internal" href="#stretchtype" id="id24">StretchType</a></li>
+<li><a class="reference internal" href="#styletype" id="id25">StyleType</a></li>
+</ul>
+</div>
+<div class="section" id="channeltype">
+<h1><a class="toc-backref" href="#id2">ChannelType</a></h1>
+<p><em>ChannelType</em> is used as an argument when doing color separations. Use
+<em>ChannelType</em> when extracting a layer from an image. <em>MatteChannel</em> is
+useful for extracting the opacity values from an image. Note that an
+image may be represented in RGB, RGBA, CMYK, or CMYKA, pixel formats
+and a channel may only be extracted if it is valid for the current
+pixel format.</p>
+<table border="1" class="docutils">
+<caption>ChannelType</caption>
+<colgroup>
+<col width="30%" />
+<col width="70%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedChannel</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>RedChannel</td>
+<td>RGB Red channel</td>
+</tr>
+<tr><td>CyanChannel</td>
+<td>CMYK Cyan channel</td>
+</tr>
+<tr><td>GreenChannel</td>
+<td>RGB Green channel</td>
+</tr>
+<tr><td>MagentaChannel</td>
+<td>CMYK Magenta channel</td>
+</tr>
+<tr><td>BlueChannel</td>
+<td>RGB Blue channel</td>
+</tr>
+<tr><td>YellowChannel</td>
+<td>CMYK Yellow channel</td>
+</tr>
+<tr><td>OpacityChannel</td>
+<td>Opacity channel (inverse of transparency)</td>
+</tr>
+<tr><td>BlackChannel</td>
+<td>CMYK Black (K) channel</td>
+</tr>
+<tr><td>MatteChannel</td>
+<td>Same as Opacity channel (deprecated)</td>
+</tr>
+<tr><td>AllChannels</td>
+<td>All color channels</td>
+</tr>
+<tr><td>GrayChannel</td>
+<td>Color channels represent an intensity</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="classtype">
+<h1><a class="toc-backref" href="#id3">ClassType</a></h1>
+<p><em>ClassType</em> specifies the image storage class.</p>
+<table border="1" class="docutils">
+<caption>ClassType</caption>
+<colgroup>
+<col width="30%" />
+<col width="70%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedClass</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>DirectClass</td>
+<td>Image is composed of pixels which represent
+literal color values.</td>
+</tr>
+<tr><td>PseudoClass</td>
+<td>Image is composed of pixels which specify an index
+in a color palette.</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="colorspacetype">
+<h1><a class="toc-backref" href="#id4">ColorspaceType</a></h1>
+<p>The <em>ColorspaceType</em> enumeration is used to specify the colorspace that
+quantization (color reduction and mapping) is done under or to specify
+the colorspace when encoding an output image. Colorspaces are ways of
+describing colors to fit the requirements of a particular application
+(e.g. Television, offset printing, color monitors). Color reduction,
+by default, takes place in the <em>RGBColorspace</em>. Empirical evidence
+suggests that distances in color spaces such as <em>YUVColorspace</em> or
+<em>YIQColorspace</em> correspond to perceptual color differences more closely
+han do distances in RGB space. These color spaces may give better
+results when color reducing an image. Refer to quantize for more
+details.</p>
+<p>When encoding an output image, the colorspaces <em>RGBColorspace</em>,
+<em>CMYKColorspace</em>, <em>GRAYColorspace</em>, or <em>YCbCrColorspace</em> may be
+specified. The CMYKColorspace option is only applicable when writing
+TIFF, JPEG, and Adobe Photoshop bitmap (PSD) files.</p>
+<table border="1" class="docutils">
+<caption>ColorspaceType</caption>
+<colgroup>
+<col width="29%" />
+<col width="71%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedColorspace</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>RGBColorspace</td>
+<td>Red-Green-Blue colorspace.</td>
+</tr>
+<tr><td>GRAYColorspace</td>
+<td>Grayscale colorspace</td>
+</tr>
+<tr><td>TransparentColorspace</td>
+<td>The Transparent color space behaves uniquely in
+that it preserves the matte channel of the image
+if it exists.</td>
+</tr>
+<tr><td>OHTAColorspace</td>
+<td> </td>
+</tr>
+<tr><td>XYZColorspace</td>
+<td> </td>
+</tr>
+<tr><td>YCbCrColorspace</td>
+<td> </td>
+</tr>
+<tr><td>YCCColorspace</td>
+<td> </td>
+</tr>
+<tr><td>YIQColorspace</td>
+<td> </td>
+</tr>
+<tr><td>YPbPrColorspace</td>
+<td> </td>
+</tr>
+<tr><td>YUVColorspace</td>
+<td>Y-signal, U-signal, and V-signal colorspace. YUV is
+most widely used to encode color for use in
+television transmission.</td>
+</tr>
+<tr><td>CMYKColorspace</td>
+<td>Cyan-Magenta-Yellow-Black colorspace. CYMK is a
+subtractive color system used by printers and
+photographers for the rendering of colors with ink
+or emulsion,
+normally on a white surface.</td>
+</tr>
+<tr><td>sRGBColorspace</td>
+<td>Kodak PhotoCD sRGB</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="compositeoperator">
+<h1><a class="toc-backref" href="#id5">CompositeOperator</a></h1>
+<p><em>CompositeOperator</em> is used to select the image composition algorithm
+used to compose a composite image with an image. By default, each of
+the composite image pixels are replaced by the corresponding image
+tile pixel. Specify <em>CompositeOperator</em> to select a different
+algorithm.</p>
+<table border="1" class="docutils">
+<caption>CompositeOperator</caption>
+<colgroup>
+<col width="31%" />
+<col width="69%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedCompositeOp</td>
+<td>Not defined.</td>
+</tr>
+<tr><td>OverCompositeOp</td>
+<td>Union of the two image shapes, with
+opaque areas of change-image obscuring base-image
+in the region of overlap.</td>
+</tr>
+<tr><td>InCompositeOp</td>
+<td>Change-image cut by the shape of base-image.
+None of the image data of base-image will be
+in the result.</td>
+</tr>
+<tr><td>OutCompositeOp</td>
+<td>Change-image with the shape of base-image cut out.</td>
+</tr>
+<tr><td>AtopCompositeOp</td>
+<td>Same shape as base-image, with change-image
+obscuring base-image where the image shapes
+overlap. Note this differs from over because the
+portion of change-image outside base-image's shape
+does not appear in the result.</td>
+</tr>
+<tr><td>XorCompositeOp</td>
+<td>Image data from both change-image and base-image
+that is outside the overlap region. The overlap
+region will be blank</td>
+</tr>
+<tr><td>PlusCompositeOp</td>
+<td>Sum of the image data. Output values are
+cropped to MaxRGB (no overflow). This operation is
+independent of the matte channels.</td>
+</tr>
+<tr><td>MinusCompositeOp</td>
+<td>Change-image - base-image, with underflow cropped
+to zero. The matte channel is ignored (set to
+opaque, full coverage)</td>
+</tr>
+<tr><td>AddCompositeOp</td>
+<td>Change-image + base-image, with overflow wrapping
+around (mod MaxRGB+1)</td>
+</tr>
+<tr><td>SubtractCompositeOp</td>
+<td>Change-image - base-image, with underflow wrapping
+around (mod MaxRGB+1). The add and subtract
+operators can be used to perform reversible
+transformations</td>
+</tr>
+<tr><td>DifferenceCompositeOp</td>
+<td>Absolute value of change-image minus base-image.</td>
+</tr>
+<tr><td>MultiplyCompositeOp</td>
+<td>Change-image * base-image. This is useful for the
+creation of drop-shadows.</td>
+</tr>
+<tr><td>BumpmapCompositeOp</td>
+<td>Base-image shaded by change-image</td>
+</tr>
+<tr><td>CopyCompositeOp</td>
+<td>Base-image replaced with change-image. Here
+the matte information is ignored</td>
+</tr>
+<tr><td>CopyRedCompositeOp</td>
+<td>Red channel in base-image replaced with
+the red channel in change-image. The other channels
+are copied untouched</td>
+</tr>
+<tr><td>CopyGreenCompositeOp</td>
+<td>Green channel in base-image replaced with the green
+channel in change-image. The other channels are
+copied untouched.</td>
+</tr>
+<tr><td>CopyBlueCompositeOp</td>
+<td>Blue channel in base-image replaced with the blue
+channel in change-image. The other channels are
+copied untouched.</td>
+</tr>
+<tr><td>CopyOpacityCompositeOp</td>
+<td>Opacity channel in base-image replaced with the
+opacity channel in change-image. The other
+channels are copied untouched.</td>
+</tr>
+<tr><td>ClearCompositeOp</td>
+<td>Pixels are set to transparent.</td>
+</tr>
+<tr><td>DissolveCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>DisplaceCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>ModulateCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>ThresholdCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>NoCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>DarkenCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>LightenCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>HueCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>SaturateCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>ColorizeCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>LuminizeCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>ScreenCompositeOp</td>
+<td>Not yet implemented (Photoshop & PDF)</td>
+</tr>
+<tr><td>OverlayCompositeOp</td>
+<td>Not yet implemented (Photoshop & PDF)</td>
+</tr>
+<tr><td>CopyCyanCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>CopyMagentaCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>CopyYellowCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>CopyBlackCompositeOp</td>
+<td>Copy CMYK Black (K) channel.</td>
+</tr>
+<tr><td>DivideCompositeOp</td>
+<td>Change-image / base-image. This is useful for
+improving the readability of text on unevenly
+illuminated photos. (by using a gaussian blurred
+copy of change-image as base-image)</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="compressiontype">
+<h1><a class="toc-backref" href="#id6">CompressionType</a></h1>
+<p><em>CompressionType</em> is used to express the desired compression type when
+encoding an image. Be aware that most image types only support a
+sub-set of the available compression types. If the compression type
+specified is incompatable with the image, GraphicsMagick selects a
+compression type compatable with the image type.</p>
+<table border="1" class="docutils">
+<caption>CompressionType</caption>
+<colgroup>
+<col width="32%" />
+<col width="68%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedCompression</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>NoCompression</td>
+<td>No compression</td>
+</tr>
+<tr><td>BZipCompression</td>
+<td>BZip as used by bzip2 utilities</td>
+</tr>
+<tr><td>FaxCompression</td>
+<td>CCITT Group 3 FAX compression</td>
+</tr>
+<tr><td>Group4Compression</td>
+<td>CCITT Group 4 FAX compression (used only for TIFF)</td>
+</tr>
+<tr><td>JPEGCompression</td>
+<td>JPEG compression</td>
+</tr>
+<tr><td>LZWCompression</td>
+<td>Lempel-Ziv-Welch (LZW) compression</td>
+</tr>
+<tr><td>RLECompression</td>
+<td>Run-Length encoded (RLE) compression</td>
+</tr>
+<tr><td>ZipCompression</td>
+<td>Lempel-Ziv compression (LZ77) as used in GNU gzip.</td>
+</tr>
+<tr><td>LZMACompression</td>
+<td>Lempel-Ziv-Markov chain algorithm</td>
+</tr>
+<tr><td>JPEG2000Compression</td>
+<td>ISO/IEC std 15444-1</td>
+</tr>
+<tr><td>JBIG1Compression</td>
+<td>ISO/IEC std 11544 / ITU-T rec T.82</td>
+</tr>
+<tr><td>JBIG2Compression</td>
+<td>ISO/IEC std 14492 / ITU-T rec T.88</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="decorationtype">
+<h1><a class="toc-backref" href="#id7">DecorationType</a></h1>
+<p>The <em>DecorationType</em> enumerations are used to specify line decorations
+of rendered text.</p>
+<table border="1" class="docutils">
+<caption>DecorationType</caption>
+<colgroup>
+<col width="32%" />
+<col width="68%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>NoDecoration</td>
+<td>No decoration</td>
+</tr>
+<tr><td>UnderlineDecoration</td>
+<td>Underlined text</td>
+</tr>
+<tr><td>OverlineDecoration</td>
+<td>Overlined text</td>
+</tr>
+<tr><td>LineThroughDecoration</td>
+<td>Strike-through text</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="endiantype">
+<h1><a class="toc-backref" href="#id8">EndianType</a></h1>
+<p>The <em>EndianType</em> enumerations are used to specify the endian option
+for formats which support it (e.g. TIFF).</p>
+<table border="1" class="docutils">
+<caption>EndianType</caption>
+<colgroup>
+<col width="32%" />
+<col width="68%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedEndian</td>
+<td>Not defined (default)</td>
+</tr>
+<tr><td>LSBEndian</td>
+<td>Little endian (like Intel X86 and DEC Alpha)</td>
+</tr>
+<tr><td>MSBEndian</td>
+<td>Big endian (like Motorola 68K, Mac PowerPC, &
+SPARC)</td>
+</tr>
+<tr><td>NativeEndian</td>
+<td>Use native endian of this CPU</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="fillrule">
+<h1><a class="toc-backref" href="#id9">FillRule</a></h1>
+<p><em>FillRule</em> specifies the algorithm which is to be used to determine
+what parts of the canvas are included inside the shape. See the
+documentation on SVG's <a class="reference external" href="http://www.w3.org/TR/SVG/painting.html#FillRuleProperty">fill-rule</a> property
+for usage details.</p>
+<table border="1" class="docutils">
+<caption>FillRule</caption>
+<colgroup>
+<col width="32%" />
+<col width="68%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedRule</td>
+<td>Fill rule not specified</td>
+</tr>
+<tr><td>EvenOddRule</td>
+<td>See SVG fill-rule evenodd rule.</td>
+</tr>
+<tr><td>NonZeroRule</td>
+<td>See SVG fill-rule nonzero rule.</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="filtertypes">
+<h1><a class="toc-backref" href="#id10">FilterTypes</a></h1>
+<p><em>FilterTypes</em> is used to adjust the filter algorithm used when
+resizing images. Different filters experience varying degrees of
+success with various images and can take sipngicantly different
+amounts of processing time. GraphicsMagick uses the <em>LanczosFilter</em> by
+default since this filter has been shown to provide the best results
+for most images in a reasonable amount of time. Other filter types
+(e.g. <em>TriangleFilter</em>) may execute much faster but may show artifacts
+when the image is re-sized or around diagonal lines. The only way to
+be sure is to test the filter with sample images.</p>
+<table border="1" class="docutils">
+<caption>FilterTypes</caption>
+<colgroup>
+<col width="32%" />
+<col width="68%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedFilter</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>PointFilter</td>
+<td>Point Filter</td>
+</tr>
+<tr><td>BoxFilter</td>
+<td>Box Filter</td>
+</tr>
+<tr><td>TriangleFilter</td>
+<td>Triangle Filter</td>
+</tr>
+<tr><td>HermiteFilter</td>
+<td>Hermite Filter</td>
+</tr>
+<tr><td>HanningFilter</td>
+<td>Hanning Filter</td>
+</tr>
+<tr><td>HammingFilter</td>
+<td>Hamming Filter</td>
+</tr>
+<tr><td>BlackmanFilter</td>
+<td>Blackman Filter</td>
+</tr>
+<tr><td>GaussianFilter</td>
+<td>Gaussian Filter</td>
+</tr>
+<tr><td>QuadraticFilter</td>
+<td>Quadratic Filter</td>
+</tr>
+<tr><td>CubicFilter</td>
+<td>Cubic Filter</td>
+</tr>
+<tr><td>CatromFilter</td>
+<td>Catrom Filter</td>
+</tr>
+<tr><td>MitchellFilter</td>
+<td>Mitchell Filter</td>
+</tr>
+<tr><td>LanczosFilter</td>
+<td>Lanczos Filter</td>
+</tr>
+<tr><td>BesselFilter</td>
+<td>Bessel Filter</td>
+</tr>
+<tr><td>SincFilter</td>
+<td>Sinc Filter</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="gravitytype">
+<h1><a class="toc-backref" href="#id11">GravityType</a></h1>
+<p><em>GravityType</em> specifies positioning of an object (e.g. text, image)
+within a bounding region (e.g. an image). Gravity provides a
+convenient way to locate objects irrespective of the size of the
+bounding region, in other words, you don't need to provide absolute
+coordinates in order to position an object. A common default for
+gravity is <em>NorthWestGravity</em>.</p>
+<table border="1" class="docutils">
+<caption>GravityType</caption>
+<colgroup>
+<col width="32%" />
+<col width="68%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>ForgetGravity</td>
+<td>Don't use gravity.</td>
+</tr>
+<tr><td>NorthWestGravity</td>
+<td>Position object at top-left of region.</td>
+</tr>
+<tr><td>NorthGravity</td>
+<td>Postiion object at top-center of region</td>
+</tr>
+<tr><td>NorthEastGravity</td>
+<td>Position object at top-right of region</td>
+</tr>
+<tr><td>WestGravity</td>
+<td>Position object at left-center of region</td>
+</tr>
+<tr><td>CenterGravity</td>
+<td>Position object at center of region</td>
+</tr>
+<tr><td>EastGravity</td>
+<td>Position object at right-center of region</td>
+</tr>
+<tr><td>SouthWestGravity</td>
+<td>Position object at left-bottom of region</td>
+</tr>
+<tr><td>SouthGravity</td>
+<td>Position object at bottom-center of region</td>
+</tr>
+<tr><td>SouthEastGravity</td>
+<td>Position object at bottom-right of region</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="imagetype">
+<h1><a class="toc-backref" href="#id12">ImageType</a></h1>
+<p><em>ImageType</em> indicates the type classification of the image.</p>
+<table border="1" class="docutils">
+<caption>ImageType</caption>
+<colgroup>
+<col width="32%" />
+<col width="68%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedType</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>BilevelType</td>
+<td>Monochrome bi-level image</td>
+</tr>
+<tr><td>GrayscaleType</td>
+<td>Grayscale image</td>
+</tr>
+<tr><td>GrayscaleMatteType</td>
+<td>Grayscale image with opacity</td>
+</tr>
+<tr><td>PaletteType</td>
+<td>Indexed color (palette) image</td>
+</tr>
+<tr><td>PaletteMatteType</td>
+<td>Indexed color (palette) image with opacity</td>
+</tr>
+<tr><td>TrueColorType</td>
+<td>Truecolor image</td>
+</tr>
+<tr><td>TrueColorMatteType</td>
+<td>Truecolor image with opacity</td>
+</tr>
+<tr><td>ColorSeparationType</td>
+<td>Cyan/Yellow/Magenta/Black (CYMK) image</td>
+</tr>
+<tr><td>OptimizeType</td>
+<td>Optimize type based on image characteristics</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="interlacetype">
+<h1><a class="toc-backref" href="#id13">InterlaceType</a></h1>
+<p><em>InterlaceType</em> specifies the ordering of the red, green, and blue
+pixel information in the image. Interlacing is often used to make
+image information available to the user faster by taking advantage of
+the space vs time tradeoff. For example, interlacing allows images on
+the Web to be recognizable sooner and satellite images to
+accumulate/render with image resolution increasing over time.</p>
+<p>Use <em>LineInterlace</em> or <em>PlaneInterlace</em> to create an interlaced GIF or
+progressive JPEG image.</p>
+<table border="1" class="docutils">
+<caption>InterlaceType</caption>
+<colgroup>
+<col width="31%" />
+<col width="69%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedInterlace</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>NoInterlace</td>
+<td>Don't interlace image (RGBRGBRGBRGBRGBRGB...)</td>
+</tr>
+<tr><td>LineInterlace</td>
+<td>Use scanline interlacing
+(RRR...GGG...BBB...RRR...GGG...BBB...)</td>
+</tr>
+<tr><td>PlaneInterlace</td>
+<td>Use plane interlacing (RRRRRR...GGGGGG...BBBBBB...)</td>
+</tr>
+<tr><td>PartitionInterlace</td>
+<td>Similar to plane interlaing except that the
+different planes are saved to individual files
+(e.g. image.R, image.G, and image.B)</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="id1">
+<h1><a class="toc-backref" href="#id14">ChannelType</a></h1>
+<p><em>ChannelType</em> is used as an argument when doing color separations. Use
+<em>ChannelType</em> when extracting a layer from an image. <em>MatteLayer</em> is
+useful for extracting the opacity values from an image.</p>
+<table border="1" class="docutils">
+<caption>ChannelType</caption>
+<colgroup>
+<col width="32%" />
+<col width="68%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedLayer</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>RedLayer</td>
+<td>Select red layer</td>
+</tr>
+<tr><td>GreenLayer</td>
+<td>Select green layer</td>
+</tr>
+<tr><td>BlueLayer</td>
+<td>Select blue layer</td>
+</tr>
+<tr><td>MatteLayer</td>
+<td>Select matte (opacity values) layer</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="linecap">
+<h1><a class="toc-backref" href="#id15">LineCap</a></h1>
+<p>The <em>LineCap</em> enumerations specify shape to be used at the end of open
+subpaths when they are stroked. See SVG's <a class="reference external" href="http://www.w3.org/TR/SVG/painting.html#StrokeLinecapProperty">stroke-linecap</a> for
+examples.</p>
+<table border="1" class="docutils">
+<caption>LineCap</caption>
+<colgroup>
+<col width="32%" />
+<col width="68%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedCap</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>ButtCap</td>
+<td>Square ending.</td>
+</tr>
+<tr><td>RoundCap</td>
+<td>Rounded ending (half-circle end with radius of 1/2
+stroke width).</td>
+</tr>
+<tr><td>SquareCap</td>
+<td>Square ending, extended by 1/2 the stroke width at
+end.</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="linejoin">
+<h1><a class="toc-backref" href="#id16">LineJoin</a></h1>
+<p>The <em>LineJoin</em> enumerations specify the shape to be used at the
+corners of paths or basic shapes when they are stroked. See SVG's
+<a class="reference external" href="http://www.w3.org/TR/SVG/painting.html#StrokeLinejoinProperty">stroke-linejoin</a> for
+examples.</p>
+<table border="1" class="docutils">
+<caption>LineJoin</caption>
+<colgroup>
+<col width="32%" />
+<col width="68%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedJoin</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>MiterJoin</td>
+<td>Sharp-edged join</td>
+</tr>
+<tr><td>RoundJoin</td>
+<td>Rounded-edged join</td>
+</tr>
+<tr><td>BevelJoin</td>
+<td>Beveled-edged join</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="noisetype">
+<h1><a class="toc-backref" href="#id17">NoiseType</a></h1>
+<p><em>NoiseType</em> is used as an argument to select the type of noise to be
+added to the image.</p>
+<table border="1" class="docutils">
+<caption>NoiseType</caption>
+<colgroup>
+<col width="37%" />
+<col width="63%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedNoise</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>UniformNoise</td>
+<td>Uniform noise</td>
+</tr>
+<tr><td>GaussianNoise</td>
+<td>Gaussian noise</td>
+</tr>
+<tr><td>MultiplicativeGaussianNoise</td>
+<td>Multiplicative Gaussian noise</td>
+</tr>
+<tr><td>ImpulseNoise</td>
+<td>Impulse noise</td>
+</tr>
+<tr><td>LaplacianNoise</td>
+<td>Laplacian noise</td>
+</tr>
+<tr><td>PoissonNoise</td>
+<td>Poisson noise</td>
+</tr>
+<tr><td>RandomNoise</td>
+<td>Random noise</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="orientationtype">
+<h1><a class="toc-backref" href="#id18">OrientationType</a></h1>
+<p><em>OrientationType</em> specifies the orientation of the image. Useful for
+when the image is produced via a different ordinate system, the camera
+was turned on its side, or the page was scanned sideways.</p>
+<table border="1" class="docutils">
+<caption>OrientationType</caption>
+<colgroup>
+<col width="38%" />
+<col width="28%" />
+<col width="34%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Scanline Direction</th>
+<th class="head">Frame Direction</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedOrientation</td>
+<td>Unknown</td>
+<td>Unknown</td>
+</tr>
+<tr><td>TopLeftOrientation</td>
+<td>Left to right</td>
+<td>Top to bottom</td>
+</tr>
+<tr><td>TopRightOrientation</td>
+<td>Right to left</td>
+<td>Top to bottom</td>
+</tr>
+<tr><td>BottomRightOrientation</td>
+<td>Right to left</td>
+<td>Bottom to top</td>
+</tr>
+<tr><td>BottomLeftOrientation</td>
+<td>Left to right</td>
+<td>Bottom to top</td>
+</tr>
+<tr><td>LeftTopOrientation</td>
+<td>Top to bottom</td>
+<td>Left to right</td>
+</tr>
+<tr><td>RightTopOrientation</td>
+<td>Top to bottom</td>
+<td>Right to left</td>
+</tr>
+<tr><td>RightBottomOrientation</td>
+<td>Bottom to top</td>
+<td>Right to left</td>
+</tr>
+<tr><td>LeftBottomOrientation</td>
+<td>Bottom to top</td>
+<td>Left to right</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="paintmethod">
+<h1><a class="toc-backref" href="#id19">PaintMethod</a></h1>
+<p><em>PaintMethod</em> specifies how pixel colors are to be replaced in the
+image. It is used to select the pixel-filling algorithm employed.</p>
+<table border="1" class="docutils">
+<caption>PaintMethod</caption>
+<colgroup>
+<col width="37%" />
+<col width="63%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>PointMethod</td>
+<td>Replace pixel color at point.</td>
+</tr>
+<tr><td>ReplaceMethod</td>
+<td>Replace color for all image pixels matching
+color at point.</td>
+</tr>
+<tr><td>FloodfillMethod</td>
+<td>Replace color for pixels surrounding point
+until encountering pixel that fails to match
+color at point.</td>
+</tr>
+<tr><td>FillToBorderMethod</td>
+<td>Replace color for pixels surrounding point
+until encountering pixels matching border
+color.</td>
+</tr>
+<tr><td>ResetMethod</td>
+<td>Replace colors for all pixels in image with
+pen color.</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="quantumtypes">
+<h1><a class="toc-backref" href="#id20">QuantumTypes</a></h1>
+<p><em>QuantumTypes</em> is used to indicate the source or destination format of
+entire pixels, or components of pixels ("Quantums") while they are
+being read, or written to, a pixel cache. The validity of these format
+specifications depends on whether the Image pixels are in RGB format,
+RGBA format, or CMYK format. The pixel Quantum size is determined by
+the Image depth (typically 8, 16, or 32 bits, but any value from 1-64
+bits integer or float is supported).</p>
+<table border="1" class="docutils">
+<caption>RGB(A) Image Quantums</caption>
+<colgroup>
+<col width="37%" />
+<col width="63%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>IndexQuantum</td>
+<td>PseudoColor colormap indices</td>
+</tr>
+<tr><td>RedQuantum</td>
+<td>Red pixel Quantum</td>
+</tr>
+<tr><td>GreenQuantum</td>
+<td>Green pixel Quantum</td>
+</tr>
+<tr><td>BlueQuantum</td>
+<td>Blue pixel Quantum</td>
+</tr>
+<tr><td>OpacityQuantum</td>
+<td>Opacity (Alpha) Quantum</td>
+</tr>
+</tbody>
+</table>
+<table border="1" class="docutils">
+<caption>CMY(K) Image Quantum</caption>
+<colgroup>
+<col width="37%" />
+<col width="63%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>CyanQuantum</td>
+<td>Cyan pixel Quantum</td>
+</tr>
+<tr><td>MagentaQuantum</td>
+<td>Magenta pixel Quantum</td>
+</tr>
+<tr><td>YellowQuantum</td>
+<td>Yellow pixel Quantum</td>
+</tr>
+<tr><td>BlackQuantum</td>
+<td>Black pixel Quantum</td>
+</tr>
+</tbody>
+</table>
+<table border="1" class="docutils">
+<caption>Grayscale Image Quantums</caption>
+<colgroup>
+<col width="37%" />
+<col width="63%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>GrayQuantum</td>
+<td>Gray pixel</td>
+</tr>
+<tr><td>GrayOpacityQuantum</td>
+<td>Pixel opacity</td>
+</tr>
+</tbody>
+</table>
+<table border="1" class="docutils">
+<caption>Entire Pixels (Expressed in Byte Order)</caption>
+<colgroup>
+<col width="37%" />
+<col width="63%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>RGBQuantum</td>
+<td>RGB pixel (1 to 64 bits)</td>
+</tr>
+<tr><td>RGBAQuantum</td>
+<td>RGBA pixel (1 to 64 bits)</td>
+</tr>
+<tr><td>CMYKQuantum</td>
+<td>CMYK pixel (1 to 64 bits)</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="renderingintent">
+<h1><a class="toc-backref" href="#id21">RenderingIntent</a></h1>
+<p>Rendering intent is a concept defined by <a class="reference external" href="http://www.color.org/">ICC</a> Spec ICC.1:1998-09, "File Format for Color
+Profiles". GraphicsMagick uses RenderingIntent in order to support ICC
+Color Profiles.</p>
+<p>From the specification: "Rendering intent specifies the style of
+reproduction to be used during the evaluation of this profile in a
+sequence of profiles. It applies specifically to that profile in the
+sequence and not to the entire sequence. Typically, the user or
+application will set the rendering intent dynamically at runtime or
+embedding time."</p>
+<table border="1" class="docutils">
+<caption>RenderingIntent</caption>
+<colgroup>
+<col width="36%" />
+<col width="64%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedIntent</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>SaturationIntent</td>
+<td>A rendering intent that specifies the saturation
+of the pixels in the image is preserved perhaps
+at the expense of accuracy in hue and lightness.</td>
+</tr>
+<tr><td>PerceptualIntent</td>
+<td>A rendering intent that specifies the full gamut
+of the image is compressed or expanded to fill
+the gamut of the destination device. Gray
+balance is preserved but colorimetric accuracy
+might not be preserved.</td>
+</tr>
+<tr><td>AbsoluteIntent</td>
+<td>Absolute colorimetric</td>
+</tr>
+<tr><td>RelativeIntent</td>
+<td>Relative colorimetric</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="resolutiontype">
+<h1><a class="toc-backref" href="#id22">ResolutionType</a></h1>
+<p>By default, GraphicsMagick defines resolutions in pixels per
+inch. <em>ResolutionType</em> provides a means to adjust this.</p>
+<table border="1" class="docutils">
+<caption>ResolutionType</caption>
+<colgroup>
+<col width="39%" />
+<col width="61%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedResolution</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>PixelsPerInchResolution</td>
+<td>Density specifications are specified in units
+of pixels per inch (english units).</td>
+</tr>
+<tr><td>PixelsPerCentimeterResolution</td>
+<td>Density specifications are specified in units
+of pixels per centimeter (metric units).</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="storagetype">
+<h1><a class="toc-backref" href="#id23">StorageType</a></h1>
+<p>The <em>StorageType</em> enumerations are used to specify the storage format
+of pixels in the source or destination pixel array.</p>
+<table border="1" class="docutils">
+<caption>StorageType</caption>
+<colgroup>
+<col width="37%" />
+<col width="63%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>CharPixel</td>
+<td>Character type</td>
+</tr>
+<tr><td>ShortPixel</td>
+<td>Short type</td>
+</tr>
+<tr><td>IntegerPixel</td>
+<td>Integer type</td>
+</tr>
+<tr><td>FloatPixel</td>
+<td>Float type</td>
+</tr>
+<tr><td>DoublePixel</td>
+<td>Double type</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="stretchtype">
+<h1><a class="toc-backref" href="#id24">StretchType</a></h1>
+<p>The <em>StretchType</em> enumerations are used to specify the relative width
+of a font to the regular width for the font family. If the width is
+not important, the <em>AnyStretch</em> enumeration may be specified for a
+wildcard match.</p>
+<table border="1" class="docutils">
+<caption>StretchType</caption>
+<colgroup>
+<col width="37%" />
+<col width="63%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>AnyStretch</td>
+<td>Wildcard match for font stretch</td>
+</tr>
+<tr><td>NormalStretch</td>
+<td>Normal width font</td>
+</tr>
+<tr><td>UltraCondensedStretch</td>
+<td>Ultra-condensed (narrowest) font</td>
+</tr>
+<tr><td>ExtraCondensedStretch</td>
+<td>Extra-condensed font</td>
+</tr>
+<tr><td>CondensedStretch</td>
+<td>Condensed font</td>
+</tr>
+<tr><td>SemiCondensedStretch</td>
+<td>Semi-Condensed font</td>
+</tr>
+<tr><td>SemiExpandedStretch</td>
+<td>Semi-Expanded font</td>
+</tr>
+<tr><td>ExpandedStretch</td>
+<td>Expanded font</td>
+</tr>
+<tr><td>ExtraExpandedStretch</td>
+<td>Extra-Expanded font</td>
+</tr>
+<tr><td>UltraExpandedStretch</td>
+<td>Ultra-expanded (widest) font</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="styletype">
+<h1><a class="toc-backref" href="#id25">StyleType</a></h1>
+<p>The <em>StyleType</em> enumerations are used to specify the style
+(e.g. Italic) of a font. If the style is not important, the <em>AnyStyle</em>
+enumeration may be specified for a wildcard match.</p>
+<table border="1" class="docutils">
+<caption>StyleType</caption>
+<colgroup>
+<col width="37%" />
+<col width="63%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>AnyStyle</td>
+<td>Wildcard match for font style</td>
+</tr>
+<tr><td>NormalStyle</td>
+<td>Normal font style</td>
+</tr>
+<tr><td>ItalicStyle</td>
+<td>Italic font style</td>
+</tr>
+<tr><td>ObliqueStyle</td>
+<td>Oblique font style</td>
+</tr>
+</tbody>
+</table>
+<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Magick::Exception</title>
<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="magick-exception">
GraphicsMagick is unable to figure out how to open the file.</p>
<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Magick::Exception</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="magick-exception">
+<h1 class="title">Magick::Exception</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p><em>Exception</em> represents the base class of objects thrown when
+Magick++ reports an error. Magick++ throws C++ exceptions synchronous
+with the operation where the error occurred. This allows errors to be
+trapped within the enclosing code (perhaps the code to process a
+single image) while allowing the code to be written with a simple
+coding style.</p>
+<p>A try/catch block should be placed around any sequence of operations
+which can be considered an important body of work. For example, if
+your program processes lists of images and some of these images may be
+defective, by placing the try/catch block around the entire sequence
+of code that processes one image (including instantiating the image
+object), you can minimize the overhead of error checking while
+ensuring that all objects created to deal with that object are safely
+destroyed (C++ exceptions unroll the stack until the enclosing try
+block, destroying any objects on the stack).</p>
+<p>Note that any objects allocated via 'new' with a pointer on the stack
+are not automatically destroyed by unrolling the stack via a C++
+exception so that it may be necessary to catch the exception at each
+level, destroy any objects allocated via 'new' (or malloc()) and then
+re-throw the exception. This includes constructors which might
+encounter an exception while the object is being constructed and
+should destroy any already-allocated data. Magick++ classes are
+designed to be <strong>very</strong> tiny so it is recommended to automatically
+allocate them on the stack when possible rather than via 'new'.</p>
+<p>The pseudo code for the main loop of your program may look like:</p>
+<pre class="literal-block">
+ using namespace std;
+ for infile in list
+ {
+ try {
+ // Construct an image instance first so that we don't have to worry
+ // about object construction failure due to a minor warning exception
+ // being thrown.
+ Magick::Image image;
+
+ // Determine if Warning exceptions are thrown.
+ // Use is optional. Set to true to block Warning exceptions.
+ image.quiet( false );
+
+ try {
+ // Try reading image file
+ image.read(infile);
+ }
+ catch( Magick::WarningCoder &warning )
+ {
+ // Process coder warning while loading file (e.g. TIFF warning)
+ // Maybe the user will be interested in these warnings (or not).
+ // If a warning is produced while loading an image, the image
+ // can normally still be used (but not if the warning was about
+ // something important!)
+ cerr << “Coder Warning: “ << warning.what() << endl;
+ }
+ catch( Magick::Warning &warning )
+ {
+ // Handle any other Magick++ warning.
+ cerr << “Warning: “ << warning.what() << endl;
+ }
+ catch( Magick::ErrorFileOpen &error )
+ {
+ // Process Magick++ file open error
+ cerr << “Error: “ << error.what() << endl;
+ continue; // Try next image.
+ }
+ try {
+ image.rotate(90);
+ image.write(“outfile”);
+ }
+ catch ( MagickExeption & error)
+ {
+ // Handle problem while rotating or writing outfile.
+ cerr << “Caught Magick++ exception: “ << error.what() << endl;
+ }
+ }
+ catch( std::exception &error )
+ {
+ // Process any other exceptions derived from standard C++ exception
+ cerr << “Caught C++ STD exception: “ << error.what() << endl;
+ }
+ catch( ... )
+ {
+ // Process *any* exception (last-ditch effort). There is not a lot
+ // you can do here other to retry the operation that failed, or exit
+ // the program.
+ }
+ }
+
+The desired location and number of try/catch blocks in your program
+depends how sophisticated its error handling must be. Very simple
+programs may use just one try/catch block.
+</pre>
+<p>The <em>Exception</em> class is derived from the C++ standard
+<em>std::exception</em> class. This means that it contains a C++ string
+containing additional information about the error (e.g to display to
+the user). Obtain access to this string via the what() method. For
+example:</p>
+<pre class="literal-block">
+catch( Exception &error_ )
+{
+ cout << "Caught exception: " << error_.what() << endl;
+}
+</pre>
+<p>The classes <em>Warning</em> and <em>Error</em> derive from the <em>Exception</em>
+class. Exceptions derived from <em>Warning</em> are thrown to represent
+non-fatal errors which may effect the completeness or quality of the
+result (e.g. one image provided as an argument to montage is
+defective). In most cases, a <em>Warning</em> exception may be ignored by
+catching it immediately, processing it (e.g. printing a diagnostic)
+and continuing on. Exceptions derived from <em>Error</em> are thrown to
+represent fatal errors that can not produce a valid result
+(e.g. attempting to read a file which does not exist).</p>
+<p>The specific derived exception classes are shown in the following tables:</p>
+<table border="1" class="docutils">
+<caption>Warning (Suspect but completed) Sub-Classes</caption>
+<colgroup>
+<col width="35%" />
+<col width="65%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Warning</th>
+<th class="head">Warning Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>WarningUndefined</td>
+<td>Unspecified type.</td>
+</tr>
+<tr><td>WarningBlob</td>
+<td>NOT CURRENTLY USED</td>
+</tr>
+<tr><td>WarningCache</td>
+<td>NOT CURRENTLY USED</td>
+</tr>
+<tr><td>WarningCoder</td>
+<td>Issued by some coders.</td>
+</tr>
+<tr><td>WarningConfigure</td>
+<td>NOT CURRENTLY USED</td>
+</tr>
+<tr><td>WarningCorruptImage</td>
+<td>Issued when an image may be corrupt.</td>
+</tr>
+<tr><td>WarningDelegate</td>
+<td>Reported by a subordinate program.</td>
+</tr>
+<tr><td>WarningDraw</td>
+<td>Reported by the rendering subsystem.</td>
+</tr>
+<tr><td>WarningFileOpen</td>
+<td>Reported when file could not be opened.</td>
+</tr>
+<tr><td>WarningImage</td>
+<td>NOT CURRENTLY USED</td>
+</tr>
+<tr><td>WarningMissingDelegate</td>
+<td>NOT CURRENTLY USED</td>
+</tr>
+<tr><td>WarningModule</td>
+<td>NOT CURRENTLY USED</td>
+</tr>
+<tr><td>WarningMonitor</td>
+<td>NOT CURRENTLY USED</td>
+</tr>
+<tr><td>WarningOption</td>
+<td>Reported when an option is incorrect.</td>
+</tr>
+<tr><td>WarningRegistry</td>
+<td>NOT CURRENTLY USED</td>
+</tr>
+<tr><td>WarningResourceLimit</td>
+<td>Reported when a resource is exhausted.</td>
+</tr>
+<tr><td>WarningStream</td>
+<td>NOT CURRENTLY USED</td>
+</tr>
+<tr><td>WarningType</td>
+<td>NOT CURRENTLY USED</td>
+</tr>
+<tr><td>WarningXServer</td>
+<td>Warnings reported by the X11 subsystem.</td>
+</tr>
+</tbody>
+</table>
+<table border="1" class="docutils">
+<caption>Error (Failed) Sub-Classes</caption>
+<colgroup>
+<col width="33%" />
+<col width="67%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Error</th>
+<th class="head">Error Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>ErrorUndefined</td>
+<td>Unspecified error type.</td>
+</tr>
+<tr><td>ErrorBlob</td>
+<td>Reported by BLOB I/O subsystem.</td>
+</tr>
+<tr><td>ErrorCache</td>
+<td>Reported by the pixel cache subsystem.</td>
+</tr>
+<tr><td>ErrorCoder</td>
+<td>Reported by coders (image format support).</td>
+</tr>
+<tr><td>ErrorConfigure</td>
+<td>Reported while loading configuration files.</td>
+</tr>
+<tr><td>ErrorCorruptImage</td>
+<td>Reported when the image file is corrupt.</td>
+</tr>
+<tr><td>ErrorDelegate</td>
+<td>Reported by a subordinate program</td>
+</tr>
+<tr><td>ErrorDraw</td>
+<td>Reported while drawing on image.</td>
+</tr>
+<tr><td>ErrorFileOpen</td>
+<td>Reported when the image file can not be opened.</td>
+</tr>
+<tr><td>ErrorImage</td>
+<td>Reported while drawing.</td>
+</tr>
+<tr><td>ErrorMissingDelegate</td>
+<td>Reported when optional add-on library or
+subordinate program is missing (but is needed).</td>
+</tr>
+<tr><td>ErrorModule</td>
+<td>Reported by the module loader subsystem.</td>
+</tr>
+<tr><td>ErrorMonitor</td>
+<td>Reported by the progress monitor.</td>
+</tr>
+<tr><td>ErrorOption</td>
+<td>Reported when option is malformed or out of range.</td>
+</tr>
+<tr><td>ErrorRegistry</td>
+<td>Reported by the image/BLOB registry subsystem.</td>
+</tr>
+<tr><td>ErrorResourceLimit</td>
+<td>Reported when a program resource is exhausted.</td>
+</tr>
+<tr><td>ErrorStream</td>
+<td>Reported by the pixel stream subsystem.</td>
+</tr>
+<tr><td>ErrorType</td>
+<td>Reported by the type (font) rendering subsystem.</td>
+</tr>
+<tr><td>ErrorXServer</td>
+<td>Reported by the X11 subsystem.</td>
+</tr>
+</tbody>
+</table>
+<p>Note that <em>ErrorMissingDelegate</em> is a "catch-all" error reported when
+GraphicsMagick is unable to figure out how to open the file.</p>
+<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Special Format Characters</title>
<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="special-format-characters">
</table>
<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Special Format Characters</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="special-format-characters">
+<h1 class="title">Special Format Characters</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>The Magick::Image methods <a class="reference external" href="Image.html#annotate">annotate</a>, <a class="reference external" href="Image.html#draw">draw</a>, <a class="reference external" href="Image.html#label">label</a>, and the template
+function <a class="reference external" href="STL.html#montageImages">montageImages</a> support special
+format characters contained in the argument text. These format
+characters work similar to C's printf. Whenever a format character
+appears in the text, it is replaced with the equivalent attribute
+text. The available format characters are shown in the following
+table:</p>
+<table border="1" class="docutils">
+<caption>Format Characters</caption>
+<colgroup>
+<col width="37%" />
+<col width="63%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Format Character</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>%b</td>
+<td>file size</td>
+</tr>
+<tr><td>%d</td>
+<td>directory</td>
+</tr>
+<tr><td>%e</td>
+<td>filename extension</td>
+</tr>
+<tr><td>%f</td>
+<td>filename</td>
+</tr>
+<tr><td>%h</td>
+<td>height</td>
+</tr>
+<tr><td>%m</td>
+<td>magick (e.g GIF)</td>
+</tr>
+<tr><td>%p</td>
+<td>page number</td>
+</tr>
+<tr><td>%s</td>
+<td>scene number</td>
+</tr>
+<tr><td>%t</td>
+<td>top of filename</td>
+</tr>
+<tr><td>%w</td>
+<td>width</td>
+</tr>
+<tr><td>%x</td>
+<td>x resolution</td>
+</tr>
+<tr><td>%y</td>
+<td>y resolution</td>
+</tr>
+<tr><td>n</td>
+<td>newline</td>
+</tr>
+<tr><td>r</td>
+<td>carriage return</td>
+</tr>
+</tbody>
+</table>
+<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Magick::Geometry</title>
<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="magick-geometry">
<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Magick::Geometry</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="magick-geometry">
+<h1 class="title">Magick::Geometry</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>Geometry provides a convenient means to specify a geometry
+argument. The object may be initialized from a C string or C++ string
+containing a geometry specification. It may also be initialized by
+more efficient parameterized constructors.</p>
+<div class="section" id="x11-geometry-specifications">
+<h1>X11 Geometry Specifications</h1>
+<p>X11 geometry specifications are in the form
+"<width>x<height>{+-}<xoffset>{+-}<yoffset>" (where width, height,
+xoffset, and yoffset are numbers) for specifying the size and
+placement location for an object.</p>
+<p>The width and height parts of the geometry specification are measured
+in pixels. The xoffset and yoffset parts are also measured in pixels
+and are used to specify the distance of the placement coordinate from
+the left and top and edges of the image, respectively. Both types of
+offsets are measured from the indicated edge of the object to the
+corresponding edge of the image. The X offset may be specified in the
+following ways:</p>
+<table border="1" class="docutils">
+<colgroup>
+<col width="13%" />
+<col width="87%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>+xoffset</td>
+<td>The left edge of the object is to be placed xoffset
+pixels in from the left edge of the image.</td>
+</tr>
+<tr><td>-xoffset</td>
+<td>The left edge of the object is to be placed outside the
+image, xoffset pixels out from the left edge of the image.</td>
+</tr>
+</tbody>
+</table>
+<p>The Y offset has similar meanings:</p>
+<table border="1" class="docutils">
+<colgroup>
+<col width="14%" />
+<col width="86%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>+yoffset</td>
+<td>The top edge of the object is to be yoffset pixels below
+the top edge of the image.</td>
+</tr>
+<tr><td>-yoffset</td>
+<td>The top edge of the object is to be yoffset pixels above
+the top edge of the image.</td>
+</tr>
+</tbody>
+</table>
+<p>Offsets must be given as pairs; in other words, in order to specify
+either xoffset or yoffset both must be present.</p>
+</div>
+<div class="section" id="graphicsmagick-extensions-to-x11-geometry-specifications">
+<h1>GraphicsMagick Extensions To X11 Geometry Specifications</h1>
+<p>GraphicsMagick has added a number of qualifiers to the standard
+geometry string for use when resizing images. The form of an extended
+geometry string is
+"<width>x<height>{+-}<xoffset>{+-}<yoffset>{%}{@}{!}{^}{<}{>}". Extended
+geometry strings should only be used when resizing an image. Using an
+extended geometry string for other applications may cause the API call
+to fail. The available qualifiers are shown in the following table:</p>
+<table border="1" class="docutils">
+<caption>GraphicsMagick Geometry Qualifiers</caption>
+<colgroup>
+<col width="12%" />
+<col width="88%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Qualifier</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>%</td>
+<td>Interpret width and height as a percentage of the current size.</td>
+</tr>
+<tr><td>!</td>
+<td>Resize to width and height exactly, loosing original aspect ratio.</td>
+</tr>
+<tr><td><</td>
+<td>Resize only if the image is smaller than the geometry specification.</td>
+</tr>
+<tr><td>></td>
+<td>Resize only if the image is greater than the geometry specification.</td>
+</tr>
+<tr><td>@</td>
+<td>Resize such that width and height are a maximum area in total pixels.</td>
+</tr>
+<tr><td>^</td>
+<td>Dimensions are treated as minimum rather than maximum values.</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="postscript-page-size-extension-to-geometry-specifications">
+<h1>Postscript Page Size Extension To Geometry Specifications</h1>
+<p>Any geometry string specification supplied to the Geometry constructor
+is considered to be a Postscript page size nickname if the first
+character is not numeric. The page size nickname is not case
+sensitive. The Geometry constructor converts these page size
+specifications into the equivalent numeric geometry string
+specification (preserving any offset component) prior to conversion to
+the internal object format. Postscript page size specifications are
+short-hand for the pixel geometry required to fill a page of that
+size. Since the 11x17 inch page size used in the US starts with a
+digit, it is not supported as a Postscript page size
+nickname. Instead, substitute the geometry specification "792x1224>"
+when 11x17 output is desired.</p>
+<table border="1" class="docutils">
+<caption>Postscript Page Size Nicknames</caption>
+<colgroup>
+<col width="32%" />
+<col width="68%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Postscript Nickname</th>
+<th class="head">Equivalent Extended Geometry Specification</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>A0</td>
+<td>2384x3370></td>
+</tr>
+<tr><td>A1</td>
+<td>1684x2384></td>
+</tr>
+<tr><td>A10</td>
+<td>73x105></td>
+</tr>
+<tr><td>A2</td>
+<td>1191x1684></td>
+</tr>
+<tr><td>A3</td>
+<td>842x1191></td>
+</tr>
+<tr><td>A4</td>
+<td>595x842></td>
+</tr>
+<tr><td>A4SMALL</td>
+<td>595x842></td>
+</tr>
+<tr><td>A5</td>
+<td>420x595></td>
+</tr>
+<tr><td>A6</td>
+<td>297x420></td>
+</tr>
+<tr><td>A7</td>
+<td>210x297></td>
+</tr>
+<tr><td>A8</td>
+<td>148x210></td>
+</tr>
+<tr><td>A9</td>
+<td>105x148></td>
+</tr>
+<tr><td>ARCHA</td>
+<td>648x864></td>
+</tr>
+<tr><td>ARCHB</td>
+<td>864x1296></td>
+</tr>
+<tr><td>ARCHC</td>
+<td>1296x1728></td>
+</tr>
+<tr><td>ARCHD</td>
+<td>1728x2592></td>
+</tr>
+<tr><td>ARCHE</td>
+<td>2592x3456></td>
+</tr>
+<tr><td>B0</td>
+<td>2920x4127></td>
+</tr>
+<tr><td>B1</td>
+<td>2064x2920></td>
+</tr>
+<tr><td>B10</td>
+<td>91x127></td>
+</tr>
+<tr><td>B2</td>
+<td>1460x2064></td>
+</tr>
+<tr><td>B3</td>
+<td>1032x1460></td>
+</tr>
+<tr><td>B4</td>
+<td>729x1032></td>
+</tr>
+<tr><td>B5</td>
+<td>516x729></td>
+</tr>
+<tr><td>B6</td>
+<td>363x516></td>
+</tr>
+<tr><td>B7</td>
+<td>258x363></td>
+</tr>
+<tr><td>B8</td>
+<td>181x258></td>
+</tr>
+<tr><td>B9</td>
+<td>127x181></td>
+</tr>
+<tr><td>C0</td>
+<td>2599x3676></td>
+</tr>
+<tr><td>C1</td>
+<td>1837x2599></td>
+</tr>
+<tr><td>C2</td>
+<td>1298x1837></td>
+</tr>
+<tr><td>C3</td>
+<td>918x1296></td>
+</tr>
+<tr><td>C4</td>
+<td>649x918></td>
+</tr>
+<tr><td>C5</td>
+<td>459x649></td>
+</tr>
+<tr><td>C6</td>
+<td>323x459></td>
+</tr>
+<tr><td>C7</td>
+<td>230x323></td>
+</tr>
+<tr><td>EXECUTIVE</td>
+<td>540x720></td>
+</tr>
+<tr><td>FLSA</td>
+<td>612x936></td>
+</tr>
+<tr><td>FLSE</td>
+<td>612x936></td>
+</tr>
+<tr><td>FOLIO</td>
+<td>612x936></td>
+</tr>
+<tr><td>HALFLETTER</td>
+<td>396x612></td>
+</tr>
+<tr><td>ISOB0</td>
+<td>2835x4008></td>
+</tr>
+<tr><td>ISOB1</td>
+<td>2004x2835></td>
+</tr>
+<tr><td>ISOB10</td>
+<td>88x125></td>
+</tr>
+<tr><td>ISOB2</td>
+<td>1417x2004></td>
+</tr>
+<tr><td>ISOB3</td>
+<td>1001x1417></td>
+</tr>
+<tr><td>ISOB4</td>
+<td>709x1001></td>
+</tr>
+<tr><td>ISOB5</td>
+<td>499x709></td>
+</tr>
+<tr><td>ISOB6</td>
+<td>354x499></td>
+</tr>
+<tr><td>ISOB7</td>
+<td>249x354></td>
+</tr>
+<tr><td>ISOB8</td>
+<td>176x249></td>
+</tr>
+<tr><td>ISOB9</td>
+<td>125x176></td>
+</tr>
+<tr><td>LEDGER</td>
+<td>1224x792></td>
+</tr>
+<tr><td>LEGAL</td>
+<td>612x1008></td>
+</tr>
+<tr><td>LETTER</td>
+<td>612x792></td>
+</tr>
+<tr><td>LETTERSMALL</td>
+<td>612x792></td>
+</tr>
+<tr><td>QUARTO</td>
+<td>610x780></td>
+</tr>
+<tr><td>STATEMENT</td>
+<td>396x612></td>
+</tr>
+<tr><td>TABLOID</td>
+<td>792x1224></td>
+</tr>
+</tbody>
+</table>
+<p>The following is the definition of the Magick::Geometry class:</p>
+<pre class="literal-block">
+class Geometry
+{
+public:
+
+ Geometry ( unsigned int width_,
+ unsigned int height_,
+ unsigned int xOff_ = 0,
+ unsigned int yOff_ = 0,
+ bool xNegative_ = false,
+ bool yNegative_ = false );
+ Geometry ( const std::string &geometry_ );
+ Geometry ( const char * geometry_ );
+ Geometry ( const Geometry &geometry_ );
+ Geometry ( );
+ ~Geometry ( void );
+
+ // Width
+ void width ( unsigned int width_ );
+ unsigned int width ( void ) const;
+
+ // Height
+ void height ( unsigned int height_ );
+ unsigned int height ( void ) const;
+
+ // X offset from origin
+ void xOff ( unsigned int xOff_ );
+ unsigned int xOff ( void ) const;
+
+ // Y offset from origin
+ void yOff ( unsigned int yOff_ );
+ unsigned int yOff ( void ) const;
+
+ // Sign of X offset negative? (X origin at right)
+ void xNegative ( bool xNegative_ );
+ bool xNegative ( void ) const;
+
+ // Sign of Y offset negative? (Y origin at bottom)
+ void yNegative ( bool yNegative_ );
+ bool yNegative ( void ) const;
+
+ // Width and height are expressed as percentages
+ void percent ( bool percent_ );
+ bool percent ( void ) const;
+
+ // Resize without preserving aspect ratio (!)
+ void aspect ( bool aspect_ );
+ bool aspect ( void ) const;
+
+ // Resize if image is greater than size (>)
+ void greater ( bool greater_ );
+ bool greater ( void ) const;
+
+ // Resize if image is less than size (<)
+ void less ( bool less_ );
+ bool less ( void ) const;
+
+ // Resize image to fit total pixel area specified by dimensions (@).
+ void limitPixels ( bool limitPixels_ );
+ bool limitPixels ( void ) const;
+
+ // Dimensions are treated as minimum rather than maximum values (^)
+ void fillArea ( bool fillArea_ );
+ bool fillArea ( void ) const;
+
+ // Does object contain valid geometry?
+ void isValid ( bool isValid_ );
+ bool isValid ( void ) const;
+
+ // Set via geometry string
+ const Geometry& operator = ( const std::string &geometry_ );
+ const Geometry& operator = ( const char * geometry_ );
+
+ // Assignment operator
+ Geometry& operator= ( const Geometry& Geometry_ );
+
+ // Return geometry string
+ operator std::string() const;
+
+};
+</pre>
+<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Magick::Image Class</title>
<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="magick-image-class">
<!-- This text is in reStucturedText format, so it may look a bit odd. -->
<!-- See http://docutils.sourceforge.net/rst.html for details. -->
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#introduction" id="id9">Introduction</a></li>
<li><a class="reference internal" href="#blobs" id="id10">BLOBs</a></li>
<li><a class="reference internal" href="#manipulate-an-image" id="id13">Manipulate An Image</a></li>
<li><a class="reference internal" href="#set-get-image-attributes" id="id14">Set/Get Image Attributes</a></li>
<li><a class="reference internal" href="#low-level-image-pixel-access" id="id15">Low-Level Image Pixel Access</a></li>
+<li><a class="reference internal" href="#explicit-logging-configuration-and-callbacks" id="id16">Explicit Logging Configuration And Callbacks</a></li>
</ul>
</div>
<div class="section" id="introduction">
any Magick++ objects. This used to be optional, but now it is
absolutely required. This function initalizes semaphores and
configuration information necessary for the software to work
-correctly. Failing to invoke InitializeMagick() is likely to lead to
-a program crash or thrown assertion. If the program resides in the
-same directory as the GraphicsMagick files, then argv[0] may be passed
-as an argument so that GraphicsMagick knows where its files reside,
+correctly. Failing to invoke InitializeMagick() will lead to a
+program crash or thrown assertion. If the program resides in the same
+directory as the GraphicsMagick files, then argv[0] may be passed as
+an argument so that GraphicsMagick knows where its files reside,
otherwise NULL may be passed and GraphicsMagick will try to use other
-means (if necessary).</p>
+means (if necessary). Even if an argument is passed, GraphicsMagick
+may use more reliable location information gleaned from the operating
+system, depending on build configuration.</p>
<p>The preferred way to allocate Image objects is via automatic
allocation (on the stack). There is no concern that allocating Image
objects on the stack will excessively enlarge the stack since Magick++
<h1><a class="toc-backref" href="#id12">Read Or Write An Image</a></h1>
<div class="contents local topic" id="id1">
<ul class="simple">
-<li><a class="reference internal" href="#ping" id="id16">ping</a></li>
-<li><a class="reference internal" href="#read" id="id17">read</a></li>
-<li><a class="reference internal" href="#write" id="id18">write</a></li>
+<li><a class="reference internal" href="#ping" id="id17">ping</a></li>
+<li><a class="reference internal" href="#read" id="id18">read</a></li>
+<li><a class="reference internal" href="#write" id="id19">write</a></li>
</ul>
</div>
<div class="section" id="ping">
-<h2><a class="toc-backref" href="#id16">ping</a></h2>
+<h2><a class="toc-backref" href="#id17">ping</a></h2>
<p>Ping is similar to <a class="reference internal" href="#read">read</a> except only enough of the image is read to
determine the image columns, rows, and filesize. Access the
columns(), rows(), and fileSize() attributes after invoking ping.
</pre>
</div>
<div class="section" id="read">
-<h2><a class="toc-backref" href="#id17">read</a></h2>
+<h2><a class="toc-backref" href="#id18">read</a></h2>
<p>Read single image frame into current object. Use <a class="reference internal" href="#ping">ping</a> instead if you
want to obtain the basic attributes of the image without reading the
whole file/blob:</p>
</pre>
</div>
<div class="section" id="write">
-<h2><a class="toc-backref" href="#id18">write</a></h2>
+<h2><a class="toc-backref" href="#id19">write</a></h2>
<p>Write single image frame to a file:</p>
<pre class="literal-block">
void write ( const std::string &imageSpec_ )
<p>The following image manipulation methods are available:</p>
<div class="contents local topic" id="id2">
<ul class="simple">
-<li><a class="reference internal" href="#adaptivethreshold" id="id19">adaptiveThreshold</a></li>
-<li><a class="reference internal" href="#addnoise" id="id20">addNoise</a></li>
-<li><a class="reference internal" href="#addnoisechannel" id="id21">addNoiseChannel</a></li>
-<li><a class="reference internal" href="#affinetransform" id="id22">affineTransform</a></li>
-<li><a class="reference internal" href="#annotate" id="id23">annotate</a></li>
-<li><a class="reference internal" href="#autoorient" id="id24">autoOrient</a></li>
-<li><a class="reference internal" href="#blur" id="id25">blur</a></li>
-<li><a class="reference internal" href="#blurchannel" id="id26">blurChannel</a></li>
-<li><a class="reference internal" href="#border" id="id27">border</a></li>
-<li><a class="reference internal" href="#cdl" id="id28">cdl</a></li>
-<li><a class="reference internal" href="#channel" id="id29">channel</a></li>
-<li><a class="reference internal" href="#channeldepth" id="id30">channelDepth</a></li>
-<li><a class="reference internal" href="#charcoal" id="id31">charcoal</a></li>
-<li><a class="reference internal" href="#chop" id="id32">chop</a></li>
-<li><a class="reference internal" href="#colorize" id="id33">colorize</a></li>
-<li><a class="reference internal" href="#colormatrix" id="id34">colorMatrix</a></li>
-<li><a class="reference internal" href="#comment" id="id35">comment</a></li>
-<li><a class="reference internal" href="#compare" id="id36">compare</a></li>
-<li><a class="reference internal" href="#composite" id="id37">composite</a></li>
-<li><a class="reference internal" href="#contrast" id="id38">contrast</a></li>
-<li><a class="reference internal" href="#convolve" id="id39">convolve</a></li>
-<li><a class="reference internal" href="#crop" id="id40">crop</a></li>
-<li><a class="reference internal" href="#cyclecolormap" id="id41">cycleColormap</a></li>
-<li><a class="reference internal" href="#despeckle" id="id42">despeckle</a></li>
-<li><a class="reference internal" href="#display" id="id43">display</a></li>
-<li><a class="reference internal" href="#draw" id="id44">draw</a></li>
-<li><a class="reference internal" href="#edge" id="id45">edge</a></li>
-<li><a class="reference internal" href="#emboss" id="id46">emboss</a></li>
-<li><a class="reference internal" href="#enhance" id="id47">enhance</a></li>
-<li><a class="reference internal" href="#equalize" id="id48">equalize</a></li>
-<li><a class="reference internal" href="#erase" id="id49">erase</a></li>
-<li><a class="reference internal" href="#extent" id="id50">extent</a></li>
-<li><a class="reference internal" href="#flip" id="id51">flip</a></li>
-<li><a class="reference internal" href="#floodfillcolor" id="id52">floodFillColor</a></li>
-<li><a class="reference internal" href="#floodfillopacity" id="id53">floodFillOpacity</a></li>
-<li><a class="reference internal" href="#floodfilltexture" id="id54">floodFillTexture</a></li>
-<li><a class="reference internal" href="#flop" id="id55">flop</a></li>
-<li><a class="reference internal" href="#frame" id="id56">frame</a></li>
-<li><a class="reference internal" href="#gamma" id="id57">gamma</a></li>
-<li><a class="reference internal" href="#gaussianblur" id="id58">gaussianBlur</a></li>
-<li><a class="reference internal" href="#gaussianblurchannel" id="id59">gaussianBlurChannel</a></li>
-<li><a class="reference internal" href="#implode" id="id60">implode</a></li>
-<li><a class="reference internal" href="#haldclut" id="id61">haldClut</a></li>
-<li><a class="reference internal" href="#label" id="id62">label</a></li>
-<li><a class="reference internal" href="#level" id="id63">level</a></li>
-<li><a class="reference internal" href="#levelchannel" id="id64">levelChannel</a></li>
-<li><a class="reference internal" href="#magnify" id="id65">magnify</a></li>
-<li><a class="reference internal" href="#map" id="id66">map</a></li>
-<li><a class="reference internal" href="#mattefloodfill" id="id67">matteFloodfill</a></li>
-<li><a class="reference internal" href="#medianfilter" id="id68">medianFilter</a></li>
-<li><a class="reference internal" href="#minify" id="id69">minify</a></li>
-<li><a class="reference internal" href="#modifyimage" id="id70">modifyImage</a></li>
-<li><a class="reference internal" href="#modulate" id="id71">modulate</a></li>
-<li><a class="reference internal" href="#motionblur" id="id72">motionBlur</a></li>
-<li><a class="reference internal" href="#negate" id="id73">negate</a></li>
-<li><a class="reference internal" href="#normalize" id="id74">normalize</a></li>
-<li><a class="reference internal" href="#oilpaint" id="id75">oilPaint</a></li>
-<li><a class="reference internal" href="#opacity" id="id76">opacity</a></li>
-<li><a class="reference internal" href="#opaque" id="id77">opaque</a></li>
-<li><a class="reference internal" href="#quantize" id="id78">quantize</a></li>
-<li><a class="reference internal" href="#quantumoperator" id="id79">quantumOperator</a></li>
-<li><a class="reference internal" href="#process" id="id80">process</a></li>
-<li><a class="reference internal" href="#raise" id="id81">raise</a></li>
-<li><a class="reference internal" href="#randomthreshold" id="id82">randomThreshold</a></li>
-<li><a class="reference internal" href="#randomthresholdchannel" id="id83">randomThresholdChannel</a></li>
-<li><a class="reference internal" href="#reducenoise" id="id84">reduceNoise</a></li>
-<li><a class="reference internal" href="#resize" id="id85">resize</a></li>
-<li><a class="reference internal" href="#roll" id="id86">roll</a></li>
-<li><a class="reference internal" href="#rotate" id="id87">rotate</a></li>
-<li><a class="reference internal" href="#sample" id="id88">sample</a></li>
-<li><a class="reference internal" href="#scale" id="id89">scale</a></li>
-<li><a class="reference internal" href="#thumbnail" id="id90">thumbnail</a></li>
-<li><a class="reference internal" href="#segment" id="id91">segment</a></li>
-<li><a class="reference internal" href="#shade" id="id92">shade</a></li>
-<li><a class="reference internal" href="#sharpen" id="id93">sharpen</a></li>
-<li><a class="reference internal" href="#sharpenchannel" id="id94">sharpenChannel</a></li>
-<li><a class="reference internal" href="#shave" id="id95">shave</a></li>
-<li><a class="reference internal" href="#shear" id="id96">shear</a></li>
-<li><a class="reference internal" href="#solarize" id="id97">solarize</a></li>
-<li><a class="reference internal" href="#spread" id="id98">spread</a></li>
-<li><a class="reference internal" href="#stegano" id="id99">stegano</a></li>
-<li><a class="reference internal" href="#stereo" id="id100">stereo</a></li>
-<li><a class="reference internal" href="#strip" id="id101">strip</a></li>
-<li><a class="reference internal" href="#swirl" id="id102">swirl</a></li>
-<li><a class="reference internal" href="#texture" id="id103">texture</a></li>
-<li><a class="reference internal" href="#threshold" id="id104">threshold</a></li>
-<li><a class="reference internal" href="#transform" id="id105">transform</a></li>
-<li><a class="reference internal" href="#transparent" id="id106">transparent</a></li>
-<li><a class="reference internal" href="#trim" id="id107">trim</a></li>
-<li><a class="reference internal" href="#type" id="id108">type</a></li>
-<li><a class="reference internal" href="#unsharpmask" id="id109">unsharpmask</a></li>
-<li><a class="reference internal" href="#unsharpmaskchannel" id="id110">unsharpmaskChannel</a></li>
-<li><a class="reference internal" href="#wave" id="id111">wave</a></li>
-<li><a class="reference internal" href="#zoom" id="id112">zoom</a></li>
+<li><a class="reference internal" href="#adaptivethreshold" id="id20">adaptiveThreshold</a></li>
+<li><a class="reference internal" href="#addnoise" id="id21">addNoise</a></li>
+<li><a class="reference internal" href="#addnoisechannel" id="id22">addNoiseChannel</a></li>
+<li><a class="reference internal" href="#affinetransform" id="id23">affineTransform</a></li>
+<li><a class="reference internal" href="#annotate" id="id24">annotate</a></li>
+<li><a class="reference internal" href="#autoorient" id="id25">autoOrient</a></li>
+<li><a class="reference internal" href="#blur" id="id26">blur</a></li>
+<li><a class="reference internal" href="#blurchannel" id="id27">blurChannel</a></li>
+<li><a class="reference internal" href="#border" id="id28">border</a></li>
+<li><a class="reference internal" href="#cdl" id="id29">cdl</a></li>
+<li><a class="reference internal" href="#channel" id="id30">channel</a></li>
+<li><a class="reference internal" href="#channeldepth" id="id31">channelDepth</a></li>
+<li><a class="reference internal" href="#charcoal" id="id32">charcoal</a></li>
+<li><a class="reference internal" href="#chop" id="id33">chop</a></li>
+<li><a class="reference internal" href="#colorize" id="id34">colorize</a></li>
+<li><a class="reference internal" href="#colormatrix" id="id35">colorMatrix</a></li>
+<li><a class="reference internal" href="#comment" id="id36">comment</a></li>
+<li><a class="reference internal" href="#compare" id="id37">compare</a></li>
+<li><a class="reference internal" href="#composite" id="id38">composite</a></li>
+<li><a class="reference internal" href="#contrast" id="id39">contrast</a></li>
+<li><a class="reference internal" href="#convolve" id="id40">convolve</a></li>
+<li><a class="reference internal" href="#crop" id="id41">crop</a></li>
+<li><a class="reference internal" href="#cyclecolormap" id="id42">cycleColormap</a></li>
+<li><a class="reference internal" href="#despeckle" id="id43">despeckle</a></li>
+<li><a class="reference internal" href="#display" id="id44">display</a></li>
+<li><a class="reference internal" href="#draw" id="id45">draw</a></li>
+<li><a class="reference internal" href="#edge" id="id46">edge</a></li>
+<li><a class="reference internal" href="#emboss" id="id47">emboss</a></li>
+<li><a class="reference internal" href="#enhance" id="id48">enhance</a></li>
+<li><a class="reference internal" href="#equalize" id="id49">equalize</a></li>
+<li><a class="reference internal" href="#erase" id="id50">erase</a></li>
+<li><a class="reference internal" href="#extent" id="id51">extent</a></li>
+<li><a class="reference internal" href="#flip" id="id52">flip</a></li>
+<li><a class="reference internal" href="#floodfillcolor" id="id53">floodFillColor</a></li>
+<li><a class="reference internal" href="#floodfillopacity" id="id54">floodFillOpacity</a></li>
+<li><a class="reference internal" href="#floodfilltexture" id="id55">floodFillTexture</a></li>
+<li><a class="reference internal" href="#flop" id="id56">flop</a></li>
+<li><a class="reference internal" href="#frame" id="id57">frame</a></li>
+<li><a class="reference internal" href="#gamma" id="id58">gamma</a></li>
+<li><a class="reference internal" href="#gaussianblur" id="id59">gaussianBlur</a></li>
+<li><a class="reference internal" href="#gaussianblurchannel" id="id60">gaussianBlurChannel</a></li>
+<li><a class="reference internal" href="#implode" id="id61">implode</a></li>
+<li><a class="reference internal" href="#haldclut" id="id62">haldClut</a></li>
+<li><a class="reference internal" href="#label" id="id63">label</a></li>
+<li><a class="reference internal" href="#level" id="id64">level</a></li>
+<li><a class="reference internal" href="#levelchannel" id="id65">levelChannel</a></li>
+<li><a class="reference internal" href="#magnify" id="id66">magnify</a></li>
+<li><a class="reference internal" href="#map" id="id67">map</a></li>
+<li><a class="reference internal" href="#mattefloodfill" id="id68">matteFloodfill</a></li>
+<li><a class="reference internal" href="#medianfilter" id="id69">medianFilter</a></li>
+<li><a class="reference internal" href="#minify" id="id70">minify</a></li>
+<li><a class="reference internal" href="#modifyimage" id="id71">modifyImage</a></li>
+<li><a class="reference internal" href="#modulate" id="id72">modulate</a></li>
+<li><a class="reference internal" href="#motionblur" id="id73">motionBlur</a></li>
+<li><a class="reference internal" href="#negate" id="id74">negate</a></li>
+<li><a class="reference internal" href="#normalize" id="id75">normalize</a></li>
+<li><a class="reference internal" href="#oilpaint" id="id76">oilPaint</a></li>
+<li><a class="reference internal" href="#opacity" id="id77">opacity</a></li>
+<li><a class="reference internal" href="#opaque" id="id78">opaque</a></li>
+<li><a class="reference internal" href="#quantize" id="id79">quantize</a></li>
+<li><a class="reference internal" href="#quantumoperator" id="id80">quantumOperator</a></li>
+<li><a class="reference internal" href="#process" id="id81">process</a></li>
+<li><a class="reference internal" href="#raise" id="id82">raise</a></li>
+<li><a class="reference internal" href="#randomthreshold" id="id83">randomThreshold</a></li>
+<li><a class="reference internal" href="#randomthresholdchannel" id="id84">randomThresholdChannel</a></li>
+<li><a class="reference internal" href="#reducenoise" id="id85">reduceNoise</a></li>
+<li><a class="reference internal" href="#resize" id="id86">resize</a></li>
+<li><a class="reference internal" href="#roll" id="id87">roll</a></li>
+<li><a class="reference internal" href="#rotate" id="id88">rotate</a></li>
+<li><a class="reference internal" href="#sample" id="id89">sample</a></li>
+<li><a class="reference internal" href="#scale" id="id90">scale</a></li>
+<li><a class="reference internal" href="#thumbnail" id="id91">thumbnail</a></li>
+<li><a class="reference internal" href="#segment" id="id92">segment</a></li>
+<li><a class="reference internal" href="#shade" id="id93">shade</a></li>
+<li><a class="reference internal" href="#sharpen" id="id94">sharpen</a></li>
+<li><a class="reference internal" href="#sharpenchannel" id="id95">sharpenChannel</a></li>
+<li><a class="reference internal" href="#shave" id="id96">shave</a></li>
+<li><a class="reference internal" href="#shear" id="id97">shear</a></li>
+<li><a class="reference internal" href="#solarize" id="id98">solarize</a></li>
+<li><a class="reference internal" href="#spread" id="id99">spread</a></li>
+<li><a class="reference internal" href="#stegano" id="id100">stegano</a></li>
+<li><a class="reference internal" href="#stereo" id="id101">stereo</a></li>
+<li><a class="reference internal" href="#strip" id="id102">strip</a></li>
+<li><a class="reference internal" href="#swirl" id="id103">swirl</a></li>
+<li><a class="reference internal" href="#texture" id="id104">texture</a></li>
+<li><a class="reference internal" href="#threshold" id="id105">threshold</a></li>
+<li><a class="reference internal" href="#transform" id="id106">transform</a></li>
+<li><a class="reference internal" href="#transparent" id="id107">transparent</a></li>
+<li><a class="reference internal" href="#trim" id="id108">trim</a></li>
+<li><a class="reference internal" href="#type" id="id109">type</a></li>
+<li><a class="reference internal" href="#unsharpmask" id="id110">unsharpmask</a></li>
+<li><a class="reference internal" href="#unsharpmaskchannel" id="id111">unsharpmaskChannel</a></li>
+<li><a class="reference internal" href="#wave" id="id112">wave</a></li>
+<li><a class="reference internal" href="#zoom" id="id113">zoom</a></li>
</ul>
</div>
<div class="section" id="adaptivethreshold">
-<h2><a class="toc-backref" href="#id19">adaptiveThreshold</a></h2>
+<h2><a class="toc-backref" href="#id20">adaptiveThreshold</a></h2>
<p>Apply adaptive thresholding to the image (see
<a class="reference external" href="http://homepages.inf.ed.ac.uk/rbf/HIPR2/adpthrsh.htm">http://homepages.inf.ed.ac.uk/rbf/HIPR2/adpthrsh.htm</a>). Adaptive
thresholding is useful if the ideal threshold level is not known in
</pre>
</div>
<div class="section" id="addnoise">
-<h2><a class="toc-backref" href="#id20">addNoise</a></h2>
+<h2><a class="toc-backref" href="#id21">addNoise</a></h2>
<p>Add noise to image with the specified noise type:</p>
<pre class="literal-block">
void addNoise ( const NoiseType noiseType_ )
</pre>
</div>
<div class="section" id="addnoisechannel">
-<h2><a class="toc-backref" href="#id21">addNoiseChannel</a></h2>
+<h2><a class="toc-backref" href="#id22">addNoiseChannel</a></h2>
<p>Add noise to an image channel with the specified noise type. The
<cite>channel</cite> parameter specifies the channel to add noise to. The
<cite>noiseType</cite> parameter specifies the type of noise:</p>
</pre>
</div>
<div class="section" id="affinetransform">
-<h2><a class="toc-backref" href="#id22">affineTransform</a></h2>
+<h2><a class="toc-backref" href="#id23">affineTransform</a></h2>
<p>Transform image by specified affine (or free transform) matrix:</p>
<pre class="literal-block">
void affineTransform ( const DrawableAffine &affine )
</pre>
</div>
<div class="section" id="annotate">
-<h2><a class="toc-backref" href="#id23">annotate</a></h2>
+<h2><a class="toc-backref" href="#id24">annotate</a></h2>
<p>Annotate image (draw text on image)</p>
<p>Gravity effects text placement in bounding area according to these
rules:</p>
</pre>
</div>
<div class="section" id="autoorient">
-<h2><a class="toc-backref" href="#id24">autoOrient</a></h2>
+<h2><a class="toc-backref" href="#id25">autoOrient</a></h2>
<p>Automatically orient image to be right-side up based on its current
orientation attribute. This allows the image to be viewed correctly
when the orientation attribute is not available, or is not respected:</p>
</pre>
</div>
<div class="section" id="blur">
-<h2><a class="toc-backref" href="#id25">blur</a></h2>
+<h2><a class="toc-backref" href="#id26">blur</a></h2>
<p>Blur an image with the specified blur factor.</p>
<p>The <cite>radius</cite> parameter specifies the radius of the Gaussian, in
pixels, not counting the center pixel. The <cite>sigma</cite> parameter
</pre>
</div>
<div class="section" id="blurchannel">
-<h2><a class="toc-backref" href="#id26">blurChannel</a></h2>
+<h2><a class="toc-backref" href="#id27">blurChannel</a></h2>
<p>Blur an image channel with the specified blur factor.</p>
<p>The <cite>channel</cite> parameter specifies the channel to modify. The <cite>radius</cite>
parameter specifies the radius of the Gaussian, in pixels, not
</pre>
</div>
<div class="section" id="border">
-<h2><a class="toc-backref" href="#id27">border</a></h2>
+<h2><a class="toc-backref" href="#id28">border</a></h2>
<p>Border image (add border to image). The <a class="reference external" href="Color.html">color</a> of the border is
specified by the borderColor attribute:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="cdl">
-<h2><a class="toc-backref" href="#id28">cdl</a></h2>
+<h2><a class="toc-backref" href="#id29">cdl</a></h2>
<p>Bake in the ASC-CDL, which is a convention for the for the exchange of
basic primary color grading information between for the exchange of
basic primary color grading information between equipment and software
<p>See <a class="reference external" href="../api/cdl.html#cdlimage">CdlImage</a> for more details on the ASC-CDL.</p>
</div>
<div class="section" id="channel">
-<h2><a class="toc-backref" href="#id29">channel</a></h2>
+<h2><a class="toc-backref" href="#id30">channel</a></h2>
<p>Extract channel from image. Use this option to extract a particular
channel from the image. MatteChannel for example, is useful for
extracting the opacity values from an image:</p>
</pre>
</div>
<div class="section" id="channeldepth">
-<h2><a class="toc-backref" href="#id30">channelDepth</a></h2>
+<h2><a class="toc-backref" href="#id31">channelDepth</a></h2>
<p>Set or obtain modulus channel depth:</p>
<pre class="literal-block">
void channelDepth ( const ChannelType channel_,
</pre>
</div>
<div class="section" id="charcoal">
-<h2><a class="toc-backref" href="#id31">charcoal</a></h2>
+<h2><a class="toc-backref" href="#id32">charcoal</a></h2>
<p>Charcoal effect image (looks like charcoal sketch).</p>
<p>The <cite>radius</cite> parameter specifies the radius of the Gaussian, in
pixels, not counting the center pixel. The <cite>sigma</cite> parameter
</pre>
</div>
<div class="section" id="chop">
-<h2><a class="toc-backref" href="#id32">chop</a></h2>
+<h2><a class="toc-backref" href="#id33">chop</a></h2>
<p>Chop image (remove vertical or horizontal subregion of image):</p>
<pre class="literal-block">
void chop ( const Geometry &geometry_ )
</pre>
</div>
<div class="section" id="colorize">
-<h2><a class="toc-backref" href="#id33">colorize</a></h2>
+<h2><a class="toc-backref" href="#id34">colorize</a></h2>
<p>Colorize image with pen <a class="reference external" href="Color.html">color</a>, using specified percent opacity for
red, green, and blue quantums:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="colormatrix">
-<h2><a class="toc-backref" href="#id34">colorMatrix</a></h2>
+<h2><a class="toc-backref" href="#id35">colorMatrix</a></h2>
<p>Apply a color matrix to the image channels. The user supplied matrix
may be of order 1 to 5 (1x1 through 5x5):</p>
<pre class="literal-block">
<p>See <a class="reference external" href="../api/fx.html#colormatriximage">ColorMatrixImage</a> for more details.</p>
</div>
<div class="section" id="comment">
-<h2><a class="toc-backref" href="#id35">comment</a></h2>
+<h2><a class="toc-backref" href="#id36">comment</a></h2>
<p>Comment image (add comment string to image). By default, each image is
commented with its file name. Use this method to assign a specific
comment to the image. Optionally you can include the image filename,
</pre>
</div>
<div class="section" id="compare">
-<h2><a class="toc-backref" href="#id36">compare</a></h2>
+<h2><a class="toc-backref" href="#id37">compare</a></h2>
<p>Compare current image with another image. Sets meanErrorPerPixel,
normalizedMaxError, and normalizedMeanError in the current
image. False is returned if the images are identical. An ErrorOption
</pre>
</div>
<div class="section" id="composite">
-<h2><a class="toc-backref" href="#id37">composite</a></h2>
+<h2><a class="toc-backref" href="#id38">composite</a></h2>
<p>Compose an image onto another at specified x and y offset and using a
specified algorithm:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="contrast">
-<h2><a class="toc-backref" href="#id38">contrast</a></h2>
+<h2><a class="toc-backref" href="#id39">contrast</a></h2>
<p>Contrast image (enhance intensity differences in image):</p>
<pre class="literal-block">
void contrast ( const unsigned int sharpen_ )
</pre>
</div>
<div class="section" id="convolve">
-<h2><a class="toc-backref" href="#id39">convolve</a></h2>
+<h2><a class="toc-backref" href="#id40">convolve</a></h2>
<p>Convolve image. Applies a user-specified convolution to the image.
The <cite>order</cite> parameter represents the number of columns and rows in the
filter kernel while <cite>kernel</cite> is a two-dimensional array of doubles
</pre>
</div>
<div class="section" id="crop">
-<h2><a class="toc-backref" href="#id40">crop</a></h2>
+<h2><a class="toc-backref" href="#id41">crop</a></h2>
<p>Crop image (return subregion of original image):</p>
<pre class="literal-block">
void crop ( const Geometry &geometry_ )
</pre>
</div>
<div class="section" id="cyclecolormap">
-<h2><a class="toc-backref" href="#id41">cycleColormap</a></h2>
+<h2><a class="toc-backref" href="#id42">cycleColormap</a></h2>
<p>Cycle (rotate) image colormap:</p>
<pre class="literal-block">
void cycleColormap ( const int amount_ )
</pre>
</div>
<div class="section" id="despeckle">
-<h2><a class="toc-backref" href="#id42">despeckle</a></h2>
+<h2><a class="toc-backref" href="#id43">despeckle</a></h2>
<p>Despeckle image (reduce speckle noise):</p>
<pre class="literal-block">
void despeckle ( void )
</pre>
</div>
<div class="section" id="display">
-<h2><a class="toc-backref" href="#id43">display</a></h2>
+<h2><a class="toc-backref" href="#id44">display</a></h2>
<p>Display image on screen. Caution: if an image format is is not
compatible with the display visual (e.g. JPEG on a colormapped
display) then the original image will be altered. Use a copy of the
void display ( void )</blockquote>
</div>
<div class="section" id="draw">
-<h2><a class="toc-backref" href="#id44">draw</a></h2>
+<h2><a class="toc-backref" href="#id45">draw</a></h2>
<p>Draw shape or text on image using a single <a class="reference external" href="Drawable.html">drawable</a> object:</p>
<pre class="literal-block">
void draw ( const Drawable &drawable_ );
</pre>
</div>
<div class="section" id="edge">
-<h2><a class="toc-backref" href="#id45">edge</a></h2>
+<h2><a class="toc-backref" href="#id46">edge</a></h2>
<p>Edge image (hilight edges in image). The radius is the radius of the
pixel neighborhood.. Specify a radius of zero for automatic radius
selection:</p>
</pre>
</div>
<div class="section" id="emboss">
-<h2><a class="toc-backref" href="#id46">emboss</a></h2>
+<h2><a class="toc-backref" href="#id47">emboss</a></h2>
<p>Emboss image (hilight edges with 3D effect). The <cite>radius</cite> parameter
specifies the radius of the Gaussian, in pixels, not counting the
center pixel. The <cite>sigma</cite> parameter specifies the standard deviation
</pre>
</div>
<div class="section" id="enhance">
-<h2><a class="toc-backref" href="#id47">enhance</a></h2>
+<h2><a class="toc-backref" href="#id48">enhance</a></h2>
<p>Enhance image (minimize noise):</p>
<pre class="literal-block">
void enhance ( void );
</pre>
</div>
<div class="section" id="equalize">
-<h2><a class="toc-backref" href="#id48">equalize</a></h2>
+<h2><a class="toc-backref" href="#id49">equalize</a></h2>
<p>Equalize image (histogram equalization):</p>
<pre class="literal-block">
void equalize ( void )
</pre>
</div>
<div class="section" id="erase">
-<h2><a class="toc-backref" href="#id49">erase</a></h2>
+<h2><a class="toc-backref" href="#id50">erase</a></h2>
<p>Set all image pixels to the current background color:</p>
<pre class="literal-block">
void erase ( void )
</pre>
</div>
<div class="section" id="extent">
-<h2><a class="toc-backref" href="#id50">extent</a></h2>
+<h2><a class="toc-backref" href="#id51">extent</a></h2>
<p>Create an image canvas using background color sized according to
geometry and composite existing image on it, with image placement
controlled by gravity. Parameters are obtained from existing image
</pre>
</div>
<div class="section" id="flip">
-<h2><a class="toc-backref" href="#id51">flip</a></h2>
+<h2><a class="toc-backref" href="#id52">flip</a></h2>
<p>Flip image (reflect each scanline in the vertical direction):</p>
<pre class="literal-block">
void flip ( void )
</pre>
</div>
<div class="section" id="floodfillcolor">
-<h2><a class="toc-backref" href="#id52">floodFillColor</a></h2>
+<h2><a class="toc-backref" href="#id53">floodFillColor</a></h2>
<p>Flood-fill <a class="reference external" href="Color.html">color</a> across pixels that match the <a class="reference external" href="Color.html">color</a> of the target
pixel and are neighbors of the target pixel. Uses current fuzz
setting when determining <a class="reference external" href="Color.html">color</a> match:</p>
</pre>
</div>
<div class="section" id="floodfillopacity">
-<h2><a class="toc-backref" href="#id53">floodFillOpacity</a></h2>
+<h2><a class="toc-backref" href="#id54">floodFillOpacity</a></h2>
<p>Flood-fill pixels matching <a class="reference external" href="Color.html">color</a> (within fuzz factor) of target
pixel(x,y) with replacement opacity value using method:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="floodfilltexture">
-<h2><a class="toc-backref" href="#id54">floodFillTexture</a></h2>
+<h2><a class="toc-backref" href="#id55">floodFillTexture</a></h2>
<p>Flood-fill texture across pixels that match the <a class="reference external" href="Color.html">color</a> of the
target pixel and are neighbors of the target pixel.
Uses current fuzz setting when determining <a class="reference external" href="Color.html">color</a> match:</p>
</pre>
</div>
<div class="section" id="flop">
-<h2><a class="toc-backref" href="#id55">flop</a></h2>
+<h2><a class="toc-backref" href="#id56">flop</a></h2>
<p>Flop image (reflect each scanline in the horizontal direction):</p>
<pre class="literal-block">
void flop ( void );
</pre>
</div>
<div class="section" id="frame">
-<h2><a class="toc-backref" href="#id56">frame</a></h2>
+<h2><a class="toc-backref" href="#id57">frame</a></h2>
<p>Draw a decorative frame around the image:</p>
<pre class="literal-block">
void frame ( const Geometry &geometry_ = frameGeometryDefault )
</pre>
</div>
<div class="section" id="gamma">
-<h2><a class="toc-backref" href="#id57">gamma</a></h2>
+<h2><a class="toc-backref" href="#id58">gamma</a></h2>
<p>Gamma correct the image or individual image channels:</p>
<pre class="literal-block">
void gamma ( const double gamma_ )
</pre>
</div>
<div class="section" id="gaussianblur">
-<h2><a class="toc-backref" href="#id58">gaussianBlur</a></h2>
+<h2><a class="toc-backref" href="#id59">gaussianBlur</a></h2>
<p>Gaussian blur image. The number of neighbor pixels to be included in
the convolution mask is specified by <cite>width</cite>. The standard deviation
of the gaussian bell curve is specified by <cite>sigma</cite>:</p>
</pre>
</div>
<div class="section" id="gaussianblurchannel">
-<h2><a class="toc-backref" href="#id59">gaussianBlurChannel</a></h2>
+<h2><a class="toc-backref" href="#id60">gaussianBlurChannel</a></h2>
<p>Gaussian blur image channel. The number of neighbor pixels to be
included in the convolution mask is specified by <cite>width</cite>. The
standard deviation of the gaussian bell curve is specified by
</pre>
</div>
<div class="section" id="implode">
-<h2><a class="toc-backref" href="#id60">implode</a></h2>
+<h2><a class="toc-backref" href="#id61">implode</a></h2>
<p>Implode image (special effect):</p>
<pre class="literal-block">
void implode ( const double factor_ )
</pre>
</div>
<div class="section" id="haldclut">
-<h2><a class="toc-backref" href="#id61">haldClut</a></h2>
+<h2><a class="toc-backref" href="#id62">haldClut</a></h2>
<p>Apply a color lookup table (Hald CLUT) to the image:</p>
<pre class="literal-block">
void haldClut ( const Image &clutImage_ )
<p>See <a class="reference external" href="../api/hclut.html#haldclutimage">HaldClutImage</a> for more details.</p>
</div>
<div class="section" id="label">
-<h2><a class="toc-backref" href="#id62">label</a></h2>
+<h2><a class="toc-backref" href="#id63">label</a></h2>
<p>Assign a label to an image. Use this option to assign a specific label
to the image. Optionally you can include the image filename, type,
width, height, or scene number in the label by embedding <a class="reference external" href="FormatCharacters.html">special
</pre>
</div>
<div class="section" id="level">
-<h2><a class="toc-backref" href="#id63">level</a></h2>
+<h2><a class="toc-backref" href="#id64">level</a></h2>
<p>Level image to increase image contrast, and/or adjust image
gamma. Adjust the levels of the image by scaling the colors falling
between specified white and black points to the full available quantum
</pre>
</div>
<div class="section" id="levelchannel">
-<h2><a class="toc-backref" href="#id64">levelChannel</a></h2>
+<h2><a class="toc-backref" href="#id65">levelChannel</a></h2>
<p>Level image channel to increase image contrast, and/or adjust image
gamma. Adjust the levels of the image channel by scaling the colors
falling between specified white and black points to the full available
</pre>
</div>
<div class="section" id="magnify">
-<h2><a class="toc-backref" href="#id65">magnify</a></h2>
+<h2><a class="toc-backref" href="#id66">magnify</a></h2>
<p>Magnify image by integral size (double the dimensions):</p>
<pre class="literal-block">
void magnify ( void )
</pre>
</div>
<div class="section" id="map">
-<h2><a class="toc-backref" href="#id66">map</a></h2>
+<h2><a class="toc-backref" href="#id67">map</a></h2>
<p>Remap image colors with closest color from a reference image. Set
<cite>dither</cite> to true in to apply Floyd/Steinberg error diffusion to the
image. By default, color reduction chooses an optimal set of colors
</pre>
</div>
<div class="section" id="mattefloodfill">
-<h2><a class="toc-backref" href="#id67">matteFloodfill</a></h2>
+<h2><a class="toc-backref" href="#id68">matteFloodfill</a></h2>
<p>Floodfill designated area with a replacement opacity value:</p>
<pre class="literal-block">
void matteFloodfill ( const Color &target_ ,
</pre>
</div>
<div class="section" id="medianfilter">
-<h2><a class="toc-backref" href="#id68">medianFilter</a></h2>
+<h2><a class="toc-backref" href="#id69">medianFilter</a></h2>
<p>Filter image by replacing each pixel component with the median color
in a circular neighborhood:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="minify">
-<h2><a class="toc-backref" href="#id69">minify</a></h2>
+<h2><a class="toc-backref" href="#id70">minify</a></h2>
<p>Reduce image by integral (half) size:</p>
<pre class="literal-block">
void minify ( void )
</pre>
</div>
<div class="section" id="modifyimage">
-<h2><a class="toc-backref" href="#id70">modifyImage</a></h2>
+<h2><a class="toc-backref" href="#id71">modifyImage</a></h2>
<p>Prepare to update image (copy if reference > 1). Normally Magick++'s
implicit reference counting takes care of all instance management. In
the rare case that the automatic instance management does not work,
</pre>
</div>
<div class="section" id="modulate">
-<h2><a class="toc-backref" href="#id71">modulate</a></h2>
+<h2><a class="toc-backref" href="#id72">modulate</a></h2>
<p>Modulate percent hue, saturation, and brightness of an image.
Modulation of saturation and brightness is as a ratio of the current
value (1.0 for no change). Modulation of hue is an absolute rotation
</pre>
</div>
<div class="section" id="motionblur">
-<h2><a class="toc-backref" href="#id72">motionBlur</a></h2>
+<h2><a class="toc-backref" href="#id73">motionBlur</a></h2>
<p>Motion blur image with specified blur factor. The <cite>radius</cite> parameter
specifies the radius of the Gaussian, in pixels, not counting the
center pixel. The <cite>sigma</cite> parameter specifies the standard
</pre>
</div>
<div class="section" id="negate">
-<h2><a class="toc-backref" href="#id73">negate</a></h2>
+<h2><a class="toc-backref" href="#id74">negate</a></h2>
<p>Negate colors in image. Set <cite>grayscale</cite> to only negate grayscale
values in image:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="normalize">
-<h2><a class="toc-backref" href="#id74">normalize</a></h2>
+<h2><a class="toc-backref" href="#id75">normalize</a></h2>
<p>Normalize image (increase contrast by normalizing the pixel values to
span the full range of color values):</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="oilpaint">
-<h2><a class="toc-backref" href="#id75">oilPaint</a></h2>
+<h2><a class="toc-backref" href="#id76">oilPaint</a></h2>
<p>Oilpaint image (image looks like an oil painting):</p>
<pre class="literal-block">
void oilPaint ( const double radius_ = 3.0 )
</pre>
</div>
<div class="section" id="opacity">
-<h2><a class="toc-backref" href="#id76">opacity</a></h2>
+<h2><a class="toc-backref" href="#id77">opacity</a></h2>
<p>Set or attenuate the opacity channel in the image. If the image pixels
are opaque then they are set to the specified opacity value, otherwise
they are blended with the supplied opacity value. The value of
</pre>
</div>
<div class="section" id="opaque">
-<h2><a class="toc-backref" href="#id77">opaque</a></h2>
+<h2><a class="toc-backref" href="#id78">opaque</a></h2>
<p>Change <a class="reference external" href="Color.html">color</a> of specified opaque pixel to specified pen <a class="reference external" href="Color.html">color</a>:</p>
<pre class="literal-block">
void opaque ( const Color &opaqueColor_,
</pre>
</div>
<div class="section" id="quantize">
-<h2><a class="toc-backref" href="#id78">quantize</a></h2>
+<h2><a class="toc-backref" href="#id79">quantize</a></h2>
<p>Quantize image (reduce number of colors). Set <cite>measureError</cite> to true
in order to calculate error attributes:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="quantumoperator">
-<h2><a class="toc-backref" href="#id79">quantumOperator</a></h2>
+<h2><a class="toc-backref" href="#id80">quantumOperator</a></h2>
<p>Apply an arithmetic or bitwise operator to the image pixel quantums:</p>
<pre class="literal-block">
void quantumOperator ( const ChannelType channel_,
</pre>
</div>
<div class="section" id="process">
-<h2><a class="toc-backref" href="#id80">process</a></h2>
+<h2><a class="toc-backref" href="#id81">process</a></h2>
<p>Execute a named process module using an argc/argv syntax similar to
that accepted by a C 'main' routine. An exception is thrown if the
requested process module doesn't exist, fails to load, or fails during
</pre>
</div>
<div class="section" id="raise">
-<h2><a class="toc-backref" href="#id81">raise</a></h2>
+<h2><a class="toc-backref" href="#id82">raise</a></h2>
<p>Raise image (lighten or darken the edges of an image to give a 3-D
raised or lowered effect):</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="randomthreshold">
-<h2><a class="toc-backref" href="#id82">randomThreshold</a></h2>
+<h2><a class="toc-backref" href="#id83">randomThreshold</a></h2>
<p>Random threshold image.</p>
<p>Changes the value of individual pixels based on the intensity
of each pixel compared to a random threshold. The result is a
</pre>
</div>
<div class="section" id="randomthresholdchannel">
-<h2><a class="toc-backref" href="#id83">randomThresholdChannel</a></h2>
+<h2><a class="toc-backref" href="#id84">randomThresholdChannel</a></h2>
<p>Random threshold image channel.</p>
<p>Changes the value of individual pixels based on the intensity of each
pixel compared to a random threshold. The result is a low-contrast,
</pre>
</div>
<div class="section" id="reducenoise">
-<h2><a class="toc-backref" href="#id84">reduceNoise</a></h2>
+<h2><a class="toc-backref" href="#id85">reduceNoise</a></h2>
<p>Reduce noise in image using a noise peak elimination filter:</p>
<pre class="literal-block">
void reduceNoise ( void )
</pre>
</div>
<div class="section" id="resize">
-<h2><a class="toc-backref" href="#id85">resize</a></h2>
+<h2><a class="toc-backref" href="#id86">resize</a></h2>
<p>Resize image, specifying geometry, filter, and blur (blur > 1.0 is
more blurry and < 1.0 is sharper):</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="roll">
-<h2><a class="toc-backref" href="#id86">roll</a></h2>
+<h2><a class="toc-backref" href="#id87">roll</a></h2>
<p>Roll image (rolls image vertically and horizontally) by specified
number of columnms and rows):</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="rotate">
-<h2><a class="toc-backref" href="#id87">rotate</a></h2>
+<h2><a class="toc-backref" href="#id88">rotate</a></h2>
<p>Rotate image counter-clockwise by specified number of degrees:</p>
<pre class="literal-block">
void rotate ( const double degrees_ )
</pre>
</div>
<div class="section" id="sample">
-<h2><a class="toc-backref" href="#id88">sample</a></h2>
+<h2><a class="toc-backref" href="#id89">sample</a></h2>
<p>Resize image by using pixel sampling algorithm:</p>
<pre class="literal-block">
void sample ( const Geometry &geometry_ )
</pre>
</div>
<div class="section" id="scale">
-<h2><a class="toc-backref" href="#id89">scale</a></h2>
+<h2><a class="toc-backref" href="#id90">scale</a></h2>
<p>Resize image by using simple ratio algorithm which provides good
quality:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="thumbnail">
-<h2><a class="toc-backref" href="#id90">thumbnail</a></h2>
+<h2><a class="toc-backref" href="#id91">thumbnail</a></h2>
<p>Resize image using several algorithms to make smaller images very
quickly. This is very useful to create thumbnails from large images
but usually works well for any image resizing purpose:</p>
</pre>
</div>
<div class="section" id="segment">
-<h2><a class="toc-backref" href="#id91">segment</a></h2>
+<h2><a class="toc-backref" href="#id92">segment</a></h2>
<p>Segment (coalesce similar image components) by analyzing the
histograms of the color components and identifying units that are
homogeneous with the fuzzy c-means technique. A histogram is built
</pre>
</div>
<div class="section" id="shade">
-<h2><a class="toc-backref" href="#id92">shade</a></h2>
+<h2><a class="toc-backref" href="#id93">shade</a></h2>
<p>Shade image using distant light source. Specify <cite>azimuth</cite> and
<cite>elevation</cite> as the position of the light source. By default, the
shading results as a grayscale image.. Set <cite>colorShading</cite> to true to
</pre>
</div>
<div class="section" id="sharpen">
-<h2><a class="toc-backref" href="#id93">sharpen</a></h2>
+<h2><a class="toc-backref" href="#id94">sharpen</a></h2>
<p>Sharpen pixels in image. The <cite>radius</cite> parameter specifies the radius
of the Gaussian, in pixels, not counting the center pixel. The
<cite>sigma</cite> parameter specifies the standard deviation of the Laplacian,
</pre>
</div>
<div class="section" id="sharpenchannel">
-<h2><a class="toc-backref" href="#id94">sharpenChannel</a></h2>
+<h2><a class="toc-backref" href="#id95">sharpenChannel</a></h2>
<p>Sharpen pixels in image channel. The <cite>radius</cite> parameter specifies the
radius of the Gaussian, in pixels, not counting the center pixel. The
<cite>sigma</cite> parameter specifies the standard deviation of the Laplacian,
</pre>
</div>
<div class="section" id="shave">
-<h2><a class="toc-backref" href="#id95">shave</a></h2>
+<h2><a class="toc-backref" href="#id96">shave</a></h2>
<p>Shave pixels from image edges:</p>
<pre class="literal-block">
void shave ( const Geometry &geometry_ )
</pre>
</div>
<div class="section" id="shear">
-<h2><a class="toc-backref" href="#id96">shear</a></h2>
+<h2><a class="toc-backref" href="#id97">shear</a></h2>
<p>Shear image (create parallelogram by sliding image by X or Y
axis). Shearing slides one edge of an image along the X or Y axis,
creating a parallelogram. An X direction shear slides an edge along
</pre>
</div>
<div class="section" id="solarize">
-<h2><a class="toc-backref" href="#id97">solarize</a></h2>
+<h2><a class="toc-backref" href="#id98">solarize</a></h2>
<p>Solarize image (similar to effect seen when exposing a photographic
film to light during the development process):</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="spread">
-<h2><a class="toc-backref" href="#id98">spread</a></h2>
+<h2><a class="toc-backref" href="#id99">spread</a></h2>
<p>Spread pixels randomly within image by specified ammount:</p>
<pre class="literal-block">
void spread ( const unsigned int amount_ = 3 )
</pre>
</div>
<div class="section" id="stegano">
-<h2><a class="toc-backref" href="#id99">stegano</a></h2>
+<h2><a class="toc-backref" href="#id100">stegano</a></h2>
<p>Add a digital watermark to the image (based on second image):</p>
<pre class="literal-block">
void stegano ( const Image &watermark_ )
</pre>
</div>
<div class="section" id="stereo">
-<h2><a class="toc-backref" href="#id100">stereo</a></h2>
+<h2><a class="toc-backref" href="#id101">stereo</a></h2>
<p>Create an image which appears in stereo when viewed with red-blue
glasses (Red image on left, blue on right):</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="strip">
-<h2><a class="toc-backref" href="#id101">strip</a></h2>
+<h2><a class="toc-backref" href="#id102">strip</a></h2>
<p>Remove all profiles and text attributes from the image.</p>
<blockquote>
void strip ( void );</blockquote>
</div>
<div class="section" id="swirl">
-<h2><a class="toc-backref" href="#id102">swirl</a></h2>
+<h2><a class="toc-backref" href="#id103">swirl</a></h2>
<p>Swirl image (image pixels are rotated by degrees):</p>
<pre class="literal-block">
void swirl ( const double degrees_ )
</pre>
</div>
<div class="section" id="texture">
-<h2><a class="toc-backref" href="#id103">texture</a></h2>
+<h2><a class="toc-backref" href="#id104">texture</a></h2>
<p>Channel a texture on pixels matching image background <a class="reference external" href="Color.html">color</a>:</p>
<pre class="literal-block">
void texture ( const Image &texture_ )
</pre>
</div>
<div class="section" id="threshold">
-<h2><a class="toc-backref" href="#id104">threshold</a></h2>
+<h2><a class="toc-backref" href="#id105">threshold</a></h2>
<p>Threshold image channels (below threshold becomes black, above
threshold becomes white). The range of the threshold parameter is 0
to MaxRGB:</p>
</pre>
</div>
<div class="section" id="transform">
-<h2><a class="toc-backref" href="#id105">transform</a></h2>
+<h2><a class="toc-backref" href="#id106">transform</a></h2>
<p>Transform image based on image and crop geometries. Crop geometry is
optional:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="transparent">
-<h2><a class="toc-backref" href="#id106">transparent</a></h2>
+<h2><a class="toc-backref" href="#id107">transparent</a></h2>
<p>Add matte channel to image, setting pixels matching <a class="reference external" href="Color.html">color</a> to
transparent:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="trim">
-<h2><a class="toc-backref" href="#id107">trim</a></h2>
+<h2><a class="toc-backref" href="#id108">trim</a></h2>
<p>Trim edges that are the background <a class="reference external" href="Color.html">color</a> from the image:</p>
<pre class="literal-block">
void trim ( void )
</pre>
</div>
<div class="section" id="type">
-<h2><a class="toc-backref" href="#id108">type</a></h2>
+<h2><a class="toc-backref" href="#id109">type</a></h2>
<p>Convert the image representation to the specified type or retrieve the
current image type. If the image is reduced to an inferior type, then
image information may be lost (e.g. color changed to grayscale).</p>
</pre>
</div>
<div class="section" id="unsharpmask">
-<h2><a class="toc-backref" href="#id109">unsharpmask</a></h2>
+<h2><a class="toc-backref" href="#id110">unsharpmask</a></h2>
<p>Replace image with a sharpened version of the original image using the
unsharp mask algorithm.</p>
<blockquote>
</pre>
</div>
<div class="section" id="unsharpmaskchannel">
-<h2><a class="toc-backref" href="#id110">unsharpmaskChannel</a></h2>
+<h2><a class="toc-backref" href="#id111">unsharpmaskChannel</a></h2>
<p>Replace image channel with a sharpened version of the original image
using the unsharp mask algorithm.</p>
<blockquote>
</pre>
</div>
<div class="section" id="wave">
-<h2><a class="toc-backref" href="#id111">wave</a></h2>
+<h2><a class="toc-backref" href="#id112">wave</a></h2>
<p>Map image pixels to a sine wave:</p>
<pre class="literal-block">
void wave ( const double amplitude_ = 25.0,
</pre>
</div>
<div class="section" id="zoom">
-<h2><a class="toc-backref" href="#id112">zoom</a></h2>
+<h2><a class="toc-backref" href="#id113">zoom</a></h2>
<p>Zoom (resize) image to specified size:</p>
<pre class="literal-block">
void zoom ( const Geometry &geometry_ )
<p>The following image attribute methods are available:</p>
<div class="contents local topic" id="id3">
<ul class="simple">
-<li><a class="reference internal" href="#adjoin" id="id113">adjoin</a></li>
-<li><a class="reference internal" href="#antialias" id="id114">antiAlias</a></li>
-<li><a class="reference internal" href="#animationdelay" id="id115">animationDelay</a></li>
-<li><a class="reference internal" href="#animationiterations" id="id116">animationIterations</a></li>
-<li><a class="reference internal" href="#attribute" id="id117">attribute</a></li>
-<li><a class="reference internal" href="#backgroundcolor" id="id118">backgroundColor</a></li>
-<li><a class="reference internal" href="#backgroundtexture" id="id119">backgroundTexture</a></li>
-<li><a class="reference internal" href="#basecolumns" id="id120">baseColumns</a></li>
-<li><a class="reference internal" href="#basefilename" id="id121">baseFilename</a></li>
-<li><a class="reference internal" href="#baserows" id="id122">baseRows</a></li>
-<li><a class="reference internal" href="#bordercolor" id="id123">borderColor</a></li>
-<li><a class="reference internal" href="#boundingbox" id="id124">boundingBox</a></li>
-<li><a class="reference internal" href="#boxcolor" id="id125">boxColor</a></li>
-<li><a class="reference internal" href="#cachethreshold" id="id126">cacheThreshold</a></li>
-<li><a class="reference internal" href="#chromablueprimary" id="id127">chromaBluePrimary</a></li>
-<li><a class="reference internal" href="#chromagreenprimary" id="id128">chromaGreenPrimary</a></li>
-<li><a class="reference internal" href="#chromaredprimary" id="id129">chromaRedPrimary</a></li>
-<li><a class="reference internal" href="#chromawhitepoint" id="id130">chromaWhitePoint</a></li>
-<li><a class="reference internal" href="#classtype" id="id131">classType</a></li>
-<li><a class="reference internal" href="#clipmask" id="id132">clipMask</a></li>
-<li><a class="reference internal" href="#colorfuzz" id="id133">colorFuzz</a></li>
-<li><a class="reference internal" href="#colormap" id="id134">colorMap</a></li>
-<li><a class="reference internal" href="#colormapsize" id="id135">colorMapSize</a></li>
-<li><a class="reference internal" href="#colorspace" id="id136">colorSpace</a></li>
-<li><a class="reference internal" href="#columns" id="id137">columns</a></li>
-<li><a class="reference internal" href="#id4" id="id138">comment</a></li>
-<li><a class="reference internal" href="#compose" id="id139">compose</a></li>
-<li><a class="reference internal" href="#compresstype" id="id140">compressType</a></li>
-<li><a class="reference internal" href="#debug" id="id141">debug</a></li>
-<li><a class="reference internal" href="#definevalue" id="id142">defineValue</a></li>
-<li><a class="reference internal" href="#defineset" id="id143">defineSet</a></li>
-<li><a class="reference internal" href="#density" id="id144">density</a></li>
-<li><a class="reference internal" href="#depth" id="id145">depth</a></li>
-<li><a class="reference internal" href="#directory" id="id146">directory</a></li>
-<li><a class="reference internal" href="#endian" id="id147">endian</a></li>
-<li><a class="reference internal" href="#filename" id="id148">fileName</a></li>
-<li><a class="reference internal" href="#filesize" id="id149">fileSize</a></li>
-<li><a class="reference internal" href="#fillcolor" id="id150">fillColor</a></li>
-<li><a class="reference internal" href="#fillpattern" id="id151">fillPattern</a></li>
-<li><a class="reference internal" href="#fillrule" id="id152">fillRule</a></li>
-<li><a class="reference internal" href="#filtertype" id="id153">filterType</a></li>
-<li><a class="reference internal" href="#font" id="id154">font</a></li>
-<li><a class="reference internal" href="#fontpointsize" id="id155">fontPointsize</a></li>
-<li><a class="reference internal" href="#fonttypemetrics" id="id156">fontTypeMetrics</a></li>
-<li><a class="reference internal" href="#format" id="id157">format</a></li>
-<li><a class="reference internal" href="#formatexpression" id="id158">formatExpression</a></li>
-<li><a class="reference internal" href="#id5" id="id159">gamma</a></li>
-<li><a class="reference internal" href="#id6" id="id160">geometry</a></li>
-<li><a class="reference internal" href="#gifdisposemethod" id="id161">gifDisposeMethod</a></li>
-<li><a class="reference internal" href="#icccolorprofile" id="id162">iccColorProfile</a></li>
-<li><a class="reference internal" href="#interlacetype" id="id163">interlaceType</a></li>
-<li><a class="reference internal" href="#iptcprofile" id="id164">iptcProfile</a></li>
-<li><a class="reference internal" href="#isvalid" id="id165">isValid</a></li>
-<li><a class="reference internal" href="#id7" id="id166">label</a></li>
-<li><a class="reference internal" href="#linewidth" id="id167">lineWidth</a></li>
-<li><a class="reference internal" href="#magick" id="id168">magick</a></li>
-<li><a class="reference internal" href="#matte" id="id169">matte</a></li>
-<li><a class="reference internal" href="#mattecolor" id="id170">matteColor</a></li>
-<li><a class="reference internal" href="#meanerrorperpixel" id="id171">meanErrorPerPixel</a></li>
-<li><a class="reference internal" href="#modulusdepth" id="id172">modulusDepth</a></li>
-<li><a class="reference internal" href="#monochrome" id="id173">monochrome</a></li>
-<li><a class="reference internal" href="#montagegeometry" id="id174">montageGeometry</a></li>
-<li><a class="reference internal" href="#normalizedmaxerror" id="id175">normalizedMaxError</a></li>
-<li><a class="reference internal" href="#normalizedmeanerror" id="id176">normalizedMeanError</a></li>
-<li><a class="reference internal" href="#orientation" id="id177">orientation</a></li>
-<li><a class="reference internal" href="#page" id="id178">page</a></li>
-<li><a class="reference internal" href="#pixelcolor" id="id179">pixelColor</a></li>
-<li><a class="reference internal" href="#profile" id="id180">profile</a></li>
-<li><a class="reference internal" href="#quality" id="id181">quality</a></li>
-<li><a class="reference internal" href="#quantizecolors" id="id182">quantizeColors</a></li>
-<li><a class="reference internal" href="#quantizecolorspace" id="id183">quantizeColorSpace</a></li>
-<li><a class="reference internal" href="#quantizedither" id="id184">quantizeDither</a></li>
-<li><a class="reference internal" href="#quantizetreedepth" id="id185">quantizeTreeDepth</a></li>
-<li><a class="reference internal" href="#quiet" id="id186">quiet</a></li>
-<li><a class="reference internal" href="#renderingintent" id="id187">renderingIntent</a></li>
-<li><a class="reference internal" href="#repage" id="id188">repage</a></li>
-<li><a class="reference internal" href="#resolutionunits" id="id189">resolutionUnits</a></li>
-<li><a class="reference internal" href="#rows" id="id190">rows</a></li>
-<li><a class="reference internal" href="#scene" id="id191">scene</a></li>
-<li><a class="reference internal" href="#signature" id="id192">signature</a></li>
-<li><a class="reference internal" href="#size" id="id193">size</a></li>
-<li><a class="reference internal" href="#statistics" id="id194">statistics</a></li>
-<li><a class="reference internal" href="#strokeantialias" id="id195">strokeAntiAlias</a></li>
-<li><a class="reference internal" href="#strokecolor" id="id196">strokeColor</a></li>
-<li><a class="reference internal" href="#strokedasharray" id="id197">strokeDashArray</a></li>
-<li><a class="reference internal" href="#strokedashoffset" id="id198">strokeDashOffset</a></li>
-<li><a class="reference internal" href="#strokelinecap" id="id199">strokeLineCap</a></li>
-<li><a class="reference internal" href="#strokelinejoin" id="id200">strokeLineJoin</a></li>
-<li><a class="reference internal" href="#strokemiterlimit" id="id201">strokeMiterLimit</a></li>
-<li><a class="reference internal" href="#strokepattern" id="id202">strokePattern</a></li>
-<li><a class="reference internal" href="#strokewidth" id="id203">strokeWidth</a></li>
-<li><a class="reference internal" href="#subimage" id="id204">subImage</a></li>
-<li><a class="reference internal" href="#subrange" id="id205">subRange</a></li>
-<li><a class="reference internal" href="#textencoding" id="id206">textEncoding</a></li>
-<li><a class="reference internal" href="#tilename" id="id207">tileName</a></li>
-<li><a class="reference internal" href="#totalcolors" id="id208">totalColors</a></li>
-<li><a class="reference internal" href="#transformorigin" id="id209">transformOrigin</a></li>
-<li><a class="reference internal" href="#transformrotation" id="id210">transformRotation</a></li>
-<li><a class="reference internal" href="#transformreset" id="id211">transformReset</a></li>
-<li><a class="reference internal" href="#transformscale" id="id212">transformScale</a></li>
-<li><a class="reference internal" href="#transformskewx" id="id213">transformSkewX</a></li>
-<li><a class="reference internal" href="#transformskewy" id="id214">transformSkewY</a></li>
-<li><a class="reference internal" href="#verbose" id="id215">verbose</a></li>
-<li><a class="reference internal" href="#view" id="id216">view</a></li>
-<li><a class="reference internal" href="#x11display" id="id217">x11Display</a></li>
-<li><a class="reference internal" href="#xresolution" id="id218">xResolution</a></li>
-<li><a class="reference internal" href="#yresolution" id="id219">yResolution</a></li>
+<li><a class="reference internal" href="#adjoin" id="id114">adjoin</a></li>
+<li><a class="reference internal" href="#antialias" id="id115">antiAlias</a></li>
+<li><a class="reference internal" href="#animationdelay" id="id116">animationDelay</a></li>
+<li><a class="reference internal" href="#animationiterations" id="id117">animationIterations</a></li>
+<li><a class="reference internal" href="#attribute" id="id118">attribute</a></li>
+<li><a class="reference internal" href="#backgroundcolor" id="id119">backgroundColor</a></li>
+<li><a class="reference internal" href="#backgroundtexture" id="id120">backgroundTexture</a></li>
+<li><a class="reference internal" href="#basecolumns" id="id121">baseColumns</a></li>
+<li><a class="reference internal" href="#basefilename" id="id122">baseFilename</a></li>
+<li><a class="reference internal" href="#baserows" id="id123">baseRows</a></li>
+<li><a class="reference internal" href="#bordercolor" id="id124">borderColor</a></li>
+<li><a class="reference internal" href="#boundingbox" id="id125">boundingBox</a></li>
+<li><a class="reference internal" href="#boxcolor" id="id126">boxColor</a></li>
+<li><a class="reference internal" href="#cachethreshold" id="id127">cacheThreshold</a></li>
+<li><a class="reference internal" href="#chromablueprimary" id="id128">chromaBluePrimary</a></li>
+<li><a class="reference internal" href="#chromagreenprimary" id="id129">chromaGreenPrimary</a></li>
+<li><a class="reference internal" href="#chromaredprimary" id="id130">chromaRedPrimary</a></li>
+<li><a class="reference internal" href="#chromawhitepoint" id="id131">chromaWhitePoint</a></li>
+<li><a class="reference internal" href="#classtype" id="id132">classType</a></li>
+<li><a class="reference internal" href="#clipmask" id="id133">clipMask</a></li>
+<li><a class="reference internal" href="#colorfuzz" id="id134">colorFuzz</a></li>
+<li><a class="reference internal" href="#colormap" id="id135">colorMap</a></li>
+<li><a class="reference internal" href="#colormapsize" id="id136">colorMapSize</a></li>
+<li><a class="reference internal" href="#colorspace" id="id137">colorSpace</a></li>
+<li><a class="reference internal" href="#columns" id="id138">columns</a></li>
+<li><a class="reference internal" href="#id4" id="id139">comment</a></li>
+<li><a class="reference internal" href="#compose" id="id140">compose</a></li>
+<li><a class="reference internal" href="#compresstype" id="id141">compressType</a></li>
+<li><a class="reference internal" href="#debug" id="id142">debug</a></li>
+<li><a class="reference internal" href="#definevalue" id="id143">defineValue</a></li>
+<li><a class="reference internal" href="#defineset" id="id144">defineSet</a></li>
+<li><a class="reference internal" href="#density" id="id145">density</a></li>
+<li><a class="reference internal" href="#depth" id="id146">depth</a></li>
+<li><a class="reference internal" href="#directory" id="id147">directory</a></li>
+<li><a class="reference internal" href="#endian" id="id148">endian</a></li>
+<li><a class="reference internal" href="#filename" id="id149">fileName</a></li>
+<li><a class="reference internal" href="#filesize" id="id150">fileSize</a></li>
+<li><a class="reference internal" href="#fillcolor" id="id151">fillColor</a></li>
+<li><a class="reference internal" href="#fillpattern" id="id152">fillPattern</a></li>
+<li><a class="reference internal" href="#fillrule" id="id153">fillRule</a></li>
+<li><a class="reference internal" href="#filtertype" id="id154">filterType</a></li>
+<li><a class="reference internal" href="#font" id="id155">font</a></li>
+<li><a class="reference internal" href="#fontpointsize" id="id156">fontPointsize</a></li>
+<li><a class="reference internal" href="#fonttypemetrics" id="id157">fontTypeMetrics</a></li>
+<li><a class="reference internal" href="#format" id="id158">format</a></li>
+<li><a class="reference internal" href="#formatexpression" id="id159">formatExpression</a></li>
+<li><a class="reference internal" href="#id5" id="id160">gamma</a></li>
+<li><a class="reference internal" href="#id6" id="id161">geometry</a></li>
+<li><a class="reference internal" href="#gifdisposemethod" id="id162">gifDisposeMethod</a></li>
+<li><a class="reference internal" href="#icccolorprofile" id="id163">iccColorProfile</a></li>
+<li><a class="reference internal" href="#interlacetype" id="id164">interlaceType</a></li>
+<li><a class="reference internal" href="#iptcprofile" id="id165">iptcProfile</a></li>
+<li><a class="reference internal" href="#isvalid" id="id166">isValid</a></li>
+<li><a class="reference internal" href="#id7" id="id167">label</a></li>
+<li><a class="reference internal" href="#linewidth" id="id168">lineWidth</a></li>
+<li><a class="reference internal" href="#magick" id="id169">magick</a></li>
+<li><a class="reference internal" href="#matte" id="id170">matte</a></li>
+<li><a class="reference internal" href="#mattecolor" id="id171">matteColor</a></li>
+<li><a class="reference internal" href="#meanerrorperpixel" id="id172">meanErrorPerPixel</a></li>
+<li><a class="reference internal" href="#modulusdepth" id="id173">modulusDepth</a></li>
+<li><a class="reference internal" href="#monochrome" id="id174">monochrome</a></li>
+<li><a class="reference internal" href="#montagegeometry" id="id175">montageGeometry</a></li>
+<li><a class="reference internal" href="#normalizedmaxerror" id="id176">normalizedMaxError</a></li>
+<li><a class="reference internal" href="#normalizedmeanerror" id="id177">normalizedMeanError</a></li>
+<li><a class="reference internal" href="#orientation" id="id178">orientation</a></li>
+<li><a class="reference internal" href="#page" id="id179">page</a></li>
+<li><a class="reference internal" href="#pixelcolor" id="id180">pixelColor</a></li>
+<li><a class="reference internal" href="#profile" id="id181">profile</a></li>
+<li><a class="reference internal" href="#quality" id="id182">quality</a></li>
+<li><a class="reference internal" href="#quantizecolors" id="id183">quantizeColors</a></li>
+<li><a class="reference internal" href="#quantizecolorspace" id="id184">quantizeColorSpace</a></li>
+<li><a class="reference internal" href="#quantizedither" id="id185">quantizeDither</a></li>
+<li><a class="reference internal" href="#quantizetreedepth" id="id186">quantizeTreeDepth</a></li>
+<li><a class="reference internal" href="#quiet" id="id187">quiet</a></li>
+<li><a class="reference internal" href="#renderingintent" id="id188">renderingIntent</a></li>
+<li><a class="reference internal" href="#repage" id="id189">repage</a></li>
+<li><a class="reference internal" href="#resolutionunits" id="id190">resolutionUnits</a></li>
+<li><a class="reference internal" href="#rows" id="id191">rows</a></li>
+<li><a class="reference internal" href="#scene" id="id192">scene</a></li>
+<li><a class="reference internal" href="#signature" id="id193">signature</a></li>
+<li><a class="reference internal" href="#size" id="id194">size</a></li>
+<li><a class="reference internal" href="#statistics" id="id195">statistics</a></li>
+<li><a class="reference internal" href="#strokeantialias" id="id196">strokeAntiAlias</a></li>
+<li><a class="reference internal" href="#strokecolor" id="id197">strokeColor</a></li>
+<li><a class="reference internal" href="#strokedasharray" id="id198">strokeDashArray</a></li>
+<li><a class="reference internal" href="#strokedashoffset" id="id199">strokeDashOffset</a></li>
+<li><a class="reference internal" href="#strokelinecap" id="id200">strokeLineCap</a></li>
+<li><a class="reference internal" href="#strokelinejoin" id="id201">strokeLineJoin</a></li>
+<li><a class="reference internal" href="#strokemiterlimit" id="id202">strokeMiterLimit</a></li>
+<li><a class="reference internal" href="#strokepattern" id="id203">strokePattern</a></li>
+<li><a class="reference internal" href="#strokewidth" id="id204">strokeWidth</a></li>
+<li><a class="reference internal" href="#subimage" id="id205">subImage</a></li>
+<li><a class="reference internal" href="#subrange" id="id206">subRange</a></li>
+<li><a class="reference internal" href="#textencoding" id="id207">textEncoding</a></li>
+<li><a class="reference internal" href="#tilename" id="id208">tileName</a></li>
+<li><a class="reference internal" href="#totalcolors" id="id209">totalColors</a></li>
+<li><a class="reference internal" href="#transformorigin" id="id210">transformOrigin</a></li>
+<li><a class="reference internal" href="#transformrotation" id="id211">transformRotation</a></li>
+<li><a class="reference internal" href="#transformreset" id="id212">transformReset</a></li>
+<li><a class="reference internal" href="#transformscale" id="id213">transformScale</a></li>
+<li><a class="reference internal" href="#transformskewx" id="id214">transformSkewX</a></li>
+<li><a class="reference internal" href="#transformskewy" id="id215">transformSkewY</a></li>
+<li><a class="reference internal" href="#verbose" id="id216">verbose</a></li>
+<li><a class="reference internal" href="#view" id="id217">view</a></li>
+<li><a class="reference internal" href="#x11display" id="id218">x11Display</a></li>
+<li><a class="reference internal" href="#xresolution" id="id219">xResolution</a></li>
+<li><a class="reference internal" href="#yresolution" id="id220">yResolution</a></li>
</ul>
</div>
<div class="section" id="adjoin">
-<h2><a class="toc-backref" href="#id113">adjoin</a></h2>
+<h2><a class="toc-backref" href="#id114">adjoin</a></h2>
<p>Join images into a single multi-image file:</p>
<pre class="literal-block">
void adjoin ( const bool flag_ )
</pre>
</div>
<div class="section" id="antialias">
-<h2><a class="toc-backref" href="#id114">antiAlias</a></h2>
+<h2><a class="toc-backref" href="#id115">antiAlias</a></h2>
<p>Control antialiasing of rendered Postscript and Postscript or TrueType
fonts. Enabled by default:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="animationdelay">
-<h2><a class="toc-backref" href="#id115">animationDelay</a></h2>
+<h2><a class="toc-backref" href="#id116">animationDelay</a></h2>
<p>Time in 1/100ths of a second (0 to 65535) which must expire before
displaying the next image in an animated sequence. This option is
useful for regulating the animation of a sequence of GIF images within
</pre>
</div>
<div class="section" id="animationiterations">
-<h2><a class="toc-backref" href="#id116">animationIterations</a></h2>
+<h2><a class="toc-backref" href="#id117">animationIterations</a></h2>
<p>Number of iterations to loop an animation (e.g. Netscape loop
extension) for:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="attribute">
-<h2><a class="toc-backref" href="#id117">attribute</a></h2>
+<h2><a class="toc-backref" href="#id118">attribute</a></h2>
<p>Access or update an arbitrary named image attribute. Any number of
named attributes may be attached to the image. For example, the image
comment is a named image attribute with the name "comment". If the
</pre>
</div>
<div class="section" id="backgroundcolor">
-<h2><a class="toc-backref" href="#id118">backgroundColor</a></h2>
+<h2><a class="toc-backref" href="#id119">backgroundColor</a></h2>
<p>Image background <a class="reference external" href="Color.html">color</a>:</p>
<pre class="literal-block">
void backgroundColor ( const Color &color_ )
</pre>
</div>
<div class="section" id="backgroundtexture">
-<h2><a class="toc-backref" href="#id119">backgroundTexture</a></h2>
+<h2><a class="toc-backref" href="#id120">backgroundTexture</a></h2>
<p>Image file name to use as the background texture. Does not modify
image pixels:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="basecolumns">
-<h2><a class="toc-backref" href="#id120">baseColumns</a></h2>
+<h2><a class="toc-backref" href="#id121">baseColumns</a></h2>
<p>Base image width (before transformations):</p>
<pre class="literal-block">
unsigned int baseColumns ( void ) const
</pre>
</div>
<div class="section" id="basefilename">
-<h2><a class="toc-backref" href="#id121">baseFilename</a></h2>
+<h2><a class="toc-backref" href="#id122">baseFilename</a></h2>
<p>Base image filename (before transformations):</p>
<pre class="literal-block">
std::string baseFilename ( void ) const
</pre>
</div>
<div class="section" id="baserows">
-<h2><a class="toc-backref" href="#id122">baseRows</a></h2>
+<h2><a class="toc-backref" href="#id123">baseRows</a></h2>
<p>Base image height (before transformations):</p>
<pre class="literal-block">
unsigned int baseRows ( void ) const
</pre>
</div>
<div class="section" id="bordercolor">
-<h2><a class="toc-backref" href="#id123">borderColor</a></h2>
+<h2><a class="toc-backref" href="#id124">borderColor</a></h2>
<p>Image border <a class="reference external" href="Color.html">color</a>:</p>
<pre class="literal-block">
void borderColor ( const Color &color_ )
</pre>
</div>
<div class="section" id="boundingbox">
-<h2><a class="toc-backref" href="#id124">boundingBox</a></h2>
+<h2><a class="toc-backref" href="#id125">boundingBox</a></h2>
<p>Return smallest bounding box enclosing non-border pixels. The
current fuzz value is used when discriminating between pixels.
This is the crop bounding box used by <tt class="docutils literal">crop(Geometry(0,0))</tt>:</p>
</pre>
</div>
<div class="section" id="boxcolor">
-<h2><a class="toc-backref" href="#id125">boxColor</a></h2>
+<h2><a class="toc-backref" href="#id126">boxColor</a></h2>
<p>Base <a class="reference external" href="Color.html">color</a> that annotation text is rendered on (default none):</p>
<pre class="literal-block">
void boxColor ( const Color &boxColor_ )
</pre>
</div>
<div class="section" id="cachethreshold">
-<h2><a class="toc-backref" href="#id126">cacheThreshold</a></h2>
+<h2><a class="toc-backref" href="#id127">cacheThreshold</a></h2>
<p>Pixel cache threshold in megabytes. Once this memory threshold is
exceeded, all subsequent pixels cache operations are to/from disk.
This setting is shared by all Image objects:</p>
</pre>
</div>
<div class="section" id="chromablueprimary">
-<h2><a class="toc-backref" href="#id127">chromaBluePrimary</a></h2>
+<h2><a class="toc-backref" href="#id128">chromaBluePrimary</a></h2>
<p>Chromaticity blue primary point (e.g. x=0.15, y=0.06):</p>
<pre class="literal-block">
void chromaBluePrimary ( const double x_, const double y_ )
</pre>
</div>
<div class="section" id="chromagreenprimary">
-<h2><a class="toc-backref" href="#id128">chromaGreenPrimary</a></h2>
+<h2><a class="toc-backref" href="#id129">chromaGreenPrimary</a></h2>
<p>Chromaticity green primary point (e.g. x=0.3, y=0.6):</p>
<pre class="literal-block">
void chromaGreenPrimary ( const double x_, const double y_ )
</pre>
</div>
<div class="section" id="chromaredprimary">
-<h2><a class="toc-backref" href="#id129">chromaRedPrimary</a></h2>
+<h2><a class="toc-backref" href="#id130">chromaRedPrimary</a></h2>
<p>Chromaticity red primary point (e.g. x=0.64, y=0.33):</p>
<pre class="literal-block">
void chromaRedPrimary ( const double x_, const double y_ )
</pre>
</div>
<div class="section" id="chromawhitepoint">
-<h2><a class="toc-backref" href="#id130">chromaWhitePoint</a></h2>
+<h2><a class="toc-backref" href="#id131">chromaWhitePoint</a></h2>
<p>Chromaticity white point (e.g. x=0.3127, y=0.329):</p>
<pre class="literal-block">
void chromaWhitePoint ( const double x_, const double y_ )
</pre>
</div>
<div class="section" id="classtype">
-<h2><a class="toc-backref" href="#id131">classType</a></h2>
+<h2><a class="toc-backref" href="#id132">classType</a></h2>
<p>Image class (DirectClass or PseudoClass). NOTE: setting a DirectClass
image to PseudoClass will result in the loss of color information if
the number of colors in the image is greater than the maximum palette
</pre>
</div>
<div class="section" id="clipmask">
-<h2><a class="toc-backref" href="#id132">clipMask</a></h2>
+<h2><a class="toc-backref" href="#id133">clipMask</a></h2>
<p>Associate a clip mask image with the current image. The clip mask
image must have the same dimensions as the current image or an
exception is thrown. Clipping occurs wherever pixels are transparent
</pre>
</div>
<div class="section" id="colorfuzz">
-<h2><a class="toc-backref" href="#id133">colorFuzz</a></h2>
+<h2><a class="toc-backref" href="#id134">colorFuzz</a></h2>
<p>Colors within this distance are considered equal. A number of
algorithms search for a target color. By default the color must be
exact. Use this option to match colors that are close to the target
</pre>
</div>
<div class="section" id="colormap">
-<h2><a class="toc-backref" href="#id134">colorMap</a></h2>
+<h2><a class="toc-backref" href="#id135">colorMap</a></h2>
<p><a class="reference external" href="Color.html">Color</a> at colormap position <cite>index</cite>:</p>
<pre class="literal-block">
void colorMap ( const unsigned int index_,
</pre>
</div>
<div class="section" id="colormapsize">
-<h2><a class="toc-backref" href="#id135">colorMapSize</a></h2>
+<h2><a class="toc-backref" href="#id136">colorMapSize</a></h2>
<p>Number of entries in the colormap. Setting the colormap size may
extend or truncate the colormap. The maximum number of supported
entries is specified by the MaxColormapSize constant, and is dependent
</pre>
</div>
<div class="section" id="colorspace">
-<h2><a class="toc-backref" href="#id136">colorSpace</a></h2>
+<h2><a class="toc-backref" href="#id137">colorSpace</a></h2>
<p>The colorspace (e.g. CMYK) used to represent the image pixel colors:</p>
<pre class="literal-block">
void colorSpace( const ColorspaceType colorSpace_ )
</pre>
</div>
<div class="section" id="columns">
-<h2><a class="toc-backref" href="#id137">columns</a></h2>
+<h2><a class="toc-backref" href="#id138">columns</a></h2>
<p>Image width:</p>
<pre class="literal-block">
unsigned int columns ( void ) const
</pre>
</div>
<div class="section" id="id4">
-<h2><a class="toc-backref" href="#id138">comment</a></h2>
+<h2><a class="toc-backref" href="#id139">comment</a></h2>
<p>Image comment:</p>
<pre class="literal-block">
std::string comment ( void ) const
</pre>
</div>
<div class="section" id="compose">
-<h2><a class="toc-backref" href="#id139">compose</a></h2>
+<h2><a class="toc-backref" href="#id140">compose</a></h2>
<p>Composition operator to be used when composition is implicitly
used (such as for image flattening):</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="compresstype">
-<h2><a class="toc-backref" href="#id140">compressType</a></h2>
+<h2><a class="toc-backref" href="#id141">compressType</a></h2>
<p>Image compresion type. The default is the compression type of the
input image file:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="debug">
-<h2><a class="toc-backref" href="#id141">debug</a></h2>
+<h2><a class="toc-backref" href="#id142">debug</a></h2>
<p>Enable printing of debug messages from GraphicsMagick as it executes:</p>
<pre class="literal-block">
void debug ( const bool flag_ )
</pre>
</div>
<div class="section" id="definevalue">
-<h2><a class="toc-backref" href="#id142">defineValue</a></h2>
+<h2><a class="toc-backref" href="#id143">defineValue</a></h2>
<p>Set or obtain a definition string to applied when encoding or decoding
the specified format. The meanings of the definitions are format
specific. The format is designated by the <cite>magick</cite> argument, the
</pre>
</div>
<div class="section" id="defineset">
-<h2><a class="toc-backref" href="#id143">defineSet</a></h2>
+<h2><a class="toc-backref" href="#id144">defineSet</a></h2>
<p>Set or obtain a definition flag to applied when encoding or decoding
the specified format. Similar to the defineValue() method except that
passing the <cite>flag</cite> value 'true' creates a value-less define with that
</pre>
</div>
<div class="section" id="density">
-<h2><a class="toc-backref" href="#id144">density</a></h2>
+<h2><a class="toc-backref" href="#id145">density</a></h2>
<p>Vertical and horizontal resolution in pixels of the image. This option
specifies an image density when decoding a Postscript or Portable
Document page. Often used with <cite>psPageSize</cite>:</p>
<p>The resolution units may be obtained via the resolutionUnits() method.</p>
</div>
<div class="section" id="depth">
-<h2><a class="toc-backref" href="#id145">depth</a></h2>
+<h2><a class="toc-backref" href="#id146">depth</a></h2>
<p>Image depth (bits allocated to red/green/blue components). Used to
specify the bit depth when reading or writing raw images or when the
output format supports multiple depths. Defaults to the quantum depth
</pre>
</div>
<div class="section" id="directory">
-<h2><a class="toc-backref" href="#id146">directory</a></h2>
+<h2><a class="toc-backref" href="#id147">directory</a></h2>
<p>Tile names from within an image montage:</p>
<pre class="literal-block">
std::string directory ( void ) const
</pre>
</div>
<div class="section" id="endian">
-<h2><a class="toc-backref" href="#id147">endian</a></h2>
+<h2><a class="toc-backref" href="#id148">endian</a></h2>
<p>Endianness (<cite>LSBEndian</cite> like Intel, <cite>MSBEndian</cite> like SPARC, or
<cite>NativeEndian</cite> for what this computer uses) for image formats which
support endian-specific options:</p>
</pre>
</div>
<div class="section" id="filename">
-<h2><a class="toc-backref" href="#id148">fileName</a></h2>
+<h2><a class="toc-backref" href="#id149">fileName</a></h2>
<p>Image file name:</p>
<pre class="literal-block">
void fileName ( const std::string &fileName_ )
</pre>
</div>
<div class="section" id="filesize">
-<h2><a class="toc-backref" href="#id149">fileSize</a></h2>
+<h2><a class="toc-backref" href="#id150">fileSize</a></h2>
<p>Number of bytes of the image on disk:</p>
<pre class="literal-block">
off_t fileSize ( void ) const
</pre>
</div>
<div class="section" id="fillcolor">
-<h2><a class="toc-backref" href="#id150">fillColor</a></h2>
+<h2><a class="toc-backref" href="#id151">fillColor</a></h2>
<p><a class="reference external" href="Color.html">Color</a> to use when filling drawn objects:</p>
<pre class="literal-block">
void fillColor ( const Color &fillColor_ )
</pre>
</div>
<div class="section" id="fillpattern">
-<h2><a class="toc-backref" href="#id151">fillPattern</a></h2>
+<h2><a class="toc-backref" href="#id152">fillPattern</a></h2>
<p>Pattern to use while filling drawn objects:</p>
<pre class="literal-block">
void fillPattern ( const Image &fillPattern_ )
</pre>
</div>
<div class="section" id="fillrule">
-<h2><a class="toc-backref" href="#id152">fillRule</a></h2>
+<h2><a class="toc-backref" href="#id153">fillRule</a></h2>
<p>Rule to use when filling drawn objects:</p>
<pre class="literal-block">
void fillRule ( const FillRule &fillRule_ )
</pre>
</div>
<div class="section" id="filtertype">
-<h2><a class="toc-backref" href="#id153">filterType</a></h2>
+<h2><a class="toc-backref" href="#id154">filterType</a></h2>
<p>Filter to use when resizing image. The reduction filter employed has a
sigificant effect on the time required to resize an image and the
resulting quality. The default filter is Lanczos which has been shown
</pre>
</div>
<div class="section" id="font">
-<h2><a class="toc-backref" href="#id154">font</a></h2>
+<h2><a class="toc-backref" href="#id155">font</a></h2>
<p>Text rendering font. If the font is a fully qualified X server font
name, the font is obtained from an X server. To use a TrueType font,
precede the TrueType filename with an @. Otherwise, specify a
</pre>
</div>
<div class="section" id="fontpointsize">
-<h2><a class="toc-backref" href="#id155">fontPointsize</a></h2>
+<h2><a class="toc-backref" href="#id156">fontPointsize</a></h2>
<p>Text rendering font point size:</p>
<pre class="literal-block">
void fontPointsize ( const double pointSize_ )
</pre>
</div>
<div class="section" id="fonttypemetrics">
-<h2><a class="toc-backref" href="#id156">fontTypeMetrics</a></h2>
+<h2><a class="toc-backref" href="#id157">fontTypeMetrics</a></h2>
<p>Obtain font metrics (see <a class="reference external" href="TypeMetric.html">TypeMetric</a>) for text string given current
font, pointsize, and density settings. This information is necessary
in order to do fancy layout of text:</p>
</pre>
</div>
<div class="section" id="format">
-<h2><a class="toc-backref" href="#id157">format</a></h2>
+<h2><a class="toc-backref" href="#id158">format</a></h2>
<p>Long image format description:</p>
<pre class="literal-block">
std::string format ( void ) const
</pre>
</div>
<div class="section" id="formatexpression">
-<h2><a class="toc-backref" href="#id158">formatExpression</a></h2>
+<h2><a class="toc-backref" href="#id159">formatExpression</a></h2>
<p>Format a string based on image properties similar to <cite>identify</cite>
<cite>-format</cite>. For example, the format expression "%wx%h" is converted to
a string containing image WIDTHxHEIGHT like "640x480":</p>
throw an exception if there is an internal error.</p>
</div>
<div class="section" id="id5">
-<h2><a class="toc-backref" href="#id159">gamma</a></h2>
+<h2><a class="toc-backref" href="#id160">gamma</a></h2>
<p>Gamma level of the image. Gamma is a pow() function which converts
between the linear light representation and the representation for the
computer display. Most computer images are gamma corrected to 2.2
</pre>
</div>
<div class="section" id="id6">
-<h2><a class="toc-backref" href="#id160">geometry</a></h2>
+<h2><a class="toc-backref" href="#id161">geometry</a></h2>
<p>Preferred size of the image when encoding:</p>
<pre class="literal-block">
Geometry geometry ( void ) const
</pre>
</div>
<div class="section" id="gifdisposemethod">
-<h2><a class="toc-backref" href="#id161">gifDisposeMethod</a></h2>
+<h2><a class="toc-backref" href="#id162">gifDisposeMethod</a></h2>
<p>GIF disposal method. This option (specific to the GIF file format) is
used to control how successive frames are rendered (how the preceding
frame is disposed of) when creating a GIF animation:</p>
</pre>
</div>
<div class="section" id="icccolorprofile">
-<h2><a class="toc-backref" href="#id162">iccColorProfile</a></h2>
+<h2><a class="toc-backref" href="#id163">iccColorProfile</a></h2>
<p>ICC color profile. Supplied via a <a class="reference external" href="Blob.html">Blob</a> since Magick++/ and
GraphicsMagick do not currently support formating this data structure
directly.</p>
</pre>
</div>
<div class="section" id="interlacetype">
-<h2><a class="toc-backref" href="#id163">interlaceType</a></h2>
+<h2><a class="toc-backref" href="#id164">interlaceType</a></h2>
<p>The type of interlacing scheme (default <cite>NoInterlace</cite> ). This option
is used to specify the type of interlacing scheme for raw image
formats such as RGB or YUV. <cite>NoInterlace</cite> means do not interlace,
</pre>
</div>
<div class="section" id="iptcprofile">
-<h2><a class="toc-backref" href="#id164">iptcProfile</a></h2>
+<h2><a class="toc-backref" href="#id165">iptcProfile</a></h2>
<p>IPTC profile. Supplied via a <a class="reference external" href="Blob.html">Blob</a> since Magick++ and GraphicsMagick do
not currently support formating this data structure
directly. Specifications are available from the International Press
</pre>
</div>
<div class="section" id="isvalid">
-<h2><a class="toc-backref" href="#id165">isValid</a></h2>
+<h2><a class="toc-backref" href="#id166">isValid</a></h2>
<p>Does object contain valid image? Set to <cite>false</cite> in order to invalidate
the image. Images constructed via the default constructor are invalid
images and isValid() will return false:</p>
</pre>
</div>
<div class="section" id="id7">
-<h2><a class="toc-backref" href="#id166">label</a></h2>
+<h2><a class="toc-backref" href="#id167">label</a></h2>
<p>Image label:</p>
<pre class="literal-block">
std::string label ( void ) const
</pre>
</div>
<div class="section" id="linewidth">
-<h2><a class="toc-backref" href="#id167">lineWidth</a></h2>
+<h2><a class="toc-backref" href="#id168">lineWidth</a></h2>
<p>Stroke width for drawing vector objects (default one)
This method is now deprecated. Please use strokeWidth instead:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="magick">
-<h2><a class="toc-backref" href="#id168">magick</a></h2>
+<h2><a class="toc-backref" href="#id169">magick</a></h2>
<p>File type magick identifier (.e.g "GIF"):</p>
<pre class="literal-block">
void magick ( const std::string &magick_ )
</pre>
</div>
<div class="section" id="matte">
-<h2><a class="toc-backref" href="#id169">matte</a></h2>
+<h2><a class="toc-backref" href="#id170">matte</a></h2>
<p>Image supports transparency (matte channel):</p>
<pre class="literal-block">
void matte ( const bool matteFlag_ )
</pre>
</div>
<div class="section" id="mattecolor">
-<h2><a class="toc-backref" href="#id170">matteColor</a></h2>
+<h2><a class="toc-backref" href="#id171">matteColor</a></h2>
<p>Image matte (frame) <a class="reference external" href="Color.html">color</a>:</p>
<pre class="literal-block">
void matteColor ( const Color &matteColor_ )
</pre>
</div>
<div class="section" id="meanerrorperpixel">
-<h2><a class="toc-backref" href="#id171">meanErrorPerPixel</a></h2>
+<h2><a class="toc-backref" href="#id172">meanErrorPerPixel</a></h2>
<p>The mean error per pixel computed when an image is color reduced. This
parameter is only valid if verbose is set to true and the image has
just been quantized:</p>
</pre>
</div>
<div class="section" id="modulusdepth">
-<h2><a class="toc-backref" href="#id172">modulusDepth</a></h2>
+<h2><a class="toc-backref" href="#id173">modulusDepth</a></h2>
<p>Image modulus depth (minimum number of bits required to support
red/green/blue components without loss of accuracy). The pixel modulus
depth may be decreased by supplying a value which is less than the
</pre>
</div>
<div class="section" id="monochrome">
-<h2><a class="toc-backref" href="#id173">monochrome</a></h2>
+<h2><a class="toc-backref" href="#id174">monochrome</a></h2>
<p>Transform image to black and white while color reducing (quantizing):</p>
<pre class="literal-block">
void monochrome ( const bool monochromeFlag_ )
</pre>
</div>
<div class="section" id="montagegeometry">
-<h2><a class="toc-backref" href="#id174">montageGeometry</a></h2>
+<h2><a class="toc-backref" href="#id175">montageGeometry</a></h2>
<p>Tile size and offset within an image montage. Only valid for montage
images:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="normalizedmaxerror">
-<h2><a class="toc-backref" href="#id175">normalizedMaxError</a></h2>
+<h2><a class="toc-backref" href="#id176">normalizedMaxError</a></h2>
<p>The normalized max error per pixel computed when an image is color
reduced. This parameter is only valid if verbose is set to true and
the image has just been quantized:</p>
</pre>
</div>
<div class="section" id="normalizedmeanerror">
-<h2><a class="toc-backref" href="#id176">normalizedMeanError</a></h2>
+<h2><a class="toc-backref" href="#id177">normalizedMeanError</a></h2>
<p>The normalized mean error per pixel computed when an image is color
reduced. This parameter is only valid if verbose is set to true and
the image has just been quantized:</p>
</pre>
</div>
<div class="section" id="orientation">
-<h2><a class="toc-backref" href="#id177">orientation</a></h2>
+<h2><a class="toc-backref" href="#id178">orientation</a></h2>
<p>Image orientation. Supported by some file formats such as DPX and
TIFF. Useful for turning the right way up:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="page">
-<h2><a class="toc-backref" href="#id178">page</a></h2>
+<h2><a class="toc-backref" href="#id179">page</a></h2>
<p>Preferred size and location of an image canvas.</p>
<p>Use this option to specify the dimensions and position of the
Postscript page in dots per inch or a TEXT page in pixels. This option
</pre>
</div>
<div class="section" id="pixelcolor">
-<h2><a class="toc-backref" href="#id179">pixelColor</a></h2>
+<h2><a class="toc-backref" href="#id180">pixelColor</a></h2>
<p>Get/set pixel <a class="reference external" href="Color.html">color</a> at location x & y:</p>
<pre class="literal-block">
void pixelColor ( const unsigned int x_,
</pre>
</div>
<div class="section" id="profile">
-<h2><a class="toc-backref" href="#id180">profile</a></h2>
+<h2><a class="toc-backref" href="#id181">profile</a></h2>
<p>Add or remove a named profile to/from the image. Remove the
profile by passing an empty <a class="reference external" href="Blob.html">Blob</a> (e.g. Blob()). Valid names are
"*", "8BIM", "ICM", "IPTC", or a user/format-defined profile name:</p>
</pre>
</div>
<div class="section" id="quality">
-<h2><a class="toc-backref" href="#id181">quality</a></h2>
+<h2><a class="toc-backref" href="#id182">quality</a></h2>
<p>JPEG/MIFF/PNG compression level (default 75):</p>
<pre class="literal-block">
void quality ( const unsigned int quality_ )
</pre>
</div>
<div class="section" id="quantizecolors">
-<h2><a class="toc-backref" href="#id182">quantizeColors</a></h2>
+<h2><a class="toc-backref" href="#id183">quantizeColors</a></h2>
<p>Maximum number of colors to quantize to:</p>
<pre class="literal-block">
void quantizeColors ( const unsigned int colors_ )
</pre>
</div>
<div class="section" id="quantizecolorspace">
-<h2><a class="toc-backref" href="#id183">quantizeColorSpace</a></h2>
+<h2><a class="toc-backref" href="#id184">quantizeColorSpace</a></h2>
<p>Colorspace to quantize in (default RGB). Empirical evidence suggests
that distances in color spaces such as YUV or YIQ correspond to
perceptual color differences more closely than do distances in RGB
</pre>
</div>
<div class="section" id="quantizedither">
-<h2><a class="toc-backref" href="#id184">quantizeDither</a></h2>
+<h2><a class="toc-backref" href="#id185">quantizeDither</a></h2>
<p>Apply Floyd/Steinberg error diffusion to the image. The basic strategy
of dithering is to trade intensity resolution for spatial resolution
by averaging the intensities of several neighboring pixels. Images
</pre>
</div>
<div class="section" id="quantizetreedepth">
-<h2><a class="toc-backref" href="#id185">quantizeTreeDepth</a></h2>
+<h2><a class="toc-backref" href="#id186">quantizeTreeDepth</a></h2>
<p>Depth of the quantization color classification tree. Values of 0 or 1
allow selection of the optimal tree depth for the color reduction
algorithm. Values between 2 and 8 may be used to manually adjust the
</pre>
</div>
<div class="section" id="quiet">
-<h2><a class="toc-backref" href="#id186">quiet</a></h2>
+<h2><a class="toc-backref" href="#id187">quiet</a></h2>
<p>Determines if Warning exceptions will be thrown, or suppressed.
The default is that warnings will be thrown (i.e. false):</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="renderingintent">
-<h2><a class="toc-backref" href="#id187">renderingIntent</a></h2>
+<h2><a class="toc-backref" href="#id188">renderingIntent</a></h2>
<p>The type of rendering intent (used when applying an ICC color
profile using <a class="reference internal" href="#icccolorprofile">iccColorProfile</a>):</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="repage">
-<h2><a class="toc-backref" href="#id188">repage</a></h2>
+<h2><a class="toc-backref" href="#id189">repage</a></h2>
<p>Reset the image page canvas and position:</p>
<pre class="literal-block">
void repage();
</pre>
</div>
<div class="section" id="resolutionunits">
-<h2><a class="toc-backref" href="#id189">resolutionUnits</a></h2>
+<h2><a class="toc-backref" href="#id190">resolutionUnits</a></h2>
<p>Units of image resolution:</p>
<pre class="literal-block">
void resolutionUnits ( const ResolutionType resolutionUnits_ )
</pre>
</div>
<div class="section" id="rows">
-<h2><a class="toc-backref" href="#id190">rows</a></h2>
+<h2><a class="toc-backref" href="#id191">rows</a></h2>
<p>The number of pixel rows in the image:</p>
<pre class="literal-block">
unsigned int rows ( void ) const
</pre>
</div>
<div class="section" id="scene">
-<h2><a class="toc-backref" href="#id191">scene</a></h2>
+<h2><a class="toc-backref" href="#id192">scene</a></h2>
<p>Image scene number:</p>
<pre class="literal-block">
void scene ( const unsigned int scene_ )
</pre>
</div>
<div class="section" id="signature">
-<h2><a class="toc-backref" href="#id192">signature</a></h2>
+<h2><a class="toc-backref" href="#id193">signature</a></h2>
<p>Image textual signature. Set <cite>force</cite> to true in order to re-calculate
the signature regardless of whether the image data has been modified:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="size">
-<h2><a class="toc-backref" href="#id193">size</a></h2>
+<h2><a class="toc-backref" href="#id194">size</a></h2>
<p>Width and height of a raw image (an image which does not support width
and height information). Size may also be used to affect the image
size read from a multi-resolution format (e.g. Photo CD, JBIG, or
</pre>
</div>
<div class="section" id="statistics">
-<h2><a class="toc-backref" href="#id194">statistics</a></h2>
+<h2><a class="toc-backref" href="#id195">statistics</a></h2>
<p>Obtain image statistics. Statistics are normalized to the range
of 0.0 to 1.0 and are output to the specified ImageStatistics
structure:</p>
</pre>
</div>
<div class="section" id="strokeantialias">
-<h2><a class="toc-backref" href="#id195">strokeAntiAlias</a></h2>
+<h2><a class="toc-backref" href="#id196">strokeAntiAlias</a></h2>
<p>Enable/disable stroke anti-aliasing:</p>
<pre class="literal-block">
void strokeAntiAlias( const bool flag_ )
</pre>
</div>
<div class="section" id="strokecolor">
-<h2><a class="toc-backref" href="#id196">strokeColor</a></h2>
+<h2><a class="toc-backref" href="#id197">strokeColor</a></h2>
<p><a class="reference external" href="Color.html">Color</a> to use when drawing object outlines:</p>
<pre class="literal-block">
void strokeColor ( const Color &strokeColor_ )
</pre>
</div>
<div class="section" id="strokedasharray">
-<h2><a class="toc-backref" href="#id197">strokeDashArray</a></h2>
+<h2><a class="toc-backref" href="#id198">strokeDashArray</a></h2>
<p>Specify the pattern of dashes and gaps used to stroke paths. The
strokeDashArray represents a zero-terminated array of numbers that
specify the lengths of alternating dashes and gaps in pixels. If an
</pre>
</div>
<div class="section" id="strokedashoffset">
-<h2><a class="toc-backref" href="#id198">strokeDashOffset</a></h2>
+<h2><a class="toc-backref" href="#id199">strokeDashOffset</a></h2>
<p>While drawing using a dash pattern, specify distance into the
dash pattern to start the dash (default 0):</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="strokelinecap">
-<h2><a class="toc-backref" href="#id199">strokeLineCap</a></h2>
+<h2><a class="toc-backref" href="#id200">strokeLineCap</a></h2>
<p>Specify the shape to be used at the end of open subpaths when
they are stroked. Values of LineCap are UndefinedCap, ButtCap,
RoundCap, and SquareCap:</p>
</pre>
</div>
<div class="section" id="strokelinejoin">
-<h2><a class="toc-backref" href="#id200">strokeLineJoin</a></h2>
+<h2><a class="toc-backref" href="#id201">strokeLineJoin</a></h2>
<p>Specify the shape to be used at the corners of paths (or other
vector shapes) when they are stroked. Values of LineJoin are
UndefinedJoin, MiterJoin, RoundJoin, and BevelJoin:</p>
</pre>
</div>
<div class="section" id="strokemiterlimit">
-<h2><a class="toc-backref" href="#id201">strokeMiterLimit</a></h2>
+<h2><a class="toc-backref" href="#id202">strokeMiterLimit</a></h2>
<p>Specify miter limit. When two line segments meet at a sharp
angle and miter joins have been specified for 'lineJoin', it is
possible for the miter to extend far beyond the thickness of
</pre>
</div>
<div class="section" id="strokepattern">
-<h2><a class="toc-backref" href="#id202">strokePattern</a></h2>
+<h2><a class="toc-backref" href="#id203">strokePattern</a></h2>
<p>Pattern image to use while stroking object outlines:</p>
<pre class="literal-block">
void strokePattern ( const Image &strokePattern_ )
</pre>
</div>
<div class="section" id="strokewidth">
-<h2><a class="toc-backref" href="#id203">strokeWidth</a></h2>
+<h2><a class="toc-backref" href="#id204">strokeWidth</a></h2>
<p>Stroke width for drawing vector objects (default one):</p>
<pre class="literal-block">
void strokeWidth ( const double strokeWidth_ )
</pre>
</div>
<div class="section" id="subimage">
-<h2><a class="toc-backref" href="#id204">subImage</a></h2>
+<h2><a class="toc-backref" href="#id205">subImage</a></h2>
<p>Subimage of an image sequence:</p>
<pre class="literal-block">
void subImage ( const unsigned int subImage_ )
</pre>
</div>
<div class="section" id="subrange">
-<h2><a class="toc-backref" href="#id205">subRange</a></h2>
+<h2><a class="toc-backref" href="#id206">subRange</a></h2>
<p>Number of images relative to the base image:</p>
<pre class="literal-block">
void subRange ( const unsigned int subRange_ )
</pre>
</div>
<div class="section" id="textencoding">
-<h2><a class="toc-backref" href="#id206">textEncoding</a></h2>
+<h2><a class="toc-backref" href="#id207">textEncoding</a></h2>
<p>Annotation text encoding (e.g. "UTF-16"):</p>
<pre class="literal-block">
void textEncoding ( const std::string &encoding_ )
</pre>
</div>
<div class="section" id="tilename">
-<h2><a class="toc-backref" href="#id207">tileName</a></h2>
+<h2><a class="toc-backref" href="#id208">tileName</a></h2>
<p>Tile name:</p>
<pre class="literal-block">
void tileName ( const std::string &tileName_ )
</pre>
</div>
<div class="section" id="totalcolors">
-<h2><a class="toc-backref" href="#id208">totalColors</a></h2>
+<h2><a class="toc-backref" href="#id209">totalColors</a></h2>
<p>Number of colors in the image:</p>
<pre class="literal-block">
unsigned long totalColors ( void )
</pre>
</div>
<div class="section" id="transformorigin">
-<h2><a class="toc-backref" href="#id209">transformOrigin</a></h2>
+<h2><a class="toc-backref" href="#id210">transformOrigin</a></h2>
<p>Origin of coordinate system to use when annotating with text or drawing:</p>
<pre class="literal-block">
void transformOrigin ( const double x_,const double y_ )
</pre>
</div>
<div class="section" id="transformrotation">
-<h2><a class="toc-backref" href="#id210">transformRotation</a></h2>
+<h2><a class="toc-backref" href="#id211">transformRotation</a></h2>
<p>Rotation to use when annotating with text or drawing:</p>
<pre class="literal-block">
void transformRotation ( const double angle_ )
</pre>
</div>
<div class="section" id="transformreset">
-<h2><a class="toc-backref" href="#id211">transformReset</a></h2>
+<h2><a class="toc-backref" href="#id212">transformReset</a></h2>
<p>Reset transformation parameters to default:</p>
<pre class="literal-block">
void transformReset ( void )
</pre>
</div>
<div class="section" id="transformscale">
-<h2><a class="toc-backref" href="#id212">transformScale</a></h2>
+<h2><a class="toc-backref" href="#id213">transformScale</a></h2>
<p>Scale to use when annotating with text or drawing:</p>
<pre class="literal-block">
void transformScale ( const double sx_, const double sy_ )
</pre>
</div>
<div class="section" id="transformskewx">
-<h2><a class="toc-backref" href="#id213">transformSkewX</a></h2>
+<h2><a class="toc-backref" href="#id214">transformSkewX</a></h2>
<p>Skew to use in X axis when annotating with text or drawing:</p>
<pre class="literal-block">
void transformSkewX ( const double skewx_ )
</pre>
</div>
<div class="section" id="transformskewy">
-<h2><a class="toc-backref" href="#id214">transformSkewY</a></h2>
+<h2><a class="toc-backref" href="#id215">transformSkewY</a></h2>
<p>Skew to use in Y axis when annotating with text or drawing:</p>
<pre class="literal-block">
void transformSkewY ( const double skewy_ )
</pre>
</div>
<div class="section" id="verbose">
-<h2><a class="toc-backref" href="#id215">verbose</a></h2>
+<h2><a class="toc-backref" href="#id216">verbose</a></h2>
<p>Print detailed information about the image:</p>
<pre class="literal-block">
void verbose ( const bool verboseFlag_ )
</pre>
</div>
<div class="section" id="view">
-<h2><a class="toc-backref" href="#id216">view</a></h2>
+<h2><a class="toc-backref" href="#id217">view</a></h2>
<p>FlashPix viewing parameters:</p>
<pre class="literal-block">
void view ( const std::string &view_ )
</pre>
</div>
<div class="section" id="x11display">
-<h2><a class="toc-backref" href="#id217">x11Display</a></h2>
+<h2><a class="toc-backref" href="#id218">x11Display</a></h2>
<p>X11 display to display to, obtain fonts from, or to capture
image from:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="xresolution">
-<h2><a class="toc-backref" href="#id218">xResolution</a></h2>
+<h2><a class="toc-backref" href="#id219">xResolution</a></h2>
<p>x resolution of the image:</p>
<pre class="literal-block">
void xResolution ( const double x_resolution )
</pre>
</div>
<div class="section" id="yresolution">
-<h2><a class="toc-backref" href="#id219">yResolution</a></h2>
+<h2><a class="toc-backref" href="#id220">yResolution</a></h2>
<p>y resolution of the image:</p>
<pre class="literal-block">
void yResolution ( const double y_resolution )
<p>The image cache supports the following methods:</p>
<div class="contents local topic" id="id8">
<ul class="simple">
-<li><a class="reference internal" href="#getconstpixels" id="id220">getConstPixels</a></li>
-<li><a class="reference internal" href="#getindexes" id="id221">getIndexes</a></li>
-<li><a class="reference internal" href="#getconstindexes" id="id222">getConstIndexes</a></li>
-<li><a class="reference internal" href="#getpixels" id="id223">getPixels</a></li>
-<li><a class="reference internal" href="#setpixels" id="id224">setPixels</a></li>
-<li><a class="reference internal" href="#syncpixels" id="id225">syncPixels</a></li>
-<li><a class="reference internal" href="#readpixels" id="id226">readPixels</a></li>
-<li><a class="reference internal" href="#writepixels" id="id227">writePixels</a></li>
+<li><a class="reference internal" href="#getconstpixels" id="id221">getConstPixels</a></li>
+<li><a class="reference internal" href="#getindexes" id="id222">getIndexes</a></li>
+<li><a class="reference internal" href="#getconstindexes" id="id223">getConstIndexes</a></li>
+<li><a class="reference internal" href="#getpixels" id="id224">getPixels</a></li>
+<li><a class="reference internal" href="#setpixels" id="id225">setPixels</a></li>
+<li><a class="reference internal" href="#syncpixels" id="id226">syncPixels</a></li>
+<li><a class="reference internal" href="#readpixels" id="id227">readPixels</a></li>
+<li><a class="reference internal" href="#writepixels" id="id228">writePixels</a></li>
</ul>
</div>
<div class="section" id="getconstpixels">
-<h2><a class="toc-backref" href="#id220">getConstPixels</a></h2>
+<h2><a class="toc-backref" href="#id221">getConstPixels</a></h2>
<p>Transfers read-only pixels from the image to the pixel cache as
defined by the specified region:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="getindexes">
-<h2><a class="toc-backref" href="#id221">getIndexes</a></h2>
+<h2><a class="toc-backref" href="#id222">getIndexes</a></h2>
<p>Obtain mutable image pixel indexes (valid for PseudoClass images):</p>
<pre class="literal-block">
IndexPacket* getIndexes ( void )
</pre>
</div>
<div class="section" id="getconstindexes">
-<h2><a class="toc-backref" href="#id222">getConstIndexes</a></h2>
+<h2><a class="toc-backref" href="#id223">getConstIndexes</a></h2>
<p>Obtain immutable image pixel indexes (valid for PseudoClass images):</p>
<pre class="literal-block">
const IndexPacket* getConstIndexes ( void ) const
</pre>
</div>
<div class="section" id="getpixels">
-<h2><a class="toc-backref" href="#id223">getPixels</a></h2>
+<h2><a class="toc-backref" href="#id224">getPixels</a></h2>
<p>Transfers pixels from the image to the pixel cache as defined by the
specified region. Modified pixels may be subsequently transferred back
to the image via syncPixels. This method is valid for DirectClass
</pre>
</div>
<div class="section" id="setpixels">
-<h2><a class="toc-backref" href="#id224">setPixels</a></h2>
+<h2><a class="toc-backref" href="#id225">setPixels</a></h2>
<p>Allocates a pixel cache region to store image pixels as defined by the
region rectangle. This area is subsequently transferred from the
pixel cache to the image via syncPixels:</p>
</pre>
</div>
<div class="section" id="syncpixels">
-<h2><a class="toc-backref" href="#id225">syncPixels</a></h2>
+<h2><a class="toc-backref" href="#id226">syncPixels</a></h2>
<p>Transfers the image cache pixels to the image:</p>
<pre class="literal-block">
void syncPixels ( void )
</pre>
</div>
<div class="section" id="readpixels">
-<h2><a class="toc-backref" href="#id226">readPixels</a></h2>
+<h2><a class="toc-backref" href="#id227">readPixels</a></h2>
<p>Transfers one or more pixel components from a buffer or file into the
image pixel cache of an image. Used to support image decoders:</p>
<pre class="literal-block">
</pre>
</div>
<div class="section" id="writepixels">
-<h2><a class="toc-backref" href="#id227">writePixels</a></h2>
+<h2><a class="toc-backref" href="#id228">writePixels</a></h2>
<p>Transfers one or more pixel components from the image pixel cache to a
buffer or file. Used to support image encoders:</p>
<pre class="literal-block">
void writePixels ( const QuantumType quantum_,
unsigned char *destination_ )
</pre>
+</div>
+</div>
+<div class="section" id="explicit-logging-configuration-and-callbacks">
+<h1><a class="toc-backref" href="#id16">Explicit Logging Configuration And Callbacks</a></h1>
+<p>It is sometimes useful for a program to not have to depend on a
+configuration file for configuring logging ("tracing"). One reason
+for this is because until a logging configuration file has been found
+and loaded, default logging parameters are used. Another reason is
+that in some configurations, it is useful for each instance of a
+program to use its own logging configuration. To make this possible,
+the Magick++ library provides pass-through functions which allow
+setting the logging defaults <em>before</em> InitializeMagick() is called.
+Setting logging defaults after InitializeMagick() is called has no
+purpose since they will not be used.</p>
+<p>The following C++ pass-through functions are available"</p>
+<div class="section" id="setlogdefaulteventtype">
+<h2>SetLogDefaultEventType</h2>
+<p>Specify default events which will result in a log event (comma-comma-separated list):</p>
+<pre class="literal-block">
+void SetLogDefaultEventType(const std::string &events_)
+</pre>
+</div>
+<div class="section" id="setlogdefaultgenerations">
+<h2>SetLogDefaultGenerations</h2>
+<p>Specify default maximum log file generations before overwriting the first name:</p>
+<pre class="literal-block">
+void SetLogDefaultGenerations(const unsigned int generations_)
+</pre>
+</div>
+<div class="section" id="setlogdefaultlimit">
+<h2>SetLogDefaultLimit</h2>
+<p>Specify default maximum number of logging events before creating a new log file:</p>
+<pre class="literal-block">
+void SetLogDefaultLimit(const unsigned int limit_)
+</pre>
+</div>
+<div class="section" id="setlogdefaultfilename">
+<h2>SetLogDefaultFileName</h2>
+<p>Specify the file name, or file path, to be written to for each log event:</p>
+<pre class="literal-block">
+void SetLogDefaultFileName(const std::string &filename_)
+</pre>
+</div>
+<div class="section" id="setlogdefaultformat">
+<h2>SetLogDefaultFormat</h2>
+<p>Specify default log format using the same special format characters used by "log.mgk":</p>
+<pre class="literal-block">
+void SetLogDefaultFormat(const std::string &format_)
+</pre>
+</div>
+<div class="section" id="setlogdefaultlogmethod">
+<h2>SetLogDefaultLogMethod</h2>
+<p>Specify default C-language call-back function to be invoked for each log event:</p>
+<pre class="literal-block">
+void SetLogDefaultLogMethod(const Magick::LogMethod method_)
+</pre>
+<p>Note that it is hoped that better mechanisms will be provided in the future.</p>
+</div>
+<div class="section" id="setlogdefaultoutputtype">
+<h2>SetLogDefaultOutputType</h2>
+<p>Specify default logging output type/destination:</p>
+<pre class="literal-block">
+void SetLogDefaultOutputType(const Magick::LogOutputType output_type_)
+</pre>
+<p>Available LogOutputType enumerations are DisabledOutput,
+UndefinedOutput, StdoutOutput, StderrOutput, XMLFileOutput,
+TXTFileOutput, Win32DebugOutput, Win32EventlogOutput, and
+MethodOutput.</p>
<p>Copyright © <a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">Bob Friesenhahn</a> 1999 - 2020</p>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Magick::Image Class</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="magick-image-class">
+<h1 class="title">Magick::Image Class</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#introduction" id="id9">Introduction</a></li>
+<li><a class="reference internal" href="#blobs" id="id10">BLOBs</a></li>
+<li><a class="reference internal" href="#construct-an-image" id="id11">Construct An Image</a></li>
+<li><a class="reference internal" href="#read-or-write-an-image" id="id12">Read Or Write An Image</a></li>
+<li><a class="reference internal" href="#manipulate-an-image" id="id13">Manipulate An Image</a></li>
+<li><a class="reference internal" href="#set-get-image-attributes" id="id14">Set/Get Image Attributes</a></li>
+<li><a class="reference internal" href="#low-level-image-pixel-access" id="id15">Low-Level Image Pixel Access</a></li>
+</ul>
+</div>
+<div class="section" id="introduction">
+<h1><a class="toc-backref" href="#id9">Introduction</a></h1>
+<p>Image is the primary object in Magick++ and represents a single image
+frame (see <a class="reference external" href="ImageDesign.html">image design</a>). The <a class="reference external" href="STL.html">STL</a> interface must be used to
+operate on image sequences or images (e.g. of format GIF, TIFF, MIFF,
+Postscript, & MNG) which are comprized of multiple image
+frames. Individual frames of a multi-frame image may be requested by
+adding array-style notation to the end of the file name
+(e.g. "animation.gif[3]" retrieves the fourth frame of a GIF
+animation. Various image manipulation operations may be applied to
+the image. Attributes may be set on the image to influence the
+operation of the manipulation operations. The <a class="reference external" href="Pixels.html">Pixels</a> class provides
+low-level access to image pixels. As a convenience, including
+<Magick++.h> is sufficient in order to use the complete Magick++
+API. The Magick++ API is enclosed within the Magick namespace so you
+must either add the prefix " Magick:: " to each class/enumeration name
+or add the statement " using namespace Magick;" after including the
+Magick++.h header.</p>
+<p>The InitializeMagick() function <em>MUST</em> be invoked before constructing
+any Magick++ objects. This used to be optional, but now it is
+absolutely required. This function initalizes semaphores and
+configuration information necessary for the software to work
+correctly. Failing to invoke InitializeMagick() is likely to lead to
+a program crash or thrown assertion. If the program resides in the
+same directory as the GraphicsMagick files, then argv[0] may be passed
+as an argument so that GraphicsMagick knows where its files reside,
+otherwise NULL may be passed and GraphicsMagick will try to use other
+means (if necessary).</p>
+<p>The preferred way to allocate Image objects is via automatic
+allocation (on the stack). There is no concern that allocating Image
+objects on the stack will excessively enlarge the stack since Magick++
+allocates all large data objects (such as the actual image data) from
+the heap. Use of automatic allocation is preferred over explicit
+allocation (via new) since it is much less error prone and allows use
+of C++ scoping rules to avoid memory leaks. Use of automatic
+allocation allows Magick++ objects to be assigned and copied just like
+the C++ intrinsic data types (e.g. 'int '), leading to clear and easy
+to read code. Use of automatic allocation leads to naturally
+exception-safe code since if an exception is thrown, the object is
+automatically deallocated once the stack unwinds past the scope of the
+allocation (not the case for objects allocated via new ).</p>
+<p>Image is very easy to use. For example, here is a the source to a
+program which reads an image, crops it, and writes it to a new file
+(the exception handling is optional but strongly recommended):</p>
+<pre class="literal-block">
+#include <Magick++.h>
+#include <iostream>
+using namespace std;
+using namespace Magick;
+int main(int argc,char **argv)
+{
+ // Initialize the API. Can pass NULL if argv is not available.
+ InitializeMagick(*argv);
+
+ // Construct the image object. Seperating image construction from the
+ // the read operation ensures that a failure to read the image file
+ // doesn't render the image object useless.
+ Image image;
+
+ try {
+ // Determine if Warning exceptions are thrown.
+ // Use is optional. Set to true to block Warning exceptions.
+ image.quiet( false );
+
+ // Read a file into image object
+ image.read( "girl.gif" );
+
+ // Crop the image to specified size (width, height, xOffset, yOffset)
+ image.crop( Geometry(100,100, 100, 100) );
+
+ // Write the image to a file
+ image.write( "x.gif" );
+ }
+ catch( Exception &error_ )
+ {
+ cout << "Caught exception: " << error_.what() << endl;
+ return 1;
+ }
+ return 0;
+}
+</pre>
+<p>The following is the source to a program which illustrates the use of
+Magick++'s efficient reference-counted assignment and copy-constructor
+operations which minimize use of memory and eliminate unncessary copy
+operations (allowing Image objects to be efficiently assigned, and
+copied into containers). The program accomplishes the following:</p>
+<ol class="arabic simple">
+<li>Read master image.</li>
+<li>Assign master image to second image.</li>
+<li>Zoom second image to the size 640x480.</li>
+<li>Assign master image to a third image.</li>
+<li>Zoom third image to the size 800x600.</li>
+<li>Write the second image to a file.</li>
+<li>Write the third image to a file.</li>
+</ol>
+<pre class="literal-block">
+#include <Magick++.h>
+#include <iostream>
+using namespace std;
+using namespace Magick;
+int main(int argc,char **argv)
+{
+ InitializeMagick(*argv);
+ Image master("horse.jpg");
+ Image second = master;
+ second.zoom("640x480");
+ Image third = master;
+ third.zoom("800x600");
+ second.write("horse640x480.jpg");
+ third.write("horse800x600.jpg");
+ return 0;
+}
+</pre>
+<p>During the entire operation, a maximum of three images exist in memory
+and the image data is never copied.</p>
+<p>The following is the source for another simple program which creates a
+100 by 100 pixel white image with a red pixel in the center and writes
+it to a file:</p>
+<pre class="literal-block">
+#include <Magick++.h>
+using namespace std;
+using namespace Magick;
+int main(int argc,char **argv)
+{
+ InitializeMagick(*argv);
+ Image image( "100x100", "white" );
+ image.pixelColor( 49, 49, "red" );
+ image.write( "red_pixel.png" );
+ return 0;
+}
+</pre>
+<p>If you wanted to change the color image to grayscale, you could add
+the lines:</p>
+<pre class="literal-block">
+image.quantizeColorSpace( GRAYColorspace );
+image.quantizeColors( 256 );
+image.quantize( );
+</pre>
+<p>or, more simply:</p>
+<pre class="literal-block">
+image.type( GrayscaleType );
+</pre>
+<p>prior to writing the image.</p>
+</div>
+<div class="section" id="blobs">
+<h1><a class="toc-backref" href="#id10">BLOBs</a></h1>
+<p>While encoded images (e.g. JPEG) are most often written-to and
+read-from a disk file, encoded images may also reside in
+memory. Encoded images in memory are known as BLOBs (Binary Large
+OBjects) and may be represented using the <a class="reference external" href="Blob.html">Blob</a> class. The encoded
+image may be initially placed in memory by reading it directly from a
+file, reading the image from a database, memory-mapped from a disk
+file, or could be written to memory by Magick++. Once the encoded
+image has been placed within a <a class="reference external" href="Blob.html">Blob</a>, it may be read into a Magick++
+Image via a constructor or read() . Likewise, a Magick++ image may be
+written to a <a class="reference external" href="Blob.html">Blob</a> via write().</p>
+<p>An example of using Image to write to a <a class="reference external" href="Blob.html">Blob</a> follows:</p>
+<pre class="literal-block">
+#include <Magick++.h>
+using namespace std;
+using namespace Magick;
+int main(int argc,char **argv)
+{
+ // Read GIF file from disk
+ Image image( "giraffe.gif" );
+
+ // Write to BLOB in JPEG format
+ Blob blob;
+ image.magick( "JPEG" ) // Set JPEG output format
+ image.write( &blob );
+
+ [ Use BLOB data (in JPEG format) here ]
+
+ return 0;
+}
+</pre>
+<p>likewise, to read an image from a <a class="reference external" href="Blob.html">Blob</a>, you could use one of the
+following examples:</p>
+<p>[ Entry condition for the following examples is that data is pointer
+to encoded image data and length represents the size of the data ]</p>
+<pre class="literal-block">
+Blob blob( data, length );
+Image image( blob );
+</pre>
+<p>or</p>
+<pre class="literal-block">
+Blob blob( data, length );
+Image image;
+image.read( blob);
+</pre>
+<p>Some images do not contain their size or format so the size and format
+must be specified in advance:</p>
+<pre class="literal-block">
+Blob blob( data, length );
+Image image;
+image.size( "640x480")
+image.magick( "RGBA" );
+image.read( blob);
+</pre>
+</div>
+<div class="section" id="construct-an-image">
+<h1><a class="toc-backref" href="#id11">Construct An Image</a></h1>
+<p>An Image may be constructed in a number of ways. It may be constructed
+from a file, a URL, or an encoded image (e.g. JPEG) contained in an
+in-memory <a class="reference external" href="Blob.html">Blob</a> . The following Image constructors and assignment
+operators are available:</p>
+<p>Construct from image file or image specification:</p>
+<pre class="literal-block">
+Image( const std::string &imageSpec_ )
+</pre>
+<p>Construct a blank image canvas of specified size and <a class="reference external" href="Color.html">color</a>:</p>
+<pre class="literal-block">
+Image( const Geometry &size_, const Color &color_ )
+</pre>
+<p>Construct Image from in-memory <a class="reference external" href="Blob.html">Blob</a>:</p>
+<pre class="literal-block">
+Image ( const Blob &blob_ )
+</pre>
+<p>Construct Image of specified size from in-memory <a class="reference external" href="Blob.html">Blob</a>:</p>
+<pre class="literal-block">
+Image ( const Blob &blob_, const Geometry &size_ )
+</pre>
+<p>Construct Image of specified size and depth from in-memory <a class="reference external" href="Blob.html">Blob</a>:</p>
+<pre class="literal-block">
+Image ( const Blob &blob_, const Geometry &size,
+ const unsigned int depth )
+</pre>
+<p>Construct Image of specified size, depth, and format from in-memory <a class="reference external" href="Blob.html">Blob</a>:</p>
+<pre class="literal-block">
+Image ( const Blob &blob_, const Geometry &size,
+ const unsigned int depth_,
+ const std::string &magick_ )
+</pre>
+<p>Construct Image of specified size, and format from in-memory <a class="reference external" href="Blob.html">Blob</a>:</p>
+<pre class="literal-block">
+Image ( const Blob &blob_, const Geometry &size,
+ const std::string &magick_ )
+</pre>
+<p>Construct an image based on an array of raw pixels, of specified type
+and mapping, in memory:</p>
+<pre class="literal-block">
+Image ( const unsigned int width_,
+ const unsigned int height_,
+ const std::string &map_,
+ const StorageType type_,
+ const void *pixels_ )
+</pre>
+<p>Default constructor:</p>
+<pre class="literal-block">
+Image( void )
+</pre>
+<p>Copy constructor:</p>
+<pre class="literal-block">
+Image ( const Image & image_ )
+</pre>
+<p>Assignment operator:</p>
+<pre class="literal-block">
+Image& operator= ( const Image &image_ )
+</pre>
+</div>
+<div class="section" id="read-or-write-an-image">
+<h1><a class="toc-backref" href="#id12">Read Or Write An Image</a></h1>
+<div class="contents local topic" id="id1">
+<ul class="simple">
+<li><a class="reference internal" href="#ping" id="id16">ping</a></li>
+<li><a class="reference internal" href="#read" id="id17">read</a></li>
+<li><a class="reference internal" href="#write" id="id18">write</a></li>
+</ul>
+</div>
+<div class="section" id="ping">
+<h2><a class="toc-backref" href="#id16">ping</a></h2>
+<p>Ping is similar to <a class="reference internal" href="#read">read</a> except only enough of the image is read to
+determine the image columns, rows, and filesize. Access the
+columns(), rows(), and fileSize() attributes after invoking ping.
+Other attributes may also be available. The image pixels are not
+valid after calling ping:</p>
+<pre class="literal-block">
+void ping ( const std::string &imageSpec_ )
+</pre>
+<p>Ping is similar to read except only enough of the image is read
+to determine the image columns, rows, and filesize. Access the
+columns(), rows(), and fileSize() attributes after invoking
+ping. The image pixels are not valid after calling ping:</p>
+<pre class="literal-block">
+void ping ( const Blob &blob_ )
+</pre>
+</div>
+<div class="section" id="read">
+<h2><a class="toc-backref" href="#id17">read</a></h2>
+<p>Read single image frame into current object. Use <a class="reference internal" href="#ping">ping</a> instead if you
+want to obtain the basic attributes of the image without reading the
+whole file/blob:</p>
+<pre class="literal-block">
+void read ( const std::string &imageSpec_ )
+</pre>
+<p>Read single image frame of specified size into current object:</p>
+<pre class="literal-block">
+void read ( const Geometry &size_,
+ const std::string &imageSpec_ )
+</pre>
+<p>Read single image frame from in-memory <a class="reference external" href="Blob.html">Blob</a>:</p>
+<pre class="literal-block">
+void read ( const Blob &blob_ )
+</pre>
+<p>Read single image frame of specified size from in-memory <a class="reference external" href="Blob.html">Blob</a>:</p>
+<pre class="literal-block">
+void read ( const Blob &blob_,
+ const Geometry &size_ )
+</pre>
+<p>Read single image frame of specified size and depth from in-memory
+<a class="reference external" href="Blob.html">Blob</a>:</p>
+<pre class="literal-block">
+void read ( const Blob &blob_,
+ const Geometry &size_,
+ const unsigned int depth_ )
+</pre>
+<p>Read single image frame of specified size, depth, and format from
+in-memory <a class="reference external" href="Blob.html">Blob</a>:</p>
+<pre class="literal-block">
+void read ( const Blob &blob_,
+ const Geometry &size_,
+ const unsigned int depth_,
+ const std::string &magick_ )
+</pre>
+<p>Read single image frame of specified size, and format from in-memory
+<a class="reference external" href="Blob.html">Blob</a>:</p>
+<pre class="literal-block">
+void read ( const Blob &blob_,
+ const Geometry &size_,
+ const std::string &magick_ )
+</pre>
+<p>Read single image frame from an array of raw pixels, with
+specified storage type (ConstituteImage), e.g.
+<tt class="docutils literal">image.read( 640, 480, "RGB", 0, pixels )</tt>:</p>
+<pre class="literal-block">
+void read ( const unsigned int width_,
+ const unsigned int height_,
+ const std::string &map_,
+ const StorageType type_,
+ const void *pixels_ )
+</pre>
+</div>
+<div class="section" id="write">
+<h2><a class="toc-backref" href="#id18">write</a></h2>
+<p>Write single image frame to a file:</p>
+<pre class="literal-block">
+void write ( const std::string &imageSpec_ )
+</pre>
+<p>Write single image frame to in-memory <a class="reference external" href="Blob.html">Blob</a>, with optional format and
+adjoin parameters:</p>
+<pre class="literal-block">
+void write ( Blob *blob_ )
+
+void write ( Blob *blob_,
+ const std::string &magick_ )
+
+void write ( Blob *blob_,
+ const std::string &magick_,
+ const unsigned int depth_ )
+</pre>
+<p>Write single image frame to an array of pixels with storage type
+specified by user (DispatchImage), e.g. <tt class="docutils literal">image.write( 0, 0, 640, 1,
+"RGB", 0, pixels )</tt>:</p>
+<pre class="literal-block">
+void write ( const int x_,
+ const int y_,
+ const unsigned int columns_,
+ const unsigned int rows_,
+ const std::string& map_,
+ const StorageType type_,
+ void *pixels_ )
+</pre>
+</div>
+</div>
+<div class="section" id="manipulate-an-image">
+<h1><a class="toc-backref" href="#id13">Manipulate An Image</a></h1>
+<p>Image supports access to all the single-image (versus image-list)
+manipulation operations provided by the GraphicsMagick library. If you
+must process a multi-image file (such as an animation), the <a class="reference external" href="STL.html">STL</a>
+interface , which provides a multi-image abstraction on top of Image,
+must be used.</p>
+<p>Image manipulation methods are very easy to use. For example:</p>
+<pre class="literal-block">
+Image image;
+image.read("myImage.tiff");
+image.addNoise(GaussianNoise);
+image.write("myImage.tiff");
+</pre>
+<p>adds gaussian noise to the image file "myImage.tiff".</p>
+<p>The following image manipulation methods are available:</p>
+<div class="contents local topic" id="id2">
+<ul class="simple">
+<li><a class="reference internal" href="#adaptivethreshold" id="id19">adaptiveThreshold</a></li>
+<li><a class="reference internal" href="#addnoise" id="id20">addNoise</a></li>
+<li><a class="reference internal" href="#addnoisechannel" id="id21">addNoiseChannel</a></li>
+<li><a class="reference internal" href="#affinetransform" id="id22">affineTransform</a></li>
+<li><a class="reference internal" href="#annotate" id="id23">annotate</a></li>
+<li><a class="reference internal" href="#autoorient" id="id24">autoOrient</a></li>
+<li><a class="reference internal" href="#blur" id="id25">blur</a></li>
+<li><a class="reference internal" href="#blurchannel" id="id26">blurChannel</a></li>
+<li><a class="reference internal" href="#border" id="id27">border</a></li>
+<li><a class="reference internal" href="#cdl" id="id28">cdl</a></li>
+<li><a class="reference internal" href="#channel" id="id29">channel</a></li>
+<li><a class="reference internal" href="#channeldepth" id="id30">channelDepth</a></li>
+<li><a class="reference internal" href="#charcoal" id="id31">charcoal</a></li>
+<li><a class="reference internal" href="#chop" id="id32">chop</a></li>
+<li><a class="reference internal" href="#colorize" id="id33">colorize</a></li>
+<li><a class="reference internal" href="#colormatrix" id="id34">colorMatrix</a></li>
+<li><a class="reference internal" href="#comment" id="id35">comment</a></li>
+<li><a class="reference internal" href="#compare" id="id36">compare</a></li>
+<li><a class="reference internal" href="#composite" id="id37">composite</a></li>
+<li><a class="reference internal" href="#contrast" id="id38">contrast</a></li>
+<li><a class="reference internal" href="#convolve" id="id39">convolve</a></li>
+<li><a class="reference internal" href="#crop" id="id40">crop</a></li>
+<li><a class="reference internal" href="#cyclecolormap" id="id41">cycleColormap</a></li>
+<li><a class="reference internal" href="#despeckle" id="id42">despeckle</a></li>
+<li><a class="reference internal" href="#display" id="id43">display</a></li>
+<li><a class="reference internal" href="#draw" id="id44">draw</a></li>
+<li><a class="reference internal" href="#edge" id="id45">edge</a></li>
+<li><a class="reference internal" href="#emboss" id="id46">emboss</a></li>
+<li><a class="reference internal" href="#enhance" id="id47">enhance</a></li>
+<li><a class="reference internal" href="#equalize" id="id48">equalize</a></li>
+<li><a class="reference internal" href="#erase" id="id49">erase</a></li>
+<li><a class="reference internal" href="#extent" id="id50">extent</a></li>
+<li><a class="reference internal" href="#flip" id="id51">flip</a></li>
+<li><a class="reference internal" href="#floodfillcolor" id="id52">floodFillColor</a></li>
+<li><a class="reference internal" href="#floodfillopacity" id="id53">floodFillOpacity</a></li>
+<li><a class="reference internal" href="#floodfilltexture" id="id54">floodFillTexture</a></li>
+<li><a class="reference internal" href="#flop" id="id55">flop</a></li>
+<li><a class="reference internal" href="#frame" id="id56">frame</a></li>
+<li><a class="reference internal" href="#gamma" id="id57">gamma</a></li>
+<li><a class="reference internal" href="#gaussianblur" id="id58">gaussianBlur</a></li>
+<li><a class="reference internal" href="#gaussianblurchannel" id="id59">gaussianBlurChannel</a></li>
+<li><a class="reference internal" href="#implode" id="id60">implode</a></li>
+<li><a class="reference internal" href="#haldclut" id="id61">haldClut</a></li>
+<li><a class="reference internal" href="#label" id="id62">label</a></li>
+<li><a class="reference internal" href="#level" id="id63">level</a></li>
+<li><a class="reference internal" href="#levelchannel" id="id64">levelChannel</a></li>
+<li><a class="reference internal" href="#magnify" id="id65">magnify</a></li>
+<li><a class="reference internal" href="#map" id="id66">map</a></li>
+<li><a class="reference internal" href="#mattefloodfill" id="id67">matteFloodfill</a></li>
+<li><a class="reference internal" href="#medianfilter" id="id68">medianFilter</a></li>
+<li><a class="reference internal" href="#minify" id="id69">minify</a></li>
+<li><a class="reference internal" href="#modifyimage" id="id70">modifyImage</a></li>
+<li><a class="reference internal" href="#modulate" id="id71">modulate</a></li>
+<li><a class="reference internal" href="#motionblur" id="id72">motionBlur</a></li>
+<li><a class="reference internal" href="#negate" id="id73">negate</a></li>
+<li><a class="reference internal" href="#normalize" id="id74">normalize</a></li>
+<li><a class="reference internal" href="#oilpaint" id="id75">oilPaint</a></li>
+<li><a class="reference internal" href="#opacity" id="id76">opacity</a></li>
+<li><a class="reference internal" href="#opaque" id="id77">opaque</a></li>
+<li><a class="reference internal" href="#quantize" id="id78">quantize</a></li>
+<li><a class="reference internal" href="#quantumoperator" id="id79">quantumOperator</a></li>
+<li><a class="reference internal" href="#process" id="id80">process</a></li>
+<li><a class="reference internal" href="#raise" id="id81">raise</a></li>
+<li><a class="reference internal" href="#randomthreshold" id="id82">randomThreshold</a></li>
+<li><a class="reference internal" href="#randomthresholdchannel" id="id83">randomThresholdChannel</a></li>
+<li><a class="reference internal" href="#reducenoise" id="id84">reduceNoise</a></li>
+<li><a class="reference internal" href="#resize" id="id85">resize</a></li>
+<li><a class="reference internal" href="#roll" id="id86">roll</a></li>
+<li><a class="reference internal" href="#rotate" id="id87">rotate</a></li>
+<li><a class="reference internal" href="#sample" id="id88">sample</a></li>
+<li><a class="reference internal" href="#scale" id="id89">scale</a></li>
+<li><a class="reference internal" href="#thumbnail" id="id90">thumbnail</a></li>
+<li><a class="reference internal" href="#segment" id="id91">segment</a></li>
+<li><a class="reference internal" href="#shade" id="id92">shade</a></li>
+<li><a class="reference internal" href="#sharpen" id="id93">sharpen</a></li>
+<li><a class="reference internal" href="#sharpenchannel" id="id94">sharpenChannel</a></li>
+<li><a class="reference internal" href="#shave" id="id95">shave</a></li>
+<li><a class="reference internal" href="#shear" id="id96">shear</a></li>
+<li><a class="reference internal" href="#solarize" id="id97">solarize</a></li>
+<li><a class="reference internal" href="#spread" id="id98">spread</a></li>
+<li><a class="reference internal" href="#stegano" id="id99">stegano</a></li>
+<li><a class="reference internal" href="#stereo" id="id100">stereo</a></li>
+<li><a class="reference internal" href="#strip" id="id101">strip</a></li>
+<li><a class="reference internal" href="#swirl" id="id102">swirl</a></li>
+<li><a class="reference internal" href="#texture" id="id103">texture</a></li>
+<li><a class="reference internal" href="#threshold" id="id104">threshold</a></li>
+<li><a class="reference internal" href="#transform" id="id105">transform</a></li>
+<li><a class="reference internal" href="#transparent" id="id106">transparent</a></li>
+<li><a class="reference internal" href="#trim" id="id107">trim</a></li>
+<li><a class="reference internal" href="#type" id="id108">type</a></li>
+<li><a class="reference internal" href="#unsharpmask" id="id109">unsharpmask</a></li>
+<li><a class="reference internal" href="#unsharpmaskchannel" id="id110">unsharpmaskChannel</a></li>
+<li><a class="reference internal" href="#wave" id="id111">wave</a></li>
+<li><a class="reference internal" href="#zoom" id="id112">zoom</a></li>
+</ul>
+</div>
+<div class="section" id="adaptivethreshold">
+<h2><a class="toc-backref" href="#id19">adaptiveThreshold</a></h2>
+<p>Apply adaptive thresholding to the image (see
+<a class="reference external" href="http://homepages.inf.ed.ac.uk/rbf/HIPR2/adpthrsh.htm">http://homepages.inf.ed.ac.uk/rbf/HIPR2/adpthrsh.htm</a>). Adaptive
+thresholding is useful if the ideal threshold level is not known in
+advance, or if the illumination gradient is not constant across the
+image. Adaptive thresholding works by evaulating the mean (average) of
+a pixel region (size specified by width and height) and using the mean
+as the thresholding value. In order to remove residual noise from the
+background, the threshold may be adjusted by subtracting a constant
+offset (default zero) from the mean to compute the threshold:</p>
+<pre class="literal-block">
+void adaptiveThreshold ( const unsigned int width,
+ const unsigned int height,
+ const double offset = 0.0 )
+</pre>
+</div>
+<div class="section" id="addnoise">
+<h2><a class="toc-backref" href="#id20">addNoise</a></h2>
+<p>Add noise to image with the specified noise type:</p>
+<pre class="literal-block">
+void addNoise ( const NoiseType noiseType_ )
+</pre>
+</div>
+<div class="section" id="addnoisechannel">
+<h2><a class="toc-backref" href="#id21">addNoiseChannel</a></h2>
+<p>Add noise to an image channel with the specified noise type. The
+<cite>channel</cite> parameter specifies the channel to add noise to. The
+<cite>noiseType</cite> parameter specifies the type of noise:</p>
+<pre class="literal-block">
+void addNoiseChannel ( const ChannelType channel_,
+ const NoiseType noiseType_)
+</pre>
+</div>
+<div class="section" id="affinetransform">
+<h2><a class="toc-backref" href="#id22">affineTransform</a></h2>
+<p>Transform image by specified affine (or free transform) matrix:</p>
+<pre class="literal-block">
+void affineTransform ( const DrawableAffine &affine )
+</pre>
+</div>
+<div class="section" id="annotate">
+<h2><a class="toc-backref" href="#id23">annotate</a></h2>
+<p>Annotate image (draw text on image)</p>
+<p>Gravity effects text placement in bounding area according to these
+rules:</p>
+<dl class="docutils">
+<dt>NorthWestGravity</dt>
+<dd>text bottom-left corner placed at top-left</dd>
+<dt>NorthGravity</dt>
+<dd>text bottom-center placed at top-center</dd>
+<dt>NorthEastGravity</dt>
+<dd>text bottom-right corner placed at top-right</dd>
+<dt>WestGravity</dt>
+<dd>text left-center placed at left-center</dd>
+<dt>CenterGravity</dt>
+<dd>text center placed at center</dd>
+<dt>EastGravity</dt>
+<dd>text right-center placed at right-center</dd>
+<dt>SouthWestGravity</dt>
+<dd>text top-left placed at bottom-left</dd>
+<dt>SouthGravity</dt>
+<dd>text top-center placed at bottom-center</dd>
+<dt>SouthEastGravity</dt>
+<dd>text top-right placed at bottom-right</dd>
+</dl>
+<p>Annotate using specified text, and placement location:</p>
+<pre class="literal-block">
+void annotate ( const std::string &text_,
+ const Geometry &location_ )
+</pre>
+<p>Annotate using specified text, bounding area, and placement gravity:</p>
+<pre class="literal-block">
+void annotate ( const std::string &text_,
+ const Geometry &boundingArea_,
+ const GravityType gravity_ )
+</pre>
+<p>Annotate with text using specified text, bounding area, placement
+gravity, and rotation:</p>
+<pre class="literal-block">
+void annotate ( const std::string &text_,
+ const Geometry &boundingArea_,
+ const GravityType gravity_,
+ const double degrees_ )
+</pre>
+<p>Annotate with text (bounding area is entire image) and placement
+gravity:</p>
+<pre class="literal-block">
+void annotate ( const std::string &text_,
+ const GravityType gravity_ )
+</pre>
+</div>
+<div class="section" id="autoorient">
+<h2><a class="toc-backref" href="#id24">autoOrient</a></h2>
+<p>Automatically orient image to be right-side up based on its current
+orientation attribute. This allows the image to be viewed correctly
+when the orientation attribute is not available, or is not respected:</p>
+<pre class="literal-block">
+void autoOrient( void )
+</pre>
+</div>
+<div class="section" id="blur">
+<h2><a class="toc-backref" href="#id25">blur</a></h2>
+<p>Blur an image with the specified blur factor.</p>
+<p>The <cite>radius</cite> parameter specifies the radius of the Gaussian, in
+pixels, not counting the center pixel. The <cite>sigma</cite> parameter
+specifies the standard deviation of the Laplacian, in pixels:</p>
+<pre class="literal-block">
+void blur ( const double radius_ = 0.0,
+ const double sigma_ = 1.0 )
+</pre>
+</div>
+<div class="section" id="blurchannel">
+<h2><a class="toc-backref" href="#id26">blurChannel</a></h2>
+<p>Blur an image channel with the specified blur factor.</p>
+<p>The <cite>channel</cite> parameter specifies the channel to modify. The <cite>radius</cite>
+parameter specifies the radius of the Gaussian, in pixels, not
+counting the center pixel. The <cite>sigma</cite> parameter specifies the
+standard deviation of the Laplacian, in pixels:</p>
+<pre class="literal-block">
+void blurChannel ( const ChannelType channel_,
+ const double radius_ = 0.0,
+ const double sigma_ = 1.0 )
+</pre>
+</div>
+<div class="section" id="border">
+<h2><a class="toc-backref" href="#id27">border</a></h2>
+<p>Border image (add border to image). The <a class="reference external" href="Color.html">color</a> of the border is
+specified by the borderColor attribute:</p>
+<pre class="literal-block">
+void border ( const Geometry &geometry_
+ = borderGeometryDefault )
+</pre>
+</div>
+<div class="section" id="cdl">
+<h2><a class="toc-backref" href="#id28">cdl</a></h2>
+<p>Bake in the ASC-CDL, which is a convention for the for the exchange of
+basic primary color grading information between for the exchange of
+basic primary color grading information between equipment and software
+from different manufacturers. It is a useful transform for other
+purposes as well:</p>
+<blockquote>
+void cdl ( const std::string &cdl_ )</blockquote>
+<p>See <a class="reference external" href="../api/cdl.html#cdlimage">CdlImage</a> for more details on the ASC-CDL.</p>
+</div>
+<div class="section" id="channel">
+<h2><a class="toc-backref" href="#id29">channel</a></h2>
+<p>Extract channel from image. Use this option to extract a particular
+channel from the image. MatteChannel for example, is useful for
+extracting the opacity values from an image:</p>
+<pre class="literal-block">
+void channel ( const ChannelType channel_ )
+</pre>
+</div>
+<div class="section" id="channeldepth">
+<h2><a class="toc-backref" href="#id30">channelDepth</a></h2>
+<p>Set or obtain modulus channel depth:</p>
+<pre class="literal-block">
+void channelDepth ( const ChannelType channel_,
+ const unsigned int depth_ )
+
+unsigned int channelDepth ( const ChannelType channel_ )
+</pre>
+</div>
+<div class="section" id="charcoal">
+<h2><a class="toc-backref" href="#id31">charcoal</a></h2>
+<p>Charcoal effect image (looks like charcoal sketch).</p>
+<p>The <cite>radius</cite> parameter specifies the radius of the Gaussian, in
+pixels, not counting the center pixel. The <cite>sigma</cite> parameter
+specifies the standard deviation of the Laplacian, in pixels:</p>
+<pre class="literal-block">
+void charcoal ( const double radius_ = 0.0,
+ const double sigma_ = 1.0 )
+</pre>
+</div>
+<div class="section" id="chop">
+<h2><a class="toc-backref" href="#id32">chop</a></h2>
+<p>Chop image (remove vertical or horizontal subregion of image):</p>
+<pre class="literal-block">
+void chop ( const Geometry &geometry_ )
+</pre>
+</div>
+<div class="section" id="colorize">
+<h2><a class="toc-backref" href="#id33">colorize</a></h2>
+<p>Colorize image with pen <a class="reference external" href="Color.html">color</a>, using specified percent opacity for
+red, green, and blue quantums:</p>
+<pre class="literal-block">
+void colorize ( const unsigned int opacityRed_,
+ const unsigned int opacityGreen_,
+ const unsigned int opacityBlue_,
+ const Color &penColor_ )
+</pre>
+<p>Colorize image with pen <a class="reference external" href="Color.html">color</a>, using specified percent opacity:</p>
+<pre class="literal-block">
+void colorize ( const unsigned int opacity_,
+ const Color &penColor_ )
+</pre>
+</div>
+<div class="section" id="colormatrix">
+<h2><a class="toc-backref" href="#id34">colorMatrix</a></h2>
+<p>Apply a color matrix to the image channels. The user supplied matrix
+may be of order 1 to 5 (1x1 through 5x5):</p>
+<pre class="literal-block">
+void colorMatrix (const unsigned int order_,
+ const double *color_matrix_)
+</pre>
+<p>See <a class="reference external" href="../api/fx.html#colormatriximage">ColorMatrixImage</a> for more details.</p>
+</div>
+<div class="section" id="comment">
+<h2><a class="toc-backref" href="#id35">comment</a></h2>
+<p>Comment image (add comment string to image). By default, each image is
+commented with its file name. Use this method to assign a specific
+comment to the image. Optionally you can include the image filename,
+type, width, height, or other image attributes by embedding <a class="reference external" href="FormatCharacters.html">special
+format characters</a>:</p>
+<pre class="literal-block">
+void comment ( const std::string &comment_ )
+</pre>
+</div>
+<div class="section" id="compare">
+<h2><a class="toc-backref" href="#id36">compare</a></h2>
+<p>Compare current image with another image. Sets meanErrorPerPixel,
+normalizedMaxError, and normalizedMeanError in the current
+image. False is returned if the images are identical. An ErrorOption
+exception is thrown if the reference image columns, rows, colorspace,
+or matte differ from the current image:</p>
+<pre class="literal-block">
+bool compare ( const Image &reference_ )
+</pre>
+</div>
+<div class="section" id="composite">
+<h2><a class="toc-backref" href="#id37">composite</a></h2>
+<p>Compose an image onto another at specified x and y offset and using a
+specified algorithm:</p>
+<pre class="literal-block">
+void composite ( const Image &compositeImage_,
+ const int xOffset_,
+ const int yOffset_,
+ const CompositeOperator compose_
+ = InCompositeOp )
+
+void composite ( const Image &compositeImage_,
+ const Geometry &offset_,
+ const CompositeOperator compose_
+ = InCompositeOp )
+
+void composite ( const Image &compositeImage_,
+ const GravityType gravity_,
+ const CompositeOperator compose_
+ = InCompositeOp )
+</pre>
+</div>
+<div class="section" id="contrast">
+<h2><a class="toc-backref" href="#id38">contrast</a></h2>
+<p>Contrast image (enhance intensity differences in image):</p>
+<pre class="literal-block">
+void contrast ( const unsigned int sharpen_ )
+</pre>
+</div>
+<div class="section" id="convolve">
+<h2><a class="toc-backref" href="#id39">convolve</a></h2>
+<p>Convolve image. Applies a user-specified convolution to the image.
+The <cite>order</cite> parameter represents the number of columns and rows in the
+filter kernel while <cite>kernel</cite> is a two-dimensional array of doubles
+representing the convolution kernel to apply:</p>
+<pre class="literal-block">
+void convolve ( const unsigned int order_,
+ const double *kernel_ )
+</pre>
+</div>
+<div class="section" id="crop">
+<h2><a class="toc-backref" href="#id40">crop</a></h2>
+<p>Crop image (return subregion of original image):</p>
+<pre class="literal-block">
+void crop ( const Geometry &geometry_ )
+</pre>
+</div>
+<div class="section" id="cyclecolormap">
+<h2><a class="toc-backref" href="#id41">cycleColormap</a></h2>
+<p>Cycle (rotate) image colormap:</p>
+<pre class="literal-block">
+void cycleColormap ( const int amount_ )
+</pre>
+</div>
+<div class="section" id="despeckle">
+<h2><a class="toc-backref" href="#id42">despeckle</a></h2>
+<p>Despeckle image (reduce speckle noise):</p>
+<pre class="literal-block">
+void despeckle ( void )
+</pre>
+</div>
+<div class="section" id="display">
+<h2><a class="toc-backref" href="#id43">display</a></h2>
+<p>Display image on screen. Caution: if an image format is is not
+compatible with the display visual (e.g. JPEG on a colormapped
+display) then the original image will be altered. Use a copy of the
+original if this is a problem:</p>
+<blockquote>
+void display ( void )</blockquote>
+</div>
+<div class="section" id="draw">
+<h2><a class="toc-backref" href="#id44">draw</a></h2>
+<p>Draw shape or text on image using a single <a class="reference external" href="Drawable.html">drawable</a> object:</p>
+<pre class="literal-block">
+void draw ( const Drawable &drawable_ );
+</pre>
+<p>Draw shapes or text on image using a set of <a class="reference external" href="Drawable.html">Drawable</a> objects
+contained in an <a class="reference external" href="STL.html">STL</a> list. Use of this method improves drawing
+performance and allows batching draw objects together in a list for
+repeated use:</p>
+<pre class="literal-block">
+void draw ( const std::list<Magick::Drawable> &drawable_ );
+</pre>
+</div>
+<div class="section" id="edge">
+<h2><a class="toc-backref" href="#id45">edge</a></h2>
+<p>Edge image (hilight edges in image). The radius is the radius of the
+pixel neighborhood.. Specify a radius of zero for automatic radius
+selection:</p>
+<pre class="literal-block">
+void edge ( const double radius_ = 0.0 )
+</pre>
+</div>
+<div class="section" id="emboss">
+<h2><a class="toc-backref" href="#id46">emboss</a></h2>
+<p>Emboss image (hilight edges with 3D effect). The <cite>radius</cite> parameter
+specifies the radius of the Gaussian, in pixels, not counting the
+center pixel. The <cite>sigma</cite> parameter specifies the standard deviation
+of the Laplacian, in pixels:</p>
+<pre class="literal-block">
+void emboss ( const double radius_ = 0.0,
+ const double sigma_ = 1.0)
+</pre>
+</div>
+<div class="section" id="enhance">
+<h2><a class="toc-backref" href="#id47">enhance</a></h2>
+<p>Enhance image (minimize noise):</p>
+<pre class="literal-block">
+void enhance ( void );
+</pre>
+</div>
+<div class="section" id="equalize">
+<h2><a class="toc-backref" href="#id48">equalize</a></h2>
+<p>Equalize image (histogram equalization):</p>
+<pre class="literal-block">
+void equalize ( void )
+</pre>
+</div>
+<div class="section" id="erase">
+<h2><a class="toc-backref" href="#id49">erase</a></h2>
+<p>Set all image pixels to the current background color:</p>
+<pre class="literal-block">
+void erase ( void )
+</pre>
+</div>
+<div class="section" id="extent">
+<h2><a class="toc-backref" href="#id50">extent</a></h2>
+<p>Create an image canvas using background color sized according to
+geometry and composite existing image on it, with image placement
+controlled by gravity. Parameters are obtained from existing image
+properties if they are not specified via a method
+parameter. Parameters which are supported by image properties (gravity
+and backgroundColor) update those image properties as a side-effect:</p>
+<pre class="literal-block">
+void extent ( const Geometry &geometry_ )
+
+void extent ( const Geometry &geometry_,
+ const GravityType &gravity_ )
+
+void extent ( const Geometry &geometry_,
+ const Color &backgroundColor_ )
+
+void extent ( const Geometry &geometry_,
+ const Color &backgroundColor_,
+ const GravityType &gravity_ );
+</pre>
+</div>
+<div class="section" id="flip">
+<h2><a class="toc-backref" href="#id51">flip</a></h2>
+<p>Flip image (reflect each scanline in the vertical direction):</p>
+<pre class="literal-block">
+void flip ( void )
+</pre>
+</div>
+<div class="section" id="floodfillcolor">
+<h2><a class="toc-backref" href="#id52">floodFillColor</a></h2>
+<p>Flood-fill <a class="reference external" href="Color.html">color</a> across pixels that match the <a class="reference external" href="Color.html">color</a> of the target
+pixel and are neighbors of the target pixel. Uses current fuzz
+setting when determining <a class="reference external" href="Color.html">color</a> match:</p>
+<pre class="literal-block">
+void floodFillColor( const unsigned int x_,
+ const unsigned int y_,
+ const Color &fillColor_ )
+
+void floodFillColor( const Geometry &point_,
+ const Color &fillColor_ )
+</pre>
+<p>Flood-fill <a class="reference external" href="Color.html">color</a> across pixels starting at target-pixel and stopping
+at pixels matching specified border <a class="reference external" href="Color.html">color</a>. Uses current fuzz setting
+when determining <a class="reference external" href="Color.html">color</a> match:</p>
+<pre class="literal-block">
+void floodFillColor( const unsigned int x_,
+ const unsigned int y_,
+ const Color &fillColor_,
+ const Color &borderColor_ )
+
+void floodFillColor( const Geometry &point_,
+ const Color &fillColor_,
+ const Color &borderColor_ )
+</pre>
+</div>
+<div class="section" id="floodfillopacity">
+<h2><a class="toc-backref" href="#id53">floodFillOpacity</a></h2>
+<p>Flood-fill pixels matching <a class="reference external" href="Color.html">color</a> (within fuzz factor) of target
+pixel(x,y) with replacement opacity value using method:</p>
+<pre class="literal-block">
+void floodFillOpacity ( const unsigned int x_,
+ const unsigned int y_,
+ const unsigned int opacity_,
+ const PaintMethod method_ )
+</pre>
+</div>
+<div class="section" id="floodfilltexture">
+<h2><a class="toc-backref" href="#id54">floodFillTexture</a></h2>
+<p>Flood-fill texture across pixels that match the <a class="reference external" href="Color.html">color</a> of the
+target pixel and are neighbors of the target pixel.
+Uses current fuzz setting when determining <a class="reference external" href="Color.html">color</a> match:</p>
+<pre class="literal-block">
+void floodFillTexture( const unsigned int x_,
+ const unsigned int y_,
+ const Image &texture_ )
+
+void floodFillTexture( const Geometry &point_,
+ const Image &texture_ )
+</pre>
+<p>Flood-fill texture across pixels starting at target-pixel and
+stopping at pixels matching specified border <a class="reference external" href="Color.html">color</a>.
+Uses current fuzz setting when determining <a class="reference external" href="Color.html">color</a> match:</p>
+<pre class="literal-block">
+void floodFillTexture( const unsigned int x_,
+ const unsigned int y_,
+ const Image &texture_,
+ const Color &borderColor_ )
+
+void floodFillTexture( const Geometry &point_,
+ const Image &texture_,
+ const Color &borderColor_ )
+</pre>
+</div>
+<div class="section" id="flop">
+<h2><a class="toc-backref" href="#id55">flop</a></h2>
+<p>Flop image (reflect each scanline in the horizontal direction):</p>
+<pre class="literal-block">
+void flop ( void );
+</pre>
+</div>
+<div class="section" id="frame">
+<h2><a class="toc-backref" href="#id56">frame</a></h2>
+<p>Draw a decorative frame around the image:</p>
+<pre class="literal-block">
+void frame ( const Geometry &geometry_ = frameGeometryDefault )
+
+void frame ( const unsigned int width_,
+ const unsigned int height_,
+ const int innerBevel_ = 6,
+ const int outerBevel_ = 6 )
+</pre>
+</div>
+<div class="section" id="gamma">
+<h2><a class="toc-backref" href="#id57">gamma</a></h2>
+<p>Gamma correct the image or individual image channels:</p>
+<pre class="literal-block">
+void gamma ( const double gamma_ )
+
+void gamma ( const double gammaRed_,
+ const double gammaGreen_,
+ const double gammaBlue_ )
+</pre>
+</div>
+<div class="section" id="gaussianblur">
+<h2><a class="toc-backref" href="#id58">gaussianBlur</a></h2>
+<p>Gaussian blur image. The number of neighbor pixels to be included in
+the convolution mask is specified by <cite>width</cite>. The standard deviation
+of the gaussian bell curve is specified by <cite>sigma</cite>:</p>
+<pre class="literal-block">
+void gaussianBlur ( const double width_, const double sigma_ )
+</pre>
+</div>
+<div class="section" id="gaussianblurchannel">
+<h2><a class="toc-backref" href="#id59">gaussianBlurChannel</a></h2>
+<p>Gaussian blur image channel. The number of neighbor pixels to be
+included in the convolution mask is specified by <cite>width</cite>. The
+standard deviation of the gaussian bell curve is specified by
+<cite>sigma</cite>:</p>
+<pre class="literal-block">
+void gaussianBlurChannel ( const ChannelType channel_,
+ const double width_,
+ const double sigma_ )
+</pre>
+</div>
+<div class="section" id="implode">
+<h2><a class="toc-backref" href="#id60">implode</a></h2>
+<p>Implode image (special effect):</p>
+<pre class="literal-block">
+void implode ( const double factor_ )
+</pre>
+</div>
+<div class="section" id="haldclut">
+<h2><a class="toc-backref" href="#id61">haldClut</a></h2>
+<p>Apply a color lookup table (Hald CLUT) to the image:</p>
+<pre class="literal-block">
+void haldClut ( const Image &clutImage_ )
+</pre>
+<p>See <a class="reference external" href="../api/hclut.html#haldclutimage">HaldClutImage</a> for more details.</p>
+</div>
+<div class="section" id="label">
+<h2><a class="toc-backref" href="#id62">label</a></h2>
+<p>Assign a label to an image. Use this option to assign a specific label
+to the image. Optionally you can include the image filename, type,
+width, height, or scene number in the label by embedding <a class="reference external" href="FormatCharacters.html">special
+format characters</a>. If the first character of string is @, the image
+label is read from a file titled by the remaining characters in the
+string. When converting to Postscript, use this option to specify a
+header string to print above the image:</p>
+<pre class="literal-block">
+void label ( const std::string &label_ )
+</pre>
+</div>
+<div class="section" id="level">
+<h2><a class="toc-backref" href="#id63">level</a></h2>
+<p>Level image to increase image contrast, and/or adjust image
+gamma. Adjust the levels of the image by scaling the colors falling
+between specified white and black points to the full available quantum
+range. The parameters provided represent the black, mid (gamma), and
+white points. The black point specifies the darkest color in the
+image. Colors darker than the black point are set to zero. Mid point
+(gamma) specifies a gamma correction to apply to the image. White
+point specifies the lightest color in the image. Colors brighter than
+the white point are set to the maximum quantum value. The black and
+white point have the valid range 0 to MaxRGB while mid (gamma) has a
+useful range of 0 to ten:</p>
+<pre class="literal-block">
+void level ( const double black_point,
+ const double white_point,
+ const double mid_point=1.0 )
+</pre>
+</div>
+<div class="section" id="levelchannel">
+<h2><a class="toc-backref" href="#id64">levelChannel</a></h2>
+<p>Level image channel to increase image contrast, and/or adjust image
+gamma. Adjust the levels of the image channel by scaling the colors
+falling between specified white and black points to the full available
+quantum range. The parameters provided represent the black, mid
+(gamma), and white points. The black point specifies the darkest
+color in the image. Colors darker than the black point are set to
+zero. Mid point (gamma) specifies a gamma correction to apply to the
+image. White point specifies the lightest color in the image. Colors
+brighter than the white point are set to the maximum quantum
+value. The black and white point have the valid range 0 to MaxRGB
+while mid (gamma) has a useful range of 0 to ten:</p>
+<pre class="literal-block">
+void levelChannel ( const ChannelType channel,
+ const double black_point,
+ const double white_point,
+ const double mid_point=1.0 )
+</pre>
+</div>
+<div class="section" id="magnify">
+<h2><a class="toc-backref" href="#id65">magnify</a></h2>
+<p>Magnify image by integral size (double the dimensions):</p>
+<pre class="literal-block">
+void magnify ( void )
+</pre>
+</div>
+<div class="section" id="map">
+<h2><a class="toc-backref" href="#id66">map</a></h2>
+<p>Remap image colors with closest color from a reference image. Set
+<cite>dither</cite> to true in to apply Floyd/Steinberg error diffusion to the
+image. By default, color reduction chooses an optimal set of colors
+that best represent the original image. Alternatively, you can choose
+a particular set of colors from an image file with this option:</p>
+<pre class="literal-block">
+void map ( const Image &mapImage_ ,
+ const bool dither_ = false )
+</pre>
+</div>
+<div class="section" id="mattefloodfill">
+<h2><a class="toc-backref" href="#id67">matteFloodfill</a></h2>
+<p>Floodfill designated area with a replacement opacity value:</p>
+<pre class="literal-block">
+void matteFloodfill ( const Color &target_ ,
+ const unsigned int opacity_,
+ const int x_, const int y_,
+ const PaintMethod method_ )
+</pre>
+</div>
+<div class="section" id="medianfilter">
+<h2><a class="toc-backref" href="#id68">medianFilter</a></h2>
+<p>Filter image by replacing each pixel component with the median color
+in a circular neighborhood:</p>
+<pre class="literal-block">
+void medianFilter ( const double radius_ = 0.0 )
+</pre>
+</div>
+<div class="section" id="minify">
+<h2><a class="toc-backref" href="#id69">minify</a></h2>
+<p>Reduce image by integral (half) size:</p>
+<pre class="literal-block">
+void minify ( void )
+</pre>
+</div>
+<div class="section" id="modifyimage">
+<h2><a class="toc-backref" href="#id70">modifyImage</a></h2>
+<p>Prepare to update image (copy if reference > 1). Normally Magick++'s
+implicit reference counting takes care of all instance management. In
+the rare case that the automatic instance management does not work,
+use this method to assure that there is only one reference to the
+image to be modified. It should be used in the cases where a
+GraphicsMagick C function is used directly on an image which may have
+multiple references:</p>
+<pre class="literal-block">
+void modifyImage ( void )
+</pre>
+</div>
+<div class="section" id="modulate">
+<h2><a class="toc-backref" href="#id71">modulate</a></h2>
+<p>Modulate percent hue, saturation, and brightness of an image.
+Modulation of saturation and brightness is as a ratio of the current
+value (1.0 for no change). Modulation of hue is an absolute rotation
+of -180 degrees to +180 degrees from the current position
+corresponding to an argument range of 0 to 2.0 (1.0 for no change):</p>
+<pre class="literal-block">
+void modulate ( const double brightness_,
+ const double saturation_,
+ const double hue_ )
+</pre>
+</div>
+<div class="section" id="motionblur">
+<h2><a class="toc-backref" href="#id72">motionBlur</a></h2>
+<p>Motion blur image with specified blur factor. The <cite>radius</cite> parameter
+specifies the radius of the Gaussian, in pixels, not counting the
+center pixel. The <cite>sigma</cite> parameter specifies the standard
+deviation of the Laplacian, in pixels. The <cite>angle</cite> parameter
+specifies the angle the object appears to be comming from (zero
+degrees is from the right):</p>
+<pre class="literal-block">
+void motionBlur ( const double radius_,
+ const double sigma_,
+ const double angle_ )
+</pre>
+</div>
+<div class="section" id="negate">
+<h2><a class="toc-backref" href="#id73">negate</a></h2>
+<p>Negate colors in image. Set <cite>grayscale</cite> to only negate grayscale
+values in image:</p>
+<pre class="literal-block">
+void negate ( const bool grayscale_ = false )
+</pre>
+</div>
+<div class="section" id="normalize">
+<h2><a class="toc-backref" href="#id74">normalize</a></h2>
+<p>Normalize image (increase contrast by normalizing the pixel values to
+span the full range of color values):</p>
+<pre class="literal-block">
+void normalize ( void )
+</pre>
+</div>
+<div class="section" id="oilpaint">
+<h2><a class="toc-backref" href="#id75">oilPaint</a></h2>
+<p>Oilpaint image (image looks like an oil painting):</p>
+<pre class="literal-block">
+void oilPaint ( const double radius_ = 3.0 )
+</pre>
+</div>
+<div class="section" id="opacity">
+<h2><a class="toc-backref" href="#id76">opacity</a></h2>
+<p>Set or attenuate the opacity channel in the image. If the image pixels
+are opaque then they are set to the specified opacity value, otherwise
+they are blended with the supplied opacity value. The value of
+<cite>opacity</cite> ranges from 0 (completely opaque) to MaxRGB. The defines
+<cite>OpaqueOpacity</cite> and <cite>TransparentOpacity</cite> are available to specify
+completely opaque or completely transparent, respectively:</p>
+<pre class="literal-block">
+void opacity ( const unsigned int opacity_ )
+</pre>
+</div>
+<div class="section" id="opaque">
+<h2><a class="toc-backref" href="#id77">opaque</a></h2>
+<p>Change <a class="reference external" href="Color.html">color</a> of specified opaque pixel to specified pen <a class="reference external" href="Color.html">color</a>:</p>
+<pre class="literal-block">
+void opaque ( const Color &opaqueColor_,
+ const Color &penColor_ )
+</pre>
+</div>
+<div class="section" id="quantize">
+<h2><a class="toc-backref" href="#id78">quantize</a></h2>
+<p>Quantize image (reduce number of colors). Set <cite>measureError</cite> to true
+in order to calculate error attributes:</p>
+<pre class="literal-block">
+void quantize ( const bool measureError_ = false )
+</pre>
+</div>
+<div class="section" id="quantumoperator">
+<h2><a class="toc-backref" href="#id79">quantumOperator</a></h2>
+<p>Apply an arithmetic or bitwise operator to the image pixel quantums:</p>
+<pre class="literal-block">
+void quantumOperator ( const ChannelType channel_,
+ const QuantumOperator operator_,
+ double rvalue_)
+
+void quantumOperator ( const int x_,const int y_,
+ const unsigned int columns_,
+ const unsigned int rows_,
+ const ChannelType channel_,
+ const QuantumOperator operator_,
+ const double rvalue_)
+</pre>
+</div>
+<div class="section" id="process">
+<h2><a class="toc-backref" href="#id80">process</a></h2>
+<p>Execute a named process module using an argc/argv syntax similar to
+that accepted by a C 'main' routine. An exception is thrown if the
+requested process module doesn't exist, fails to load, or fails during
+execution:</p>
+<pre class="literal-block">
+void process ( std::string name_,
+ const int argc_,
+ char **argv_ )
+</pre>
+</div>
+<div class="section" id="raise">
+<h2><a class="toc-backref" href="#id81">raise</a></h2>
+<p>Raise image (lighten or darken the edges of an image to give a 3-D
+raised or lowered effect):</p>
+<pre class="literal-block">
+void raise ( const Geometry &geometry_ = "6x6+0+0",
+ const bool raisedFlag_ = false )
+</pre>
+</div>
+<div class="section" id="randomthreshold">
+<h2><a class="toc-backref" href="#id82">randomThreshold</a></h2>
+<p>Random threshold image.</p>
+<p>Changes the value of individual pixels based on the intensity
+of each pixel compared to a random threshold. The result is a
+low-contrast, two color image. The <cite>thresholds</cite> argument is a
+geometry containing LOWxHIGH thresholds. If the string
+contains 2x2, 3x3, or 4x4, then an ordered dither of order 2,
+3, or 4 will be performed instead. If a <cite>channel</cite> argument is
+specified then only the specified channel is altered. This is
+a very fast alternative to 'quantize' based dithering:</p>
+<pre class="literal-block">
+void randomThreshold( const Geometry &thresholds_ )
+</pre>
+</div>
+<div class="section" id="randomthresholdchannel">
+<h2><a class="toc-backref" href="#id83">randomThresholdChannel</a></h2>
+<p>Random threshold image channel.</p>
+<p>Changes the value of individual pixels based on the intensity of each
+pixel compared to a random threshold. The result is a low-contrast,
+two color image. The <cite>thresholds</cite> argument is a geometry containing
+LOWxHIGH thresholds. If the string contains 2x2, 3x3, or 4x4, then an
+ordered dither of order 2, 3, or 4 will be performed instead. If a
+<cite>channel</cite> argument is specified then only the specified channel is
+altered. This is a very fast alternative to 'quantize' based
+dithering:</p>
+<pre class="literal-block">
+void randomThresholdChannel( const Geometry &thresholds_,
+ const ChannelType channel_ )
+</pre>
+</div>
+<div class="section" id="reducenoise">
+<h2><a class="toc-backref" href="#id84">reduceNoise</a></h2>
+<p>Reduce noise in image using a noise peak elimination filter:</p>
+<pre class="literal-block">
+void reduceNoise ( void )
+
+void reduceNoise ( const double order_ )
+</pre>
+</div>
+<div class="section" id="resize">
+<h2><a class="toc-backref" href="#id85">resize</a></h2>
+<p>Resize image, specifying geometry, filter, and blur (blur > 1.0 is
+more blurry and < 1.0 is sharper):</p>
+<pre class="literal-block">
+void resize ( const Geometry &geometry_,
+ const FilterTypes filterType_,
+ const double blur_ )
+</pre>
+<p>Resize image, specifying geometry and filter, with blur using Image
+default:</p>
+<pre class="literal-block">
+void resize ( const Geometry &geometry_,
+ const FilterTypes filterType_ )
+</pre>
+<p>Resize image, specifying only geometry, with filter and blur obtained
+from Image default. Provides the same result as the <cite>zoom</cite> method:</p>
+<pre class="literal-block">
+void resize ( const Geometry &geometry_ );
+</pre>
+</div>
+<div class="section" id="roll">
+<h2><a class="toc-backref" href="#id86">roll</a></h2>
+<p>Roll image (rolls image vertically and horizontally) by specified
+number of columnms and rows):</p>
+<pre class="literal-block">
+void roll ( const Geometry &roll_ )
+
+void roll ( const unsigned int columns_,
+ const unsigned int rows_ )
+</pre>
+</div>
+<div class="section" id="rotate">
+<h2><a class="toc-backref" href="#id87">rotate</a></h2>
+<p>Rotate image counter-clockwise by specified number of degrees:</p>
+<pre class="literal-block">
+void rotate ( const double degrees_ )
+</pre>
+</div>
+<div class="section" id="sample">
+<h2><a class="toc-backref" href="#id88">sample</a></h2>
+<p>Resize image by using pixel sampling algorithm:</p>
+<pre class="literal-block">
+void sample ( const Geometry &geometry_ )
+</pre>
+</div>
+<div class="section" id="scale">
+<h2><a class="toc-backref" href="#id89">scale</a></h2>
+<p>Resize image by using simple ratio algorithm which provides good
+quality:</p>
+<pre class="literal-block">
+void scale ( const Geometry &geometry_ )
+</pre>
+</div>
+<div class="section" id="thumbnail">
+<h2><a class="toc-backref" href="#id90">thumbnail</a></h2>
+<p>Resize image using several algorithms to make smaller images very
+quickly. This is very useful to create thumbnails from large images
+but usually works well for any image resizing purpose:</p>
+<pre class="literal-block">
+void thumbnail ( const Geometry &geometry_ );
+</pre>
+</div>
+<div class="section" id="segment">
+<h2><a class="toc-backref" href="#id91">segment</a></h2>
+<p>Segment (coalesce similar image components) by analyzing the
+histograms of the color components and identifying units that are
+homogeneous with the fuzzy c-means technique. A histogram is built
+for the image. This histogram is filtered to reduce noise and a
+second derivative of the histogram plot is built and used to identify
+potential cluster colors (peaks in the histogram). The cluster colors
+are then validated by scanning through all of the pixels to see how
+many pixels fall within each cluster. Some candidate cluster colors
+may not match any of the image pixels at all and should be discarded.
+Specify <cite>clusterThreshold</cite>, as the number of pixels matching a cluster
+color in order for the cluster to be considered
+valid. <cite>SmoothingThreshold</cite> eliminates noise in the second derivative
+of the histogram. As the value is increased, you can expect a smoother
+second derivative. The default is 1.5:</p>
+<pre class="literal-block">
+void segment ( const double clusterThreshold_ = 1.0,
+ const double smoothingThreshold_ = 1.5 )
+</pre>
+</div>
+<div class="section" id="shade">
+<h2><a class="toc-backref" href="#id92">shade</a></h2>
+<p>Shade image using distant light source. Specify <cite>azimuth</cite> and
+<cite>elevation</cite> as the position of the light source. By default, the
+shading results as a grayscale image.. Set <cite>colorShading</cite> to true to
+shade the red, green, and blue components of the image:</p>
+<pre class="literal-block">
+void shade ( const double azimuth_ = 30,
+ const double elevation_ = 30,
+ const bool colorShading_ = false )
+</pre>
+</div>
+<div class="section" id="sharpen">
+<h2><a class="toc-backref" href="#id93">sharpen</a></h2>
+<p>Sharpen pixels in image. The <cite>radius</cite> parameter specifies the radius
+of the Gaussian, in pixels, not counting the center pixel. The
+<cite>sigma</cite> parameter specifies the standard deviation of the Laplacian,
+in pixels:</p>
+<pre class="literal-block">
+void sharpen ( const double radius_ = 0.0,
+ const double sigma_ = 1.0 )
+</pre>
+</div>
+<div class="section" id="sharpenchannel">
+<h2><a class="toc-backref" href="#id94">sharpenChannel</a></h2>
+<p>Sharpen pixels in image channel. The <cite>radius</cite> parameter specifies the
+radius of the Gaussian, in pixels, not counting the center pixel. The
+<cite>sigma</cite> parameter specifies the standard deviation of the Laplacian,
+in pixels:</p>
+<pre class="literal-block">
+void sharpenChannel ( const ChannelType channel_,
+ const double radius_ = 0.0,
+ const double sigma_ = 1.0 )
+</pre>
+</div>
+<div class="section" id="shave">
+<h2><a class="toc-backref" href="#id95">shave</a></h2>
+<p>Shave pixels from image edges:</p>
+<pre class="literal-block">
+void shave ( const Geometry &geometry_ )
+</pre>
+</div>
+<div class="section" id="shear">
+<h2><a class="toc-backref" href="#id96">shear</a></h2>
+<p>Shear image (create parallelogram by sliding image by X or Y
+axis). Shearing slides one edge of an image along the X or Y axis,
+creating a parallelogram. An X direction shear slides an edge along
+the X axis, while a Y direction shear slides an edge along the Y axis.
+The amount of the shear is controlled by a shear angle. For X
+direction shears, x degrees is measured relative to the Y axis, and
+similarly, for Y direction shears y degrees is measured relative to
+the X axis. Empty triangles left over from shearing the image are
+filled with the <a class="reference external" href="Color.html">color</a> defined as borderColor:</p>
+<pre class="literal-block">
+void shear ( const double xShearAngle_,
+ const double yShearAngle_ )
+</pre>
+</div>
+<div class="section" id="solarize">
+<h2><a class="toc-backref" href="#id97">solarize</a></h2>
+<p>Solarize image (similar to effect seen when exposing a photographic
+film to light during the development process):</p>
+<pre class="literal-block">
+void solarize ( const double factor_ = 50.0 )
+</pre>
+</div>
+<div class="section" id="spread">
+<h2><a class="toc-backref" href="#id98">spread</a></h2>
+<p>Spread pixels randomly within image by specified ammount:</p>
+<pre class="literal-block">
+void spread ( const unsigned int amount_ = 3 )
+</pre>
+</div>
+<div class="section" id="stegano">
+<h2><a class="toc-backref" href="#id99">stegano</a></h2>
+<p>Add a digital watermark to the image (based on second image):</p>
+<pre class="literal-block">
+void stegano ( const Image &watermark_ )
+</pre>
+</div>
+<div class="section" id="stereo">
+<h2><a class="toc-backref" href="#id100">stereo</a></h2>
+<p>Create an image which appears in stereo when viewed with red-blue
+glasses (Red image on left, blue on right):</p>
+<pre class="literal-block">
+void stereo ( const Image &rightImage_ )
+</pre>
+</div>
+<div class="section" id="strip">
+<h2><a class="toc-backref" href="#id101">strip</a></h2>
+<p>Remove all profiles and text attributes from the image.</p>
+<blockquote>
+void strip ( void );</blockquote>
+</div>
+<div class="section" id="swirl">
+<h2><a class="toc-backref" href="#id102">swirl</a></h2>
+<p>Swirl image (image pixels are rotated by degrees):</p>
+<pre class="literal-block">
+void swirl ( const double degrees_ )
+</pre>
+</div>
+<div class="section" id="texture">
+<h2><a class="toc-backref" href="#id103">texture</a></h2>
+<p>Channel a texture on pixels matching image background <a class="reference external" href="Color.html">color</a>:</p>
+<pre class="literal-block">
+void texture ( const Image &texture_ )
+</pre>
+</div>
+<div class="section" id="threshold">
+<h2><a class="toc-backref" href="#id104">threshold</a></h2>
+<p>Threshold image channels (below threshold becomes black, above
+threshold becomes white). The range of the threshold parameter is 0
+to MaxRGB:</p>
+<pre class="literal-block">
+void threshold ( const double threshold_ )
+</pre>
+</div>
+<div class="section" id="transform">
+<h2><a class="toc-backref" href="#id105">transform</a></h2>
+<p>Transform image based on image and crop geometries. Crop geometry is
+optional:</p>
+<pre class="literal-block">
+void transform ( const Geometry &imageGeometry_ )
+
+void transform ( const Geometry &imageGeometry_,
+ const Geometry &cropGeometry_ )
+</pre>
+</div>
+<div class="section" id="transparent">
+<h2><a class="toc-backref" href="#id106">transparent</a></h2>
+<p>Add matte channel to image, setting pixels matching <a class="reference external" href="Color.html">color</a> to
+transparent:</p>
+<pre class="literal-block">
+void transparent ( const Color &color_ )
+</pre>
+</div>
+<div class="section" id="trim">
+<h2><a class="toc-backref" href="#id107">trim</a></h2>
+<p>Trim edges that are the background <a class="reference external" href="Color.html">color</a> from the image:</p>
+<pre class="literal-block">
+void trim ( void )
+</pre>
+</div>
+<div class="section" id="type">
+<h2><a class="toc-backref" href="#id108">type</a></h2>
+<p>Convert the image representation to the specified type or retrieve the
+current image type. If the image is reduced to an inferior type, then
+image information may be lost (e.g. color changed to grayscale).</p>
+<p>Available enumerations for the <cite>type</cite> parameter:</p>
+<blockquote>
+<dl class="docutils">
+<dt>BilevelType</dt>
+<dd>black/white</dd>
+<dt>GrayscaleType</dt>
+<dd>grayscale</dd>
+<dt>GrayscaleMatteType</dt>
+<dd>grayscale with alpha (opacity) channel</dd>
+<dt>PaletteType</dt>
+<dd>colormapped</dd>
+<dt>PaletteMatteType</dt>
+<dd>colormapped with transparency</dd>
+<dt>TrueColorType</dt>
+<dd>true (full) color</dd>
+<dt>TrueColorMatteType</dt>
+<dd>true (full) color with alpha (opacity) channel</dd>
+<dt>ColorSeparationType</dt>
+<dd>Cyan, magenta, yellow, and black</dd>
+<dt>ColorSeparationMatteType</dt>
+<dd>Cyan, magenta, yellow, and black with alpha (opacity) channel</dd>
+<dt>OptimizeType</dt>
+<dd>Optimize the image type to best represent the existing pixels</dd>
+</dl>
+</blockquote>
+<pre class="literal-block">
+void type ( const ImageType type_ )
+
+ImageType type ( void ) const
+</pre>
+</div>
+<div class="section" id="unsharpmask">
+<h2><a class="toc-backref" href="#id109">unsharpmask</a></h2>
+<p>Replace image with a sharpened version of the original image using the
+unsharp mask algorithm.</p>
+<blockquote>
+<dl class="docutils">
+<dt><cite>radius</cite></dt>
+<dd>the radius of the Gaussian, in pixels, not counting the
+center pixel.</dd>
+<dt><cite>sigma</cite></dt>
+<dd>the standard deviation of the Gaussian, in pixels.</dd>
+<dt><cite>amount</cite></dt>
+<dd>the percentage of the difference between the original and
+the blur image that is added back into the original.</dd>
+<dt><cite>threshold</cite></dt>
+<dd>the threshold in pixels needed to apply the diffence amount.</dd>
+</dl>
+</blockquote>
+<pre class="literal-block">
+void unsharpmask ( const double radius_,
+ const double sigma_,
+ const double amount_,
+ const double threshold_ )
+</pre>
+</div>
+<div class="section" id="unsharpmaskchannel">
+<h2><a class="toc-backref" href="#id110">unsharpmaskChannel</a></h2>
+<p>Replace image channel with a sharpened version of the original image
+using the unsharp mask algorithm.</p>
+<blockquote>
+<dl class="docutils">
+<dt><cite>channel</cite></dt>
+<dd>image channel to modify.</dd>
+<dt><cite>radius</cite></dt>
+<dd>the radius of the Gaussian, in pixels, not counting the
+center pixel.</dd>
+<dt><cite>sigma</cite></dt>
+<dd>the standard deviation of the Gaussian, in pixels.</dd>
+<dt><cite>amount</cite></dt>
+<dd>the percentage of the difference between the original and
+the blur image that is added back into the original.</dd>
+<dt><cite>threshold</cite></dt>
+<dd>the threshold in pixels needed to apply the diffence amount.</dd>
+</dl>
+</blockquote>
+<pre class="literal-block">
+void unsharpmaskChannel ( const ChannelType channel_,
+ const double radius_,
+ const double sigma_,
+ const double amount_,
+ const double threshold_ );
+</pre>
+</div>
+<div class="section" id="wave">
+<h2><a class="toc-backref" href="#id111">wave</a></h2>
+<p>Map image pixels to a sine wave:</p>
+<pre class="literal-block">
+void wave ( const double amplitude_ = 25.0,
+ const double wavelength_ = 150.0 )
+</pre>
+</div>
+<div class="section" id="zoom">
+<h2><a class="toc-backref" href="#id112">zoom</a></h2>
+<p>Zoom (resize) image to specified size:</p>
+<pre class="literal-block">
+void zoom ( const Geometry &geometry_ )
+</pre>
+</div>
+</div>
+<div class="section" id="set-get-image-attributes">
+<h1><a class="toc-backref" href="#id14">Set/Get Image Attributes</a></h1>
+<p>Image attributes are set and obtained via methods in Image. Except for
+methods which accept pointer arguments (e.g. chromaBluePrimary) all
+methods return attributes by value.</p>
+<p>Image attributes are easily used. For example, to set the resolution
+of the TIFF file "file.tiff" to 150 dots-per-inch (DPI) in both the
+horizontal and vertical directions, you can use the following example
+code:</p>
+<pre class="literal-block">
+string filename("file.tiff");
+Image image;
+image.read(filename);
+image.resolutionUnits(PixelsPerInchResolution);
+image.density(Geometry(150,150)); // could also use image.density("150x150")
+image.write(filename)
+</pre>
+<p>The following image attribute methods are available:</p>
+<div class="contents local topic" id="id3">
+<ul class="simple">
+<li><a class="reference internal" href="#adjoin" id="id113">adjoin</a></li>
+<li><a class="reference internal" href="#antialias" id="id114">antiAlias</a></li>
+<li><a class="reference internal" href="#animationdelay" id="id115">animationDelay</a></li>
+<li><a class="reference internal" href="#animationiterations" id="id116">animationIterations</a></li>
+<li><a class="reference internal" href="#attribute" id="id117">attribute</a></li>
+<li><a class="reference internal" href="#backgroundcolor" id="id118">backgroundColor</a></li>
+<li><a class="reference internal" href="#backgroundtexture" id="id119">backgroundTexture</a></li>
+<li><a class="reference internal" href="#basecolumns" id="id120">baseColumns</a></li>
+<li><a class="reference internal" href="#basefilename" id="id121">baseFilename</a></li>
+<li><a class="reference internal" href="#baserows" id="id122">baseRows</a></li>
+<li><a class="reference internal" href="#bordercolor" id="id123">borderColor</a></li>
+<li><a class="reference internal" href="#boundingbox" id="id124">boundingBox</a></li>
+<li><a class="reference internal" href="#boxcolor" id="id125">boxColor</a></li>
+<li><a class="reference internal" href="#cachethreshold" id="id126">cacheThreshold</a></li>
+<li><a class="reference internal" href="#chromablueprimary" id="id127">chromaBluePrimary</a></li>
+<li><a class="reference internal" href="#chromagreenprimary" id="id128">chromaGreenPrimary</a></li>
+<li><a class="reference internal" href="#chromaredprimary" id="id129">chromaRedPrimary</a></li>
+<li><a class="reference internal" href="#chromawhitepoint" id="id130">chromaWhitePoint</a></li>
+<li><a class="reference internal" href="#classtype" id="id131">classType</a></li>
+<li><a class="reference internal" href="#clipmask" id="id132">clipMask</a></li>
+<li><a class="reference internal" href="#colorfuzz" id="id133">colorFuzz</a></li>
+<li><a class="reference internal" href="#colormap" id="id134">colorMap</a></li>
+<li><a class="reference internal" href="#colormapsize" id="id135">colorMapSize</a></li>
+<li><a class="reference internal" href="#colorspace" id="id136">colorSpace</a></li>
+<li><a class="reference internal" href="#columns" id="id137">columns</a></li>
+<li><a class="reference internal" href="#id4" id="id138">comment</a></li>
+<li><a class="reference internal" href="#compose" id="id139">compose</a></li>
+<li><a class="reference internal" href="#compresstype" id="id140">compressType</a></li>
+<li><a class="reference internal" href="#debug" id="id141">debug</a></li>
+<li><a class="reference internal" href="#definevalue" id="id142">defineValue</a></li>
+<li><a class="reference internal" href="#defineset" id="id143">defineSet</a></li>
+<li><a class="reference internal" href="#density" id="id144">density</a></li>
+<li><a class="reference internal" href="#depth" id="id145">depth</a></li>
+<li><a class="reference internal" href="#directory" id="id146">directory</a></li>
+<li><a class="reference internal" href="#endian" id="id147">endian</a></li>
+<li><a class="reference internal" href="#filename" id="id148">fileName</a></li>
+<li><a class="reference internal" href="#filesize" id="id149">fileSize</a></li>
+<li><a class="reference internal" href="#fillcolor" id="id150">fillColor</a></li>
+<li><a class="reference internal" href="#fillpattern" id="id151">fillPattern</a></li>
+<li><a class="reference internal" href="#fillrule" id="id152">fillRule</a></li>
+<li><a class="reference internal" href="#filtertype" id="id153">filterType</a></li>
+<li><a class="reference internal" href="#font" id="id154">font</a></li>
+<li><a class="reference internal" href="#fontpointsize" id="id155">fontPointsize</a></li>
+<li><a class="reference internal" href="#fonttypemetrics" id="id156">fontTypeMetrics</a></li>
+<li><a class="reference internal" href="#format" id="id157">format</a></li>
+<li><a class="reference internal" href="#formatexpression" id="id158">formatExpression</a></li>
+<li><a class="reference internal" href="#id5" id="id159">gamma</a></li>
+<li><a class="reference internal" href="#id6" id="id160">geometry</a></li>
+<li><a class="reference internal" href="#gifdisposemethod" id="id161">gifDisposeMethod</a></li>
+<li><a class="reference internal" href="#icccolorprofile" id="id162">iccColorProfile</a></li>
+<li><a class="reference internal" href="#interlacetype" id="id163">interlaceType</a></li>
+<li><a class="reference internal" href="#iptcprofile" id="id164">iptcProfile</a></li>
+<li><a class="reference internal" href="#isvalid" id="id165">isValid</a></li>
+<li><a class="reference internal" href="#id7" id="id166">label</a></li>
+<li><a class="reference internal" href="#linewidth" id="id167">lineWidth</a></li>
+<li><a class="reference internal" href="#magick" id="id168">magick</a></li>
+<li><a class="reference internal" href="#matte" id="id169">matte</a></li>
+<li><a class="reference internal" href="#mattecolor" id="id170">matteColor</a></li>
+<li><a class="reference internal" href="#meanerrorperpixel" id="id171">meanErrorPerPixel</a></li>
+<li><a class="reference internal" href="#modulusdepth" id="id172">modulusDepth</a></li>
+<li><a class="reference internal" href="#monochrome" id="id173">monochrome</a></li>
+<li><a class="reference internal" href="#montagegeometry" id="id174">montageGeometry</a></li>
+<li><a class="reference internal" href="#normalizedmaxerror" id="id175">normalizedMaxError</a></li>
+<li><a class="reference internal" href="#normalizedmeanerror" id="id176">normalizedMeanError</a></li>
+<li><a class="reference internal" href="#orientation" id="id177">orientation</a></li>
+<li><a class="reference internal" href="#page" id="id178">page</a></li>
+<li><a class="reference internal" href="#pixelcolor" id="id179">pixelColor</a></li>
+<li><a class="reference internal" href="#profile" id="id180">profile</a></li>
+<li><a class="reference internal" href="#quality" id="id181">quality</a></li>
+<li><a class="reference internal" href="#quantizecolors" id="id182">quantizeColors</a></li>
+<li><a class="reference internal" href="#quantizecolorspace" id="id183">quantizeColorSpace</a></li>
+<li><a class="reference internal" href="#quantizedither" id="id184">quantizeDither</a></li>
+<li><a class="reference internal" href="#quantizetreedepth" id="id185">quantizeTreeDepth</a></li>
+<li><a class="reference internal" href="#quiet" id="id186">quiet</a></li>
+<li><a class="reference internal" href="#renderingintent" id="id187">renderingIntent</a></li>
+<li><a class="reference internal" href="#repage" id="id188">repage</a></li>
+<li><a class="reference internal" href="#resolutionunits" id="id189">resolutionUnits</a></li>
+<li><a class="reference internal" href="#rows" id="id190">rows</a></li>
+<li><a class="reference internal" href="#scene" id="id191">scene</a></li>
+<li><a class="reference internal" href="#signature" id="id192">signature</a></li>
+<li><a class="reference internal" href="#size" id="id193">size</a></li>
+<li><a class="reference internal" href="#statistics" id="id194">statistics</a></li>
+<li><a class="reference internal" href="#strokeantialias" id="id195">strokeAntiAlias</a></li>
+<li><a class="reference internal" href="#strokecolor" id="id196">strokeColor</a></li>
+<li><a class="reference internal" href="#strokedasharray" id="id197">strokeDashArray</a></li>
+<li><a class="reference internal" href="#strokedashoffset" id="id198">strokeDashOffset</a></li>
+<li><a class="reference internal" href="#strokelinecap" id="id199">strokeLineCap</a></li>
+<li><a class="reference internal" href="#strokelinejoin" id="id200">strokeLineJoin</a></li>
+<li><a class="reference internal" href="#strokemiterlimit" id="id201">strokeMiterLimit</a></li>
+<li><a class="reference internal" href="#strokepattern" id="id202">strokePattern</a></li>
+<li><a class="reference internal" href="#strokewidth" id="id203">strokeWidth</a></li>
+<li><a class="reference internal" href="#subimage" id="id204">subImage</a></li>
+<li><a class="reference internal" href="#subrange" id="id205">subRange</a></li>
+<li><a class="reference internal" href="#textencoding" id="id206">textEncoding</a></li>
+<li><a class="reference internal" href="#tilename" id="id207">tileName</a></li>
+<li><a class="reference internal" href="#totalcolors" id="id208">totalColors</a></li>
+<li><a class="reference internal" href="#transformorigin" id="id209">transformOrigin</a></li>
+<li><a class="reference internal" href="#transformrotation" id="id210">transformRotation</a></li>
+<li><a class="reference internal" href="#transformreset" id="id211">transformReset</a></li>
+<li><a class="reference internal" href="#transformscale" id="id212">transformScale</a></li>
+<li><a class="reference internal" href="#transformskewx" id="id213">transformSkewX</a></li>
+<li><a class="reference internal" href="#transformskewy" id="id214">transformSkewY</a></li>
+<li><a class="reference internal" href="#verbose" id="id215">verbose</a></li>
+<li><a class="reference internal" href="#view" id="id216">view</a></li>
+<li><a class="reference internal" href="#x11display" id="id217">x11Display</a></li>
+<li><a class="reference internal" href="#xresolution" id="id218">xResolution</a></li>
+<li><a class="reference internal" href="#yresolution" id="id219">yResolution</a></li>
+</ul>
+</div>
+<div class="section" id="adjoin">
+<h2><a class="toc-backref" href="#id113">adjoin</a></h2>
+<p>Join images into a single multi-image file:</p>
+<pre class="literal-block">
+void adjoin ( const bool flag_ )
+
+bool adjoin ( void ) const
+</pre>
+</div>
+<div class="section" id="antialias">
+<h2><a class="toc-backref" href="#id114">antiAlias</a></h2>
+<p>Control antialiasing of rendered Postscript and Postscript or TrueType
+fonts. Enabled by default:</p>
+<pre class="literal-block">
+void antiAlias( const bool flag_ )
+
+bool antiAlias( void )
+</pre>
+</div>
+<div class="section" id="animationdelay">
+<h2><a class="toc-backref" href="#id115">animationDelay</a></h2>
+<p>Time in 1/100ths of a second (0 to 65535) which must expire before
+displaying the next image in an animated sequence. This option is
+useful for regulating the animation of a sequence of GIF images within
+Netscape:</p>
+<pre class="literal-block">
+void animationDelay ( const unsigned int delay_ )
+
+unsigned int animationDelay ( void ) const
+</pre>
+</div>
+<div class="section" id="animationiterations">
+<h2><a class="toc-backref" href="#id116">animationIterations</a></h2>
+<p>Number of iterations to loop an animation (e.g. Netscape loop
+extension) for:</p>
+<pre class="literal-block">
+void animationIterations ( const unsigned int iterations_ )
+
+unsigned int animationIterations ( void ) const
+</pre>
+</div>
+<div class="section" id="attribute">
+<h2><a class="toc-backref" href="#id117">attribute</a></h2>
+<p>Access or update an arbitrary named image attribute. Any number of
+named attributes may be attached to the image. For example, the image
+comment is a named image attribute with the name "comment". If the
+named attribute already exists, the provided text is appended to the
+existing attribute text. Pass NULL to remove an existing text
+attribute, or to restart the text attribute from scratch.</p>
+<p>EXIF tags are attached to the image as named attributes. Use the
+syntax "EXIF:<tag>" to request an EXIF tag similar to
+"EXIF:DateTime":</p>
+<pre class="literal-block">
+void attribute ( const std::string name_,
+ const char * value_ );
+
+void attribute ( const std::string name_,
+ const std::string value_ )
+
+std::string attribute ( const std::string name_ )
+</pre>
+</div>
+<div class="section" id="backgroundcolor">
+<h2><a class="toc-backref" href="#id118">backgroundColor</a></h2>
+<p>Image background <a class="reference external" href="Color.html">color</a>:</p>
+<pre class="literal-block">
+void backgroundColor ( const Color &color_ )
+
+Color backgroundColor ( void ) const
+</pre>
+</div>
+<div class="section" id="backgroundtexture">
+<h2><a class="toc-backref" href="#id119">backgroundTexture</a></h2>
+<p>Image file name to use as the background texture. Does not modify
+image pixels:</p>
+<pre class="literal-block">
+void backgroundTexture (const std::string &backgroundTexture_ )
+
+std::string backgroundTexture ( void ) const
+</pre>
+</div>
+<div class="section" id="basecolumns">
+<h2><a class="toc-backref" href="#id120">baseColumns</a></h2>
+<p>Base image width (before transformations):</p>
+<pre class="literal-block">
+unsigned int baseColumns ( void ) const
+</pre>
+</div>
+<div class="section" id="basefilename">
+<h2><a class="toc-backref" href="#id121">baseFilename</a></h2>
+<p>Base image filename (before transformations):</p>
+<pre class="literal-block">
+std::string baseFilename ( void ) const
+</pre>
+</div>
+<div class="section" id="baserows">
+<h2><a class="toc-backref" href="#id122">baseRows</a></h2>
+<p>Base image height (before transformations):</p>
+<pre class="literal-block">
+unsigned int baseRows ( void ) const
+</pre>
+</div>
+<div class="section" id="bordercolor">
+<h2><a class="toc-backref" href="#id123">borderColor</a></h2>
+<p>Image border <a class="reference external" href="Color.html">color</a>:</p>
+<pre class="literal-block">
+void borderColor ( const Color &color_ )
+
+Color borderColor ( void ) const
+</pre>
+</div>
+<div class="section" id="boundingbox">
+<h2><a class="toc-backref" href="#id124">boundingBox</a></h2>
+<p>Return smallest bounding box enclosing non-border pixels. The
+current fuzz value is used when discriminating between pixels.
+This is the crop bounding box used by <tt class="docutils literal">crop(Geometry(0,0))</tt>:</p>
+<pre class="literal-block">
+Geometry boundingBox ( void ) const
+</pre>
+</div>
+<div class="section" id="boxcolor">
+<h2><a class="toc-backref" href="#id125">boxColor</a></h2>
+<p>Base <a class="reference external" href="Color.html">color</a> that annotation text is rendered on (default none):</p>
+<pre class="literal-block">
+void boxColor ( const Color &boxColor_ )
+
+Color boxColor ( void ) const
+</pre>
+</div>
+<div class="section" id="cachethreshold">
+<h2><a class="toc-backref" href="#id126">cacheThreshold</a></h2>
+<p>Pixel cache threshold in megabytes. Once this memory threshold is
+exceeded, all subsequent pixels cache operations are to/from disk.
+This setting is shared by all Image objects:</p>
+<pre class="literal-block">
+static void cacheThreshold ( const unsigned int threshold_ )
+</pre>
+</div>
+<div class="section" id="chromablueprimary">
+<h2><a class="toc-backref" href="#id127">chromaBluePrimary</a></h2>
+<p>Chromaticity blue primary point (e.g. x=0.15, y=0.06):</p>
+<pre class="literal-block">
+void chromaBluePrimary ( const double x_, const double y_ )
+
+void chromaBluePrimary ( double *x_, double *y_ ) const
+</pre>
+</div>
+<div class="section" id="chromagreenprimary">
+<h2><a class="toc-backref" href="#id128">chromaGreenPrimary</a></h2>
+<p>Chromaticity green primary point (e.g. x=0.3, y=0.6):</p>
+<pre class="literal-block">
+void chromaGreenPrimary ( const double x_, const double y_ )
+
+void chromaGreenPrimary ( double *x_, double *y_ ) const
+</pre>
+</div>
+<div class="section" id="chromaredprimary">
+<h2><a class="toc-backref" href="#id129">chromaRedPrimary</a></h2>
+<p>Chromaticity red primary point (e.g. x=0.64, y=0.33):</p>
+<pre class="literal-block">
+void chromaRedPrimary ( const double x_, const double y_ )
+
+void chromaRedPrimary ( double *x_, double *y_ ) const
+</pre>
+</div>
+<div class="section" id="chromawhitepoint">
+<h2><a class="toc-backref" href="#id130">chromaWhitePoint</a></h2>
+<p>Chromaticity white point (e.g. x=0.3127, y=0.329):</p>
+<pre class="literal-block">
+void chromaWhitePoint ( const double x_, const double y_ )
+void chromaWhitePoint ( double *x_, double *y_ ) const
+</pre>
+</div>
+<div class="section" id="classtype">
+<h2><a class="toc-backref" href="#id131">classType</a></h2>
+<p>Image class (DirectClass or PseudoClass). NOTE: setting a DirectClass
+image to PseudoClass will result in the loss of color information if
+the number of colors in the image is greater than the maximum palette
+size (either 256 or 65536 entries depending on the value of
+QuantumDepth when ImageMagick was built):</p>
+<pre class="literal-block">
+void classType ( const ClassType class_ )
+
+ClassType classType ( void ) const
+</pre>
+</div>
+<div class="section" id="clipmask">
+<h2><a class="toc-backref" href="#id132">clipMask</a></h2>
+<p>Associate a clip mask image with the current image. The clip mask
+image must have the same dimensions as the current image or an
+exception is thrown. Clipping occurs wherever pixels are transparent
+in the clip mask image. Clipping Pass an invalid image to unset an
+existing clip mask:</p>
+<pre class="literal-block">
+void clipMask ( const Image & clipMask_ )
+
+Image clipMask ( void ) const
+</pre>
+</div>
+<div class="section" id="colorfuzz">
+<h2><a class="toc-backref" href="#id133">colorFuzz</a></h2>
+<p>Colors within this distance are considered equal. A number of
+algorithms search for a target color. By default the color must be
+exact. Use this option to match colors that are close to the target
+color in RGB space:</p>
+<pre class="literal-block">
+void colorFuzz ( const double fuzz_ )
+
+double colorFuzz ( void ) const
+</pre>
+</div>
+<div class="section" id="colormap">
+<h2><a class="toc-backref" href="#id134">colorMap</a></h2>
+<p><a class="reference external" href="Color.html">Color</a> at colormap position <cite>index</cite>:</p>
+<pre class="literal-block">
+void colorMap ( const unsigned int index_,
+ const Color &color_ )
+
+Color colorMap ( const unsigned int index_ ) const
+</pre>
+</div>
+<div class="section" id="colormapsize">
+<h2><a class="toc-backref" href="#id135">colorMapSize</a></h2>
+<p>Number of entries in the colormap. Setting the colormap size may
+extend or truncate the colormap. The maximum number of supported
+entries is specified by the MaxColormapSize constant, and is dependent
+on the value of QuantumDepth when GraphicsMagick is compiled. An
+exception is thrown if more entries are requested than may be
+supported. Care should be taken when truncating the colormap to ensure
+that the image colormap indexes reference valid colormap entries:</p>
+<pre class="literal-block">
+void colorMapSize ( const unsigned int entries_ )
+
+unsigned int colorMapSize ( void )
+</pre>
+</div>
+<div class="section" id="colorspace">
+<h2><a class="toc-backref" href="#id136">colorSpace</a></h2>
+<p>The colorspace (e.g. CMYK) used to represent the image pixel colors:</p>
+<pre class="literal-block">
+void colorSpace( const ColorspaceType colorSpace_ )
+
+ColorspaceType colorSpace ( void ) const
+</pre>
+</div>
+<div class="section" id="columns">
+<h2><a class="toc-backref" href="#id137">columns</a></h2>
+<p>Image width:</p>
+<pre class="literal-block">
+unsigned int columns ( void ) const
+</pre>
+</div>
+<div class="section" id="id4">
+<h2><a class="toc-backref" href="#id138">comment</a></h2>
+<p>Image comment:</p>
+<pre class="literal-block">
+std::string comment ( void ) const
+</pre>
+</div>
+<div class="section" id="compose">
+<h2><a class="toc-backref" href="#id139">compose</a></h2>
+<p>Composition operator to be used when composition is implicitly
+used (such as for image flattening):</p>
+<pre class="literal-block">
+void compose (const CompositeOperator compose_)
+
+CompositeOperator compose ( void ) const
+</pre>
+</div>
+<div class="section" id="compresstype">
+<h2><a class="toc-backref" href="#id140">compressType</a></h2>
+<p>Image compresion type. The default is the compression type of the
+input image file:</p>
+<pre class="literal-block">
+void compressType ( const CompressionType compressType_ )
+
+CompressionType compressType ( void ) const
+</pre>
+</div>
+<div class="section" id="debug">
+<h2><a class="toc-backref" href="#id141">debug</a></h2>
+<p>Enable printing of debug messages from GraphicsMagick as it executes:</p>
+<pre class="literal-block">
+void debug ( const bool flag_ )
+
+bool debug ( void ) const
+</pre>
+</div>
+<div class="section" id="definevalue">
+<h2><a class="toc-backref" href="#id142">defineValue</a></h2>
+<p>Set or obtain a definition string to applied when encoding or decoding
+the specified format. The meanings of the definitions are format
+specific. The format is designated by the <cite>magick</cite> argument, the
+format-specific key is designated by <cite>key</cite>, and the associated value
+is specified by <cite>value</cite>. See the defineSet() method if the key must be
+removed entirely:</p>
+<pre class="literal-block">
+void defineValue ( const std::string &magick_,
+ const std::string &key_,
+ const std::string &value_ )
+
+std::string defineValue ( const std::string &magick_,
+ const std::string &key_ ) const
+</pre>
+</div>
+<div class="section" id="defineset">
+<h2><a class="toc-backref" href="#id143">defineSet</a></h2>
+<p>Set or obtain a definition flag to applied when encoding or decoding
+the specified format. Similar to the defineValue() method except that
+passing the <cite>flag</cite> value 'true' creates a value-less define with that
+format and key. Passing the <cite>flag</cite> value 'false' removes any existing
+matching definition. The method returns 'true' if a matching key
+exists, and 'false' if no matching key exists:</p>
+<pre class="literal-block">
+void defineSet ( const std::string &magick_,
+ const std::string &key_,
+ bool flag_ )
+
+bool defineSet ( const std::string &magick_,
+ const std::string &key_ ) const
+</pre>
+</div>
+<div class="section" id="density">
+<h2><a class="toc-backref" href="#id144">density</a></h2>
+<p>Vertical and horizontal resolution in pixels of the image. This option
+specifies an image density when decoding a Postscript or Portable
+Document page. Often used with <cite>psPageSize</cite>:</p>
+<pre class="literal-block">
+void density ( const Geometry &geomery_ )
+
+Geometry density ( void ) const
+</pre>
+<p>Please note that the 'density' method suffers from a design problem in
+that the Geometry object only supports integer dimensions, but the
+underlying image resolution is a floating point value. This results
+in rounding off the value. Please see the xResolution() and
+yResolution() methods for a way to set and get the resolution in
+floating point.</p>
+<p>The resolution units may be obtained via the resolutionUnits() method.</p>
+</div>
+<div class="section" id="depth">
+<h2><a class="toc-backref" href="#id145">depth</a></h2>
+<p>Image depth (bits allocated to red/green/blue components). Used to
+specify the bit depth when reading or writing raw images or when the
+output format supports multiple depths. Defaults to the quantum depth
+that GraphicsMagick is compiled with:</p>
+<pre class="literal-block">
+void depth ( const unsigned int depth_ )
+
+unsigned int depth ( void ) const
+</pre>
+</div>
+<div class="section" id="directory">
+<h2><a class="toc-backref" href="#id146">directory</a></h2>
+<p>Tile names from within an image montage:</p>
+<pre class="literal-block">
+std::string directory ( void ) const
+</pre>
+</div>
+<div class="section" id="endian">
+<h2><a class="toc-backref" href="#id147">endian</a></h2>
+<p>Endianness (<cite>LSBEndian</cite> like Intel, <cite>MSBEndian</cite> like SPARC, or
+<cite>NativeEndian</cite> for what this computer uses) for image formats which
+support endian-specific options:</p>
+<pre class="literal-block">
+void endian ( const EndianType endian_ )
+
+EndianType endian ( void ) const
+</pre>
+</div>
+<div class="section" id="filename">
+<h2><a class="toc-backref" href="#id148">fileName</a></h2>
+<p>Image file name:</p>
+<pre class="literal-block">
+void fileName ( const std::string &fileName_ )
+
+std::string fileName ( void ) const
+</pre>
+</div>
+<div class="section" id="filesize">
+<h2><a class="toc-backref" href="#id149">fileSize</a></h2>
+<p>Number of bytes of the image on disk:</p>
+<pre class="literal-block">
+off_t fileSize ( void ) const
+</pre>
+</div>
+<div class="section" id="fillcolor">
+<h2><a class="toc-backref" href="#id150">fillColor</a></h2>
+<p><a class="reference external" href="Color.html">Color</a> to use when filling drawn objects:</p>
+<pre class="literal-block">
+void fillColor ( const Color &fillColor_ )
+
+Color fillColor ( void ) const
+</pre>
+</div>
+<div class="section" id="fillpattern">
+<h2><a class="toc-backref" href="#id151">fillPattern</a></h2>
+<p>Pattern to use while filling drawn objects:</p>
+<pre class="literal-block">
+void fillPattern ( const Image &fillPattern_ )
+
+Image fillPattern ( void ) const
+</pre>
+</div>
+<div class="section" id="fillrule">
+<h2><a class="toc-backref" href="#id152">fillRule</a></h2>
+<p>Rule to use when filling drawn objects:</p>
+<pre class="literal-block">
+void fillRule ( const FillRule &fillRule_ )
+
+FillRule fillRule ( void ) const
+</pre>
+</div>
+<div class="section" id="filtertype">
+<h2><a class="toc-backref" href="#id153">filterType</a></h2>
+<p>Filter to use when resizing image. The reduction filter employed has a
+sigificant effect on the time required to resize an image and the
+resulting quality. The default filter is Lanczos which has been shown
+to produce high quality results when reducing most images:</p>
+<pre class="literal-block">
+void filterType ( const FilterTypes filterType_ )
+
+FilterTypes filterType ( void ) const
+</pre>
+</div>
+<div class="section" id="font">
+<h2><a class="toc-backref" href="#id154">font</a></h2>
+<p>Text rendering font. If the font is a fully qualified X server font
+name, the font is obtained from an X server. To use a TrueType font,
+precede the TrueType filename with an @. Otherwise, specify a
+Postscript font name (e.g. "helvetica").:</p>
+<pre class="literal-block">
+void font ( const std::string &font_ )
+
+std::string font ( void ) const
+</pre>
+</div>
+<div class="section" id="fontpointsize">
+<h2><a class="toc-backref" href="#id155">fontPointsize</a></h2>
+<p>Text rendering font point size:</p>
+<pre class="literal-block">
+void fontPointsize ( const double pointSize_ )
+
+double fontPointsize ( void ) const
+</pre>
+</div>
+<div class="section" id="fonttypemetrics">
+<h2><a class="toc-backref" href="#id156">fontTypeMetrics</a></h2>
+<p>Obtain font metrics (see <a class="reference external" href="TypeMetric.html">TypeMetric</a>) for text string given current
+font, pointsize, and density settings. This information is necessary
+in order to do fancy layout of text:</p>
+<pre class="literal-block">
+void fontTypeMetrics( const std::string &text_,
+ TypeMetric *metrics )
+</pre>
+</div>
+<div class="section" id="format">
+<h2><a class="toc-backref" href="#id157">format</a></h2>
+<p>Long image format description:</p>
+<pre class="literal-block">
+std::string format ( void ) const
+</pre>
+</div>
+<div class="section" id="formatexpression">
+<h2><a class="toc-backref" href="#id158">formatExpression</a></h2>
+<p>Format a string based on image properties similar to <cite>identify</cite>
+<cite>-format</cite>. For example, the format expression "%wx%h" is converted to
+a string containing image WIDTHxHEIGHT like "640x480":</p>
+<pre class="literal-block">
+std::string formatExpression( const std::string expression )
+</pre>
+<p>Please note that this method is not a const method (may modify the
+Image object and will assure a reference count of one) and it <em>may</em>
+throw an exception if there is an internal error.</p>
+</div>
+<div class="section" id="id5">
+<h2><a class="toc-backref" href="#id159">gamma</a></h2>
+<p>Gamma level of the image. Gamma is a pow() function which converts
+between the linear light representation and the representation for the
+computer display. Most computer images are gamma corrected to 2.2
+(1/0.4545) so that each step results in a visually linear step on a
+computer or video display:</p>
+<pre class="literal-block">
+double gamma ( void ) const
+</pre>
+</div>
+<div class="section" id="id6">
+<h2><a class="toc-backref" href="#id160">geometry</a></h2>
+<p>Preferred size of the image when encoding:</p>
+<pre class="literal-block">
+Geometry geometry ( void ) const
+</pre>
+</div>
+<div class="section" id="gifdisposemethod">
+<h2><a class="toc-backref" href="#id161">gifDisposeMethod</a></h2>
+<p>GIF disposal method. This option (specific to the GIF file format) is
+used to control how successive frames are rendered (how the preceding
+frame is disposed of) when creating a GIF animation:</p>
+<pre class="literal-block">
+void gifDisposeMethod ( const unsigned int disposeMethod_ )
+
+unsigned int gifDisposeMethod ( void ) const
+</pre>
+</div>
+<div class="section" id="icccolorprofile">
+<h2><a class="toc-backref" href="#id162">iccColorProfile</a></h2>
+<p>ICC color profile. Supplied via a <a class="reference external" href="Blob.html">Blob</a> since Magick++/ and
+GraphicsMagick do not currently support formating this data structure
+directly.</p>
+<p>If there is not already an ICC color profile, the profile is merely
+attached to the image without transforming the pixels. If there is
+already an ICC color profile (the source profile), the pixels are
+translated according to the source and target profiles, and the
+existing profile is replaced with the target profile.</p>
+<p>Also see <a class="reference internal" href="#renderingintent">renderingIntent</a>, which allows specifying the rendering
+intent if the profile is executed.</p>
+<p>Specifications for ICC color profiles and their usage are available
+from the International Color Consortium for the format of ICC color
+profiles:</p>
+<pre class="literal-block">
+void iccColorProfile( const Blob &colorProfile_ )
+
+Blob iccColorProfile( void ) const
+</pre>
+</div>
+<div class="section" id="interlacetype">
+<h2><a class="toc-backref" href="#id163">interlaceType</a></h2>
+<p>The type of interlacing scheme (default <cite>NoInterlace</cite> ). This option
+is used to specify the type of interlacing scheme for raw image
+formats such as RGB or YUV. <cite>NoInterlace</cite> means do not interlace,
+<cite>LineInterlace</cite> uses scanline interlacing, and <cite>PlaneInterlace</cite> uses
+plane interlacing. <cite>PartitionInterlace</cite> is like <cite>PlaneInterlace</cite>
+except the different planes are saved to individual files (e.g.
+image.R, image.G, and image.B). Use <cite>LineInterlace</cite> or
+<cite>PlaneInterlace</cite> to create an interlaced GIF or progressive JPEG
+image:</p>
+<pre class="literal-block">
+void interlaceType ( const InterlaceType interlace_ )
+
+InterlaceType interlaceType ( void ) const
+</pre>
+</div>
+<div class="section" id="iptcprofile">
+<h2><a class="toc-backref" href="#id164">iptcProfile</a></h2>
+<p>IPTC profile. Supplied via a <a class="reference external" href="Blob.html">Blob</a> since Magick++ and GraphicsMagick do
+not currently support formating this data structure
+directly. Specifications are available from the International Press
+Telecommunications Council for IPTC profiles:</p>
+<pre class="literal-block">
+void iptcProfile( const Blob& iptcProfile_ )
+
+Blob iptcProfile( void ) const
+</pre>
+</div>
+<div class="section" id="isvalid">
+<h2><a class="toc-backref" href="#id165">isValid</a></h2>
+<p>Does object contain valid image? Set to <cite>false</cite> in order to invalidate
+the image. Images constructed via the default constructor are invalid
+images and isValid() will return false:</p>
+<pre class="literal-block">
+void isValid ( const bool isValid_ )
+
+bool isValid ( void ) const
+</pre>
+</div>
+<div class="section" id="id7">
+<h2><a class="toc-backref" href="#id166">label</a></h2>
+<p>Image label:</p>
+<pre class="literal-block">
+std::string label ( void ) const
+</pre>
+</div>
+<div class="section" id="linewidth">
+<h2><a class="toc-backref" href="#id167">lineWidth</a></h2>
+<p>Stroke width for drawing vector objects (default one)
+This method is now deprecated. Please use strokeWidth instead:</p>
+<pre class="literal-block">
+void lineWidth ( const double lineWidth_ )
+
+double lineWidth ( void ) const
+</pre>
+</div>
+<div class="section" id="magick">
+<h2><a class="toc-backref" href="#id168">magick</a></h2>
+<p>File type magick identifier (.e.g "GIF"):</p>
+<pre class="literal-block">
+void magick ( const std::string &magick_ )
+
+std::string magick ( void ) const
+</pre>
+</div>
+<div class="section" id="matte">
+<h2><a class="toc-backref" href="#id169">matte</a></h2>
+<p>Image supports transparency (matte channel):</p>
+<pre class="literal-block">
+void matte ( const bool matteFlag_ )
+
+bool matte ( void ) const
+</pre>
+</div>
+<div class="section" id="mattecolor">
+<h2><a class="toc-backref" href="#id170">matteColor</a></h2>
+<p>Image matte (frame) <a class="reference external" href="Color.html">color</a>:</p>
+<pre class="literal-block">
+void matteColor ( const Color &matteColor_ )
+
+Color matteColor ( void ) const
+</pre>
+</div>
+<div class="section" id="meanerrorperpixel">
+<h2><a class="toc-backref" href="#id171">meanErrorPerPixel</a></h2>
+<p>The mean error per pixel computed when an image is color reduced. This
+parameter is only valid if verbose is set to true and the image has
+just been quantized:</p>
+<pre class="literal-block">
+double meanErrorPerPixel ( void ) const
+</pre>
+</div>
+<div class="section" id="modulusdepth">
+<h2><a class="toc-backref" href="#id172">modulusDepth</a></h2>
+<p>Image modulus depth (minimum number of bits required to support
+red/green/blue components without loss of accuracy). The pixel modulus
+depth may be decreased by supplying a value which is less than the
+current value, updating the pixels (reducing accuracy) to the new
+depth. The pixel modulus depth can not be increased over the current
+value using this method:</p>
+<pre class="literal-block">
+void modulusDepth ( const unsigned int modulusDepth_ )
+
+unsigned int modulusDepth ( void ) const
+</pre>
+</div>
+<div class="section" id="monochrome">
+<h2><a class="toc-backref" href="#id173">monochrome</a></h2>
+<p>Transform image to black and white while color reducing (quantizing):</p>
+<pre class="literal-block">
+void monochrome ( const bool monochromeFlag_ )
+
+bool monochrome ( void ) const
+</pre>
+</div>
+<div class="section" id="montagegeometry">
+<h2><a class="toc-backref" href="#id174">montageGeometry</a></h2>
+<p>Tile size and offset within an image montage. Only valid for montage
+images:</p>
+<pre class="literal-block">
+Geometry montageGeometry ( void ) const
+</pre>
+</div>
+<div class="section" id="normalizedmaxerror">
+<h2><a class="toc-backref" href="#id175">normalizedMaxError</a></h2>
+<p>The normalized max error per pixel computed when an image is color
+reduced. This parameter is only valid if verbose is set to true and
+the image has just been quantized:</p>
+<pre class="literal-block">
+double normalizedMaxError ( void ) const
+</pre>
+</div>
+<div class="section" id="normalizedmeanerror">
+<h2><a class="toc-backref" href="#id176">normalizedMeanError</a></h2>
+<p>The normalized mean error per pixel computed when an image is color
+reduced. This parameter is only valid if verbose is set to true and
+the image has just been quantized:</p>
+<pre class="literal-block">
+double normalizedMeanError ( void ) const
+</pre>
+</div>
+<div class="section" id="orientation">
+<h2><a class="toc-backref" href="#id177">orientation</a></h2>
+<p>Image orientation. Supported by some file formats such as DPX and
+TIFF. Useful for turning the right way up:</p>
+<pre class="literal-block">
+void orientation ( const OrientationType orientation_ )
+
+OrientationType orientation ( void ) const
+</pre>
+</div>
+<div class="section" id="page">
+<h2><a class="toc-backref" href="#id178">page</a></h2>
+<p>Preferred size and location of an image canvas.</p>
+<p>Use this option to specify the dimensions and position of the
+Postscript page in dots per inch or a TEXT page in pixels. This option
+is typically used in concert with density .</p>
+<p>Page may also be used to position a GIF image (such as for a scene in
+an animation):</p>
+<pre class="literal-block">
+void page ( const Geometry &pageSize_ )
+
+Geometry page ( void ) const
+</pre>
+</div>
+<div class="section" id="pixelcolor">
+<h2><a class="toc-backref" href="#id179">pixelColor</a></h2>
+<p>Get/set pixel <a class="reference external" href="Color.html">color</a> at location x & y:</p>
+<pre class="literal-block">
+void pixelColor ( const unsigned int x_,
+ const unsigned int y_,
+ const Color &color_ )
+
+Color pixelColor ( const unsigned int x_,
+ const unsigned int y_ ) const
+</pre>
+</div>
+<div class="section" id="profile">
+<h2><a class="toc-backref" href="#id180">profile</a></h2>
+<p>Add or remove a named profile to/from the image. Remove the
+profile by passing an empty <a class="reference external" href="Blob.html">Blob</a> (e.g. Blob()). Valid names are
+"*", "8BIM", "ICM", "IPTC", or a user/format-defined profile name:</p>
+<pre class="literal-block">
+void profile( const std::string name_,
+ const Blob &colorProfile_ )
+</pre>
+<p>Retrieve a named profile from the image. Valid names are:
+"8BIM", "8BIMTEXT", "APP1", "APP1JPEG", "ICC", "ICM", & "IPTC"
+or an existing user/format-defined profile name:</p>
+<pre class="literal-block">
+Blob profile( const std::string name_ ) const
+</pre>
+</div>
+<div class="section" id="quality">
+<h2><a class="toc-backref" href="#id181">quality</a></h2>
+<p>JPEG/MIFF/PNG compression level (default 75):</p>
+<pre class="literal-block">
+void quality ( const unsigned int quality_ )
+
+unsigned int quality ( void ) const
+</pre>
+</div>
+<div class="section" id="quantizecolors">
+<h2><a class="toc-backref" href="#id182">quantizeColors</a></h2>
+<p>Maximum number of colors to quantize to:</p>
+<pre class="literal-block">
+void quantizeColors ( const unsigned int colors_ )
+
+unsigned int quantizeColors ( void ) const
+</pre>
+</div>
+<div class="section" id="quantizecolorspace">
+<h2><a class="toc-backref" href="#id183">quantizeColorSpace</a></h2>
+<p>Colorspace to quantize in (default RGB). Empirical evidence suggests
+that distances in color spaces such as YUV or YIQ correspond to
+perceptual color differences more closely than do distances in RGB
+space. These color spaces may give better results when color reducing
+an image:</p>
+<pre class="literal-block">
+void quantizeColorSpace ( const ColorspaceType colorSpace_ )
+
+ColorspaceType quantizeColorSpace ( void ) const
+</pre>
+</div>
+<div class="section" id="quantizedither">
+<h2><a class="toc-backref" href="#id184">quantizeDither</a></h2>
+<p>Apply Floyd/Steinberg error diffusion to the image. The basic strategy
+of dithering is to trade intensity resolution for spatial resolution
+by averaging the intensities of several neighboring pixels. Images
+which suffer from severe contouring when reducing colors can be
+improved with this option. The quantizeColors or monochrome option
+must be set for this option to take effect:</p>
+<pre class="literal-block">
+void quantizeDither ( const bool ditherFlag_ )
+
+bool quantizeDither ( void ) const
+</pre>
+</div>
+<div class="section" id="quantizetreedepth">
+<h2><a class="toc-backref" href="#id185">quantizeTreeDepth</a></h2>
+<p>Depth of the quantization color classification tree. Values of 0 or 1
+allow selection of the optimal tree depth for the color reduction
+algorithm. Values between 2 and 8 may be used to manually adjust the
+tree depth:</p>
+<pre class="literal-block">
+void quantizeTreeDepth ( const unsigned int treeDepth_ )
+
+unsigned int quantizeTreeDepth ( void ) const
+</pre>
+</div>
+<div class="section" id="quiet">
+<h2><a class="toc-backref" href="#id186">quiet</a></h2>
+<p>Determines if Warning exceptions will be thrown, or suppressed.
+The default is that warnings will be thrown (i.e. false):</p>
+<pre class="literal-block">
+void quiet ( const bool quiet_ );
+bool quiet ( void ) const;
+</pre>
+</div>
+<div class="section" id="renderingintent">
+<h2><a class="toc-backref" href="#id187">renderingIntent</a></h2>
+<p>The type of rendering intent (used when applying an ICC color
+profile using <a class="reference internal" href="#icccolorprofile">iccColorProfile</a>):</p>
+<pre class="literal-block">
+void renderingIntent ( const RenderingIntent renderingIntent_ )
+
+RenderingIntent renderingIntent ( void ) const
+</pre>
+</div>
+<div class="section" id="repage">
+<h2><a class="toc-backref" href="#id188">repage</a></h2>
+<p>Reset the image page canvas and position:</p>
+<pre class="literal-block">
+void repage();
+</pre>
+</div>
+<div class="section" id="resolutionunits">
+<h2><a class="toc-backref" href="#id189">resolutionUnits</a></h2>
+<p>Units of image resolution:</p>
+<pre class="literal-block">
+void resolutionUnits ( const ResolutionType resolutionUnits_ )
+
+ResolutionType resolutionUnits ( void ) const
+</pre>
+</div>
+<div class="section" id="rows">
+<h2><a class="toc-backref" href="#id190">rows</a></h2>
+<p>The number of pixel rows in the image:</p>
+<pre class="literal-block">
+unsigned int rows ( void ) const
+</pre>
+</div>
+<div class="section" id="scene">
+<h2><a class="toc-backref" href="#id191">scene</a></h2>
+<p>Image scene number:</p>
+<pre class="literal-block">
+void scene ( const unsigned int scene_ )
+
+unsigned int scene ( void ) const
+</pre>
+</div>
+<div class="section" id="signature">
+<h2><a class="toc-backref" href="#id192">signature</a></h2>
+<p>Image textual signature. Set <cite>force</cite> to true in order to re-calculate
+the signature regardless of whether the image data has been modified:</p>
+<pre class="literal-block">
+std::string signature ( const bool force_ = false ) const
+</pre>
+</div>
+<div class="section" id="size">
+<h2><a class="toc-backref" href="#id193">size</a></h2>
+<p>Width and height of a raw image (an image which does not support width
+and height information). Size may also be used to affect the image
+size read from a multi-resolution format (e.g. Photo CD, JBIG, or
+JPEG:</p>
+<pre class="literal-block">
+void size ( const Geometry &geometry_ )
+
+Geometry size ( void ) const
+</pre>
+</div>
+<div class="section" id="statistics">
+<h2><a class="toc-backref" href="#id194">statistics</a></h2>
+<p>Obtain image statistics. Statistics are normalized to the range
+of 0.0 to 1.0 and are output to the specified ImageStatistics
+structure:</p>
+<pre class="literal-block">
+void statistics ( ImageStatistics *statistics ) const
+</pre>
+</div>
+<div class="section" id="strokeantialias">
+<h2><a class="toc-backref" href="#id195">strokeAntiAlias</a></h2>
+<p>Enable/disable stroke anti-aliasing:</p>
+<pre class="literal-block">
+void strokeAntiAlias( const bool flag_ )
+
+bool strokeAntiAlias( void ) const
+</pre>
+</div>
+<div class="section" id="strokecolor">
+<h2><a class="toc-backref" href="#id196">strokeColor</a></h2>
+<p><a class="reference external" href="Color.html">Color</a> to use when drawing object outlines:</p>
+<pre class="literal-block">
+void strokeColor ( const Color &strokeColor_ )
+
+Color strokeColor ( void ) const
+</pre>
+</div>
+<div class="section" id="strokedasharray">
+<h2><a class="toc-backref" href="#id197">strokeDashArray</a></h2>
+<p>Specify the pattern of dashes and gaps used to stroke paths. The
+strokeDashArray represents a zero-terminated array of numbers that
+specify the lengths of alternating dashes and gaps in pixels. If an
+odd number of values is provided, then the list of values is repeated
+to yield an even number of values. A typical <cite>strokeDashArray</cite> array
+might contain the members 5 3 2 0, where the zero value indicates the
+end of the pattern array:</p>
+<pre class="literal-block">
+void strokeDashArray ( const double* strokeDashArray_ )
+
+const double* strokeDashArray ( void ) const
+</pre>
+</div>
+<div class="section" id="strokedashoffset">
+<h2><a class="toc-backref" href="#id198">strokeDashOffset</a></h2>
+<p>While drawing using a dash pattern, specify distance into the
+dash pattern to start the dash (default 0):</p>
+<pre class="literal-block">
+void strokeDashOffset ( const double strokeDashOffset_ )
+
+double strokeDashOffset ( void ) const
+</pre>
+</div>
+<div class="section" id="strokelinecap">
+<h2><a class="toc-backref" href="#id199">strokeLineCap</a></h2>
+<p>Specify the shape to be used at the end of open subpaths when
+they are stroked. Values of LineCap are UndefinedCap, ButtCap,
+RoundCap, and SquareCap:</p>
+<pre class="literal-block">
+void strokeLineCap ( const LineCap lineCap_ )
+
+LineCap strokeLineCap ( void ) const
+</pre>
+</div>
+<div class="section" id="strokelinejoin">
+<h2><a class="toc-backref" href="#id200">strokeLineJoin</a></h2>
+<p>Specify the shape to be used at the corners of paths (or other
+vector shapes) when they are stroked. Values of LineJoin are
+UndefinedJoin, MiterJoin, RoundJoin, and BevelJoin:</p>
+<pre class="literal-block">
+void strokeLineJoin ( const LineJoin lineJoin_ )
+
+LineJoin strokeLineJoin ( void ) const
+</pre>
+</div>
+<div class="section" id="strokemiterlimit">
+<h2><a class="toc-backref" href="#id201">strokeMiterLimit</a></h2>
+<p>Specify miter limit. When two line segments meet at a sharp
+angle and miter joins have been specified for 'lineJoin', it is
+possible for the miter to extend far beyond the thickness of
+the line stroking the path. The miterLimit' imposes a limit on
+the ratio of the miter length to the 'lineWidth'. The default
+value of this parameter is 4:</p>
+<pre class="literal-block">
+void strokeMiterLimit ( const unsigned int miterLimit_ )
+
+unsigned int strokeMiterLimit ( void ) const
+</pre>
+</div>
+<div class="section" id="strokepattern">
+<h2><a class="toc-backref" href="#id202">strokePattern</a></h2>
+<p>Pattern image to use while stroking object outlines:</p>
+<pre class="literal-block">
+void strokePattern ( const Image &strokePattern_ )
+
+Image strokePattern ( void ) const
+</pre>
+</div>
+<div class="section" id="strokewidth">
+<h2><a class="toc-backref" href="#id203">strokeWidth</a></h2>
+<p>Stroke width for drawing vector objects (default one):</p>
+<pre class="literal-block">
+void strokeWidth ( const double strokeWidth_ )
+
+double strokeWidth ( void ) const
+</pre>
+</div>
+<div class="section" id="subimage">
+<h2><a class="toc-backref" href="#id204">subImage</a></h2>
+<p>Subimage of an image sequence:</p>
+<pre class="literal-block">
+void subImage ( const unsigned int subImage_ )
+
+unsigned int subImage ( void ) const
+</pre>
+</div>
+<div class="section" id="subrange">
+<h2><a class="toc-backref" href="#id205">subRange</a></h2>
+<p>Number of images relative to the base image:</p>
+<pre class="literal-block">
+void subRange ( const unsigned int subRange_ )
+
+unsigned int subRange ( void ) const
+</pre>
+</div>
+<div class="section" id="textencoding">
+<h2><a class="toc-backref" href="#id206">textEncoding</a></h2>
+<p>Annotation text encoding (e.g. "UTF-16"):</p>
+<pre class="literal-block">
+void textEncoding ( const std::string &encoding_ )
+
+std::string textEncoding ( void ) const
+</pre>
+</div>
+<div class="section" id="tilename">
+<h2><a class="toc-backref" href="#id207">tileName</a></h2>
+<p>Tile name:</p>
+<pre class="literal-block">
+void tileName ( const std::string &tileName_ )
+
+std::string tileName ( void ) const
+</pre>
+</div>
+<div class="section" id="totalcolors">
+<h2><a class="toc-backref" href="#id208">totalColors</a></h2>
+<p>Number of colors in the image:</p>
+<pre class="literal-block">
+unsigned long totalColors ( void )
+</pre>
+</div>
+<div class="section" id="transformorigin">
+<h2><a class="toc-backref" href="#id209">transformOrigin</a></h2>
+<p>Origin of coordinate system to use when annotating with text or drawing:</p>
+<pre class="literal-block">
+void transformOrigin ( const double x_,const double y_ )
+</pre>
+</div>
+<div class="section" id="transformrotation">
+<h2><a class="toc-backref" href="#id210">transformRotation</a></h2>
+<p>Rotation to use when annotating with text or drawing:</p>
+<pre class="literal-block">
+void transformRotation ( const double angle_ )
+</pre>
+</div>
+<div class="section" id="transformreset">
+<h2><a class="toc-backref" href="#id211">transformReset</a></h2>
+<p>Reset transformation parameters to default:</p>
+<pre class="literal-block">
+void transformReset ( void )
+</pre>
+</div>
+<div class="section" id="transformscale">
+<h2><a class="toc-backref" href="#id212">transformScale</a></h2>
+<p>Scale to use when annotating with text or drawing:</p>
+<pre class="literal-block">
+void transformScale ( const double sx_, const double sy_ )
+</pre>
+</div>
+<div class="section" id="transformskewx">
+<h2><a class="toc-backref" href="#id213">transformSkewX</a></h2>
+<p>Skew to use in X axis when annotating with text or drawing:</p>
+<pre class="literal-block">
+void transformSkewX ( const double skewx_ )
+</pre>
+</div>
+<div class="section" id="transformskewy">
+<h2><a class="toc-backref" href="#id214">transformSkewY</a></h2>
+<p>Skew to use in Y axis when annotating with text or drawing:</p>
+<pre class="literal-block">
+void transformSkewY ( const double skewy_ )
+</pre>
+</div>
+<div class="section" id="verbose">
+<h2><a class="toc-backref" href="#id215">verbose</a></h2>
+<p>Print detailed information about the image:</p>
+<pre class="literal-block">
+void verbose ( const bool verboseFlag_ )
+
+bool verbose ( void ) const
+</pre>
+</div>
+<div class="section" id="view">
+<h2><a class="toc-backref" href="#id216">view</a></h2>
+<p>FlashPix viewing parameters:</p>
+<pre class="literal-block">
+void view ( const std::string &view_ )
+
+std::string view ( void ) const
+</pre>
+</div>
+<div class="section" id="x11display">
+<h2><a class="toc-backref" href="#id217">x11Display</a></h2>
+<p>X11 display to display to, obtain fonts from, or to capture
+image from:</p>
+<pre class="literal-block">
+void x11Display ( const std::string &display_ )
+
+std::string x11Display ( void ) const
+</pre>
+</div>
+<div class="section" id="xresolution">
+<h2><a class="toc-backref" href="#id218">xResolution</a></h2>
+<p>x resolution of the image:</p>
+<pre class="literal-block">
+void xResolution ( const double x_resolution )
+double xResolution ( void ) const
+</pre>
+</div>
+<div class="section" id="yresolution">
+<h2><a class="toc-backref" href="#id219">yResolution</a></h2>
+<p>y resolution of the image:</p>
+<pre class="literal-block">
+void yResolution ( const double y_resolution )
+double yResolution ( void ) const
+</pre>
+</div>
+</div>
+<div class="section" id="low-level-image-pixel-access">
+<h1><a class="toc-backref" href="#id15">Low-Level Image Pixel Access</a></h1>
+<p>Image pixels (of type <a class="reference external" href="PixelPacket.html">PixelPacket</a> ) may be accessed directly via
+the Image Pixel Cache . The image pixel cache is a rectangular window
+into the actual image pixels (which may be in memory, memory-mapped
+from a disk file, or entirely on disk). Two interfaces exist to access
+the Image Pixel Cache. The interface described here (part of the Image
+class) supports only one view at a time. See the <a class="reference external" href="Pixels.html">Pixels</a> class for a
+more abstract interface which supports simultaneous pixel views (up to
+the number of rows). As an analogy, the interface described here
+relates to the <a class="reference external" href="Pixels.html">Pixels</a> class as stdio's gets() relates to
+fgets(). The <a class="reference external" href="Pixels.html">Pixels</a> class provides the more general form of the
+interface.</p>
+<p>Obtain existing image pixels via getPixels(). Create a new pixel
+region using setPixels().</p>
+<p>In order to ensure that only the current generation of the image is
+modified, the Image's modifyImage() method should be invoked to reduce
+the reference count on the underlying image to one. If this is not
+done, then it is possible for a previous generation of the image to be
+modified due to the use of reference counting when copying or
+constructing an Image.</p>
+<p>Depending on the capabilities of the operating system, and the
+relationship of the window to the image, the pixel cache may be a copy
+of the pixels in the selected window, or it may be the actual image
+pixels. In any case calling syncPixels() insures that the base image
+is updated with the contents of the modified pixel cache. The method
+readPixels() supports copying foreign pixel data formats into the
+pixel cache according to the QuantumTypes. The method writePixels()
+supports copying the pixels in the cache to a foreign pixel
+representation according to the format specified by QuantumTypes.</p>
+<p>The pixel region is effectively a small image in which the pixels may
+be accessed, addressed, and updated, as shown in the following
+example:</p>
+<p><img alt="pixel_cache" src="Cache.png" /></p>
+<pre class="literal-block">
+// Construct image based on an existing file
+Image image("cow.png");
+
+// Ensure that there are no other references to this image.
+image.modifyImage();
+
+// Set the image type to TrueColor DirectClass representation.
+image.type(TrueColorType);
+
+// Request pixel region with size 60x40, and top origin at 20x30
+int columns = 60;
+PixelPacket *pixel_cache = image.getPixels(20,30,columns,40);
+
+// Set pixel at column 5, and row 10 in the pixel cache to red.
+int column = 5;
+int row = 10;
+PixelPacket *pixel = pixel_cache+row*columns+column;
+*pixel = Color("red");
+
+// Save changes to underlying image .
+image.syncPixels();
+
+ // Save updated image to file.
+image.write("horse.png");
+</pre>
+<p>The image cache supports the following methods:</p>
+<div class="contents local topic" id="id8">
+<ul class="simple">
+<li><a class="reference internal" href="#getconstpixels" id="id220">getConstPixels</a></li>
+<li><a class="reference internal" href="#getindexes" id="id221">getIndexes</a></li>
+<li><a class="reference internal" href="#getconstindexes" id="id222">getConstIndexes</a></li>
+<li><a class="reference internal" href="#getpixels" id="id223">getPixels</a></li>
+<li><a class="reference internal" href="#setpixels" id="id224">setPixels</a></li>
+<li><a class="reference internal" href="#syncpixels" id="id225">syncPixels</a></li>
+<li><a class="reference internal" href="#readpixels" id="id226">readPixels</a></li>
+<li><a class="reference internal" href="#writepixels" id="id227">writePixels</a></li>
+</ul>
+</div>
+<div class="section" id="getconstpixels">
+<h2><a class="toc-backref" href="#id220">getConstPixels</a></h2>
+<p>Transfers read-only pixels from the image to the pixel cache as
+defined by the specified region:</p>
+<pre class="literal-block">
+const PixelPacket* getConstPixels ( const int x_, const int y_,
+ const unsigned int columns_,
+ const unsigned int rows_ ) const
+</pre>
+</div>
+<div class="section" id="getindexes">
+<h2><a class="toc-backref" href="#id221">getIndexes</a></h2>
+<p>Obtain mutable image pixel indexes (valid for PseudoClass images):</p>
+<pre class="literal-block">
+IndexPacket* getIndexes ( void )
+</pre>
+</div>
+<div class="section" id="getconstindexes">
+<h2><a class="toc-backref" href="#id222">getConstIndexes</a></h2>
+<p>Obtain immutable image pixel indexes (valid for PseudoClass images):</p>
+<pre class="literal-block">
+const IndexPacket* getConstIndexes ( void ) const
+</pre>
+</div>
+<div class="section" id="getpixels">
+<h2><a class="toc-backref" href="#id223">getPixels</a></h2>
+<p>Transfers pixels from the image to the pixel cache as defined by the
+specified region. Modified pixels may be subsequently transferred back
+to the image via syncPixels. This method is valid for DirectClass
+images:</p>
+<pre class="literal-block">
+PixelPacket* getPixels ( const int x_, const int y_,
+ const unsigned int columns_,
+ const unsigned int rows_ )
+</pre>
+</div>
+<div class="section" id="setpixels">
+<h2><a class="toc-backref" href="#id224">setPixels</a></h2>
+<p>Allocates a pixel cache region to store image pixels as defined by the
+region rectangle. This area is subsequently transferred from the
+pixel cache to the image via syncPixels:</p>
+<pre class="literal-block">
+PixelPacket* setPixels ( const int x_, const int y_,
+ const unsigned int columns_,
+ const unsigned int rows_ )
+</pre>
+</div>
+<div class="section" id="syncpixels">
+<h2><a class="toc-backref" href="#id225">syncPixels</a></h2>
+<p>Transfers the image cache pixels to the image:</p>
+<pre class="literal-block">
+void syncPixels ( void )
+</pre>
+</div>
+<div class="section" id="readpixels">
+<h2><a class="toc-backref" href="#id226">readPixels</a></h2>
+<p>Transfers one or more pixel components from a buffer or file into the
+image pixel cache of an image. Used to support image decoders:</p>
+<pre class="literal-block">
+void readPixels ( const QuantumType quantum_,
+ const unsigned char *source_ )
+</pre>
+</div>
+<div class="section" id="writepixels">
+<h2><a class="toc-backref" href="#id227">writePixels</a></h2>
+<p>Transfers one or more pixel components from the image pixel cache to a
+buffer or file. Used to support image encoders:</p>
+<pre class="literal-block">
+void writePixels ( const QuantumType quantum_,
+ unsigned char *destination_ )
+</pre>
+<p>Copyright © <a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">Bob Friesenhahn</a> 1999 - 2020</p>
+</div>
+</div>
+</div>
+</body>
+</html>
any Magick++ objects. This used to be optional, but now it is
absolutely required. This function initalizes semaphores and
configuration information necessary for the software to work
-correctly. Failing to invoke InitializeMagick() is likely to lead to
-a program crash or thrown assertion. If the program resides in the
-same directory as the GraphicsMagick files, then argv[0] may be passed
-as an argument so that GraphicsMagick knows where its files reside,
+correctly. Failing to invoke InitializeMagick() will lead to a
+program crash or thrown assertion. If the program resides in the same
+directory as the GraphicsMagick files, then argv[0] may be passed as
+an argument so that GraphicsMagick knows where its files reside,
otherwise NULL may be passed and GraphicsMagick will try to use other
-means (if necessary).
+means (if necessary). Even if an argument is passed, GraphicsMagick
+may use more reliable location information gleaned from the operating
+system, depending on build configuration.
The preferred way to allocate Image objects is via automatic
allocation (on the stack). There is no concern that allocating Image
void writePixels ( const QuantumType quantum_,
unsigned char *destination_ )
+Explicit Logging Configuration And Callbacks
+--------------------------------------------
+
+It is sometimes useful for a program to not have to depend on a
+configuration file for configuring logging ("tracing"). One reason
+for this is because until a logging configuration file has been found
+and loaded, default logging parameters are used. Another reason is
+that in some configurations, it is useful for each instance of a
+program to use its own logging configuration. To make this possible,
+the Magick++ library provides pass-through functions which allow
+setting the logging defaults *before* InitializeMagick() is called.
+Setting logging defaults after InitializeMagick() is called has no
+purpose since they will not be used.
+
+The following C++ pass-through functions are available"
+
+SetLogDefaultEventType
+++++++++++++++++++++++
+
+Specify default events which will result in a log event (comma-comma-separated list)::
+
+ void SetLogDefaultEventType(const std::string &events_)
+
+SetLogDefaultGenerations
+++++++++++++++++++++++++
+
+Specify default maximum log file generations before overwriting the first name::
+
+ void SetLogDefaultGenerations(const unsigned int generations_)
+
+SetLogDefaultLimit
+++++++++++++++++++
+
+Specify default maximum number of logging events before creating a new log file::
+
+ void SetLogDefaultLimit(const unsigned int limit_)
+
+SetLogDefaultFileName
++++++++++++++++++++++
+
+Specify the file name, or file path, to be written to for each log event::
+
+ void SetLogDefaultFileName(const std::string &filename_)
+
+SetLogDefaultFormat
+++++++++++++++++++++++
+
+Specify default log format using the same special format characters used by "log.mgk"::
+
+ void SetLogDefaultFormat(const std::string &format_)
+
+SetLogDefaultLogMethod
+++++++++++++++++++++++
+
+Specify default C-language call-back function to be invoked for each log event::
+
+ void SetLogDefaultLogMethod(const Magick::LogMethod method_)
+
+Note that it is hoped that better mechanisms will be provided in the future.
+
+SetLogDefaultOutputType
++++++++++++++++++++++++
+
+Specify default logging output type/destination::
+
+ void SetLogDefaultOutputType(const Magick::LogOutputType output_type_)
+
+Available LogOutputType enumerations are DisabledOutput,
+UndefinedOutput, StdoutOutput, StderrOutput, XMLFileOutput,
+TXTFileOutput, Win32DebugOutput, Win32EventlogOutput, and
+MethodOutput.
.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Magick::Image Data Structures</title>
<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="magick-image-data-structures">
<img alt="Figure showing Image class design" src="Image.png" style="width: 910px; height: 490px;" />
<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Magick::Image Data Structures</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="magick-image-data-structures">
+<h1 class="title">Magick::Image Data Structures</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>The class Magick::Image is a simple handle which points to a
+reference-counted image representation. This allows multiple
+Magick::Image instances to share the same image and attributes. At the
+point in time that the image data, or image attributes are modified
+and the current reference count is greater than one, the image data
+and attributes are copied to create a new image with a reference count
+of one and the reference count on the old image is decremented. If the
+reference count on the old image becomes zero, then the associated
+reference and data are deleted. This strategy represents a simple (but
+effective) form of garbage collection.</p>
+<img alt="Figure showing Image class design" src="Image.png" style="width: 910px; height: 490px;" />
+<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Magick::Montage Class</title>
<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="magick-montage-class">
<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Magick::Montage Class</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="magick-montage-class">
+<h1 class="title">Magick::Montage Class</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>A montage is a single image which is composed of thumbnail images
+composed in a uniform grid. The size of the montage image is
+determined by the size of the individual thumbnails and the number of
+rows and columns in the grid.</p>
+<p>The following illustration shows a montage consisting of three columns
+and two rows of thumbnails rendered on a gray background:</p>
+<img alt="Figure showing framed montage" class="align-center" src="montage-sample-framed.jpg" style="width: 378.0px; height: 238.0px;" />
+<p>Montages may be either "plain" (undecorated thumbnails) or "framed"
+(decorated thumbnails). In order to more easily understand the options
+supplied to MontageImages(), montage options are supplied by two
+different classes: Magick::Montage and Magick::MontageFramed.</p>
+<div class="section" id="plain-montages">
+<h1>Plain Montages</h1>
+<p>Magick::Montage is the base class to provide montage options and
+provides methods to set all options required to render simple
+(unframed) montages. See Magick::MontageFramedif you would like to
+create a framed montage.</p>
+<p>Unframed thumbnails consist of four components: the thumbnail image,
+the thumbnail border, an optional thumbnail shadow, and an optional
+thumbnail label area.</p>
+<img alt="Figure showing plain montage" class="align-center" src="thumbnail-anatomy-plain.jpg" style="width: 309.0px; height: 327.0px;" />
+<p>The following is the definition of the Magick::Montage class:</p>
+<pre class="literal-block">
+class Montage
+{
+public:
+ Montage( void );
+ virtual ~Montage( void );
+
+ // Specifies the background color that thumbnails are imaged upon.
+ void backgroundColor ( const Color &backgroundColor_ );
+ Color backgroundColor ( void ) const;
+
+ // Specifies the image composition algorithm for thumbnails. This
+ // controls the algorithm by which the thumbnail image is placed
+ // on the background. Use of OverCompositeOp is recommended for
+ // use with images that have transparency. This option may have
+ // negative side-effects for images without transparency.
+ void compose ( CompositeOperator compose_ );
+ CompositeOperator compose ( void ) const;
+
+ // Specifies the image filename to be used for the generated
+ // montage images. To handle the case were multiple montage images
+ // are generated, a printf-style format may be embedded within the
+ // filename. For example, a filename specification of
+ // image%02d.miff names the montage images as image00.miff,
+ // image01.miff, etc.
+ void fileName( const std::string &fileName_ );
+ std::string fileName( void ) const;
+
+ // Specifies the fill color to use for the label text.
+ void fillColor ( const Color &fill_ );
+ Color fillColor ( void ) const;
+
+ // Specifies the thumbnail label font.
+ void font ( const std::string &font_ );
+ std::string font ( void ) const;
+
+ // Specifies the size of the generated thumbnail.
+ void geometry ( const Geometry &geometry_ );
+ Geometry geometry ( void ) const;
+
+ // Specifies the thumbnail positioning within the specified
+ // geometry area. If the thumbnail is smaller in any dimension
+ // than the geometry, then it is placed according to this
+ // specification
+ void gravity ( GravityType gravity_ );
+ GravityType gravity ( void ) const;
+
+ // Specifies the format used for the image label. Special format
+ // characters may be embedded in the format string to include
+ // information about the image.
+ void label( const std::string &label_ );
+ std::string label( void ) const;
+
+ // Specifies the pen color to use for the label text (same as fill).
+ void penColor ( const Color &pen_ );
+ Color penColor ( void ) const;
+
+ // Specifies the thumbnail label font size.
+ void pointSize ( unsigned int pointSize_ );
+ unsigned int pointSize ( void ) const;
+
+ // Enable/disable drop-shadow on thumbnails.
+ void shadow ( bool shadow_ );
+ bool shadow ( void ) const;
+
+ // Specifies the stroke color to use for the label text .
+ void strokeColor ( const Color &stroke_ );
+ Color strokeColor ( void ) const;
+
+ // Specifies a texture image to use as montage background. The
+ // built-in textures "granite:" and "plasma:" are available. A
+ // texture is the same as a background image.
+ void texture ( const std::string &texture_ );
+ std::string texture ( void ) const;
+
+ // Specifies the maximum number of montage columns and rows in the
+ // montage. The montage is built by filling out all cells in a row
+ // before advancing to the next row. Once the montage has reached
+ // the maximum number of columns and rows, a new montage image is
+ // started.
+ void tile ( const Geometry &tile_ );
+ Geometry tile ( void ) const;
+
+ // Specifies the montage title
+ void title ( const std::string &title_ );
+ std::string title ( void ) const;
+
+ // Specifies a montage color to set transparent. This option can
+ // be set the same as the background color in order for the
+ // thumbnails to appear without a background when rendered on an
+ // HTML page. For best effect, ensure that the transparent color
+ // selected does not occur in the rendered thumbnail colors.
+ void transparentColor ( const Color &transparentColor_ );
+ Color transparentColor ( void ) const;
+
+};
+</pre>
+</div>
+<div class="section" id="framed-montages">
+<h1>Framed Montages</h1>
+<p>Magick::MontageFramed provides the means to specify montage options
+when it is desired to have decorative frames around the image
+thumbnails. MontageFramed inherits from Montage and therefore provides
+all the methods of Montage as well as those shown in the table
+"MontageFramed Methods".</p>
+<p>Framed thumbnails consist of four components: the thumbnail image, the
+thumbnail frame, the thumbnail border, an optional thumbnail shadow,
+and an optional thumbnail label area.</p>
+<img alt="Figure showing anatomy of a framed montage" class="align-center" src="thumbnail-anatomy-framed.jpg" style="width: 350.0px; height: 345.0px;" />
+<p>The following is the definition of the Magick::MontageFramed class:</p>
+<pre class="literal-block">
+class MontageFramed : public Montage
+{
+public:
+ MontageFramed ( void );
+ /* virtual */ ~MontageFramed ( void );
+
+ // Specifies the background color within the thumbnail frame.
+ void borderColor ( const Color &borderColor_ );
+ Color borderColor ( void ) const;
+
+ // Specifies the border (in pixels) to place between a thumbnail
+ // and its surrounding frame. This option only takes effect if
+ // thumbnail frames are enabled (via frameGeometry) and the
+ // thumbnail geometry specification doesn't also specify the
+ // thumbnail border width.
+ void borderWidth ( unsigned int borderWidth_ );
+ unsigned int borderWidth ( void ) const;
+
+ // Specifies the geometry specification for frame to place around
+ // thumbnail. If this parameter is not specified, then the montage
+ // is unframed.
+ void frameGeometry ( const Geometry &frame_ );
+ Geometry frameGeometry ( void ) const;
+
+ // Specifies the thumbnail frame color.
+ void matteColor ( const Color &matteColor_ );
+ Color matteColor ( void ) const;
+
+};
+</pre>
+<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Magick::PixelPacket Structure</title>
<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="magick-pixelpacket-structure">
the assocated IndexPacket.</p>
<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Magick::PixelPacket Structure</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="magick-pixelpacket-structure">
+<h1 class="title">Magick::PixelPacket Structure</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>The PixelPacket structure is used to represent DirectClass pixels in
+GraphicsMagick. GraphicsMagick may be compiled to support 32, 64, or
+even 128 bit pixels. The size of PixelPacket is controlled by the
+value of the QuantumDepth define. The default build depth is 32 bit
+pixels, which provides minumum ("web standard") accuracy, least memory
+consumption, and best performance. If deeper images need to be
+supported or more mathematical accuracy is desired, then
+GraphicsMagick may be compiled with QuantumDepth=16 or
+QuantumDepth=32.</p>
+<p>The following table shows the relationship between QuantumDepth, the
+type of Quantum, and the overall PixelPacket size:</p>
+<table border="1" class="docutils">
+<caption>Effect Of QuantumDepth Values</caption>
+<colgroup>
+<col width="28%" />
+<col width="35%" />
+<col width="37%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">QuantumDepth</th>
+<th class="head">Quantum Type</th>
+<th class="head">PixelPacket Size</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>8</td>
+<td>unsigned char</td>
+<td>32 bits</td>
+</tr>
+<tr><td>16</td>
+<td>unsigned short</td>
+<td>64 bits</td>
+</tr>
+<tr><td>32</td>
+<td>unsigned int</td>
+<td>128 bits</td>
+</tr>
+</tbody>
+</table>
+<p>The members of the PixelPacket structure, and their interpretation,
+are shown in the following table:</p>
+<table border="1" class="docutils">
+<caption>PixelPacket Structure Members</caption>
+<colgroup>
+<col width="10%" />
+<col width="10%" />
+<col width="19%" />
+<col width="31%" />
+<col width="28%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Member</th>
+<th class="head">Type</th>
+<th class="head" colspan="3">Interpretation</th>
+</tr>
+<tr><th class="head"></th>
+<th class="head"> </th>
+<th class="head">RGBColorspace</th>
+<th class="head">RGBColorspace + matte</th>
+<th class="head">CMYKColorspace</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>red</td>
+<td>Quantum</td>
+<td>Red</td>
+<td>Red</td>
+<td>Cyan</td>
+</tr>
+<tr><td>green</td>
+<td>Quantum</td>
+<td>Green</td>
+<td>Green</td>
+<td>Magenta</td>
+</tr>
+<tr><td>blue</td>
+<td>Quantum</td>
+<td>Blue</td>
+<td>Blue</td>
+<td>Yellow</td>
+</tr>
+<tr><td>opacity</td>
+<td>Quantum</td>
+<td>Ignored</td>
+<td>Opacity</td>
+<td>Black</td>
+</tr>
+</tbody>
+</table>
+<p>Note that opacity is stored inverted from most other software
+(i.e. maximum value is completely transparent and minum value is
+totally opaque).</p>
+<p>Note that for CMYKColorspace + matte (CMYKA), the opacity is stored in
+the assocated IndexPacket.</p>
+<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Magick::Pixels</title>
<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="magick-pixels">
</pre>
<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Magick::Pixels</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="magick-pixels">
+<h1 class="title">Magick::Pixels</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>The Pixels class provides efficient access to raw image pixels. Image
+pixels (of type <a class="reference external" href="PixelPacket.html">PixelPacket</a>) may be accessed
+directly via the Image Pixel Cache. The image pixel cache is a
+rectangular window (a view) into the actual image pixels (which may be
+in memory, memory-mapped from a disk file, or entirely on
+disk). Obtain existing image pixels via get(). Create a new pixel
+region using set().</p>
+<p>Depending on the capabilities of the operating system, and the
+relationship of the window to the image, the pixel cache may be a copy
+of the pixels in the selected window, or it may be the actual image
+pixels. In any case calling sync() insures that the base image is
+updated with the contents of the modified pixel cache. The method
+decode()supports copying foreign pixel data formats into the pixel
+cache according to the QuantumTypes. The method encode() supports
+copying the pixels in the cache to a foreign pixel representation
+according to the format specified by QuantumTypes.</p>
+<p>Setting a view using the Pixels class does not cause the number of
+references to the underlying image to be reduced to one. Therefore, in
+order to ensure that only the current generation of the image is
+modified, the Image's modifyImage() method should be invoked to reduce
+the reference count on the underlying image to one. If this is not
+done, then it is possible for a previous generation of the image to be
+modified due to the use of reference counting when copying or
+constructing an Image.</p>
+<p>The PixelPacket* returned by the set and get methods, and the
+IndexPacket* returned by the indexes method point to pixel data
+managed by the Pixels class. The Pixels class is responsible for
+releasing resources associated with the pixel view. This means that
+the pointer should never be passed to delete() or free().</p>
+<img alt="Figure showing pixel cache access" class="align-center" src="Cache.png" style="width: 254.0px; height: 218.0px;" />
+<!-- Probably want bottom alignment for above (but not accepted by -->
+<!-- currently installed rst2html.py parser) -->
+<p>The pixel view is a small image in which the pixels may be accessed,
+addressed, and updated, as shown in the following example, which
+produces an image similar to the one on the right (minus lines and
+text):</p>
+<pre class="literal-block">
+// Create base image
+Image image(Geometry(254,218), "white");
+
+// Set the image type to TrueColor DirectClass representation.
+image.type(TrueColorType);
+
+// Ensure that there is only one reference to underlying image
+// If this is not done, then image pixels will not be modified.
+image.modifyImage();
+
+// Allocate pixel view
+Pixels view(image);
+
+// Set all pixels in region anchored at 38x36, with size 160x230 to green.
+unsigned int columns = 196; unsigned int rows = 162;
+Color green("green");
+PixelPacket *pixels = view.get(38,36,columns,rows);
+for ( int row = 0; row < rows ; ++row )
+for ( int column = 0; column < columns ; ++column )
+*pixels++=green;
+
+// Save changes to image.
+view.sync();
+
+// Set all pixels in region anchored at 86x72, with size 108x67 to yellow.
+columns = 108; rows = 67;
+Color yellow("yellow");
+pixels = view.get(86,72,columns,rows);
+for ( int row = 0; row < rows ; ++row )
+for ( int column = 0; column < columns ; ++column )
+*pixels++=yellow;
+view.sync();
+
+// Set pixel at position 108,94 to red
+*(view.get(108,94,1,1)) = Color("red");
+
+// Save changes to image.
+view.sync();
+</pre>
+<p>The following is the definition of the Magick::Pixels class:</p>
+<pre class="literal-block">
+class Pixels
+{
+public:
+
+ // Construct pixel view using specified image.
+ Pixels( Magick::Image &image_ );
+
+ // Destroy pixel view
+ ~Pixels( void );
+
+ // Transfer pixels from the image to the pixel view as defined by
+ // the specified region. Modified pixels may be subsequently
+ // transferred back to the image via sync.
+ PixelPacket* get ( const int x_, const int y_,
+ const unsigned int columns_,const unsigned int rows_ );
+
+ // Transfer read-only pixels from the image to the pixel view as
+ // defined by the specified region.
+ const PixelPacket* getConst ( const int x_, const int y_,
+ const unsigned int columns_,
+ const unsigned int rows_ );
+
+ // Transfers the image view pixels to the image.
+ void sync ( void );
+
+ // Allocate a pixel view region to store image pixels as defined
+ // by the region rectangle. This area is subsequently transferred
+ // from the pixel view to the image via sync.
+ PixelPacket* set ( const int x_, const int y_,
+ const unsigned int columns_, const unsigned int rows_ );
+
+ // Return pixel colormap index array
+ IndexPacket* indexes ( void );
+
+ // Left ordinate of view
+ int x ( void ) const;
+
+ // Top ordinate of view
+ int y ( void ) const;
+
+ // Width of view
+ unsigned int columns ( void ) const;
+
+ // Height of view
+ unsigned int rows ( void ) const;
+
+};
+</pre>
+<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Magick::TypeMetric</title>
<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="magick-typemetric">
</pre>
<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Magick::TypeMetric</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="magick-typemetric">
+<h1 class="title">Magick::TypeMetric</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>The TypeMetric class provides the means to pass data from the Image
+class's TypeMetric method to the user. It provides information
+regarding font metrics such as ascent, descent, text width, text
+height, and maximum horizontal advance. The units of these font
+metrics are in pixels, and that the metrics are dependent on the
+current Image font (default Ghostscript's "Helvetica"), pointsize
+(default 12 points), and x/y resolution (default 72 DPI) settings.</p>
+<p>The pixel units may be converted to points (the standard
+resolution-independent measure used by the typesetting industry) via
+the following equation:</p>
+<pre class="literal-block">
+size_points = (size_pixels * 72)/resolution
+</pre>
+<p>where resolution is in dots-per-inch (DPI). This means that at the
+default image resolution, there is one pixel per point.</p>
+<p>Note that a font's pointsize is only a first-order approximation of
+the font height (ascender + descender) in points. The relationship
+between the specified pointsize and the rendered font height is
+determined by the font designer.</p>
+<p>See <a class="reference external" href="http://freetype.sourceforge.net/freetype2/docs/glyphs/index.html">FreeType Glyph Conventions</a>
+for a detailed description of font metrics related issues.</p>
+<p>The following is the definition of the Magick::TypeMetric class:</p>
+<pre class="literal-block">
+class MagickDLLDecl TypeMetric
+{
+ friend class Image;
+public:
+
+ TypeMetric ( void );
+ ~TypeMetric ( void );
+
+ // Ascent, the distance in pixels from the text baseline to the
+ // highest/upper grid coordinate used to place an outline point.
+ double ascent ( void ) const;
+
+ // Descent, the distance in pixels from the baseline to the lowest
+ // grid coordinate used to place an outline point. Always a
+ // negative value.
+ double descent ( void ) const;
+
+ // Text width in pixels.
+ double textWidth ( void ) const;
+
+ // Text height in pixels.
+ double textHeight ( void ) const;
+
+ // Maximum horizontal advance in pixels.
+ double maxHorizontalAdvance ( void ) const;
+
+};
+</pre>
+<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="magick-api-for-graphicsmagick">
<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Magick++ API for GraphicsMagick</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="magick-api-for-graphicsmagick">
+<h1 class="title">Magick++ API for GraphicsMagick</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#introduction" id="id1">Introduction</a></li>
+<li><a class="reference internal" href="#api" id="id2">API</a></li>
+<li><a class="reference internal" href="#obtaining-magick" id="id3">Obtaining Magick++</a></li>
+<li><a class="reference internal" href="#installation" id="id4">Installation</a></li>
+<li><a class="reference internal" href="#usage" id="id5">Usage</a></li>
+<li><a class="reference internal" href="#reporting-bugs" id="id6">Reporting Bugs</a></li>
+</ul>
+</div>
+<div class="section" id="introduction">
+<h1><a class="toc-backref" href="#id1">Introduction</a></h1>
+<p><em>Magick++</em> is the object-oriented C++ API to the <a class="reference external" href="../index.html">GraphicsMagick</a>
+image-processing library, the most comprehensive open-source image
+processing package available. Read the <a class="reference external" href="ChangeLog.html">ChangeLog</a> for <em>Magick++</em>.</p>
+<p><em>Magick++</em> supports an object model which is inspired by <a class="reference external" href="../perl.html">PerlMagick</a>.
+Images support implicit reference counting so that copy constructors and
+assignment incur almost no cost. The cost of actually copying an image
+(if necessary) is done just before modification and this copy is managed
+automatically by <em>Magick++</em>. De-referenced copies are automatically
+deleted. The image objects support value (rather than pointer) semantics
+so it is trivial to support multiple generations of an image in memory at
+one time.</p>
+<p><em>Magick++</em> provides integrated support for the <a class="reference external" href="http://www.sgi.com/tech/stl/">Standard Template
+Library</a> (<cite>STL</cite>) which is part of the standard C++ language so that
+the powerful containers available (e.g. <a class="reference external" href="http://www.sgi.com/tech/stl/Deque.html">deque</a>, <a class="reference external" href="http://www.sgi.com/tech/stl/Vector.html">vector</a>, <a class="reference external" href="http://www.sgi.com/tech/stl/List.html">list</a>, and
+<a class="reference external" href="http://www.sgi.com/tech/stl/Map.html">map</a>) can be used to write programs similar to those possible with
+PERL & <a class="reference external" href="../perl.html">PerlMagick</a>. STL-compatible template versions of
+GraphicsMagick's list-style operations are provided so that operations
+may be performed on multiple images stored in STL containers.</p>
+</div>
+<div class="section" id="api">
+<h1><a class="toc-backref" href="#id2">API</a></h1>
+<p><em>Magick++</em> provides a simple C++ API to the GraphicsMagick image
+processing library which supports reading and writing a huge number of
+image formats as well as supporting a broad spectrum of traditional image
+processing operations. The GraphicsMagick C API is complex and the data
+structures are not well documented. <em>Magick++</em> provides access to most of
+the features available from the C API but in a simple object-oriented and
+well-documented framework.</p>
+<p><em>Magick++</em> is intended to support commercial-grade application
+development. In order to avoid possible conflicts with the user's
+application, all symbols contained in <em>Magick++</em> (included by the header
+<Magick++.h>) are scoped to the namespace Magick. Symbols from the
+GraphicsMagick C library are imported under the MagickLib namespace to
+avoid possible conflicts and GraphicsMagick macros are only included
+within the <em>Magick++</em> implementation so they won't impact the user's
+application.</p>
+<p>The InitializeMagick() function <em>MUST</em> be invoked before constructing
+any Magick++ objects. This used to be optional, but now it is
+absolutely required. This function initalizes semaphores and
+configuration information necessary for the software to work
+correctly. Failing to invoke InitializeMagick() is likely to lead to
+a program crash or thrown assertion. If the program resides in the
+same directory as the GraphicsMagick files, then argv[0] may be passed
+as an argument so that GraphicsMagick knows where its files reside,
+otherwise NULL may be passed and GraphicsMagick will try to use other
+means (if necessary).</p>
+<p>The core class in <em>Magick++</em> is the <a class="reference external" href="Image.html">Image</a> class. The <a class="reference external" href="Image.html">Image</a> class
+provides methods to manipulate a single image frame (e.g. a JPEG image).
+Standard Template Library (<a class="reference external" href="STL.html">STL</a>) compatible algorithms and function
+objects are provided in order to manipulate multiple image frames or to
+read and write file formats which support multiple image frames (e.g. GIF
+animations, MPEG animations, and Postscript files).</p>
+<p>The <a class="reference external" href="Image.html">Image</a> class supports reference-counted memory management which
+supports the semantics of an intrinsic variable type (e.g. 'int') with an
+extremely efficient operator = and copy constructor (only a pointer is
+assigned) while ensuring that the image data is replicated as required so
+that it the image may be modified without impacting earlier generations.
+Since the <a class="reference external" href="Image.html">Image</a> class manages heap memory internally, images are best
+allocated via C++ automatic (stack-based) memory allocation. This support
+allows most programs using <em>Magick++</em> to be written without using any
+pointers, simplifying the implementation and avoiding the risks of using
+pointers. When a program uses automatic memory allocation to allocate
+<em>Magick++</em> images, that aspect of the program becomes naturally
+exception-safe and thread-safe.</p>
+<p>The image class uses a number of supportive classes in order to specify
+arguments. Colors are specified via the <a class="reference external" href="Color.html">Color</a> class. Colors specified
+in X11-style string form are implicitly converted to the <a class="reference external" href="Color.html">Color</a> class.
+Geometry arguments (those specifying width, height, and/or x and y
+offset) are specified via the <a class="reference external" href="Geometry.html">Geometry</a> class. Similar to the <a class="reference external" href="Color.html">Color</a>
+class, geometries specified as an X11-style string are implicitly
+converted to the <a class="reference external" href="Geometry.html">Geometry</a> class. Two dimensional drawable objects are
+specified via the <a class="reference external" href="Drawable.html">Drawable</a> class. Drawable objects may be provided as
+a single object or as a list of objects to be rendered using the current
+image options. <a class="reference external" href="Montage.html">Montage</a> options (a montage is a rendered grid of
+thumbnails in one image) are specified via the <a class="reference external" href="Montage.html">Montage</a> class.</p>
+<p>Errors are reported using C++ exceptions derived from the <a class="reference external" href="Exception.html">Exception</a>
+class, which is itself derived from the standard C++ exception class.
+Exceptions are reported synchronous with the operation and are caught by
+the first matching try block as the stack is unraveled. This allows a
+clean coding style in which multiple related <em>Magick++</em> commands may be
+executed with errors handled as a unit rather than line-by-line. Since
+the <a class="reference external" href="Image.html">Image</a> object provides reference-counted memory management,
+unreferenced images on the stack are automatically cleaned up, avoiding
+the potential for memory leaks.</p>
+<p>For ease of access, the documentation for the available user-level
+classes is available via the following table:</p>
+<table border="1" class="docutils">
+<caption><em>Magick++</em> User-Level Classes</caption>
+<colgroup>
+<col width="18%" />
+<col width="82%" />
+</colgroup>
+<tbody valign="top">
+<tr><td><a class="reference external" href="Blob.html">Blob</a></td>
+<td>Binary Large OBject container.</td>
+</tr>
+<tr><td><a class="reference external" href="CoderInfo.html">CoderInfo</a></td>
+<td>Report information about supported image formats (use with
+<a class="reference external" href="STL.html#coderInfoList">coderInfoList</a>())</td>
+</tr>
+<tr><td><a class="reference external" href="Color.html">Color</a></td>
+<td>Color specification.</td>
+</tr>
+<tr><td><a class="reference external" href="Drawable.html">Drawable</a></td>
+<td>Drawable shape (for input to 'draw').</td>
+</tr>
+<tr><td><a class="reference external" href="Exception.html">Exception</a></td>
+<td>C++ exception objects.</td>
+</tr>
+<tr><td><a class="reference external" href="Geometry.html">Geometry</a></td>
+<td>Geometry specification.</td>
+</tr>
+<tr><td><a class="reference external" href="Image.html">Image</a></td>
+<td>Image frame. This is the primary object in <em>Magick++</em>.</td>
+</tr>
+<tr><td><a class="reference external" href="Montage.html">Montage</a></td>
+<td>Montage options for montageImages().</td>
+</tr>
+<tr><td><a class="reference external" href="Pixels.html">Pixels</a></td>
+<td>Low-level access to image pixels.</td>
+</tr>
+<tr><td><a class="reference external" href="STL.html">STL</a></td>
+<td>STL algorithms and function objects for operating on
+containers of image frames.</td>
+</tr>
+<tr><td><a class="reference external" href="TypeMetric.html">TypeMetric</a></td>
+<td>Container for font type metrics (use with
+<a class="reference external" href="Image.html#fonttypemetrics">Image::fontTypeMetrics</a>).</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="obtaining-magick">
+<h1><a class="toc-backref" href="#id3">Obtaining Magick++</a></h1>
+<p><em>Magick++</em> is included as part of <a class="reference external" href="../index.html">GraphicsMagick</a> source releases and may
+be retrieved via <a class="reference external" href="../download.html">ftp</a> or <a class="reference external" href="../Hg.html">Mercurial</a>.</p>
+</div>
+<div class="section" id="installation">
+<h1><a class="toc-backref" href="#id4">Installation</a></h1>
+<p>Installation is very easy since <em>Magick++</em> is part of <a class="reference external" href="../index.html">GraphicsMagick</a> and
+is built by default. Once <a class="reference external" href="../index.html">GraphicsMagick</a> is built, then <em>Magick++</em> is
+available for use.</p>
+</div>
+<div class="section" id="usage">
+<h1><a class="toc-backref" href="#id5">Usage</a></h1>
+<p>A helper script named <em>GraphicsMagick++-config</em> is installed in the same
+directory as the GraphicsMagick <em>gm</em> program under Unix which assists
+with recalling compilation options required to compile and link programs
+which depend on <em>Magick++</em>. For example, the following command will
+compile and link the source file example.cpp to produce the executable
+example (notice that quotes are backward quotes):</p>
+<pre class="literal-block">
+c++ -o example example.cpp `GraphicsMagick++-config --cppflags --cxxflags
+ --ldflags --libs`
+</pre>
+<p>Windows users may get started by manually editing a project file for one
+of the <em>Magick++</em> demo programs.</p>
+<p>It is necessary to initialize the GraphicsMagick library prior to
+using the <em>Magick++</em> library. This initialization is performed by
+passing the path to the GraphicsMagick DLLs (assumed to be in the same
+directory as your program) to the InitializeMagick() function
+call. This is commonly performed by providing the path to your program
+(argv[0]) as shown in the following example:</p>
+<pre class="literal-block">
+int main( int /*argc*/, char ** argv)
+{
+ InitializeMagick(*argv);
+</pre>
+<p>If you don't have the path to your executable, then pass NULL and
+usually the library will be found anyway. Besides helping to find the
+GraphicsMagick DLL/library and configuration files, InitializeMagick()
+initializes all of the semaphores and data necessary for a
+multi-threaded program to be completely thread safe. This step used
+to be optional, but it is now absolutely required. Failure to
+initialize GraphicsMagick will result in an application crash.</p>
+</div>
+<div class="section" id="reporting-bugs">
+<h1><a class="toc-backref" href="#id6">Reporting Bugs</a></h1>
+<p>Please report any bugs via the <a class="reference external" href="http://sourceforge.net/projects/graphicsmagick/">GraphicsMagick Bug Tracker</a>. Questions
+regarding usage should be directed to <a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">Bob Friesenhahn</a>.</p>
+<p>Copyright © Bob Friesenhahn 1999 - 2020</p>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick News</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-news">
<!-- -*- mode: rst -*- -->
<!-- This text is in reStucturedText format, so it may look a bit odd. -->
<!-- See http://docutils.sourceforge.net/rst.html for details. -->
-<p>This file was last updated to reflect changes up to February 23, 2020</p>
+<p>This file was last updated to reflect changes up to December 26, 2020</p>
<p>Please note that this file records news for the associated development
branch and that each development branch has its own NEWS file. See the
ChangeLog file, and/or the Mercurial changesets, for full details.</p>
release and not attempt to patch older releases.</p>
<div class="contents local topic" id="contents">
<ul class="simple">
-<li><a class="reference internal" href="#february-23-2020" id="id2">1.3.35 (February 23, 2020)</a></li>
-<li><a class="reference internal" href="#december-24-2019" id="id3">1.3.34 (December 24, 2019)</a></li>
-<li><a class="reference internal" href="#july-20-2019" id="id4">1.3.33 (July 20, 2019)</a></li>
-<li><a class="reference internal" href="#june-15-2019" id="id5">1.3.32 (June 15, 2019)</a></li>
-<li><a class="reference internal" href="#november-17-2018" id="id6">1.3.31 (November 17, 2018)</a></li>
-<li><a class="reference internal" href="#june-23-2018" id="id7">1.3.30 (June 23, 2018)</a></li>
-<li><a class="reference internal" href="#april-29-2018" id="id8">1.3.29 (April 29, 2018)</a></li>
-<li><a class="reference internal" href="#january-20-2018" id="id9">1.3.28 (January 20, 2018)</a></li>
-<li><a class="reference internal" href="#december-9-2017" id="id10">1.3.27 (December 9, 2017)</a></li>
-<li><a class="reference internal" href="#july-4-2017" id="id11">1.3.26 (July 4, 2017)</a></li>
-<li><a class="reference internal" href="#september-5-2016" id="id12">1.3.25 (September 5, 2016)</a></li>
-<li><a class="reference internal" href="#may-30-2016" id="id13">1.3.24 (May 30, 2016)</a></li>
-<li><a class="reference internal" href="#november-7-2015" id="id14">1.3.23 (November 7, 2015)</a></li>
-<li><a class="reference internal" href="#october-4-2015" id="id15">1.3.22 (October 4, 2015)</a></li>
-<li><a class="reference internal" href="#february-28-2015" id="id16">1.3.21 (February 28, 2015)</a></li>
-<li><a class="reference internal" href="#august-16-2014" id="id17">1.3.20 (August 16, 2014)</a></li>
-<li><a class="reference internal" href="#december-31-2013" id="id18">1.3.19 (December 31, 2013)</a></li>
-<li><a class="reference internal" href="#march-10-2013" id="id19">1.3.18 (March 10, 2013)</a></li>
-<li><a class="reference internal" href="#october-13-2012" id="id20">1.3.17 (October 13, 2012)</a></li>
-<li><a class="reference internal" href="#june-24-2012" id="id21">1.3.16 (June 24, 2012)</a></li>
-<li><a class="reference internal" href="#april-28-2012" id="id22">1.3.15 (April 28, 2012)</a></li>
-<li><a class="reference internal" href="#february-25-2012" id="id23">1.3.14 (February 25, 2012)</a></li>
-<li><a class="reference internal" href="#december-24-2011" id="id24">1.3.13 (December 24, 2011)</a></li>
-<li><a class="reference internal" href="#march-8-2010" id="id25">1.3.12 (March 8, 2010)</a></li>
-<li><a class="reference internal" href="#february-21-2010" id="id26">1.3.11 (February 21, 2010)</a></li>
-<li><a class="reference internal" href="#february-10-2010" id="id27">1.3.10 (February 10, 2010)</a></li>
-<li><a class="reference internal" href="#february-4-2010" id="id28">1.3.9 (February 4, 2010)</a></li>
-<li><a class="reference internal" href="#january-21-2010" id="id29">1.3.8 (January 21, 2010)</a></li>
-<li><a class="reference internal" href="#september-17-2009" id="id30">1.3.7 (September 17, 2009)</a></li>
-<li><a class="reference internal" href="#july-25-2009" id="id31">1.3.6 (July 25, 2009)</a></li>
-<li><a class="reference internal" href="#january-26-2009" id="id32">1.3.5 (January 26, 2009)</a></li>
-<li><a class="reference internal" href="#january-13-2009" id="id33">1.3.4 (January 13, 2009)</a></li>
-<li><a class="reference internal" href="#december-9-2008" id="id34">1.3.3 (December 9, 2008)</a></li>
-<li><a class="reference internal" href="#november-29-2008" id="id35">1.3.2 (November 29, 2008)</a></li>
-<li><a class="reference internal" href="#november-17-2008" id="id36">1.3.1 (November 17, 2008)</a></li>
-<li><a class="reference internal" href="#november-9-2008" id="id37">1.3 (November 9, 2008)</a></li>
-<li><a class="reference internal" href="#april-29-2008" id="id38">1.2 (April 29, 2008)</a></li>
-<li><a class="reference internal" href="#released-april-4-2004" id="id39">1.1 (Released April 4, 2004)</a></li>
-<li><a class="reference internal" href="#released-in-may-2003" id="id40">1.0 (Released in May, 2003)</a></li>
+<li><a class="reference internal" href="#december-26-2020" id="id2">1.3.36 (December 26, 2020)</a></li>
+<li><a class="reference internal" href="#february-23-2020" id="id3">1.3.35 (February 23, 2020)</a></li>
+<li><a class="reference internal" href="#december-24-2019" id="id4">1.3.34 (December 24, 2019)</a></li>
+<li><a class="reference internal" href="#july-20-2019" id="id5">1.3.33 (July 20, 2019)</a></li>
+<li><a class="reference internal" href="#june-15-2019" id="id6">1.3.32 (June 15, 2019)</a></li>
+<li><a class="reference internal" href="#november-17-2018" id="id7">1.3.31 (November 17, 2018)</a></li>
+<li><a class="reference internal" href="#june-23-2018" id="id8">1.3.30 (June 23, 2018)</a></li>
+<li><a class="reference internal" href="#april-29-2018" id="id9">1.3.29 (April 29, 2018)</a></li>
+<li><a class="reference internal" href="#january-20-2018" id="id10">1.3.28 (January 20, 2018)</a></li>
+<li><a class="reference internal" href="#december-9-2017" id="id11">1.3.27 (December 9, 2017)</a></li>
+<li><a class="reference internal" href="#july-4-2017" id="id12">1.3.26 (July 4, 2017)</a></li>
+<li><a class="reference internal" href="#september-5-2016" id="id13">1.3.25 (September 5, 2016)</a></li>
+<li><a class="reference internal" href="#may-30-2016" id="id14">1.3.24 (May 30, 2016)</a></li>
+<li><a class="reference internal" href="#november-7-2015" id="id15">1.3.23 (November 7, 2015)</a></li>
+<li><a class="reference internal" href="#october-4-2015" id="id16">1.3.22 (October 4, 2015)</a></li>
+<li><a class="reference internal" href="#february-28-2015" id="id17">1.3.21 (February 28, 2015)</a></li>
+<li><a class="reference internal" href="#august-16-2014" id="id18">1.3.20 (August 16, 2014)</a></li>
+<li><a class="reference internal" href="#december-31-2013" id="id19">1.3.19 (December 31, 2013)</a></li>
+<li><a class="reference internal" href="#march-10-2013" id="id20">1.3.18 (March 10, 2013)</a></li>
+<li><a class="reference internal" href="#october-13-2012" id="id21">1.3.17 (October 13, 2012)</a></li>
+<li><a class="reference internal" href="#june-24-2012" id="id22">1.3.16 (June 24, 2012)</a></li>
+<li><a class="reference internal" href="#april-28-2012" id="id23">1.3.15 (April 28, 2012)</a></li>
+<li><a class="reference internal" href="#february-25-2012" id="id24">1.3.14 (February 25, 2012)</a></li>
+<li><a class="reference internal" href="#december-24-2011" id="id25">1.3.13 (December 24, 2011)</a></li>
+<li><a class="reference internal" href="#march-8-2010" id="id26">1.3.12 (March 8, 2010)</a></li>
+<li><a class="reference internal" href="#february-21-2010" id="id27">1.3.11 (February 21, 2010)</a></li>
+<li><a class="reference internal" href="#february-10-2010" id="id28">1.3.10 (February 10, 2010)</a></li>
+<li><a class="reference internal" href="#february-4-2010" id="id29">1.3.9 (February 4, 2010)</a></li>
+<li><a class="reference internal" href="#january-21-2010" id="id30">1.3.8 (January 21, 2010)</a></li>
+<li><a class="reference internal" href="#september-17-2009" id="id31">1.3.7 (September 17, 2009)</a></li>
+<li><a class="reference internal" href="#july-25-2009" id="id32">1.3.6 (July 25, 2009)</a></li>
+<li><a class="reference internal" href="#january-26-2009" id="id33">1.3.5 (January 26, 2009)</a></li>
+<li><a class="reference internal" href="#january-13-2009" id="id34">1.3.4 (January 13, 2009)</a></li>
+<li><a class="reference internal" href="#december-9-2008" id="id35">1.3.3 (December 9, 2008)</a></li>
+<li><a class="reference internal" href="#november-29-2008" id="id36">1.3.2 (November 29, 2008)</a></li>
+<li><a class="reference internal" href="#november-17-2008" id="id37">1.3.1 (November 17, 2008)</a></li>
+<li><a class="reference internal" href="#november-9-2008" id="id38">1.3 (November 9, 2008)</a></li>
+<li><a class="reference internal" href="#april-29-2008" id="id39">1.2 (April 29, 2008)</a></li>
+<li><a class="reference internal" href="#released-april-4-2004" id="id40">1.1 (Released April 4, 2004)</a></li>
+<li><a class="reference internal" href="#released-in-may-2003" id="id41">1.0 (Released in May, 2003)</a></li>
+</ul>
+</div>
+<div class="section" id="december-26-2020">
+<h1><a class="toc-backref" href="#id2">1.3.36 (December 26, 2020)</a></h1>
+<p>Special Issues:</p>
+<ul class="simple">
+<li>None</li>
+</ul>
+<p>Security Fixes:</p>
+<ul class="simple">
+<li>GraphicsMagick is participating in Google's oss-fuzz project due to
+the contributions and assistance of Alex Gaynor. Since February 4
+2018, 454 issues have been opened by oss-fuzz (some of which were
+benign build issues such as SourceForge Mercurial not working
+correctly) and 7 issues remain open (all of which are marked in an
+"unreproducible" state). The issues list is available at
+<a class="reference external" href="https://bugs.chromium.org/p/oss-fuzz/issues/list">https://bugs.chromium.org/p/oss-fuzz/issues/list</a> under search term
+"graphicsmagick". Issues are available for anyone to view and
+duplicate if they have been in "Verified" status for 30 days, or if
+they have been in "New" status for 90 days. Please consult the
+GraphicsMagick ChangeLog file, Mercurial repository commit log, and
+the oss-fuzz issues list for details.</li>
+<li>WPG: Fixes for heap buffer overflow.</li>
+</ul>
+<p>Bug fixes:</p>
+<ul class="simple">
+<li>ConstituteImage(): Set image depth appropriately based on the
+storage size specified by StorageType and QuantumDepth.</li>
+<li>GetImageBoundingBox(): Fix problem that MagickTrimImage with extreme
+fuzz values could produce an image with negative width.</li>
+<li>ImageToFile(): Improve error handling to avoid possible deferred
+deletion of temporary files, causing unexpected excessive use of
+temporary file space.</li>
+<li>JNG: Add validations for alpha compression method values and use
+this information to enforce decoding using the appropriate
+sub-format (rather than auto-detecting the format). Also, address
+memory leaks which may occur if the sub-decoder does something other
+than was expected.</li>
+<li>MagickCondSignal(): Improvements to conditional signal handler
+registration (which avoids over-riding signal handlers previously
+registered by an API user).</li>
+<li>ModifyCache(): Fix memory leak.</li>
+<li>ReadCacheIndexes(): Don't blunder into accessing a null pointer if
+the using code has ignored a previous error report bubled-up from
+SetNexus().</li>
+<li>MNG: When doing image scaling and the image width or height is 1
+then always use simple pixel replication as per the MNG
+specification.</li>
+<li>MVG: Fixes to 'push clip-path foo' and 'pop clip-path foo' parsing
+to eliminate a class of malign behavior.</li>
+<li>MVG: Place an aribrary limit on stroke dash polygon unit maximum
+length in order to avoid possibly rendering "forever".</li>
+<li>PCL: No longer attempt to handle reading HP PCL format via the
+external 'hp2xx' program since it seems worthless for that task.</li>
+<li>PS: Fix corrupt image when writing PseudoClass image with a colormap
+larger than two entries as bilevel.</li>
+<li>SVG: Memory leak fixes.</li>
+<li>SVG reader: Now support 'ping' support so the identify command works
+as expected.</li>
+<li>TIFF: WEBP compression only supports a depth of 8 so force that
+value.</li>
+<li>Wand MagickSetSamplingFactors(): Correct formatting of sampling
+factors string.</li>
+</ul>
+<p>New Features:</p>
+<ul class="simple">
+<li>Logging is now fully programmable.</li>
+<li>DPX format: Support dpx:swap-samples-read define which behaves
+similar to dpx:swap-samples, but is only applied when reading, as
+well as dpx:swap-samples-write, which is only applied when
+writing. This provides for use when there is both reading and
+writing in the same operation (otherwise the final result was no
+effect!).</li>
+</ul>
+<p>API Updates:</p>
+<ul class="simple">
+<li>magick/api.h: Add "magick/enum_strings.h" to API headers.</li>
+<li>New log settings accessor C functions: SetLogDefaultFileName(),
+SetLogDefaultFormat(), SetLogDefaultOutputType(),
+SetLogDefaultLogMethod(), SetLogDefaultLimit(),
+SetLogDefaultGenerations(), SetLogDefaultEventType(). These
+functions allow a program to set the same parameters which may be
+set by loading a "log.mgk" function. If a default logging callback
+was provided via SetLogDefaultLogMethod() such that MethodOutput is
+used, then the search for a "log.mgk" is avoided entirely.</li>
+<li>New log settings accessor C++ functions: SetLogDefaultFileName(),
+SetLogDefaultFormat(), SetLogDefaultOutputType(),
+SetLogDefaultLogMethod(), SetLogDefaultLimit(),
+SetLogDefaultGenerations(), SetLogDefaultEventType(). These C++
+functions just pass through to the equivalent C functions and
+provide the same benefits.</li>
+</ul>
+<p>Feature improvements:</p>
+<ul class="simple">
+<li>A simple resource-limit respecting memory allocator has been
+developed for internal use wherever arbitrarily-large amounts of
+memory might be requested. This will gradually be added wherever it
+appears to be needed. The memory resource limits are at the overall
+process level. The MVG/SVG rendering code is updated to use this
+new allocator. Almost all of the coders (image format
+readers/writers) have now been updated to use this new allocator.
+This means that '-limit memory 300MB' would be more complete and
+meaningful now. Temporary allocations by the image processing
+algorithms (other than for the images themselves) are still not
+accounted for in the resource limiting.</li>
+<li>MVG Renderer / DrawImage(): Use resource-limit respecting memory
+allocators for remaining large memory allocations.</li>
+<li>PNG writer: Don't skip optional Exif identifier code if it isn't present.</li>
+<li>DPX reader/writer: decode/encode of 10-bit packed DPX is now twice
+as fast due to code simplification.</li>
+<li>TIFF reader: Apply the same resource limits to TIFF tile sizes as
+apply to the image itself.</li>
+</ul>
+<p>Windows Delegate Updates/Additions:</p>
+<ul class="simple">
+<li>None</li>
+</ul>
+<p>Build Changes:</p>
+<ul class="simple">
+<li>configure.ac: Update syntax to avoid using deprecated syntax
+according to Autoconf 2.69. Also added copious m4 quoting.</li>
+<li>Magick++ Drawable base class no longer uses std::unary_function when
+compiled using C++'17 or later, since this feature has been removed
+from the language.</li>
+<li>Support the configure option --disable-compressed-files to disable
+automatic decompress of gzip and bzip2 compressed files (e.g. files
+with extension 'gz' or 'bz2', and sometimes 'svgz', but sometimes
+posing as some other format). It turns out that there are some
+extremely compressed files (e.g. over 1000x compression ratio) which
+can take a long time to decompress and produce large temporary
+files. We currently normally wait for the whole file to be
+decompressed before decoding it. The only exception is for coders
+with native 'blob' support and which do not require seeking, and
+that the user forced forced the format by adding a magick prefix
+like "DPX:file.dpx" to avoid the automatic file format detection.</li>
+<li>Support the configure option --without-gs to disable reading PS,
+EPS, and PDF formats via an external Ghostscript delegate program.
+This corresponds to the HasGS definition in the source code.</li>
+<li>Support the configure option --without-gdi32 to support disabling
+use of the Microsoft Windows gdi32 library if it is not wanted.</li>
+<li>The Automake-based test suite now applies a memory limit of 128MB
+for the Q8, or 256MB for the Q16, or 512MB for the Q32 build, as
+well as setting a disk space limit of 0. The limits place an upper
+bound on the resources required, while assuring that tests do pass
+with resource limits applied, while also assuring that disk-based
+pixel-cache files are not used.</li>
+</ul>
+<p>Behavior Changes:</p>
+<ul class="simple">
+<li>Previously the formatting settings from "log.mgk" were only used
+when writing to a file, or to the console, via a file handle. Now
+the log formatting has been normalized so that the settings provided
+by "log.mgk" (or SetLogDefaultFormat()) will always be used. It is
+possible this may result in some formatting changes.</li>
+<li>In the Windows Visual Studio build, the ProvideDllMain option is now
+disabled by default (can still be enabled) since it causes
+InitializeMagick() to be invoked prior to when the program's main()
+routine is called, thereby blocking configuration activities or use
+of InitializeMagickEx(). With this change it is even more
+imperative that InitializeMagick() be explicitly invoked by all
+programs using GraphicsMagick.</li>
</ul>
</div>
<div class="section" id="february-23-2020">
-<h1><a class="toc-backref" href="#id2">1.3.35 (February 23, 2020)</a></h1>
+<h1><a class="toc-backref" href="#id3">1.3.35 (February 23, 2020)</a></h1>
<p>Special Issues:</p>
<ul class="simple">
<li>It has been discovered that the 'ICU' library (a perhaps 30MB C++
</ul>
</div>
<div class="section" id="december-24-2019">
-<h1><a class="toc-backref" href="#id3">1.3.34 (December 24, 2019)</a></h1>
+<h1><a class="toc-backref" href="#id4">1.3.34 (December 24, 2019)</a></h1>
<p>Special Issues:</p>
<ul class="simple">
<li>It has been discovered that the 'ICU' library (a perhaps 30MB C++
</ul>
</div>
<div class="section" id="july-20-2019">
-<h1><a class="toc-backref" href="#id4">1.3.33 (July 20, 2019)</a></h1>
+<h1><a class="toc-backref" href="#id5">1.3.33 (July 20, 2019)</a></h1>
<p>Special Issues:</p>
<ul class="simple">
<li>It has been discovered that the 'ICU' library (a perhaps 30MB C++
</ul>
</div>
<div class="section" id="june-15-2019">
-<h1><a class="toc-backref" href="#id5">1.3.32 (June 15, 2019)</a></h1>
+<h1><a class="toc-backref" href="#id6">1.3.32 (June 15, 2019)</a></h1>
<p>Special Issues:</p>
<ul class="simple">
<li>It has been discovered that the 'ICU' library (a perhaps 30MB C++
</ul>
</div>
<div class="section" id="november-17-2018">
-<h1><a class="toc-backref" href="#id6">1.3.31 (November 17, 2018)</a></h1>
+<h1><a class="toc-backref" href="#id7">1.3.31 (November 17, 2018)</a></h1>
<p>Special Issues:</p>
<ul class="simple">
<li>Firmware and operating system updates to address the Spectre
</ul>
</div>
<div class="section" id="june-23-2018">
-<h1><a class="toc-backref" href="#id7">1.3.30 (June 23, 2018)</a></h1>
+<h1><a class="toc-backref" href="#id8">1.3.30 (June 23, 2018)</a></h1>
<p>Special Issues:</p>
<ul class="simple">
<li>None</li>
</ul>
</div>
<div class="section" id="april-29-2018">
-<h1><a class="toc-backref" href="#id8">1.3.29 (April 29, 2018)</a></h1>
+<h1><a class="toc-backref" href="#id9">1.3.29 (April 29, 2018)</a></h1>
<p>Special Issues:</p>
<ul class="simple">
<li>None</li>
</ul>
</div>
<div class="section" id="january-20-2018">
-<h1><a class="toc-backref" href="#id9">1.3.28 (January 20, 2018)</a></h1>
+<h1><a class="toc-backref" href="#id10">1.3.28 (January 20, 2018)</a></h1>
<p>Special Issues:</p>
<ul class="simple">
<li>None</li>
</ul>
</div>
<div class="section" id="december-9-2017">
-<h1><a class="toc-backref" href="#id10">1.3.27 (December 9, 2017)</a></h1>
+<h1><a class="toc-backref" href="#id11">1.3.27 (December 9, 2017)</a></h1>
<p>Special Issues:</p>
<ul class="simple">
<li>None</li>
</ul>
</div>
<div class="section" id="july-4-2017">
-<h1><a class="toc-backref" href="#id11">1.3.26 (July 4, 2017)</a></h1>
+<h1><a class="toc-backref" href="#id12">1.3.26 (July 4, 2017)</a></h1>
<p>Special Issues:</p>
<ul class="simple">
<li>None</li>
</ul>
</div>
<div class="section" id="september-5-2016">
-<h1><a class="toc-backref" href="#id12">1.3.25 (September 5, 2016)</a></h1>
+<h1><a class="toc-backref" href="#id13">1.3.25 (September 5, 2016)</a></h1>
<p>Special Issues:</p>
<ul class="simple">
<li>None</li>
</ul>
</div>
<div class="section" id="may-30-2016">
-<h1><a class="toc-backref" href="#id13">1.3.24 (May 30, 2016)</a></h1>
+<h1><a class="toc-backref" href="#id14">1.3.24 (May 30, 2016)</a></h1>
<p>Special Issues:</p>
<ul class="simple">
<li>A shell exploit (CVE-2016-5118) was discovered associated with a
</ul>
</div>
<div class="section" id="november-7-2015">
-<h1><a class="toc-backref" href="#id14">1.3.23 (November 7, 2015)</a></h1>
+<h1><a class="toc-backref" href="#id15">1.3.23 (November 7, 2015)</a></h1>
<p>Special Issues:</p>
<ul class="simple">
<li>Due to <a class="reference external" href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53967">GCC bug 53967</a>, several key agorithms (e.g. convolution)
</ul>
</div>
<div class="section" id="october-4-2015">
-<h1><a class="toc-backref" href="#id15">1.3.22 (October 4, 2015)</a></h1>
+<h1><a class="toc-backref" href="#id16">1.3.22 (October 4, 2015)</a></h1>
<p>Thanks:</p>
<ul class="simple">
<li>Coverity: We thank Coverity for providing free service for free
entirely.</p>
</div>
<div class="section" id="february-28-2015">
-<h1><a class="toc-backref" href="#id16">1.3.21 (February 28, 2015)</a></h1>
+<h1><a class="toc-backref" href="#id17">1.3.21 (February 28, 2015)</a></h1>
<p>Thanks:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="august-16-2014">
-<h1><a class="toc-backref" href="#id17">1.3.20 (August 16, 2014)</a></h1>
+<h1><a class="toc-backref" href="#id18">1.3.20 (August 16, 2014)</a></h1>
<p>Special Issues:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="december-31-2013">
-<h1><a class="toc-backref" href="#id18">1.3.19 (December 31, 2013)</a></h1>
+<h1><a class="toc-backref" href="#id19">1.3.19 (December 31, 2013)</a></h1>
<p>Special Issues:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="march-10-2013">
-<h1><a class="toc-backref" href="#id19">1.3.18 (March 10, 2013)</a></h1>
+<h1><a class="toc-backref" href="#id20">1.3.18 (March 10, 2013)</a></h1>
<p>Special Issues:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="october-13-2012">
-<h1><a class="toc-backref" href="#id20">1.3.17 (October 13, 2012)</a></h1>
+<h1><a class="toc-backref" href="#id21">1.3.17 (October 13, 2012)</a></h1>
<p>Security Fixes:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="june-24-2012">
-<h1><a class="toc-backref" href="#id21">1.3.16 (June 24, 2012)</a></h1>
+<h1><a class="toc-backref" href="#id22">1.3.16 (June 24, 2012)</a></h1>
<p>Security Fixes:</p>
<blockquote>
<ul class="simple">
None</blockquote>
</div>
<div class="section" id="april-28-2012">
-<h1><a class="toc-backref" href="#id22">1.3.15 (April 28, 2012)</a></h1>
+<h1><a class="toc-backref" href="#id23">1.3.15 (April 28, 2012)</a></h1>
<p>Security Fixes:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="february-25-2012">
-<h1><a class="toc-backref" href="#id23">1.3.14 (February 25, 2012)</a></h1>
+<h1><a class="toc-backref" href="#id24">1.3.14 (February 25, 2012)</a></h1>
<p>Security Fixes:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="december-24-2011">
-<h1><a class="toc-backref" href="#id24">1.3.13 (December 24, 2011)</a></h1>
+<h1><a class="toc-backref" href="#id25">1.3.13 (December 24, 2011)</a></h1>
<p>Security Fixes:</p>
<blockquote>
None</blockquote>
</blockquote>
</div>
<div class="section" id="march-8-2010">
-<h1><a class="toc-backref" href="#id25">1.3.12 (March 8, 2010)</a></h1>
+<h1><a class="toc-backref" href="#id26">1.3.12 (March 8, 2010)</a></h1>
<p>Security Fixes:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="february-21-2010">
-<h1><a class="toc-backref" href="#id26">1.3.11 (February 21, 2010)</a></h1>
+<h1><a class="toc-backref" href="#id27">1.3.11 (February 21, 2010)</a></h1>
<p>Security Fixes:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="february-10-2010">
-<h1><a class="toc-backref" href="#id27">1.3.10 (February 10, 2010)</a></h1>
+<h1><a class="toc-backref" href="#id28">1.3.10 (February 10, 2010)</a></h1>
<p>Security Fixes:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="february-4-2010">
-<h1><a class="toc-backref" href="#id28">1.3.9 (February 4, 2010)</a></h1>
+<h1><a class="toc-backref" href="#id29">1.3.9 (February 4, 2010)</a></h1>
<p>Security Fixes:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="january-21-2010">
-<h1><a class="toc-backref" href="#id29">1.3.8 (January 21, 2010)</a></h1>
+<h1><a class="toc-backref" href="#id30">1.3.8 (January 21, 2010)</a></h1>
<p>Security Fixes:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="september-17-2009">
-<h1><a class="toc-backref" href="#id30">1.3.7 (September 17, 2009)</a></h1>
+<h1><a class="toc-backref" href="#id31">1.3.7 (September 17, 2009)</a></h1>
<p>Security Fixes:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="july-25-2009">
-<h1><a class="toc-backref" href="#id31">1.3.6 (July 25, 2009)</a></h1>
+<h1><a class="toc-backref" href="#id32">1.3.6 (July 25, 2009)</a></h1>
<p>Security Fixes:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="january-26-2009">
-<h1><a class="toc-backref" href="#id32">1.3.5 (January 26, 2009)</a></h1>
+<h1><a class="toc-backref" href="#id33">1.3.5 (January 26, 2009)</a></h1>
<p>Security Fixes:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="january-13-2009">
-<h1><a class="toc-backref" href="#id33">1.3.4 (January 13, 2009)</a></h1>
+<h1><a class="toc-backref" href="#id34">1.3.4 (January 13, 2009)</a></h1>
<p>Security Fixes:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="december-9-2008">
-<h1><a class="toc-backref" href="#id34">1.3.3 (December 9, 2008)</a></h1>
+<h1><a class="toc-backref" href="#id35">1.3.3 (December 9, 2008)</a></h1>
<p>Security Fixes:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="november-29-2008">
-<h1><a class="toc-backref" href="#id35">1.3.2 (November 29, 2008)</a></h1>
+<h1><a class="toc-backref" href="#id36">1.3.2 (November 29, 2008)</a></h1>
<p>Security Fixes:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="november-17-2008">
-<h1><a class="toc-backref" href="#id36">1.3.1 (November 17, 2008)</a></h1>
+<h1><a class="toc-backref" href="#id37">1.3.1 (November 17, 2008)</a></h1>
<p>Security Fixes:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="november-9-2008">
-<h1><a class="toc-backref" href="#id37">1.3 (November 9, 2008)</a></h1>
+<h1><a class="toc-backref" href="#id38">1.3 (November 9, 2008)</a></h1>
<p>Security fixes:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="april-29-2008">
-<h1><a class="toc-backref" href="#id38">1.2 (April 29, 2008)</a></h1>
+<h1><a class="toc-backref" href="#id39">1.2 (April 29, 2008)</a></h1>
<p>Security fixes:</p>
<blockquote>
<ul class="simple">
</blockquote>
</div>
<div class="section" id="released-april-4-2004">
-<h1><a class="toc-backref" href="#id39">1.1 (Released April 4, 2004)</a></h1>
+<h1><a class="toc-backref" href="#id40">1.1 (Released April 4, 2004)</a></h1>
<p>Bug fixes:</p>
<blockquote>
<ul class="simple">
</div>
<hr class="docutils" />
<div class="section" id="released-in-may-2003">
-<h1><a class="toc-backref" href="#id40">1.0 (Released in May, 2003)</a></h1>
+<h1><a class="toc-backref" href="#id41">1.0 (Released in May, 2003)</a></h1>
<p>GraphicsMagick support services:</p>
<blockquote>
<ul class="simple">
<li>Maintain an accurate ChangeLog.</li>
</ul>
</blockquote>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2018</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>OpenMP in GraphicsMagick</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="openmp-in-graphicsmagick">
some cases) to improve execution efficiency. The GraphicsMagick
commands also accept a <tt class="docutils literal"><span class="pre">-limit</span> threads limit</tt> type option for
specifying the maximum number of threads to use.</p>
-<hr class="docutils" />
-<div class="line-block">
-<div class="line">Copyright (C) 2008 - 2020 GraphicsMagick Group</div>
</div>
-<p>This program is covered by multiple licenses, which are described in
-Copyright.txt. You should have received a copy of Copyright.txt with this
-package; otherwise see <a class="reference external" href="http://www.graphicsmagick.org/Copyright.html">http://www.graphicsmagick.org/Copyright.html</a>.</p>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>OpenMP in GraphicsMagick</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="openmp-in-graphicsmagick">
+<h1 class="title">OpenMP in GraphicsMagick</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#overview" id="id1">Overview</a></li>
+<li><a class="reference internal" href="#limitations" id="id2">Limitations</a></li>
+<li><a class="reference internal" href="#openmp-variables" id="id3">OpenMP Variables</a></li>
+</ul>
+</div>
+<div class="section" id="overview">
+<h1><a class="toc-backref" href="#id1">Overview</a></h1>
+<p>GraphicsMagick has been transformed to use <a class="reference external" href="http://openmp.org/">OpenMP</a> for the 1.3 release
+series. OpenMP is a portable framework for accelerating CPU-bound and
+memory-bound operations using multiple threads. OpenMP originates in
+the super-computing world and has been available in one form or
+another since the late '90s.</p>
+<p>Since GCC 4.2 has introduced excellent OpenMP support via <a class="reference external" href="http://gcc.gnu.org/onlinedocs/libgomp/">GOMP</a>,
+OpenMP has become available to the masses. Recently, <a class="reference external" href="https://clang.llvm.org/">Clang</a> has
+also implemented good OpenMP support. Microsoft Visual Studio
+Professional 2005 and later support OpenMP so Windows users can
+benefit as well. Any multi-CPU and/or multi-core system is potentially
+a good candidate for use with OpenMP. Modern multi-core chipsets from
+AMD, Intel, IBM, Oracle, and ARM perform very well with OpenMP.</p>
+<p>Most image processing routines are comprised of loops which iterate
+through the image pixels, image rows, or image regions. These loops
+are accelerated using OpenMP by executing portions of the total loops
+in different threads, and therefore on a different processor
+core. CPU-bound algorithms benefit most from OpenMP, but memory-bound
+algorithms may also benefit as well since the memory is accessed by
+different CPU cores, and sometimes the CPUs have their own path to
+memory. For example, the AMD Opteron is a <a class="reference external" href="https://en.wikipedia.org/wiki/Non-uniform_memory_access">NUMA</a> (Non-Uniform Memory
+Architecture) design such that multi-CPU systems split the system
+memory across CPUs so each CPU adds more memory bandwidth as well.
+Server-class CPUs offer more independent memory channels than desktop
+CPUs do.</p>
+<p>For severely CPU-bound algorithms, it is not uncommon to see a linear
+speed-up (within the constraints of <a class="reference external" href="https://en.wikipedia.org/wiki/Amdahl%27s_law">Amdahl's law</a>) due to the number
+of cores. For example, a two core system executes the algorithm twice
+as fast, and a four core system executes the algorithm four times as
+fast. Memory-bound algorithms scale based on the memory bandwith
+available to the cores. For example, memory-bound algorithms scale up
+to almost 1.5X on my four core Opteron system due to its <a class="reference external" href="https://en.wikipedia.org/wiki/Non-uniform_memory_access">NUMA</a>
+architecture. Some systems/CPUs are able to immediately context switch
+to another thread if the core would be blocked waiting for memory,
+allowing multiple memory accesses to be pending at once, and thereby
+improving throughput. For example, typical speedup of 20-32X (average
+24X) has been observed on the Sun SPARC T2 CPU, which provides 8
+cores, with 8 virtual CPUs per core (64 threads).</p>
+<p>An approach used in GraphicsMagick is to recognize the various access
+patterns in the existing code, and re-write the algorithms (sometimes
+from scratch) to be based on a framework that we call "pixel iterators".
+With this approach, the computation is restricted to a small unit (a
+callback function) with very well defined properties, and no knowledge as
+to how it is executed or where the data comes from. This approach removes
+the loops from the code and puts the loops in the framework, which may be
+adjusted based on experience. The continuing strategy will be to
+recognize design patterns and build frameworks which support those
+patterns. Sometimes algorithms are special/exotic enough that it is much
+easier to instrument the code for OpenMP rather than to attempt to fit
+the algorithm into a framework.</p>
+<p>Since OpenMP is based on multi-threading, multiple threads access the
+underlying pixel storage at once. The interface to this underlying
+storage is called the "pixel cache". The original pixel cache code
+(derived from ImageMagick) was thread safe only to the extent that it
+allowed one thread per image. This code has now been re-written so that
+multiple threads may safely and efficiently work on the pixels in one
+image. The re-write also makes the pixel cache thread safe if a
+multi-threaded application uses an OpenMP-fortified library.</p>
+<p>GraphicsMagick provides its own built-in 'benchmark' driver utility
+which may be used to execute a multi-threaded benchmark of any other
+utility command.</p>
+<p>Using the built-in 'benchmark' driver utility, the following is an
+example of per-core speed-up due to OpenMP on a four-core AMD Opteron
+system (with Firefox and other desktop software still running). The
+image is generated dynamically based on the 'granite' pattern and all
+the pixel quantum values have 30% gaussian noise added:</p>
+<pre class="literal-block">
+% gm benchmark -stepthreads 1 -duration 10 convert \
+ -size 2048x1080 pattern:granite -operator all Noise-Gaussian 30% null:
+Results: 1 threads 5 iter 11.34s user 11.340000s total 0.441 iter/s 0.441 iter/cpu 1.00 speedup 1.000 karp-flatt
+Results: 2 threads 9 iter 20.34s user 10.190000s total 0.883 iter/s 0.442 iter/cpu 2.00 speedup 0.000 karp-flatt
+Results: 3 threads 14 iter 31.72s user 10.600000s total 1.321 iter/s 0.441 iter/cpu 3.00 speedup 0.001 karp-flatt
+Results: 4 threads 18 iter 40.84s user 10.460000s total 1.721 iter/s 0.441 iter/cpu 3.90 speedup 0.008 karp-flatt
+</pre>
+<p>Note that the "iter/s cpu" value is a measure of the number of
+iterations given the amount of reported CPU time consumed. It is an
+effective measure of relative efficacy since its value should ideally
+not drop as iterations are added. The <a class="reference external" href="https://en.wikipedia.org/wiki/Karp%E2%80%93Flatt_metric">karp-flatt metric</a> is another
+useful metric for evaluating thread-speedup efficiency. In the above
+example, the total speedup was about 3.9X with only a slight loss of
+CPU efficiency as threads are added.</p>
+</div>
+<div class="section" id="limitations">
+<h1><a class="toc-backref" href="#id2">Limitations</a></h1>
+<p>Often it is noticed that the memory allocation functions (e.g. from
+the standard C library such as GNU libc) significantly hinder
+performance since they are designed or optimized for single-threaded
+programs, or prioritize returning memory to the system over speed.
+Memory allocators are usually designed and optimized for programs
+which perform thousands of small allocations, and if they make a large
+memory allocation, they retain that memory for a long time.
+GraphicsMagick performs large memory allocations for raster image
+storage interspersed with a limited number of smaller allocations for
+supportive data structures. This memory is released very quickly
+since GraphicsMagick is highly optimized and thus the time between
+allocation and deallocation can be very short. It has been observed
+that some memory allocators are much slower to allocate and deallocate
+large amounts of memory (e.g. a hundred megabytes) than alternative
+allocators, even in single-threaded programs. Under these conditions,
+the program can spend considerable time mysteriously "sleeping".</p>
+<p>In order to help surmount problems with the default memory allocators,
+the configure script offers support for use of Google <a class="reference external" href="https://github.com/gperftools/gperftools">gperftools</a> <a class="reference external" href="https://github.com/gperftools/gperftools/wiki">'tcmalloc'</a>, Solaris mtmalloc,
+and Solaris umem libraries via the --with-tcmalloc, --with-mtmalloc,
+and --with-umem options, respectively. When the allocation functions
+are behaving badly, the memory allocation/deallocation performance
+does not scale as threads are added and thus additional threads spend
+more time sleeping (e.g. on a lock, or in munmap()) rather than doing
+more work. Performance improvements of a factor of two are not
+uncommon even before contending with the hugh CPU core/thread counts
+available on modern CPUs. Using more threads which are slowed by
+poorly-matched memory allocation functions is wasteful of memory,
+system resources, human patience, and electrical power.</p>
+<p>Many modern CPUs support "Turbo" modes where the CPU clock rate is
+boosted if only a few cores are active. When a CPU provides a "Turbo"
+mode, this decreases the apparent speed-up compared to using one
+thread because the one thread was executed at a much higher clock
+rate. Likewise, when a CPU becomes very hot (due to being heavily
+used), it may decrease its clock rates overall to avoid burning up,
+and this may also decreases the actual speed-up when using many
+threads compared to using one thread. Many CPUs support
+"hyperthreads" or other mechanisms in which one physical core will
+support multiple light-weight threads, and if the core is efficiently
+used by one thread, then this will decrease the apparent per-thread
+speed-up but the peak speed-up will hopefully still be bounded by the
+number of physical cores.</p>
+<p>In most cases, OpenMP does not speed-up loading an image from a file,
+or writing an image to a file. It is common for file decode and
+encode to take longer than processing the image. Using uncompressed
+formats is recommended with a fast I/O subsystem (or in-memory 'blobs'
+in order to obtain the greated speed-up from OpenMP.</p>
+<p>It has been observed that sometimes it takes much longer to start and
+stop GraphicsMagick than it takes for it to run the requested
+algorithm. The slowness is due to inefficiencies of the libraries
+that GraphicsMagick is linked with (especially the ICU library that
+libxml2 is often linked with). If GraphicsMagick takes too long to
+perform trivial operations, then consider using the 'modules' build,
+and investigate the 'batch' utility which allows running many
+GraphicsMagick commands as a 'batch' script. If a 'modules' build is
+not feasible, then configuring GraphicsMagick to only support the
+specific formats actually needed can help with its execution time and
+improve opportunity for OpenMP speed-up.</p>
+</div>
+<div class="section" id="openmp-variables">
+<h1><a class="toc-backref" href="#id3">OpenMP Variables</a></h1>
+<p>According to the OpenMP specification, the OMP_NUM_THREADS evironment
+variable may be used to specify the number of threads available to the
+application. Typically this is set to the number of processor cores on
+the system but may be set lower to limit resource consumption or (in
+some cases) to improve execution efficiency. The GraphicsMagick
+commands also accept a <tt class="docutils literal"><span class="pre">-limit</span> threads limit</tt> type option for
+specifying the maximum number of threads to use.</p>
+<hr class="docutils" />
+<div class="line-block">
+<div class="line">Copyright (C) 2008 - 2020 GraphicsMagick Group</div>
+</div>
+<p>This program is covered by multiple licenses, which are described in
+Copyright.txt. You should have received a copy of Copyright.txt with this
+package; otherwise see <a class="reference external" href="http://www.graphicsmagick.org/Copyright.html">http://www.graphicsmagick.org/Copyright.html</a>.</p>
+</div>
+</div>
+</body>
+</html>
some cases) to improve execution efficiency. The GraphicsMagick
commands also accept a ``-limit threads limit`` type option for
specifying the maximum number of threads to use.
-
-
---------------------------------------------------------------------------
-
-| Copyright (C) 2008 - 2020 GraphicsMagick Group
-
-This program is covered by multiple licenses, which are described in
-Copyright.txt. You should have received a copy of Copyright.txt with this
-package; otherwise see http://www.graphicsmagick.org/Copyright.html.
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="installing-graphicsmagick">
likely that other purposes will be found for Zstd.</p>
</li>
</ul>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
for details. This method is recommended for colormapped X server because
it eliminates the need to compute a global colormap.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
gm animate +borderwidth -backdrop cockatoo.*
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
is specified in the image. Otherwise the images will display in the order
they appear on the command line.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
Press any button to map or unmap the Command widget. See the next section
for more information about the Command widget.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
Move the pointer away from the sub-menu if you decide not to execute a
particular command.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<dd>Press to discard all images and exit program.</dd>
</dl>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
of header identifying the window. The default is the image file name.</dd>
</dl>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
$(WWWAPIDIR)/image.html \
$(WWWAPIDIR)/import.html \
$(WWWAPIDIR)/list.html \
+ $(WWWAPIDIR)/log.html \
$(WWWAPIDIR)/magick.html \
$(WWWAPIDIR)/memory.html \
$(WWWAPIDIR)/monitor.html \
www/api/image.html \
www/api/import.html \
www/api/list.html \
+ www/api/log.html \
www/api/magick.html \
www/api/memory.html \
www/api/monitor.html \
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>animate</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="animate">
<h2 class="subtitle" id="interactively-animate-an-image-sequence">Interactively animate an image sequence</h2>
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#magickxanimatebackgroundimage" id="id3">MagickXAnimateBackgroundImage</a></li>
<li><a class="reference internal" href="#magickxanimateimages" id="id4">MagickXAnimateImages</a></li>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>animate</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="animate">
+<h1 class="title">animate</h1>
+<h2 class="subtitle" id="interactively-animate-an-image-sequence">Interactively animate an image sequence</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#magickxanimatebackgroundimage" id="id3">MagickXAnimateBackgroundImage</a></li>
+<li><a class="reference internal" href="#magickxanimateimages" id="id4">MagickXAnimateImages</a></li>
+</ul>
+</div>
+<div class="section" id="magickxanimatebackgroundimage">
+<h1><a class="toc-backref" href="#id3">MagickXAnimateBackgroundImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void MagickXAnimateBackgroundImage( Display *display, <a class="reference external" href="../api/types.html#magickxresourceinfo">MagickXResourceInfo</a> *resource_info,
+ <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>MagickXAnimateBackgroundImage() animates an image sequence in the background of
+a window.</p>
+<p>The format of the MagickXAnimateBackgroundImage method is:</p>
+<pre class="literal-block">
+void MagickXAnimateBackgroundImage( Display *display, <a class="reference external" href="../api/types.html#magickxresourceinfo">MagickXResourceInfo</a> *resource_info,
+ <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+<dl class="docutils">
+<dt>display:</dt>
+<dd>Specifies a connection to an X server; returned from
+XOpenDisplay.</dd>
+<dt>resource_info:</dt>
+<dd>Specifies a pointer to a X11 MagickXResourceInfo structure.</dd>
+<dt>images:</dt>
+<dd>The image list.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickxanimateimages">
+<h1><a class="toc-backref" href="#id4">MagickXAnimateImages</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *MagickXAnimateImages( Display *display, <a class="reference external" href="../api/types.html#magickxresourceinfo">MagickXResourceInfo</a> *resource_info,
+ char ** argv, const int argc, <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>MagickXAnimateImages() displays an image via X11.</p>
+<p>The format of the MagickXAnimateImages method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *MagickXAnimateImages( Display *display, <a class="reference external" href="../api/types.html#magickxresourceinfo">MagickXResourceInfo</a> *resource_info,
+ char ** argv, const int argc, <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+<dl class="docutils">
+<dt>display:</dt>
+<dd>Specifies a connection to an X server; returned from
+XOpenDisplay.</dd>
+<dt>resource_info:</dt>
+<dd>Specifies a pointer to a X11 MagickXResourceInfo structure.</dd>
+<dt>argv:</dt>
+<dd>Specifies the application's argument list.</dd>
+<dt>argc:</dt>
+<dd>Specifies the number of arguments.</dd>
+<dt>images:</dt>
+<dd>The image list.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>annotate</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="annotate">
<h2 class="subtitle" id="annotate-an-image-with-text">Annotate an image with text</h2>
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#annotateimage" id="id3">AnnotateImage</a></li>
<li><a class="reference internal" href="#gettypemetrics" id="id4">GetTypeMetrics</a></li>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>annotate</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="annotate">
+<h1 class="title">annotate</h1>
+<h2 class="subtitle" id="annotate-an-image-with-text">Annotate an image with text</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#annotateimage" id="id3">AnnotateImage</a></li>
+<li><a class="reference internal" href="#gettypemetrics" id="id4">GetTypeMetrics</a></li>
+</ul>
+</div>
+<div class="section" id="annotateimage">
+<h1><a class="toc-backref" href="#id3">AnnotateImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail AnnotateImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#drawinfo">DrawInfo</a> *draw_info );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>AnnotateImage() annotates an image with DrawInfo 'text' based on other
+parameters from DrawInfo such as 'affine', 'align', 'decorate', and
+'gravity'.</p>
+<p>Originally this function additionally transformed 'text' using
+TranslateText() but it no longer does so as of GraphicsMagick 1.3.32.</p>
+<p>The format of the AnnotateImage method is:</p>
+<pre class="literal-block">
+MagickPassFail AnnotateImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#drawinfo">DrawInfo</a> *draw_info );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>status:</dt>
+<dd>Method AnnotateImage returns MagickPass if the image is annotated
+otherwise MagickFail.</dd>
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>draw_info:</dt>
+<dd>The draw info.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="gettypemetrics">
+<h1><a class="toc-backref" href="#id4">GetTypeMetrics</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int GetTypeMetrics( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#drawinfo">DrawInfo</a> *draw_info,
+ <a class="reference external" href="../api/types.html#typemetric">TypeMetric</a> *metrics );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>GetTypeMetrics() returns the following information for the specified font
+and text:</p>
+<p>o character width
+o character height
+o ascent
+o descent
+o text width
+o text height
+o maximum horizontal advance
+o underline position
+o underline thickness</p>
+<p>The format of the GetTypeMetrics method is:</p>
+<pre class="literal-block">
+unsigned int GetTypeMetrics( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#drawinfo">DrawInfo</a> *draw_info,
+ <a class="reference external" href="../api/types.html#typemetric">TypeMetric</a> *metrics );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>draw_info:</dt>
+<dd>The draw info.</dd>
+<dt>metrics:</dt>
+<dd>Return the font metrics in this structure.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Core C API</title>
<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-core-c-api">
<li><a class="reference external" href="image.html">Image</a>: Miscellaneous image methods</li>
<li><a class="reference external" href="import.html">Import</a> : Import image pixels from common representations</li>
<li><a class="reference external" href="list.html">List</a>: Manage image lists</li>
+<li><a class="reference external" href="log.html">Log</a>: Event logging support</li>
<li><a class="reference external" href="magick.html">Magick</a>: Image format support interfaces</li>
<li><a class="reference external" href="memory.html">Memory</a>: Memory allocation methods</li>
<li><a class="reference external" href="monitor.html">Monitor</a>: Progress monitor callbacks</li>
<li><a class="reference external" href="profile.html">Profile</a>: Attached profile access</li>
<li><a class="reference external" href="quantize.html">Quantize</a>: Reduce image colors or assign image colors from colormap</li>
<li><a class="reference external" href="registry.html">Registry</a>: Store and retrieve images in memory by ID</li>
+<li><a class="reference external" href="render.html">Render</a>: Render vector graphics</li>
<li><a class="reference external" href="resize.html">Resize</a>: Resize an Image</li>
<li><a class="reference external" href="resource.html">Resource</a>: Set and get resource limits</li>
<li><a class="reference external" href="segment.html">Segment</a>: Coalese similar image colors</li>
<p>The GraphicsMagick-config script reproduces the options which were used to
compile the GraphicsMagick utilities. Using compatible options ensures that
your program will compile and run.</p>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Core C API</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-core-c-api">
+<h1 class="title">GraphicsMagick Core C API</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>The GraphicsMagick core C library constitutes the implementation of
+GraphicsMagick and provides the lowest-level C language programming
+interface for GraphicsMagick. The core C API provides many functions
+to read, manipulate, write, or display an image. To invoke the
+functions, write your program in C (or C++) language while making
+calls to the core library functions and link with libGraphicsMagick.a,
+libGraphicsMagick.so, or GraphicsMagick.dll depending on your system.</p>
+<p>The API is divided into a number of categories. While reading this
+documentation, please reference the <a class="reference external" href="types.html">types</a> documentation as required:</p>
+<blockquote>
+<ul class="simple">
+<li><a class="reference external" href="animate.html">Animate</a>: Interactively animate an image sequence</li>
+<li><a class="reference external" href="annotate.html">Annotate</a>: Annotate an image with text</li>
+<li><a class="reference external" href="attribute.html">Attribute</a>: Access key, value image attributes</li>
+<li><a class="reference external" href="average.html">Average</a>: Average several images together</li>
+<li><a class="reference external" href="cdl.html">ASC CDL</a> : Apply ASC CDL to image</li>
+<li><a class="reference external" href="blob.html">Blob</a>: Read and write images to memory</li>
+<li><a class="reference external" href="channel.html">Channel</a>: Import and export image channels as well as compute channel depth</li>
+<li><a class="reference external" href="color.html">Color</a>: Methods to deal with image colors</li>
+<li><a class="reference external" href="colormap.html">Colormap</a>: Methods to deal with image colormaps</li>
+<li><a class="reference external" href="compare.html">Compare</a>: Compare images</li>
+<li><a class="reference external" href="composite.html">Composite</a>: Composite images</li>
+<li><a class="reference external" href="confirm_access.html">Confirm Access</a> : Confirm access to files and URLs.</li>
+<li><a class="reference external" href="constitute.html">Constitute</a>: Read, write, import, and export images</li>
+<li><a class="reference external" href="decorate.html">Decorate</a>: Add fancy borders to images</li>
+<li><a class="reference external" href="describe.html">Describe</a>: Describe an image</li>
+<li><a class="reference external" href="display.html">Display</a>: Interactively display and edit an image</li>
+<li><a class="reference external" href="draw.html">Draw</a>: Convenient methods to draw vectors and text</li>
+<li><a class="reference external" href="effect.html">Effect</a>:Threshold (various), blur, despeckle, edge, emboss, enhance,
+gaussian blur ...</li>
+<li><a class="reference external" href="enhance.html">Enhance</a>: Contrast, equalize, gamma, level, level channel, modulate, negate,
+and normalize</li>
+<li><a class="reference external" href="error.html">Error</a>: Error reporting methods</li>
+<li><a class="reference external" href="export.html">Export</a> : Export image pixels to common representations</li>
+<li><a class="reference external" href="fx.html">FX</a>: Special effects methods</li>
+<li><a class="reference external" href="hclut.html">Hald CLUT</a> : Apply Hald CLUT to image</li>
+<li><a class="reference external" href="image.html">Image</a>: Miscellaneous image methods</li>
+<li><a class="reference external" href="import.html">Import</a> : Import image pixels from common representations</li>
+<li><a class="reference external" href="list.html">List</a>: Manage image lists</li>
+<li><a class="reference external" href="magick.html">Magick</a>: Image format support interfaces</li>
+<li><a class="reference external" href="memory.html">Memory</a>: Memory allocation methods</li>
+<li><a class="reference external" href="monitor.html">Monitor</a>: Progress monitor callbacks</li>
+<li><a class="reference external" href="montage.html">Montage</a>: Create a montage of image thumbnails</li>
+<li><a class="reference external" href="operator.html">Operator</a>: Methods to apply mathematic or boolean operators to pixels</li>
+<li><a class="reference external" href="paint.html">Paint</a>: Fill pixel regions</li>
+<li><a class="reference external" href="pixel_cache.html">Pixel Cache</a>: Low-level access to image pixels</li>
+<li><a class="reference external" href="pixel_iterator.html">Pixel Iterator</a>: Pixel iterator design pattern support functions</li>
+<li><a class="reference external" href="plasma.html">Plasma</a>: Plasma fractal image generator</li>
+<li><a class="reference external" href="profile.html">Profile</a>: Attached profile access</li>
+<li><a class="reference external" href="quantize.html">Quantize</a>: Reduce image colors or assign image colors from colormap</li>
+<li><a class="reference external" href="registry.html">Registry</a>: Store and retrieve images in memory by ID</li>
+<li><a class="reference external" href="resize.html">Resize</a>: Resize an Image</li>
+<li><a class="reference external" href="resource.html">Resource</a>: Set and get resource limits</li>
+<li><a class="reference external" href="segment.html">Segment</a>: Coalese similar image colors</li>
+<li><a class="reference external" href="shear.html">Shear</a>: Rotate image, shear image, or apply a 2D affine transformation</li>
+<li><a class="reference external" href="signature.html">Signature</a>: Compute an image signature (checksum)</li>
+<li><a class="reference external" href="statistics.html">Statistics</a>: Compute image statistics</li>
+<li><a class="reference external" href="texture.html">Texture</a>: Create a tiled texture image or tile an image with a texture.</li>
+<li><a class="reference external" href="transform.html">Transform</a>: Chop, coalesce, deconstruct, flatten, flip, flop, mosiac, roll,
+or shave image</li>
+</ul>
+</blockquote>
+<p>Here are a few sample programs to get you started.</p>
+<p>This example program (convert.c) simply converts from one file name to
+another (and will automatically change formats based on file
+extension):</p>
+<pre class="literal-block">
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <sys/types.h>
+#include <magick/api.h>
+
+int main ( int argc, char **argv )
+{
+ Image
+ *image = (Image *) NULL;
+
+ char
+ infile[MaxTextExtent],
+ outfile[MaxTextExtent];
+
+ int
+ arg = 1,
+ exit_status = 0;
+
+ ImageInfo
+ *imageInfo;
+
+ ExceptionInfo
+ exception;
+
+ InitializeMagick(NULL);
+ imageInfo=CloneImageInfo(0);
+ GetExceptionInfo(&exception);
+
+ if (argc != 3)
+ {
+ (void) fprintf ( stderr, "Usage: %s infile outfile\n", argv[0] );
+ (void) fflush(stderr);
+ exit_status = 1;
+ goto program_exit;
+ }
+
+ (void) strncpy(infile, argv[arg], MaxTextExtent-1 );
+ arg++;
+ (void) strncpy(outfile, argv[arg], MaxTextExtent-1 );
+
+ (void) strcpy(imageInfo->filename, infile);
+ image = ReadImage(imageInfo, &exception);
+ if (image == (Image *) NULL)
+ {
+ CatchException(&exception);
+ exit_status = 1;
+ goto program_exit;
+ }
+
+ (void) strcpy(image->filename, outfile);
+ if (!WriteImage (imageInfo,image))
+ {
+ CatchException(&image->exception);
+ exit_status = 1;
+ goto program_exit;
+ }
+
+ program_exit:
+
+ if (image != (Image *) NULL)
+ DestroyImage(image);
+
+ if (imageInfo != (ImageInfo *) NULL)
+ DestroyImageInfo(imageInfo);
+ DestroyMagick();
+
+ return exit_status;
+}
+</pre>
+<p>This example program (demo.c) which reads multiple input files
+(possibly animation files) specified on the command line, resizes the
+image frames to 106x80, and writes the resulting animation to disk:</p>
+<pre class="literal-block">
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <sys/types.h>
+#include <magick/api.h>
+
+int main(int argc,char **argv)
+{
+ ExceptionInfo
+ exception;
+
+ Image
+ *image,
+ *images,
+ *resize_image,
+ *thumbnails;
+
+ ImageInfo
+ *image_info;
+
+ int
+ i;
+
+ /*
+ Initialize the image info structure and read the list of files
+ provided by the user as a image sequence
+ */
+ InitializeMagick(*argv);
+ GetExceptionInfo(&exception);
+ image_info=CloneImageInfo((ImageInfo *) NULL);
+ images=NewImageList();
+ for (i=1; i< argc-1; i++)
+ {
+ (void) strcpy(image_info->filename,argv[i]);
+ printf("Reading %s ...", image_info->filename);
+ image=ReadImage(image_info,&exception);
+ printf(" %lu frames\n", GetImageListLength(image));
+ if (exception.severity != UndefinedException)
+ CatchException(&exception);
+ if (image)
+ (void) AppendImageToList(&images,image);
+ }
+
+ if (!images)
+ {
+ printf("Failed to read any images!\n");
+ exit(1);
+ }
+ /*
+ Create a thumbnail image sequence
+ */
+ thumbnails=NewImageList();
+ while ((image=RemoveFirstImageFromList(&images)) != (Image *) NULL)
+ {
+ resize_image=ResizeImage(image,106,80,LanczosFilter,1.0,&exception);
+ DestroyImage(image);
+ if (resize_image == (Image *) NULL)
+ {
+ CatchException(&exception);
+ continue;
+ }
+ (void) AppendImageToList(&thumbnails,resize_image);
+ }
+ /*
+ Write the thumbnail image sequence to file
+ */
+ if (thumbnails)
+ {
+ (void) strcpy(thumbnails->filename,argv[argc-1]);
+ image_info->adjoin=MagickTrue;
+ printf("Writing %s ... %lu frames\n", thumbnails->filename,
+ GetImageListLength(thumbnails));
+ WriteImage(image_info,thumbnails);
+ }
+
+ /*
+ Release resources
+ */
+ DestroyImageList(thumbnails);
+ DestroyImageInfo(image_info);
+ DestroyExceptionInfo(&exception);
+ DestroyMagick();
+ return(0);
+}
+</pre>
+<p>To compile on Unix, the command would look something like this:</p>
+<pre class="literal-block">
+gcc -o demo demo.c -O `GraphicsMagick-config --cppflags --ldflags --libs`
+</pre>
+<p>As a usage example, with the input files in1.gif, in2.png, and in3.jpg, create
+the animation file out.miff:</p>
+<pre class="literal-block">
+demo in1.gif in2.png in3.jpg out.miff
+</pre>
+<p>The resulting animation may be played on an X11 display using 'gm animate
+out.miff'.</p>
+<p>The GraphicsMagick-config script reproduces the options which were used to
+compile the GraphicsMagick utilities. Using compatible options ensures that
+your program will compile and run.</p>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</body>
+</html>
.. _Image : image.html
.. _Import : import.html
.. _List : list.html
+.. _Log : log.html
.. _Magick : magick.html
.. _Memory : memory.html
.. _Monitor : monitor.html
.. _Profile : profile.html
.. _Quantize : quantize.html
.. _Registry : registry.html
+.. _Render : render.html
.. _Resize : resize.html
.. _Resource : resource.html
.. _Segment : segment.html
* Image_: Miscellaneous image methods
* Import_ : Import image pixels from common representations
* List_: Manage image lists
+ * Log_: Event logging support
* Magick_: Image format support interfaces
* Memory_: Memory allocation methods
* Monitor_: Progress monitor callbacks
* Profile_: Attached profile access
* Quantize_: Reduce image colors or assign image colors from colormap
* Registry_: Store and retrieve images in memory by ID
+ * Render_: Render vector graphics
* Resize_: Resize an Image
* Resource_: Set and get resource limits
* Segment_: Coalese similar image colors
The GraphicsMagick-config script reproduces the options which were used to
compile the GraphicsMagick utilities. Using compatible options ensures that
your program will compile and run.
-
--------------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
.. _IndexPacket: ../api/types.html#indexpacket
.. _InterlaceType: ../api/types.html#interlacetype
.. _LayerType: ../api/types.html#layertype
+.. _LogEventType: ../api/types.html#logeventtype
+.. _LogMethod: ../api/types.html#logmethod
+.. _LogOutputType: ../api/types.html#logoutputtype
.. _MagickInfo: ../api/types.html#magickinfo
.. _MonitorHandler: ../api/types.html#monitorhandler
.. _MontageInfo: ../api/types.html#montageinfo
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="attribute">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="average">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>average</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="average">
+<h1 class="title">average</h1>
+<h2 class="subtitle" id="image-averaging-functions">Image averaging functions</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#averageimages" id="id1">AverageImages</a></li>
+</ul>
+</div>
+<div class="section" id="averageimages">
+<h1><a class="toc-backref" href="#id1">AverageImages</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *AverageImages( <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>The Average() method takes a set of images and averages them together.
+Each image in the set must have the same width and height. Average()
+returns a single image with each corresponding pixel component of
+each image averaged. On failure, a NULL image is returned and
+exception describes the reason for the failure.</p>
+<p>The format of the AverageImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *AverageImages( <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image sequence.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>blob</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="blob">
<h2 class="subtitle" id="read-or-write-formatted-images-in-memory-blobs">Read or write formatted images in memory (BLOBs)</h2>
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#attachblob" id="id45">AttachBlob</a></li>
<li><a class="reference internal" href="#blobisseekable" id="id46">BlobIsSeekable</a></li>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>blob</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="blob">
+<h1 class="title">blob</h1>
+<h2 class="subtitle" id="read-or-write-formatted-images-in-memory-blobs">Read or write formatted images in memory (BLOBs)</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#attachblob" id="id45">AttachBlob</a></li>
+<li><a class="reference internal" href="#blobisseekable" id="id46">BlobIsSeekable</a></li>
+<li><a class="reference internal" href="#blobreservesize" id="id47">BlobReserveSize</a></li>
+<li><a class="reference internal" href="#blobtofile" id="id48">BlobToFile</a></li>
+<li><a class="reference internal" href="#blobtoimage" id="id49">BlobToImage</a></li>
+<li><a class="reference internal" href="#cloneblobinfo" id="id50">CloneBlobInfo</a></li>
+<li><a class="reference internal" href="#destroyblob" id="id51">DestroyBlob</a></li>
+<li><a class="reference internal" href="#destroyblobinfo" id="id52">DestroyBlobInfo</a></li>
+<li><a class="reference internal" href="#detachblob" id="id53">DetachBlob</a></li>
+<li><a class="reference internal" href="#filetoblob" id="id54">FileToBlob</a></li>
+<li><a class="reference internal" href="#getblobfilehandle" id="id55">GetBlobFileHandle</a></li>
+<li><a class="reference internal" href="#getblobinfo" id="id56">GetBlobInfo</a></li>
+<li><a class="reference internal" href="#getblobstatus" id="id57">GetBlobStatus</a></li>
+<li><a class="reference internal" href="#getblobfirsterrno" id="id58">GetBlobFirstErrno</a></li>
+<li><a class="reference internal" href="#getblobstreamdata" id="id59">GetBlobStreamData</a></li>
+<li><a class="reference internal" href="#getblobtemporary" id="id60">GetBlobTemporary</a></li>
+<li><a class="reference internal" href="#getconfigureblob" id="id61">GetConfigureBlob</a></li>
+<li><a class="reference internal" href="#imagetoblob" id="id62">ImageToBlob</a></li>
+<li><a class="reference internal" href="#imagetofile" id="id63">ImageToFile</a></li>
+<li><a class="reference internal" href="#pingblob" id="id64">PingBlob</a></li>
+<li><a class="reference internal" href="#referenceblob" id="id65">ReferenceBlob</a></li>
+<li><a class="reference internal" href="#setblobclosable" id="id66">SetBlobClosable</a></li>
+<li><a class="reference internal" href="#setblobtemporary" id="id67">SetBlobTemporary</a></li>
+</ul>
+</div>
+<div class="section" id="attachblob">
+<h1><a class="toc-backref" href="#id45">AttachBlob</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void AttachBlob( <a class="reference external" href="../api/types.html#blobinfo">BlobInfo</a> *blob_info, const void *blob, const size_t length );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>AttachBlob() attaches a blob to the BlobInfo structure.</p>
+<p>The format of the AttachBlob method is:</p>
+<pre class="literal-block">
+void AttachBlob( <a class="reference external" href="../api/types.html#blobinfo">BlobInfo</a> *blob_info, const void *blob, const size_t length );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>blob_info:</dt>
+<dd>Specifies a pointer to a BlobInfo structure.</dd>
+<dt>blob:</dt>
+<dd>The address of a character stream in one of the image formats
+understood by GraphicsMagick.</dd>
+<dt>length:</dt>
+<dd>This size_t integer reflects the length in bytes of the blob.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="blobisseekable">
+<h1><a class="toc-backref" href="#id46">BlobIsSeekable</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickBool BlobIsSeekable( const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>BlobIsSeekable() returns MagickTrue if the blob supports seeks
+(SeekBlob() is functional).</p>
+<p>The format of the BlobIsSeekable method is:</p>
+<pre class="literal-block">
+MagickBool BlobIsSeekable( const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>Image to query</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="blobreservesize">
+<h1><a class="toc-backref" href="#id47">BlobReserveSize</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail BlobReserveSize( <a class="reference external" href="../api/types.html#image">Image</a> *image, magick_off_t size );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>BlobReserveSize() sets the output size of the blob or file. This is used
+as a means to minimize memory or filesystem fragmentation if the final
+output size is known in advance. While it is possible that file
+fragmentation is reduced, it is also possible that file write
+performance is reduced by changing a write operation to a read, modify,
+write operation.</p>
+<p>The format of the BlobReserveSize method is:</p>
+<pre class="literal-block">
+MagickPassFail BlobReserveSize( <a class="reference external" href="../api/types.html#image">Image</a> *image, magick_off_t size );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>Image to update</dd>
+<dt>size:</dt>
+<dd>New output size.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="blobtofile">
+<h1><a class="toc-backref" href="#id48">BlobToFile</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail BlobToFile( const char *filename, const void *blob, const size_t length,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>BlobToFile() writes a blob to a file. It returns MagickFail if an error
+occurs otherwise MagickPass.</p>
+<p>The format of the BlobToFile method is:</p>
+<pre class="literal-block">
+MagickPassFail BlobToFile( const char *filename, const void *blob, const size_t length,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>status:</dt>
+<dd>BlobToFile returns MagickPass on success; otherwise, it
+returns MagickFail if an error occurs.</dd>
+<dt>filename:</dt>
+<dd>Write the blob to this file.</dd>
+<dt>blob:</dt>
+<dd>The address of a blob.</dd>
+<dt>length:</dt>
+<dd>This length in bytes of the blob.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="blobtoimage">
+<h1><a class="toc-backref" href="#id49">BlobToImage</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *BlobToImage( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, const void *blob,
+ const size_t length, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>BlobToImage() implements direct to memory image formats. It returns the
+blob as an image.</p>
+<p>The format of the BlobToImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *BlobToImage( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, const void *blob,
+ const size_t length, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image_info:</dt>
+<dd>The image info.</dd>
+<dt>blob:</dt>
+<dd>The address of a character stream in one of the image formats
+understood by GraphicsMagick.</dd>
+<dt>length:</dt>
+<dd>This size_t integer reflects the length in bytes of the blob.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="cloneblobinfo">
+<h1><a class="toc-backref" href="#id50">CloneBlobInfo</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#blobinfo">BlobInfo</a> *CloneBlobInfo( const <a class="reference external" href="../api/types.html#blobinfo">BlobInfo</a> *blob_info );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>CloneBlobInfo() makes a duplicate of the given blob info structure, or if
+blob info is NULL, a new one.</p>
+<p>The format of the CloneBlobInfo method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#blobinfo">BlobInfo</a> *CloneBlobInfo( const <a class="reference external" href="../api/types.html#blobinfo">BlobInfo</a> *blob_info );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>clone_info:</dt>
+<dd>Method CloneBlobInfo returns a duplicate of the given
+blob info, or if blob info is NULL a new one.</dd>
+<dt>quantize_info:</dt>
+<dd>a structure of type info.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="destroyblob">
+<h1><a class="toc-backref" href="#id51">DestroyBlob</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DestroyBlob( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>DestroyBlob() deallocates memory associated with a blob. The blob is
+a reference counted object so the object is only destroyed once its
+reference count decreases to zero.</p>
+<p>The format of the DestroyBlob method is:</p>
+<pre class="literal-block">
+void DestroyBlob( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="destroyblobinfo">
+<h1><a class="toc-backref" href="#id52">DestroyBlobInfo</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DestroyBlobInfo( <a class="reference external" href="../api/types.html#blobinfo">BlobInfo</a> *blob );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>DestroyBlobInfo() deallocates memory associated with an BlobInfo structure.
+The blob is a reference counted object so the object is only destroyed once
+its reference count decreases to zero. Use of DestroyBlob is preferred over
+this function since it assures that the blob is closed prior to destruction.</p>
+<p>This function is no longer used within GraphicsMagick.</p>
+<p>The format of the DestroyBlobInfo method is:</p>
+<pre class="literal-block">
+void DestroyBlobInfo( <a class="reference external" href="../api/types.html#blobinfo">BlobInfo</a> *blob );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>blob:</dt>
+<dd>Specifies a pointer to a BlobInfo structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="detachblob">
+<h1><a class="toc-backref" href="#id53">DetachBlob</a></h1>
+<div class="section" id="id15">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DetachBlob( <a class="reference external" href="../api/types.html#blobinfo">BlobInfo</a> *blob_info );
+</pre>
+</div>
+<div class="section" id="id16">
+<h2>Description</h2>
+<p>DetachBlob() detaches a blob from the BlobInfo structure.</p>
+<p>The format of the DetachBlob method is:</p>
+<pre class="literal-block">
+void DetachBlob( <a class="reference external" href="../api/types.html#blobinfo">BlobInfo</a> *blob_info );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>blob_info:</dt>
+<dd>Specifies a pointer to a BlobInfo structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="filetoblob">
+<h1><a class="toc-backref" href="#id54">FileToBlob</a></h1>
+<div class="section" id="id17">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void *FileToBlob( const char *filename, size_t *length, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id18">
+<h2>Description</h2>
+<p>FileToBlob() returns the contents of a file in a buffer allocated via
+MagickMalloc() (which is equivalent to the system malloc() by default).
+The character '0' is appended to the buffer in case the buffer will be
+accessed as a string. The length of the buffer (not including the extra
+terminating '0' character) is returned via the 'length' parameter.
+If an error occurs, a NULL pointer is returned. The returned buffer
+must be freed by the user in a matter compatible with MagickMalloc()
+(e.g. via MagickFree()).</p>
+<p>The format of the FileToBlob method is:</p>
+<pre class="literal-block">
+void *FileToBlob( const char *filename, size_t *length, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>blob:</dt>
+<dd>FileToBlob() returns the contents of a file as a blob. If
+an error occurs NULL is returned.</dd>
+<dt>filename:</dt>
+<dd>The filename.</dd>
+<dt>length:</dt>
+<dd>This pointer to a size_t integer sets the initial length of the
+blob. On return, it reflects the actual length of the blob.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getblobfilehandle">
+<h1><a class="toc-backref" href="#id55">GetBlobFileHandle</a></h1>
+<div class="section" id="id19">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+FILE *GetBlobFileHandle( const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id20">
+<h2>Description</h2>
+<p>GetBlobFileHandle() returns the stdio file handle associated with the
+image blob. If there is no associated file handle, then a null pointer
+is returned.</p>
+<p>The format of the GetBlobFileHandle method is:</p>
+<pre class="literal-block">
+FILE *GetBlobFileHandle( const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>Image to query</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getblobinfo">
+<h1><a class="toc-backref" href="#id56">GetBlobInfo</a></h1>
+<div class="section" id="id21">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void GetBlobInfo( <a class="reference external" href="../api/types.html#blobinfo">BlobInfo</a> *blob_info );
+</pre>
+</div>
+<div class="section" id="id22">
+<h2>Description</h2>
+<p>GetBlobInfo() initializes the BlobInfo structure.</p>
+<p>The format of the GetBlobInfo method is:</p>
+<pre class="literal-block">
+void GetBlobInfo( <a class="reference external" href="../api/types.html#blobinfo">BlobInfo</a> *blob_info );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>blob_info:</dt>
+<dd>Specifies a pointer to a BlobInfo structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getblobstatus">
+<h1><a class="toc-backref" href="#id57">GetBlobStatus</a></h1>
+<div class="section" id="id23">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+int GetBlobStatus( const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id24">
+<h2>Description</h2>
+<p>GetBlobStatus() returns the blob error status. For GraphicsMagick
+1.3.26 and earlier, this was only set by CloseBlob() but now it is
+set immediately upon error.</p>
+<p>The format of the GetBlobStatus method is:</p>
+<pre class="literal-block">
+int GetBlobStatus( const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getblobfirsterrno">
+<h1><a class="toc-backref" href="#id58">GetBlobFirstErrno</a></h1>
+<div class="section" id="id25">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+int GetBlobFirstErrno( const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id26">
+<h2>Description</h2>
+<p>GetBlobFirstErrno() returns the errno present (if any) when the blob
+first encountered as error, as indicated by GetBlobStatus(). The
+the purpose of this function is to help improve the quality of error
+reporting.</p>
+<p>The format of the GetBlobFirstErrno method is:</p>
+<pre class="literal-block">
+int GetBlobFirstErrno( const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getblobstreamdata">
+<h1><a class="toc-backref" href="#id59">GetBlobStreamData</a></h1>
+<div class="section" id="id27">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned char *GetBlobStreamData( const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id28">
+<h2>Description</h2>
+<p>GetBlobStreamData() returns the stream data for the image. The data is only
+available if the data is stored on the heap, or is memory mapped.
+Otherwise a NULL value is returned.</p>
+<p>The format of the GetBlobStreamData method is:</p>
+<pre class="literal-block">
+unsigned char *GetBlobStreamData( const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getblobtemporary">
+<h1><a class="toc-backref" href="#id60">GetBlobTemporary</a></h1>
+<div class="section" id="id29">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickBool GetBlobTemporary( const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id30">
+<h2>Description</h2>
+<p>GetBlobTemporary() returns MagickTrue if the file associated with the blob
+is a temporary file and should be removed when the associated image is
+destroyed.</p>
+<p>The format of the GetBlobTemporary method is:</p>
+<pre class="literal-block">
+MagickBool GetBlobTemporary( const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>Image to query</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getconfigureblob">
+<h1><a class="toc-backref" href="#id61">GetConfigureBlob</a></h1>
+<div class="section" id="id31">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void *GetConfigureBlob( const char *filename, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id32">
+<h2>Description</h2>
+<p>GetConfigureBlob() returns the specified configure file as a blob.</p>
+<p>The format of the GetConfigureBlob method is:</p>
+<pre class="literal-block">
+void *GetConfigureBlob( const char *filename, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>filename:</dt>
+<dd>The configure file name.</dd>
+<dt>path:</dt>
+<dd>return the full path information of the configure file.</dd>
+<dt>length:</dt>
+<dd>This pointer to a size_t integer sets the initial length of the
+blob. On return, it reflects the actual length of the blob.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="imagetoblob">
+<h1><a class="toc-backref" href="#id62">ImageToBlob</a></h1>
+<div class="section" id="id33">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void *ImageToBlob( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, <a class="reference external" href="../api/types.html#image">Image</a> *image, size_t *length,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id34">
+<h2>Description</h2>
+<p>ImageToBlob() implements direct to memory image formats. It returns the
+image as a formatted blob and its length. The magick member of the Image
+structure determines the format of the returned blob (GIF, JPEG, PNG,
+etc.). This function is the equivalent of WriteImage(), but writes the
+formatted "file" to a memory buffer rather than to an actual file.</p>
+<p>The format of the ImageToBlob method is:</p>
+<pre class="literal-block">
+void *ImageToBlob( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, <a class="reference external" href="../api/types.html#image">Image</a> *image, size_t *length,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image_info:</dt>
+<dd>The image info.</dd>
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>length:</dt>
+<dd>This pointer to a size_t integer sets the initial length of the
+blob. On return, it reflects the actual length of the blob.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="imagetofile">
+<h1><a class="toc-backref" href="#id63">ImageToFile</a></h1>
+<div class="section" id="id35">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail ImageToFile( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *filename,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id36">
+<h2>Description</h2>
+<p>ImageToFile() copies the input image from an open blob stream to a file.
+It returns False if an error occurs otherwise True. This function is used
+to handle coders which are unable to stream the data in using Blob I/O.
+Instead of streaming the data in, the data is streammed to a temporary
+file, and the coder accesses the temorary file directly.</p>
+<p>The format of the ImageToFile method is:</p>
+<pre class="literal-block">
+MagickPassFail ImageToFile( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *filename,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>status:</dt>
+<dd>ImageToFile returns MagickPass on success; otherwise, it
+returns MagickFail if an error occurs.</dd>
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>filename:</dt>
+<dd>Write the image to this file.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pingblob">
+<h1><a class="toc-backref" href="#id64">PingBlob</a></h1>
+<div class="section" id="id37">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *PingBlob( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, const void *blob, const size_t length,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id38">
+<h2>Description</h2>
+<p>PingBlob() returns all the attributes of an image or image sequence except
+for the pixels. It is much faster and consumes far less memory than
+BlobToImage(). On failure, a NULL image is returned and exception
+describes the reason for the failure.</p>
+<p>The format of the PingBlob method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *PingBlob( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, const void *blob, const size_t length,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image_info:</dt>
+<dd>The image info.</dd>
+<dt>blob:</dt>
+<dd>The address of a character stream in one of the image formats
+understood by GraphicsMagick.</dd>
+<dt>length:</dt>
+<dd>This size_t integer reflects the length in bytes of the blob.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="referenceblob">
+<h1><a class="toc-backref" href="#id65">ReferenceBlob</a></h1>
+<div class="section" id="id39">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#blobinfo">BlobInfo</a> ReferenceBlob( <a class="reference external" href="../api/types.html#blobinfo">BlobInfo</a> *blob_info );
+</pre>
+</div>
+<div class="section" id="id40">
+<h2>Description</h2>
+<p>ReferenceBlob() increments the reference count associated with the pixel
+blob, returning a pointer to the blob.</p>
+<p>The format of the ReferenceBlob method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#blobinfo">BlobInfo</a> ReferenceBlob( <a class="reference external" href="../api/types.html#blobinfo">BlobInfo</a> *blob_info );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>blob_info:</dt>
+<dd>The blob_info.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setblobclosable">
+<h1><a class="toc-backref" href="#id66">SetBlobClosable</a></h1>
+<div class="section" id="id41">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void SetBlobClosable( <a class="reference external" href="../api/types.html#image">Image</a> *image, MagickBool closeable );
+</pre>
+</div>
+<div class="section" id="id42">
+<h2>Description</h2>
+<p>SetBlobClosable() enables closing the blob if MagickTrue is passed, and
+exempts the blob from being closed if False is passed. Blobs are closable
+by default (default MagickTrue).</p>
+<p>The format of the SetBlobClosable method is:</p>
+<pre class="literal-block">
+void SetBlobClosable( <a class="reference external" href="../api/types.html#image">Image</a> *image, MagickBool closeable );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>Image to update</dd>
+<dt>closeable:</dt>
+<dd>Set to FALSE in order to disable closing the blob.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setblobtemporary">
+<h1><a class="toc-backref" href="#id67">SetBlobTemporary</a></h1>
+<div class="section" id="id43">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void SetBlobTemporary( <a class="reference external" href="../api/types.html#image">Image</a> *image, MagickBool isTemporary );
+</pre>
+</div>
+<div class="section" id="id44">
+<h2>Description</h2>
+<p>SetBlobTemporary() sets a boolean flag (default False) to specify if
+the file associated with the blob is a temporary file and should be
+removed when the associated image is destroyed.</p>
+<p>The format of the SetBlobTemporary method is:</p>
+<pre class="literal-block">
+void SetBlobTemporary( <a class="reference external" href="../api/types.html#image">Image</a> *image, MagickBool isTemporary );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>Image to update</dd>
+<dt>isTemporary:</dt>
+<dd>Set to True to indicate that the file associated with
+the blob is temporary.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="cdl">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>cdl</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="cdl">
+<h1 class="title">cdl</h1>
+<h2 class="subtitle" id="apply-asc-cdl-transform-to-image">Apply ASC CDL transform to image</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#cdlimage" id="id1">CdlImage</a></li>
+</ul>
+</div>
+<div class="section" id="cdlimage">
+<h1><a class="toc-backref" href="#id1">CdlImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail CdlImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *cdl );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>The CdlImage() method applies ("bakes in") the ASC-CDL which is a format
+for the exchange of basic primary color grading information between
+equipment and software from different manufacturers. The format defines
+the math for three functions: slope, offset and power. Each function uses
+a number for the red, green, and blue color channels for a total of nine
+numbers comprising a single color decision. A tenth number for chrominance
+(saturation) has been proposed but is not yet standardized.</p>
+<p>The cdl argument string is comma delimited and is in the form (but
+without invervening spaces or line breaks):</p>
+<p>redslope, redoffset, redpower :
+greenslope, greenoffset, greenpower :
+blueslope, blueoffset, bluepower :
+saturation</p>
+<p>with the unity (no change) specification being:</p>
+<p>"1.0,0.0,1.0:1.0,0.0,1.0:1.0,0.0,1.0:0.0"</p>
+<p>See <a class="reference external" href="http://en.wikipedia.org/wiki/ASC_CDL">http://en.wikipedia.org/wiki/ASC_CDL</a> for more information.</p>
+<p>The format of the CdlImage method is:</p>
+<pre class="literal-block">
+MagickPassFail CdlImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *cdl );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>cdl:</dt>
+<dd>Define the coefficients for slope offset and power in the
+red green and blue channels, plus saturation.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="channel">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>channel</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="channel">
+<h1 class="title">channel</h1>
+<h2 class="subtitle" id="image-channel-functions">Image channel functions</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#channelimage" id="id11">ChannelImage</a></li>
+<li><a class="reference internal" href="#exportimagechannel" id="id12">ExportImageChannel</a></li>
+<li><a class="reference internal" href="#getimagechanneldepth" id="id13">GetImageChannelDepth</a></li>
+<li><a class="reference internal" href="#importimagechannel" id="id14">ImportImageChannel</a></li>
+<li><a class="reference internal" href="#importimagechannelsmasked" id="id15">ImportImageChannelsMasked</a></li>
+<li><a class="reference internal" href="#setimagechanneldepth" id="id16">SetImageChannelDepth</a></li>
+</ul>
+</div>
+<div class="section" id="channelimage">
+<h1><a class="toc-backref" href="#id11">ChannelImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int ChannelImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>Transform an image so that the resulting image is a grayscale image
+based on a specified image channel. The resulting image is returned in
+the RGB colorspace. This function does not force or assume an input
+image colorspace so it may be used to extract channels from images in
+colorspaces other than RGB or CMYK. For example, if the image is currently
+transformed to the HWB colorspace, the 'B' channel may be extracted by
+specifying RedChannel as the ChannelType argument.</p>
+<p>The format of the ChannelImage method is:</p>
+<pre class="literal-block">
+unsigned int ChannelImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>channel:</dt>
+<dd>Identify which channel to extract: Red, Cyan, Green, Magenta,
+Blue, Yellow, or Opacity.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="exportimagechannel">
+<h1><a class="toc-backref" href="#id12">ExportImageChannel</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ExportImageChannel( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>ExportImageChannel() exports a specified image channel as a new image.</p>
+<p>The format of the ExportImageChannel method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ExportImageChannel( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The source image.</dd>
+<dt>channel:</dt>
+<dd>The image channel to export</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getimagechanneldepth">
+<h1><a class="toc-backref" href="#id13">GetImageChannelDepth</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long GetImageChannelDepth( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>GetImageChannelDepth() returns the minimum bit depth required to store
+the specified image channel without actual loss of color resolution.
+Pixel components are stored in a Quantum, which is 8, 16, or 32 bits
+depending on the QuantumDepth value set when the software is compiled.
+GetImageChannelDepth() returns the smallest modulus storage size which
+supports the scale of the pixel within the range (i.e. no information is
+lost). As an example, the value one is returned for a bilevel channel
+since only one bit of resolution is required to represent a bilevel channel.</p>
+<p>The format of the GetImageChannelDepth method is:</p>
+<pre class="literal-block">
+unsigned long GetImageChannelDepth( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>channel:</dt>
+<dd>Channel to test.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="importimagechannel">
+<h1><a class="toc-backref" href="#id14">ImportImageChannel</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail ImportImageChannel( const <a class="reference external" href="../api/types.html#image">Image</a> *source_image, <a class="reference external" href="../api/types.html#image">Image</a> *update_image,
+ const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>ImportImageChannel() imports an image into the specified image channel.</p>
+<p>The format of the ImportImageChannel method is:</p>
+<pre class="literal-block">
+MagickPassFail ImportImageChannel( const <a class="reference external" href="../api/types.html#image">Image</a> *source_image, <a class="reference external" href="../api/types.html#image">Image</a> *update_image,
+ const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel );
+</pre>
+<dl class="docutils">
+<dt>source_image:</dt>
+<dd>The image to use as the replacement image channel.</dd>
+<dt>update_image:</dt>
+<dd>The image to import the channel into.</dd>
+<dt>channel:</dt>
+<dd>The image channel to import</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="importimagechannelsmasked">
+<h1><a class="toc-backref" href="#id15">ImportImageChannelsMasked</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail ImportImageChannelsMasked( const <a class="reference external" href="../api/types.html#image">Image</a> *source_image,
+ <a class="reference external" href="../api/types.html#image">Image</a> *update_image,
+ const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channels );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>ImportImageChannelsMasked() imports all the channels from a source
+image to an update image, except for the channels specified.</p>
+<p>The format of the ImportImageChannelsMasked method is:</p>
+<pre class="literal-block">
+MagickPassFail ImportImageChannelsMasked( const <a class="reference external" href="../api/types.html#image">Image</a> *source_image,
+ <a class="reference external" href="../api/types.html#image">Image</a> *update_image,
+ const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channels );
+</pre>
+<dl class="docutils">
+<dt>source_image:</dt>
+<dd>The image from which to extract the replacement channels.</dd>
+<dt>update_image:</dt>
+<dd>The image to import the channels into.</dd>
+<dt>channel:</dt>
+<dd>The image channel to import</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setimagechanneldepth">
+<h1><a class="toc-backref" href="#id16">SetImageChannelDepth</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail SetImageChannelDepth( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const unsigned int depth );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>SetImageChannelDepth() translates the pixel quantums in the specified
+channel so that if they are later divided to fit within the specified bit
+depth, that no additional information is lost (i.e. no remainder resulting
+from the division). Note that any subsequent image processing is likely
+to increase the effective depth of the image channels. A non-zero
+value is returned if the operation is successful. Check the exception
+member of image to determine the cause for any failure.</p>
+<p>The format of the SetImageChannelDepth method is:</p>
+<pre class="literal-block">
+MagickPassFail SetImageChannelDepth( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const unsigned int depth );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image to update.</dd>
+<dt>channel:</dt>
+<dd>Channel to modify.</dd>
+<dt>depth:</dt>
+<dd>Desired channel depth (range 1 to QuantumDepth)</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="color">
which specify the number of times each unique color occurs in the image.
The referenced colors parameter is updated with the number of unique colors
in the image. The returned array should be deallocated by the user once it
-is no longer ndded.</p>
+is no longer needed.</p>
<p>The format of the GetColorHistogram method is:</p>
<pre class="literal-block">
HistogramColorPacket *GetColorHistogram( const <a class="reference external" href="../api/types.html#image">Image</a> *, unsigned long *colors,
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>color</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="color">
+<h1 class="title">color</h1>
+<h2 class="subtitle" id="color-related-functions">Color related functions</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#getcolorhistogram" id="id5">GetColorHistogram</a></li>
+<li><a class="reference internal" href="#getnumbercolors" id="id6">GetNumberColors</a></li>
+<li><a class="reference internal" href="#ispaletteimage" id="id7">IsPaletteImage</a></li>
+</ul>
+</div>
+<div class="section" id="getcolorhistogram">
+<h1><a class="toc-backref" href="#id5">GetColorHistogram</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+HistogramColorPacket *GetColorHistogram( const <a class="reference external" href="../api/types.html#image">Image</a> *, unsigned long *colors,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *);
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>Method GetColorHistogram returns an array of HistogramColorPacket structures
+which specify the number of times each unique color occurs in the image.
+The referenced colors parameter is updated with the number of unique colors
+in the image. The returned array should be deallocated by the user once it
+is no longer ndded.</p>
+<p>The format of the GetColorHistogram method is:</p>
+<pre class="literal-block">
+HistogramColorPacket *GetColorHistogram( const <a class="reference external" href="../api/types.html#image">Image</a> *, unsigned long *colors,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *);
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>colors:</dt>
+<dd>The referenced value is updated with the with the number of
+unique colors.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getnumbercolors">
+<h1><a class="toc-backref" href="#id6">GetNumberColors</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long GetNumberColors( const <a class="reference external" href="../api/types.html#image">Image</a> *image, FILE *file,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>Method GetNumberColors returns the number of unique colors in an image.</p>
+<p>The format of the GetNumberColors method is:</p>
+<pre class="literal-block">
+unsigned long GetNumberColors( const <a class="reference external" href="../api/types.html#image">Image</a> *image, FILE *file,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>file:</dt>
+<dd>Write a histogram of the color distribution to this file handle.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="ispaletteimage">
+<h1><a class="toc-backref" href="#id7">IsPaletteImage</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickBool IsPaletteImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>Method IsPaletteImage returns True if the image is PseudoClass and has 256
+unique colors or less.</p>
+<p>The format of the IsPaletteImage method is:</p>
+<pre class="literal-block">
+MagickBool IsPaletteImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<p>A description of each parameter follows.</p>
+<dl class="docutils">
+<dt>status:</dt>
+<dd>Method IsPaletteImage returns True is the image is
+PseudoClass or has 256 color or less.</dd>
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="colormap">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>colormap</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="colormap">
+<h1 class="title">colormap</h1>
+<h2 class="subtitle" id="colormap-related-functions">Colormap related functions</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#allocateimagecolormap" id="id5">AllocateImageColormap</a></li>
+<li><a class="reference internal" href="#cyclecolormapimage" id="id6">CycleColormapImage</a></li>
+<li><a class="reference internal" href="#replaceimagecolormap" id="id7">ReplaceImageColormap</a></li>
+</ul>
+</div>
+<div class="section" id="allocateimagecolormap">
+<h1><a class="toc-backref" href="#id5">AllocateImageColormap</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail AllocateImageColormap( <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned long colors );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>AllocateImageColormap() allocates an image colormap and initializes
+it to a linear gray colorspace with increasing intensity. If the image
+already has a colormap, it is replaced. AllocateImageColormap() returns
+MagickPass if successful, otherwise MagickFail if there is not enough memory.</p>
+<p>The format of the AllocateImageColormap method is:</p>
+<pre class="literal-block">
+MagickPassFail AllocateImageColormap( <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned long colors );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>colors:</dt>
+<dd>The number of colors in the image colormap.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="cyclecolormapimage">
+<h1><a class="toc-backref" href="#id6">CycleColormapImage</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail CycleColormapImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const int amount );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>CycleColormap() displaces an image's colormap by a given number of
+positions. If you cycle the colormap a number of times you can produce
+a psychodelic effect.</p>
+<p>The format of the CycleColormapImage method is:</p>
+<pre class="literal-block">
+MagickPassFail CycleColormapImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const int amount );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>amount:</dt>
+<dd>Offset the colormap this much.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="replaceimagecolormap">
+<h1><a class="toc-backref" href="#id7">ReplaceImageColormap</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail ReplaceImageColormap( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *colormap,
+ const unsigned int colors );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>ReplaceImageColormap() replaces an existing image colormap with a new
+image colormap. The new image colormap is expected to contain all of the
+colors from the existing colormap. The existing colormap indexes are
+adjusted to conform with positions in the new colormap. If the new
+colormap contains duplicate entries, then the associated colormap index
+will point to the first entry found in the colormap and other matching
+entries will not be used. MagickPass is returned if the operation is
+successful, otherwise MagickFail is returned, and image->exception is
+updated with the cause of the failure.</p>
+<p>This function is useful in case colormap entries need to match across
+multiple images or otherwise occupy specific locations.</p>
+<p>The format of the ReplaceImageColormap method is:</p>
+<pre class="literal-block">
+MagickPassFail ReplaceImageColormap( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *colormap,
+ const unsigned int colors );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>image in which to replace colormap.</dd>
+<dt>colormap:</dt>
+<dd>new colormap.</dd>
+<dt>colors:</dt>
+<dd>number of colors in new colormap.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="compare">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>compare</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="compare">
+<h1 class="title">compare</h1>
+<h2 class="subtitle" id="compare-images">Compare images</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#differenceimage" id="id13">DifferenceImage</a></li>
+<li><a class="reference internal" href="#getimagechanneldifference" id="id14">GetImageChannelDifference</a></li>
+<li><a class="reference internal" href="#getimagechanneldistortion" id="id15">GetImageChannelDistortion</a></li>
+<li><a class="reference internal" href="#getimagedistortion" id="id16">GetImageDistortion</a></li>
+<li><a class="reference internal" href="#isimagesequal" id="id17">IsImagesEqual</a></li>
+<li><a class="reference internal" href="#initializedifferenceimageoptions" id="id18">InitializeDifferenceImageOptions</a></li>
+<li><a class="reference internal" href="#initializedifferencestatistics" id="id19">InitializeDifferenceStatistics</a></li>
+</ul>
+</div>
+<div class="section" id="differenceimage">
+<h1><a class="toc-backref" href="#id13">DifferenceImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *DifferenceImage( const <a class="reference external" href="../api/types.html#image">Image</a> *reference_image, const <a class="reference external" href="../api/types.html#image">Image</a> *compare_image,
+ const DifferenceImageOptions *difference_options,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>DifferenceImage() returns an annotated difference image based on the
+the difference between a reference image and a compare image.</p>
+<p>The format of the DifferenceImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *DifferenceImage( const <a class="reference external" href="../api/types.html#image">Image</a> *reference_image, const <a class="reference external" href="../api/types.html#image">Image</a> *compare_image,
+ const DifferenceImageOptions *difference_options,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>reference_image:</dt>
+<dd>the reference image.</dd>
+<dt>compare_image:</dt>
+<dd>the comparison image.</dd>
+<dt>difference_options:</dt>
+<dd>options to use when differencing.</dd>
+<dt>channel:</dt>
+<dd>the channel(s) to compare.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getimagechanneldifference">
+<h1><a class="toc-backref" href="#id14">GetImageChannelDifference</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail GetImageChannelDifference( const <a class="reference external" href="../api/types.html#image">Image</a> *reference_image,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *compare_image,
+ const MetricType metric,
+ DifferenceStatistics *statistics,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>GetImageChannelDifference() updates a user provided statistics structure
+with per-channel, and totalized, difference statistics corresponding
+to a specified comparison metric.</p>
+<p>The format of the GetImageChannelDifference method is:</p>
+<pre class="literal-block">
+MagickPassFail GetImageChannelDifference( const <a class="reference external" href="../api/types.html#image">Image</a> *reference_image,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *compare_image,
+ const MetricType metric,
+ DifferenceStatistics *statistics,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>reference_image:</dt>
+<dd>the reference image.</dd>
+<dt>compare_image:</dt>
+<dd>the comparison image.</dd>
+<dt>metric:</dt>
+<dd>metric to use when differencing.</dd>
+<dt>statistics:</dt>
+<dd>the statistics structure to populate.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getimagechanneldistortion">
+<h1><a class="toc-backref" href="#id15">GetImageChannelDistortion</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail GetImageChannelDistortion( const <a class="reference external" href="../api/types.html#image">Image</a> *reference_image,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *compare_image,
+ const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const MetricType metric, double *distortion,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>GetImageChannelDistortion() updates a distortion parameter with the
+distortion (error) computed according to the specified comparison metric.
+The value returned is only for the channel specified.</p>
+<p>The format of the GetImageChannelDistortion method is:</p>
+<pre class="literal-block">
+MagickPassFail GetImageChannelDistortion( const <a class="reference external" href="../api/types.html#image">Image</a> *reference_image,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *compare_image,
+ const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const MetricType metric, double *distortion,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>reference_image:</dt>
+<dd>the reference image.</dd>
+<dt>compare_image:</dt>
+<dd>the comparison image.</dd>
+<dt>channel:</dt>
+<dd>the channel to obtain error data for.</dd>
+<dt>metric:</dt>
+<dd>metric to use when differencing.</dd>
+<dt>distortion:</dt>
+<dd>updated with the computed distortion.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getimagedistortion">
+<h1><a class="toc-backref" href="#id16">GetImageDistortion</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail GetImageDistortion( const <a class="reference external" href="../api/types.html#image">Image</a> *reference_image,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *compare_image, const MetricType metric,
+ double *distortion, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>GetImageDistortion() updates a distortion parameter with the distortion
+(error) computed according to the specified comparison metric. The value
+returned reflects all enabled channels.</p>
+<p>The format of the GetImageDistortion method is:</p>
+<pre class="literal-block">
+MagickPassFail GetImageDistortion( const <a class="reference external" href="../api/types.html#image">Image</a> *reference_image,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *compare_image, const MetricType metric,
+ double *distortion, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>reference_image:</dt>
+<dd>the reference image.</dd>
+<dt>compare_image:</dt>
+<dd>the comparison image.</dd>
+<dt>channel:</dt>
+<dd>the channel to obtain error data for.</dd>
+<dt>metric:</dt>
+<dd>metric to use when differencing.</dd>
+<dt>distortion:</dt>
+<dd>updated with the computed distortion.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="isimagesequal">
+<h1><a class="toc-backref" href="#id17">IsImagesEqual</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickBool IsImagesEqual( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#image">Image</a> *reference );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>IsImagesEqual() measures the difference between colors at each pixel
+location of two images. A value other than 0 means the colors match
+exactly. Otherwise an error measure is computed by summing over all
+pixels in an image the distance squared in RGB space between each image
+pixel and its corresponding pixel in the reference image. The error
+measure is assigned to these image members:</p>
+<p>o mean_error_per_pixel: The mean error for any single pixel in
+the image.</p>
+<p>o normalized_mean_error: The normalized mean quantization error for
+any single pixel in the image. This distance measure is normalized to
+a range between 0 and 1. It is independent of the range of red, green,
+and blue values in the image.</p>
+<p>o normalized_maximum_error: The normalized maximum quantization
+error for any single pixel in the image. This distance measure is
+normalized to a range between 0 and 1. It is independent of the range
+of red, green, and blue values in your image.</p>
+<p>A small normalized mean square error, accessed as
+image->normalized_mean_error, suggests the images are very similiar in
+spatial layout and color.</p>
+<p>The format of the IsImagesEqual method is:</p>
+<pre class="literal-block">
+MagickBool IsImagesEqual( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#image">Image</a> *reference );
+</pre>
+<p>A description of each parameter follows.</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>reference:</dt>
+<dd>The reference image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="initializedifferenceimageoptions">
+<h1><a class="toc-backref" href="#id18">InitializeDifferenceImageOptions</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void InitializeDifferenceImageOptions( DifferenceImageOptions *options,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>InitializeDifferenceImageOptions() assigns default options to a user-provided
+DifferenceImageOptions structure. This function should always be used
+to initialize the DifferenceImageOptions structure prior to making any
+changes to it.</p>
+<p>The format of the InitializeDifferenceImageOptions method is:</p>
+<pre class="literal-block">
+void InitializeDifferenceImageOptions( DifferenceImageOptions *options,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>options:</dt>
+<dd>pointer to DifferenceImageOptions structure to initialize.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="initializedifferencestatistics">
+<h1><a class="toc-backref" href="#id19">InitializeDifferenceStatistics</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void InitializeDifferenceStatistics( DifferenceStatistics *options,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>InitializeDifferenceStatistics() assigns default options to a user-provided
+DifferenceStatistics structure.</p>
+<p>The format of the InitializeDifferenceStatistics method is:</p>
+<pre class="literal-block">
+void InitializeDifferenceStatistics( DifferenceStatistics *options,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>options:</dt>
+<dd>pointer to DifferenceStatistics structure to initialize.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="composite">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>composite</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="composite">
+<h1 class="title">composite</h1>
+<h2 class="subtitle" id="merge-image-pixels-using-a-specified-algorithm">Merge image pixels using a specified algorithm</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#compositeimage" id="id1">CompositeImage</a></li>
+</ul>
+</div>
+<div class="section" id="compositeimage">
+<h1><a class="toc-backref" href="#id1">CompositeImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail CompositeImage( <a class="reference external" href="../api/types.html#image">Image</a> *canvas_image, const <a class="reference external" href="../api/types.html#compositeoperator">CompositeOperator</a> compose,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *composite_image, const long x_offset,
+ const long y_offset );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>CompositeImage() composites the second image (composite_image) onto the
+first (canvas_image) at the specified offsets.</p>
+<p>The format of the CompositeImage method is:</p>
+<pre class="literal-block">
+MagickPassFail CompositeImage( <a class="reference external" href="../api/types.html#image">Image</a> *canvas_image, const <a class="reference external" href="../api/types.html#compositeoperator">CompositeOperator</a> compose,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *composite_image, const long x_offset,
+ const long y_offset );
+</pre>
+<dl class="docutils">
+<dt>canvas_image:</dt>
+<dd>The image to be updated.</dd>
+<dt>compose:</dt>
+<dd>This operator affects how the composite is applied to
+the image. Choose from one of these operators: AddCompositeOp,
+AtopCompositeOp, BumpmapCompositeOp, ClearCompositeOp,
+ColorizeCompositeOp, CopyBlackCompositeOp, CopyBlueCompositeOp,
+CopyCompositeOp, CopyCyanCompositeOp,CopyGreenCompositeOp,
+CopyMagentaCompositeOp, CopyOpacityCompositeOp, CopyRedCompositeOp,
+CopyYellowCompositeOp, DarkenCompositeOp, DifferenceCompositeOp,
+DisplaceCompositeOp, DissolveCompositeOp, DivideCompositeOp,
+HueCompositeOp, InCompositeOp, LightenCompositeOp, LuminizeCompositeOp,
+MinusCompositeOp, ModulateCompositeOp, MultiplyCompositeOp,
+NoCompositeOp, OutCompositeOp, OverlayCompositeOp, PlusCompositeOp,
+SaturateCompositeOp, ScreenCompositeOp, SubtractCompositeOp,
+ThresholdCompositeOp, XorCompositeOp, HardLightCompositeOp.</dd>
+<dt>composite_image:</dt>
+<dd>The composite image.</dd>
+<dt>x_offset:</dt>
+<dd>The column offset of the composited image.</dd>
+<dt>y_offset:</dt>
+<dd>The row offset of the composited image.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="confirm-access">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>confirm_access</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="confirm-access">
+<h1 class="title">confirm_access</h1>
+<h2 class="subtitle" id="access-confirmation-functions">Access confirmation functions</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#magickconfirmaccess" id="id3">MagickConfirmAccess</a></li>
+<li><a class="reference internal" href="#magicksetconfirmaccesshandler" id="id4">MagickSetConfirmAccessHandler</a></li>
+</ul>
+</div>
+<div class="section" id="magickconfirmaccess">
+<h1><a class="toc-backref" href="#id3">MagickConfirmAccess</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail MagickConfirmAccess( const ConfirmAccessMode mode, const char *path,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>MagickConfirmAccess() calls the access confirmation handler method with
+parameters which describe the requested access mode and path/URL, as well
+as an ExceptionInfo structure to update with any error information. A
+user-provided callback (set by MagickSetConfirmAccessHandler()) is
+invoked. If the callback returns MagickFail, then this function also
+returns MagickFail, which is intended to determine if the operation may
+continue. The callback is expected to report the reason access is denied
+by filling out the ExceptionInfo structure. If the callback fails to do
+so, then a generic "access denied" error is reported.</p>
+<p>The format of the MagickConfirmAccess method is:</p>
+<pre class="literal-block">
+MagickPassFail MagickConfirmAccess( const ConfirmAccessMode mode, const char *path,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>mode:</dt>
+<dd>The type of access to be performed.</dd>
+<dt>path:</dt>
+<dd>The local path or URL requested to be accessed.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetconfirmaccesshandler">
+<h1><a class="toc-backref" href="#id4">MagickSetConfirmAccessHandler</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+ConfirmAccessHandler MagickSetConfirmAccessHandler( ConfirmAccessHandler handler );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>MagickSetConfirmAccessHandler() sets the access confirmation handler to
+the specified method and returns the previous access confirmation handler.
+This access confirmation handler is used to "approve" access to files and
+URLs. If the handler returns MagickFalse, then access is denied. This
+mechanism may be used to enforce security policies and/or may be used to
+monitor file and URL accesses.</p>
+<p>The format of the MagickSetConfirmAccessHandler method is:</p>
+<pre class="literal-block">
+ConfirmAccessHandler MagickSetConfirmAccessHandler( ConfirmAccessHandler handler );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>handler:</dt>
+<dd>Specifies a pointer to a method to handle access confirmation.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>constitute</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="constitute">
<h2 class="subtitle" id="read-or-write-an-image">Read or write an image</h2>
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#constituteimage" id="id15">ConstituteImage</a></li>
<li><a class="reference internal" href="#dispatchimage" id="id16">DispatchImage</a></li>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>constitute</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="constitute">
+<h1 class="title">constitute</h1>
+<h2 class="subtitle" id="read-or-write-an-image">Read or write an image</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#constituteimage" id="id15">ConstituteImage</a></li>
+<li><a class="reference internal" href="#dispatchimage" id="id16">DispatchImage</a></li>
+<li><a class="reference internal" href="#pingimage" id="id17">PingImage</a></li>
+<li><a class="reference internal" href="#readimage" id="id18">ReadImage</a></li>
+<li><a class="reference internal" href="#readinlineimage" id="id19">ReadInlineImage</a></li>
+<li><a class="reference internal" href="#writeimage" id="id20">WriteImage</a></li>
+<li><a class="reference internal" href="#writeimages" id="id21">WriteImages</a></li>
+<li><a class="reference internal" href="#writeimagesfile" id="id22">WriteImagesFile</a></li>
+</ul>
+</div>
+<div class="section" id="constituteimage">
+<h1><a class="toc-backref" href="#id15">ConstituteImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ConstituteImage( const unsigned long width, const unsigned long height,
+ const char *map, const <a class="reference external" href="../api/types.html#storagetype">StorageType</a> type, const void *pixels,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>ConstituteImage() returns an Image corresponding to an image stored
+in a raw memory array format. The pixel data must be in scanline order
+top-to-bottom. The data can be unsigned char, unsigned short int, unsigned
+int, unsigned long, float, or double. Float and double require the pixels
+to be normalized to the range [0..1], otherwise the range is [0..MaxVal]
+where MaxVal is the maximum possible value for that type.</p>
+<p>Note that for most 32-bit architectures the size of an unsigned long is
+the same as unsigned int, but for 64-bit architectures observing the LP64
+standard, an unsigned long is 64 bits, while an unsigned int remains 32
+bits. This should be considered when deciding if the data should be
+described as "Integer" or "Long".</p>
+<p>For example, to create a 640x480 image from unsigned red-green-blue
+character data, use</p>
+<p>image=ConstituteImage(640,480,"RGB",CharPixel,pixels,&exception);</p>
+<p>The format of the Constitute method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ConstituteImage( const unsigned long width, const unsigned long height,
+ const char *map, const <a class="reference external" href="../api/types.html#storagetype">StorageType</a> type, const void *pixels,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>width:</dt>
+<dd>width in pixels of the image.</dd>
+<dt>height:</dt>
+<dd>height in pixels of the image.</dd>
+<dt>map:</dt>
+<dd>This string reflects the expected ordering of the pixel array.
+It can be any combination or order of R = red, G = green, B = blue,
+A = alpha (same as Transparency), O = Opacity, T = Transparency,
+C = cyan, Y = yellow, M = magenta, K = black, or I = intensity
+(for grayscale). Specify "P" = pad, to skip over a quantum which is
+intentionally ignored. Creation of an alpha channel for CMYK images
+is currently not supported.</dd>
+<dt>type:</dt>
+<dd>Define the data type of the pixels. Float and double types are
+expected to be normalized [0..1] otherwise [0..MaxRGB]. Choose from
+these types: CharPixel, ShortPixel, IntegerPixel, LongPixel, FloatPixel,
+or DoublePixel.</dd>
+<dt>pixels:</dt>
+<dd>This array of values contain the pixel components as defined by
+map and type. You must preallocate this array where the expected
+length varies depending on the values of width, height, map, and type.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="dispatchimage">
+<h1><a class="toc-backref" href="#id16">DispatchImage</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail DispatchImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const long x_offset, const long y_offset,
+ const unsigned long columns, const unsigned long rows,
+ const char *map, const <a class="reference external" href="../api/types.html#storagetype">StorageType</a> type, void *pixels,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>DispatchImage() extracts pixel data from an Image into a raw memory array.
+The pixel data is written in scanline order top-to-bottom using an
+arbitrary quantum order specified by 'map', and with quantum size
+specified by 'type'.</p>
+<p>The output array data may be unsigned char, unsigned short int, unsigned
+int, unsigned long, float, or double. Float and double require the pixels
+to be normalized to the range [0..1], otherwise the range is [0..MaxVal]
+where MaxVal is the maximum possible value for that type.</p>
+<p>The method returns MagickPass on success or MagickFail if an error is
+encountered.</p>
+<p>Suppose we want want to extract the first scanline of a 640x480 image as
+character data in red-green-blue order:</p>
+<p>DispatchImage(image,0,0,640,1,"RGB",0,pixels,exception);</p>
+<p>The format of the DispatchImage method is:</p>
+<pre class="literal-block">
+MagickPassFail DispatchImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const long x_offset, const long y_offset,
+ const unsigned long columns, const unsigned long rows,
+ const char *map, const <a class="reference external" href="../api/types.html#storagetype">StorageType</a> type, void *pixels,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>x_offset, y_offset, columns, rows:</dt>
+<dd>These values define the perimeter
+of a region of pixels you want to extract.</dd>
+<dt>map:</dt>
+<dd>This string reflects the expected ordering of the pixel array.
+It can be any combination or order of R = red, G = green, B = blue,
+A = alpha (same as Transparency), O = Opacity, T = Transparency,
+C = cyan, Y = yellow, M = magenta, K = black, I = intensity (for
+grayscale). Specify "P" = pad, to output a pad quantum. Pad quantums
+are zero-value.</dd>
+<dt>type:</dt>
+<dd>Define the data type of the pixels. Float and double types are
+expected to be normalized [0..1] otherwise [0..MaxRGB]. Choose from
+these types: CharPixel, ShortPixel, IntegerPixel, LongPixel, FloatPixel,
+or DoublePixel.</dd>
+<dt>pixels:</dt>
+<dd>This array of values contain the pixel components as defined by
+map and type. You must preallocate this array where the expected
+length varies depending on the values of width, height, map, and type.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pingimage">
+<h1><a class="toc-backref" href="#id17">PingImage</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *PingImage( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>PingImage() returns all the attributes of an image or image sequence
+except for the pixels. It is much faster and consumes far less memory
+than ReadImage(). On failure, a NULL image is returned and exception
+describes the reason for the failure.</p>
+<p>The format of the PingImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *PingImage( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image_info:</dt>
+<dd>Ping the image defined by the file or filename members of
+this structure.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="readimage">
+<h1><a class="toc-backref" href="#id18">ReadImage</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ReadImage( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>ReadImage() reads an image or image sequence from a file or file handle.
+The method returns a NULL if there is a memory shortage or if the image
+cannot be read. On failure, a NULL image is returned and exception
+describes the reason for the failure.</p>
+<p>The format of the ReadImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ReadImage( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image_info:</dt>
+<dd>Read the image defined by the file or filename members of
+this structure.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="readinlineimage">
+<h1><a class="toc-backref" href="#id19">ReadInlineImage</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ReadInlineImage( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, const char *content,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>ReadInlineImage() reads a Base64-encoded inline image or image sequence.
+The method returns a NULL if there is a memory shortage or if the image
+cannot be read. On failure, a NULL image is returned and exception
+describes the reason for the failure.</p>
+<p>The format of the ReadInlineImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ReadInlineImage( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, const char *content,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image_info:</dt>
+<dd>The image info.</dd>
+<dt>content:</dt>
+<dd>The image encoded in Base64.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="writeimage">
+<h1><a class="toc-backref" href="#id20">WriteImage</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail WriteImage( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>Use WriteImage() to write an image or an image sequence to a file or
+filehandle. If writing to a file on disk, the name is defined by the
+filename member of the image structure. WriteImage() returns
+MagickFailure is there is a memory shortage or if the image cannot be
+written. Check the exception member of image to determine the cause
+for any failure.</p>
+<p>The format of the WriteImage method is:</p>
+<pre class="literal-block">
+MagickPassFail WriteImage( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image_info:</dt>
+<dd>The image info.</dd>
+<dt>image:</dt>
+<dd>The image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="writeimages">
+<h1><a class="toc-backref" href="#id21">WriteImages</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail WriteImages( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, <a class="reference external" href="../api/types.html#image">Image</a> *image,
+ const char *filename, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>WriteImages() writes an image sequence into one or more files. While
+WriteImage() will also write an image sequence, it is limited to writing
+the sequence into a single file using a format which supports multiple
+frames. WriteImages() does not have that limitation since it will
+generate multiple output files if necessary (or when requested). When
+ImageInfo's adjoin flag is set to MagickFalse, the file name is expected
+to include a printf-style formatting string for the frame number (e.g.
+"image%02d.miff") so that the frames may be written.</p>
+<p>The format of the WriteImages method is:</p>
+<pre class="literal-block">
+MagickPassFail WriteImages( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, <a class="reference external" href="../api/types.html#image">Image</a> *image,
+ const char *filename, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image_info:</dt>
+<dd>The image info.</dd>
+<dt>images:</dt>
+<dd>The image list.</dd>
+<dt>filename:</dt>
+<dd>The image filename.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="writeimagesfile">
+<h1><a class="toc-backref" href="#id22">WriteImagesFile</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int WriteImagesFile( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, <a class="reference external" href="../api/types.html#image">Image</a> *image, FILE *file,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>WriteImagesFile() writes an image or image sequence to a stdio
+FILE handle. This may be used to append an encoded image to an already
+existing appended image sequence if the file seek position is at the end
+of an existing file.</p>
+<p>The format of the WriteImagesFile method is:</p>
+<pre class="literal-block">
+unsigned int WriteImagesFile( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, <a class="reference external" href="../api/types.html#image">Image</a> *image, FILE *file,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image_info:</dt>
+<dd>The image info.</dd>
+<dt>images:</dt>
+<dd>The image list.</dd>
+<dt>file:</dt>
+<dd>The open (and positioned) file handle.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
<title>decorate</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="decorate">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>decorate</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="decorate">
+<h1 class="title">decorate</h1>
+<h2 class="subtitle" id="add-decorative-frames-and-borders">Add decorative frames and borders</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#borderimage" id="id5">BorderImage</a></li>
+<li><a class="reference internal" href="#frameimage" id="id6">FrameImage</a></li>
+<li><a class="reference internal" href="#raiseimage" id="id7">RaiseImage</a></li>
+</ul>
+</div>
+<div class="section" id="borderimage">
+<h1><a class="toc-backref" href="#id5">BorderImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *BorderImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#rectangleinfo">RectangleInfo</a> *border_info,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>BorderImage() surrounds the image with a border of the color defined by
+the bordercolor member of the image structure. The width and height
+of the border are defined by the corresponding members of the border_info
+structure.</p>
+<p>The format of the BorderImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *BorderImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#rectangleinfo">RectangleInfo</a> *border_info,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>border_info:</dt>
+<dd>Define the width and height of the border.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="frameimage">
+<h1><a class="toc-backref" href="#id6">FrameImage</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *FrameImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#frameinfo">FrameInfo</a> *frame_info,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>FrameImage() adds a simulated three-dimensional border around the image.
+The color of the border is defined by the matte_color member of image.
+Members width and height of frame_info specify the border width of the
+vertical and horizontal sides of the frame. Members inner and outer
+indicate the width of the inner and outer shadows of the frame.</p>
+<p>The format of the FrameImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *FrameImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#frameinfo">FrameInfo</a> *frame_info,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>frame_info:</dt>
+<dd>Define the width and height of the frame and its bevels.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="raiseimage">
+<h1><a class="toc-backref" href="#id7">RaiseImage</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int RaiseImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#rectangleinfo">RectangleInfo</a> *raise_info,
+ const int raise_flag );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>RaiseImage() creates a simulated three-dimensional button-like effect
+by lightening and darkening the edges of the image. Members width and
+height of raise_info define the width of the vertical and horizontal
+edge of the effect.</p>
+<p>The format of the RaiseImage method is:</p>
+<pre class="literal-block">
+unsigned int RaiseImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#rectangleinfo">RectangleInfo</a> *raise_info,
+ const int raise_flag );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>raise_info:</dt>
+<dd>Define the width and height of the raise area.</dd>
+<dt>raise_flag:</dt>
+<dd>A value other than zero creates a 3-D raise effect,
+otherwise it has a lowered effect.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="deprecate">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>deprecate</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="deprecate">
+<h1 class="title">deprecate</h1>
+<h2 class="subtitle" id="methods-which-should-no-longer-be-used">Methods which should no longer be used</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#acquirecacheview" id="id19">AcquireCacheView</a></li>
+<li><a class="reference internal" href="#acquirememory" id="id20">AcquireMemory</a></li>
+<li><a class="reference internal" href="#clonememory" id="id21">CloneMemory</a></li>
+<li><a class="reference internal" href="#getcacheview" id="id22">GetCacheView</a></li>
+<li><a class="reference internal" href="#liberatememory" id="id23">LiberateMemory</a></li>
+<li><a class="reference internal" href="#popimagepixels" id="id24">PopImagePixels</a></li>
+<li><a class="reference internal" href="#pushimagepixels" id="id25">PushImagePixels</a></li>
+<li><a class="reference internal" href="#reacquirememory" id="id26">ReacquireMemory</a></li>
+<li><a class="reference internal" href="#setcacheview" id="id27">SetCacheView</a></li>
+<li><a class="reference internal" href="#synccacheview" id="id28">SyncCacheView</a></li>
+</ul>
+</div>
+<div class="section" id="acquirecacheview">
+<h1><a class="toc-backref" href="#id19">AcquireCacheView</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *AcquireCacheView( <a class="reference external" href="../api/types.html#viewinfo">ViewInfo</a> *view, const long x, const long y,
+ const unsigned long columns, const unsigned long rows,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>Method AcquireCacheView gets pixels from the in-memory or disk pixel cache
+as defined by the geometry parameters for read-only access. A pointer to
+the pixels is returned if the pixels are transferred, otherwise NULL is
+returned.</p>
+<p>The format of the AcquireCacheView method is:</p>
+<pre class="literal-block">
+const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *AcquireCacheView( <a class="reference external" href="../api/types.html#viewinfo">ViewInfo</a> *view, const long x, const long y,
+ const unsigned long columns, const unsigned long rows,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>pixels:</dt>
+<dd>Method AcquireCacheView returns a null pointer if an error
+occurs, otherwise a pointer to the view pixels.</dd>
+<dt>view:</dt>
+<dd>The address of a structure of type ViewInfo.</dd>
+<dt>x,y,columns,rows:</dt>
+<dd>These values define the perimeter of a region of
+pixels.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="acquirememory">
+<h1><a class="toc-backref" href="#id20">AcquireMemory</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void *AcquireMemory( const size_t size );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>AcquireMemory() returns a pointer to a block of memory of at least size
+bytes suitably aligned for any use. NULL is returned if insufficient
+memory is available or the requested size is zero.</p>
+<p>The format of the AcquireMemory method is:</p>
+<pre class="literal-block">
+void *AcquireMemory( const size_t size );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>size:</dt>
+<dd>The size of the memory in bytes to allocate.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="clonememory">
+<h1><a class="toc-backref" href="#id21">CloneMemory</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void *CloneMemory( void *destination, const void *source, const size_t size );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>CloneMemory() copies size bytes from memory area source to the
+destination. Copying between objects that overlap will take place
+correctly. It returns destination.</p>
+<p>The format of the CloneMemory method is:</p>
+<pre class="literal-block">
+void *CloneMemory( void *destination, const void *source, const size_t size );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>size:</dt>
+<dd>The size of the memory in bytes to allocate.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getcacheview">
+<h1><a class="toc-backref" href="#id22">GetCacheView</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *GetCacheView( <a class="reference external" href="../api/types.html#viewinfo">ViewInfo</a> *view, const long x, const long y,
+ const unsigned long columns, const unsigned long rows );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>GetCacheView() gets writeable pixels from the in-memory or disk pixel
+cache as defined by the geometry parameters. A pointer to the pixels
+is returned if the pixels are transferred, otherwise a NULL is returned.</p>
+<p>The format of the GetCacheView method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *GetCacheView( <a class="reference external" href="../api/types.html#viewinfo">ViewInfo</a> *view, const long x, const long y,
+ const unsigned long columns, const unsigned long rows );
+</pre>
+<dl class="docutils">
+<dt>pixels:</dt>
+<dd>Method GetCacheView returns a null pointer if an error
+occurs, otherwise a pointer to the view pixels.</dd>
+<dt>view:</dt>
+<dd>The address of a structure of type ViewInfo.</dd>
+<dt>x,y,columns,rows:</dt>
+<dd>These values define the perimeter of a region of
+pixels.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="liberatememory">
+<h1><a class="toc-backref" href="#id23">LiberateMemory</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void LiberateMemory( void ** memory );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>LiberateMemory() frees memory that has already been allocated, and
+NULLs the pointer to it.</p>
+<p>The format of the LiberateMemory method is:</p>
+<pre class="literal-block">
+void LiberateMemory( void ** memory );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>memory:</dt>
+<dd>A pointer to a block of memory to free for reuse.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="popimagepixels">
+<h1><a class="toc-backref" href="#id24">PopImagePixels</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PopImagePixels( const <a class="reference external" href="../api/types.html#image">Image</a> *, const <a class="reference external" href="../api/types.html#quantumtype">QuantumType</a> quantum,
+ unsigned char *destination );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>PopImagePixels() transfers one or more pixel components from the image pixel
+cache to a user supplied buffer. True is returned if the pixels are
+successfully transferred, otherwise False.</p>
+<p>The format of the PopImagePixels method is:</p>
+<pre class="literal-block">
+unsigned int PopImagePixels( const <a class="reference external" href="../api/types.html#image">Image</a> *, const <a class="reference external" href="../api/types.html#quantumtype">QuantumType</a> quantum,
+ unsigned char *destination );
+</pre>
+<dl class="docutils">
+<dt>status:</dt>
+<dd>Method PopImagePixels returns True if the pixels are
+successfully transferred, otherwise False.</dd>
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>quantum:</dt>
+<dd>Declare which pixel components to transfer (RGB, RGBA, etc).</dd>
+<dt>destination:</dt>
+<dd>The components are transferred to this buffer.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pushimagepixels">
+<h1><a class="toc-backref" href="#id25">PushImagePixels</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PushImagePixels( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#quantumtype">QuantumType</a> quantum_type,
+ const unsigned char *source );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>PushImagePixels() transfers one or more pixel components from a user
+supplied buffer into the image pixel cache of an image. It returns True if
+the pixels are successfully transferred, otherwise False.</p>
+<p>The format of the PushImagePixels method is:</p>
+<pre class="literal-block">
+unsigned int PushImagePixels( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#quantumtype">QuantumType</a> quantum_type,
+ const unsigned char *source );
+</pre>
+<dl class="docutils">
+<dt>status:</dt>
+<dd>Method PushImagePixels returns True if the pixels are
+successfully transferred, otherwise False.</dd>
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>quantum_type:</dt>
+<dd>Declare which pixel components to transfer (red, green,
+blue, opacity, RGB, or RGBA).</dd>
+<dt>source:</dt>
+<dd>The pixel components are transferred from this buffer.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="reacquirememory">
+<h1><a class="toc-backref" href="#id26">ReacquireMemory</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void ReacquireMemory( void ** memory, const size_t size );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>ReacquireMemory() changes the size of the memory and returns a
+pointer to the (possibly moved) block. The contents will be unchanged
+up to the lesser of the new and old sizes.</p>
+<p>The format of the ReacquireMemory method is:</p>
+<pre class="literal-block">
+void ReacquireMemory( void ** memory, const size_t size );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>memory:</dt>
+<dd>A pointer to a memory allocation. On return the pointer
+may change but the contents of the original allocation will not.</dd>
+<dt>size:</dt>
+<dd>The new size of the allocated memory.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setcacheview">
+<h1><a class="toc-backref" href="#id27">SetCacheView</a></h1>
+<div class="section" id="id15">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *SetCacheView( <a class="reference external" href="../api/types.html#viewinfo">ViewInfo</a> *view, const long x, const long y,
+ const unsigned long columns, const unsigned long rows );
+</pre>
+</div>
+<div class="section" id="id16">
+<h2>Description</h2>
+<p>SetCacheView() gets pixels from the in-memory or disk pixel cache as
+defined by the geometry parameters. A pointer to the pixels is returned
+if the pixels are transferred, otherwise a NULL is returned.</p>
+<p>The format of the SetCacheView method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *SetCacheView( <a class="reference external" href="../api/types.html#viewinfo">ViewInfo</a> *view, const long x, const long y,
+ const unsigned long columns, const unsigned long rows );
+</pre>
+<dl class="docutils">
+<dt>view:</dt>
+<dd>The address of a structure of type ViewInfo.</dd>
+<dt>x,y,columns,rows:</dt>
+<dd>These values define the perimeter of a region of
+pixels.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="synccacheview">
+<h1><a class="toc-backref" href="#id28">SyncCacheView</a></h1>
+<div class="section" id="id17">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail SyncCacheView( <a class="reference external" href="../api/types.html#viewinfo">ViewInfo</a> *view );
+</pre>
+</div>
+<div class="section" id="id18">
+<h2>Description</h2>
+<p>SyncCacheView() saves the view pixels to the in-memory or disk cache.
+The method returns MagickPass if the pixel region is synced, otherwise
+MagickFail.</p>
+<p>The format of the SyncCacheView method is:</p>
+<pre class="literal-block">
+MagickPassFail SyncCacheView( <a class="reference external" href="../api/types.html#viewinfo">ViewInfo</a> *view );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>view:</dt>
+<dd>The address of a structure of type ViewInfo.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="describe">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="display">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>display</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="display">
+<h1 class="title">display</h1>
+<h2 class="subtitle" id="interactively-display-and-edit-an-image">Interactively display and edit an image</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#magickxdisplaybackgroundimage" id="id3">MagickXDisplayBackgroundImage</a></li>
+<li><a class="reference internal" href="#magickxdisplayimage" id="id4">MagickXDisplayImage</a></li>
+</ul>
+</div>
+<div class="section" id="magickxdisplaybackgroundimage">
+<h1><a class="toc-backref" href="#id3">MagickXDisplayBackgroundImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickXDisplayBackgroundImage( Display *display,
+ <a class="reference external" href="../api/types.html#magickxresourceinfo">MagickXResourceInfo</a> *resource_info,
+ <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>MagickXDisplayBackgroundImage() displays an image in the background of a window.</p>
+<p>The format of the MagickXDisplayBackgroundImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickXDisplayBackgroundImage( Display *display,
+ <a class="reference external" href="../api/types.html#magickxresourceinfo">MagickXResourceInfo</a> *resource_info,
+ <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<dl class="docutils">
+<dt>display:</dt>
+<dd>Specifies a connection to an X server; returned from
+XOpenDisplay.</dd>
+<dt>resource_info:</dt>
+<dd>Specifies a pointer to a X11 MagickXResourceInfo structure.</dd>
+<dt>image:</dt>
+<dd>Specifies a pointer to an Image structure; returned from
+ReadImage.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickxdisplayimage">
+<h1><a class="toc-backref" href="#id4">MagickXDisplayImage</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *MagickXDisplayImage( Display *display, <a class="reference external" href="../api/types.html#magickxresourceinfo">MagickXResourceInfo</a> *resource_info,
+ char ** argv, int argc, <a class="reference external" href="../api/types.html#image">Image</a> ** image,
+ unsigned long *state );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>MagickXDisplayImage() displays an image via X11. A new image is created and
+returned if the user interactively transforms the displayed image.</p>
+<p>The format of the MagickXDisplayImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *MagickXDisplayImage( Display *display, <a class="reference external" href="../api/types.html#magickxresourceinfo">MagickXResourceInfo</a> *resource_info,
+ char ** argv, int argc, <a class="reference external" href="../api/types.html#image">Image</a> ** image,
+ unsigned long *state );
+</pre>
+<dl class="docutils">
+<dt>nexus:</dt>
+<dd>Method MagickXDisplayImage returns an image when the
+user chooses 'Open Image' from the command menu or picks a tile
+from the image directory. Otherwise a null image is returned.</dd>
+<dt>display:</dt>
+<dd>Specifies a connection to an X server; returned from
+XOpenDisplay.</dd>
+<dt>resource_info:</dt>
+<dd>Specifies a pointer to a X11 MagickXResourceInfo structure.</dd>
+<dt>argv:</dt>
+<dd>Specifies the application's argument list.</dd>
+<dt>argc:</dt>
+<dd>Specifies the number of arguments.</dd>
+<dt>image:</dt>
+<dd>Specifies an address to an address of an Image structure;
+returned from ReadImage.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
<title>draw</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="draw">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>draw</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="draw">
+<h1 class="title">draw</h1>
+<h2 class="subtitle" id="user-friendly-methods-to-draw-on-an-image">User-friendly methods to draw on an image</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#drawannotation" id="id225">DrawAnnotation</a></li>
+<li><a class="reference internal" href="#drawaffine" id="id226">DrawAffine</a></li>
+<li><a class="reference internal" href="#drawallocatecontext" id="id227">DrawAllocateContext</a></li>
+<li><a class="reference internal" href="#drawarc" id="id228">DrawArc</a></li>
+<li><a class="reference internal" href="#drawbezier" id="id229">DrawBezier</a></li>
+<li><a class="reference internal" href="#drawcircle" id="id230">DrawCircle</a></li>
+<li><a class="reference internal" href="#drawgetclippath" id="id231">DrawGetClipPath</a></li>
+<li><a class="reference internal" href="#drawsetclippath" id="id232">DrawSetClipPath</a></li>
+<li><a class="reference internal" href="#drawgetcliprule" id="id233">DrawGetClipRule</a></li>
+<li><a class="reference internal" href="#drawsetcliprule" id="id234">DrawSetClipRule</a></li>
+<li><a class="reference internal" href="#drawgetclipunits" id="id235">DrawGetClipUnits</a></li>
+<li><a class="reference internal" href="#drawsetclipunits" id="id236">DrawSetClipUnits</a></li>
+<li><a class="reference internal" href="#drawcolor" id="id237">DrawColor</a></li>
+<li><a class="reference internal" href="#drawcomment" id="id238">DrawComment</a></li>
+<li><a class="reference internal" href="#drawdestroycontext" id="id239">DrawDestroyContext</a></li>
+<li><a class="reference internal" href="#drawellipse" id="id240">DrawEllipse</a></li>
+<li><a class="reference internal" href="#drawgetfillcolor" id="id241">DrawGetFillColor</a></li>
+<li><a class="reference internal" href="#drawsetfillcolor" id="id242">DrawSetFillColor</a></li>
+<li><a class="reference internal" href="#drawsetfillcolorstring" id="id243">DrawSetFillColorString</a></li>
+<li><a class="reference internal" href="#drawsetfillpatternurl" id="id244">DrawSetFillPatternURL</a></li>
+<li><a class="reference internal" href="#drawgetfillopacity" id="id245">DrawGetFillOpacity</a></li>
+<li><a class="reference internal" href="#drawsetfillopacity" id="id246">DrawSetFillOpacity</a></li>
+<li><a class="reference internal" href="#drawgetfillrule" id="id247">DrawGetFillRule</a></li>
+<li><a class="reference internal" href="#drawsetfillrule" id="id248">DrawSetFillRule</a></li>
+<li><a class="reference internal" href="#drawgetfont" id="id249">DrawGetFont</a></li>
+<li><a class="reference internal" href="#drawsetfont" id="id250">DrawSetFont</a></li>
+<li><a class="reference internal" href="#drawgetfontfamily" id="id251">DrawGetFontFamily</a></li>
+<li><a class="reference internal" href="#drawsetfontfamily" id="id252">DrawSetFontFamily</a></li>
+<li><a class="reference internal" href="#drawgetfontsize" id="id253">DrawGetFontSize</a></li>
+<li><a class="reference internal" href="#drawsetfontsize" id="id254">DrawSetFontSize</a></li>
+<li><a class="reference internal" href="#drawgetfontstretch" id="id255">DrawGetFontStretch</a></li>
+<li><a class="reference internal" href="#drawsetfontstretch" id="id256">DrawSetFontStretch</a></li>
+<li><a class="reference internal" href="#drawgetfontstyle" id="id257">DrawGetFontStyle</a></li>
+<li><a class="reference internal" href="#drawsetfontstyle" id="id258">DrawSetFontStyle</a></li>
+<li><a class="reference internal" href="#drawgetfontweight" id="id259">DrawGetFontWeight</a></li>
+<li><a class="reference internal" href="#drawsetfontweight" id="id260">DrawSetFontWeight</a></li>
+<li><a class="reference internal" href="#drawgetgravity" id="id261">DrawGetGravity</a></li>
+<li><a class="reference internal" href="#drawsetgravity" id="id262">DrawSetGravity</a></li>
+<li><a class="reference internal" href="#drawcomposite" id="id263">DrawComposite</a></li>
+<li><a class="reference internal" href="#drawline" id="id264">DrawLine</a></li>
+<li><a class="reference internal" href="#drawmatte" id="id265">DrawMatte</a></li>
+<li><a class="reference internal" href="#drawpathclose" id="id266">DrawPathClose</a></li>
+<li><a class="reference internal" href="#drawpathcurvetoabsolute" id="id267">DrawPathCurveToAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathcurvetorelative" id="id268">DrawPathCurveToRelative</a></li>
+<li><a class="reference internal" href="#drawpathcurvetoquadraticbezierabsolute" id="id269">DrawPathCurveToQuadraticBezierAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathcurvetoquadraticbezierrelative" id="id270">DrawPathCurveToQuadraticBezierRelative</a></li>
+<li><a class="reference internal" href="#drawpathcurvetoquadraticbeziersmoothabsolute" id="id271">DrawPathCurveToQuadraticBezierSmoothAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathcurvetoquadraticbeziersmoothrelative" id="id272">DrawPathCurveToQuadraticBezierSmoothRelative</a></li>
+<li><a class="reference internal" href="#drawpathcurvetosmoothabsolute" id="id273">DrawPathCurveToSmoothAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathcurvetosmoothrelative" id="id274">DrawPathCurveToSmoothRelative</a></li>
+<li><a class="reference internal" href="#drawpathellipticarcabsolute" id="id275">DrawPathEllipticArcAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathellipticarcrelative" id="id276">DrawPathEllipticArcRelative</a></li>
+<li><a class="reference internal" href="#drawpathfinish" id="id277">DrawPathFinish</a></li>
+<li><a class="reference internal" href="#drawpathlinetoabsolute" id="id278">DrawPathLineToAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathlinetorelative" id="id279">DrawPathLineToRelative</a></li>
+<li><a class="reference internal" href="#drawpathlinetohorizontalabsolute" id="id280">DrawPathLineToHorizontalAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathlinetohorizontalrelative" id="id281">DrawPathLineToHorizontalRelative</a></li>
+<li><a class="reference internal" href="#drawpathlinetoverticalabsolute" id="id282">DrawPathLineToVerticalAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathlinetoverticalrelative" id="id283">DrawPathLineToVerticalRelative</a></li>
+<li><a class="reference internal" href="#drawpathmovetoabsolute" id="id284">DrawPathMoveToAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathmovetorelative" id="id285">DrawPathMoveToRelative</a></li>
+<li><a class="reference internal" href="#drawpathstart" id="id286">DrawPathStart</a></li>
+<li><a class="reference internal" href="#drawpeekgraphiccontext" id="id287">DrawPeekGraphicContext</a></li>
+<li><a class="reference internal" href="#drawpoint" id="id288">DrawPoint</a></li>
+<li><a class="reference internal" href="#drawpolygon" id="id289">DrawPolygon</a></li>
+<li><a class="reference internal" href="#drawpolyline" id="id290">DrawPolyline</a></li>
+<li><a class="reference internal" href="#drawpopclippath" id="id291">DrawPopClipPath</a></li>
+<li><a class="reference internal" href="#drawpopdefs" id="id292">DrawPopDefs</a></li>
+<li><a class="reference internal" href="#drawpopgraphiccontext" id="id293">DrawPopGraphicContext</a></li>
+<li><a class="reference internal" href="#drawpoppattern" id="id294">DrawPopPattern</a></li>
+<li><a class="reference internal" href="#drawpushclippath" id="id295">DrawPushClipPath</a></li>
+<li><a class="reference internal" href="#drawpushdefs" id="id296">DrawPushDefs</a></li>
+<li><a class="reference internal" href="#drawpushgraphiccontext" id="id297">DrawPushGraphicContext</a></li>
+<li><a class="reference internal" href="#drawpushpattern" id="id298">DrawPushPattern</a></li>
+<li><a class="reference internal" href="#drawrectangle" id="id299">DrawRectangle</a></li>
+<li><a class="reference internal" href="#drawrender" id="id300">DrawRender</a></li>
+<li><a class="reference internal" href="#drawrotate" id="id301">DrawRotate</a></li>
+<li><a class="reference internal" href="#drawroundrectangle" id="id302">DrawRoundRectangle</a></li>
+<li><a class="reference internal" href="#drawscale" id="id303">DrawScale</a></li>
+<li><a class="reference internal" href="#drawskewx" id="id304">DrawSkewX</a></li>
+<li><a class="reference internal" href="#drawskewy" id="id305">DrawSkewY</a></li>
+<li><a class="reference internal" href="#drawsetstopcolor" id="id306">DrawSetStopColor</a></li>
+<li><a class="reference internal" href="#drawgetstrokecolor" id="id307">DrawGetStrokeColor</a></li>
+<li><a class="reference internal" href="#drawsetstrokecolor" id="id308">DrawSetStrokeColor</a></li>
+<li><a class="reference internal" href="#drawsetstrokecolorstring" id="id309">DrawSetStrokeColorString</a></li>
+<li><a class="reference internal" href="#drawsetstrokepatternurl" id="id310">DrawSetStrokePatternURL</a></li>
+<li><a class="reference internal" href="#drawgetstrokeantialias" id="id311">DrawGetStrokeAntialias</a></li>
+<li><a class="reference internal" href="#drawsetstrokeantialias" id="id312">DrawSetStrokeAntialias</a></li>
+<li><a class="reference internal" href="#drawgetstrokedasharray" id="id313">DrawGetStrokeDashArray</a></li>
+<li><a class="reference internal" href="#drawsetstrokedasharray" id="id314">DrawSetStrokeDashArray</a></li>
+<li><a class="reference internal" href="#drawgetstrokedashoffset" id="id315">DrawGetStrokeDashOffset</a></li>
+<li><a class="reference internal" href="#drawsetstrokedashoffset" id="id316">DrawSetStrokeDashOffset</a></li>
+<li><a class="reference internal" href="#drawgetstrokelinecap" id="id317">DrawGetStrokeLineCap</a></li>
+<li><a class="reference internal" href="#drawsetstrokelinecap" id="id318">DrawSetStrokeLineCap</a></li>
+<li><a class="reference internal" href="#drawgetstrokelinejoin" id="id319">DrawGetStrokeLineJoin</a></li>
+<li><a class="reference internal" href="#drawsetstrokelinejoin" id="id320">DrawSetStrokeLineJoin</a></li>
+<li><a class="reference internal" href="#drawgetstrokemiterlimit" id="id321">DrawGetStrokeMiterLimit</a></li>
+<li><a class="reference internal" href="#drawsetstrokemiterlimit" id="id322">DrawSetStrokeMiterLimit</a></li>
+<li><a class="reference internal" href="#drawgetstrokeopacity" id="id323">DrawGetStrokeOpacity</a></li>
+<li><a class="reference internal" href="#drawsetstrokeopacity" id="id324">DrawSetStrokeOpacity</a></li>
+<li><a class="reference internal" href="#drawgetstrokewidth" id="id325">DrawGetStrokeWidth</a></li>
+<li><a class="reference internal" href="#drawsetstrokewidth" id="id326">DrawSetStrokeWidth</a></li>
+<li><a class="reference internal" href="#drawgettextantialias" id="id327">DrawGetTextAntialias</a></li>
+<li><a class="reference internal" href="#drawsettextantialias" id="id328">DrawSetTextAntialias</a></li>
+<li><a class="reference internal" href="#drawgettextdecoration" id="id329">DrawGetTextDecoration</a></li>
+<li><a class="reference internal" href="#drawsettextdecoration" id="id330">DrawSetTextDecoration</a></li>
+<li><a class="reference internal" href="#drawgettextencoding" id="id331">DrawGetTextEncoding</a></li>
+<li><a class="reference internal" href="#drawsettextencoding" id="id332">DrawSetTextEncoding</a></li>
+<li><a class="reference internal" href="#drawgettextundercolor" id="id333">DrawGetTextUnderColor</a></li>
+<li><a class="reference internal" href="#drawsettextundercolor" id="id334">DrawSetTextUnderColor</a></li>
+<li><a class="reference internal" href="#drawsettextundercolorstring" id="id335">DrawSetTextUnderColorString</a></li>
+<li><a class="reference internal" href="#drawtranslate" id="id336">DrawTranslate</a></li>
+<li><a class="reference internal" href="#drawsetviewbox" id="id337">DrawSetViewbox</a></li>
+</ul>
+</div>
+<div class="section" id="drawannotation">
+<h1><a class="toc-backref" href="#id225">DrawAnnotation</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawAnnotation( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y,
+ const unsigned char *text );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>DrawAnnotation() draws text on the image.</p>
+<p>The format of the DrawAnnotation method is:</p>
+<pre class="literal-block">
+void DrawAnnotation( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y,
+ const unsigned char *text );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x:</dt>
+<dd>x ordinate to left of text</dd>
+<dt>y:</dt>
+<dd>y ordinate to text baseline</dd>
+<dt>text:</dt>
+<dd>text to draw</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawaffine">
+<h1><a class="toc-backref" href="#id226">DrawAffine</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawAffine( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#affinematrix">AffineMatrix</a> *affine );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>DrawAffine() adjusts the current affine transformation matrix with
+the specified affine transformation matrix. Note that the current affine
+transform is adjusted rather than replaced.</p>
+<p>The format of the DrawAffine method is:</p>
+<pre class="literal-block">
+void DrawAffine( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#affinematrix">AffineMatrix</a> *affine );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>Drawing context</dd>
+<dt>affine:</dt>
+<dd>Affine matrix parameters</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawallocatecontext">
+<h1><a class="toc-backref" href="#id227">DrawAllocateContext</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> DrawAllocateContext( const <a class="reference external" href="../api/types.html#drawinfo">DrawInfo</a> *draw_info, <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>DrawAllocateContext() allocates an initial drawing context which is an
+opaque handle required by the remaining drawing methods.</p>
+<p>The format of the DrawAllocateContext method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> DrawAllocateContext( const <a class="reference external" href="../api/types.html#drawinfo">DrawInfo</a> *draw_info, <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<dl class="docutils">
+<dt>draw_info:</dt>
+<dd>Initial drawing defaults. Set to NULL to use
+GraphicsMagick defaults.</dd>
+<dt>image:</dt>
+<dd>The image to draw on.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawarc">
+<h1><a class="toc-backref" href="#id228">DrawArc</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawArc( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double sx, const double sy, const double ex,
+ const double ey, const double sd, const double ed );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>DrawArc() draws an arc falling within a specified bounding rectangle on the
+image.</p>
+<p>The format of the DrawArc method is:</p>
+<pre class="literal-block">
+void DrawArc( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double sx, const double sy, const double ex,
+ const double ey, const double sd, const double ed );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>sx:</dt>
+<dd>starting x ordinate of bounding rectangle</dd>
+<dt>sy:</dt>
+<dd>starting y ordinate of bounding rectangle</dd>
+<dt>ex:</dt>
+<dd>ending x ordinate of bounding rectangle</dd>
+<dt>ey:</dt>
+<dd>ending y ordinate of bounding rectangle</dd>
+<dt>sd:</dt>
+<dd>starting degrees of rotation</dd>
+<dt>ed:</dt>
+<dd>ending degrees of rotation</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawbezier">
+<h1><a class="toc-backref" href="#id229">DrawBezier</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawBezier( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const unsigned long num_coords,
+ const <a class="reference external" href="../api/types.html#pointinfo">PointInfo</a> *coordinates );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>DrawBezier() draws a bezier curve through a set of points on the image.</p>
+<p>The format of the DrawBezier method is:</p>
+<pre class="literal-block">
+void DrawBezier( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const unsigned long num_coords,
+ const <a class="reference external" href="../api/types.html#pointinfo">PointInfo</a> *coordinates );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>num_coords:</dt>
+<dd>number of coordinates</dd>
+<dt>coordinates:</dt>
+<dd>coordinates</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawcircle">
+<h1><a class="toc-backref" href="#id230">DrawCircle</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawCircle( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double ox, const double oy, const double px,
+ const double py );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>DrawCircle() draws a circle on the image.</p>
+<p>The format of the DrawCircle method is:</p>
+<pre class="literal-block">
+void DrawCircle( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double ox, const double oy, const double px,
+ const double py );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>ox:</dt>
+<dd>origin x ordinate</dd>
+<dt>oy:</dt>
+<dd>origin y ordinate</dd>
+<dt>px:</dt>
+<dd>perimeter x ordinate</dd>
+<dt>py:</dt>
+<dd>perimeter y ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetclippath">
+<h1><a class="toc-backref" href="#id231">DrawGetClipPath</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+char *DrawGetClipPath( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>DrawGetClipPath() obtains the current clipping path ID. The value returned
+must be deallocated by the user when it is no longer needed.</p>
+<p>The format of the DrawGetClipPath method is:</p>
+<pre class="literal-block">
+char *DrawGetClipPath( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetclippath">
+<h1><a class="toc-backref" href="#id232">DrawSetClipPath</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetClipPath( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *clip_path );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>DrawSetClipPath() associates a named clipping path with the image. Only
+the areas drawn on by the clipping path will be modified as long as it
+remains in effect.</p>
+<p>The format of the DrawSetClipPath method is:</p>
+<pre class="literal-block">
+void DrawSetClipPath( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *clip_path );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>clip_path:</dt>
+<dd>name of clipping path to associate with image</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetcliprule">
+<h1><a class="toc-backref" href="#id233">DrawGetClipRule</a></h1>
+<div class="section" id="id15">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#fillrule">FillRule</a> DrawGetClipRule( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id16">
+<h2>Description</h2>
+<p>DrawGetClipRule() returns the current polygon fill rule to be used by the
+clipping path.</p>
+<p>The format of the DrawGetClipRule method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#fillrule">FillRule</a> DrawGetClipRule( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetcliprule">
+<h1><a class="toc-backref" href="#id234">DrawSetClipRule</a></h1>
+<div class="section" id="id17">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetClipRule( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#fillrule">FillRule</a> fill_rule );
+</pre>
+</div>
+<div class="section" id="id18">
+<h2>Description</h2>
+<p>DrawSetClipRule() set the polygon fill rule to be used by the clipping path.</p>
+<p>The format of the DrawSetClipRule method is:</p>
+<pre class="literal-block">
+void DrawSetClipRule( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#fillrule">FillRule</a> fill_rule );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>fill_rule:</dt>
+<dd>fill rule (EvenOddRule or NonZeroRule)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetclipunits">
+<h1><a class="toc-backref" href="#id235">DrawGetClipUnits</a></h1>
+<div class="section" id="id19">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#clippathunits">ClipPathUnits</a> DrawGetClipUnits( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id20">
+<h2>Description</h2>
+<p>DrawGetClipUnits() returns the interpretation of clip path units.</p>
+<p>The format of the DrawGetClipUnits method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#clippathunits">ClipPathUnits</a> DrawGetClipUnits( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetclipunits">
+<h1><a class="toc-backref" href="#id236">DrawSetClipUnits</a></h1>
+<div class="section" id="id21">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetClipUnits( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#clippathunits">ClipPathUnits</a> clip_units );
+</pre>
+</div>
+<div class="section" id="id22">
+<h2>Description</h2>
+<p>DrawSetClipUnits() sets the interpretation of clip path units.</p>
+<p>The format of the DrawSetClipUnits method is:</p>
+<pre class="literal-block">
+void DrawSetClipUnits( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#clippathunits">ClipPathUnits</a> clip_units );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>clip_units:</dt>
+<dd>units to use (UserSpace, UserSpaceOnUse, or ObjectBoundingBox)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawcolor">
+<h1><a class="toc-backref" href="#id237">DrawColor</a></h1>
+<div class="section" id="id23">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawColor( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y,
+ const <a class="reference external" href="../api/types.html#paintmethod">PaintMethod</a> paintMethod );
+</pre>
+</div>
+<div class="section" id="id24">
+<h2>Description</h2>
+<p>DrawColor() draws color on image using the current fill color, starting at
+specified position, and using specified paint method. The available paint
+methods are:</p>
+<p>PointMethod: Recolors the target pixel
+ReplaceMethod: Recolor any pixel that matches the target pixel.
+FloodfillMethod: Recolors target pixels and matching neighbors.
+FillToBorderMethod: Recolor target pixels and neighbors not matching border color.
+ResetMethod: Recolor all pixels.</p>
+<p>The format of the DrawColor method is:</p>
+<pre class="literal-block">
+void DrawColor( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y,
+ const <a class="reference external" href="../api/types.html#paintmethod">PaintMethod</a> paintMethod );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x:</dt>
+<dd>x ordinate</dd>
+<dt>y:</dt>
+<dd>y ordinate</dd>
+<dt>paintMethod:</dt>
+<dd>paint method</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawcomment">
+<h1><a class="toc-backref" href="#id238">DrawComment</a></h1>
+<div class="section" id="id25">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawComment( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *comment );
+</pre>
+</div>
+<div class="section" id="id26">
+<h2>Description</h2>
+<p>DrawComment() adds a comment to a vector output stream.</p>
+<p>The format of the DrawComment method is:</p>
+<pre class="literal-block">
+void DrawComment( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *comment );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>comment:</dt>
+<dd>comment text</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawdestroycontext">
+<h1><a class="toc-backref" href="#id239">DrawDestroyContext</a></h1>
+<div class="section" id="id27">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawDestroyContext( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id28">
+<h2>Description</h2>
+<p>DrawDestroyContext() frees all resources associated with the drawing
+context. Once the drawing context has been freed, it should not be used
+any further unless it re-allocated.</p>
+<p>The format of the DrawDestroyContext method is:</p>
+<pre class="literal-block">
+void DrawDestroyContext( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context to destroy</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawellipse">
+<h1><a class="toc-backref" href="#id240">DrawEllipse</a></h1>
+<div class="section" id="id29">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawEllipse( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double ox, const double oy, const double rx,
+ const double ry, const double start, const double end );
+</pre>
+</div>
+<div class="section" id="id30">
+<h2>Description</h2>
+<p>DrawEllipse() draws an ellipse on the image.</p>
+<p>The format of the DrawEllipse method is:</p>
+<pre class="literal-block">
+void DrawEllipse( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double ox, const double oy, const double rx,
+ const double ry, const double start, const double end );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>ox:</dt>
+<dd>origin x ordinate</dd>
+<dt>oy:</dt>
+<dd>origin y ordinate</dd>
+<dt>rx:</dt>
+<dd>radius in x</dd>
+<dt>ry:</dt>
+<dd>radius in y</dd>
+<dt>start:</dt>
+<dd>starting rotation in degrees</dd>
+<dt>end:</dt>
+<dd>ending rotation in degrees</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfillcolor">
+<h1><a class="toc-backref" href="#id241">DrawGetFillColor</a></h1>
+<div class="section" id="id31">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> DrawGetFillColor( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id32">
+<h2>Description</h2>
+<p>DrawGetFillColor() returns the fill color used for drawing filled objects.</p>
+<p>The format of the DrawGetFillColor method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> DrawGetFillColor( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfillcolor">
+<h1><a class="toc-backref" href="#id242">DrawSetFillColor</a></h1>
+<div class="section" id="id33">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFillColor( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *fill_color );
+</pre>
+</div>
+<div class="section" id="id34">
+<h2>Description</h2>
+<p>DrawSetFillColor() sets the fill color to be used for drawing filled objects.</p>
+<p>The format of the DrawSetFillColor method is:</p>
+<pre class="literal-block">
+void DrawSetFillColor( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *fill_color );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>fill_color:</dt>
+<dd>fill color</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfillcolorstring">
+<h1><a class="toc-backref" href="#id243">DrawSetFillColorString</a></h1>
+<div class="section" id="id35">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFillColorString( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *fill_color );
+</pre>
+</div>
+<div class="section" id="id36">
+<h2>Description</h2>
+<p>DrawSetFillColorString() sets the fill color to be used for drawing filled
+objects.</p>
+<p>The format of the DrawSetFillColorString method is:</p>
+<pre class="literal-block">
+void DrawSetFillColorString( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *fill_color );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>fill_color:</dt>
+<dd>fill color</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfillpatternurl">
+<h1><a class="toc-backref" href="#id244">DrawSetFillPatternURL</a></h1>
+<div class="section" id="id37">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFillPatternURL( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *fill_url );
+</pre>
+</div>
+<div class="section" id="id38">
+<h2>Description</h2>
+<p>DrawSetFillPatternURL() sets the URL to use as a fill pattern for filling
+objects. Only local URLs ("#identifier") are supported at this time. These
+local URLs are normally created by defining a named fill pattern with
+DrawPushPattern/DrawPopPattern.</p>
+<p>The format of the DrawSetFillPatternURL method is:</p>
+<pre class="literal-block">
+void DrawSetFillPatternURL( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *fill_url );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>fill_url:</dt>
+<dd>URL to use to obtain fill pattern.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfillopacity">
+<h1><a class="toc-backref" href="#id245">DrawGetFillOpacity</a></h1>
+<div class="section" id="id39">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double DrawGetFillOpacity( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id40">
+<h2>Description</h2>
+<p>DrawGetFillOpacity() returns the opacity used when drawing using the fill
+color or fill texture. Fully opaque is 1.0.</p>
+<p>The format of the DrawGetFillOpacity method is:</p>
+<pre class="literal-block">
+double DrawGetFillOpacity( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfillopacity">
+<h1><a class="toc-backref" href="#id246">DrawSetFillOpacity</a></h1>
+<div class="section" id="id41">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFillOpacity( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double fill_opacity );
+</pre>
+</div>
+<div class="section" id="id42">
+<h2>Description</h2>
+<p>DrawSetFillOpacity() sets the opacity to use when drawing using the fill
+color or fill texture. Fully opaque is 1.0.</p>
+<p>The format of the DrawSetFillOpacity method is:</p>
+<pre class="literal-block">
+void DrawSetFillOpacity( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double fill_opacity );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>fill_opacity:</dt>
+<dd>fill opacity</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfillrule">
+<h1><a class="toc-backref" href="#id247">DrawGetFillRule</a></h1>
+<div class="section" id="id43">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#fillrule">FillRule</a> DrawGetFillRule( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id44">
+<h2>Description</h2>
+<p>DrawGetFillRule() returns the fill rule used while drawing polygons.</p>
+<p>The format of the DrawGetFillRule method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#fillrule">FillRule</a> DrawGetFillRule( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfillrule">
+<h1><a class="toc-backref" href="#id248">DrawSetFillRule</a></h1>
+<div class="section" id="id45">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFillRule( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#fillrule">FillRule</a> fill_rule );
+</pre>
+</div>
+<div class="section" id="id46">
+<h2>Description</h2>
+<p>DrawSetFillRule() sets the fill rule to use while drawing polygons.</p>
+<p>The format of the DrawSetFillRule method is:</p>
+<pre class="literal-block">
+void DrawSetFillRule( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#fillrule">FillRule</a> fill_rule );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>fill_rule:</dt>
+<dd>fill rule (EvenOddRule or NonZeroRule)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfont">
+<h1><a class="toc-backref" href="#id249">DrawGetFont</a></h1>
+<div class="section" id="id47">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+char *DrawGetFont( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id48">
+<h2>Description</h2>
+<p>DrawGetFont() returns a null-terminaged string specifying the font used
+when annotating with text. The value returned must be freed by the user
+when no longer needed.</p>
+<p>The format of the DrawGetFont method is:</p>
+<pre class="literal-block">
+char *DrawGetFont( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfont">
+<h1><a class="toc-backref" href="#id250">DrawSetFont</a></h1>
+<div class="section" id="id49">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFont( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *font_name );
+</pre>
+</div>
+<div class="section" id="id50">
+<h2>Description</h2>
+<p>DrawSetFont() sets the fully-sepecified font to use when annotating with
+text.</p>
+<p>The format of the DrawSetFont method is:</p>
+<pre class="literal-block">
+void DrawSetFont( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *font_name );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>font_name:</dt>
+<dd>font name</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfontfamily">
+<h1><a class="toc-backref" href="#id251">DrawGetFontFamily</a></h1>
+<div class="section" id="id51">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+char *DrawGetFontFamily( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id52">
+<h2>Description</h2>
+<p>DrawGetFontFamily() returns the font family to use when annotating with text.
+The value returned must be freed by the user when it is no longer needed.</p>
+<p>The format of the DrawGetFontFamily method is:</p>
+<pre class="literal-block">
+char *DrawGetFontFamily( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfontfamily">
+<h1><a class="toc-backref" href="#id252">DrawSetFontFamily</a></h1>
+<div class="section" id="id53">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFontFamily( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *font_family );
+</pre>
+</div>
+<div class="section" id="id54">
+<h2>Description</h2>
+<p>DrawSetFontFamily() sets the font family to use when annotating with text.</p>
+<p>The format of the DrawSetFontFamily method is:</p>
+<pre class="literal-block">
+void DrawSetFontFamily( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *font_family );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>font_family:</dt>
+<dd>font family</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfontsize">
+<h1><a class="toc-backref" href="#id253">DrawGetFontSize</a></h1>
+<div class="section" id="id55">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double DrawGetFontSize( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id56">
+<h2>Description</h2>
+<p>DrawGetFontSize() returns the font pointsize used when annotating with text.</p>
+<p>The format of the DrawGetFontSize method is:</p>
+<pre class="literal-block">
+double DrawGetFontSize( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfontsize">
+<h1><a class="toc-backref" href="#id254">DrawSetFontSize</a></h1>
+<div class="section" id="id57">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFontSize( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double pointsize );
+</pre>
+</div>
+<div class="section" id="id58">
+<h2>Description</h2>
+<p>DrawSetFontSize() sets the font pointsize to use when annotating with text.</p>
+<p>The format of the DrawSetFontSize method is:</p>
+<pre class="literal-block">
+void DrawSetFontSize( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double pointsize );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>pointsize:</dt>
+<dd>text pointsize</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfontstretch">
+<h1><a class="toc-backref" href="#id255">DrawGetFontStretch</a></h1>
+<div class="section" id="id59">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#stretchtype">StretchType</a> DrawGetFontStretch( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id60">
+<h2>Description</h2>
+<p>DrawGetFontStretch() returns the font stretch used when annotating with text.</p>
+<p>The format of the DrawGetFontStretch method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#stretchtype">StretchType</a> DrawGetFontStretch( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfontstretch">
+<h1><a class="toc-backref" href="#id256">DrawSetFontStretch</a></h1>
+<div class="section" id="id61">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFontStretch( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#stretchtype">StretchType</a> font_stretch );
+</pre>
+</div>
+<div class="section" id="id62">
+<h2>Description</h2>
+<p>DrawSetFontStretch() sets the font stretch to use when annotating with text.
+The AnyStretch enumeration acts as a wild-card "don't care" option.</p>
+<p>The format of the DrawSetFontStretch method is:</p>
+<pre class="literal-block">
+void DrawSetFontStretch( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#stretchtype">StretchType</a> font_stretch );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>font_stretch:</dt>
+<dd>font stretch (NormalStretch, UltraCondensedStretch,
+CondensedStretch, SemiCondensedStretch,
+SemiExpandedStretch, ExpandedStretch,
+ExtraExpandedStretch, UltraExpandedStretch, AnyStretch)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfontstyle">
+<h1><a class="toc-backref" href="#id257">DrawGetFontStyle</a></h1>
+<div class="section" id="id63">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#styletype">StyleType</a> DrawGetFontStyle( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id64">
+<h2>Description</h2>
+<p>DrawGetFontStyle() returns the font style used when annotating with text.</p>
+<p>The format of the DrawGetFontStyle method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#styletype">StyleType</a> DrawGetFontStyle( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfontstyle">
+<h1><a class="toc-backref" href="#id258">DrawSetFontStyle</a></h1>
+<div class="section" id="id65">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFontStyle( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#styletype">StyleType</a> style );
+</pre>
+</div>
+<div class="section" id="id66">
+<h2>Description</h2>
+<p>DrawSetFontStyle() sets the font style to use when annotating with text.
+The AnyStyle enumeration acts as a wild-card "don't care" option.</p>
+<p>The format of the DrawSetFontStyle method is:</p>
+<pre class="literal-block">
+void DrawSetFontStyle( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#styletype">StyleType</a> style );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>style:</dt>
+<dd>font style (NormalStyle, ItalicStyle, ObliqueStyle, AnyStyle)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfontweight">
+<h1><a class="toc-backref" href="#id259">DrawGetFontWeight</a></h1>
+<div class="section" id="id67">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long DrawGetFontWeight( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id68">
+<h2>Description</h2>
+<p>DrawGetFontWeight() returns the font weight used when annotating with text.</p>
+<p>The format of the DrawGetFontWeight method is:</p>
+<pre class="literal-block">
+unsigned long DrawGetFontWeight( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfontweight">
+<h1><a class="toc-backref" href="#id260">DrawSetFontWeight</a></h1>
+<div class="section" id="id69">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFontWeight( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const unsigned long font_weight );
+</pre>
+</div>
+<div class="section" id="id70">
+<h2>Description</h2>
+<p>DrawSetFontWeight() sets the font weight to use when annotating with text.</p>
+<p>The format of the DrawSetFontWeight method is:</p>
+<pre class="literal-block">
+void DrawSetFontWeight( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const unsigned long font_weight );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>font_weight:</dt>
+<dd>font weight (valid range 100-900)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetgravity">
+<h1><a class="toc-backref" href="#id261">DrawGetGravity</a></h1>
+<div class="section" id="id71">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#gravitytype">GravityType</a> DrawGetGravity( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id72">
+<h2>Description</h2>
+<p>DrawGetGravity() returns the text placement gravity used when annotating
+with text.</p>
+<p>The format of the DrawGetGravity method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#gravitytype">GravityType</a> DrawGetGravity( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetgravity">
+<h1><a class="toc-backref" href="#id262">DrawSetGravity</a></h1>
+<div class="section" id="id73">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetGravity( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#gravitytype">GravityType</a> gravity );
+</pre>
+</div>
+<div class="section" id="id74">
+<h2>Description</h2>
+<p>DrawSetGravity() sets the text placement gravity to use when annotating
+with text.</p>
+<p>The format of the DrawSetGravity method is:</p>
+<pre class="literal-block">
+void DrawSetGravity( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#gravitytype">GravityType</a> gravity );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>gravity:</dt>
+<dd>positioning gravity (NorthWestGravity, NorthGravity,
+NorthEastGravity, WestGravity, CenterGravity,
+EastGravity, SouthWestGravity, SouthGravity,
+SouthEastGravity)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawcomposite">
+<h1><a class="toc-backref" href="#id263">DrawComposite</a></h1>
+<div class="section" id="id75">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawComposite( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#compositeoperator">CompositeOperator</a> composite_operator,
+ const double x, const double y, const double width, const double height,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id76">
+<h2>Description</h2>
+<p>DrawComposite() composites an image onto the current image, using the
+specified composition operator, specified position, and at the specified
+size.</p>
+<p>The format of the DrawComposite method is:</p>
+<pre class="literal-block">
+void DrawComposite( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#compositeoperator">CompositeOperator</a> composite_operator,
+ const double x, const double y, const double width, const double height,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>composite_operator:</dt>
+<dd>composition operator</dd>
+<dt>x:</dt>
+<dd>x ordinate of top left corner</dd>
+<dt>y:</dt>
+<dd>y ordinate of top left corner</dd>
+<dt>width:</dt>
+<dd>Width to resize image to prior to compositing. Specify zero to
+use existing width.</dd>
+<dt>height:</dt>
+<dd>Height to resize image to prior to compositing. Specify zero
+to use existing height.</dd>
+<dt>image:</dt>
+<dd>Image to composite</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawline">
+<h1><a class="toc-backref" href="#id264">DrawLine</a></h1>
+<div class="section" id="id77">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawLine( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double sx, const double sy, const double ex,
+ const double ey );
+</pre>
+</div>
+<div class="section" id="id78">
+<h2>Description</h2>
+<p>DrawLine() draws a line on the image using the current stroke color,
+stroke opacity, and stroke width.</p>
+<p>The format of the DrawLine method is:</p>
+<pre class="literal-block">
+void DrawLine( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double sx, const double sy, const double ex,
+ const double ey );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>sx:</dt>
+<dd>starting x ordinate</dd>
+<dt>sy:</dt>
+<dd>starting y ordinate</dd>
+<dt>ex:</dt>
+<dd>ending x ordinate</dd>
+<dt>ey:</dt>
+<dd>ending y ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawmatte">
+<h1><a class="toc-backref" href="#id265">DrawMatte</a></h1>
+<div class="section" id="id79">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawMatte( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y,
+ const <a class="reference external" href="../api/types.html#paintmethod">PaintMethod</a> paint_method );
+</pre>
+</div>
+<div class="section" id="id80">
+<h2>Description</h2>
+<p>DrawMatte() paints on the image's opacity channel in order to set effected
+pixels to transparent. The available paint methods are:</p>
+<p>PointMethod: Select the target pixel
+ReplaceMethod: Select any pixel that matches the target pixel.
+FloodfillMethod: Select the target pixel and matching neighbors.
+FillToBorderMethod: Select the target pixel and neighbors not matching
+border color.
+ResetMethod: Select all pixels.</p>
+<p>The format of the DrawMatte method is:</p>
+<pre class="literal-block">
+void DrawMatte( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y,
+ const <a class="reference external" href="../api/types.html#paintmethod">PaintMethod</a> paint_method );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x:</dt>
+<dd>x ordinate</dd>
+<dt>y:</dt>
+<dd>y ordinate</dd>
+</dl>
+<p>o paint_method:</p>
+</div>
+</div>
+<div class="section" id="drawpathclose">
+<h1><a class="toc-backref" href="#id266">DrawPathClose</a></h1>
+<div class="section" id="id81">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathClose( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id82">
+<h2>Description</h2>
+<p>DrawPathClose() adds a path element to the current path which closes the
+current subpath by drawing a straight line from the current point to the
+current subpath's most recent starting point (usually, the most recent
+moveto point).</p>
+<p>The format of the DrawPathClose method is:</p>
+<pre class="literal-block">
+void DrawPathClose( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathcurvetoabsolute">
+<h1><a class="toc-backref" href="#id267">DrawPathCurveToAbsolute</a></h1>
+<div class="section" id="id83">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathCurveToAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x1, const double y1,
+ const double x2, const double y2, const double x,
+ const double y );
+</pre>
+</div>
+<div class="section" id="id84">
+<h2>Description</h2>
+<p>DrawPathCurveToAbsolute() draws a cubic Bezier curve from the current
+point to (x,y) using (x1,y1) as the control point at the beginning of
+the curve and (x2,y2) as the control point at the end of the curve using
+absolute coordinates. At the end of the command, the new current point
+becomes the final (x,y) coordinate pair used in the polybezier.</p>
+<p>The format of the DrawPathCurveToAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathCurveToAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x1, const double y1,
+ const double x2, const double y2, const double x,
+ const double y );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x1:</dt>
+<dd>x ordinate of control point for curve beginning</dd>
+<dt>y1:</dt>
+<dd>y ordinate of control point for curve beginning</dd>
+<dt>x2:</dt>
+<dd>x ordinate of control point for curve ending</dd>
+<dt>y2:</dt>
+<dd>y ordinate of control point for curve ending</dd>
+<dt>x:</dt>
+<dd>x ordinate of the end of the curve</dd>
+<dt>y:</dt>
+<dd>y ordinate of the end of the curve</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathcurvetorelative">
+<h1><a class="toc-backref" href="#id268">DrawPathCurveToRelative</a></h1>
+<div class="section" id="id85">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathCurveToRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x1, const double y1,
+ const double x2, const double y2, const double x,
+ const double y );
+</pre>
+</div>
+<div class="section" id="id86">
+<h2>Description</h2>
+<p>DrawPathCurveToRelative() draws a cubic Bezier curve from the current
+point to (x,y) using (x1,y1) as the control point at the beginning of
+the curve and (x2,y2) as the control point at the end of the curve using
+relative coordinates. At the end of the command, the new current point
+becomes the final (x,y) coordinate pair used in the polybezier.</p>
+<p>The format of the DrawPathCurveToRelative method is:</p>
+<pre class="literal-block">
+void DrawPathCurveToRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x1, const double y1,
+ const double x2, const double y2, const double x,
+ const double y );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x1:</dt>
+<dd>x ordinate of control point for curve beginning</dd>
+<dt>y1:</dt>
+<dd>y ordinate of control point for curve beginning</dd>
+<dt>x2:</dt>
+<dd>x ordinate of control point for curve ending</dd>
+<dt>y2:</dt>
+<dd>y ordinate of control point for curve ending</dd>
+<dt>x:</dt>
+<dd>x ordinate of the end of the curve</dd>
+<dt>y:</dt>
+<dd>y ordinate of the end of the curve</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathcurvetoquadraticbezierabsolute">
+<h1><a class="toc-backref" href="#id269">DrawPathCurveToQuadraticBezierAbsolute</a></h1>
+<div class="section" id="id87">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathCurveToQuadraticBezierAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x1,
+ const double y1, const double x,
+ const double y );
+</pre>
+</div>
+<div class="section" id="id88">
+<h2>Description</h2>
+<p>DrawPathCurveToQuadraticBezierAbsolute() draws a quadratic Bezier curve
+from the current point to (x,y) using (x1,y1) as the control point using
+absolute coordinates. At the end of the command, the new current point
+becomes the final (x,y) coordinate pair used in the polybezier.</p>
+<p>The format of the DrawPathCurveToQuadraticBezierAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathCurveToQuadraticBezierAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x1,
+ const double y1, const double x,
+ const double y );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x1:</dt>
+<dd>x ordinate of the control point</dd>
+<dt>y1:</dt>
+<dd>y ordinate of the control point</dd>
+<dt>x:</dt>
+<dd>x ordinate of final point</dd>
+<dt>y:</dt>
+<dd>y ordinate of final point</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathcurvetoquadraticbezierrelative">
+<h1><a class="toc-backref" href="#id270">DrawPathCurveToQuadraticBezierRelative</a></h1>
+<div class="section" id="id89">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathCurveToQuadraticBezierRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x1,
+ const double y1, const double x,
+ const double y );
+</pre>
+</div>
+<div class="section" id="id90">
+<h2>Description</h2>
+<p>DrawPathCurveToQuadraticBezierRelative() draws a quadratic Bezier curve
+from the current point to (x,y) using (x1,y1) as the control point using
+relative coordinates. At the end of the command, the new current point
+becomes the final (x,y) coordinate pair used in the polybezier.</p>
+<p>The format of the DrawPathCurveToQuadraticBezierRelative method is:</p>
+<pre class="literal-block">
+void DrawPathCurveToQuadraticBezierRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x1,
+ const double y1, const double x,
+ const double y );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x1:</dt>
+<dd>x ordinate of the control point</dd>
+<dt>y1:</dt>
+<dd>y ordinate of the control point</dd>
+<dt>x:</dt>
+<dd>x ordinate of final point</dd>
+<dt>y:</dt>
+<dd>y ordinate of final point</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathcurvetoquadraticbeziersmoothabsolute">
+<h1><a class="toc-backref" href="#id271">DrawPathCurveToQuadraticBezierSmoothAbsolute</a></h1>
+<div class="section" id="id91">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathCurveToQuadraticBezierSmoothAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x,
+ const double y );
+</pre>
+</div>
+<div class="section" id="id92">
+<h2>Description</h2>
+<p>DrawPathCurveToQuadraticBezierSmoothAbsolute() draws a quadratic
+Bezier curve (using absolute coordinates) from the current point to
+(x,y). The control point is assumed to be the reflection of the
+control point on the previous command relative to the current
+point. (If there is no previous command or if the previous command was
+not a DrawPathCurveToQuadraticBezierAbsolute,
+DrawPathCurveToQuadraticBezierRelative,
+DrawPathCurveToQuadraticBezierSmoothAbsolut or
+DrawPathCurveToQuadraticBezierSmoothRelative, assume the control point
+is coincident with the current point.). At the end of the command, the
+new current point becomes the final (x,y) coordinate pair used in the
+polybezier.</p>
+<p>The format of the DrawPathCurveToQuadraticBezierSmoothAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathCurveToQuadraticBezierSmoothAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x,
+ const double y );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x:</dt>
+<dd>x ordinate of final point</dd>
+<dt>y:</dt>
+<dd>y ordinate of final point</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathcurvetoquadraticbeziersmoothrelative">
+<h1><a class="toc-backref" href="#id272">DrawPathCurveToQuadraticBezierSmoothRelative</a></h1>
+<div class="section" id="id93">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathCurveToQuadraticBezierSmoothRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x,
+ const double y );
+</pre>
+</div>
+<div class="section" id="id94">
+<h2>Description</h2>
+<p>DrawPathCurveToQuadraticBezierSmoothAbsolute() draws a quadratic
+Bezier curve (using relative coordinates) from the current point to
+(x,y). The control point is assumed to be the reflection of the
+control point on the previous command relative to the current
+point. (If there is no previous command or if the previous command was
+not a DrawPathCurveToQuadraticBezierAbsolute,
+DrawPathCurveToQuadraticBezierRelative,
+DrawPathCurveToQuadraticBezierSmoothAbsolut or
+DrawPathCurveToQuadraticBezierSmoothRelative, assume the control point
+is coincident with the current point.). At the end of the command, the
+new current point becomes the final (x,y) coordinate pair used in the
+polybezier.</p>
+<p>The format of the DrawPathCurveToQuadraticBezierSmoothRelative method is:</p>
+<pre class="literal-block">
+void DrawPathCurveToQuadraticBezierSmoothRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x,
+ const double y );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x:</dt>
+<dd>x ordinate of final point</dd>
+<dt>y:</dt>
+<dd>y ordinate of final point</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathcurvetosmoothabsolute">
+<h1><a class="toc-backref" href="#id273">DrawPathCurveToSmoothAbsolute</a></h1>
+<div class="section" id="id95">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathCurveToSmoothAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x2, const double y2,
+ const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id96">
+<h2>Description</h2>
+<p>DrawPathCurveToSmoothAbsolute() draws a cubic Bezier curve from the
+current point to (x,y) using absolute coordinates. The first control
+point is assumed to be the reflection of the second control point on
+the previous command relative to the current point. (If there is no
+previous command or if the previous command was not an
+DrawPathCurveToAbsolute, DrawPathCurveToRelative,
+DrawPathCurveToSmoothAbsolute or DrawPathCurveToSmoothRelative, assume
+the first control point is coincident with the current point.) (x2,y2)
+is the second control point (i.e., the control point at the end of the
+curve). At the end of the command, the new current point becomes the
+final (x,y) coordinate pair used in the polybezier.</p>
+<p>The format of the DrawPathCurveToSmoothAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathCurveToSmoothAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x2, const double y2,
+ const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x2:</dt>
+<dd>x ordinate of second control point</dd>
+<dt>y2:</dt>
+<dd>y ordinate of second control point</dd>
+<dt>x:</dt>
+<dd>x ordinate of termination point</dd>
+<dt>y:</dt>
+<dd>y ordinate of termination point</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathcurvetosmoothrelative">
+<h1><a class="toc-backref" href="#id274">DrawPathCurveToSmoothRelative</a></h1>
+<div class="section" id="id97">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathCurveToSmoothRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x2, const double y2,
+ const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id98">
+<h2>Description</h2>
+<p>DrawPathCurveToSmoothRelative() draws a cubic Bezier curve from the
+current point to (x,y) using relative coordinates. The first control
+point is assumed to be the reflection of the second control point on
+the previous command relative to the current point. (If there is no
+previous command or if the previous command was not an
+DrawPathCurveToAbsolute, DrawPathCurveToRelative,
+DrawPathCurveToSmoothAbsolute or DrawPathCurveToSmoothRelative, assume
+the first control point is coincident with the current point.) (x2,y2)
+is the second control point (i.e., the control point at the end of the
+curve). At the end of the command, the new current point becomes the
+final (x,y) coordinate pair used in the polybezier.</p>
+<p>The format of the DrawPathCurveToSmoothRelative method is:</p>
+<pre class="literal-block">
+void DrawPathCurveToSmoothRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x2, const double y2,
+ const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x2:</dt>
+<dd>x ordinate of second control point</dd>
+<dt>y2:</dt>
+<dd>y ordinate of second control point</dd>
+<dt>x:</dt>
+<dd>x ordinate of termination point</dd>
+<dt>y:</dt>
+<dd>y ordinate of termination point</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathellipticarcabsolute">
+<h1><a class="toc-backref" href="#id275">DrawPathEllipticArcAbsolute</a></h1>
+<div class="section" id="id99">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathEllipticArcAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double rx, const double ry,
+ const double x_axis_rotation,
+ unsigned int large_arc_flag, unsigned int sweep_flag,
+ const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id100">
+<h2>Description</h2>
+<p>DrawPathEllipticArcAbsolute() draws an elliptical arc from the current
+point to (x, y) using absolute coordinates. The size and orientation
+of the ellipse are defined by two radii (rx, ry) and an
+xAxisRotation, which indicates how the ellipse as a whole is rotated
+relative to the current coordinate system. The center (cx, cy) of the
+ellipse is calculated automatically to satisfy the constraints imposed
+by the other parameters. largeArcFlag and sweepFlag contribute to the
+automatic calculations and help determine how the arc is drawn. If
+largeArcFlag is true then draw the larger of the available arcs. If
+sweepFlag is true, then draw the arc matching a clock-wise rotation.</p>
+<p>The format of the DrawPathEllipticArcAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathEllipticArcAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double rx, const double ry,
+ const double x_axis_rotation,
+ unsigned int large_arc_flag, unsigned int sweep_flag,
+ const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>rx:</dt>
+<dd>x radius</dd>
+<dt>ry:</dt>
+<dd>y radius</dd>
+<dt>x_axis_rotation:</dt>
+<dd>indicates how the ellipse as a whole is rotated
+relative to the current coordinate system</dd>
+<dt>large_arc_flag:</dt>
+<dd>If non-zero (true) then draw the larger of the
+available arcs</dd>
+<dt>sweep_flag:</dt>
+<dd>If non-zero (true) then draw the arc matching a
+clock-wise rotation</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathellipticarcrelative">
+<h1><a class="toc-backref" href="#id276">DrawPathEllipticArcRelative</a></h1>
+<div class="section" id="id101">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathEllipticArcRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double rx, const double ry,
+ const double x_axis_rotation,
+ unsigned int large_arc_flag, unsigned int sweep_flag,
+ const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id102">
+<h2>Description</h2>
+<p>DrawPathEllipticArcRelative() draws an elliptical arc from the current
+point to (x, y) using relative coordinates. The size and orientation
+of the ellipse are defined by two radii (rx, ry) and an
+xAxisRotation, which indicates how the ellipse as a whole is rotated
+relative to the current coordinate system. The center (cx, cy) of the
+ellipse is calculated automatically to satisfy the constraints imposed
+by the other parameters. largeArcFlag and sweepFlag contribute to the
+automatic calculations and help determine how the arc is drawn. If
+largeArcFlag is true then draw the larger of the available arcs. If
+sweepFlag is true, then draw the arc matching a clock-wise rotation.</p>
+<p>The format of the DrawPathEllipticArcRelative method is:</p>
+<pre class="literal-block">
+void DrawPathEllipticArcRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double rx, const double ry,
+ const double x_axis_rotation,
+ unsigned int large_arc_flag, unsigned int sweep_flag,
+ const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>rx:</dt>
+<dd>x radius</dd>
+<dt>ry:</dt>
+<dd>y radius</dd>
+<dt>x_axis_rotation:</dt>
+<dd>indicates how the ellipse as a whole is rotated
+relative to the current coordinate system</dd>
+<dt>large_arc_flag:</dt>
+<dd>If non-zero (true) then draw the larger of the
+available arcs</dd>
+<dt>sweep_flag:</dt>
+<dd>If non-zero (true) then draw the arc matching a
+clock-wise rotation</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathfinish">
+<h1><a class="toc-backref" href="#id277">DrawPathFinish</a></h1>
+<div class="section" id="id103">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathFinish( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id104">
+<h2>Description</h2>
+<p>DrawPathFinish() terminates the current path.</p>
+<p>The format of the DrawPathFinish method is:</p>
+<pre class="literal-block">
+void DrawPathFinish( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathlinetoabsolute">
+<h1><a class="toc-backref" href="#id278">DrawPathLineToAbsolute</a></h1>
+<div class="section" id="id105">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathLineToAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id106">
+<h2>Description</h2>
+<p>DrawPathLineToAbsolute() draws a line path from the current point to the
+given coordinate using absolute coordinates. The coordinate then becomes
+the new current point.</p>
+<p>The format of the DrawPathLineToAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathLineToAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x:</dt>
+<dd>target x ordinate</dd>
+<dt>y:</dt>
+<dd>target y ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathlinetorelative">
+<h1><a class="toc-backref" href="#id279">DrawPathLineToRelative</a></h1>
+<div class="section" id="id107">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathLineToRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id108">
+<h2>Description</h2>
+<p>DrawPathLineToRelative() draws a line path from the current point to the
+given coordinate using relative coordinates. The coordinate then becomes
+the new current point.</p>
+<p>The format of the DrawPathLineToRelative method is:</p>
+<pre class="literal-block">
+void DrawPathLineToRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x:</dt>
+<dd>target x ordinate</dd>
+<dt>y:</dt>
+<dd>target y ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathlinetohorizontalabsolute">
+<h1><a class="toc-backref" href="#id280">DrawPathLineToHorizontalAbsolute</a></h1>
+<div class="section" id="id109">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathLineToHorizontalAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x );
+</pre>
+</div>
+<div class="section" id="id110">
+<h2>Description</h2>
+<p>DrawPathLineToHorizontalAbsolute() draws a horizontal line path from the
+current point to the target point using absolute coordinates. The target
+point then becomes the new current point.</p>
+<p>The format of the DrawPathLineToHorizontalAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathLineToHorizontalAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x:</dt>
+<dd>target x ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathlinetohorizontalrelative">
+<h1><a class="toc-backref" href="#id281">DrawPathLineToHorizontalRelative</a></h1>
+<div class="section" id="id111">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathLineToHorizontalRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x );
+</pre>
+</div>
+<div class="section" id="id112">
+<h2>Description</h2>
+<p>DrawPathLineToHorizontalRelative() draws a horizontal line path from the
+current point to the target point using relative coordinates. The target
+point then becomes the new current point.</p>
+<p>The format of the DrawPathLineToHorizontalRelative method is:</p>
+<pre class="literal-block">
+void DrawPathLineToHorizontalRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x:</dt>
+<dd>target x ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathlinetoverticalabsolute">
+<h1><a class="toc-backref" href="#id282">DrawPathLineToVerticalAbsolute</a></h1>
+<div class="section" id="id113">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathLineToVerticalAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double y );
+</pre>
+</div>
+<div class="section" id="id114">
+<h2>Description</h2>
+<p>DrawPathLineToVerticalAbsolute() draws a vertical line path from the
+current point to the target point using absolute coordinates. The target
+point then becomes the new current point.</p>
+<p>The format of the DrawPathLineToVerticalAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathLineToVerticalAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double y );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>y:</dt>
+<dd>target y ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathlinetoverticalrelative">
+<h1><a class="toc-backref" href="#id283">DrawPathLineToVerticalRelative</a></h1>
+<div class="section" id="id115">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathLineToVerticalRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double y );
+</pre>
+</div>
+<div class="section" id="id116">
+<h2>Description</h2>
+<p>DrawPathLineToVerticalRelative() draws a vertical line path from the
+current point to the target point using relative coordinates. The target
+point then becomes the new current point.</p>
+<p>The format of the DrawPathLineToVerticalRelative method is:</p>
+<pre class="literal-block">
+void DrawPathLineToVerticalRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double y );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>y:</dt>
+<dd>target y ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathmovetoabsolute">
+<h1><a class="toc-backref" href="#id284">DrawPathMoveToAbsolute</a></h1>
+<div class="section" id="id117">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathMoveToAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id118">
+<h2>Description</h2>
+<p>DrawPathMoveToAbsolute() starts a new sub-path at the given coordinate
+using absolute coordinates. The current point then becomes the
+specified coordinate.</p>
+<p>The format of the DrawPathMoveToAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathMoveToAbsolute( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x:</dt>
+<dd>target x ordinate</dd>
+<dt>y:</dt>
+<dd>target y ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathmovetorelative">
+<h1><a class="toc-backref" href="#id285">DrawPathMoveToRelative</a></h1>
+<div class="section" id="id119">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathMoveToRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id120">
+<h2>Description</h2>
+<p>DrawPathMoveToRelative() starts a new sub-path at the given coordinate
+using relative coordinates. The current point then becomes the
+specified coordinate.</p>
+<p>The format of the DrawPathMoveToRelative method is:</p>
+<pre class="literal-block">
+void DrawPathMoveToRelative( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x:</dt>
+<dd>target x ordinate</dd>
+<dt>y:</dt>
+<dd>target y ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathstart">
+<h1><a class="toc-backref" href="#id286">DrawPathStart</a></h1>
+<div class="section" id="id121">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathStart( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id122">
+<h2>Description</h2>
+<p>DrawPathStart() declares the start of a path drawing list which is terminated
+by a matching DrawPathFinish() command. All other DrawPath commands must
+be enclosed between a DrawPathStart() and a DrawPathFinish() command. This
+is because path drawing commands are subordinate commands and they do not
+function by themselves.</p>
+<p>The format of the DrawPathStart method is:</p>
+<pre class="literal-block">
+void DrawPathStart( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpeekgraphiccontext">
+<h1><a class="toc-backref" href="#id287">DrawPeekGraphicContext</a></h1>
+<div class="section" id="id123">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#drawinfo">DrawInfo</a> *DrawPeekGraphicContext( const <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id124">
+<h2>Description</h2>
+<p>DrawPeekGraphicContext() returns a copy of the the DrawInfo structure at
+the head of the drawing context stack. The user is responsible for
+deallocating the returned object using DestroyDrawInfo.</p>
+<p>The format of the DrawPeekGraphicContext method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#drawinfo">DrawInfo</a> *DrawPeekGraphicContext( const <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpoint">
+<h1><a class="toc-backref" href="#id288">DrawPoint</a></h1>
+<div class="section" id="id125">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPoint( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id126">
+<h2>Description</h2>
+<p>DrawPoint() draws a point using the current stroke color and stroke
+thickness at the specified coordinates.</p>
+<p>The format of the DrawPoint method is:</p>
+<pre class="literal-block">
+void DrawPoint( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x:</dt>
+<dd>target x coordinate</dd>
+<dt>y:</dt>
+<dd>target y coordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpolygon">
+<h1><a class="toc-backref" href="#id289">DrawPolygon</a></h1>
+<div class="section" id="id127">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPolygon( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const unsigned long num_coords,
+ const <a class="reference external" href="../api/types.html#pointinfo">PointInfo</a> *coordinates );
+</pre>
+</div>
+<div class="section" id="id128">
+<h2>Description</h2>
+<p>DrawPolygon() draws a polygon using the current stroke, stroke width, and
+fill color or texture, using the specified array of coordinates.</p>
+<p>The format of the DrawPolygon method is:</p>
+<pre class="literal-block">
+void DrawPolygon( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const unsigned long num_coords,
+ const <a class="reference external" href="../api/types.html#pointinfo">PointInfo</a> *coordinates );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>num_coords:</dt>
+<dd>number of coordinates</dd>
+<dt>coordinates:</dt>
+<dd>coordinate array</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpolyline">
+<h1><a class="toc-backref" href="#id290">DrawPolyline</a></h1>
+<div class="section" id="id129">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPolyline( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const unsigned long num_coords,
+ const <a class="reference external" href="../api/types.html#pointinfo">PointInfo</a> *coordinates );
+</pre>
+</div>
+<div class="section" id="id130">
+<h2>Description</h2>
+<p>DrawPolyline() draws a polyline using the current stroke, stroke width, and
+fill color or texture, using the specified array of coordinates.</p>
+<p>The format of the DrawPolyline method is:</p>
+<pre class="literal-block">
+void DrawPolyline( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const unsigned long num_coords,
+ const <a class="reference external" href="../api/types.html#pointinfo">PointInfo</a> *coordinates );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>num_coords:</dt>
+<dd>number of coordinates</dd>
+<dt>coordinates:</dt>
+<dd>coordinate array</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpopclippath">
+<h1><a class="toc-backref" href="#id291">DrawPopClipPath</a></h1>
+<div class="section" id="id131">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPopClipPath( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id132">
+<h2>Description</h2>
+<p>DrawPopClipPath() terminates a clip path definition.</p>
+<p>The format of the DrawPopClipPath method is:</p>
+<pre class="literal-block">
+void DrawPopClipPath( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpopdefs">
+<h1><a class="toc-backref" href="#id292">DrawPopDefs</a></h1>
+<div class="section" id="id133">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPopDefs( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id134">
+<h2>Description</h2>
+<p>DrawPopDefs() terminates a definition list</p>
+<p>The format of the DrawPopDefs method is:</p>
+<pre class="literal-block">
+void DrawPopDefs( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpopgraphiccontext">
+<h1><a class="toc-backref" href="#id293">DrawPopGraphicContext</a></h1>
+<div class="section" id="id135">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPopGraphicContext( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id136">
+<h2>Description</h2>
+<p>DrawPopGraphicContext() destroys the current context returning to the
+previously pushed context. Multiple contexts may exist. It is an error
+to attempt to pop more contexts than have been pushed, and it is proper
+form to pop all contexts which have been pushed.</p>
+<p>The format of the DrawPopGraphicContext method is:</p>
+<pre class="literal-block">
+void DrawPopGraphicContext( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpoppattern">
+<h1><a class="toc-backref" href="#id294">DrawPopPattern</a></h1>
+<div class="section" id="id137">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPopPattern( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id138">
+<h2>Description</h2>
+<p>DrawPopPattern() terminates a pattern definition.</p>
+<p>The format of the DrawPopPattern method is:</p>
+<pre class="literal-block">
+void DrawPopPattern( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpushclippath">
+<h1><a class="toc-backref" href="#id295">DrawPushClipPath</a></h1>
+<div class="section" id="id139">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPushClipPath( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *clip_path_id );
+</pre>
+</div>
+<div class="section" id="id140">
+<h2>Description</h2>
+<p>DrawPushClipPath() starts a clip path definition which is comprized of
+any number of drawing commands and terminated by a DrawPopClipPath()
+command.</p>
+<p>The format of the DrawPushClipPath method is:</p>
+<pre class="literal-block">
+void DrawPushClipPath( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *clip_path_id );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>clip_path_id:</dt>
+<dd>string identifier to associate with the clip path for
+later use.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpushdefs">
+<h1><a class="toc-backref" href="#id296">DrawPushDefs</a></h1>
+<div class="section" id="id141">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPushDefs( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id142">
+<h2>Description</h2>
+<p>DrawPushDefs() indicates that commands up to a terminating DrawPopDefs()
+command create named elements (e.g. clip-paths, textures, etc.) which
+may safely be processed earlier for the sake of efficiency.</p>
+<p>The format of the DrawPushDefs method is:</p>
+<pre class="literal-block">
+void DrawPushDefs( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpushgraphiccontext">
+<h1><a class="toc-backref" href="#id297">DrawPushGraphicContext</a></h1>
+<div class="section" id="id143">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPushGraphicContext( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id144">
+<h2>Description</h2>
+<p>DrawPushGraphicContext() clones the current drawing context to create a
+new drawing context. The original drawing context(s) may be returned to
+by invoking DrawPopGraphicContext(). The contexts are stored on a context
+stack. For every Pop there must have already been an equivalent Push.</p>
+<p>The format of the DrawPushGraphicContext method is:</p>
+<pre class="literal-block">
+void DrawPushGraphicContext( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpushpattern">
+<h1><a class="toc-backref" href="#id298">DrawPushPattern</a></h1>
+<div class="section" id="id145">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPushPattern( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *pattern_id, const double x,
+ const double y, const double width, const double height );
+</pre>
+</div>
+<div class="section" id="id146">
+<h2>Description</h2>
+<p>DrawPushPattern() indicates that subsequent commands up to a
+DrawPopPattern() command comprise the definition of a named pattern.
+The pattern space is assigned top left corner coordinates, a width
+and height, and becomes its own drawing space. Anything which can
+be drawn may be used in a pattern definition.
+Named patterns may be used as stroke or brush definitions.</p>
+<p>The format of the DrawPushPattern method is:</p>
+<pre class="literal-block">
+void DrawPushPattern( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *pattern_id, const double x,
+ const double y, const double width, const double height );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>pattern_id:</dt>
+<dd>pattern identification for later reference</dd>
+<dt>x:</dt>
+<dd>x ordinate of top left corner</dd>
+<dt>y:</dt>
+<dd>y ordinate of top left corner</dd>
+<dt>width:</dt>
+<dd>width of pattern space</dd>
+<dt>height:</dt>
+<dd>height of pattern space</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawrectangle">
+<h1><a class="toc-backref" href="#id299">DrawRectangle</a></h1>
+<div class="section" id="id147">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawRectangle( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x1, const double y1, const double x2,
+ const double y2 );
+</pre>
+</div>
+<div class="section" id="id148">
+<h2>Description</h2>
+<p>DrawRectangle() draws a rectangle given two coordinates and using
+the current stroke, stroke width, and fill settings.</p>
+<p>The format of the DrawRectangle method is:</p>
+<pre class="literal-block">
+void DrawRectangle( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x1, const double y1, const double x2,
+ const double y2 );
+</pre>
+<dl class="docutils">
+<dt>x1:</dt>
+<dd>x ordinate of first coordinate</dd>
+<dt>y1:</dt>
+<dd>y ordinate of first coordinate</dd>
+<dt>x2:</dt>
+<dd>x ordinate of second coordinate</dd>
+<dt>y2:</dt>
+<dd>y ordinate of second coordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawrender">
+<h1><a class="toc-backref" href="#id300">DrawRender</a></h1>
+<div class="section" id="id149">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+int DrawRender( const <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id150">
+<h2>Description</h2>
+<p>DrawRender() renders all preceding drawing commands onto the image.</p>
+<p>The format of the DrawRender method is:</p>
+<pre class="literal-block">
+int DrawRender( const <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawrotate">
+<h1><a class="toc-backref" href="#id301">DrawRotate</a></h1>
+<div class="section" id="id151">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawRotate( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double degrees );
+</pre>
+</div>
+<div class="section" id="id152">
+<h2>Description</h2>
+<p>DrawRotate() applies the specified rotation to the current coordinate
+space.</p>
+<p>The format of the DrawRotate method is:</p>
+<pre class="literal-block">
+void DrawRotate( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double degrees );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>degrees:</dt>
+<dd>degrees of rotation</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawroundrectangle">
+<h1><a class="toc-backref" href="#id302">DrawRoundRectangle</a></h1>
+<div class="section" id="id153">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawRoundRectangle( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, double x1, double y1, double x2, double y2,
+ double rx, double ry );
+</pre>
+</div>
+<div class="section" id="id154">
+<h2>Description</h2>
+<p>DrawRoundRectangle() draws a rounted rectangle given two coordinates,
+x & y corner radiuses and using the current stroke, stroke width,
+and fill settings.</p>
+<p>The format of the DrawRoundRectangle method is:</p>
+<pre class="literal-block">
+void DrawRoundRectangle( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, double x1, double y1, double x2, double y2,
+ double rx, double ry );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x1:</dt>
+<dd>x ordinate of first coordinate</dd>
+<dt>y1:</dt>
+<dd>y ordinate of first coordinate</dd>
+<dt>x2:</dt>
+<dd>x ordinate of second coordinate</dd>
+<dt>y2:</dt>
+<dd>y ordinate of second coordinate</dd>
+<dt>rx:</dt>
+<dd>radius of corner in horizontal direction</dd>
+<dt>ry:</dt>
+<dd>radius of corner in vertical direction</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawscale">
+<h1><a class="toc-backref" href="#id303">DrawScale</a></h1>
+<div class="section" id="id155">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawScale( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id156">
+<h2>Description</h2>
+<p>DrawScale() adjusts the scaling factor to apply in the horizontal and
+vertical directions to the current coordinate space.</p>
+<p>The format of the DrawScale method is:</p>
+<pre class="literal-block">
+void DrawScale( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x:</dt>
+<dd>horizontal scale factor</dd>
+<dt>y:</dt>
+<dd>vertical scale factor</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawskewx">
+<h1><a class="toc-backref" href="#id304">DrawSkewX</a></h1>
+<div class="section" id="id157">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSkewX( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double degrees );
+</pre>
+</div>
+<div class="section" id="id158">
+<h2>Description</h2>
+<p>DrawSkewX() skews the current coordinate system in the horizontal
+direction.</p>
+<p>The format of the DrawSkewX method is:</p>
+<pre class="literal-block">
+void DrawSkewX( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double degrees );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>degrees:</dt>
+<dd>number of degrees to skew the coordinates</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawskewy">
+<h1><a class="toc-backref" href="#id305">DrawSkewY</a></h1>
+<div class="section" id="id159">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSkewY( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double degrees );
+</pre>
+</div>
+<div class="section" id="id160">
+<h2>Description</h2>
+<p>DrawSkewY() skews the current coordinate system in the vertical
+direction.</p>
+<p>The format of the DrawSkewY method is:</p>
+<pre class="literal-block">
+void DrawSkewY( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double degrees );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>degrees:</dt>
+<dd>number of degrees to skew the coordinates</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstopcolor">
+<h1><a class="toc-backref" href="#id306">DrawSetStopColor</a></h1>
+<div class="section" id="id161">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStopColor( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *stop_color,
+ const double offset );
+</pre>
+</div>
+<div class="section" id="id162">
+<h2>Description</h2>
+<p>DrawSetStopColor() sets the stop color and offset for gradients</p>
+<p>The format of the DrawSetStopColor method is:</p>
+<pre class="literal-block">
+void DrawSetStopColor( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *stop_color,
+ const double offset );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+<p>o stop_color:</p>
+<p>o offset:</p>
+</div>
+</div>
+<div class="section" id="drawgetstrokecolor">
+<h1><a class="toc-backref" href="#id307">DrawGetStrokeColor</a></h1>
+<div class="section" id="id163">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> DrawGetStrokeColor( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id164">
+<h2>Description</h2>
+<p>DrawGetStrokeColor() returns the color used for stroking object outlines.</p>
+<p>The format of the DrawGetStrokeColor method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> DrawGetStrokeColor( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokecolor">
+<h1><a class="toc-backref" href="#id308">DrawSetStrokeColor</a></h1>
+<div class="section" id="id165">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeColor( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *stroke_color );
+</pre>
+</div>
+<div class="section" id="id166">
+<h2>Description</h2>
+<p>DrawSetStrokeColor() sets the color used for stroking object outlines.</p>
+<p>The format of the DrawSetStrokeColor method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeColor( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *stroke_color );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>stroke_color:</dt>
+<dd>stroke color</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokecolorstring">
+<h1><a class="toc-backref" href="#id309">DrawSetStrokeColorString</a></h1>
+<div class="section" id="id167">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeColorString( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *stroke_color );
+</pre>
+</div>
+<div class="section" id="id168">
+<h2>Description</h2>
+<p>DrawSetStrokeColorString() sets the color used for stroking object outlines.</p>
+<p>The format of the DrawSetStrokeColorString method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeColorString( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *stroke_color );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>stroke_color:</dt>
+<dd>stroke color</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokepatternurl">
+<h1><a class="toc-backref" href="#id310">DrawSetStrokePatternURL</a></h1>
+<div class="section" id="id169">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokePatternURL( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *stroke_url );
+</pre>
+</div>
+<div class="section" id="id170">
+<h2>Description</h2>
+<p>DrawSetStrokePatternURL() sets the pattern used for stroking object outlines.</p>
+<p>The format of the DrawSetStrokePatternURL method is:</p>
+<pre class="literal-block">
+void DrawSetStrokePatternURL( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *stroke_url );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>stroke_url:</dt>
+<dd>URL specifying pattern ID (e.g. "#pattern_id")</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetstrokeantialias">
+<h1><a class="toc-backref" href="#id311">DrawGetStrokeAntialias</a></h1>
+<div class="section" id="id171">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int DrawGetStrokeAntialias( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id172">
+<h2>Description</h2>
+<p>DrawGetStrokeAntialias() returns the current stroke antialias setting.
+Stroked outlines are antialiased by default. When antialiasing is disabled
+stroked pixels are thresholded to determine if the stroke color or
+underlying canvas color should be used.</p>
+<p>The format of the DrawGetStrokeAntialias method is:</p>
+<pre class="literal-block">
+unsigned int DrawGetStrokeAntialias( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokeantialias">
+<h1><a class="toc-backref" href="#id312">DrawSetStrokeAntialias</a></h1>
+<div class="section" id="id173">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeAntialias( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const unsigned int stroke_antialias );
+</pre>
+</div>
+<div class="section" id="id174">
+<h2>Description</h2>
+<p>DrawSetStrokeAntialias() controls whether stroked outlines are antialiased.
+Stroked outlines are antialiased by default. When antialiasing is disabled
+stroked pixels are thresholded to determine if the stroke color or
+underlying canvas color should be used.</p>
+<p>The format of the DrawSetStrokeAntialias method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeAntialias( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const unsigned int stroke_antialias );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>stroke_antialias:</dt>
+<dd>set to false (zero) to disable antialiasing</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetstrokedasharray">
+<h1><a class="toc-backref" href="#id313">DrawGetStrokeDashArray</a></h1>
+<div class="section" id="id175">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double *DrawGetStrokeDashArray( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, unsigned long *num_elems );
+</pre>
+</div>
+<div class="section" id="id176">
+<h2>Description</h2>
+<p>DrawGetStrokeDashArray() returns an array representing the pattern of
+dashes and gaps used to stroke paths (see DrawSetStrokeDashArray). The
+array must be freed once it is no longer required by the user.</p>
+<p>The format of the DrawGetStrokeDashArray method is:</p>
+<pre class="literal-block">
+double *DrawGetStrokeDashArray( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, unsigned long *num_elems );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>num_elems:</dt>
+<dd>address to place number of elements in dash array</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokedasharray">
+<h1><a class="toc-backref" href="#id314">DrawSetStrokeDashArray</a></h1>
+<div class="section" id="id177">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeDashArray( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const unsigned long num_elems,
+ const double *dasharray );
+</pre>
+</div>
+<div class="section" id="id178">
+<h2>Description</h2>
+<p>DrawSetStrokeDashArray() specifies the pattern of dashes and gaps used to
+stroke paths. The strokeDashArray represents an array of numbers that
+specify the lengths of alternating dashes and gaps in pixels. If an odd
+number of values is provided, then the list of values is repeated to yield
+an even number of values. To remove an existing dash array, pass a zero
+num_elems argument and null dasharray. A typical stroke dash array might
+contain the members 5 3 2.</p>
+<p>The format of the DrawSetStrokeDashArray method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeDashArray( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const unsigned long num_elems,
+ const double *dasharray );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>num_elems:</dt>
+<dd>number of elements in dash array</dd>
+<dt>dasharray:</dt>
+<dd>dash array values</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetstrokedashoffset">
+<h1><a class="toc-backref" href="#id315">DrawGetStrokeDashOffset</a></h1>
+<div class="section" id="id179">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double DrawGetStrokeDashOffset( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id180">
+<h2>Description</h2>
+<p>DrawGetStrokeDashOffset() returns the offset into the dash pattern to
+start the dash.</p>
+<p>The format of the DrawGetStrokeDashOffset method is:</p>
+<pre class="literal-block">
+double DrawGetStrokeDashOffset( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokedashoffset">
+<h1><a class="toc-backref" href="#id316">DrawSetStrokeDashOffset</a></h1>
+<div class="section" id="id181">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeDashOffset( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double dash_offset );
+</pre>
+</div>
+<div class="section" id="id182">
+<h2>Description</h2>
+<p>DrawSetStrokeDashOffset() specifies the offset into the dash pattern to
+start the dash.</p>
+<p>The format of the DrawSetStrokeDashOffset method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeDashOffset( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double dash_offset );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>dash_offset:</dt>
+<dd>dash offset</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetstrokelinecap">
+<h1><a class="toc-backref" href="#id317">DrawGetStrokeLineCap</a></h1>
+<div class="section" id="id183">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+LineCap DrawGetStrokeLineCap( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id184">
+<h2>Description</h2>
+<p>DrawGetStrokeLineCap() returns the shape to be used at the end of
+open subpaths when they are stroked. Values of LineCap are
+UndefinedCap, ButtCap, RoundCap, and SquareCap.</p>
+<p>The format of the DrawGetStrokeLineCap method is:</p>
+<pre class="literal-block">
+LineCap DrawGetStrokeLineCap( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokelinecap">
+<h1><a class="toc-backref" href="#id318">DrawSetStrokeLineCap</a></h1>
+<div class="section" id="id185">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeLineCap( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const LineCap linecap );
+</pre>
+</div>
+<div class="section" id="id186">
+<h2>Description</h2>
+<p>DrawSetStrokeLineCap() specifies the shape to be used at the end of
+open subpaths when they are stroked. Values of LineCap are
+UndefinedCap, ButtCap, RoundCap, and SquareCap.</p>
+<p>The format of the DrawSetStrokeLineCap method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeLineCap( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const LineCap linecap );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>linecap:</dt>
+<dd>linecap style</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetstrokelinejoin">
+<h1><a class="toc-backref" href="#id319">DrawGetStrokeLineJoin</a></h1>
+<div class="section" id="id187">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+LineJoin DrawGetStrokeLineJoin( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id188">
+<h2>Description</h2>
+<p>DrawGetStrokeLineJoin() returns the shape to be used at the
+corners of paths (or other vector shapes) when they are
+stroked. Values of LineJoin are UndefinedJoin, MiterJoin, RoundJoin,
+and BevelJoin.</p>
+<p>The format of the DrawGetStrokeLineJoin method is:</p>
+<pre class="literal-block">
+LineJoin DrawGetStrokeLineJoin( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokelinejoin">
+<h1><a class="toc-backref" href="#id320">DrawSetStrokeLineJoin</a></h1>
+<div class="section" id="id189">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeLineJoin( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const LineJoin linejoin );
+</pre>
+</div>
+<div class="section" id="id190">
+<h2>Description</h2>
+<p>DrawSetStrokeLineJoin() specifies the shape to be used at the
+corners of paths (or other vector shapes) when they are
+stroked. Values of LineJoin are UndefinedJoin, MiterJoin, RoundJoin,
+and BevelJoin.</p>
+<p>The format of the DrawSetStrokeLineJoin method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeLineJoin( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const LineJoin linejoin );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>linejoin:</dt>
+<dd>line join style</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetstrokemiterlimit">
+<h1><a class="toc-backref" href="#id321">DrawGetStrokeMiterLimit</a></h1>
+<div class="section" id="id191">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long DrawGetStrokeMiterLimit( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id192">
+<h2>Description</h2>
+<p>DrawGetStrokeMiterLimit() returns the miter limit. When two line
+segments meet at a sharp angle and miter joins have been specified for
+'lineJoin', it is possible for the miter to extend far beyond the
+thickness of the line stroking the path. The miterLimit' imposes a
+limit on the ratio of the miter length to the 'lineWidth'.</p>
+<p>The format of the DrawGetStrokeMiterLimit method is:</p>
+<pre class="literal-block">
+unsigned long DrawGetStrokeMiterLimit( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokemiterlimit">
+<h1><a class="toc-backref" href="#id322">DrawSetStrokeMiterLimit</a></h1>
+<div class="section" id="id193">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeMiterLimit( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const unsigned long miterlimit );
+</pre>
+</div>
+<div class="section" id="id194">
+<h2>Description</h2>
+<p>DrawSetStrokeMiterLimit() specifies the miter limit. When two line
+segments meet at a sharp angle and miter joins have been specified for
+'lineJoin', it is possible for the miter to extend far beyond the
+thickness of the line stroking the path. The miterLimit' imposes a
+limit on the ratio of the miter length to the 'lineWidth'.</p>
+<p>The format of the DrawSetStrokeMiterLimit method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeMiterLimit( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const unsigned long miterlimit );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>miterlimit:</dt>
+<dd>miter limit</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetstrokeopacity">
+<h1><a class="toc-backref" href="#id323">DrawGetStrokeOpacity</a></h1>
+<div class="section" id="id195">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double DrawGetStrokeOpacity( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id196">
+<h2>Description</h2>
+<p>DrawGetStrokeOpacity() returns the opacity of stroked object outlines.</p>
+<p>The format of the DrawGetStrokeOpacity method is:</p>
+<pre class="literal-block">
+double DrawGetStrokeOpacity( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokeopacity">
+<h1><a class="toc-backref" href="#id324">DrawSetStrokeOpacity</a></h1>
+<div class="section" id="id197">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeOpacity( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double stroke_opacity );
+</pre>
+</div>
+<div class="section" id="id198">
+<h2>Description</h2>
+<p>DrawSetStrokeOpacity() specifies the opacity of stroked object outlines.</p>
+<p>The format of the DrawSetStrokeOpacity method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeOpacity( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double stroke_opacity );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>stroke_opacity:</dt>
+<dd>stroke opacity. The value 1.0 is opaque.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetstrokewidth">
+<h1><a class="toc-backref" href="#id325">DrawGetStrokeWidth</a></h1>
+<div class="section" id="id199">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double DrawGetStrokeWidth( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id200">
+<h2>Description</h2>
+<p>DrawGetStrokeWidth() returns the width of the stroke used to draw object
+outlines.</p>
+<p>The format of the DrawGetStrokeWidth method is:</p>
+<pre class="literal-block">
+double DrawGetStrokeWidth( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokewidth">
+<h1><a class="toc-backref" href="#id326">DrawSetStrokeWidth</a></h1>
+<div class="section" id="id201">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeWidth( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double stroke_width );
+</pre>
+</div>
+<div class="section" id="id202">
+<h2>Description</h2>
+<p>DrawSetStrokeWidth() sets the width of the stroke used to draw object
+outlines.</p>
+<p>The format of the DrawSetStrokeWidth method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeWidth( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double stroke_width );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>stroke_width:</dt>
+<dd>stroke width</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgettextantialias">
+<h1><a class="toc-backref" href="#id327">DrawGetTextAntialias</a></h1>
+<div class="section" id="id203">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int DrawGetTextAntialias( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id204">
+<h2>Description</h2>
+<p>DrawGetTextAntialias() returns the current text antialias setting, which
+determines whether text is antialiased. Text is antialiased by default.</p>
+<p>The format of the DrawGetTextAntialias method is:</p>
+<pre class="literal-block">
+unsigned int DrawGetTextAntialias( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsettextantialias">
+<h1><a class="toc-backref" href="#id328">DrawSetTextAntialias</a></h1>
+<div class="section" id="id205">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetTextAntialias( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const unsigned int text_antialias );
+</pre>
+</div>
+<div class="section" id="id206">
+<h2>Description</h2>
+<p>DrawSetTextAntialias() controls whether text is antialiased. Text is
+antialiased by default.</p>
+<p>The format of the DrawSetTextAntialias method is:</p>
+<pre class="literal-block">
+void DrawSetTextAntialias( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const unsigned int text_antialias );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>text_antialias:</dt>
+<dd>antialias boolean. Set to false (0) to disable
+antialiasing.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgettextdecoration">
+<h1><a class="toc-backref" href="#id329">DrawGetTextDecoration</a></h1>
+<div class="section" id="id207">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#decorationtype">DecorationType</a> DrawGetTextDecoration( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id208">
+<h2>Description</h2>
+<p>DrawGetTextDecoration() returns the decoration applied when annotating with
+text.</p>
+<p>The format of the DrawGetTextDecoration method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#decorationtype">DecorationType</a> DrawGetTextDecoration( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsettextdecoration">
+<h1><a class="toc-backref" href="#id330">DrawSetTextDecoration</a></h1>
+<div class="section" id="id209">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetTextDecoration( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#decorationtype">DecorationType</a> decoration );
+</pre>
+</div>
+<div class="section" id="id210">
+<h2>Description</h2>
+<p>DrawSetTextDecoration() specifies a decoration to be applied when
+annotating with text.</p>
+<p>The format of the DrawSetTextDecoration method is:</p>
+<pre class="literal-block">
+void DrawSetTextDecoration( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#decorationtype">DecorationType</a> decoration );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>decoration:</dt>
+<dd>text decoration. One of NoDecoration, UnderlineDecoration,
+OverlineDecoration, or LineThroughDecoration</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgettextencoding">
+<h1><a class="toc-backref" href="#id331">DrawGetTextEncoding</a></h1>
+<div class="section" id="id211">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+char *DrawGetTextEncoding( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id212">
+<h2>Description</h2>
+<p>DrawGetTextEncoding() returns a null-terminated string which specifies the
+code set used for text annotations. The string must be freed by the user
+once it is no longer required.</p>
+<p>The format of the DrawGetTextEncoding method is:</p>
+<pre class="literal-block">
+char *DrawGetTextEncoding( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsettextencoding">
+<h1><a class="toc-backref" href="#id332">DrawSetTextEncoding</a></h1>
+<div class="section" id="id213">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetTextEncoding( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *encoding );
+</pre>
+</div>
+<div class="section" id="id214">
+<h2>Description</h2>
+<p>DrawSetTextEncoding() specifies specifies the code set to use for
+text annotations. The only character encoding which may be specified
+at this time is "UTF-8" for representing Unicode as a sequence of
+bytes. Specify an empty string to set text encoding to the system's
+default. Successful text annotation using Unicode may require fonts
+designed to support Unicode.</p>
+<p>The format of the DrawSetTextEncoding method is:</p>
+<pre class="literal-block">
+void DrawSetTextEncoding( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *encoding );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>encoding:</dt>
+<dd>character string specifying text encoding</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgettextundercolor">
+<h1><a class="toc-backref" href="#id333">DrawGetTextUnderColor</a></h1>
+<div class="section" id="id215">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> DrawGetTextUnderColor( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+</div>
+<div class="section" id="id216">
+<h2>Description</h2>
+<p>DrawGetTextUnderColor() returns the color of a background rectangle
+to place under text annotations.</p>
+<p>The format of the DrawGetTextUnderColor method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> DrawGetTextUnderColor( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsettextundercolor">
+<h1><a class="toc-backref" href="#id334">DrawSetTextUnderColor</a></h1>
+<div class="section" id="id217">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetTextUnderColor( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *under_color );
+</pre>
+</div>
+<div class="section" id="id218">
+<h2>Description</h2>
+<p>DrawSetTextUnderColor() specifies the color of a background rectangle
+to place under text annotations.</p>
+<p>The format of the DrawSetTextUnderColor method is:</p>
+<pre class="literal-block">
+void DrawSetTextUnderColor( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *under_color );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>under_color:</dt>
+<dd>text under color</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsettextundercolorstring">
+<h1><a class="toc-backref" href="#id335">DrawSetTextUnderColorString</a></h1>
+<div class="section" id="id219">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetTextUnderColorString( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *under_color );
+</pre>
+</div>
+<div class="section" id="id220">
+<h2>Description</h2>
+<p>DrawSetTextUnderColorString() specifies the color of a background rectangle
+to place under text annotations.</p>
+<p>The format of the DrawSetTextUnderColorString method is:</p>
+<pre class="literal-block">
+void DrawSetTextUnderColorString( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const char *under_color );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>under_color:</dt>
+<dd>text under color</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawtranslate">
+<h1><a class="toc-backref" href="#id336">DrawTranslate</a></h1>
+<div class="section" id="id221">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawTranslate( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id222">
+<h2>Description</h2>
+<p>DrawTranslate() applies a translation to the current coordinate
+system which moves the coordinate system origin to the specified
+coordinate.</p>
+<p>The format of the DrawTranslate method is:</p>
+<pre class="literal-block">
+void DrawTranslate( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x:</dt>
+<dd>new x ordinate for coordinate system origin</dd>
+<dt>y:</dt>
+<dd>new y ordinate for coordinate system origin</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetviewbox">
+<h1><a class="toc-backref" href="#id337">DrawSetViewbox</a></h1>
+<div class="section" id="id223">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetViewbox( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, unsigned long x1, unsigned long y1,
+ unsigned long x2, unsigned long y2 );
+</pre>
+</div>
+<div class="section" id="id224">
+<h2>Description</h2>
+<p>DrawSetViewbox() sets the overall canvas size to be recorded with the
+drawing vector data. Usually this will be specified using the same
+size as the canvas image. When the vector data is saved to SVG or MVG
+formats, the viewbox is use to specify the size of the canvas image that
+a viewer will render the vector data on.</p>
+<p>The format of the DrawSetViewbox method is:</p>
+<pre class="literal-block">
+void DrawSetViewbox( <a class="reference external" href="../api/types.html#drawcontext">DrawContext</a> context, unsigned long x1, unsigned long y1,
+ unsigned long x2, unsigned long y2 );
+</pre>
+<dl class="docutils">
+<dt>context:</dt>
+<dd>drawing context</dd>
+<dt>x1:</dt>
+<dd>left x ordinate</dd>
+<dt>y1:</dt>
+<dd>top y ordinate</dd>
+<dt>x2:</dt>
+<dd>right x ordinate</dd>
+<dt>y2:</dt>
+<dd>bottom y ordinate</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>effect</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="effect">
<h2 class="subtitle" id="image-effects-methods">Image effects methods</h2>
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#adaptivethresholdimage" id="id51">AdaptiveThresholdImage</a></li>
<li><a class="reference internal" href="#addnoiseimage" id="id52">AddNoiseImage</a></li>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>effect</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="effect">
+<h1 class="title">effect</h1>
+<h2 class="subtitle" id="image-effects-methods">Image effects methods</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#adaptivethresholdimage" id="id51">AdaptiveThresholdImage</a></li>
+<li><a class="reference internal" href="#addnoiseimage" id="id52">AddNoiseImage</a></li>
+<li><a class="reference internal" href="#addnoiseimagechannel" id="id53">AddNoiseImageChannel</a></li>
+<li><a class="reference internal" href="#blackthresholdimage" id="id54">BlackThresholdImage</a></li>
+<li><a class="reference internal" href="#blurimage" id="id55">BlurImage</a></li>
+<li><a class="reference internal" href="#blurimagechannel" id="id56">BlurImageChannel</a></li>
+<li><a class="reference internal" href="#channelthresholdimage" id="id57">ChannelThresholdImage</a></li>
+<li><a class="reference internal" href="#convolveimage" id="id58">ConvolveImage</a></li>
+<li><a class="reference internal" href="#despeckleimage" id="id59">DespeckleImage</a></li>
+<li><a class="reference internal" href="#edgeimage" id="id60">EdgeImage</a></li>
+<li><a class="reference internal" href="#embossimage" id="id61">EmbossImage</a></li>
+<li><a class="reference internal" href="#enhanceimage" id="id62">EnhanceImage</a></li>
+<li><a class="reference internal" href="#gaussianblurimage" id="id63">GaussianBlurImage</a></li>
+<li><a class="reference internal" href="#gaussianblurimagechannel" id="id64">GaussianBlurImageChannel</a></li>
+<li><a class="reference internal" href="#medianfilterimage" id="id65">MedianFilterImage</a></li>
+<li><a class="reference internal" href="#motionblurimage" id="id66">MotionBlurImage</a></li>
+<li><a class="reference internal" href="#randomchannelthresholdimage" id="id67">RandomChannelThresholdImage</a></li>
+<li><a class="reference internal" href="#reducenoiseimage" id="id68">ReduceNoiseImage</a></li>
+<li><a class="reference internal" href="#shadeimage" id="id69">ShadeImage</a></li>
+<li><a class="reference internal" href="#sharpenimage" id="id70">SharpenImage</a></li>
+<li><a class="reference internal" href="#sharpenimagechannel" id="id71">SharpenImageChannel</a></li>
+<li><a class="reference internal" href="#spreadimage" id="id72">SpreadImage</a></li>
+<li><a class="reference internal" href="#thresholdimage" id="id73">ThresholdImage</a></li>
+<li><a class="reference internal" href="#unsharpmaskimage" id="id74">UnsharpMaskImage</a></li>
+<li><a class="reference internal" href="#unsharpmaskimagechannel" id="id75">UnsharpMaskImageChannel</a></li>
+<li><a class="reference internal" href="#whitethresholdimage" id="id76">WhiteThresholdImage</a></li>
+</ul>
+</div>
+<div class="section" id="adaptivethresholdimage">
+<h1><a class="toc-backref" href="#id51">AdaptiveThresholdImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *AdaptiveThresholdImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned long width,
+ const unsigned long height, const unsigned long unsigned long,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>AdaptiveThresholdImage() selects an individual threshold for each pixel
+based on the range of intensity values in its local neighborhood. This
+allows for thresholding of an image whose global intensity histogram
+doesn't contain distinctive peaks.</p>
+<p>The format of the AdaptiveThresholdImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *AdaptiveThresholdImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned long width,
+ const unsigned long height, const unsigned long unsigned long,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>width:</dt>
+<dd>The width of the local neighborhood.</dd>
+<dt>height:</dt>
+<dd>The height of the local neighborhood.</dd>
+<dt>offset:</dt>
+<dd>The mean offset.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="addnoiseimage">
+<h1><a class="toc-backref" href="#id52">AddNoiseImage</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *AddNoiseImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#noisetype">NoiseType</a> noise_type,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>AddNoiseImage() adds random noise to the image.</p>
+<p>The format of the AddNoiseImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *AddNoiseImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#noisetype">NoiseType</a> noise_type,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>noise_type:</dt>
+<dd>The type of noise: Uniform, Gaussian, Multiplicative,
+Impulse, Laplacian, Poisson, or Random.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="addnoiseimagechannel">
+<h1><a class="toc-backref" href="#id53">AddNoiseImageChannel</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *AddNoiseImageChannel( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const <a class="reference external" href="../api/types.html#noisetype">NoiseType</a> noise_type, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>AddNoiseImageChannel() adds random noise to one image channel.</p>
+<p>The format of the AddNoiseImageChannel method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *AddNoiseImageChannel( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const <a class="reference external" href="../api/types.html#noisetype">NoiseType</a> noise_type, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>channel:</dt>
+<dd>The image channel to apply noise to.</dd>
+<dt>noise_type:</dt>
+<dd>The type of noise: Uniform, Gaussian, Multiplicative,
+Impulse, Laplacian, Poisson, or Random.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="blackthresholdimage">
+<h1><a class="toc-backref" href="#id54">BlackThresholdImage</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail BlackThresholdImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *thresholds );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>BlackThresholdImage() adjusts the levels of image channels such that
+values below a specified threshold are set to the minimum value (black)
+while the remaining pixels are unchanged.</p>
+<p>The format of the BlackThresholdImage method is:</p>
+<pre class="literal-block">
+MagickPassFail BlackThresholdImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *thresholds );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>thresholds:</dt>
+<dd>Channel thresholds which are specified as a comma delimited
+list containing the thresholds for red, green, blue, and opacity. If
+the list contains a percent symbol (%) then all values are treated as
+a percentage of MaxRGB.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="blurimage">
+<h1><a class="toc-backref" href="#id55">BlurImage</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *BlurImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius, const double sigma,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>BlurImage() blurs an image. We convolve the image with a Gaussian
+operator of the given radius and standard deviation (sigma).
+For reasonable results, the radius should be larger than sigma. Use a
+radius of 0 and BlurImage() selects a suitable radius for you.</p>
+<p>The format of the BlurImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *BlurImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius, const double sigma,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>radius:</dt>
+<dd>The radius of the Gaussian, in pixels, not counting the center
+pixel.</dd>
+<dt>sigma:</dt>
+<dd>The standard deviation of the Gaussian, in pixels.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="blurimagechannel">
+<h1><a class="toc-backref" href="#id56">BlurImageChannel</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *BlurImageChannel( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const double radius, const double sigma,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>BlurImageChannel() blurs the specified image channel. We convolve the
+image channel with a Gaussian operator of the given radius and standard
+deviation (sigma). For reasonable results, the radius should be larger
+than sigma. Use a radius of 0 and BlurImageChannel() selects a suitable
+radius for you.</p>
+<p>The format of the BlurImageChannel method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *BlurImageChannel( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const double radius, const double sigma,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>channel:</dt>
+<dd>The channel to blur.</dd>
+<dt>radius:</dt>
+<dd>The radius of the Gaussian, in pixels, not counting the center
+pixel.</dd>
+<dt>sigma:</dt>
+<dd>The standard deviation of the Gaussian, in pixels.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="channelthresholdimage">
+<h1><a class="toc-backref" href="#id57">ChannelThresholdImage</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail ChannelThresholdImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *threshold );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>ChannelThresholdImage() changes the value of individual pixels based on
+the level of each pixel channel. The result sets the affected channels
+to the minimum or maximum channel value. A negative threshold value
+disables thresholding for that channel. Append a percent symbol to
+have threshold values automatically scaled from a percentage to MaxRGB.</p>
+<p>Invoked by the '-threshold' option.</p>
+<p>The format of the ChannelThresholdImage method is:</p>
+<pre class="literal-block">
+MagickPassFail ChannelThresholdImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *threshold );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>threshold:</dt>
+<dd>define the threshold values, <red>{<green>,<blue>,<opacity>}{%}.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="convolveimage">
+<h1><a class="toc-backref" href="#id58">ConvolveImage</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ConvolveImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned int order,
+ const double *kernel, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>ConvolveImage() applies a custom convolution kernel to the image.</p>
+<p>The format of the ConvolveImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ConvolveImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned int order,
+ const double *kernel, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>order:</dt>
+<dd>The number of columns and rows in the filter kernel.</dd>
+<dt>kernel:</dt>
+<dd>An array of double representing the convolution kernel.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="despeckleimage">
+<h1><a class="toc-backref" href="#id59">DespeckleImage</a></h1>
+<div class="section" id="id15">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *DespeckleImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id16">
+<h2>Description</h2>
+<p>Despeckle() reduces the speckle noise in an image while preserving the
+edges of the original image.</p>
+<p>The format of the DespeckleImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *DespeckleImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="edgeimage">
+<h1><a class="toc-backref" href="#id60">EdgeImage</a></h1>
+<div class="section" id="id17">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *EdgeImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id18">
+<h2>Description</h2>
+<p>EdgeImage() finds edges in an image. Radius defines the radius of the
+convolution filter. Use a radius of 0 and Edge() selects a suitable
+radius for you.</p>
+<p>The format of the EdgeImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *EdgeImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>radius:</dt>
+<dd>the radius of the pixel neighborhood.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="embossimage">
+<h1><a class="toc-backref" href="#id61">EmbossImage</a></h1>
+<div class="section" id="id19">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *EmbossImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius, const double sigma,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id20">
+<h2>Description</h2>
+<p>EmbossImage() returns a grayscale image with a three-dimensional effect.
+We convolve the image with a Gaussian operator of the given radius and
+standard deviation (sigma). For reasonable results, radius should be
+larger than sigma. Use a radius of 0 and Emboss() selects a suitable
+radius for you.</p>
+<p>The format of the EmbossImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *EmbossImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius, const double sigma,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>radius:</dt>
+<dd>the radius of the pixel neighborhood.</dd>
+<dt>sigma:</dt>
+<dd>The standard deviation of the Gaussian, in pixels.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="enhanceimage">
+<h1><a class="toc-backref" href="#id62">EnhanceImage</a></h1>
+<div class="section" id="id21">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *EnhanceImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id22">
+<h2>Description</h2>
+<p>EnhanceImage() applies a digital filter to the image color channels that
+improves the quality of a noisy image. The opacity channel is preserved
+but is otherwise ignored.</p>
+<p>The format of the EnhanceImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *EnhanceImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="gaussianblurimage">
+<h1><a class="toc-backref" href="#id63">GaussianBlurImage</a></h1>
+<div class="section" id="id23">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *GaussianBlurImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius, const double sigma,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id24">
+<h2>Description</h2>
+<p>GaussianBlurImage() blurs an image. We convolve the image with a
+Gaussian operator of the given radius and standard deviation (sigma).
+For reasonable results, the radius should be larger than sigma. Use a
+radius of 0 and GaussianBlurImage() selects a suitable radius for you</p>
+<p>The format of the GaussianBlurImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *GaussianBlurImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius, const double sigma,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>blur_image:</dt>
+<dd>Method GaussianBlurImage returns a pointer to the image
+after it is blur. A null image is returned if there is a memory
+shortage.</dd>
+<dt>image:</dt>
+<dd>Image to blur.</dd>
+<dt>radius:</dt>
+<dd>the radius of the Gaussian, in pixels, not counting the center
+pixel.</dd>
+<dt>sigma:</dt>
+<dd>the standard deviation of the Gaussian, in pixels.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="gaussianblurimagechannel">
+<h1><a class="toc-backref" href="#id64">GaussianBlurImageChannel</a></h1>
+<div class="section" id="id25">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *GaussianBlurImageChannel( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const double radius, const double sigma,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id26">
+<h2>Description</h2>
+<p>GaussianBlurImageChannel() blurs an image channel. We convolve the image
+with a Gaussian operator of the given radius and standard deviation
+(sigma). For reasonable results, the radius should be larger than sigma.
+Use a radius of 0 and GaussianBlurImage() selects a suitable radius for
+you.</p>
+<p>The format of the GaussianBlurImageChannel method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *GaussianBlurImageChannel( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const double radius, const double sigma,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>blur_image:</dt>
+<dd>Method GaussianBlurImage returns a pointer to the image
+after it is blur. A null image is returned if there is a memory
+shortage.</dd>
+<dt>image:</dt>
+<dd>Image to blur.</dd>
+<dt>channel:</dt>
+<dd>Channel to blur in image.</dd>
+<dt>radius:</dt>
+<dd>the radius of the Gaussian, in pixels, not counting the center
+pixel.</dd>
+<dt>sigma:</dt>
+<dd>the standard deviation of the Gaussian, in pixels.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="medianfilterimage">
+<h1><a class="toc-backref" href="#id65">MedianFilterImage</a></h1>
+<div class="section" id="id27">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *MedianFilterImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id28">
+<h2>Description</h2>
+<p>MedianFilterImage() applies a digital filter that improves the quality
+of a noisy image. Each pixel is replaced by the median in a set of
+neighboring pixels as defined by radius.</p>
+<p>The algorithm was contributed by Mike Edmonds and implements an insertion
+sort for selecting median color-channel values. For more on this algorithm
+see "Skip Lists: A probabilistic Alternative to Balanced Trees" by William
+Pugh in the June 1990 of Communications of the ACM.</p>
+<p>The format of the MedianFilterImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *MedianFilterImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>radius:</dt>
+<dd>The radius of the pixel neighborhood.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="motionblurimage">
+<h1><a class="toc-backref" href="#id66">MotionBlurImage</a></h1>
+<div class="section" id="id29">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *MotionBlurImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius, const double sigma,
+ const double angle, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id30">
+<h2>Description</h2>
+<p>MotionBlurImage() simulates motion blur. We convolve the image with a
+Gaussian operator of the given radius and standard deviation (sigma).
+For reasonable results, radius should be larger than sigma. Use a
+radius of 0 and MotionBlurImage() selects a suitable radius for you.
+Angle gives the angle of the blurring motion (direction object appears
+to be coming from).</p>
+<p>Andrew Protano contributed this effect.</p>
+<p>The format of the MotionBlurImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *MotionBlurImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius, const double sigma,
+ const double angle, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>radius:</dt>
+<dd>The radius of the Gaussian, in pixels, not counting
+the center pixel.</dd>
+<dt>sigma:</dt>
+<dd>The standard deviation of the Gaussian, in pixels.</dd>
+<dt>angle:</dt>
+<dd>Apply the effect along this angle.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="randomchannelthresholdimage">
+<h1><a class="toc-backref" href="#id67">RandomChannelThresholdImage</a></h1>
+<div class="section" id="id31">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int RandomChannelThresholdImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *channel,
+ const char *thresholds,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id32">
+<h2>Description</h2>
+<p>RandomChannelThresholdImage() changes the value of individual pixels based
+on the intensity of each pixel compared to a random threshold. The result
+is a low-contrast, two color image.</p>
+<p>The format of the RandomChannelThresholdImage method is:</p>
+<pre class="literal-block">
+unsigned int RandomChannelThresholdImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *channel,
+ const char *thresholds,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>channel:</dt>
+<dd>The channel or channels to be thresholded.</dd>
+<dt>thresholds:</dt>
+<dd>a geometry string containing LOWxHIGH thresholds.
+If the string contains 2x2, 3x3, 4x4, 5x5, 6x6, or 7x7, then
+an ordered dither of order 2, 3, 4, 5, 6, or 7 will be performed
+instead.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="reducenoiseimage">
+<h1><a class="toc-backref" href="#id68">ReduceNoiseImage</a></h1>
+<div class="section" id="id33">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ReduceNoiseImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id34">
+<h2>Description</h2>
+<p>ReduceNoiseImage() smooths the contours of an image while still preserving
+edge information. The algorithm works by replacing each pixel with its
+neighbor closest in value. A neighbor is defined by radius. Use a radius
+of 0 and ReduceNoise() selects a suitable radius for you.</p>
+<p>The format of the ReduceNoiseImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ReduceNoiseImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>radius:</dt>
+<dd>The radius of the pixel neighborhood.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="shadeimage">
+<h1><a class="toc-backref" href="#id69">ShadeImage</a></h1>
+<div class="section" id="id35">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ShadeImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned int gray, double azimuth,
+ double elevation, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id36">
+<h2>Description</h2>
+<p>ShadeImage() shines a distant light on an image to create a
+three-dimensional effect. You control the positioning of the light with
+azimuth and elevation; azimuth is measured in degrees off the x axis
+and elevation is measured in pixels above the Z axis.</p>
+<p>The format of the ShadeImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ShadeImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned int gray, double azimuth,
+ double elevation, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>gray:</dt>
+<dd>A value other than zero shades the intensity of each pixel.</dd>
+<dt>azimuth, elevation:</dt>
+<dd>Define the light source direction.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="sharpenimage">
+<h1><a class="toc-backref" href="#id70">SharpenImage</a></h1>
+<div class="section" id="id37">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *SharpenImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius, const double sigma,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id38">
+<h2>Description</h2>
+<p>SharpenImage() sharpens an image. We convolve the image with a
+Gaussian operator of the given radius and standard deviation (sigma).
+For reasonable results, radius should be larger than sigma. Use a
+radius of 0 and SharpenImage() selects a suitable radius for you.</p>
+<p>The format of the SharpenImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *SharpenImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius, const double sigma,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>radius:</dt>
+<dd>The radius of the Gaussian, in pixels, not counting the center
+pixel.</dd>
+<dt>sigma:</dt>
+<dd>The standard deviation of the Laplacian, in pixels.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="sharpenimagechannel">
+<h1><a class="toc-backref" href="#id71">SharpenImageChannel</a></h1>
+<div class="section" id="id39">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *SharpenImageChannel( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const double radius, const double sigma,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id40">
+<h2>Description</h2>
+<p>SharpenImageChannel() sharpens an image channel. We convolve the image
+channel with a Gaussian operator of the given radius and standard
+deviation (sigma). For reasonable results, radius should be larger than
+sigma. Use a radius of 0 and SharpenImageChannel() selects a suitable
+radius for you.</p>
+<p>The format of the SharpenImageChannel method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *SharpenImageChannel( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const double radius, const double sigma,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>channel:</dt>
+<dd>The channel to sharpen.</dd>
+<dt>radius:</dt>
+<dd>The radius of the Gaussian, in pixels, not counting the center
+pixel.</dd>
+<dt>sigma:</dt>
+<dd>The standard deviation of the Laplacian, in pixels.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="spreadimage">
+<h1><a class="toc-backref" href="#id72">SpreadImage</a></h1>
+<div class="section" id="id41">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *SpreadImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned int radius,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id42">
+<h2>Description</h2>
+<p>SpreadImage() is a special effects method that randomly displaces each
+pixel in a block defined by the radius parameter.</p>
+<p>The format of the SpreadImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *SpreadImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned int radius,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>radius:</dt>
+<dd>Choose a random pixel in a neighborhood of this extent.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="thresholdimage">
+<h1><a class="toc-backref" href="#id73">ThresholdImage</a></h1>
+<div class="section" id="id43">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail ThresholdImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const double threshold );
+</pre>
+</div>
+<div class="section" id="id44">
+<h2>Description</h2>
+<p>ThresholdImage() changes the value of individual pixels based on
+the intensity of each pixel compared to a specified threshold. Values
+greater than the threshold are set to the maximum quantum value, and
+values equal to or below the threshold are set to the minimum quantum
+value. The result is a high-contrast, two color image.</p>
+<p>The format of the ThresholdImage method is:</p>
+<pre class="literal-block">
+MagickPassFail ThresholdImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const double threshold );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>threshold:</dt>
+<dd>Define the threshold value</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="unsharpmaskimage">
+<h1><a class="toc-backref" href="#id74">UnsharpMaskImage</a></h1>
+<div class="section" id="id45">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *UnsharpMaskImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius, const double sigma,
+ const double amount, const double threshold,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id46">
+<h2>Description</h2>
+<p>UnsharpMaskImage() sharpens an image. We convolve the image with a
+Gaussian operator of the given radius and standard deviation (sigma).
+For reasonable results, radius should be larger than sigma. Use a radius
+of 0 and UnsharpMaskImage() selects a suitable radius for you.</p>
+<p>The format of the UnsharpMaskImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *UnsharpMaskImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius, const double sigma,
+ const double amount, const double threshold,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>radius:</dt>
+<dd>The radius of the Gaussian, in pixels, not counting the center
+pixel.</dd>
+<dt>sigma:</dt>
+<dd>The standard deviation of the Gaussian, in pixels.</dd>
+<dt>amount:</dt>
+<dd>The percentage of the difference between the original and the
+blur image that is added back into the original.</dd>
+<dt>threshold:</dt>
+<dd>The threshold in pixels needed to apply the diffence amount.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="unsharpmaskimagechannel">
+<h1><a class="toc-backref" href="#id75">UnsharpMaskImageChannel</a></h1>
+<div class="section" id="id47">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *UnsharpMaskImageChannel( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const double radius, const double sigma, const double amount,
+ const double threshold, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id48">
+<h2>Description</h2>
+<p>UnsharpMaskImageChannel() sharpens an image channel. We convolve the
+image channel with a Gaussian operator of the given radius and standard
+deviation (sigma). For reasonable results, radius should be larger than
+sigma. Use a radius of 0 and UnsharpMaskImage() selects a suitable
+radius for you.</p>
+<p>The format of the UnsharpMaskImageChannel method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *UnsharpMaskImageChannel( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const double radius, const double sigma, const double amount,
+ const double threshold, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>channel:</dt>
+<dd>The channel to sharpen.</dd>
+<dt>radius:</dt>
+<dd>The radius of the Gaussian, in pixels, not counting the center
+pixel.</dd>
+<dt>sigma:</dt>
+<dd>The standard deviation of the Gaussian, in pixels.</dd>
+<dt>amount:</dt>
+<dd>The percentage of the difference between the original and the
+blur image that is added back into the original.</dd>
+<dt>threshold:</dt>
+<dd>The threshold in pixels needed to apply the diffence amount.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="whitethresholdimage">
+<h1><a class="toc-backref" href="#id76">WhiteThresholdImage</a></h1>
+<div class="section" id="id49">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail WhiteThresholdImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *thresholds );
+</pre>
+</div>
+<div class="section" id="id50">
+<h2>Description</h2>
+<p>WhiteThresholdImage() adjusts the levels of image channels such that
+values above a specified threshold are set to the maximum value (white)
+while the remaining pixels are unchanged.</p>
+<p>The format of the WhiteThresholdImage method is:</p>
+<pre class="literal-block">
+MagickPassFail WhiteThresholdImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *thresholds );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>thresholds:</dt>
+<dd>Channel thresholds which are specified as a comma delimited
+list containing the thresholds for red, green, blue, and opacity. If
+the list contains a percent symbol (%) then all values are treated as
+a percentage of MaxRGB.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="enhance">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>enhance</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="enhance">
+<h1 class="title">enhance</h1>
+<h2 class="subtitle" id="methods-to-enhance-or-adjust-an-image">Methods to enhance or adjust an image</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#contrastimage" id="id15">ContrastImage</a></li>
+<li><a class="reference internal" href="#equalizeimage" id="id16">EqualizeImage</a></li>
+<li><a class="reference internal" href="#gammaimage" id="id17">GammaImage</a></li>
+<li><a class="reference internal" href="#levelimage" id="id18">LevelImage</a></li>
+<li><a class="reference internal" href="#levelimagechannel" id="id19">LevelImageChannel</a></li>
+<li><a class="reference internal" href="#modulateimage" id="id20">ModulateImage</a></li>
+<li><a class="reference internal" href="#negateimage" id="id21">NegateImage</a></li>
+<li><a class="reference internal" href="#normalizeimage" id="id22">NormalizeImage</a></li>
+</ul>
+</div>
+<div class="section" id="contrastimage">
+<h1><a class="toc-backref" href="#id15">ContrastImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int ContrastImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned int sharpen );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>ContrastImage() enhances the intensity differences between the lighter and
+darker elements of the image. Set sharpen to a value other than 0 to
+increase the image contrast otherwise the contrast is reduced.</p>
+<p>The format of the ContrastImage method is:</p>
+<pre class="literal-block">
+unsigned int ContrastImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned int sharpen );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>sharpen:</dt>
+<dd>Increase or decrease image contrast.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="equalizeimage">
+<h1><a class="toc-backref" href="#id16">EqualizeImage</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int EqualizeImage( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>EqualizeImage() applies a histogram equalization to the image.</p>
+<p>The format of the EqualizeImage method is:</p>
+<pre class="literal-block">
+unsigned int EqualizeImage( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="gammaimage">
+<h1><a class="toc-backref" href="#id17">GammaImage</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail GammaImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *level );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>Use GammaImage() to gamma-correct an image. The same image viewed on
+different devices will have perceptual differences in the way the
+image's intensities are represented on the screen. Specify individual
+gamma levels for the red, green, and blue channels (e.g. "1.0,2.2,0.45"),
+or adjust all three with a single gamma parameter. Values typically range
+from 0.45 to 2.6.</p>
+<p>You can also reduce the influence of a particular channel with a gamma
+value of 0.</p>
+<p>The format of the GammaImage method is:</p>
+<pre class="literal-block">
+MagickPassFail GammaImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *level );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>level:</dt>
+<dd>Define the level of gamma correction.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="levelimage">
+<h1><a class="toc-backref" href="#id18">LevelImage</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int LevelImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *level );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>LevelImage() adjusts the levels of an image by scaling the colors falling
+between specified white and black points to the full available quantum
+range. The parameters provided represent the black, mid (gamma), and white
+points. The black point specifies the darkest color in the image. Colors
+darker than the black point are set to zero. Mid point specifies a gamma
+correction to apply to the image. White point specifies the lightest color
+in the image. Colors brighter than the white point are set to the maximum
+quantum value.</p>
+<p>The format of the LevelImage method is:</p>
+<pre class="literal-block">
+unsigned int LevelImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *level );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>levels:</dt>
+<dd>Specify the levels as a string of the form "black/mid/white"
+(e.g. "10,1.0,65000) where black and white have the range of 0-MaxRGB,
+and mid has the range 0-10.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="levelimagechannel">
+<h1><a class="toc-backref" href="#id19">LevelImageChannel</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail LevelImageChannel( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const double black_point, const double mid_point,
+ const double white_point );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>LevelImageChannel() adjusts the levels of one or more channels by
+scaling the colors falling between specified white and black points to
+the full available quantum range. The parameters provided represent the
+black, mid (gamma), and white points. The black point specifies the
+darkest color in the image. Colors darker than the black point are set to
+zero. Mid point specifies a gamma correction to apply to the image.
+White point specifies the lightest color in the image. Colors brighter
+than the white point are set to the maximum quantum value.</p>
+<p>The format of the LevelImage method is:</p>
+<pre class="literal-block">
+MagickPassFail LevelImageChannel( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const double black_point, const double mid_point,
+ const double white_point );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>channel:</dt>
+<dd>Identify which channel to level: Red, Cyan, Green, Magenta,
+Blue, Yellow, Opacity, or All.</dd>
+<dt>black_point, mid_point, white_point:</dt>
+<dd>Specify the levels where the black
+and white points have the range of 0-MaxRGB, and mid has the range 0-10.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="modulateimage">
+<h1><a class="toc-backref" href="#id20">ModulateImage</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int ModulateImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *modulate );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>ModulateImage() lets you control the brightness, saturation, and hue
+of an image. Modulate represents the brightness, saturation, and hue
+as one parameter (e.g. 90,150,100).</p>
+<p>The format of the ModulateImage method is:</p>
+<pre class="literal-block">
+unsigned int ModulateImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *modulate );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>modulate:</dt>
+<dd>Define the percent change in brightness, saturation, and
+hue.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="negateimage">
+<h1><a class="toc-backref" href="#id21">NegateImage</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int NegateImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned int grayscale );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>Method NegateImage negates the colors in the reference image. The
+Grayscale option means that only grayscale values within the image are
+negated.</p>
+<p>The format of the NegateImage method is:</p>
+<pre class="literal-block">
+unsigned int NegateImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned int grayscale );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="normalizeimage">
+<h1><a class="toc-backref" href="#id22">NormalizeImage</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int NormalizeImage( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>The NormalizeImage() method enhances the contrast of a color image by
+adjusting the pixels color to span the entire range of colors available.</p>
+<p>The format of the NormalizeImage method is:</p>
+<pre class="literal-block">
+unsigned int NormalizeImage( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
<title>error</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="error">
<h2>Description</h2>
<p>MagickFatalError() calls the fatal error handler methods with an error
reason. The fatal error handler is not expected to return!</p>
-<p>The format of the MagickError method is:</p>
+<p>The format of the MagickFatalError method is:</p>
<pre class="literal-block">
void MagickFatalError( const <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> error, const char *reason,
const char *description );
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>error</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="error">
+<h1 class="title">error</h1>
+<h2 class="subtitle" id="error-reporting-methods">Error reporting methods</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#catchexception" id="id27">CatchException</a></li>
+<li><a class="reference internal" href="#copyexception" id="id28">CopyException</a></li>
+<li><a class="reference internal" href="#destroyexceptioninfo" id="id29">DestroyExceptionInfo</a></li>
+<li><a class="reference internal" href="#getexceptioninfo" id="id30">GetExceptionInfo</a></li>
+<li><a class="reference internal" href="#getlocaleexceptionmessage" id="id31">GetLocaleExceptionMessage</a></li>
+<li><a class="reference internal" href="#magickerror" id="id32">MagickError</a></li>
+<li><a class="reference internal" href="#magickfatalerror" id="id33">MagickFatalError</a></li>
+<li><a class="reference internal" href="#magickwarning" id="id34">MagickWarning</a></li>
+<li><a class="reference internal" href="#seterrorhandler" id="id35">SetErrorHandler</a></li>
+<li><a class="reference internal" href="#setexceptioninfo" id="id36">SetExceptionInfo</a></li>
+<li><a class="reference internal" href="#setfatalerrorhandler" id="id37">SetFatalErrorHandler</a></li>
+<li><a class="reference internal" href="#setwarninghandler" id="id38">SetWarningHandler</a></li>
+<li><a class="reference internal" href="#throwexception" id="id39">ThrowException</a></li>
+<li><a class="reference internal" href="#throwloggedexception" id="id40">ThrowLoggedException</a></li>
+</ul>
+</div>
+<div class="section" id="catchexception">
+<h1><a class="toc-backref" href="#id27">CatchException</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+CatchException( const <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>CatchException() returns if no exceptions is found otherwise it reports
+the exception as a warning, error, or fatal depending on the severity.</p>
+<p>The format of the CatchException method is:</p>
+<pre class="literal-block">
+CatchException( const <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>exception:</dt>
+<dd>The exception info.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="copyexception">
+<h1><a class="toc-backref" href="#id28">CopyException</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void CopyException( <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *copy, const <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *original );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>CopyException() copies exception data from one ExceptionInfo structure
+to another.</p>
+<p>The format of the CopyException method is:</p>
+<pre class="literal-block">
+void CopyException( <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *copy, const <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *original );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>copy:</dt>
+<dd>The exception to copy to.</dd>
+<dt>original:</dt>
+<dd>The exception to copy from.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="destroyexceptioninfo">
+<h1><a class="toc-backref" href="#id29">DestroyExceptionInfo</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DestroyExceptionInfo( <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>DestroyExceptionInfo() deallocates memory associated with exception.</p>
+<p>The format of the DestroyExceptionInfo method is:</p>
+<pre class="literal-block">
+void DestroyExceptionInfo( <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>exception:</dt>
+<dd>The exception info.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getexceptioninfo">
+<h1><a class="toc-backref" href="#id30">GetExceptionInfo</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+GetExceptionInfo( <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>GetExceptionInfo() initializes an exception to default values.</p>
+<p>The format of the GetExceptionInfo method is:</p>
+<pre class="literal-block">
+GetExceptionInfo( <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>exception:</dt>
+<dd>The exception info.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getlocaleexceptionmessage">
+<h1><a class="toc-backref" href="#id31">GetLocaleExceptionMessage</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+const char *GetLocaleExceptionMessage( const <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> severity, const char *tag );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>GetLocaleExceptionMessage() converts a enumerated exception severity and tag
+to a message in the current locale.</p>
+<p>The format of the GetLocaleExceptionMessage method is:</p>
+<pre class="literal-block">
+const char *GetLocaleExceptionMessage( const <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> severity, const char *tag );
+</pre>
+<dl class="docutils">
+<dt>severity:</dt>
+<dd>the severity of the exception.</dd>
+<dt>tag:</dt>
+<dd>the message tag.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickerror">
+<h1><a class="toc-backref" href="#id32">MagickError</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void MagickError( const <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> error, const char *reason, const char *description );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>Method MagickError calls the error handler methods with an error reason.</p>
+<p>The format of the MagickError method is:</p>
+<pre class="literal-block">
+void MagickError( const <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> error, const char *reason, const char *description );
+</pre>
+<dl class="docutils">
+<dt>exception:</dt>
+<dd>Specifies the numeric error category.</dd>
+<dt>reason:</dt>
+<dd>Specifies the reason to display before terminating the
+program.</dd>
+<dt>description:</dt>
+<dd>Specifies any description to the reason.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickfatalerror">
+<h1><a class="toc-backref" href="#id33">MagickFatalError</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void MagickFatalError( const <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> error, const char *reason,
+ const char *description );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>MagickFatalError() calls the fatal error handler methods with an error
+reason. The fatal error handler is not expected to return!</p>
+<p>The format of the MagickError method is:</p>
+<pre class="literal-block">
+void MagickFatalError( const <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> error, const char *reason,
+ const char *description );
+</pre>
+<dl class="docutils">
+<dt>exception:</dt>
+<dd>Specifies the numeric error category.</dd>
+<dt>reason:</dt>
+<dd>Specifies the reason to display before terminating the
+program.</dd>
+<dt>description:</dt>
+<dd>Specifies any description to the reason.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickwarning">
+<h1><a class="toc-backref" href="#id34">MagickWarning</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void MagickWarning( const <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> warning, const char *reason,
+ const char *description );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>Method MagickWarning calls the warning handler methods with a warning
+reason.</p>
+<p>The format of the MagickWarning method is:</p>
+<pre class="literal-block">
+void MagickWarning( const <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> warning, const char *reason,
+ const char *description );
+</pre>
+<dl class="docutils">
+<dt>warning:</dt>
+<dd>The warning severity.</dd>
+<dt>reason:</dt>
+<dd>Define the reason for the warning.</dd>
+<dt>description:</dt>
+<dd>Describe the warning.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="seterrorhandler">
+<h1><a class="toc-backref" href="#id35">SetErrorHandler</a></h1>
+<div class="section" id="id15">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#errorhandler">ErrorHandler</a> SetErrorHandler( <a class="reference external" href="../api/types.html#errorhandler">ErrorHandler</a> handler );
+</pre>
+</div>
+<div class="section" id="id16">
+<h2>Description</h2>
+<p>SetErrorHandler() sets the error handler to the specified method
+and returns the previous error handler.</p>
+<p>The format of the SetErrorHandler method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#errorhandler">ErrorHandler</a> SetErrorHandler( <a class="reference external" href="../api/types.html#errorhandler">ErrorHandler</a> handler );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>handler:</dt>
+<dd>The method to handle errors.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setexceptioninfo">
+<h1><a class="toc-backref" href="#id36">SetExceptionInfo</a></h1>
+<div class="section" id="id17">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+SetExceptionInfo( <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception, <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> severity );
+</pre>
+</div>
+<div class="section" id="id18">
+<h2>Description</h2>
+<p>SetExceptionInfo() set the exception severity.</p>
+<p>The format of the SetExceptionInfo method is:</p>
+<pre class="literal-block">
+SetExceptionInfo( <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception, <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> severity );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>exception:</dt>
+<dd>The exception info.</dd>
+<dt>severity:</dt>
+<dd>The exception severity.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setfatalerrorhandler">
+<h1><a class="toc-backref" href="#id37">SetFatalErrorHandler</a></h1>
+<div class="section" id="id19">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+FatalErrorHandler SetFatalErrorHandler( FatalErrorHandler handler );
+</pre>
+</div>
+<div class="section" id="id20">
+<h2>Description</h2>
+<p>SetFatalErrorHandler() sets the fatal error handler to the specified method
+and returns the previous fatal error handler.</p>
+<p>The format of the SetFatalErrorHandler method is:</p>
+<pre class="literal-block">
+FatalErrorHandler SetFatalErrorHandler( FatalErrorHandler handler );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>handler:</dt>
+<dd>The method to handle errors.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setwarninghandler">
+<h1><a class="toc-backref" href="#id38">SetWarningHandler</a></h1>
+<div class="section" id="id21">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#errorhandler">ErrorHandler</a> SetWarningHandler( <a class="reference external" href="../api/types.html#errorhandler">ErrorHandler</a> handler );
+</pre>
+</div>
+<div class="section" id="id22">
+<h2>Description</h2>
+<p>SetWarningHandler() sets the warning handler to the specified method
+and returns the previous warning handler.</p>
+<p>The format of the SetWarningHandler method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#errorhandler">ErrorHandler</a> SetWarningHandler( <a class="reference external" href="../api/types.html#errorhandler">ErrorHandler</a> handler );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>handler:</dt>
+<dd>The method to handle warnings.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="throwexception">
+<h1><a class="toc-backref" href="#id39">ThrowException</a></h1>
+<div class="section" id="id23">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void ThrowException( <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception, const <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> severity,
+ const char *reason, const char *description );
+</pre>
+</div>
+<div class="section" id="id24">
+<h2>Description</h2>
+<p>ThrowException() throws an exception with the specified severity code,
+reason, and optional description.</p>
+<p>The format of the ThrowException method is:</p>
+<pre class="literal-block">
+void ThrowException( <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception, const <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> severity,
+ const char *reason, const char *description );
+</pre>
+<dl class="docutils">
+<dt>exception:</dt>
+<dd>The exception.</dd>
+<dt>severity:</dt>
+<dd>The severity of the exception.</dd>
+<dt>reason:</dt>
+<dd>The reason of the exception.</dd>
+<dt>description:</dt>
+<dd>The exception description.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="throwloggedexception">
+<h1><a class="toc-backref" href="#id40">ThrowLoggedException</a></h1>
+<div class="section" id="id25">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void ThrowLoggedException( <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception, const <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> severity,
+ const char *reason, const char *description, const char *module,
+ const char *function, const unsigned long line ;
+</pre>
+</div>
+<div class="section" id="id26">
+<h2>Description</h2>
+<p>ThrowLoggedException() throws an exception with the specified severity code,
+reason, optional description, source filename, function name, and line
+number. If logging is enabled, the exception is also logged.</p>
+<p>If the exception already contains an ErrorException (or greater) or the
+existing exception is more severe, then it is ignored.</p>
+<p>The format of the ThrowLoggedException method is:</p>
+<pre class="literal-block">
+void ThrowLoggedException( <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception, const <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> severity,
+ const char *reason, const char *description, const char *module,
+ const char *function, const unsigned long line ;
+</pre>
+<dl class="docutils">
+<dt>exception:</dt>
+<dd>The exception.</dd>
+<dt>severity:</dt>
+<dd>The severity of the exception.</dd>
+<dt>reason:</dt>
+<dd>The reason of the exception.</dd>
+<dt>description:</dt>
+<dd>The exception description.</dd>
+<dt>filename:</dt>
+<dd>The source module filename.</dd>
+<dt>function:</dt>
+<dd>The function name.</dd>
+<dt>line:</dt>
+<dd>The line number of the source module.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>export</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="export">
<h2 class="subtitle" id="export-image-pixels-into-common-representations">Export image pixels into common representations</h2>
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#exportimagepixelarea" id="id5">ExportImagePixelArea</a></li>
<li><a class="reference internal" href="#exportviewpixelarea" id="id6">ExportViewPixelArea</a></li>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>export</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="export">
+<h1 class="title">export</h1>
+<h2 class="subtitle" id="export-image-pixels-into-common-representations">Export image pixels into common representations</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#exportimagepixelarea" id="id5">ExportImagePixelArea</a></li>
+<li><a class="reference internal" href="#exportviewpixelarea" id="id6">ExportViewPixelArea</a></li>
+<li><a class="reference internal" href="#exportpixelareaoptionsinit" id="id7">ExportPixelAreaOptionsInit</a></li>
+</ul>
+</div>
+<div class="section" id="exportimagepixelarea">
+<h1><a class="toc-backref" href="#id5">ExportImagePixelArea</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail ExportImagePixelArea( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#quantumtype">QuantumType</a> quantum_type,
+ unsigned int quantum_size, unsigned char *destination,
+ const ExportPixelAreaOptions *options,
+ ExportPixelAreaInfo *export_info );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>ExportImagePixelArea() transfers one or more pixel components from the
+default image pixel cache view to a user supplied buffer. By default,
+values are written in network (big-endian) byte/bit order. By setting
+the 'endian' member of ExportPixelAreaOptions, 16, 32 and 64-bit values
+may be output as little (LSBEndian), big (MSBEndian), or host native
+(NativeEndian) endian values. This function is quite powerful in that
+besides common native CPU type sizes, it can support any integer bit
+depth from 1 to 32 (e.g. 13), 64-bits as well as 32 and 64-bit float.</p>
+<p>MagickPass is returned if the pixels are successfully transferred,
+otherwise MagickFail.</p>
+<p>The format of the ExportImagePixelArea method is:</p>
+<pre class="literal-block">
+MagickPassFail ExportImagePixelArea( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#quantumtype">QuantumType</a> quantum_type,
+ unsigned int quantum_size, unsigned char *destination,
+ const ExportPixelAreaOptions *options,
+ ExportPixelAreaInfo *export_info );
+</pre>
+<dl class="docutils">
+<dt>status:</dt>
+<dd>Returns MagickPass if the pixels are successfully transferred,
+otherwise MagickFail.</dd>
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>quantum_type:</dt>
+<dd>Declare which pixel components to transfer (AlphaQuantum,
+BlackQuantum, BlueQuantum, CMYKAQuantum, CMYKQuantum, CyanQuantum,
+GrayAlphaQuantum, GrayQuantum, GreenQuantum, IndexAlphaQuantum,
+IndexQuantum, MagentaQuantum, RGBAQuantum, RGBQuantum,
+RedQuantum, YellowQuantum)</dd>
+<dt>quantum_size:</dt>
+<dd>Bits per quantum sample (range 1-32, and 64).</dd>
+<dt>destination:</dt>
+<dd>The components are transferred to this buffer. The user
+is responsible for ensuring that the destination buffer is large
+enough.</dd>
+<dt>options:</dt>
+<dd>Additional options specific to quantum_type (may be NULL).</dd>
+<dt>export_info :</dt>
+<dd>Populated with information regarding the pixels
+exported (may be NULL)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="exportviewpixelarea">
+<h1><a class="toc-backref" href="#id6">ExportViewPixelArea</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail ExportViewPixelArea( const <a class="reference external" href="../api/types.html#viewinfo">ViewInfo</a> *view, const <a class="reference external" href="../api/types.html#quantumtype">QuantumType</a> quantum_type,
+ unsigned int quantum_size, unsigned char *destination,
+ const ExportPixelAreaOptions *options,
+ ExportPixelAreaInfo *export_info );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>ExportViewPixelArea() transfers one or more pixel components from the
+specified image pixel cache view to a user supplied buffer. By default,
+values are written in network (big-endian) byte/bit order. By setting the
+'endian' member of ExportPixelAreaOptions, 16, 32 and 64-bit values may be
+output as little (LSBEndian), big (MSBEndian), or host native
+(NativeEndian) endian values. This function is quite powerful in that
+besides common native CPU type sizes, it can support any integer bit depth
+from 1 to 32 (e.g. 13), 64-bits as well as 32 and 64-bit float.</p>
+<p>MagickPass is returned if the pixels are successfully transferred,
+otherwise MagickFail.</p>
+<p>The format of the ExportViewPixelArea method is:</p>
+<pre class="literal-block">
+MagickPassFail ExportViewPixelArea( const <a class="reference external" href="../api/types.html#viewinfo">ViewInfo</a> *view, const <a class="reference external" href="../api/types.html#quantumtype">QuantumType</a> quantum_type,
+ unsigned int quantum_size, unsigned char *destination,
+ const ExportPixelAreaOptions *options,
+ ExportPixelAreaInfo *export_info );
+</pre>
+<dl class="docutils">
+<dt>status:</dt>
+<dd>Returns MagickPass if the pixels are successfully transferred,
+otherwise MagickFail.</dd>
+<dt>view:</dt>
+<dd>The image pixel cache view.</dd>
+<dt>quantum_type:</dt>
+<dd>Declare which pixel components to transfer (AlphaQuantum,
+BlackQuantum, BlueQuantum, CMYKAQuantum, CMYKQuantum, CyanQuantum,
+GrayAlphaQuantum, GrayQuantum, GreenQuantum, IndexAlphaQuantum,
+IndexQuantum, MagentaQuantum, RGBAQuantum, RGBQuantum,
+RedQuantum, YellowQuantum)</dd>
+<dt>quantum_size:</dt>
+<dd>Bits per quantum sample (range 1-32, and 64).</dd>
+<dt>destination:</dt>
+<dd>The components are transferred to this buffer. The user
+is responsible for ensuring that the destination buffer is large
+enough.</dd>
+<dt>options:</dt>
+<dd>Additional options specific to quantum_type (may be NULL).</dd>
+<dt>export_info :</dt>
+<dd>Populated with information regarding the pixels
+exported (may be NULL)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="exportpixelareaoptionsinit">
+<h1><a class="toc-backref" href="#id7">ExportPixelAreaOptionsInit</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void ExportPixelAreaOptionsInit( ExportPixelAreaOptions *options );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>ExportPixelAreaOptionsInit() initializes the options structure which is
+optionally passed to ExportPixelArea()</p>
+<p>The format of the ExportPixelAreaOptionsInit method is:</p>
+<pre class="literal-block">
+void ExportPixelAreaOptionsInit( ExportPixelAreaOptions *options );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>options:</dt>
+<dd>Options structure to initialize.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="fx">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>fx</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="fx">
+<h1 class="title">fx</h1>
+<h2 class="subtitle" id="image-special-effects-methods">Image special effects methods</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#charcoalimage" id="id21">CharcoalImage</a></li>
+<li><a class="reference internal" href="#colorizeimage" id="id22">ColorizeImage</a></li>
+<li><a class="reference internal" href="#colormatriximage" id="id23">ColorMatrixImage</a></li>
+<li><a class="reference internal" href="#implodeimage" id="id24">ImplodeImage</a></li>
+<li><a class="reference internal" href="#morphimages" id="id25">MorphImages</a></li>
+<li><a class="reference internal" href="#oilpaintimage" id="id26">OilPaintImage</a></li>
+<li><a class="reference internal" href="#solarizeimage" id="id27">SolarizeImage</a></li>
+<li><a class="reference internal" href="#steganoimage" id="id28">SteganoImage</a></li>
+<li><a class="reference internal" href="#stereoimage" id="id29">StereoImage</a></li>
+<li><a class="reference internal" href="#swirlimage" id="id30">SwirlImage</a></li>
+<li><a class="reference internal" href="#waveimage" id="id31">WaveImage</a></li>
+</ul>
+</div>
+<div class="section" id="charcoalimage">
+<h1><a class="toc-backref" href="#id21">CharcoalImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *CharcoalImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius, const double sigma,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>Method CharcoalImage creates a new image that is a copy of an existing
+one with the edge highlighted. It allocates the memory necessary for the
+new Image structure and returns a pointer to the new image.</p>
+<p>The format of the CharcoalImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *CharcoalImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius, const double sigma,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>charcoal_image:</dt>
+<dd>Method CharcoalImage returns a pointer to the image
+after it is embossed. A null image is returned if there is a memory
+shortage.</dd>
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>radius:</dt>
+<dd>the radius of the pixel neighborhood.</dd>
+<dt>sigma:</dt>
+<dd>The standard deviation of the Gaussian, in pixels.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="colorizeimage">
+<h1><a class="toc-backref" href="#id22">ColorizeImage</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ColorizeImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *opacity,
+ const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> target, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>ColorizeImage() blends the fill color with each pixel in the image.
+A percentage blend is specified with opacity. Control the application
+of different color components by specifying a different percentage for
+each component (e.g. 90/100/10 is 90% red, 100% green, and 10% blue).</p>
+<p>The format of the ColorizeImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ColorizeImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *opacity,
+ const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> target, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>opacity:</dt>
+<dd>A character string indicating the level of opacity as a
+percentage.</dd>
+<dt>target:</dt>
+<dd>A color value.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="colormatriximage">
+<h1><a class="toc-backref" href="#id23">ColorMatrixImage</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail ColorMatrixImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned int order,
+ const double *color_matrix );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>ColorMatrixImage() applies a color matrix to the image channels. The
+user supplied matrix may be of order 1 to 5 (1x1 through 5x5) and is
+used to update the default identity matrix:</p>
+<p>1 0 0 0 0
+0 1 0 0 0
+0 0 1 0 0
+0 0 0 1 0
+0 0 0 0 1</p>
+<p>where the first four columns represent the ratio of the color (red,
+green, blue) and opacity components incorporated in the output summation.
+The first four rows represent the summations for red, green, blue, and
+opacity. The last row is a dummy row and is not used. The last column
+represents a constant value (expressed as a ratio of MaxRGB) to be
+added to the row summation. The following is a summary of how the
+matrix is applied:</p>
+<p>r' = r*m[0,0] + g*m[1,0] + b*m[2,0] + o*m[3,0] + MaxRGB*m[4,0]
+g' = r*m[0,1] + g*m[1,1] + b*m[2,1] + o*m[3,1] + MaxRGB*m[4,1]
+b' = r*m[0,2] + g*m[1,2] + b*m[2,2] + o*m[3,2] + MaxRGB*m[4,2]
+o' = r*m[0,3] + g*m[1,3] + b*m[2,3] + o*m[3,3] + MaxRGB*m[4,3]</p>
+<p>The format of the ColorMatrixImage method is:</p>
+<pre class="literal-block">
+MagickPassFail ColorMatrixImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned int order,
+ const double *color_matrix );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>order:</dt>
+<dd>The number of columns and rows in the filter kernel.</dd>
+<dt>matrix:</dt>
+<dd>An array of double representing the matrix</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="implodeimage">
+<h1><a class="toc-backref" href="#id24">ImplodeImage</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ImplodeImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double amount,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>Method ImplodeImage creates a new image that is a copy of an existing
+one with the image pixels "implode" by the specified percentage. It
+allocates the memory necessary for the new Image structure and returns a
+pointer to the new image.</p>
+<p>The format of the ImplodeImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ImplodeImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double amount,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>implode_image:</dt>
+<dd>Method ImplodeImage returns a pointer to the image
+after it is implode. A null image is returned if there is a memory
+shortage.</dd>
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>amount:</dt>
+<dd>Define the extent of the implosion.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="morphimages">
+<h1><a class="toc-backref" href="#id25">MorphImages</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *MorphImages( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned long number_frames,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>The MorphImages() method requires a minimum of two images. The first
+image is transformed into the second by a number of intervening images
+as specified by frames.</p>
+<p>The format of the MorphImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *MorphImages( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned long number_frames,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>number_frames:</dt>
+<dd>Define the number of in-between image to generate.
+The more in-between frames, the smoother the morph.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="oilpaintimage">
+<h1><a class="toc-backref" href="#id26">OilPaintImage</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *OilPaintImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>OilPaintImage() applies a special effect filter that simulates an oil
+painting. Each pixel is replaced by the most frequent color occurring
+in a circular region defined by radius.</p>
+<p>The format of the OilPaintImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *OilPaintImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double radius,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>radius:</dt>
+<dd>The radius of the circular neighborhood.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="solarizeimage">
+<h1><a class="toc-backref" href="#id27">SolarizeImage</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int SolarizeImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const double threshold );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>SolarizeImage() applies a special effect to the image, similar to the effect
+achieved in a photo darkroom by selectively exposing areas of photo
+sensitive paper to light. Threshold ranges from 0 to MaxRGB and is a
+measure of the extent of the solarization. False is returned if an error
+is encountered.</p>
+<p>The format of the SolarizeImage method is:</p>
+<pre class="literal-block">
+unsigned int SolarizeImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const double threshold );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>threshold:</dt>
+<dd>Define the extent of the solarization.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="steganoimage">
+<h1><a class="toc-backref" href="#id28">SteganoImage</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *SteganoImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#image">Image</a> *watermark,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>Use SteganoImage() to hide a digital watermark within the image.
+Recover the hidden watermark later to prove that the authenticity of
+an image. Offset defines the start position within the image to hide
+the watermark.</p>
+<p>The format of the SteganoImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *SteganoImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#image">Image</a> *watermark,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>watermark:</dt>
+<dd>The watermark image.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="stereoimage">
+<h1><a class="toc-backref" href="#id29">StereoImage</a></h1>
+<div class="section" id="id15">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *StereoImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#image">Image</a> *offset_image,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id16">
+<h2>Description</h2>
+<p>StereoImage() combines two images and produces a single image that is the
+composite of a left and right image of a stereo pair. Special red-green
+stereo glasses are required to view this effect.</p>
+<p>The format of the StereoImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *StereoImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#image">Image</a> *offset_image,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>stereo_image:</dt>
+<dd>Method StereoImage returns a pointer to the stereo
+image. A null image is returned if there is a memory shortage.</dd>
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>offset_image:</dt>
+<dd>Another image.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="swirlimage">
+<h1><a class="toc-backref" href="#id30">SwirlImage</a></h1>
+<div class="section" id="id17">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *SwirlImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, double degrees, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id18">
+<h2>Description</h2>
+<p>SwirlImage() swirls the pixels about the center of the image, where
+degrees indicates the sweep of the arc through which each pixel is moved.
+You get a more dramatic effect as the degrees move from 1 to 360.</p>
+<p>The format of the SwirlImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *SwirlImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, double degrees, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>degrees:</dt>
+<dd>Define the tightness of the swirling effect.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="waveimage">
+<h1><a class="toc-backref" href="#id31">WaveImage</a></h1>
+<div class="section" id="id19">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *WaveImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double amplitude, const double wave_length,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id20">
+<h2>Description</h2>
+<p>The WaveImage() filter creates a "ripple" effect in the image by shifting
+the pixels vertically along a sine wave whose amplitude and wavelength
+is specified by the given parameters.</p>
+<p>The format of the WaveImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *WaveImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double amplitude, const double wave_length,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>amplitude, frequency:</dt>
+<dd>Define the amplitude and wave_length of the
+sine wave.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="hclut">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>hclut</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="hclut">
+<h1 class="title">hclut</h1>
+<h2 class="subtitle" id="apply-hald-clut-to-image">Apply Hald CLUT to image</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#haldclutimage" id="id1">HaldClutImage</a></li>
+</ul>
+</div>
+<div class="section" id="haldclutimage">
+<h1><a class="toc-backref" href="#id1">HaldClutImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail HaldClutImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#image">Image</a> *clut );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>The HaldClutImage() method apply a color lookup table (Hald CLUT) to the
+image. The fundamental principle of the Hald CLUT algorithm is that
+application of an identity CLUT causes no change to the input image,
+but an identity CLUT image which has had its colors transformed in
+some way (e.g. in Adobe Photoshop) may be used to implement an identical
+transform on any other image.</p>
+<p>The minimum CLUT level is 2, and the maximum depends on available memory
+(largest successfully tested is 24). A CLUT image is required to have equal
+width and height. A CLUT of level 8 is an image of dimension 512x512, a CLUT
+of level 16 is an image of dimension 4096x4096. Interpolation is used so
+extremely large CLUT images are not required.</p>
+<p>GraphicsMagick provides an 'identity' coder which may be used to generate
+identity HLUTs. For example, reading from "identity:8" creates an identity
+CLUT of order 8.</p>
+<p>The Hald CLUT algorithm has been developed by Eskil Steenberg as described
+at <a class="reference external" href="http://www.quelsolaar.com/technology/clut.html">http://www.quelsolaar.com/technology/clut.html</a>, and was adapted for
+GraphicsMagick by Clément Follet with support from Cédric Lejeune of
+Workflowers.</p>
+<p>The format of the HaldClutImage method is:</p>
+<pre class="literal-block">
+MagickPassFail HaldClutImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#image">Image</a> *clut );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>clut:</dt>
+<dd>The color lookup table image</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>image</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="image">
<h2 class="subtitle" id="miscellaneous-image-methods">Miscellaneous image methods</h2>
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#accessdefinition" id="id70">AccessDefinition</a></li>
<li><a class="reference internal" href="#adddefinition" id="id71">AddDefinition</a></li>
<div class="section" id="id7">
<h2>Description</h2>
<p>AllocateImage() returns a pointer to an image structure initialized to
-default values.</p>
+default values. Currently a failure in this function results in a fatal
+error, resulting in program exit.</p>
<p>The format of the AllocateImage method is:</p>
<pre class="literal-block">
<a class="reference external" href="../api/types.html#image">Image</a> *AllocateImage( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info );
<p>Use AllocateNextImage() to initialize the next image in a sequence to
default values. The next member of image points to the newly allocated
image. If there is a memory shortage, next is assigned NULL.</p>
+<p>It is expected that the image next pointer is null, since otherwise
+there is likely to be a memory leak. In the future this may be enforced.</p>
<p>The format of the AllocateNextImage method is:</p>
<pre class="literal-block">
void AllocateNextImage( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, <a class="reference external" href="../api/types.html#image">Image</a> *image );
<p>DestroyImage() dereferences an image, deallocating memory associated with
the image if the reference count becomes zero. There is no effect if the
image pointer is null.</p>
+<p>In the interest of avoiding dangling pointers or memory leaks, the image
+previous and next pointers should be null when this function is called,
+and no other image should refer to it. In the future this may be enforced.</p>
<p>The format of the DestroyImage method is:</p>
<pre class="literal-block">
void DestroyImage( <a class="reference external" href="../api/types.html#image">Image</a> *image );
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>import</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="import">
<h2 class="subtitle" id="import-image-pixels-from-common-representations">Import image pixels from common representations</h2>
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#importimagepixelarea" id="id5">ImportImagePixelArea</a></li>
<li><a class="reference internal" href="#importviewpixelarea" id="id6">ImportViewPixelArea</a></li>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>import</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="import">
+<h1 class="title">import</h1>
+<h2 class="subtitle" id="import-image-pixels-from-common-representations">Import image pixels from common representations</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#importimagepixelarea" id="id5">ImportImagePixelArea</a></li>
+<li><a class="reference internal" href="#importviewpixelarea" id="id6">ImportViewPixelArea</a></li>
+<li><a class="reference internal" href="#importpixelareaoptionsinit" id="id7">ImportPixelAreaOptionsInit</a></li>
+</ul>
+</div>
+<div class="section" id="importimagepixelarea">
+<h1><a class="toc-backref" href="#id5">ImportImagePixelArea</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail ImportImagePixelArea( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#quantumtype">QuantumType</a> quantum_type,
+ const unsigned int quantum_size,
+ const unsigned char *source,
+ const ImportPixelAreaOptions *options,
+ ImportPixelAreaInfo *import_info );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>ImportImagePixelArea() transfers one or more pixel components from a user
+supplied buffer into the default image pixel cache view. By default,
+values are read in network (big-endian) byte/bit order. By setting the
+'endian' member of ExportPixelAreaOptions, 16, 32 and 64-bit values may
+be output as little (LSBEndian), big (MSBEndian), or host native
+(NativeEndian) endian values. This function is quite powerful in that
+besides common native CPU type sizes, it can support any integer bit
+depth from 1 to 32 (e.g. 13), 64-bits, as well as 32 and 64-bit float.</p>
+<p>MagickPass is returned if the pixels are successfully transferred,
+otherwise MagickFail.</p>
+<p>The format of the ImportImagePixelArea method is:</p>
+<pre class="literal-block">
+MagickPassFail ImportImagePixelArea( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#quantumtype">QuantumType</a> quantum_type,
+ const unsigned int quantum_size,
+ const unsigned char *source,
+ const ImportPixelAreaOptions *options,
+ ImportPixelAreaInfo *import_info );
+</pre>
+<dl class="docutils">
+<dt>status:</dt>
+<dd>Method PushImagePixels returns MagickPass if the pixels are
+successfully transferred, otherwise MagickFail.</dd>
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>quantum_type:</dt>
+<dd>Declare which pixel components to transfer (AlphaQuantum,
+BlackQuantum, BlueQuantum, CMYKAQuantum, CMYKQuantum, CyanQuantum,
+GrayAlphaQuantum, GrayQuantum, GreenQuantum, IndexAlphaQuantum,
+IndexQuantum, MagentaQuantum, RGBAQuantum, RGBQuantum,
+RedQuantum, YellowQuantum)</dd>
+<dt>quantum_size:</dt>
+<dd>Bits per quantum sample (range 1-32, and 64).</dd>
+<dt>source:</dt>
+<dd>The pixel components are transferred from this buffer.</dd>
+<dt>options:</dt>
+<dd>Additional options specific to quantum_type (may be NULL).</dd>
+<dt>import_info :</dt>
+<dd>Populated with information regarding the pixels
+imported (may be NULL)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="importviewpixelarea">
+<h1><a class="toc-backref" href="#id6">ImportViewPixelArea</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail ImportViewPixelArea( <a class="reference external" href="../api/types.html#viewinfo">ViewInfo</a> *view, const <a class="reference external" href="../api/types.html#quantumtype">QuantumType</a> quantum_type,
+ const unsigned int quantum_size,
+ const unsigned char *source,
+ const ImportPixelAreaOptions *options,
+ ImportPixelAreaInfo *import_info );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>ImportViewPixelArea() transfers one or more pixel components from a user
+supplied buffer into the specified image pixel cache view of an image. By
+default, values are read in network (big-endian) byte/bit order. By
+setting the 'endian' member of ExportPixelAreaOptions, 16, 32 and 64-bit
+values may be output as little (LSBEndian), big (MSBEndian), or host
+native (NativeEndian) endian values. This function is quite powerful in
+that besides common native CPU type sizes, it can support any integer bit
+depth from 1 to 32 (e.g. 13), 64-bits, as well as 32 and 64-bit float.</p>
+<p>MagickPass is returned if the pixels are successfully transferred,
+otherwise MagickFail.</p>
+<p>The format of the ImportViewPixelArea method is:</p>
+<pre class="literal-block">
+MagickPassFail ImportViewPixelArea( <a class="reference external" href="../api/types.html#viewinfo">ViewInfo</a> *view, const <a class="reference external" href="../api/types.html#quantumtype">QuantumType</a> quantum_type,
+ const unsigned int quantum_size,
+ const unsigned char *source,
+ const ImportPixelAreaOptions *options,
+ ImportPixelAreaInfo *import_info );
+</pre>
+<dl class="docutils">
+<dt>status:</dt>
+<dd>Method PushImagePixels returns MagickPass if the pixels are
+successfully transferred, otherwise MagickFail.</dd>
+<dt>view:</dt>
+<dd>The pixel view to import pixels into.</dd>
+<dt>quantum_type:</dt>
+<dd>Declare which pixel components to transfer (AlphaQuantum,
+BlackQuantum, BlueQuantum, CMYKAQuantum, CMYKQuantum, CyanQuantum,
+GrayAlphaQuantum, GrayQuantum, GreenQuantum, IndexAlphaQuantum,
+IndexQuantum, MagentaQuantum, RGBAQuantum, RGBQuantum,
+RedQuantum, YellowQuantum)</dd>
+<dt>quantum_size:</dt>
+<dd>Bits per quantum sample (range 1-32, and 64).</dd>
+<dt>source:</dt>
+<dd>The pixel components are transferred from this buffer.</dd>
+<dt>options:</dt>
+<dd>Additional options specific to quantum_type (may be NULL).</dd>
+<dt>import_info :</dt>
+<dd>Populated with information regarding the pixels
+imported (may be NULL)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="importpixelareaoptionsinit">
+<h1><a class="toc-backref" href="#id7">ImportPixelAreaOptionsInit</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void ImportPixelAreaOptionsInit( ImportPixelAreaOptions *options );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>ImportPixelAreaOptionsInit() initializes the options structure which is
+optionally passed to ImportPixelArea()</p>
+<p>The format of the ImportPixelAreaOptionsInit method is:</p>
+<pre class="literal-block">
+void ImportPixelAreaOptionsInit( ImportPixelAreaOptions *options );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>options:</dt>
+<dd>Options structure to initialize.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>list</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="list">
<h2 class="subtitle" id="image-list-support">Image list support</h2>
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#appendimagetolist" id="id41">AppendImageToList</a></li>
<li><a class="reference internal" href="#cloneimagelist" id="id42">CloneImageList</a></li>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>list</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="list">
+<h1 class="title">list</h1>
+<h2 class="subtitle" id="image-list-support">Image list support</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#appendimagetolist" id="id41">AppendImageToList</a></li>
+<li><a class="reference internal" href="#cloneimagelist" id="id42">CloneImageList</a></li>
+<li><a class="reference internal" href="#deleteimagefromlist" id="id43">DeleteImageFromList</a></li>
+<li><a class="reference internal" href="#destroyimagelist" id="id44">DestroyImageList</a></li>
+<li><a class="reference internal" href="#getfirstimageinlist" id="id45">GetFirstImageInList</a></li>
+<li><a class="reference internal" href="#getimagefromlist" id="id46">GetImageFromList</a></li>
+<li><a class="reference internal" href="#getimageindexinlist" id="id47">GetImageIndexInList</a></li>
+<li><a class="reference internal" href="#getimagelistlength" id="id48">GetImageListLength</a></li>
+<li><a class="reference internal" href="#getlastimageinlist" id="id49">GetLastImageInList</a></li>
+<li><a class="reference internal" href="#getnextimageinlist" id="id50">GetNextImageInList</a></li>
+<li><a class="reference internal" href="#getpreviousimageinlist" id="id51">GetPreviousImageInList</a></li>
+<li><a class="reference internal" href="#imagelisttoarray" id="id52">ImageListToArray</a></li>
+<li><a class="reference internal" href="#insertimageinlist" id="id53">InsertImageInList</a></li>
+<li><a class="reference internal" href="#newimagelist" id="id54">NewImageList</a></li>
+<li><a class="reference internal" href="#prependimagetolist" id="id55">PrependImageToList</a></li>
+<li><a class="reference internal" href="#removefirstimagefromlist" id="id56">RemoveFirstImageFromList</a></li>
+<li><a class="reference internal" href="#removelastimagefromlist" id="id57">RemoveLastImageFromList</a></li>
+<li><a class="reference internal" href="#replaceimageinlist" id="id58">ReplaceImageInList</a></li>
+<li><a class="reference internal" href="#reverseimagelist" id="id59">ReverseImageList</a></li>
+<li><a class="reference internal" href="#spliceimageintolist" id="id60">SpliceImageIntoList</a></li>
+<li><a class="reference internal" href="#splitimagelist" id="id61">SplitImageList</a></li>
+</ul>
+</div>
+<div class="section" id="appendimagetolist">
+<h1><a class="toc-backref" href="#id41">AppendImageToList</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+AppendImageToList( <a class="reference external" href="../api/types.html#image">Image</a> ** images, <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>AppendImageToList() appends an image to the end of the list.</p>
+<p>The format of the AppendImageToList method is:</p>
+<pre class="literal-block">
+AppendImageToList( <a class="reference external" href="../api/types.html#image">Image</a> ** images, <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+<dt>image:</dt>
+<dd>The image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="cloneimagelist">
+<h1><a class="toc-backref" href="#id42">CloneImageList</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *CloneImageList( const <a class="reference external" href="../api/types.html#image">Image</a> *images, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>CloneImageList() returns a duplicate of the image list.</p>
+<p>The format of the CloneImageList method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *CloneImageList( const <a class="reference external" href="../api/types.html#image">Image</a> *images, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="deleteimagefromlist">
+<h1><a class="toc-backref" href="#id43">DeleteImageFromList</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+DeleteImageFromList( <a class="reference external" href="../api/types.html#image">Image</a> ** images );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>DeleteImageFromList() deletes an image from the list.</p>
+<p>The format of the DeleteImageFromList method is:</p>
+<pre class="literal-block">
+DeleteImageFromList( <a class="reference external" href="../api/types.html#image">Image</a> ** images );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="destroyimagelist">
+<h1><a class="toc-backref" href="#id44">DestroyImageList</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DestroyImageList( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>DestroyImageList() destroys an image list. There is no effect if the
+image pointer is null.</p>
+<p>The format of the DestroyImageList method is:</p>
+<pre class="literal-block">
+void DestroyImageList( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image sequence.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getfirstimageinlist">
+<h1><a class="toc-backref" href="#id45">GetFirstImageInList</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *GetFirstImageInList( const <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>GetFirstImageInList() returns a pointer to the first image in the list</p>
+<p>The format of the GetFirstImageInList method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *GetFirstImageInList( const <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getimagefromlist">
+<h1><a class="toc-backref" href="#id46">GetImageFromList</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *GetImageFromList( const <a class="reference external" href="../api/types.html#image">Image</a> *images, const long offset );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>GetImageFromList() returns an image at the specified offset from the list.</p>
+<p>The format of the GetImageFromList method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *GetImageFromList( const <a class="reference external" href="../api/types.html#image">Image</a> *images, const long offset );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+<dt>offset:</dt>
+<dd>The position within the list.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getimageindexinlist">
+<h1><a class="toc-backref" href="#id47">GetImageIndexInList</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+long GetImageIndexInList( const <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>GetImageIndexInList() returns the offset in the list of the specified image.</p>
+<p>The format of the GetImageIndexInList method is:</p>
+<pre class="literal-block">
+long GetImageIndexInList( const <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getimagelistlength">
+<h1><a class="toc-backref" href="#id48">GetImageListLength</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long GetImageListLength( const <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>GetImageListLength() returns the length of the list (the number of images in
+the list).</p>
+<p>The format of the GetImageListLength method is:</p>
+<pre class="literal-block">
+unsigned long GetImageListLength( const <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getlastimageinlist">
+<h1><a class="toc-backref" href="#id49">GetLastImageInList</a></h1>
+<div class="section" id="id15">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *GetLastImageInList( const <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+</div>
+<div class="section" id="id16">
+<h2>Description</h2>
+<p>GetLastImageInList() returns a pointer to the last image in the list</p>
+<p>The format of the GetLastImageInList method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *GetLastImageInList( const <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getnextimageinlist">
+<h1><a class="toc-backref" href="#id50">GetNextImageInList</a></h1>
+<div class="section" id="id17">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *GetNextImageInList( const <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+</div>
+<div class="section" id="id18">
+<h2>Description</h2>
+<p>GetNextImageInList() returns the next image in the list.</p>
+<p>The format of the GetNextImageInList method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *GetNextImageInList( const <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getpreviousimageinlist">
+<h1><a class="toc-backref" href="#id51">GetPreviousImageInList</a></h1>
+<div class="section" id="id19">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *GetPreviousImageInList( const <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+</div>
+<div class="section" id="id20">
+<h2>Description</h2>
+<p>GetPreviousImageInList() returns the previous image in the list.</p>
+<p>The format of the GetPreviousImageInList method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *GetPreviousImageInList( const <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="imagelisttoarray">
+<h1><a class="toc-backref" href="#id52">ImageListToArray</a></h1>
+<div class="section" id="id21">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> ** ImageListToArray( const <a class="reference external" href="../api/types.html#image">Image</a> *images, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id22">
+<h2>Description</h2>
+<p>ImageListToArray() is a convenience method that converts an image list to
+a sequential array. For example,</p>
+<p>group = ImageListToArray(images, exception);
+for (i = 0; i < n; i++)
+puts(group[i]->filename);</p>
+<p>The format of the ImageListToArray method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> ** ImageListToArray( const <a class="reference external" href="../api/types.html#image">Image</a> *images, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image list.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="insertimageinlist">
+<h1><a class="toc-backref" href="#id53">InsertImageInList</a></h1>
+<div class="section" id="id23">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+InsertImageInList( <a class="reference external" href="../api/types.html#image">Image</a> ** images, <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id24">
+<h2>Description</h2>
+<p>InsertImageInList() inserts an image in the list.</p>
+<p>The format of the InsertImageInList method is:</p>
+<pre class="literal-block">
+InsertImageInList( <a class="reference external" href="../api/types.html#image">Image</a> ** images, <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+<dt>image:</dt>
+<dd>The image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="newimagelist">
+<h1><a class="toc-backref" href="#id54">NewImageList</a></h1>
+<div class="section" id="id25">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *NewImageList( void );
+</pre>
+</div>
+<div class="section" id="id26">
+<h2>Description</h2>
+<p>NewImageList() creates an empty image list.</p>
+<p>The format of the NewImageList method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *NewImageList( void );
+</pre>
+</div>
+</div>
+<div class="section" id="prependimagetolist">
+<h1><a class="toc-backref" href="#id55">PrependImageToList</a></h1>
+<div class="section" id="id27">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+PrependImageToList( <a class="reference external" href="../api/types.html#image">Image</a> *images, <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id28">
+<h2>Description</h2>
+<p>PrependImageToList() prepends the image to the beginning of the list.</p>
+<p>The format of the PrependImageToList method is:</p>
+<pre class="literal-block">
+PrependImageToList( <a class="reference external" href="../api/types.html#image">Image</a> *images, <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+<dt>image:</dt>
+<dd>The image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="removefirstimagefromlist">
+<h1><a class="toc-backref" href="#id56">RemoveFirstImageFromList</a></h1>
+<div class="section" id="id29">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *RemoveFirstImageFromList( <a class="reference external" href="../api/types.html#image">Image</a> ** images );
+</pre>
+</div>
+<div class="section" id="id30">
+<h2>Description</h2>
+<p>RemoveFirstImageFromList() removes an image from the beginning of the list.</p>
+<p>The format of the RemoveFirstImageFromList method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *RemoveFirstImageFromList( <a class="reference external" href="../api/types.html#image">Image</a> ** images );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="removelastimagefromlist">
+<h1><a class="toc-backref" href="#id57">RemoveLastImageFromList</a></h1>
+<div class="section" id="id31">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *RemoveLastImageFromList( <a class="reference external" href="../api/types.html#image">Image</a> ** images );
+</pre>
+</div>
+<div class="section" id="id32">
+<h2>Description</h2>
+<p>RemoveLastImageFromList() removes the last image from the list.</p>
+<p>The format of the RemoveLastImageFromList method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *RemoveLastImageFromList( <a class="reference external" href="../api/types.html#image">Image</a> ** images );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="replaceimageinlist">
+<h1><a class="toc-backref" href="#id58">ReplaceImageInList</a></h1>
+<div class="section" id="id33">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+ReplaceImageInList( <a class="reference external" href="../api/types.html#image">Image</a> ** images, <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id34">
+<h2>Description</h2>
+<p>ReplaceImageInList() replaces an image in the list.</p>
+<p>The format of the ReplaceImageInList method is:</p>
+<pre class="literal-block">
+ReplaceImageInList( <a class="reference external" href="../api/types.html#image">Image</a> ** images, <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+<dt>image:</dt>
+<dd>The image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="reverseimagelist">
+<h1><a class="toc-backref" href="#id59">ReverseImageList</a></h1>
+<div class="section" id="id35">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+ReverseImageList( const <a class="reference external" href="../api/types.html#image">Image</a> ** images );
+</pre>
+</div>
+<div class="section" id="id36">
+<h2>Description</h2>
+<p>ReverseImageList() reverses the image list.</p>
+<p>The format of the ReverseImageList method is:</p>
+<pre class="literal-block">
+ReverseImageList( const <a class="reference external" href="../api/types.html#image">Image</a> ** images );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="spliceimageintolist">
+<h1><a class="toc-backref" href="#id60">SpliceImageIntoList</a></h1>
+<div class="section" id="id37">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+SpliceImageIntoList( <a class="reference external" href="../api/types.html#image">Image</a> ** images, const unsigned long length, <a class="reference external" href="../api/types.html#image">Image</a> *splice );
+</pre>
+</div>
+<div class="section" id="id38">
+<h2>Description</h2>
+<p>SpliceImageIntoList() removes 'length' images from the list and replaces
+them with the specified splice.</p>
+<p>The format of the SpliceImageIntoList method is:</p>
+<pre class="literal-block">
+SpliceImageIntoList( <a class="reference external" href="../api/types.html#image">Image</a> ** images, const unsigned long length, <a class="reference external" href="../api/types.html#image">Image</a> *splice );
+</pre>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+<dt>length:</dt>
+<dd>The length of the image list to remove.</dd>
+<dt>splice:</dt>
+<dd>Replace the removed image list with this list.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="splitimagelist">
+<h1><a class="toc-backref" href="#id61">SplitImageList</a></h1>
+<div class="section" id="id39">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *SplitImageList( <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+</div>
+<div class="section" id="id40">
+<h2>Description</h2>
+<p>SplitImageList() splits an image into two lists.</p>
+<p>The format of the SplitImageList method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *SplitImageList( <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>The image list.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<title>log</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="log">
+<h1 class="title">log</h1>
+<h2 class="subtitle" id="event-logging-support">Event logging support</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#iseventlogging" id="id21">IsEventLogging</a></li>
+<li><a class="reference internal" href="#logmagickevent" id="id22">LogMagickEvent</a></li>
+<li><a class="reference internal" href="#setlogdefaulteventtype" id="id23">SetLogDefaultEventType</a></li>
+<li><a class="reference internal" href="#setlogdefaultgenerations" id="id24">SetLogDefaultGenerations</a></li>
+<li><a class="reference internal" href="#setlogdefaultlimit" id="id25">SetLogDefaultLimit</a></li>
+<li><a class="reference internal" href="#setlogdefaultlogmethod" id="id26">SetLogDefaultLogMethod</a></li>
+<li><a class="reference internal" href="#setlogdefaultoutputtype" id="id27">SetLogDefaultOutputType</a></li>
+<li><a class="reference internal" href="#setlogdefaultfilename" id="id28">SetLogDefaultFileName</a></li>
+<li><a class="reference internal" href="#setlogeventmask" id="id29">SetLogEventMask</a></li>
+<li><a class="reference internal" href="#setlogformat" id="id30">SetLogFormat</a></li>
+<li><a class="reference internal" href="#setlogmethod" id="id31">SetLogMethod</a></li>
+</ul>
+</div>
+<div class="section" id="iseventlogging">
+<h1><a class="toc-backref" href="#id21">IsEventLogging</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickBool IsEventLogging( void );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>IsEventLogging() returns MagickTrue if logging of events is enabled otherwise
+MagickFalse. This can be used to enable logging code which is otherwise
+not needed.</p>
+<p>The format of the IsEventLogging method is:</p>
+<pre class="literal-block">
+MagickBool IsEventLogging( void );
+</pre>
+</div>
+</div>
+<div class="section" id="logmagickevent">
+<h1><a class="toc-backref" href="#id22">LogMagickEvent</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail LogMagickEvent( const <a class="reference external" href="../api/types.html#logeventtype">LogEventType</a> type, const char *module,
+ const char *function, const unsigned long line,
+ const char *format, ... );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>LogMagickEvent() logs an event as determined by the current logging
+configuration. If an error occurs, MagickFail is returned otherwise
+MagickPass.</p>
+<p>The format of the LogMagickEvent method is:</p>
+<pre class="literal-block">
+MagickPassFail LogMagickEvent( const <a class="reference external" href="../api/types.html#logeventtype">LogEventType</a> type, const char *module,
+ const char *function, const unsigned long line,
+ const char *format, ... );
+</pre>
+<dl class="docutils">
+<dt>type:</dt>
+<dd>The event type.</dd>
+<dt>filename:</dt>
+<dd>The source module filename.</dd>
+<dt>function:</dt>
+<dd>The function name.</dd>
+<dt>line:</dt>
+<dd>The line number of the source module.</dd>
+<dt>format:</dt>
+<dd>The output format.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setlogdefaulteventtype">
+<h1><a class="toc-backref" href="#id23">SetLogDefaultEventType</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void SetLogDefaultEventType( const char *events );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>SetLogDefaultEventType() accepts a comma-delimited list (Annotate, Blob,
+Cache, Coder, Configure, Deprecate, Error, Exception, FatalError,
+Information, Locale, Option, Render, Resource, TemporaryFile, Transform,
+User, Warning, or X11) that determines the default set of events to log.
+All other events are ignored. By default, no logging is enabled.</p>
+<p>This function should be called prior to InitializeMagick() since it
+provides defaults used by InitializeMagick() while the logging system
+is initialized. The events may be modified later after
+InitializeMagick() has been called using the SetLogEventMask() function.</p>
+<p>The format of SetLogDefaultEventType method is:</p>
+<pre class="literal-block">
+void SetLogDefaultEventType( const char *events );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>events:</dt>
+<dd>Comma-separated list of events to report.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setlogdefaultgenerations">
+<h1><a class="toc-backref" href="#id24">SetLogDefaultGenerations</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void SetLogDefaultGenerations( const unsigned long generations );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>SetLogDefaultGenerations() specifies the maximum number of log files
+to maintain before circulating back to overwrite the first name.</p>
+<p>This function should be called prior to InitializeMagick() since it
+provides defaults used by InitializeMagick() while the logging system
+is initialized.</p>
+<p>The format of SetLogDefaultGenerations method is:</p>
+<pre class="literal-block">
+void SetLogDefaultGenerations( const unsigned long generations );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>generations:</dt>
+<dd>Number of log files to maintain before circulating back to
+the first name.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setlogdefaultlimit">
+<h1><a class="toc-backref" href="#id25">SetLogDefaultLimit</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void SetLogDefaultLimit( const unsigned long limit );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>SetLogDefaultLimit() specifies the maximum number of logging events which
+may occur before creating a new log file.</p>
+<p>This function should be called prior to InitializeMagick() since it
+provides defaults used by InitializeMagick() while the logging system
+is initialized.</p>
+<p>The format of SetLogDefaultLimit method is:</p>
+<pre class="literal-block">
+void SetLogDefaultLimit( const unsigned long limit );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>limit:</dt>
+<dd>Maximum number of logging events before creating a new log file.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setlogdefaultlogmethod">
+<h1><a class="toc-backref" href="#id26">SetLogDefaultLogMethod</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void SetLogDefaultLogMethod( const <a class="reference external" href="../api/types.html#logmethod">LogMethod</a> method );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>SetLogDefaultLogMethod() provides a call-back function to be invoked
+for each log event when the logging method type is MethodOutput.
+This call-back function is supported when MethodOutput is enabled
+in the log output type. MethodOutput is automatically enabled if
+a call-back function is provided, and disabled if the call-back
+function is NULL.</p>
+<p>This function should be called prior to InitializeMagick() since it
+provides defaults used by InitializeMagick() while the logging system
+is initialized.</p>
+<p>The format of SetLogDefaultLogMethod method is:</p>
+<pre class="literal-block">
+void SetLogDefaultLogMethod( const <a class="reference external" href="../api/types.html#logmethod">LogMethod</a> method );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>method:</dt>
+<dd>Call-back function to be invoked for each log event.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setlogdefaultoutputtype">
+<h1><a class="toc-backref" href="#id27">SetLogDefaultOutputType</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void SetLogDefaultOutputType( const <a class="reference external" href="../api/types.html#logoutputtype">LogOutputType</a> output_type );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>SetLogDefaultOutputType() sets the logging output destination.</p>
+<p>This function should be called prior to InitializeMagick() since it
+provides defaults used by InitializeMagick() while the logging system
+is initialized.</p>
+<p>The format of SetLogDefaultOutputType method is:</p>
+<pre class="literal-block">
+void SetLogDefaultOutputType( const <a class="reference external" href="../api/types.html#logoutputtype">LogOutputType</a> output_type );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>output_type:</dt>
+<dd>The logging output destination. One of the enumerated
+values of LogOutputType.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setlogdefaultfilename">
+<h1><a class="toc-backref" href="#id28">SetLogDefaultFileName</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void SetLogDefaultFileName( const char *filename );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>SetLogDefaultFileName() provides the file name, or file path, to be
+written to for each log event. Place a %d in the file name in order to
+support multiple log generations. This setting is only used when the
+log output type uses an output file.</p>
+<p>This function should be called prior to InitializeMagick() since it
+provides defaults used by InitializeMagick() while the logging system
+is initialized.</p>
+<p>The format of SetLogDefaultFileName method is:</p>
+<pre class="literal-block">
+void SetLogDefaultFileName( const char *filename );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>filename:</dt>
+<dd>File name, or file path to write log output to.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setlogeventmask">
+<h1><a class="toc-backref" href="#id29">SetLogEventMask</a></h1>
+<div class="section" id="id15">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long SetLogEventMask( const char *events );
+</pre>
+</div>
+<div class="section" id="id16">
+<h2>Description</h2>
+<p>SetLogEventMask() accepts a comma-delimited list (Annotate, Blob, Cache,
+Coder, Configure, Deprecate, Error, Exception, FatalError, Information,
+Locale, Option, Render, Resource, TemporaryFile, Transform, User,
+Warning, or X11) that determines which events to log. All other events
+are ignored. By default, no logging is enabled. This method returns
+the updated log event mask.</p>
+<p>The format of the SetLogEventMask method is:</p>
+<pre class="literal-block">
+unsigned long SetLogEventMask( const char *events );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>events:</dt>
+<dd>log these events.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setlogformat">
+<h1><a class="toc-backref" href="#id30">SetLogFormat</a></h1>
+<div class="section" id="id17">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void SetLogFormat( const char *format );
+</pre>
+</div>
+<div class="section" id="id18">
+<h2>Description</h2>
+<p>SetLogFormat() sets the format for the "human readable" log record.
+The format specification supports these special format characters:</p>
+<p>%d domain,
+%e event,
+%f function,
+%l line,
+%m module,
+%p process ID,
+%r real CPU time,
+%t wall clock time,
+%u user CPU time,
+%% percent sign,
+n newline,
+r carriage return</p>
+<p>The format of the LogMagickFormat method is:</p>
+<pre class="literal-block">
+void SetLogFormat( const char *format );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>format:</dt>
+<dd>The log record format.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setlogmethod">
+<h1><a class="toc-backref" href="#id31">SetLogMethod</a></h1>
+<div class="section" id="id19">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void SetLogMethod( <a class="reference external" href="../api/types.html#logmethod">LogMethod</a> method );
+</pre>
+</div>
+<div class="section" id="id20">
+<h2>Description</h2>
+<p>SetLogMethod() sets the method to be called when logging.</p>
+<p>The format of the SetLogMethod method is:</p>
+<pre class="literal-block">
+void SetLogMethod( <a class="reference external" href="../api/types.html#logmethod">LogMethod</a> method );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>method:</dt>
+<dd>pointer to a method of type LogMethod that will be called when LogMagickEvent
+is called. Pass a null pointer to remove a registered method.</dd>
+</dl>
+</div>
+</div>
+</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
<title>magick</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="magick">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>memory</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="memory">
<h2 class="subtitle" id="memory-allocation-deallocation-functions">Memory allocation/deallocation functions</h2>
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#magickallocfunctions" id="id15">MagickAllocFunctions</a></li>
<li><a class="reference internal" href="#magickmalloc" id="id16">MagickMalloc</a></li>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>memory</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="memory">
+<h1 class="title">memory</h1>
+<h2 class="subtitle" id="memory-allocation-deallocation-functions">Memory allocation/deallocation functions</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#magickallocfunctions" id="id15">MagickAllocFunctions</a></li>
+<li><a class="reference internal" href="#magickmalloc" id="id16">MagickMalloc</a></li>
+<li><a class="reference internal" href="#magickmallocaligned" id="id17">MagickMallocAligned</a></li>
+<li><a class="reference internal" href="#magickmalloccleared" id="id18">MagickMallocCleared</a></li>
+<li><a class="reference internal" href="#magickclonememory" id="id19">MagickCloneMemory</a></li>
+<li><a class="reference internal" href="#magickrealloc" id="id20">MagickRealloc</a></li>
+<li><a class="reference internal" href="#magickfree" id="id21">MagickFree</a></li>
+<li><a class="reference internal" href="#magickfreealigned" id="id22">MagickFreeAligned</a></li>
+</ul>
+</div>
+<div class="section" id="magickallocfunctions">
+<h1><a class="toc-backref" href="#id15">MagickAllocFunctions</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void MagickAllocFunctions( MagickFreeFunc free_func, MagickMallocFunc malloc_func,
+ MagickReallocFunc realloc_func );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>MagickAllocFunctions() provides a way for the user to supply a preferred
+free(), malloc(), and realloc() functions. Otherwise the default system
+versions are used. If an alternative allocator is to be used, this
+function should be invoked prior to invoking InitializeMagick().</p>
+<p>The format of the MagickAllocFunctions method is:</p>
+<pre class="literal-block">
+void MagickAllocFunctions( MagickFreeFunc free_func, MagickMallocFunc malloc_func,
+ MagickReallocFunc realloc_func );
+</pre>
+<dl class="docutils">
+<dt>free_func:</dt>
+<dd>Function to free memory.</dd>
+<dt>malloc_func:</dt>
+<dd>Function to allocate memory.</dd>
+<dt>realloc_func:</dt>
+<dd>Function to reallocate memory.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickmalloc">
+<h1><a class="toc-backref" href="#id16">MagickMalloc</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void *MagickMalloc( const size_t size );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>MagickMalloc() returns a pointer to a block of memory of at least size
+bytes suitably aligned for any use. NULL is returned if insufficient
+memory is available or the requested size is zero.</p>
+<p>The format of the MagickMalloc method is:</p>
+<pre class="literal-block">
+void *MagickMalloc( const size_t size );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>size:</dt>
+<dd>The size of the memory in bytes to allocate.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickmallocaligned">
+<h1><a class="toc-backref" href="#id17">MagickMallocAligned</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void *MagickMallocAligned( size_t alignment, const size_t size );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>MagickMallocAligned() allocates memory and returns a pointer to a
+block of memory capable of storing at least size bytes with the
+allocation's base address being an even multiple of alignment.
+The size of the buffer allocation is rounded up as required in
+order to consume a block of memory starting at least at the requested
+alignment and ending at at least the requested alignment.</p>
+<p>The requested alignment should be a power of 2 at least as large as
+sizeof a void pointer.</p>
+<p>NULL is returned if insufficient memory is available, the requested
+size is zero, or integer overflow was detected.</p>
+<p>This function is intended for allocating special-purpose buffers
+which benefit from specific alignment.</p>
+<p>The allocated memory should only be freed using MagickFreeAligned()
+and may not be reallocated.</p>
+<p>The format of the MagickMallocAligned method is:</p>
+<pre class="literal-block">
+void *MagickMallocAligned( size_t alignment, const size_t size );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>alignment:</dt>
+<dd>The alignment of the base and size of the allocated
+memory.</dd>
+<dt>size:</dt>
+<dd>The size of the memory in bytes to allocate.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickmalloccleared">
+<h1><a class="toc-backref" href="#id18">MagickMallocCleared</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void *MagickMallocCleared( const size_t size );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>MagickMallocCleared() returns a pointer to a block of memory of at least
+size bytes suitably aligned for any use. NULL is returned if insufficient
+memory is available or the requested size is zero. This version differs
+from MagickMalloc in that the allocated bytes are cleared to zero.</p>
+<p>The format of the MagickMallocCleared method is:</p>
+<pre class="literal-block">
+void *MagickMallocCleared( const size_t size );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>size:</dt>
+<dd>The size of the memory in bytes to allocate.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickclonememory">
+<h1><a class="toc-backref" href="#id19">MagickCloneMemory</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void *MagickCloneMemory( void *destination, const void *source, const size_t size );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>MagickCloneMemory() copies size bytes from memory area source to the
+destination. Copying between objects that overlap will take place
+correctly. It returns destination.</p>
+<p>The format of the MagickCloneMemory method is:</p>
+<pre class="literal-block">
+void *MagickCloneMemory( void *destination, const void *source, const size_t size );
+</pre>
+<dl class="docutils">
+<dt>size:</dt>
+<dd>The size of the memory in bytes to allocate.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickrealloc">
+<h1><a class="toc-backref" href="#id20">MagickRealloc</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void *MagickRealloc( void *memory, const size_t size );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>MagickRealloc() changes the size of the memory and returns a pointer to
+the (possibly moved) block. The contents will be unchanged up to the
+lesser of the new and old sizes. If size is zero, then the memory is
+freed and a NULL value is returned. If the memory allocation fails, then
+the existing memory is freed, and a NULL value is returned.</p>
+<p>Note that the behavior of this function is similar to BSD reallocf(3),
+see <a class="reference external" href="https://www.freebsd.org/cgi/man.cgi?query=reallocf">https://www.freebsd.org/cgi/man.cgi?query=reallocf</a></p>
+<p>The format of the MagickRealloc method is:</p>
+<pre class="literal-block">
+void *MagickRealloc( void *memory, const size_t size );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>memory:</dt>
+<dd>A pointer to a memory allocation.</dd>
+<dt>size:</dt>
+<dd>The new size of the allocated memory.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickfree">
+<h1><a class="toc-backref" href="#id21">MagickFree</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void MagickFree( void *memory );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>MagickFree() frees memory that has already been allocated by
+MagickMalloc() or other other other allocators directly compatible
+with the currently defined memory allocator (which defaults to the
+system malloc()). For convenience, a NULL argument is ignored.</p>
+<p>The format of the MagickFree method is:</p>
+<pre class="literal-block">
+void MagickFree( void *memory );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>memory:</dt>
+<dd>A pointer to a block of memory to free for reuse.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickfreealigned">
+<h1><a class="toc-backref" href="#id22">MagickFreeAligned</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void MagickFreeAligned( void *memory );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>MagickFreeAligned() frees aligned memory that has previously been
+allocated via MagickMallocAligned(). For convenience, a NULL argument is
+ignored.</p>
+<p>This function exists in case the pointer allocated by
+MagickMallocAligned() can not be used directly with MagickFree().</p>
+<p>The format of the MagickFreeAligned method is:</p>
+<pre class="literal-block">
+void MagickFreeAligned( void *memory );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>memory:</dt>
+<dd>A pointer to a block of memory to free for reuse.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="monitor">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>monitor</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="monitor">
+<h1 class="title">monitor</h1>
+<h2 class="subtitle" id="progress-monitor-support">Progress monitor support</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#magickmonitor" id="id5">MagickMonitor</a></li>
+<li><a class="reference internal" href="#magickmonitorformatted" id="id6">MagickMonitorFormatted</a></li>
+<li><a class="reference internal" href="#setmonitorhandler" id="id7">SetMonitorHandler</a></li>
+</ul>
+</div>
+<div class="section" id="magickmonitor">
+<h1><a class="toc-backref" href="#id5">MagickMonitor</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail MagickMonitor( const char *text, const magick_int64_t quantum,
+ const magick_uint64_t span, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>MagickMonitor() calls the monitor handler method with a text string that
+describes the task and a measure of completion. The method returns True
+on success otherwise False if an error is encountered, e.g. if there was a
+user interrupt.</p>
+<p>This function is deprecated. Please use MagickMonitorFormatted() instead.</p>
+<p>The format of the MagickMonitor method is:</p>
+<pre class="literal-block">
+MagickPassFail MagickMonitor( const char *text, const magick_int64_t quantum,
+ const magick_uint64_t span, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>text:</dt>
+<dd>Description of the task being performed.</dd>
+<dt>quantum:</dt>
+<dd>The position relative to the span parameter which represents
+how much progress has been made toward completing a task.</dd>
+<dt>span:</dt>
+<dd>The span relative to completing a task.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickmonitorformatted">
+<h1><a class="toc-backref" href="#id6">MagickMonitorFormatted</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail MagickMonitorFormatted( const magick_int64_t quantum,
+ const magick_uint64_t span,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception, const char *format,
+ ... );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>MagickMonitorFormatted() calls the monitor handler method with a
+printf type format specification and variable argument list. Also
+passed are quantum and span values which provide a measure of
+completion. The method returns MagickPass on success otherwise
+MagickFail if an error is encountered, e.g. if there was a user
+interrupt. If MagickFail is returned, the calling code is expected
+to terminate whatever is being monitored as soon as possible.</p>
+<p>Most callers of this function will use the QuantumTick() macro to
+decide when it should be called. The QuantumTick() macro is designed
+to deliver no more than 100 events in a span (representing 1-100%)
+and to distribute events as evenly as possible over the span so that
+events are reported for every 1% of progress when possible.</p>
+<p>The format of the MagickMonitorFormatted method is:</p>
+<pre class="literal-block">
+MagickPassFail MagickMonitorFormatted( const magick_int64_t quantum,
+ const magick_uint64_t span,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception, const char *format,
+ ... );
+</pre>
+<dl class="docutils">
+<dt>quantum:</dt>
+<dd>The position relative to the span parameter which represents
+how much progress has been made toward completing a task.</dd>
+<dt>span:</dt>
+<dd>The span relative to completing a task.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+<dt>format:</dt>
+<dd>A string describing the format to use to write the remaining
+arguments.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setmonitorhandler">
+<h1><a class="toc-backref" href="#id7">SetMonitorHandler</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#monitorhandler">MonitorHandler</a> SetMonitorHandler( <a class="reference external" href="../api/types.html#monitorhandler">MonitorHandler</a> handler );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>SetMonitorHandler() sets the monitor handler to the specified method
+and returns the previous monitor handler.</p>
+<p>The format of the SetMonitorHandler method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#monitorhandler">MonitorHandler</a> SetMonitorHandler( <a class="reference external" href="../api/types.html#monitorhandler">MonitorHandler</a> handler );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>handler:</dt>
+<dd>Specifies a pointer to a method to handle monitors.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="montage">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>montage</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="montage">
+<h1 class="title">montage</h1>
+<h2 class="subtitle" id="create-a-thumbnail-image-mosaic">Create a thumbnail image mosaic</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#clonemontageinfo" id="id7">CloneMontageInfo</a></li>
+<li><a class="reference internal" href="#destroymontageinfo" id="id8">DestroyMontageInfo</a></li>
+<li><a class="reference internal" href="#getmontageinfo" id="id9">GetMontageInfo</a></li>
+<li><a class="reference internal" href="#montageimages" id="id10">MontageImages</a></li>
+</ul>
+</div>
+<div class="section" id="clonemontageinfo">
+<h1><a class="toc-backref" href="#id7">CloneMontageInfo</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#montageinfo">MontageInfo</a> *CloneMontageInfo( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info,
+ const <a class="reference external" href="../api/types.html#montageinfo">MontageInfo</a> *montage_info );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>CloneMontageInfo() makes a copy of the given montage info structure. If
+NULL is specified, a new image info structure is created initialized to
+default values.</p>
+<p>The format of the CloneMontageInfo method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#montageinfo">MontageInfo</a> *CloneMontageInfo( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info,
+ const <a class="reference external" href="../api/types.html#montageinfo">MontageInfo</a> *montage_info );
+</pre>
+<dl class="docutils">
+<dt>image_info:</dt>
+<dd>The image info.</dd>
+<dt>montage_info:</dt>
+<dd>The montage info.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="destroymontageinfo">
+<h1><a class="toc-backref" href="#id8">DestroyMontageInfo</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DestroyMontageInfo( <a class="reference external" href="../api/types.html#montageinfo">MontageInfo</a> *montage_info );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>DestroyMontageInfo() deallocates memory associated with montage_info.</p>
+<p>The format of the DestroyMontageInfo method is:</p>
+<pre class="literal-block">
+void DestroyMontageInfo( <a class="reference external" href="../api/types.html#montageinfo">MontageInfo</a> *montage_info );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>montage_info:</dt>
+<dd>Specifies a pointer to an MontageInfo structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getmontageinfo">
+<h1><a class="toc-backref" href="#id9">GetMontageInfo</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void GetMontageInfo( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, <a class="reference external" href="../api/types.html#montageinfo">MontageInfo</a> *montage_info );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>GetMontageInfo() initializes montage_info to default values.</p>
+<p>The format of the GetMontageInfo method is:</p>
+<pre class="literal-block">
+void GetMontageInfo( const <a class="reference external" href="../api/types.html#imageinfo">ImageInfo</a> *image_info, <a class="reference external" href="../api/types.html#montageinfo">MontageInfo</a> *montage_info );
+</pre>
+<dl class="docutils">
+<dt>image_info:</dt>
+<dd>a structure of type ImageInfo.</dd>
+<dt>montage_info:</dt>
+<dd>Specifies a pointer to a MontageInfo structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="montageimages">
+<h1><a class="toc-backref" href="#id10">MontageImages</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *MontageImages( const <a class="reference external" href="../api/types.html#image">Image</a> *images, const <a class="reference external" href="../api/types.html#montageinfo">MontageInfo</a> *montage_info,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>Montageimages() is a layout manager that lets you tile one or more
+thumbnails across an image canvas.</p>
+<p>The format of the MontageImages method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *MontageImages( const <a class="reference external" href="../api/types.html#image">Image</a> *images, const <a class="reference external" href="../api/types.html#montageinfo">MontageInfo</a> *montage_info,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>images:</dt>
+<dd>Specifies a pointer to an array of Image structures.</dd>
+<dt>montage_info:</dt>
+<dd>Specifies a pointer to a MontageInfo structure.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="operator">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>operator</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="operator">
+<h1 class="title">operator</h1>
+<h2 class="subtitle" id="methods-to-apply-mathematic-or-boolean-operators-to-pixels">Methods to apply mathematic or boolean operators to pixels.</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#quantumoperatorimage" id="id3">QuantumOperatorImage</a></li>
+<li><a class="reference internal" href="#quantumoperatorregionimage" id="id4">QuantumOperatorRegionImage</a></li>
+</ul>
+</div>
+<div class="section" id="quantumoperatorimage">
+<h1><a class="toc-backref" href="#id3">QuantumOperatorImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail QuantumOperatorImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ QuantumOperator operator, double rvalue );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>QuantumOperatorImage() performs the requested arithmetic,
+bitwise-logical, or value operation on the selected channels of
+the entire image. The AllChannels channel option operates on all
+color channels whereas the GrayChannel channel option treats the
+color channels as a grayscale intensity.</p>
+<p>These operations are on the DirectClass pixels of the image and do not
+update pixel indexes or colormap.</p>
+<p>The format of the QuantumOperatorImage method is:</p>
+<pre class="literal-block">
+MagickPassFail QuantumOperatorImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ QuantumOperator operator, double rvalue );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>channel:</dt>
+<dd>Channel to operate on (RedChannel, CyanChannel,
+GreenChannel, MagentaChannel, BlueChannel, YellowChannel,
+OpacityChannel, BlackChannel, MatteChannel, AllChannels,
+GrayChannel). The AllChannels type only updates color
+channels. The GrayChannel type treats the color channels
+as if they represent an intensity.</dd>
+<dt>quantum_operator:</dt>
+<dd>Operator to use (AddQuantumOp, AndQuantumOp,
+AssignQuantumOp, DepthQuantumOp, DivideQuantumOp, GammaQuantumOp,
+LShiftQuantumOp, MultiplyQuantumOp, NegateQuantumOp,
+NoiseGaussianQuantumOp, NoiseImpulseQuantumOp,
+NoiseLaplacianQuantumOp, NoiseMultiplicativeQuantumOp,
+NoisePoissonQuantumOp, NoiseRandomQuantumOp, NoiseUniformQuantumOp,
+OrQuantumOp, RShiftQuantumOp, SubtractQuantumOp,
+ThresholdBlackQuantumOp, ThresholdQuantumOp, ThresholdWhiteQuantumOp,
+ThresholdBlackNegateQuantumOp, ThresholdWhiteNegateQuantumOp,
+XorQuantumOp).</dd>
+<dt>rvalue:</dt>
+<dd>Operator argument.</dd>
+<dt>exception:</dt>
+<dd>Updated with error description.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="quantumoperatorregionimage">
+<h1><a class="toc-backref" href="#id4">QuantumOperatorRegionImage</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail QuantumOperatorRegionImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, long x, long y,
+ unsigned long columns, unsigned long rows,
+ <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ QuantumOperator quantum_operator, double rvalue );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>QuantumOperatorRegionImage() performs the requested arithmetic,
+bitwise-logical, or value operation on the selected channels of
+the image over the specified region. The AllChannels channel option
+operates on all color channels whereas the GrayChannel channel option
+treats the color channels as a grayscale intensity.</p>
+<p>These operations are on the DirectClass pixels of the image and do not
+update pixel indexes or colormap.</p>
+<p>The format of the QuantumOperatorRegionImage method is:</p>
+<pre class="literal-block">
+MagickPassFail QuantumOperatorRegionImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, long x, long y,
+ unsigned long columns, unsigned long rows,
+ <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ QuantumOperator quantum_operator, double rvalue );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>channel:</dt>
+<dd>Channel to operate on (RedChannel, CyanChannel,
+GreenChannel, MagentaChannel, BlueChannel, YellowChannel,
+OpacityChannel, BlackChannel, MatteChannel, AllChannels,
+GrayChannel). The AllChannels type only updates color
+channels. The GrayChannel type treats the color channels
+as if they represent an intensity.</dd>
+<dt>x:</dt>
+<dd>Ordinate of left row of region.</dd>
+<dt>y:</dt>
+<dd>Orginate of top column of region.</dd>
+<dt>columns:</dt>
+<dd>Width of region.</dd>
+<dt>rows:</dt>
+<dd>Height of region.</dd>
+<dt>quantum_operator:</dt>
+<dd>Operator to use (AddQuantumOp,AndQuantumOp,
+AssignQuantumOp, DepthQuantumOp, DivideQuantumOp, GammaQuantumOp,
+LShiftQuantumOp, MultiplyQuantumOp, NegateQuantumOp,
+NoiseGaussianQuantumOp, NoiseImpulseQuantumOp,
+NoiseLaplacianQuantumOp, NoiseMultiplicativeQuantumOp,
+NoisePoissonQuantumOp, NoiseRandomQuantumOp, NoiseUniformQuantumOp,
+OrQuantumOp, RShiftQuantumOp, SubtractQuantumOp,
+ThresholdBlackQuantumOp, ThresholdQuantumOp, ThresholdWhiteQuantumOp,
+XorQuantumOp).</dd>
+<dt>rvalue:</dt>
+<dd>Operator argument.</dd>
+<dt>exception:</dt>
+<dd>Updated with error description.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>paint</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="paint">
<h2 class="subtitle" id="methods-to-fill-image-pixel-regions">Methods to fill image pixel regions</h2>
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#colorfloodfillimage" id="id7">ColorFloodfillImage</a></li>
<li><a class="reference internal" href="#mattefloodfillimage" id="id8">MatteFloodfillImage</a></li>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>paint</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="paint">
+<h1 class="title">paint</h1>
+<h2 class="subtitle" id="methods-to-fill-image-pixel-regions">Methods to fill image pixel regions</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#colorfloodfillimage" id="id7">ColorFloodfillImage</a></li>
+<li><a class="reference internal" href="#mattefloodfillimage" id="id8">MatteFloodfillImage</a></li>
+<li><a class="reference internal" href="#opaqueimage" id="id9">OpaqueImage</a></li>
+<li><a class="reference internal" href="#transparentimage" id="id10">TransparentImage</a></li>
+</ul>
+</div>
+<div class="section" id="colorfloodfillimage">
+<h1><a class="toc-backref" href="#id7">ColorFloodfillImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int ColorFloodfillImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#drawinfo">DrawInfo</a> *draw_info,
+ const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> target, const long x_offset,
+ const long y_offset, const <a class="reference external" href="../api/types.html#paintmethod">PaintMethod</a> method );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>ColorFloodfill() changes the color value of any pixel that matches
+target and is an immediate neighbor. If the method FillToBorderMethod is
+specified, the color value is changed for any neighbor pixel that does not
+match the bordercolor member of image.</p>
+<p>By default target must match a particular pixel color exactly.
+However, in many cases two colors may differ by a small amount. The
+fuzz member of image defines how much tolerance is acceptable to
+consider two colors as the same. For example, set fuzz to 10 and the
+color red at intensities of 100 and 102 respectively are now
+interpreted as the same color for the purposes of the floodfill.</p>
+<p>The format of the ColorFloodfillImage method is:</p>
+<pre class="literal-block">
+unsigned int ColorFloodfillImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#drawinfo">DrawInfo</a> *draw_info,
+ const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> target, const long x_offset,
+ const long y_offset, const <a class="reference external" href="../api/types.html#paintmethod">PaintMethod</a> method );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>draw_info:</dt>
+<dd>The draw info.</dd>
+<dt>target:</dt>
+<dd>The RGB value of the target color.</dd>
+<dt>x,y:</dt>
+<dd>The starting location of the operation.</dd>
+<dt>method:</dt>
+<dd>Choose either FloodfillMethod or FillToBorderMethod.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="mattefloodfillimage">
+<h1><a class="toc-backref" href="#id8">MatteFloodfillImage</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MatteFloodfillImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> target,
+ const unsigned int opacity, const long x_offset,
+ const long y_offset, const <a class="reference external" href="../api/types.html#paintmethod">PaintMethod</a> method );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>MatteFloodfill() changes the transparency value of any pixel that matches
+target and is an immediate neighbor. If the method FillToBorderMethod
+is specified, the transparency value is changed for any neighbor pixel
+that does not match the bordercolor member of image.</p>
+<p>By default target must match a particular pixel transparency exactly.
+However, in many cases two transparency values may differ by a
+small amount. The fuzz member of image defines how much tolerance is
+acceptable to consider two transparency values as the same. For example,
+set fuzz to 10 and the opacity values of 100 and 102 respectively are
+now interpreted as the same value for the purposes of the floodfill.</p>
+<p>The format of the MatteFloodfillImage method is:</p>
+<pre class="literal-block">
+unsigned int MatteFloodfillImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> target,
+ const unsigned int opacity, const long x_offset,
+ const long y_offset, const <a class="reference external" href="../api/types.html#paintmethod">PaintMethod</a> method );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>target:</dt>
+<dd>The RGB value of the target color.</dd>
+<dt>opacity:</dt>
+<dd>The level of transparency: 0 is fully opaque and MaxRGB is
+fully transparent.</dd>
+<dt>x,y:</dt>
+<dd>The starting location of the operation.</dd>
+<dt>method:</dt>
+<dd>Choose either FloodfillMethod or FillToBorderMethod.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="opaqueimage">
+<h1><a class="toc-backref" href="#id9">OpaqueImage</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int OpaqueImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> target,
+ const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> fill );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>OpaqueImage() changes any pixel that matches color with the color
+defined by fill.</p>
+<p>By default color must match a particular pixel color exactly. However,
+in many cases two colors may differ by a small amount. Fuzz defines
+how much tolerance is acceptable to consider two colors as the same.
+For example, set fuzz to 10 and the color red at intensities of 100 and
+102 respectively are now interpreted as the same color.</p>
+<p>The format of the OpaqueImage method is:</p>
+<pre class="literal-block">
+unsigned int OpaqueImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> target,
+ const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> fill );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>target:</dt>
+<dd>The RGB value of the target color.</dd>
+<dt>fill:</dt>
+<dd>The replacement color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="transparentimage">
+<h1><a class="toc-backref" href="#id10">TransparentImage</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int TransparentImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> target,
+ const unsigned int opacity );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>TransparentImage() changes the opacity value associated with any pixel
+that matches color to the value defined by opacity.</p>
+<p>By default color must match a particular pixel color exactly. However,
+in many cases two colors may differ by a small amount. Fuzz defines
+how much tolerance is acceptable to consider two colors as the same.
+For example, set fuzz to 10 and the color red at intensities of 100 and
+102 respectively are now interpreted as the same color.</p>
+<p>The format of the TransparentImage method is:</p>
+<pre class="literal-block">
+unsigned int TransparentImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> target,
+ const unsigned int opacity );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>target:</dt>
+<dd>The RGB value of the target color.</dd>
+<dt>opacity:</dt>
+<dd>The replacement opacity value.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>pixel_cache</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="pixel-cache">
<h2 class="subtitle" id="image-pixel-cache-working-pixels">Image pixel cache (working pixels).</h2>
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#accesscacheviewpixels" id="id63">AccessCacheViewPixels</a></li>
<li><a class="reference internal" href="#accessimmutableindexes" id="id64">AccessImmutableIndexes</a></li>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="pixel-iterator">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>pixel_iterator</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="pixel-iterator">
+<h1 class="title">pixel_iterator</h1>
+<h2 class="subtitle" id="pixel-iterator-pattern-support-functions">Pixel iterator pattern support functions</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#initializepixeliteratoroptions" id="id17">InitializePixelIteratorOptions</a></li>
+<li><a class="reference internal" href="#pixeliteratemonoread" id="id18">PixelIterateMonoRead</a></li>
+<li><a class="reference internal" href="#pixeliteratemonoset" id="id19">PixelIterateMonoSet</a></li>
+<li><a class="reference internal" href="#pixeliteratemonomodify" id="id20">PixelIterateMonoModify</a></li>
+<li><a class="reference internal" href="#pixeliteratedualread" id="id21">PixelIterateDualRead</a></li>
+<li><a class="reference internal" href="#pixeliteratedualmodify" id="id22">PixelIterateDualModify</a></li>
+<li><a class="reference internal" href="#pixeliteratedualnew" id="id23">PixelIterateDualNew</a></li>
+<li><a class="reference internal" href="#pixeliteratetriplemodify" id="id24">PixelIterateTripleModify</a></li>
+<li><a class="reference internal" href="#pixeliteratetriplenew" id="id25">PixelIterateTripleNew</a></li>
+</ul>
+</div>
+<div class="section" id="initializepixeliteratoroptions">
+<h1><a class="toc-backref" href="#id17">InitializePixelIteratorOptions</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void InitializePixelIteratorOptions( PixelIteratorOptions *options,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>InitializePixelIteratorOptions() assigns default options to a user-provided
+PixelIteratorOptions structure. This function should always be used
+to initialize the PixelIteratorOptions structure prior to making any
+changes to it.</p>
+<p>The format of the InitializePixelIteratorOptions method is:</p>
+<pre class="literal-block">
+void InitializePixelIteratorOptions( PixelIteratorOptions *options,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>options:</dt>
+<dd>pointer to PixelIteratorOptions structure to initialize.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixeliteratemonoread">
+<h1><a class="toc-backref" href="#id18">PixelIterateMonoRead</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail PixelIterateMonoRead( PixelIteratorMonoReadCallback call_back,
+ const PixelIteratorOptions *options,
+ const char *description, void *mutable_data,
+ const void *immutable_data, const long x, const long y,
+ const unsigned long columns, const unsigned long rows,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>PixelIterateMonoRead() iterates through a region of an image and invokes a
+user-provided callback function (of type PixelRowIteratorMonoReadCallback)
+for a row of pixels. This is useful to support simple operations such as
+statistics computation.</p>
+<p>The format of the PixelIterateMonoRead method is:</p>
+<pre class="literal-block">
+MagickPassFail PixelIterateMonoRead( PixelIteratorMonoReadCallback call_back,
+ const PixelIteratorOptions *options,
+ const char *description, void *mutable_data,
+ const void *immutable_data, const long x, const long y,
+ const unsigned long columns, const unsigned long rows,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>call_back:</dt>
+<dd>A user-provided C callback function which is passed the
+address of pixels from the image.</dd>
+<dt>options:</dt>
+<dd>Pixel iterator execution options (may be NULL).</dd>
+<dt>description:</dt>
+<dd>textual description of operation being performed.</dd>
+<dt>mutable_data:</dt>
+<dd>User-provided mutable context data.</dd>
+<dt>immutable_data:</dt>
+<dd>User-provided immutable context data.</dd>
+<dt>x:</dt>
+<dd>The horizontal ordinate of the top left corner of the region.</dd>
+<dt>y:</dt>
+<dd>The vertical ordinate of the top left corner of the region.</dd>
+<dt>columns:</dt>
+<dd>Width of pixel region</dd>
+<dt>rows:</dt>
+<dd>Height of pixel region</dd>
+<dt>image:</dt>
+<dd>The address of the Image.</dd>
+<dt>exception:</dt>
+<dd>If an error is reported, this argument is updated with the reason.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixeliteratemonoset">
+<h1><a class="toc-backref" href="#id19">PixelIterateMonoSet</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail PixelIterateMonoSet( PixelIteratorMonoModifyback call_back,
+ const PixelIteratorOptions *options,
+ const char *description, void *mutable_data,
+ const void *immutable_data, const long x, const long y,
+ const unsigned long columns, const unsigned long rows,
+ <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>PixelIterateMonoSet() iterates through a region of an image and invokes
+a user-provided callback function (of type PixelIteratorMonoModifyCallback)
+to initialize a region of pixels from scratch. The difference from
+PixelIterateMonoModify() is that the output pixels are not initialized
+from the underlying store so it is more efficient when outputting a new
+image or when the existing pixels are intentionally discarded. This is
+useful for operations such as setting the pixel color.</p>
+<p>The format of the PixelIterateMonoSet method is:</p>
+<pre class="literal-block">
+MagickPassFail PixelIterateMonoSet( PixelIteratorMonoModifyback call_back,
+ const PixelIteratorOptions *options,
+ const char *description, void *mutable_data,
+ const void *immutable_data, const long x, const long y,
+ const unsigned long columns, const unsigned long rows,
+ <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>call_back:</dt>
+<dd>A user-provided C callback function which is passed the
+address of pixels to be initialized in the image.</dd>
+<dt>options:</dt>
+<dd>Pixel iterator execution options (may be NULL).</dd>
+<dt>description:</dt>
+<dd>textual description of operation being performed.</dd>
+<dt>mutable_data:</dt>
+<dd>User-provided mutable context data.</dd>
+<dt>immutable_data:</dt>
+<dd>User-provided immutable context data.</dd>
+<dt>x:</dt>
+<dd>The horizontal ordinate of the top left corner of the region.</dd>
+<dt>y:</dt>
+<dd>The vertical ordinate of the top left corner of the region.</dd>
+<dt>columns:</dt>
+<dd>Width of pixel region</dd>
+<dt>rows:</dt>
+<dd>Height of pixel region</dd>
+<dt>image:</dt>
+<dd>The address of the Image.</dd>
+<dt>exception:</dt>
+<dd>If an error is reported, this argument is updated with the reason.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixeliteratemonomodify">
+<h1><a class="toc-backref" href="#id20">PixelIterateMonoModify</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail PixelIterateMonoModify( PixelIteratorMonoModifyCallback call_back,
+ const PixelIteratorOptions *options,
+ const char *description, void *mutable_data,
+ const void *immutable_data, const long x,
+ const long y, const unsigned long columns,
+ const unsigned long rows, <a class="reference external" href="../api/types.html#image">Image</a> *image,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>PixelIterateMonoModify() iterates through a region of an image and invokes
+a user-provided callback function (of type PixelIteratorMonoModifyCallback)
+to modify a region of pixels. This is useful to support simple operations
+such as level shifting, colorspace translation, or thresholding.</p>
+<p>The format of the PixelIterateMonoModify method is:</p>
+<pre class="literal-block">
+MagickPassFail PixelIterateMonoModify( PixelIteratorMonoModifyCallback call_back,
+ const PixelIteratorOptions *options,
+ const char *description, void *mutable_data,
+ const void *immutable_data, const long x,
+ const long y, const unsigned long columns,
+ const unsigned long rows, <a class="reference external" href="../api/types.html#image">Image</a> *image,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>call_back:</dt>
+<dd>A user-provided C callback function which is passed the
+address of pixels from the image.</dd>
+<dt>options:</dt>
+<dd>Pixel iterator execution options (may be NULL).</dd>
+<dt>description:</dt>
+<dd>textual description of operation being performed.</dd>
+<dt>mutable_data:</dt>
+<dd>User-provided mutable context data.</dd>
+<dt>immutable_data:</dt>
+<dd>User-provided immutable context data.</dd>
+<dt>x:</dt>
+<dd>The horizontal ordinate of the top left corner of the region.</dd>
+<dt>y:</dt>
+<dd>The vertical ordinate of the top left corner of the region.</dd>
+<dt>columns:</dt>
+<dd>Width of pixel region</dd>
+<dt>rows:</dt>
+<dd>Height of pixel region</dd>
+<dt>image:</dt>
+<dd>The address of the Image.</dd>
+<dt>exception:</dt>
+<dd>If an error is reported, this argument is updated with the reason.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixeliteratedualread">
+<h1><a class="toc-backref" href="#id21">PixelIterateDualRead</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail PixelIterateDualRead( PixelIteratorDualReadCallback call_back,
+ const PixelIteratorOptions *options,
+ const char *description, void *mutable_data,
+ const void *immutable_data, const unsigned long columns,
+ const unsigned long rows, const <a class="reference external" href="../api/types.html#image">Image</a> *first_image,
+ const long first_x, const long first_y,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *second_image, const long second_x,
+ const long second_y, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception ); ;
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>PixelIterateDualRead() iterates through pixel regions of two images and
+invokes a user-provided callback function (of type
+PixelIteratorDualReadCallback) for each row of pixels. This is useful to
+support operations such as image comparison.</p>
+<p>The format of the PixelIterateDualRead method is:</p>
+<pre class="literal-block">
+MagickPassFail PixelIterateDualRead( PixelIteratorDualReadCallback call_back,
+ const PixelIteratorOptions *options,
+ const char *description, void *mutable_data,
+ const void *immutable_data, const unsigned long columns,
+ const unsigned long rows, const <a class="reference external" href="../api/types.html#image">Image</a> *first_image,
+ const long first_x, const long first_y,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *second_image, const long second_x,
+ const long second_y, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception ); ;
+</pre>
+<dl class="docutils">
+<dt>call_back:</dt>
+<dd>A user-provided C callback function which is passed the
+address of pixels from each image.</dd>
+<dt>options:</dt>
+<dd>Pixel iterator execution options (may be NULL).</dd>
+<dt>description:</dt>
+<dd>textual description of operation being performed.</dd>
+<dt>mutable_data:</dt>
+<dd>User-provided mutable context data.</dd>
+<dt>immutable_data:</dt>
+<dd>User-provided immutable context data.</dd>
+<dt>columns:</dt>
+<dd>Width of pixel region</dd>
+<dt>rows:</dt>
+<dd>Height of pixel region</dd>
+<dt>first_image:</dt>
+<dd>The address of the first Image.</dd>
+<dt>first_x:</dt>
+<dd>The horizontal ordinate of the top left corner of the first region.</dd>
+<dt>first_y:</dt>
+<dd>The vertical ordinate of the top left corner of the first region.</dd>
+<dt>second_image:</dt>
+<dd>The address of the second Image.</dd>
+<dt>second_x:</dt>
+<dd>The horizontal ordinate of the top left corner of the second region.</dd>
+<dt>second_y:</dt>
+<dd>The vertical ordinate of the top left corner of the second region.</dd>
+<dt>exception:</dt>
+<dd>If an error is reported, this argument is updated with the reason.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixeliteratedualmodify">
+<h1><a class="toc-backref" href="#id22">PixelIterateDualModify</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail PixelIterateDualModify( PixelIteratorDualModifyCallback call_back,
+ const PixelIteratorOptions *options,
+ const char *description, void *mutable_data,
+ const void *immutable_data,
+ const unsigned long columns, const unsigned long rows,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *source_image, const long source_x,
+ const long source_y, <a class="reference external" href="../api/types.html#image">Image</a> *update_image,
+ const long update_x, const long update_y,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>PixelIterateDualModify() iterates through pixel regions of two images and
+invokes a user-provided callback function (of type
+PixelIteratorDualModifyCallback) for each row of pixels. This is useful to
+support operations such as composition.</p>
+<p>The format of the PixelIterateDualModify method is:</p>
+<pre class="literal-block">
+MagickPassFail PixelIterateDualModify( PixelIteratorDualModifyCallback call_back,
+ const PixelIteratorOptions *options,
+ const char *description, void *mutable_data,
+ const void *immutable_data,
+ const unsigned long columns, const unsigned long rows,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *source_image, const long source_x,
+ const long source_y, <a class="reference external" href="../api/types.html#image">Image</a> *update_image,
+ const long update_x, const long update_y,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>call_back:</dt>
+<dd>A user-provided C callback function which reads from
+a region of source pixels and updates a region of destination pixels.</dd>
+<dt>options:</dt>
+<dd>Pixel iterator execution options (may be NULL).</dd>
+<dt>description:</dt>
+<dd>textual description of operation being performed.</dd>
+<dt>mutable_data:</dt>
+<dd>User-provided mutable context data.</dd>
+<dt>immutable_data:</dt>
+<dd>User-provided immutable context data.</dd>
+<dt>columns:</dt>
+<dd>Width of pixel region</dd>
+<dt>rows:</dt>
+<dd>Height of pixel region</dd>
+<dt>source_image:</dt>
+<dd>The address of the constant source Image.</dd>
+<dt>source_x:</dt>
+<dd>The horizontal ordinate of the top left corner of the source region.</dd>
+<dt>source_y:</dt>
+<dd>The vertical ordinate of the top left corner of the source region.</dd>
+<dt>update_image:</dt>
+<dd>The address of the update Image.</dd>
+<dt>update_x:</dt>
+<dd>The horizontal ordinate of the top left corner of the update region.</dd>
+<dt>update_y:</dt>
+<dd>The vertical ordinate of the top left corner of the update region.</dd>
+<dt>exception:</dt>
+<dd>If an error is reported, this argument is updated with the reason.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixeliteratedualnew">
+<h1><a class="toc-backref" href="#id23">PixelIterateDualNew</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail PixelIterateDualNew( PixelIteratorDualNewCallback call_back,
+ const PixelIteratorOptions *options,
+ const char *description, void *mutable_data,
+ const void *immutable_data, const unsigned long columns,
+ const unsigned long rows, const <a class="reference external" href="../api/types.html#image">Image</a> *source_image,
+ const long source_x, const long source_y,
+ <a class="reference external" href="../api/types.html#image">Image</a> *new_image, const long new_x,
+ const long new_y, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>PixelIterateDualNew() iterates through pixel regions of two images and
+invokes a user-provided callback function (of type
+PixelIteratorDualNewCallback) for each row of pixels. This is used if a
+new output image is created based on an input image. The difference from
+PixelIterateDualModify() is that the output pixels are not initialized so
+it is more efficient when outputting a new image.</p>
+<p>The format of the PixelIterateDualNew method is:</p>
+<pre class="literal-block">
+MagickPassFail PixelIterateDualNew( PixelIteratorDualNewCallback call_back,
+ const PixelIteratorOptions *options,
+ const char *description, void *mutable_data,
+ const void *immutable_data, const unsigned long columns,
+ const unsigned long rows, const <a class="reference external" href="../api/types.html#image">Image</a> *source_image,
+ const long source_x, const long source_y,
+ <a class="reference external" href="../api/types.html#image">Image</a> *new_image, const long new_x,
+ const long new_y, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>call_back:</dt>
+<dd>A user-provided C callback function which reads from
+a region of source pixels and initializes a region of destination pixels.</dd>
+<dt>options:</dt>
+<dd>Pixel iterator execution options (may be NULL).</dd>
+<dt>description:</dt>
+<dd>textual description of operation being performed.</dd>
+<dt>mutable_data:</dt>
+<dd>User-provided mutable context data.</dd>
+<dt>immutable_data:</dt>
+<dd>User-provided immutable context data.</dd>
+<dt>columns:</dt>
+<dd>Width of pixel region</dd>
+<dt>rows:</dt>
+<dd>Height of pixel region</dd>
+<dt>source_image:</dt>
+<dd>The address of the constant source Image.</dd>
+<dt>source_x:</dt>
+<dd>The horizontal ordinate of the top left corner of the source region.</dd>
+<dt>source_y:</dt>
+<dd>The vertical ordinate of the top left corner of the source region.</dd>
+<dt>new_image:</dt>
+<dd>The address of the new Image.</dd>
+<dt>new_x:</dt>
+<dd>The horizontal ordinate of the top left corner of the new region.</dd>
+<dt>new_y:</dt>
+<dd>The vertical ordinate of the top left corner of the new region.</dd>
+<dt>exception:</dt>
+<dd>If an error is reported, this argument is updated with the reason.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixeliteratetriplemodify">
+<h1><a class="toc-backref" href="#id24">PixelIterateTripleModify</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail PixelIterateTripleModify( PixelIteratorTripleModifyCallback call_back,
+ const PixelIteratorOptions *options,
+ const char *description, void *mutable_data,
+ const void *immutable_data,
+ const unsigned long columns, const unsigned long rows,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *source1_image,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *source2_image, const long source_x,
+ const long source_y, <a class="reference external" href="../api/types.html#image">Image</a> *update_image,
+ const long update_x, const long update_y,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>PixelIterateTripleModify() iterates through pixel regions of three images
+and invokes a user-provided callback function (of type
+PixelIteratorTripleModifyCallback) for each row of pixels. The first two
+images are read-only, while the third image is read-write for update.
+Access of the first two images is done lock-step using the same coordinates.
+This is useful to support operations such as image differencing.</p>
+<p>The format of the PixelIterateTripleModify method is:</p>
+<pre class="literal-block">
+MagickPassFail PixelIterateTripleModify( PixelIteratorTripleModifyCallback call_back,
+ const PixelIteratorOptions *options,
+ const char *description, void *mutable_data,
+ const void *immutable_data,
+ const unsigned long columns, const unsigned long rows,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *source1_image,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *source2_image, const long source_x,
+ const long source_y, <a class="reference external" href="../api/types.html#image">Image</a> *update_image,
+ const long update_x, const long update_y,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>call_back:</dt>
+<dd>A user-provided C callback function which reads from
+a region of source pixels and updates a region of destination pixels.</dd>
+<dt>options:</dt>
+<dd>Pixel iterator execution options (may be NULL).</dd>
+<dt>description:</dt>
+<dd>textual description of operation being performed.</dd>
+<dt>mutable_data:</dt>
+<dd>User-provided mutable context data.</dd>
+<dt>immutable_data:</dt>
+<dd>User-provided immutable context data.</dd>
+<dt>columns:</dt>
+<dd>Width of pixel region</dd>
+<dt>rows:</dt>
+<dd>Height of pixel region</dd>
+<dt>source1_image:</dt>
+<dd>The address of the constant source 1 Image.</dd>
+<dt>source2_image:</dt>
+<dd>The address of the constant source 2 Image.</dd>
+<dt>source_x:</dt>
+<dd>The horizontal ordinate of the top left corner of the source regions.</dd>
+<dt>source_y:</dt>
+<dd>The vertical ordinate of the top left corner of the source regions.</dd>
+<dt>update_image:</dt>
+<dd>The address of the update Image.</dd>
+<dt>update_x:</dt>
+<dd>The horizontal ordinate of the top left corner of the update region.</dd>
+<dt>update_y:</dt>
+<dd>The vertical ordinate of the top left corner of the update region.</dd>
+<dt>exception:</dt>
+<dd>If an error is reported, this argument is updated with the reason.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixeliteratetriplenew">
+<h1><a class="toc-backref" href="#id25">PixelIterateTripleNew</a></h1>
+<div class="section" id="id15">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail PixelIterateTripleNew( PixelIteratorTripleNewCallback call_back,
+ const PixelIteratorOptions *options,
+ const char *description, void *mutable_data,
+ const void *immutable_data,
+ const unsigned long columns, const unsigned long rows,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *source1_image,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *source2_image, const long source_x,
+ const long source_y, <a class="reference external" href="../api/types.html#image">Image</a> *new_image,
+ const long new_x, const long new_y,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id16">
+<h2>Description</h2>
+<p>PixelIterateTripleNew() iterates through pixel regions of three images
+and invokes a user-provided callback function (of type
+PixelIteratorTripleNewCallback) for each row of pixels. The first two
+images are read-only, while the third image is read-write for update.
+Access of the first two images is done lock-step using the same coordinates.
+This is used if a new output image is created based on two input images.
+The difference from PixelIterateTripleModify() is that the output pixels
+are not initialized so it is more efficient when outputting a new image.</p>
+<p>The format of the PixelIterateTripleNew method is:</p>
+<pre class="literal-block">
+MagickPassFail PixelIterateTripleNew( PixelIteratorTripleNewCallback call_back,
+ const PixelIteratorOptions *options,
+ const char *description, void *mutable_data,
+ const void *immutable_data,
+ const unsigned long columns, const unsigned long rows,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *source1_image,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *source2_image, const long source_x,
+ const long source_y, <a class="reference external" href="../api/types.html#image">Image</a> *new_image,
+ const long new_x, const long new_y,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>call_back:</dt>
+<dd>A user-provided C callback function which reads from
+a region of source pixels and initializes a region of destination pixels.</dd>
+<dt>options:</dt>
+<dd>Pixel iterator execution options (may be NULL).</dd>
+<dt>description:</dt>
+<dd>textual description of operation being performed.</dd>
+<dt>mutable_data:</dt>
+<dd>User-provided mutable context data.</dd>
+<dt>immutable_data:</dt>
+<dd>User-provided immutable context data.</dd>
+<dt>columns:</dt>
+<dd>Width of pixel region</dd>
+<dt>rows:</dt>
+<dd>Height of pixel region</dd>
+<dt>source1_image:</dt>
+<dd>The address of the constant source 1 Image.</dd>
+<dt>source2_image:</dt>
+<dd>The address of the constant source 2 Image.</dd>
+<dt>source_x:</dt>
+<dd>The horizontal ordinate of the top left corner of the source regions.</dd>
+<dt>source_y:</dt>
+<dd>The vertical ordinate of the top left corner of the source regions.</dd>
+<dt>new_image:</dt>
+<dd>The address of the new Image.</dd>
+<dt>new_x:</dt>
+<dd>The horizontal ordinate of the top left corner of the new region.</dd>
+<dt>new_y:</dt>
+<dd>The vertical ordinate of the top left corner of the new region.</dd>
+<dt>exception:</dt>
+<dd>If an error is reported, this argument is updated with the reason.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="plasma">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>plasma</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="plasma">
+<h1 class="title">plasma</h1>
+<h2 class="subtitle" id="create-a-plasma-fractal-image">Create a Plasma fractal image.</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#plasmaimage" id="id1">PlasmaImage</a></li>
+</ul>
+</div>
+<div class="section" id="plasmaimage">
+<h1><a class="toc-backref" href="#id1">PlasmaImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail PlasmaImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#segmentinfo">SegmentInfo</a> *segment,
+ unsigned long attenuate, unsigned long depth );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>PlasmaImage() initializes an image with plasma fractal values. The image
+must be initialized with a base color and the random number generator
+seeded before this method is called.</p>
+<p>The format of the PlasmaImage method is:</p>
+<pre class="literal-block">
+MagickPassFail PlasmaImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#segmentinfo">SegmentInfo</a> *segment,
+ unsigned long attenuate, unsigned long depth );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>segment:</dt>
+<dd>Define the region to apply plasma fractals values.</dd>
+<dt>attenuate:</dt>
+<dd>Define the plasma attenuation factor.</dd>
+<dt>depth:</dt>
+<dd>Limit the plasma recursion depth.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="profile">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>profile</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="profile">
+<h1 class="title">profile</h1>
+<h2 class="subtitle" id="manipulate-embedded-profiles">Manipulate embedded profiles</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#allocateimageprofileiterator" id="id15">AllocateImageProfileIterator</a></li>
+<li><a class="reference internal" href="#appendimageprofile" id="id16">AppendImageProfile</a></li>
+<li><a class="reference internal" href="#deallocateimageprofileiterator" id="id17">DeallocateImageProfileIterator</a></li>
+<li><a class="reference internal" href="#deleteimageprofile" id="id18">DeleteImageProfile</a></li>
+<li><a class="reference internal" href="#getimageprofile" id="id19">GetImageProfile</a></li>
+<li><a class="reference internal" href="#nextimageprofile" id="id20">NextImageProfile</a></li>
+<li><a class="reference internal" href="#profileimage" id="id21">ProfileImage</a></li>
+<li><a class="reference internal" href="#setimageprofile" id="id22">SetImageProfile</a></li>
+</ul>
+</div>
+<div class="section" id="allocateimageprofileiterator">
+<h1><a class="toc-backref" href="#id15">AllocateImageProfileIterator</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+ImageProfileIterator AllocateImageProfileIterator( const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>AllocateImageProfileIterator allocates an iterator to traverse the
+image profile list. It is an error (i.e. will surely crash) to invoke
+DeleteImageProfile() on the profile that the iterator is currently
+referencing. However, it is safe to delete a profile that the iterator
+is not currently referencing. Inserting additional profiles does not
+invalidate the current iterator.</p>
+<p>The format of the AllocateImageProfileIterator method is:</p>
+<pre class="literal-block">
+ImageProfileIterator AllocateImageProfileIterator( const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="appendimageprofile">
+<h1><a class="toc-backref" href="#id16">AppendImageProfile</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MaickPassFail AppendImageProfile( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *name,
+ const unsigned char *profile_chunk,
+ const size_t chunk_length );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>AppendImageProfile adds a named profile to the image. If a profile with the
+same name already exists, then the new profile data is appended to the
+existing profile. If a null profile address is supplied, then an existing
+profile is removed. The profile is copied into the image. Note that this
+function does not execute CMS color profiles. Any existing CMS color
+profile is simply added/updated. Use the ProfileImage() function in order
+to execute a CMS color profile.</p>
+<p>The format of the AppendImageProfile method is:</p>
+<pre class="literal-block">
+MaickPassFail AppendImageProfile( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *name,
+ const unsigned char *profile_chunk,
+ const size_t chunk_length );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>name:</dt>
+<dd>Profile name. Valid names are "8BIM", "ICM", "IPTC", XMP, or any
+unique text string.</dd>
+<dt>profile_chunk:</dt>
+<dd>Address of profile chunk to add or append. Pass zero
+to remove an existing profile.</dd>
+<dt>length:</dt>
+<dd>The length of the profile chunk to add or append.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="deallocateimageprofileiterator">
+<h1><a class="toc-backref" href="#id17">DeallocateImageProfileIterator</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DeallocateImageProfileIterator( ImageProfileIterator profile_iterator );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>DeallocateImageProfileIterator deallocates an image profile iterator.</p>
+<p>The format of the DeallocateImageProfileIterator method is:</p>
+<pre class="literal-block">
+void DeallocateImageProfileIterator( ImageProfileIterator profile_iterator );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>profile_iterator:</dt>
+<dd>Profile iterator to deallocate.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="deleteimageprofile">
+<h1><a class="toc-backref" href="#id18">DeleteImageProfile</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int DeleteImageProfile( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *name );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>DeleteImageProfile removes a named profile from the image.</p>
+<p>The format of the DeleteImageProfile method is:</p>
+<pre class="literal-block">
+unsigned int DeleteImageProfile( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *name );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>name:</dt>
+<dd>Profile name. Valid names are "8BIM", "ICM", & "IPTC" or a
+generic profile name.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getimageprofile">
+<h1><a class="toc-backref" href="#id19">GetImageProfile</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+const unsigned char *GetImageProfile( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *name,
+ size_t *length );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>GetImageProfile returns a pointer to the named image profile if it is
+present. A null pointer is returned if the named profile is not present.</p>
+<p>Older versions of this function stored profiles named "8BIM" and "IPTC"
+in the same storage location. This is no longer the case. However,
+GetImageProfile() will try the alternate name if the specifically
+requested profile name is not available.</p>
+<p>The format of the GetImageProfile method is:</p>
+<pre class="literal-block">
+const unsigned char *GetImageProfile( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *name,
+ size_t *length );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>name:</dt>
+<dd>Profile name. Valid names are "8BIM", "ICM", "IPTC", "XMP" or any
+unique text string.</dd>
+<dt>length:</dt>
+<dd>Updated with profile length if profile is present. Set to NULL
+if length is not needed.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="nextimageprofile">
+<h1><a class="toc-backref" href="#id20">NextImageProfile</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail NextImageProfile( ImageProfileIterator profile_iterator, const char ** name,
+ const unsigned char ** profile, size_t *length );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>NextImageProfile iterates forward to the next image profile. The profile
+name is returned along with the profile data, and length. If there are
+no more entries in the list, then MagickFail is returned.</p>
+<p>The format of the AllocateImageProfileIterator method is:</p>
+<pre class="literal-block">
+MagickPassFail NextImageProfile( ImageProfileIterator profile_iterator, const char ** name,
+ const unsigned char ** profile, size_t *length );
+</pre>
+<dl class="docutils">
+<dt>profile_iterator:</dt>
+<dd>Profile iterator.</dd>
+<dt>name:</dt>
+<dd>Address of pointer to update with address of name.</dd>
+<dt>profile:</dt>
+<dd>Address of pointer to update with location of profile data.</dd>
+<dt>length:</dt>
+<dd>Address of parameter to update with profile length.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="profileimage">
+<h1><a class="toc-backref" href="#id21">ProfileImage</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int ProfileImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *name, unsigned char *profile,
+ const size_t length, unsigned int clone );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>ProfileImage() adds, applies, or removes a ICM, IPTC, or generic profile
+from an image. If the profile is NULL, it is removed from the image
+otherwise added (or applied). Use a name of '*' and a profile of NULL to
+remove all profiles from the image. Ownership of the profile is
+transferred to GraphicsMagick (it should not be altered or deallocated)
+unless the clone option is set to True.</p>
+<p>ICC ICM profiles are a special case and are handled as follows:</p>
+<p>If there is no ICM profile currently associated with the image, then
+the profile is simply associated with the image and the image pixels
+are not altered.</p>
+<p>If there is already a ICM profile associated with the image, then
+the colorspace transform described by the existing and new profiles
+is applied to the image pixels, and the new profile is associated
+with the image.</p>
+<p>The format of the ProfileImage method is:</p>
+<pre class="literal-block">
+unsigned int ProfileImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *name, unsigned char *profile,
+ const size_t length, unsigned int clone );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>name:</dt>
+<dd>Name of profile to add or remove: ICM, IPTC, or generic profile.</dd>
+<dt>profile:</dt>
+<dd>The profile. Can not be 'const' due to 'clone' option but
+is treated as 'const' if 'clone' is set to MagickTrue.</dd>
+<dt>length:</dt>
+<dd>The length of the profile.</dd>
+<dt>clone:</dt>
+<dd>If set True, then copy the profile rather than taking
+ownership of it.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setimageprofile">
+<h1><a class="toc-backref" href="#id22">SetImageProfile</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int SetImageProfile( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *name, const unsigned char *profile,
+ const size_t length );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>SetImageProfile adds a named profile to the image. If a profile with the
+same name already exists, then it is replaced. If a null profile address
+is supplied, then an existing profile is removed. The profile is copied
+into the image. Note that this function does not execute CMS color
+profiles. Any existing CMS color profile is simply replaced. Use the
+ProfileImage() function in order to execute a CMS color profile.</p>
+<p>Older versions of this function stored profiles named "8BIM" and "IPTC"
+in the same storage location. This is no longer the case. However,
+GetImageProfile() will try the alternate name if the specifically
+requested profile name is not available. Note that when trying to remove
+a profile, it may be necessary to remove both names in order for an
+"IPTC" profile to no longer be included in output file formats.</p>
+<p>The format of the SetImageProfile method is:</p>
+<pre class="literal-block">
+unsigned int SetImageProfile( <a class="reference external" href="../api/types.html#image">Image</a> *image, const char *name, const unsigned char *profile,
+ const size_t length );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>name:</dt>
+<dd>Profile name. Valid names are "8BIM", "ICM", "IPTC", XMP, or any
+unique text string.</dd>
+<dt>profile:</dt>
+<dd>Address of profile to add. Pass zero to remove an existing
+profile.</dd>
+<dt>length:</dt>
+<dd>The length of the profile.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="quantize">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>quantize</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="quantize">
+<h1 class="title">quantize</h1>
+<h2 class="subtitle" id="reduce-the-number-of-colors-in-an-image">Reduce the number of colors in an image</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#clonequantizeinfo" id="id21">CloneQuantizeInfo</a></li>
+<li><a class="reference internal" href="#compressimagecolormap" id="id22">CompressImageColormap</a></li>
+<li><a class="reference internal" href="#destroyquantizeinfo" id="id23">DestroyQuantizeInfo</a></li>
+<li><a class="reference internal" href="#getimagequantizeerror" id="id24">GetImageQuantizeError</a></li>
+<li><a class="reference internal" href="#getquantizeinfo" id="id25">GetQuantizeInfo</a></li>
+<li><a class="reference internal" href="#grayscalepseudoclassimage" id="id26">GrayscalePseudoClassImage</a></li>
+<li><a class="reference internal" href="#mapimage" id="id27">MapImage</a></li>
+<li><a class="reference internal" href="#mapimages" id="id28">MapImages</a></li>
+<li><a class="reference internal" href="#orderedditherimage" id="id29">OrderedDitherImage</a></li>
+<li><a class="reference internal" href="#quantizeimage" id="id30">QuantizeImage</a></li>
+<li><a class="reference internal" href="#quantizeimages" id="id31">QuantizeImages</a></li>
+</ul>
+</div>
+<div class="section" id="clonequantizeinfo">
+<h1><a class="toc-backref" href="#id21">CloneQuantizeInfo</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantizeinfo">QuantizeInfo</a> *CloneQuantizeInfo( const <a class="reference external" href="../api/types.html#quantizeinfo">QuantizeInfo</a> *quantize_info );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>CloneQuantizeInfo() makes a duplicate of the given quantize info structure,
+or if quantize info is NULL, a new one.</p>
+<p>The format of the CloneQuantizeInfo method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantizeinfo">QuantizeInfo</a> *CloneQuantizeInfo( const <a class="reference external" href="../api/types.html#quantizeinfo">QuantizeInfo</a> *quantize_info );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>clone_info:</dt>
+<dd>Method CloneQuantizeInfo returns a duplicate of the given
+quantize info, or if image info is NULL a new one.</dd>
+<dt>quantize_info:</dt>
+<dd>a structure of type info.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="compressimagecolormap">
+<h1><a class="toc-backref" href="#id22">CompressImageColormap</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void CompressImageColormap( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>CompressImageColormap() compresses an image colormap by removing any
+duplicate or unused color entries.</p>
+<p>The format of the CompressImageColormap method is:</p>
+<pre class="literal-block">
+void CompressImageColormap( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="destroyquantizeinfo">
+<h1><a class="toc-backref" href="#id23">DestroyQuantizeInfo</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+DestroyQuantizeInfo( <a class="reference external" href="../api/types.html#quantizeinfo">QuantizeInfo</a> *quantize_info );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>DestroyQuantizeInfo() deallocates memory associated with an QuantizeInfo
+structure.</p>
+<p>The format of the DestroyQuantizeInfo method is:</p>
+<pre class="literal-block">
+DestroyQuantizeInfo( <a class="reference external" href="../api/types.html#quantizeinfo">QuantizeInfo</a> *quantize_info );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>quantize_info:</dt>
+<dd>Specifies a pointer to an QuantizeInfo structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getimagequantizeerror">
+<h1><a class="toc-backref" href="#id24">GetImageQuantizeError</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int GetImageQuantizeError( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>GetImageQuantizeError() measures the difference between the original
+and quantized images. This difference is the total quantization error.
+The error is computed by summing over all pixels in an image the distance
+squared in RGB space between each reference pixel value and its quantized
+value. These values are computed:</p>
+<p>o mean_error_per_pixel: This value is the mean error for any single
+pixel in the image.</p>
+<p>o normalized_mean_square_error: This value is the normalized mean
+quantization error for any single pixel in the image. This distance
+measure is normalized to a range between 0 and 1. It is independent
+of the range of red, green, and blue values in the image.</p>
+<p>o normalized_maximum_square_error: This value is the normalized
+maximum quantization error for any single pixel in the image. This
+distance measure is normalized to a range between 0 and 1. It is
+independent of the range of red, green, and blue values in your image.</p>
+<p>The format of the GetImageQuantizeError method is:</p>
+<pre class="literal-block">
+unsigned int GetImageQuantizeError( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows.</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>Specifies a pointer to an Image structure; returned from
+ReadImage.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getquantizeinfo">
+<h1><a class="toc-backref" href="#id25">GetQuantizeInfo</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+GetQuantizeInfo( <a class="reference external" href="../api/types.html#quantizeinfo">QuantizeInfo</a> *quantize_info );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>GetQuantizeInfo() initializes the QuantizeInfo structure.</p>
+<p>The format of the GetQuantizeInfo method is:</p>
+<pre class="literal-block">
+GetQuantizeInfo( <a class="reference external" href="../api/types.html#quantizeinfo">QuantizeInfo</a> *quantize_info );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>quantize_info:</dt>
+<dd>Specifies a pointer to a QuantizeInfo structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="grayscalepseudoclassimage">
+<h1><a class="toc-backref" href="#id26">GrayscalePseudoClassImage</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void GrayscalePseudoClassImage( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>GrayscalePseudoClassImage converts an image to a PseudoClass
+grayscale representation with an (optionally) compressed and sorted
+colormap. Colormap is ordered by increasing intensity.</p>
+<p>The format of the GrayscalePseudoClassImage method is:</p>
+<pre class="literal-block">
+void GrayscalePseudoClassImage( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>optimize_colormap:</dt>
+<dd>If true, produce an optimimal (compact) colormap.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="mapimage">
+<h1><a class="toc-backref" href="#id27">MapImage</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MapImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#image">Image</a> *map_image,
+ const unsigned int dither );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>MapImage() replaces the colors of an image with the closest color from a
+reference image.</p>
+<p>The format of the MapImage method is:</p>
+<pre class="literal-block">
+unsigned int MapImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#image">Image</a> *map_image,
+ const unsigned int dither );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>Specifies a pointer to an Image structure.</dd>
+<dt>map_image:</dt>
+<dd>Specifies a pointer to an Image structure. Reduce
+image to a set of colors represented by this image.</dd>
+<dt>dither:</dt>
+<dd>Set this integer value to something other than zero to
+dither the quantized image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="mapimages">
+<h1><a class="toc-backref" href="#id28">MapImages</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MapImages( <a class="reference external" href="../api/types.html#image">Image</a> *images, <a class="reference external" href="../api/types.html#image">Image</a> *map_image, const unsigned int dither );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>MapImages() replaces the colors of a sequence of images with the closest
+color from a reference image. If the reference image does not contain a
+colormap, then a colormap will be created based on existing colors in the
+reference image. The order and number of colormap entries does not match
+the reference image. If the order and number of colormap entries needs to
+match the reference image, then the ReplaceImageColormap() function may be
+used after invoking MapImages() in order to apply the reference colormap.</p>
+<p>The format of the MapImage method is:</p>
+<pre class="literal-block">
+unsigned int MapImages( <a class="reference external" href="../api/types.html#image">Image</a> *images, <a class="reference external" href="../api/types.html#image">Image</a> *map_image, const unsigned int dither );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>Specifies a pointer to a set of Image structures.</dd>
+<dt>map_image:</dt>
+<dd>Specifies a pointer to an Image structure. Reduce
+image to a set of colors represented by this image.</dd>
+<dt>dither:</dt>
+<dd>Set this integer value to something other than zero to
+dither the quantized image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="orderedditherimage">
+<h1><a class="toc-backref" href="#id29">OrderedDitherImage</a></h1>
+<div class="section" id="id15">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int OrderedDitherImage( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id16">
+<h2>Description</h2>
+<p>OrderedDitherImage() uses the ordered dithering technique of reducing color
+images to monochrome using positional information to retain as much
+information as possible.</p>
+<p>The format of the OrderedDitherImage method is:</p>
+<pre class="literal-block">
+unsigned int OrderedDitherImage( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows.</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>Specifies a pointer to an Image structure; returned from
+ReadImage.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="quantizeimage">
+<h1><a class="toc-backref" href="#id30">QuantizeImage</a></h1>
+<div class="section" id="id17">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int QuantizeImage( const <a class="reference external" href="../api/types.html#quantizeinfo">QuantizeInfo</a> *quantize_info, <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id18">
+<h2>Description</h2>
+<p>QuantizeImage() analyzes the colors within a reference image and chooses a
+fixed number of colors to represent the image. The goal of the algorithm
+is to minimize the color difference between the input and output image while
+minimizing the processing time.</p>
+<p>The format of the QuantizeImage method is:</p>
+<pre class="literal-block">
+unsigned int QuantizeImage( const <a class="reference external" href="../api/types.html#quantizeinfo">QuantizeInfo</a> *quantize_info, <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<dl class="docutils">
+<dt>quantize_info:</dt>
+<dd>Specifies a pointer to an QuantizeInfo structure.</dd>
+<dt>image:</dt>
+<dd>Specifies a pointer to an Image structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="quantizeimages">
+<h1><a class="toc-backref" href="#id31">QuantizeImages</a></h1>
+<div class="section" id="id19">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int QuantizeImages( const <a class="reference external" href="../api/types.html#quantizeinfo">QuantizeInfo</a> *quantize_info, <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+</div>
+<div class="section" id="id20">
+<h2>Description</h2>
+<p>QuantizeImages() analyzes the colors within a set of reference images and
+chooses a fixed number of colors to represent the set. The goal of the
+algorithm is to minimize the color difference between the input and output
+images while minimizing the processing time.</p>
+<p>The format of the QuantizeImages method is:</p>
+<pre class="literal-block">
+unsigned int QuantizeImages( const <a class="reference external" href="../api/types.html#quantizeinfo">QuantizeInfo</a> *quantize_info, <a class="reference external" href="../api/types.html#image">Image</a> *images );
+</pre>
+<dl class="docutils">
+<dt>quantize_info:</dt>
+<dd>Specifies a pointer to an QuantizeInfo structure.</dd>
+<dt>images:</dt>
+<dd>Specifies a pointer to a list of Image structures.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="registry">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>registry</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="registry">
+<h1 class="title">registry</h1>
+<h2 class="subtitle" id="in-memory-image-registration-interface">In-memory image registration interface</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#deletemagickregistry" id="id7">DeleteMagickRegistry</a></li>
+<li><a class="reference internal" href="#getimagefrommagickregistry" id="id8">GetImageFromMagickRegistry</a></li>
+<li><a class="reference internal" href="#getmagickregistry" id="id9">GetMagickRegistry</a></li>
+<li><a class="reference internal" href="#setmagickregistry" id="id10">SetMagickRegistry</a></li>
+</ul>
+</div>
+<div class="section" id="deletemagickregistry">
+<h1><a class="toc-backref" href="#id7">DeleteMagickRegistry</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail DeleteMagickRegistry( const long id );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>DeleteMagickRegistry() deletes an entry in the registry as defined by the
+id. It returns MagickPass if the entry is deleted otherwise MagickFail if
+no entry is found in the registry that matches the id.</p>
+<p>The format of the DeleteMagickRegistry method is:</p>
+<pre class="literal-block">
+MagickPassFail DeleteMagickRegistry( const long id );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>id:</dt>
+<dd>The registry id.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getimagefrommagickregistry">
+<h1><a class="toc-backref" href="#id8">GetImageFromMagickRegistry</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *GetImageFromMagickRegistry( const char *name, long *id,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>GetImageFromMagickRegistry() gets an image from the registry as defined by
+its name. If the blob that matches the name is not found, NULL is returned.</p>
+<p>The format of the GetImageFromMagickRegistry method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *GetImageFromMagickRegistry( const char *name, long *id,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>name:</dt>
+<dd>The name of the image to retrieve from the registry.</dd>
+<dt>id:</dt>
+<dd>The registry id.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getmagickregistry">
+<h1><a class="toc-backref" href="#id9">GetMagickRegistry</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+const void *GetMagickRegistry( const long id, <a class="reference external" href="../api/types.html#registrytype">RegistryType</a> *type, size_t *length,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>GetMagickRegistry() gets a blob from the registry as defined by the id. If
+the blob that matches the id is not found, NULL is returned.</p>
+<p>The format of the GetMagickRegistry method is:</p>
+<pre class="literal-block">
+const void *GetMagickRegistry( const long id, <a class="reference external" href="../api/types.html#registrytype">RegistryType</a> *type, size_t *length,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>id:</dt>
+<dd>The registry id.</dd>
+<dt>type:</dt>
+<dd>The registry type.</dd>
+<dt>length:</dt>
+<dd>The blob length in number of bytes.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="setmagickregistry">
+<h1><a class="toc-backref" href="#id10">SetMagickRegistry</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+long SetMagickRegistry( const <a class="reference external" href="../api/types.html#registrytype">RegistryType</a> type, const void *blob, const size_t length,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>SetMagickRegistry() sets a blob into the registry and returns a unique ID.
+If an error occurs, -1 is returned.</p>
+<p>The format of the SetMagickRegistry method is:</p>
+<pre class="literal-block">
+long SetMagickRegistry( const <a class="reference external" href="../api/types.html#registrytype">RegistryType</a> type, const void *blob, const size_t length,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>type:</dt>
+<dd>The registry type.</dd>
+<dt>blob:</dt>
+<dd>The address of a Binary Large OBject.</dd>
+<dt>length:</dt>
+<dd>For a registry type of ImageRegistryType use sizeof(Image)
+otherise the blob length in number of bytes.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>render</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="render">
<h2 class="subtitle" id="low-level-methods-to-draw-on-an-image">Low-level methods to draw on an image</h2>
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#clonedrawinfo" id="id13">CloneDrawInfo</a></li>
<li><a class="reference internal" href="#destroydrawinfo" id="id14">DestroyDrawInfo</a></li>
<div class="section" id="id2">
<h2>Description</h2>
<p>DestroyDrawInfo() deallocates memory associated with an DrawInfo
-structure.</p>
+structure. Nothing is done if the pointer passed is NULL.</p>
<p>The format of the DestroyDrawInfo method is:</p>
<pre class="literal-block">
void DestroyDrawInfo( <a class="reference external" href="../api/types.html#drawinfo">DrawInfo</a> *draw_info );
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>resize</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="resize">
<h2 class="subtitle" id="resize-an-image">Resize an image</h2>
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#magnifyimage" id="id11">MagnifyImage</a></li>
<li><a class="reference internal" href="#minifyimage" id="id12">MinifyImage</a></li>
<h2>Description</h2>
<p>SampleImage() scales an image to the desired dimensions with pixel
sampling. Unlike other scaling methods, this method does not introduce
-any additional color into the scaled image.</p>
+any additional color into the scaled image. SampleImage() is extremely
+fast and may be used where speed is most important.</p>
<p>The format of the SampleImage method is:</p>
<pre class="literal-block">
<a class="reference external" href="../api/types.html#image">Image</a> *SampleImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned long columns,
</div>
<div class="section" id="id8">
<h2>Description</h2>
-<p>ScaleImage() changes the size of an image to the given dimensions.</p>
+<p>ScaleImage() changes the size of an image to the specified dimensions.
+This method is reasonably fast but it is not currently multi-threaded
+and does not support image filters. The quality of the resized image
+is sufficient for most purposes.</p>
<p>The format of the ScaleImage method is:</p>
<pre class="literal-block">
<a class="reference external" href="../api/types.html#image">Image</a> *ScaleImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned long columns,
<div class="section" id="id10">
<h2>Description</h2>
<p>ThumbnailImage() changes the size of an image to the given dimensions.
-This method was designed by Bob Friesenhahn as a low cost thumbnail
-generator.</p>
+This method was designed as a low cost thumbnail generator.
+ThumbnailImage() is typically very fast but an attempt is made to improve
+quality by first using a simple sampling algorithm for part of the
+reduction, and then a filtering algorithm to produce the final image.</p>
<p>The format of the ThumbnailImage method is:</p>
<pre class="literal-block">
<a class="reference external" href="../api/types.html#image">Image</a> *ThumbnailImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned long columns,
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>resize</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="resize">
+<h1 class="title">resize</h1>
+<h2 class="subtitle" id="resize-an-image">Resize an image</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#magnifyimage" id="id11">MagnifyImage</a></li>
+<li><a class="reference internal" href="#minifyimage" id="id12">MinifyImage</a></li>
+<li><a class="reference internal" href="#resizeimage" id="id13">ResizeImage</a></li>
+<li><a class="reference internal" href="#sampleimage" id="id14">SampleImage</a></li>
+<li><a class="reference internal" href="#scaleimage" id="id15">ScaleImage</a></li>
+<li><a class="reference internal" href="#thumbnailimage" id="id16">ThumbnailImage</a></li>
+</ul>
+</div>
+<div class="section" id="magnifyimage">
+<h1><a class="toc-backref" href="#id11">MagnifyImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *MagnifyImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>MagnifyImage() is a convenience method that scales an image proportionally
+to twice its size.</p>
+<p>The format of the MagnifyImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *MagnifyImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="minifyimage">
+<h1><a class="toc-backref" href="#id12">MinifyImage</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *MinifyImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>MinifyImage() is a convenience method that scales an image proportionally
+to half its size.</p>
+<p>The format of the MinifyImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *MinifyImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="resizeimage">
+<h1><a class="toc-backref" href="#id13">ResizeImage</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ResizeImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned long columns, const unsigned long rows,
+ const <a class="reference external" href="../api/types.html#filtertype">FilterTypes</a> filter, const double blur,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>ResizeImage() scales an image to the desired dimensions with one of these
+filters:</p>
+<p>Bessel Blackman Box
+Catrom Cubic Gaussian
+Hanning Hermite Lanczos
+Mitchell Point Quandratic
+Sinc Triangle</p>
+<p>Most of the filters are FIR (finite impulse response), however, Bessel,
+Gaussian, and Sinc are IIR (infinite impulse response). Bessel and Sinc
+are windowed (brought down to zero) with the Blackman filter.</p>
+<p>ResizeImage() was inspired by Paul Heckbert's zoom program.</p>
+<p>The format of the ResizeImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ResizeImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned long columns, const unsigned long rows,
+ const <a class="reference external" href="../api/types.html#filtertype">FilterTypes</a> filter, const double blur,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>columns:</dt>
+<dd>The number of columns in the scaled image.</dd>
+<dt>rows:</dt>
+<dd>The number of rows in the scaled image.</dd>
+<dt>filter:</dt>
+<dd>Image filter to use.</dd>
+<dt>blur:</dt>
+<dd>The blur factor where > 1 is blurry, < 1 is sharp.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="sampleimage">
+<h1><a class="toc-backref" href="#id14">SampleImage</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *SampleImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned long columns,
+ const unsigned long rows, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>SampleImage() scales an image to the desired dimensions with pixel
+sampling. Unlike other scaling methods, this method does not introduce
+any additional color into the scaled image.</p>
+<p>The format of the SampleImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *SampleImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned long columns,
+ const unsigned long rows, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>columns:</dt>
+<dd>The number of columns in the sampled image.</dd>
+<dt>rows:</dt>
+<dd>The number of rows in the sampled image.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="scaleimage">
+<h1><a class="toc-backref" href="#id15">ScaleImage</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ScaleImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned long columns,
+ const unsigned long rows, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>ScaleImage() changes the size of an image to the given dimensions.</p>
+<p>The format of the ScaleImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ScaleImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned long columns,
+ const unsigned long rows, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>columns:</dt>
+<dd>The number of columns in the scaled image.</dd>
+<dt>rows:</dt>
+<dd>The number of rows in the scaled image.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="thumbnailimage">
+<h1><a class="toc-backref" href="#id16">ThumbnailImage</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ThumbnailImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned long columns,
+ const unsigned long rows, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>ThumbnailImage() changes the size of an image to the given dimensions.
+This method was designed by Bob Friesenhahn as a low cost thumbnail
+generator.</p>
+<p>The format of the ThumbnailImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ThumbnailImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const unsigned long columns,
+ const unsigned long rows, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>columns:</dt>
+<dd>The number of columns in the scaled image.</dd>
+<dt>rows:</dt>
+<dd>The number of rows in the scaled image.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="resource">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>segment</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="segment">
<h2 class="subtitle" id="segment-and-image-with-thresholding-using-the-fuzzy-c-means-method">Segment and image with thresholding using the fuzzy c-means method</h2>
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#segmentimage" id="id1">SegmentImage</a></li>
</ul>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>segment</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="segment">
+<h1 class="title">segment</h1>
+<h2 class="subtitle" id="segment-and-image-with-thresholding-using-the-fuzzy-c-means-method">Segment and image with thresholding using the fuzzy c-means method</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#segmentimage" id="id1">SegmentImage</a></li>
+</ul>
+</div>
+<div class="section" id="segmentimage">
+<h1><a class="toc-backref" href="#id1">SegmentImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail SegmentImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#colorspacetype">ColorspaceType</a> colorspace,
+ const unsigned int verbose, const double cluster_threshold,
+ const double smoothing_threshold );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>Method SegmentImage segment an image by analyzing the histograms of the
+color components and identifying units that are homogeneous with the fuzzy
+c-means technique.</p>
+<p>Specify cluster threshold as the number of pixels in each cluster must
+exceed the the cluster threshold to be considered valid. Smoothing
+threshold eliminates noise in the second derivative of the histogram.
+As the value is increased, you can expect a smoother second derivative.
+The default is 1.5.</p>
+<p>The format of the SegmentImage method is:</p>
+<pre class="literal-block">
+MagickPassFail SegmentImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#colorspacetype">ColorspaceType</a> colorspace,
+ const unsigned int verbose, const double cluster_threshold,
+ const double smoothing_threshold );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>Specifies a pointer to an Image structure; returned from
+ReadImage.</dd>
+<dt>colorspace:</dt>
+<dd>An unsigned integer value that indicates the colorspace.
+Empirical evidence suggests that distances in YUV or YIQ correspond to
+perceptual color differences more closely than do distances in RGB
+space. The image is then returned to RGB colorspace after color
+reduction.</dd>
+<dt>verbose:</dt>
+<dd>A value greater than zero prints detailed information about
+the identified classes.</dd>
+<dt>cluster_threshold:</dt>
+<dd>The minimum number of total pixels contained
+in a hexahedra before it can be considered valid (expressed as a
+percentage of total pixels). This is used to eliminate seldom
+used colors.</dd>
+<dt>smoothing_threshold:</dt>
+<dd>If the absolute value of a second derivative
+point is less than smoothing_threshold then that derivative point
+is ignored (i.e. set to 0) while evaluating zero crossings. This
+causes small variations (could be noise) to be ignored.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="shear">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>shear</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="shear">
+<h1 class="title">shear</h1>
+<h2 class="subtitle" id="rotate-image-shear-image-or-apply-a-2d-affine-transformation">Rotate image, shear image, or apply a 2D affine transformation</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#affinetransformimage" id="id7">AffineTransformImage</a></li>
+<li><a class="reference internal" href="#autoorientimage" id="id8">AutoOrientImage</a></li>
+<li><a class="reference internal" href="#rotateimage" id="id9">RotateImage</a></li>
+<li><a class="reference internal" href="#shearimage" id="id10">ShearImage</a></li>
+</ul>
+</div>
+<div class="section" id="affinetransformimage">
+<h1><a class="toc-backref" href="#id7">AffineTransformImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *AffineTransformImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#affinematrix">AffineMatrix</a> *affine,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>AffineTransformImage() transforms an image as dictated by the affine matrix.
+It allocates the memory necessary for the new Image structure and returns
+a pointer to the new image.</p>
+<p>The format of the AffineTransformImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *AffineTransformImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, <a class="reference external" href="../api/types.html#affinematrix">AffineMatrix</a> *affine,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>affine:</dt>
+<dd>The affine transform.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="autoorientimage">
+<h1><a class="toc-backref" href="#id8">AutoOrientImage</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *AutoOrientImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const OrientationType current_orientation,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>AutoOrientImage() returns an image adjusted so that its orientation is
+suitable for viewing (i.e. top-left orientation).</p>
+<p>The format of the AutoOrientImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *AutoOrientImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const OrientationType current_orientation,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>current_orientation:</dt>
+<dd>Current image orientation (normally same as
+image->orientation).</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="rotateimage">
+<h1><a class="toc-backref" href="#id9">RotateImage</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *RotateImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double degrees,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>Method RotateImage creates a new image that is a rotated copy of an
+existing one. Positive angles rotate counter-clockwise (right-hand rule),
+while negative angles rotate clockwise. Rotated images are usually larger
+than the originals and have 'empty' triangular corners. X axis. Empty
+triangles left over from shearing the image are filled with the color
+specified by the image background_color. RotateImage allocates the memory
+necessary for the new Image structure and returns a pointer to the new
+image.</p>
+<p>Method RotateImage is based on the paper "A Fast Algorithm for General
+Raster Rotatation" by Alan W. Paeth. RotateImage is adapted from a similar
+method based on the Paeth paper written by Michael Halle of the Spatial
+Imaging Group, MIT Media Lab.</p>
+<p>The format of the RotateImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *RotateImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double degrees,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>status:</dt>
+<dd>Method RotateImage returns a pointer to the image after
+rotating. A null image is returned if there is a memory shortage.</dd>
+<dt>image:</dt>
+<dd>The image; returned from
+ReadImage.</dd>
+<dt>degrees:</dt>
+<dd>Specifies the number of degrees to rotate the image.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="shearimage">
+<h1><a class="toc-backref" href="#id10">ShearImage</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ShearImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double x_shear, const double y_shear,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>Method ShearImage creates a new image that is a shear_image copy of an
+existing one. Shearing slides one edge of an image along the X or Y
+axis, creating a parallelogram. An X direction shear slides an edge
+along the X axis, while a Y direction shear slides an edge along the Y
+axis. The amount of the shear is controlled by a shear angle. For X
+direction shears, x_shear is measured relative to the Y axis, and
+similarly, for Y direction shears y_shear is measured relative to the
+X axis. Empty triangles left over from shearing the image are filled
+with the color defined by the pixel at location (0,0). ShearImage
+allocates the memory necessary for the new Image structure and returns
+a pointer to the new image.</p>
+<p>Method ShearImage is based on the paper "A Fast Algorithm for General
+Raster Rotatation" by Alan W. Paeth.</p>
+<p>The format of the ShearImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ShearImage( const <a class="reference external" href="../api/types.html#image">Image</a> *image, const double x_shear, const double y_shear,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>status:</dt>
+<dd>Method ShearImage returns a pointer to the image after
+rotating. A null image is returned if there is a memory shortage.</dd>
+<dt>image:</dt>
+<dd>The image; returned from
+ReadImage.</dd>
+<dt>x_shear, y_shear:</dt>
+<dd>Specifies the number of degrees to shear the image.</dd>
+<dt>exception:</dt>
+<dd>Return any errors or warnings in this structure.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="signature">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>signature</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="signature">
+<h1 class="title">signature</h1>
+<h2 class="subtitle" id="add-a-digital-signature-to-the-image">Add a digital signature to the image</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#finalizesignature" id="id9">FinalizeSignature</a></li>
+<li><a class="reference internal" href="#getsignatureinfo" id="id10">GetSignatureInfo</a></li>
+<li><a class="reference internal" href="#signatureimage" id="id11">SignatureImage</a></li>
+<li><a class="reference internal" href="#transformsignature" id="id12">TransformSignature</a></li>
+<li><a class="reference internal" href="#updatesignature" id="id13">UpdateSignature</a></li>
+</ul>
+</div>
+<div class="section" id="finalizesignature">
+<h1><a class="toc-backref" href="#id9">FinalizeSignature</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+FinalizeSignature( <a class="reference external" href="../api/types.html#signatureinfo">SignatureInfo</a> *signature_info );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>Method FinalizeSignature finalizes the SHA message digest computation.</p>
+<p>The format of the FinalizeSignature method is:</p>
+<pre class="literal-block">
+FinalizeSignature( <a class="reference external" href="../api/types.html#signatureinfo">SignatureInfo</a> *signature_info );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>signature_info:</dt>
+<dd>The address of a structure of type SignatureInfo.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="getsignatureinfo">
+<h1><a class="toc-backref" href="#id10">GetSignatureInfo</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+GetSignatureInfo( <a class="reference external" href="../api/types.html#signatureinfo">SignatureInfo</a> *signature_info );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>Method GetSignatureInfo initializes the SHA message digest structure.</p>
+<p>The format of the GetSignatureInfo method is:</p>
+<pre class="literal-block">
+GetSignatureInfo( <a class="reference external" href="../api/types.html#signatureinfo">SignatureInfo</a> *signature_info );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>signature_info:</dt>
+<dd>The address of a structure of type SignatureInfo.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="signatureimage">
+<h1><a class="toc-backref" href="#id11">SignatureImage</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int SignatureImage( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>SignatureImage() computes a message digest from an image pixel stream with
+an implementation of the NIST SHA-256 Message Digest algorithm. This
+signature uniquely identifies the image and is convenient for determining
+if an image has been modified or whether two images are identical.</p>
+<p>The format of the SignatureImage method is:</p>
+<pre class="literal-block">
+unsigned int SignatureImage( <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="transformsignature">
+<h1><a class="toc-backref" href="#id12">TransformSignature</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+TransformSignature( <a class="reference external" href="../api/types.html#signatureinfo">SignatureInfo</a> *signature_info );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>TransformSignature() transforms the SHA message digest.</p>
+<p>The format of the TransformSignature method is:</p>
+<pre class="literal-block">
+TransformSignature( <a class="reference external" href="../api/types.html#signatureinfo">SignatureInfo</a> *signature_info );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>signature_info:</dt>
+<dd>The address of a structure of type SignatureInfo.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="updatesignature">
+<h1><a class="toc-backref" href="#id13">UpdateSignature</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+UpdateSignature( <a class="reference external" href="../api/types.html#signatureinfo">SignatureInfo</a> *signature_info, const unsigned char *message,
+ const size_t length );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>UpdateSignature() updates the SHA message digest.</p>
+<p>The format of the UpdateSignature method is:</p>
+<pre class="literal-block">
+UpdateSignature( <a class="reference external" href="../api/types.html#signatureinfo">SignatureInfo</a> *signature_info, const unsigned char *message,
+ const size_t length );
+</pre>
+<dl class="docutils">
+<dt>signature_info:</dt>
+<dd>The address of a structure of type SignatureInfo.</dd>
+<dt>message:</dt>
+<dd>the message</dd>
+<dt>length:</dt>
+<dd>The length of the message.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="statistics">
<div class="section" id="synopsis">
<h2>Synopsis</h2>
<pre class="literal-block">
-MagickPassFail GetImageStatistics( const <a class="reference external" href="../api/types.html#image">Image</a> *image,
- ImageStatistics *statistics <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+MagickPassFail GetImageStatistics( const <a class="reference external" href="../api/types.html#image">Image</a> *image, ImageStatistics *statistics,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
</pre>
</div>
<div class="section" id="description">
set to zero.</p>
<p>The format of the GetImageStatistics method is:</p>
<pre class="literal-block">
-MagickPassFail GetImageStatistics( const <a class="reference external" href="../api/types.html#image">Image</a> *image,
- ImageStatistics *statistics <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+MagickPassFail GetImageStatistics( const <a class="reference external" href="../api/types.html#image">Image</a> *image, ImageStatistics *statistics,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
</pre>
<dl class="docutils">
<dt>image:</dt>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>statistics</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="statistics">
+<h1 class="title">statistics</h1>
+<h2 class="subtitle" id="compute-image-statistics">Compute image statistics</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#getimagestatistics" id="id1">GetImageStatistics</a></li>
+</ul>
+</div>
+<div class="section" id="getimagestatistics">
+<h1><a class="toc-backref" href="#id1">GetImageStatistics</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail GetImageStatistics( const <a class="reference external" href="../api/types.html#image">Image</a> *image,
+ ImageStatistics *statistics <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>GetImageStatistics computes common statistics (currently maximum, minimum,
+mean and standard deviation) for the available image channels. The
+per-channel values are returned in an ImageStatistics structure. Statistics
+are normalized to the range 0.0 to 1.0. Multiply values by MaxRGB to obtain
+the statistics in quantum units. Statistics for non-existent channels are
+set to zero.</p>
+<p>The format of the GetImageStatistics method is:</p>
+<pre class="literal-block">
+MagickPassFail GetImageStatistics( const <a class="reference external" href="../api/types.html#image">Image</a> *image,
+ ImageStatistics *statistics <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>statistics:</dt>
+<dd>An ImageStatistics structure to update with statistics.</dd>
+<dt>exception:</dt>
+<dd>Any errors are reported here.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="texture">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>texture</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="texture">
+<h1 class="title">texture</h1>
+<h2 class="subtitle" id="image-texture-functions">Image texture functions</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#constitutetextureimage" id="id3">ConstituteTextureImage</a></li>
+<li><a class="reference internal" href="#textureimage" id="id4">TextureImage</a></li>
+</ul>
+</div>
+<div class="section" id="constitutetextureimage">
+<h1><a class="toc-backref" href="#id3">ConstituteTextureImage</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ConstituteTextureImage( unsigned long columns, unsigned long rows,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *texture, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>ConstituteTextureImage() returns a new image canvas based on repeatedly
+tiling the texture image across and down the new image canvas. The
+returned image properties are similar to the texture image properties.</p>
+<p>The format of the TextureImage method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#image">Image</a> *ConstituteTextureImage( unsigned long columns, unsigned long rows,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *texture, <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>columns:</dt>
+<dd>The number of columns in the new image.</dd>
+<dt>rows:</dt>
+<dd>The number of rows in the new image.</dd>
+<dt>texture:</dt>
+<dd>The texture image to layer on the background.</dd>
+<dt>exceptions:</dt>
+<dd>Any errors are reported here.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="textureimage">
+<h1><a class="toc-backref" href="#id4">TextureImage</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail TextureImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#image">Image</a> *texture );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>TextureImage() repeatedly tiles the texture image across and down the image
+canvas. If the image canvas includes a matte channel, then the tile is
+alpha-composited "under" the image and the matte channel is removed.
+MagickFail is returned if an error is encountered.</p>
+<p>The format of the TextureImage method is:</p>
+<pre class="literal-block">
+MagickPassFail TextureImage( <a class="reference external" href="../api/types.html#image">Image</a> *image, const <a class="reference external" href="../api/types.html#image">Image</a> *texture );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>image:</dt>
+<dd>The image.</dd>
+<dt>texture:</dt>
+<dd>This image is the texture to layer on the background.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>transform</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="transform">
<h2 class="subtitle" id="crop-flip-flop-roll-coalesce-etc">Crop, flip, flop, roll, coalesce, etc.</h2>
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#chopimage" id="id23">ChopImage</a></li>
<li><a class="reference internal" href="#coalesceimages" id="id24">CoalesceImages</a></li>
</pre>
<dl class="docutils">
<dt>image:</dt>
-<dd>The image The transformed image is returned as this parameter.</dd>
+<dd>The image to transform. The resulting transformed image is
+returned via this parameter.</dd>
<dt>crop_geometry:</dt>
<dd>A crop geometry string. This geometry defines a
subregion of the image to crop.</dd>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Types</title>
<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-types">
<li><a class="reference internal" href="#filtertypes" id="id21">FilterTypes</a></li>
<li><a class="reference internal" href="#frameinfo" id="id22">FrameInfo</a></li>
<li><a class="reference internal" href="#gravitytype" id="id23">GravityType</a></li>
-<li><a class="reference internal" href="#image" id="id24">Image</a></li>
-<li><a class="reference internal" href="#imageinfo" id="id25">ImageInfo</a></li>
-<li><a class="reference internal" href="#imagetype" id="id26">ImageType</a></li>
-<li><a class="reference internal" href="#indexpacket" id="id27">IndexPacket</a></li>
-<li><a class="reference internal" href="#interlacetype" id="id28">InterlaceType</a></li>
-<li><a class="reference internal" href="#layertype" id="id29">LayerType</a></li>
-<li><a class="reference internal" href="#magickinfo" id="id30">MagickInfo</a></li>
-<li><a class="reference internal" href="#monitorhandler" id="id31">MonitorHandler</a></li>
-<li><a class="reference internal" href="#montageinfo" id="id32">MontageInfo</a></li>
-<li><a class="reference internal" href="#noisetype" id="id33">NoiseType</a></li>
-<li><a class="reference internal" href="#orientationtype" id="id34">OrientationType</a></li>
-<li><a class="reference internal" href="#paintmethod" id="id35">PaintMethod</a></li>
-<li><a class="reference internal" href="#pixelpacket" id="id36">PixelPacket</a></li>
-<li><a class="reference internal" href="#pointinfo" id="id37">PointInfo</a></li>
-<li><a class="reference internal" href="#profileinfo" id="id38">ProfileInfo</a></li>
-<li><a class="reference internal" href="#quantizeinfo" id="id39">QuantizeInfo</a></li>
-<li><a class="reference internal" href="#quantum" id="id40">Quantum</a></li>
-<li><a class="reference internal" href="#quantumtype" id="id41">QuantumType</a></li>
-<li><a class="reference internal" href="#rectangleinfo" id="id42">RectangleInfo</a></li>
-<li><a class="reference internal" href="#registrytype" id="id43">RegistryType</a></li>
-<li><a class="reference internal" href="#renderingintent" id="id44">RenderingIntent</a></li>
-<li><a class="reference internal" href="#resolutiontype" id="id45">ResolutionType</a></li>
-<li><a class="reference internal" href="#resourcetype" id="id46">ResourceType</a></li>
-<li><a class="reference internal" href="#segmentinfo" id="id47">SegmentInfo</a></li>
-<li><a class="reference internal" href="#signatureinfo" id="id48">SignatureInfo</a></li>
-<li><a class="reference internal" href="#storagetype" id="id49">StorageType</a></li>
-<li><a class="reference internal" href="#streamhandler" id="id50">StreamHandler</a></li>
-<li><a class="reference internal" href="#stretchtype" id="id51">StretchType</a></li>
-<li><a class="reference internal" href="#styletype" id="id52">StyleType</a></li>
-<li><a class="reference internal" href="#typemetric" id="id53">TypeMetric</a></li>
-<li><a class="reference internal" href="#viewinfo" id="id54">ViewInfo</a></li>
-<li><a class="reference internal" href="#virtualpixelmethod" id="id55">VirtualPixelMethod</a></li>
-<li><a class="reference internal" href="#magickxresourceinfo" id="id56">MagickXResourceInfo</a></li>
+<li><a class="reference internal" href="#logeventtype" id="id24">LogEventType</a></li>
+<li><a class="reference internal" href="#logmethod" id="id25">LogMethod</a></li>
+<li><a class="reference internal" href="#logoutputtype" id="id26">LogOutputType</a></li>
+<li><a class="reference internal" href="#image" id="id27">Image</a></li>
+<li><a class="reference internal" href="#imageinfo" id="id28">ImageInfo</a></li>
+<li><a class="reference internal" href="#imagetype" id="id29">ImageType</a></li>
+<li><a class="reference internal" href="#indexpacket" id="id30">IndexPacket</a></li>
+<li><a class="reference internal" href="#interlacetype" id="id31">InterlaceType</a></li>
+<li><a class="reference internal" href="#layertype" id="id32">LayerType</a></li>
+<li><a class="reference internal" href="#magickinfo" id="id33">MagickInfo</a></li>
+<li><a class="reference internal" href="#monitorhandler" id="id34">MonitorHandler</a></li>
+<li><a class="reference internal" href="#montageinfo" id="id35">MontageInfo</a></li>
+<li><a class="reference internal" href="#noisetype" id="id36">NoiseType</a></li>
+<li><a class="reference internal" href="#orientationtype" id="id37">OrientationType</a></li>
+<li><a class="reference internal" href="#paintmethod" id="id38">PaintMethod</a></li>
+<li><a class="reference internal" href="#pixelpacket" id="id39">PixelPacket</a></li>
+<li><a class="reference internal" href="#pointinfo" id="id40">PointInfo</a></li>
+<li><a class="reference internal" href="#profileinfo" id="id41">ProfileInfo</a></li>
+<li><a class="reference internal" href="#quantizeinfo" id="id42">QuantizeInfo</a></li>
+<li><a class="reference internal" href="#quantum" id="id43">Quantum</a></li>
+<li><a class="reference internal" href="#quantumtype" id="id44">QuantumType</a></li>
+<li><a class="reference internal" href="#rectangleinfo" id="id45">RectangleInfo</a></li>
+<li><a class="reference internal" href="#registrytype" id="id46">RegistryType</a></li>
+<li><a class="reference internal" href="#renderingintent" id="id47">RenderingIntent</a></li>
+<li><a class="reference internal" href="#resolutiontype" id="id48">ResolutionType</a></li>
+<li><a class="reference internal" href="#resourcetype" id="id49">ResourceType</a></li>
+<li><a class="reference internal" href="#segmentinfo" id="id50">SegmentInfo</a></li>
+<li><a class="reference internal" href="#signatureinfo" id="id51">SignatureInfo</a></li>
+<li><a class="reference internal" href="#storagetype" id="id52">StorageType</a></li>
+<li><a class="reference internal" href="#streamhandler" id="id53">StreamHandler</a></li>
+<li><a class="reference internal" href="#stretchtype" id="id54">StretchType</a></li>
+<li><a class="reference internal" href="#styletype" id="id55">StyleType</a></li>
+<li><a class="reference internal" href="#typemetric" id="id56">TypeMetric</a></li>
+<li><a class="reference internal" href="#viewinfo" id="id57">ViewInfo</a></li>
+<li><a class="reference internal" href="#virtualpixelmethod" id="id58">VirtualPixelMethod</a></li>
+<li><a class="reference internal" href="#magickxresourceinfo" id="id59">MagickXResourceInfo</a></li>
</ul>
</div>
<div class="section" id="affinematrix">
encoding an image. Be aware that most image types only support a sub-set
of the available compression types. If the compression type specified is
incompatable with the image, GraphicsMagick selects a compression type
-compatable with the image type.</p>
+compatable with the image type, which might be no compression at all.</p>
<table border="1" class="docutils">
<caption>CompressionType</caption>
<colgroup>
<tr><td>ZipCompression</td>
<td>Lempel-Ziv compression (LZ77) as used in PKZIP and GNU gzip.</td>
</tr>
+<tr><td>LZMACompression</td>
+<td>LZMA - Lempel-Ziv-Markov chain algorithm</td>
+</tr>
+<tr><td>JPEG2000Compression</td>
+<td>JPEG 2000 - ISO/IEC std 15444-1</td>
+</tr>
+<tr><td>JBIG1Compression</td>
+<td>JBIG v1 - ISO/IEC std 11544 / ITU-T rec T.82</td>
+</tr>
+<tr><td>JBIG2Compression</td>
+<td>JBIG v2 - ISO/IEC std 14492 / ITU-T rec T.88</td>
+</tr>
+<tr><td>ZSTDCompression</td>
+<td>Facebook's Zstandard/Zstd</td>
+</tr>
+<tr><td>WebPCompression</td>
+<td>Google's WebP</td>
+</tr>
</tbody>
</table>
</div>
</tbody>
</table>
</div>
+<div class="section" id="logeventtype">
+<h1><a class="toc-backref" href="#id24">LogEventType</a></h1>
+<p>LogEventType specifies the log event type to match one or more log
+areas. Although defined as an enum type, the values are based on
+unsigned integer flags value with one mask bit set, more than one mask
+bit set, or all of the assigned mask bits set. Values are boolean
+ORed together to represent multiple event types.</p>
+<table border="1" class="docutils">
+<caption>LogEventType</caption>
+<colgroup>
+<col width="27%" />
+<col width="73%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Description</td>
+</tr>
+<tr><td>UndefinedEventMask</td>
+<td>No events specified</td>
+</tr>
+<tr><td>NoEventsMask</td>
+<td>No events specified</td>
+</tr>
+<tr><td>ConfigureEventMask</td>
+<td>Configuration event (related to initialization or shutdown)</td>
+</tr>
+<tr><td>AnnotateEventMask</td>
+<td>Annotation event (text drawing)</td>
+</tr>
+<tr><td>RenderEventMask</td>
+<td>Rendering event (vector drawing)</td>
+</tr>
+<tr><td>TransformEventMask</td>
+<td>Image transformation event (e.g. cropping)</td>
+</tr>
+<tr><td>LocaleEventMask</td>
+<td>Locale event (internationalization)</td>
+</tr>
+<tr><td>CoderEventMask</td>
+<td>Coder event (file decode or encode)</td>
+</tr>
+<tr><td>X11EventMask</td>
+<td>X11 event (event related to use of X11)</td>
+</tr>
+<tr><td>CacheEventMask</td>
+<td>Pixel cache event (pixel storage in memory or on disk)</td>
+</tr>
+<tr><td>BlobEventMask</td>
+<td>Blob event (I/O to/from memory or a file)</td>
+</tr>
+<tr><td>DeprecateEventMask</td>
+<td>Deprecation event (use of a function which will be removed)</td>
+</tr>
+<tr><td>UserEventMask</td>
+<td>User event (event allowed for the user, not otherwise used)</td>
+</tr>
+<tr><td>ResourceEventMask</td>
+<td>Resource event (resource limit assignment, allocation/deallocation)</td>
+</tr>
+<tr><td>TemporaryFileEventMask</td>
+<td>Temporary file event (temporary file created or removed)</td>
+</tr>
+<tr><td>ExceptionEventMask</td>
+<td>Exception event (a warning or error was reported into ExceptionInfo)</td>
+</tr>
+<tr><td>OptionEventMask</td>
+<td>Option event (something related to a user provided option)</td>
+</tr>
+<tr><td>InformationEventMask</td>
+<td>Information event</td>
+</tr>
+<tr><td>WarningEventMask</td>
+<td>Warning event (a warning was reported into ExceptionInfo)</td>
+</tr>
+<tr><td>ErrorEventMask</td>
+<td>Error event (an error was reported into ExceptionInfo)</td>
+</tr>
+<tr><td>FatalErrorEventMask</td>
+<td>Fatal error event (a fatal error was reported into ExceptionInfo)</td>
+</tr>
+<tr><td>AllEventsMask</td>
+<td>All events (matches any/all events)</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="logmethod">
+<h1><a class="toc-backref" href="#id25">LogMethod</a></h1>
+<p>LogMethod is a call-back function type in the form:</p>
+<pre class="literal-block">
+typedef void (*LogMethod)(const ExceptionType type,const char *text)
+</pre>
+</div>
+<div class="section" id="logoutputtype">
+<h1><a class="toc-backref" href="#id26">LogOutputType</a></h1>
+<p>LogOutputType specifies how/where logging ("tracing") output is to be directed.</p>
+<table border="1" class="docutils">
+<caption>LogOutputType</caption>
+<colgroup>
+<col width="27%" />
+<col width="73%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Description</td>
+</tr>
+<tr><td>DisabledOutput</td>
+<td>Reporting disabled</td>
+</tr>
+<tr><td>UndefinedOutput</td>
+<td>Reporting disabled</td>
+</tr>
+<tr><td>StdoutOutput</td>
+<td>Log to stdout in "human readable" format</td>
+</tr>
+<tr><td>StderrOutput</td>
+<td>Log to stderr in "human readable" format</td>
+</tr>
+<tr><td>XMLFileOutput</td>
+<td>Log to a file in an XML format</td>
+</tr>
+<tr><td>TXTFileOutput</td>
+<td>Log to a file in a text format</td>
+</tr>
+<tr><td>Win32DebugOutput</td>
+<td>Windows, Output events to the application/system debugger.</td>
+</tr>
+<tr><td>Win32EventlogOutput</td>
+<td>Windows, Output events to the Application event log.</td>
+</tr>
+<tr><td>MethodOutput</td>
+<td>Log by calling registered C-language callback function</td>
+</tr>
+</tbody>
+</table>
+</div>
<div class="section" id="image">
-<h1><a class="toc-backref" href="#id24">Image</a></h1>
+<h1><a class="toc-backref" href="#id27">Image</a></h1>
<p>The Image structure represents an GraphicsMagick image. It is initially
allocated by AllocateImage() and deallocated by DestroyImage(). The
functions ReadImage(), ReadImages(), BlobToImage() and CreateImage()
</table>
</div>
<div class="section" id="imageinfo">
-<h1><a class="toc-backref" href="#id25">ImageInfo</a></h1>
+<h1><a class="toc-backref" href="#id28">ImageInfo</a></h1>
<p>The ImageInfo structure is used to supply option information to the
functions AllocateImage(), AnimateImages(), BlobToImage(),
CloneAnnotateInfo(), DisplayImages(), GetAnnotateInfo(), ImageToBlob(),
</table>
</div>
<div class="section" id="imagetype">
-<h1><a class="toc-backref" href="#id26">ImageType</a></h1>
+<h1><a class="toc-backref" href="#id29">ImageType</a></h1>
<p>ImageType indicates the type classification of the image.</p>
<table border="1" class="docutils">
<caption>ImageType</caption>
</table>
</div>
<div class="section" id="indexpacket">
-<h1><a class="toc-backref" href="#id27">IndexPacket</a></h1>
+<h1><a class="toc-backref" href="#id30">IndexPacket</a></h1>
<p>IndexPacket is the type used for a colormap index. An array of type
IndexPacket is used to represent an image in PseudoClass type. Currently
supported IndexPacket underlying types are 'unsigned char' and 'unsigned
setting.</p>
</div>
<div class="section" id="interlacetype">
-<h1><a class="toc-backref" href="#id28">InterlaceType</a></h1>
+<h1><a class="toc-backref" href="#id31">InterlaceType</a></h1>
<p>InterlaceType specifies the ordering of the red, green, and blue pixel
information in the image. Interlacing is usually used to make image
information available to the user faster by taking advantage of the space
</table>
</div>
<div class="section" id="layertype">
-<h1><a class="toc-backref" href="#id29">LayerType</a></h1>
+<h1><a class="toc-backref" href="#id32">LayerType</a></h1>
<p>LayerType is used as an argument when doing color separations. Use
LayerType when extracting a layer from an image. MatteLayer is useful for
extracting the opacity values from an image.</p>
</table>
</div>
<div class="section" id="magickinfo">
-<h1><a class="toc-backref" href="#id30">MagickInfo</a></h1>
+<h1><a class="toc-backref" href="#id33">MagickInfo</a></h1>
<p>The MagickInfo structure is used by GraphicsMagick to register support
for an image format. The MagickInfo structure is allocated with default
parameters by calling SetMagickInfo(). Image formats are registered by
</table>
</div>
<div class="section" id="monitorhandler">
-<h1><a class="toc-backref" href="#id31">MonitorHandler</a></h1>
+<h1><a class="toc-backref" href="#id34">MonitorHandler</a></h1>
<p>MonitorHandler is the function type to be used for the progress monitor
callback. Its definition is as follows:</p>
<pre class="literal-block">
</table>
</div>
<div class="section" id="montageinfo">
-<h1><a class="toc-backref" href="#id32">MontageInfo</a></h1>
+<h1><a class="toc-backref" href="#id35">MontageInfo</a></h1>
<pre class="literal-block">
typedef struct _MontageInfo
{
</pre>
</div>
<div class="section" id="noisetype">
-<h1><a class="toc-backref" href="#id33">NoiseType</a></h1>
+<h1><a class="toc-backref" href="#id36">NoiseType</a></h1>
<p>NoiseType is used as an argument to select the type of noise to be added
to the image.</p>
<table border="1" class="docutils">
</table>
</div>
<div class="section" id="orientationtype">
-<h1><a class="toc-backref" href="#id34">OrientationType</a></h1>
+<h1><a class="toc-backref" href="#id37">OrientationType</a></h1>
<p>OrientationType specifies the orientation of the image. Useful for when
the image is produced via a different ordinate system, the camera was
turned on its side, or the page was scanned sideways.</p>
</table>
</div>
<div class="section" id="paintmethod">
-<h1><a class="toc-backref" href="#id35">PaintMethod</a></h1>
+<h1><a class="toc-backref" href="#id38">PaintMethod</a></h1>
<p>PaintMethod specifies how pixel colors are to be replaced in the image.
It is used to select the pixel-filling algorithm employed.</p>
<table border="1" class="docutils">
</table>
</div>
<div class="section" id="pixelpacket">
-<h1><a class="toc-backref" href="#id36">PixelPacket</a></h1>
+<h1><a class="toc-backref" href="#id39">PixelPacket</a></h1>
<p>The PixelPacket structure is used to represent DirectClass color pixels
in GraphicsMagick. If the image is indicated as a PseudoClass image, its
DirectClass representation is only valid immediately after calling
</blockquote>
</div>
<div class="section" id="pointinfo">
-<h1><a class="toc-backref" href="#id37">PointInfo</a></h1>
+<h1><a class="toc-backref" href="#id40">PointInfo</a></h1>
<p>The PointInfo structure is used by the ChromaticityInfo structure to
specify chromaticity point values. This defines the boundaries and gammut
(range of included color) of the colorspace.</p>
</table>
</div>
<div class="section" id="profileinfo">
-<h1><a class="toc-backref" href="#id38">ProfileInfo</a></h1>
+<h1><a class="toc-backref" href="#id41">ProfileInfo</a></h1>
<p>The ProfileInfo structure is used to represent ICC or IPCT profiles in
GraphicsMagick (stored as an opaque BLOB).</p>
<p>The members of the ProfileInfo structure are shown in the following table:</p>
</table>
</div>
<div class="section" id="quantizeinfo">
-<h1><a class="toc-backref" href="#id39">QuantizeInfo</a></h1>
+<h1><a class="toc-backref" href="#id42">QuantizeInfo</a></h1>
<p>The QuantizeInfo structure is used to support passing parameters to
GraphicsMagick's color quantization (reduction) functions. Color
quantization is the process of analyzing one or more images, and
</table>
</div>
<div class="section" id="quantum">
-<h1><a class="toc-backref" href="#id40">Quantum</a></h1>
+<h1><a class="toc-backref" href="#id43">Quantum</a></h1>
<p>Quantum is the base type ('unsigned char', 'unsigned short', 'unsigned
int') used to store a pixel component (e.g. 'R' is one pixel component of
an RGB pixel).</p>
</div>
<div class="section" id="quantumtype">
-<h1><a class="toc-backref" href="#id41">QuantumType</a></h1>
+<h1><a class="toc-backref" href="#id44">QuantumType</a></h1>
<p>QuantumType is used to indicate the source or destination format of
entire pixels, or components of pixels ("Quantums") while they are being
read, or written to, a pixel cache. The validity of these format
</table>
</div>
<div class="section" id="rectangleinfo">
-<h1><a class="toc-backref" href="#id42">RectangleInfo</a></h1>
+<h1><a class="toc-backref" href="#id45">RectangleInfo</a></h1>
<p>The RectangleInfo structure is used to represent positioning information
in GraphicsMagick.</p>
<p>The members of the RectangleInfo structure are shown in the following
</table>
</div>
<div class="section" id="registrytype">
-<h1><a class="toc-backref" href="#id43">RegistryType</a></h1>
+<h1><a class="toc-backref" href="#id46">RegistryType</a></h1>
<pre class="literal-block">
typedef enum
{
</pre>
</div>
<div class="section" id="renderingintent">
-<h1><a class="toc-backref" href="#id44">RenderingIntent</a></h1>
+<h1><a class="toc-backref" href="#id47">RenderingIntent</a></h1>
<p>Rendering intent is a concept defined by ICC Spec ICC.1:1998-09, "File
Format for Color Profiles". GraphicsMagick uses RenderingIntent in order
to support ICC Color Profiles.</p>
</table>
</div>
<div class="section" id="resolutiontype">
-<h1><a class="toc-backref" href="#id45">ResolutionType</a></h1>
+<h1><a class="toc-backref" href="#id48">ResolutionType</a></h1>
<p>By default, GraphicsMagick defines resolutions in pixels per inch.
ResolutionType provides a means to adjust this.</p>
<table border="1" class="docutils">
</table>
</div>
<div class="section" id="resourcetype">
-<h1><a class="toc-backref" href="#id46">ResourceType</a></h1>
+<h1><a class="toc-backref" href="#id49">ResourceType</a></h1>
<pre class="literal-block">
typedef enum
{
</pre>
</div>
<div class="section" id="segmentinfo">
-<h1><a class="toc-backref" href="#id47">SegmentInfo</a></h1>
+<h1><a class="toc-backref" href="#id50">SegmentInfo</a></h1>
<pre class="literal-block">
typedef struct _SegmentInfo
{
</pre>
</div>
<div class="section" id="signatureinfo">
-<h1><a class="toc-backref" href="#id48">SignatureInfo</a></h1>
+<h1><a class="toc-backref" href="#id51">SignatureInfo</a></h1>
<pre class="literal-block">
typedef struct _SignatureInfo
{
</pre>
</div>
<div class="section" id="storagetype">
-<h1><a class="toc-backref" href="#id49">StorageType</a></h1>
+<h1><a class="toc-backref" href="#id52">StorageType</a></h1>
<pre class="literal-block">
typedef enum
{
</pre>
</div>
<div class="section" id="streamhandler">
-<h1><a class="toc-backref" href="#id50">StreamHandler</a></h1>
+<h1><a class="toc-backref" href="#id53">StreamHandler</a></h1>
<pre class="literal-block">
typedef unsigned int
(*StreamHandler)(const Image *,const void *,const size_t);
</pre>
</div>
<div class="section" id="stretchtype">
-<h1><a class="toc-backref" href="#id51">StretchType</a></h1>
+<h1><a class="toc-backref" href="#id54">StretchType</a></h1>
<pre class="literal-block">
typedef enum
{
</pre>
</div>
<div class="section" id="styletype">
-<h1><a class="toc-backref" href="#id52">StyleType</a></h1>
+<h1><a class="toc-backref" href="#id55">StyleType</a></h1>
<pre class="literal-block">
typedef enum
{
</pre>
</div>
<div class="section" id="typemetric">
-<h1><a class="toc-backref" href="#id53">TypeMetric</a></h1>
+<h1><a class="toc-backref" href="#id56">TypeMetric</a></h1>
<pre class="literal-block">
typedef struct _TypeMetric
{
</pre>
</div>
<div class="section" id="viewinfo">
-<h1><a class="toc-backref" href="#id54">ViewInfo</a></h1>
+<h1><a class="toc-backref" href="#id57">ViewInfo</a></h1>
<p>ViewInfo represents a handle to a pixel view, which represents a uniquely
selectable rectangular region of pixels. The only limit on the number of
views is the amount of available memory. Each Image contains a collection
</pre>
</div>
<div class="section" id="virtualpixelmethod">
-<h1><a class="toc-backref" href="#id55">VirtualPixelMethod</a></h1>
+<h1><a class="toc-backref" href="#id58">VirtualPixelMethod</a></h1>
<pre class="literal-block">
typedef enum
{
</pre>
</div>
<div class="section" id="magickxresourceinfo">
-<h1><a class="toc-backref" href="#id56">MagickXResourceInfo</a></h1>
+<h1><a class="toc-backref" href="#id59">MagickXResourceInfo</a></h1>
<pre class="literal-block">
typedef struct _XResourceInfo
{
home_directory[MaxTextExtent];
} XResourceInfo;
</pre>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Types</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-types">
+<h1 class="title">GraphicsMagick Types</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#affinematrix" id="id1">AffineMatrix</a></li>
+<li><a class="reference internal" href="#blobinfo" id="id2">BlobInfo</a></li>
+<li><a class="reference internal" href="#cache" id="id3">Cache</a></li>
+<li><a class="reference internal" href="#channeltype" id="id4">ChannelType</a></li>
+<li><a class="reference internal" href="#chromaticityinfo" id="id5">ChromaticityInfo</a></li>
+<li><a class="reference internal" href="#classtype" id="id6">ClassType</a></li>
+<li><a class="reference internal" href="#clippathunits" id="id7">ClipPathUnits</a></li>
+<li><a class="reference internal" href="#colorpacket" id="id8">ColorPacket</a></li>
+<li><a class="reference internal" href="#colorspacetype" id="id9">ColorspaceType</a></li>
+<li><a class="reference internal" href="#compliancetype" id="id10">ComplianceType</a></li>
+<li><a class="reference internal" href="#compositeoperator" id="id11">CompositeOperator</a></li>
+<li><a class="reference internal" href="#compressiontype" id="id12">CompressionType</a></li>
+<li><a class="reference internal" href="#decorationtype" id="id13">DecorationType</a></li>
+<li><a class="reference internal" href="#drawcontext" id="id14">DrawContext</a></li>
+<li><a class="reference internal" href="#drawinfo" id="id15">DrawInfo</a></li>
+<li><a class="reference internal" href="#endiantype" id="id16">EndianType</a></li>
+<li><a class="reference internal" href="#errorhandler" id="id17">ErrorHandler</a></li>
+<li><a class="reference internal" href="#exceptioninfo" id="id18">ExceptionInfo</a></li>
+<li><a class="reference internal" href="#exceptiontype" id="id19">ExceptionType</a></li>
+<li><a class="reference internal" href="#fillrule" id="id20">FillRule</a></li>
+<li><a class="reference internal" href="#filtertypes" id="id21">FilterTypes</a></li>
+<li><a class="reference internal" href="#frameinfo" id="id22">FrameInfo</a></li>
+<li><a class="reference internal" href="#gravitytype" id="id23">GravityType</a></li>
+<li><a class="reference internal" href="#image" id="id24">Image</a></li>
+<li><a class="reference internal" href="#imageinfo" id="id25">ImageInfo</a></li>
+<li><a class="reference internal" href="#imagetype" id="id26">ImageType</a></li>
+<li><a class="reference internal" href="#indexpacket" id="id27">IndexPacket</a></li>
+<li><a class="reference internal" href="#interlacetype" id="id28">InterlaceType</a></li>
+<li><a class="reference internal" href="#layertype" id="id29">LayerType</a></li>
+<li><a class="reference internal" href="#magickinfo" id="id30">MagickInfo</a></li>
+<li><a class="reference internal" href="#monitorhandler" id="id31">MonitorHandler</a></li>
+<li><a class="reference internal" href="#montageinfo" id="id32">MontageInfo</a></li>
+<li><a class="reference internal" href="#noisetype" id="id33">NoiseType</a></li>
+<li><a class="reference internal" href="#orientationtype" id="id34">OrientationType</a></li>
+<li><a class="reference internal" href="#paintmethod" id="id35">PaintMethod</a></li>
+<li><a class="reference internal" href="#pixelpacket" id="id36">PixelPacket</a></li>
+<li><a class="reference internal" href="#pointinfo" id="id37">PointInfo</a></li>
+<li><a class="reference internal" href="#profileinfo" id="id38">ProfileInfo</a></li>
+<li><a class="reference internal" href="#quantizeinfo" id="id39">QuantizeInfo</a></li>
+<li><a class="reference internal" href="#quantum" id="id40">Quantum</a></li>
+<li><a class="reference internal" href="#quantumtype" id="id41">QuantumType</a></li>
+<li><a class="reference internal" href="#rectangleinfo" id="id42">RectangleInfo</a></li>
+<li><a class="reference internal" href="#registrytype" id="id43">RegistryType</a></li>
+<li><a class="reference internal" href="#renderingintent" id="id44">RenderingIntent</a></li>
+<li><a class="reference internal" href="#resolutiontype" id="id45">ResolutionType</a></li>
+<li><a class="reference internal" href="#resourcetype" id="id46">ResourceType</a></li>
+<li><a class="reference internal" href="#segmentinfo" id="id47">SegmentInfo</a></li>
+<li><a class="reference internal" href="#signatureinfo" id="id48">SignatureInfo</a></li>
+<li><a class="reference internal" href="#storagetype" id="id49">StorageType</a></li>
+<li><a class="reference internal" href="#streamhandler" id="id50">StreamHandler</a></li>
+<li><a class="reference internal" href="#stretchtype" id="id51">StretchType</a></li>
+<li><a class="reference internal" href="#styletype" id="id52">StyleType</a></li>
+<li><a class="reference internal" href="#typemetric" id="id53">TypeMetric</a></li>
+<li><a class="reference internal" href="#viewinfo" id="id54">ViewInfo</a></li>
+<li><a class="reference internal" href="#virtualpixelmethod" id="id55">VirtualPixelMethod</a></li>
+<li><a class="reference internal" href="#magickxresourceinfo" id="id56">MagickXResourceInfo</a></li>
+</ul>
+</div>
+<div class="section" id="affinematrix">
+<h1><a class="toc-backref" href="#id1">AffineMatrix</a></h1>
+<p>AffineMatrix defines a 2D affine matrix transform.</p>
+<pre class="literal-block">
+typedef struct _AffineMatrix
+{
+ double
+ sx,
+ rx,
+ ry,
+ sy,
+ tx,
+ ty;
+} AffineMatrix;
+</pre>
+</div>
+<div class="section" id="blobinfo">
+<h1><a class="toc-backref" href="#id2">BlobInfo</a></h1>
+<p>BlobInfo is an opaque pointer reference to the internal structure of an
+I/O blob handle.</p>
+</div>
+<div class="section" id="cache">
+<h1><a class="toc-backref" href="#id3">Cache</a></h1>
+<pre class="literal-block">
+typedef void
+ *Cache;
+</pre>
+</div>
+<div class="section" id="channeltype">
+<h1><a class="toc-backref" href="#id4">ChannelType</a></h1>
+<pre class="literal-block">
+typedef enum
+{
+ UndefinedChannel,
+ RedChannel, /* RGB Red channel */
+ CyanChannel, /* CMYK Cyan channel */
+ GreenChannel, /* RGB Green channel */
+ MagentaChannel, /* CMYK Magenta channel */
+ BlueChannel, /* RGB Blue channel */
+ YellowChannel, /* CMYK Yellow channel */
+ OpacityChannel, /* Opacity channel */
+ BlackChannel, /* CMYK Black (K) channel */
+ MatteChannel, /* Same as Opacity channel (deprecated) */
+ AllChannels, /* Color channels */
+ GrayChannel /* Color channels represent an intensity. */
+} ChannelType;
+</pre>
+</div>
+<div class="section" id="chromaticityinfo">
+<h1><a class="toc-backref" href="#id5">ChromaticityInfo</a></h1>
+<p>The ChromaticityInfo structure is used to represent chromaticity
+(colorspace primary coordinates in xy space) values for images in
+GraphicsMagick.</p>
+<p>The members of the ChromaticityInfo structure are shown in the following
+table:</p>
+<table border="1" class="docutils">
+<caption>ChromaticityInfo Structure Members</caption>
+<colgroup>
+<col width="20%" />
+<col width="12%" />
+<col width="68%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Member</td>
+<td>Type</td>
+<td>Description</td>
+</tr>
+<tr><td>red_primary</td>
+<td>PointInfo</td>
+<td>Chromaticity red primary point (e.g. x=0.64, y=0.33)</td>
+</tr>
+<tr><td>green_primary</td>
+<td>PointInfo</td>
+<td>Chromaticity green primary point (e.g. x=0.3, y=0.6)</td>
+</tr>
+<tr><td>blue_primary</td>
+<td>PointInfo</td>
+<td>Chromaticity blue primary point (e.g. x=0.15, y=0.06)</td>
+</tr>
+<tr><td>white_point</td>
+<td>PointInfo</td>
+<td>Chromaticity white point (e.g. x=0.3127, y=0.329)</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="classtype">
+<h1><a class="toc-backref" href="#id6">ClassType</a></h1>
+<p>ClassType enumeration specifies the image storage class.</p>
+<table border="1" class="docutils">
+<caption>ClassType</caption>
+<colgroup>
+<col width="17%" />
+<col width="83%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Description</td>
+</tr>
+<tr><td>UndefinedClass</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>DirectClass</td>
+<td>Image is composed of pixels which represent literal color values.</td>
+</tr>
+<tr><td>PseudoClass</td>
+<td>Image is composed of pixels which specify an index in a color palette.</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="clippathunits">
+<h1><a class="toc-backref" href="#id7">ClipPathUnits</a></h1>
+<pre class="literal-block">
+typedef enum
+{
+ UserSpace,
+ UserSpaceOnUse,
+ ObjectBoundingBox
+} ClipPathUnits;
+</pre>
+</div>
+<div class="section" id="colorpacket">
+<h1><a class="toc-backref" href="#id8">ColorPacket</a></h1>
+<pre class="literal-block">
+typedef struct _ColorPacket
+{
+ PixelPacket
+ pixel;
+
+ unsigned short
+ index;
+
+ unsigned long
+ count;
+} ColorPacket;
+</pre>
+</div>
+<div class="section" id="colorspacetype">
+<h1><a class="toc-backref" href="#id9">ColorspaceType</a></h1>
+<p>The ColorspaceType enumeration is used to specify the colorspace that
+quantization (color reduction and mapping) is done under or to specify
+the colorspace when encoding an output image. Colorspaces are ways of
+describing colors to fit the requirements of a particular application
+(e.g. Television, offset printing, color monitors). Color reduction, by
+default, takes place in the RGBColorspace. Empirical evidence suggests
+that distances in color spaces such as YUVColorspace or YIQColorspace
+correspond to perceptual color differences more closely han do distances
+in RGB space. These color spaces may give better results when color
+reducing an image. Refer to quantize for more details.</p>
+<p>When encoding an output image, the colorspaces RGBColorspace,
+CMYKColorspace, and GRAYColorspace may be specified. The CMYKColorspace
+option is only applicable when writing TIFF, JPEG, and Adobe Photoshop
+bitmap (PSD) files.</p>
+<table border="1" class="docutils">
+<caption>ColorspaceType</caption>
+<colgroup>
+<col width="32%" />
+<col width="68%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedColorspace</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>RGBColorspace</td>
+<td>Red, Green, Blue colorspace.</td>
+</tr>
+<tr><td>GRAYColorspace</td>
+<td>Similar to Luma (Y) according to ITU-R 601</td>
+</tr>
+<tr><td>TransparentColorspace</td>
+<td>RGB which preserves the matte while quantizing colors.</td>
+</tr>
+<tr><td>OHTAColorspace</td>
+<td> </td>
+</tr>
+<tr><td>XYZColorspace</td>
+<td>CIE XYZ</td>
+</tr>
+<tr><td>YCCColorspace</td>
+<td>Kodak PhotoCD PhotoYCC</td>
+</tr>
+<tr><td>YIQColorspace</td>
+<td> </td>
+</tr>
+<tr><td>YPbPrColorspace</td>
+<td> </td>
+</tr>
+<tr><td>YUVColorspace</td>
+<td>YUV colorspace as used for computer video.</td>
+</tr>
+<tr><td>CMYKColorspace</td>
+<td>Cyan, Magenta, Yellow, Black colorspace.</td>
+</tr>
+<tr><td>sRGBColorspace</td>
+<td>Kodak PhotoCD sRGB</td>
+</tr>
+<tr><td>HSLColorspace</td>
+<td>Hue, saturation, luminosity</td>
+</tr>
+<tr><td>HWBColorspace</td>
+<td>Hue, whiteness, blackness</td>
+</tr>
+<tr><td>LABColorspace</td>
+<td>ITU LAB</td>
+</tr>
+<tr><td>CineonLogRGBColorspace</td>
+<td>RGB data with Cineon Log scaling, 2.048 density range</td>
+</tr>
+<tr><td>Rec601LumaColorspace</td>
+<td>Luma (Y) according to ITU-R 601</td>
+</tr>
+<tr><td>Rec601YCbCrColorspace</td>
+<td>YCbCr according to ITU-R 601</td>
+</tr>
+<tr><td>Rec709LumaColorspace</td>
+<td>Luma (Y) according to ITU-R 709</td>
+</tr>
+<tr><td>Rec709YCbCrColorspace</td>
+<td>YCbCr according to ITU-R 709</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="compliancetype">
+<h1><a class="toc-backref" href="#id10">ComplianceType</a></h1>
+<pre class="literal-block">
+typedef enum
+{
+ UndefinedCompliance = 0x0000,
+ NoCompliance = 0x0000,
+ SVGCompliance = 0x0001,
+ X11Compliance = 0x0002,
+ XPMCompliance = 0x0004,
+ AllCompliance = 0xffff
+} ComplianceType;
+</pre>
+</div>
+<div class="section" id="compositeoperator">
+<h1><a class="toc-backref" href="#id11">CompositeOperator</a></h1>
+<p>CompositeOperator is used to select the image composition algorithm used
+to compose a composite image with an image. By default, each of the
+composite image pixels are replaced by the corresponding image tile
+pixel. Specify CompositeOperator to select a different algorithm.</p>
+<p>The image compositor requires a matte, or alpha channel in the image for
+some operations. This extra channel usually defines a mask which
+represents a sort of a cookie-cutter for the image. This is the case when
+matte is 255 (full coverage) for pixels inside the shape, zero outside,
+and between zero and 255 on the boundary. For certain operations, if
+image does not have a matte channel, it is initialized with 0 for any
+pixel matching in color to pixel location (0,0), otherwise 255 (to work
+properly borderWidth must be 0).</p>
+<table border="1" class="docutils">
+<caption>CompositeOperator</caption>
+<colgroup>
+<col width="23%" />
+<col width="77%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Enumeration</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>UndefinedCompositeOp</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>OverCompositeOp</td>
+<td>The result is the union of the the two image shapes with the composite
+image obscuring image in the region of overlap.</td>
+</tr>
+<tr><td>InCompositeOp</td>
+<td>The result is a simply composite image cut by the shape of image. None of
+the image data of image is included in the result.</td>
+</tr>
+<tr><td>OutCompositeOp</td>
+<td>The resulting image is composite image with the shape of image cut out.</td>
+</tr>
+<tr><td>AtopCompositeOp</td>
+<td>The result is the same shape as image image, with composite image
+obscuring image there the image shapes overlap. Note that this differs
+from OverCompositeOp because the portion of composite image outside of
+image's shape does not appear in the result.</td>
+</tr>
+<tr><td>XorCompositeOp</td>
+<td>The result is the image data from both composite image and image that is
+outside the overlap region. The overlap region will be blank.</td>
+</tr>
+<tr><td>PlusCompositeOp</td>
+<td>The result is just the sum of the image data. Output values are cropped
+to 255 (no overflow). This operation is independent of the matte channels.</td>
+</tr>
+<tr><td>MinusCompositeOp</td>
+<td>The result of composite image - image, with overflow cropped to zero. The
+matte chanel is ignored (set to 255, full coverage).</td>
+</tr>
+<tr><td>AddCompositeOp</td>
+<td>The result of composite image + image, with overflow wrapping around (mod
+256).</td>
+</tr>
+<tr><td>SubtractCompositeOp</td>
+<td>The result of composite image - image, with underflow wrapping around (mod
+256). The add and subtract operators can be used to perform reversible
+transformations.</td>
+</tr>
+<tr><td>DifferenceCompositeOp</td>
+<td>The result of abs(composite image - image). This is useful for comparing
+two very similar images.</td>
+</tr>
+<tr><td>BumpmapCompositeOp</td>
+<td>The result image shaded by composite image.</td>
+</tr>
+<tr><td>CopyCompositeOp</td>
+<td>The resulting image is image replaced with composite image. Here the matte
+information is ignored.</td>
+</tr>
+<tr><td>CopyRedCompositeOp</td>
+<td>The resulting image is the red layer in image replaced with the red layer
+in composite image. The other layers are copied untouched.</td>
+</tr>
+<tr><td>CopyGreenCompositeOp</td>
+<td>The resulting image is the green layer in image replaced with the green
+layer in composite image. The other layers are copied untouched.</td>
+</tr>
+<tr><td>CopyBlueCompositeOp</td>
+<td>The resulting image is the blue layer in image replaced with the blue
+layer in composite image. The other layers are copied untouched.</td>
+</tr>
+<tr><td>CopyOpacityCompositeOp</td>
+<td>The resulting image is the matte layer in image replaced with the matte
+layer in composite image. The other layers are copied untouched.</td>
+</tr>
+<tr><td>ClearCompositeOp</td>
+<td>Pixels in the region are set to Transparent.</td>
+</tr>
+<tr><td>DissolveCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>DisplaceCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>ModulateCompositeOp</td>
+<td>Modulate brightness in HSL space.</td>
+</tr>
+<tr><td>ThresholdCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>NoCompositeOp</td>
+<td>Do nothing at all.</td>
+</tr>
+<tr><td>DarkenCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>LightenCompositeOp</td>
+<td> </td>
+</tr>
+<tr><td>HueCompositeOp</td>
+<td>Copy Hue channel (from HSL colorspace).</td>
+</tr>
+<tr><td>SaturateCompositeOp</td>
+<td>Copy Saturation channel (from HSL colorspace).</td>
+</tr>
+<tr><td>ColorizeCompositeOp</td>
+<td>Copy Hue and Saturation channels (from HSL colorspace).</td>
+</tr>
+<tr><td>LuminizeCompositeOp</td>
+<td>Copy Brightness channel (from HSL colorspace).</td>
+</tr>
+<tr><td>ScreenCompositeOp</td>
+<td>[Not yet implemented]</td>
+</tr>
+<tr><td>OverlayCompositeOp</td>
+<td>[Not yet implemented]</td>
+</tr>
+<tr><td>CopyCyanCompositeOp</td>
+<td>Copy the Cyan channel.</td>
+</tr>
+<tr><td>CopyMagentaCompositeOp</td>
+<td>Copy the Magenta channel.</td>
+</tr>
+<tr><td>CopyYellowCompositeOp</td>
+<td>Copy the Yellow channel.</td>
+</tr>
+<tr><td>CopyBlackCompositeOp</td>
+<td>Copy the Black channel.</td>
+</tr>
+<tr><td>DivideCompositeOp</td>
+<td> </td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="compressiontype">
+<h1><a class="toc-backref" href="#id12">CompressionType</a></h1>
+<p>CompressionType is used to express the desired compression type when
+encoding an image. Be aware that most image types only support a sub-set
+of the available compression types. If the compression type specified is
+incompatable with the image, GraphicsMagick selects a compression type
+compatable with the image type.</p>
+<table border="1" class="docutils">
+<caption>CompressionType</caption>
+<colgroup>
+<col width="28%" />
+<col width="72%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Description</td>
+</tr>
+<tr><td>UndefinedCompression</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>NoCompression</td>
+<td>No compression</td>
+</tr>
+<tr><td>BZipCompression</td>
+<td>BZip (Burrows-Wheeler block-sorting text compression algorithm and
+Huffman coding) as used by bzip2 utilities</td>
+</tr>
+<tr><td>FaxCompression</td>
+<td>CCITT Group 3 FAX compression</td>
+</tr>
+<tr><td>Group4Compression</td>
+<td>CCITT Group 4 FAX compression (used only for TIFF)</td>
+</tr>
+<tr><td>JPEGCompression</td>
+<td>JPEG compression</td>
+</tr>
+<tr><td>LosslessJPEGCompression</td>
+<td>Lossless JPEG compression</td>
+</tr>
+<tr><td>LZWCompression</td>
+<td>Lempel-Ziv-Welch (LZW) compression (caution, patented by Unisys)</td>
+</tr>
+<tr><td>RLECompression</td>
+<td>Run-Length encoded (RLE) compression</td>
+</tr>
+<tr><td>ZipCompression</td>
+<td>Lempel-Ziv compression (LZ77) as used in PKZIP and GNU gzip.</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="decorationtype">
+<h1><a class="toc-backref" href="#id13">DecorationType</a></h1>
+<pre class="literal-block">
+typedef enum
+{
+ NoDecoration,
+ UnderlineDecoration,
+ OverlineDecoration,
+ LineThroughDecoration
+} DecorationType;
+</pre>
+</div>
+<div class="section" id="drawcontext">
+<h1><a class="toc-backref" href="#id14">DrawContext</a></h1>
+<pre class="literal-block">
+typedef struct _DrawContext *DrawContext;
+</pre>
+</div>
+<div class="section" id="drawinfo">
+<h1><a class="toc-backref" href="#id15">DrawInfo</a></h1>
+<p>The DrawInfo structure is used to support annotating an image using
+drawing commands.</p>
+<table border="1" class="docutils">
+<caption>Methods Supporting DrawInfo</caption>
+<colgroup>
+<col width="23%" />
+<col width="77%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Method</td>
+<td>Description</td>
+</tr>
+<tr><td>GetDrawInfo()</td>
+<td>Allocate new structure with defaults set.</td>
+</tr>
+<tr><td>CloneDrawInfo()</td>
+<td>Copy existing structure, allocating new structure in the process.</td>
+</tr>
+<tr><td>DestroyDrawInfo()</td>
+<td>Deallocate structure, including any members.</td>
+</tr>
+<tr><td>DrawImage()</td>
+<td>Render primitives to image.</td>
+</tr>
+</tbody>
+</table>
+<p>The members of the DrawInfo structure are shown in the following table.
+The structure is initialized to reasonable defaults by first initializing
+the equivalent members of ImageInfo, and then initializing the entire
+structure using GetDrawInfo().</p>
+<table border="1" class="docutils">
+<caption>DrawInfo Structure Members Supporting DrawImage()</caption>
+<colgroup>
+<col width="16%" />
+<col width="14%" />
+<col width="69%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Member</td>
+<td>Type</td>
+<td>Description</td>
+</tr>
+<tr><td>affine</td>
+<td>AffineInfo</td>
+<td>Coordinate transformation (rotation, scaling, and translation).</td>
+</tr>
+<tr><td>border_color</td>
+<td>PixelPacket</td>
+<td>Border color</td>
+</tr>
+<tr><td>box</td>
+<td>PixelPacket</td>
+<td>Text solid background color.</td>
+</tr>
+<tr><td>decorate</td>
+<td>DecorationType</td>
+<td>Text decoration type.</td>
+</tr>
+<tr><td>density</td>
+<td>char *</td>
+<td>Text rendering density in DPI (effects scaling font according to
+pointsize). E.g. "72x72"</td>
+</tr>
+<tr><td>fill</td>
+<td>PixelPacket</td>
+<td>Object internal fill (within outline) color.</td>
+</tr>
+<tr><td>font</td>
+<td>char *</td>
+<td>Font to use when rendering text.</td>
+</tr>
+<tr><td>gravity</td>
+<td>GravityType</td>
+<td>Text placement preference (e.g. NorthWestGravity).</td>
+</tr>
+<tr><td>linewidth</td>
+<td>double</td>
+<td>Stroke (outline) drawing width in pixels.</td>
+</tr>
+<tr><td>pointsize</td>
+<td>double</td>
+<td>Font size (also see density).</td>
+</tr>
+<tr><td>primitive</td>
+<td>char *</td>
+<td>Space or new-line delimited list of text drawing primitives (e.g
+"text 100,100 Cockatoo"). See the table Drawing Primitives for the
+available drawing primitives.</td>
+</tr>
+<tr><td>stroke</td>
+<td>PixelPacket</td>
+<td>Object stroke (outline) color.</td>
+</tr>
+<tr><td>stroke_antialias</td>
+<td>unsigned int</td>
+<td>Set to True (non-zero) to obtain anti-aliased stroke rendering.</td>
+</tr>
+<tr><td>text_antialias</td>
+<td>unsigned int</td>
+<td>Set to True (non-zero) to obtain anti-aliased text rendering.</td>
+</tr>
+<tr><td>tile</td>
+<td>Image *</td>
+<td>Image texture to draw with. Use an image containing a single color
+(e.g. a 1x1 image) to draw in a solid color.</td>
+</tr>
+</tbody>
+</table>
+<p>Drawing Primitives</p>
+<p>The drawing primitives shown in the following table may be supplied as a
+space or new-line delimited list to the primitive member. Primitives
+which set drawing options effect the results from subsequent drawing
+operations. See the 'push graphic-context' and 'pop graphic-context'
+primitives for a way to control the propagation of drawing options.</p>
+<table border="1" class="docutils">
+<caption>Drawing Primitives</caption>
+<colgroup>
+<col width="16%" />
+<col width="28%" />
+<col width="56%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Primitive</td>
+<td>Arguments</td>
+<td>Purpose</td>
+</tr>
+<tr><td>affine</td>
+<td>sx,rx,ry,sy,tx,ty</td>
+<td>Apply coordinate transformations to support scaling
+(s), rotation (r), and translation (t). Angles are
+specified in radians. Equivalent to SVG matrix command
+which supplies a transformation matrix.</td>
+</tr>
+<tr><td>angle</td>
+<td>angle</td>
+<td>Specify object drawing angle.</td>
+</tr>
+<tr><td>arc</td>
+<td>startX,startY endX,endY
+startDegrees,endDegrees</td>
+<td>Draw an arc.</td>
+</tr>
+<tr><td>Bezier</td>
+<td>x1,y1, x2,y2, x3,y3, ...,
+xN,yN</td>
+<td>Draw a Bezier curve.</td>
+</tr>
+<tr><td>circle</td>
+<td>originX,originY
+perimX,perimY</td>
+<td>Draw a circle.</td>
+</tr>
+<tr><td>color</td>
+<td>x,y (point|replace|
+floodfill|filltoborder|
+reset)</td>
+<td>Set color in image according to specified colorization
+rule.</td>
+</tr>
+<tr><td>decorate</td>
+<td>(none|underline|overline|
+line-through)</td>
+<td>Specify text decoration.</td>
+</tr>
+<tr><td>ellipse</td>
+<td>originX,originY
+width,height
+arcStart,arcEnd</td>
+<td>Draw an ellipse.</td>
+</tr>
+<tr><td>fill</td>
+<td>colorspec</td>
+<td>Specifiy object filling color.</td>
+</tr>
+<tr><td>fill-opacity</td>
+<td>opacity</td>
+<td>Specify object fill opacity.</td>
+</tr>
+<tr><td>font</td>
+<td>fontname</td>
+<td>Specify text drawing font.</td>
+</tr>
+<tr><td>gravity</td>
+<td>(NorthWest,North,NorthEast,
+West,Center,East,
+SouthWest,South,SouthEast)</td>
+<td>Specify text positioning gravity.</td>
+</tr>
+<tr><td>image</td>
+<td>x,y width,height filename</td>
+<td>Composite image at position, scaled to specified width
+and height, and specified filename. If width or height
+is zero, scaling is not performed.</td>
+</tr>
+<tr><td>line</td>
+<td>startX,startY endX,endY</td>
+<td>Draw a line.</td>
+</tr>
+<tr><td>matte</td>
+<td>x,y (point|replace|
+floodfill|filltoborder|
+reset)</td>
+<td>Set matte in image according to specified colorization
+rule.</td>
+</tr>
+<tr><td>opacity</td>
+<td>fillOpacity strokeOpacity</td>
+<td>Specify drawing fill and stroke opacities.</td>
+</tr>
+<tr><td>path</td>
+<td>'SVG-compatible path
+arguments'</td>
+<td>Draw using SVG-compatible path drawing commands.</td>
+</tr>
+<tr><td>point</td>
+<td>x,y</td>
+<td>Set point to fill color.</td>
+</tr>
+<tr><td>pointsize</td>
+<td>pointsize</td>
+<td>Specify text drawing pointsize (scaled to density).</td>
+</tr>
+<tr><td>polygon</td>
+<td>x1,y1, x2,y2, x3,y3, ...,
+xN,yN</td>
+<td>Draw a polygon.</td>
+</tr>
+<tr><td>polyline</td>
+<td>x1,y1, x2,y2, x3,y3, ...,
+xN,yN</td>
+<td>Draw a polyline.</td>
+</tr>
+<tr><td>pop</td>
+<td>graphic-context</td>
+<td>Remove options set since previous "push
+graphic-context" command. Options revert to those in
+effect prior to pushing the graphic context.</td>
+</tr>
+<tr><td>push</td>
+<td>graphic-context</td>
+<td>Specify new graphic context.</td>
+</tr>
+<tr><td>rect</td>
+<td>upperLeftX,upperLeftY
+lowerRightX,lowerRightY</td>
+<td>Draw a rectangle.</td>
+</tr>
+<tr><td>rotate</td>
+<td>angle</td>
+<td>Specify coordiante space rotation. Subsequent objects
+are drawn with coordate space rotated by specified
+angle.</td>
+</tr>
+<tr><td>roundrectangle</td>
+<td>centerX,centerY
+width,hight
+cornerWidth,cornerHeight</td>
+<td>Draw a rectangle with rounded corners.</td>
+</tr>
+<tr><td>stroke</td>
+<td>colorspec</td>
+<td>Specify object stroke (outline) color.</td>
+</tr>
+<tr><td>stroke-antialias</td>
+<td>stroke_antialias (0 or 1)</td>
+<td>Specify if stroke should be antialiased or not.</td>
+</tr>
+<tr><td>stroke-dash</td>
+<td>value</td>
+<td>Specify pattern to be used when drawing stroke.</td>
+</tr>
+<tr><td>stroke-opacity</td>
+<td>opacity</td>
+<td>Specify opacity of stroke drawing color.</td>
+</tr>
+<tr><td>stroke-width</td>
+<td>linewidth</td>
+<td>Specify stroke (outline) width in pixels.</td>
+</tr>
+<tr><td>text</td>
+<td>x,y "some text"</td>
+<td>Draw text at position.</td>
+</tr>
+<tr><td>text-antialias</td>
+<td>text_antialias (0 or 1)</td>
+<td>Specify if rendered text is to be antialiased (blend
+edges).</td>
+</tr>
+<tr><td>scale</td>
+<td>x,y</td>
+<td>Specify scaling to be applied to coordintate space for
+subsequent drawing commands.</td>
+</tr>
+<tr><td>translate</td>
+<td>x,y</td>
+<td>Specify center of coordinate space to use for
+subsequent drawing commands.</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="endiantype">
+<h1><a class="toc-backref" href="#id16">EndianType</a></h1>
+<pre class="literal-block">
+typedef enum
+{
+ UndefinedEndian,
+ LSBEndian, /* "little" endian */
+ MSBEndian, /* "big" endian */
+ NativeEndian /* native endian */
+} EndianType;
+</pre>
+</div>
+<div class="section" id="errorhandler">
+<h1><a class="toc-backref" href="#id17">ErrorHandler</a></h1>
+<pre class="literal-block">
+typedef void
+ (*ErrorHandler)(const ExceptionType,const char *,const char *);
+</pre>
+</div>
+<div class="section" id="exceptioninfo">
+<h1><a class="toc-backref" href="#id18">ExceptionInfo</a></h1>
+<pre class="literal-block">
+typedef struct _ExceptionInfo
+{
+ char
+ *reason,
+ *description;
+
+ ExceptionType
+ severity;
+
+ unsigned long
+ signature;
+} ExceptionInfo;
+</pre>
+</div>
+<div class="section" id="exceptiontype">
+<h1><a class="toc-backref" href="#id19">ExceptionType</a></h1>
+<pre class="literal-block">
+typedef enum
+{
+ UndefinedException,
+ WarningException = 300,
+ ResourceLimitWarning = 300,
+ TypeWarning = 305,
+ OptionWarning = 310,
+ DelegateWarning = 315,
+ MissingDelegateWarning = 320,
+ CorruptImageWarning = 325,
+ FileOpenWarning = 330,
+ BlobWarning = 335,
+ StreamWarning = 340,
+ CacheWarning = 345,
+ CoderWarning = 350,
+ ModuleWarning = 355,
+ DrawWarning = 360,
+ ImageWarning = 365,
+ XServerWarning = 380,
+ MonitorWarning = 385,
+ RegistryWarning = 390,
+ ConfigureWarning = 395,
+ ErrorException = 400,
+ ResourceLimitError = 400,
+ TypeError = 405,
+ OptionError = 410,
+ DelegateError = 415,
+ MissingDelegateError = 420,
+ CorruptImageError = 425,
+ FileOpenError = 430,
+ BlobError = 435,
+ StreamError = 440,
+ CacheError = 445,
+ CoderError = 450,
+ ModuleError = 455,
+ DrawError = 460,
+ ImageError = 465,
+ XServerError = 480,
+ MonitorError = 485,
+ RegistryError = 490,
+ ConfigureError = 495,
+ FatalErrorException = 700,
+ ResourceLimitFatalError = 700,
+ TypeFatalError = 705,
+ OptionFatalError = 710,
+ DelegateFatalError = 715,
+ MissingDelegateFatalError = 720,
+ CorruptImageFatalError = 725,
+ FileOpenFatalError = 730,
+ BlobFatalError = 735,
+ StreamFatalError = 740,
+ CacheFatalError = 745,
+ CoderFatalError = 750,
+ ModuleFatalError = 755,
+ DrawFatalError = 760,
+ ImageFatalError = 765,
+ XServerFatalError = 780,
+ MonitorFatalError = 785,
+ RegistryFatalError = 790,
+ ConfigureFatalError = 795
+} ExceptionType;
+</pre>
+</div>
+<div class="section" id="fillrule">
+<h1><a class="toc-backref" href="#id20">FillRule</a></h1>
+<pre class="literal-block">
+typedef enum
+{
+ UndefinedRule,
+ EvenOddRule,
+ NonZeroRule
+} FillRule;
+</pre>
+</div>
+<div class="section" id="filtertypes">
+<h1><a class="toc-backref" href="#id21">FilterTypes</a></h1>
+<p>FilterTypes is used to adjust the filter algorithm used when resizing
+images. Different filters experience varying degrees of success with
+various images and can take significantly different amounts of processing
+time. GraphicsMagick uses the LanczosFilter by default since this filter
+has been shown to provide the best results for most images in a
+reasonable amount of time. Other filter types (e.g. TriangleFilter) may
+execute much faster but may show artifacts when the image is re-sized or
+around diagonal lines. The only way to be sure is to test the filter with
+sample images.</p>
+<table border="1" class="docutils">
+<caption>FilterTypes</caption>
+<colgroup>
+<col width="48%" />
+<col width="52%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Description</td>
+</tr>
+<tr><td>UndefinedFilter</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>PointFilter</td>
+<td>Point Filter</td>
+</tr>
+<tr><td>BoxFilter</td>
+<td>Box Filter</td>
+</tr>
+<tr><td>TriangleFilter</td>
+<td>Triangle Filter</td>
+</tr>
+<tr><td>HermiteFilter</td>
+<td>Hermite Filter</td>
+</tr>
+<tr><td>HanningFilter</td>
+<td>Hanning Filter</td>
+</tr>
+<tr><td>HammingFilter</td>
+<td>Hamming Filter</td>
+</tr>
+<tr><td>BlackmanFilter</td>
+<td>Blackman Filter</td>
+</tr>
+<tr><td>GaussianFilter</td>
+<td>Gaussian Filter</td>
+</tr>
+<tr><td>QuadraticFilter</td>
+<td>Quadratic Filter</td>
+</tr>
+<tr><td>CubicFilter</td>
+<td>Cubic Filter</td>
+</tr>
+<tr><td>CatromFilter</td>
+<td>Catrom Filter</td>
+</tr>
+<tr><td>MitchellFilter</td>
+<td>Mitchell Filter</td>
+</tr>
+<tr><td>LanczosFilter</td>
+<td>Lanczos Filter</td>
+</tr>
+<tr><td>BesselFilter</td>
+<td>Bessel Filter</td>
+</tr>
+<tr><td>SincFilter</td>
+<td>Sinc Filter</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="frameinfo">
+<h1><a class="toc-backref" href="#id22">FrameInfo</a></h1>
+<pre class="literal-block">
+typedef struct _FrameInfo
+{
+ unsigned long
+ width,
+ height;
+
+ long
+ x,
+ y,
+ inner_bevel,
+ outer_bevel;
+} FrameInfo;
+</pre>
+</div>
+<div class="section" id="gravitytype">
+<h1><a class="toc-backref" href="#id23">GravityType</a></h1>
+<p>GravityType specifies positioning of an object (e.g. text, image) within
+a bounding region (e.g. an image). Gravity provides a convenient way to
+locate objects irrespective of the size of the bounding region, in other
+words, you don't need to provide absolute coordinates in order to
+position an object. A common default for gravity is NorthWestGravity.</p>
+<table border="1" class="docutils">
+<caption>GravityType</caption>
+<colgroup>
+<col width="27%" />
+<col width="73%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Description</td>
+</tr>
+<tr><td>ForgetGravity</td>
+<td>Don't use gravity.</td>
+</tr>
+<tr><td>NorthWestGravity</td>
+<td>Position object at top-left of region.</td>
+</tr>
+<tr><td>NorthGravity</td>
+<td>Postiion object at top-center of region</td>
+</tr>
+<tr><td>NorthEastGravity</td>
+<td>Position object at top-right of region</td>
+</tr>
+<tr><td>WestGravity</td>
+<td>Position object at left-center of region</td>
+</tr>
+<tr><td>CenterGravity</td>
+<td>Position object at center of region</td>
+</tr>
+<tr><td>EastGravity</td>
+<td>Position object at right-center of region</td>
+</tr>
+<tr><td>SouthWestGravity</td>
+<td>Position object at left-bottom of region</td>
+</tr>
+<tr><td>SouthGravity</td>
+<td>Position object at bottom-center of region</td>
+</tr>
+<tr><td>SouthEastGravity</td>
+<td>Position object at bottom-right of region</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="image">
+<h1><a class="toc-backref" href="#id24">Image</a></h1>
+<p>The Image structure represents an GraphicsMagick image. It is initially
+allocated by AllocateImage() and deallocated by DestroyImage(). The
+functions ReadImage(), ReadImages(), BlobToImage() and CreateImage()
+return a new image. Use CloneImage() to copy an image. An image consists
+of a structure containing image attributes as well as the image pixels.</p>
+<p>The image pixels are represented by the structure PixelPacket and are
+cached in-memory, or on disk, depending on the cache threshold setting.
+This cache is known as the "pixel cache". Pixels in the cache may not be
+edited directly. They must first be made visible from the cache via a
+pixel view. A pixel view is a rectangular view of the pixels as defined
+by a starting coordinate, and a number of rows and columns. When
+considering the varying abilities of multiple platforms, the most
+reliably efficient pixel view is comprized of part, or all, of one image
+row.</p>
+<p>There are two means of accessing pixel views. When using the default
+view, the pixels are made visible and accessable by using the
+GetImagePixels() method which provides access to a specified region of
+the image. After the view has been updated, the pixels may be saved back
+to the cache in their original positions via SyncImagePixels(). In order
+to create an image with new contents, or to blindly overwrite existing
+contents, the method SetImagePixels() is used to reserve a pixel view
+corresponding to a region in the pixel cache. Once the pixel view has
+been updated, it may be written to the cache via SyncImagePixels(). The
+function GetIndexes() provides access to the image colormap, represented
+as an array of type IndexPacket.</p>
+<p>A more flexible interface to the image pixels is via the Cache View
+interface. This interface supports multiple pixel cache views (limited by
+the amount of available memory), each of which are identified by a handle
+(of type ViewInfo). Use OpenCacheView() to obtain a new cache view,
+CloseCacheView() to discard a cache view, GetCacheViewPixels() to access
+an existing pixel region, SetCacheView() to define a new pixel region,
+and SyncCacheViewPixels() to save the updated pixel region. The function
+GetCacheViewIndexes() provides access to the colormap indexes associated
+with the pixel view.</p>
+<p>When writing encoders and decoders for new image formats, it is
+convenient to have a high-level interface available which supports
+converting between external pixel representations and GraphicsMagick's
+own representation. Pixel components (red, green, blue, opacity, RGB, or
+RGBA) may be transferred from a user-supplied buffer into the default
+view by using ImportImagePixelArea(), or from an allocated view via
+ImportViewPixelArea(). Pixel components may be transferred from the
+default view into a user-supplied buffer by using ExportImagePixelArea(),
+or from an allocated view via ExportViewPixelArea(). Use of this
+high-level interface helps protect image coders from changes to
+GraphicsMagick's pixel representation and simplifies the implementation.</p>
+<p>The members of the Image structure are shown in the following table:</p>
+<table border="1" class="docutils">
+<caption>Image Structure Members</caption>
+<colgroup>
+<col width="31%" />
+<col width="18%" />
+<col width="51%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Member</td>
+<td>Type</td>
+<td>Description</td>
+</tr>
+<tr><td>background_color</td>
+<td>PixelPacket</td>
+<td>Image background color</td>
+</tr>
+<tr><td>blur</td>
+<td>double</td>
+<td>Blur factor to apply to the image when zooming</td>
+</tr>
+<tr><td>border_color</td>
+<td>PixelPacket</td>
+<td>Image border color</td>
+</tr>
+<tr><td>chromaticity</td>
+<td>ChromaticityInfo</td>
+<td>Red, green, blue, and white-point chromaticity
+values.</td>
+</tr>
+<tr><td>colormap</td>
+<td>PixelPacket *</td>
+<td>PseudoColor palette array.</td>
+</tr>
+<tr><td>colors</td>
+<td>unsigned int</td>
+<td>The desired number of colors. Used by
+QuantizeImage().</td>
+</tr>
+<tr><td>colorspace</td>
+<td>ColorspaceType</td>
+<td>Image pixel interpretation.If the colorspace is
+RGB the pixels are red, green, blue. If matte is
+true, then red, green, blue, and index. If it is
+CMYK, the pixels are cyan, yellow, magenta, black.
+Otherwise the colorspace is ignored.</td>
+</tr>
+<tr><td>columns</td>
+<td>unsigned int</td>
+<td>Image width</td>
+</tr>
+<tr><td>compression</td>
+<td>CompressionType</td>
+<td>Image compresion type. The default is the
+compression type of the specified image file.</td>
+</tr>
+<tr><td>delay</td>
+<td>unsigned int</td>
+<td>Time in 1/100ths of a second (0 to 65535) which
+must expire before displaying the next image in an
+animated sequence. This option is useful for
+regulating the animation of a sequence of GIF
+images within Netscape.</td>
+</tr>
+<tr><td>depth</td>
+<td>unsigned int</td>
+<td>Image depth. Number of encoding bits per sample.
+Usually 8 or 16, but sometimes 10 or 12.</td>
+</tr>
+<tr><td>directory</td>
+<td>char *</td>
+<td>Tile names from within an image montage. Only
+valid after calling MontageImages() or reading a
+MIFF file which contains a directory.</td>
+</tr>
+<tr><td>dispose</td>
+<td>unsigned int</td>
+<td>GIF disposal method. This option is used to
+control how successive frames are rendered (how
+the preceding frame is disposed of) when creating
+a GIF animation.</td>
+</tr>
+<tr><td>exception</td>
+<td>ExceptionInfo</td>
+<td>Record of any error which occurred when updating
+image.</td>
+</tr>
+<tr><td>filename</td>
+<td>char
+[MaxTextExtent]</td>
+<td>Image file name to read or write.</td>
+</tr>
+<tr><td>filter</td>
+<td>FilterTypes</td>
+<td>Filter to use when resizing image. The reduction
+filter employed has a significant effect on the
+time required to resize an image and the resulting
+quality. The default filter is Lanczos which has
+been shown to produce high quality results when
+reducing most images.</td>
+</tr>
+<tr><td>fuzz</td>
+<td>int</td>
+<td>Colors within this distance are considered equal.
+A number of algorithms search for a target color.
+By default the color must be exact. Use this
+option to match colors that are close to the
+target color in RGB space.</td>
+</tr>
+<tr><td>gamma</td>
+<td>double</td>
+<td>Gamma level of the image. The same color image
+displayed on two different workstations may look
+different due to differences in the display
+monitor. Use gamma correction to adjust for this
+color difference.</td>
+</tr>
+<tr><td>geometry</td>
+<td>char *</td>
+<td>Preferred size of the image when encoding.</td>
+</tr>
+<tr><td>interlace</td>
+<td>InterlaceType</td>
+<td>The type of interlacing scheme (default
+NoInterlace). This option is used to specify the
+type of interlacing scheme for raw image formats
+such as RGB or YUV. NoInterlace means do not
+interlace, LineInterlace uses scanline
+interlacing, and PlaneInterlace uses plane
+interlacing. PartitionInterlace is like
+PlaneInterlace except the different planes are
+saved to individual files (e.g. image.R, image.G,
+and image.B). Use LineInterlace or PlaneInterlace
+to create an interlaced GIF or progressive JPEG
+image.</td>
+</tr>
+<tr><td>iterations</td>
+<td>unsigned int</td>
+<td>Number of iterations to loop an animation (e.g.
+Netscape loop extension) for.</td>
+</tr>
+<tr><td>magick</td>
+<td>char
+[MaxTextExtent]</td>
+<td>Image encoding format (e.g. "GIF").</td>
+</tr>
+<tr><td>magick_columns</td>
+<td>unsigned int</td>
+<td>Base image width (before transformations)</td>
+</tr>
+<tr><td>magick_filename</td>
+<td>char
+[MaxTextExtent]</td>
+<td>Base image filename (before transformations)</td>
+</tr>
+<tr><td>magick_rows</td>
+<td>unsigned int</td>
+<td>Base image height (before transformations)</td>
+</tr>
+<tr><td>matte</td>
+<td>unsigned int</td>
+<td>If non-zero, then the index member of pixels
+represents the alpha channel.</td>
+</tr>
+<tr><td>matte_color</td>
+<td>PixelPacket</td>
+<td>Image matte (transparent) color</td>
+</tr>
+<tr><td>montage</td>
+<td>char *</td>
+<td>Tile size and offset within an image montage. Only
+valid for montage images.</td>
+</tr>
+<tr><td>next</td>
+<td>struct _Image *</td>
+<td>Next image frame in sequence</td>
+</tr>
+<tr><td>offset</td>
+<td>int</td>
+<td>Number of initial bytes to skip over when reading
+raw image.</td>
+</tr>
+<tr><td>orientation</td>
+<td>OrientationType</td>
+<td>Orientation of the image. Specifies scanline
+orientation and starting coordinate of image.</td>
+</tr>
+<tr><td>page</td>
+<td>RectangleInfo</td>
+<td>Equivalent size of Postscript page.</td>
+</tr>
+<tr><td>previous</td>
+<td>struct _Image *</td>
+<td>Previous image frame in sequence.</td>
+</tr>
+<tr><td>rendering_intent</td>
+<td>RenderingIntent</td>
+<td>The type of rendering intent.</td>
+</tr>
+<tr><td>rows</td>
+<td>unsigned int</td>
+<td>Image height</td>
+</tr>
+<tr><td>scene</td>
+<td>unsigned int</td>
+<td>Image frame scene number.</td>
+</tr>
+<tr><td>storage_class</td>
+<td>ClassType</td>
+<td>Image storage class. If DirectClass then the image
+packets contain valid RGB or CMYK colors. If
+PseudoClass then the image has a colormap
+referenced by pixel's index member.</td>
+</tr>
+<tr><td>tile_info</td>
+<td>RectangleInfo</td>
+<td>Describes a tile within an image. For example, if
+your images is 640x480 you may only want 320x256
+with an offset of +128+64. It is used for raw
+formats such as RGB and CMYK as well as for TIFF.</td>
+</tr>
+<tr><td>timer</td>
+<td>TimerInfo</td>
+<td>Support for measuring actual (user + system) and
+elapsed execution time.</td>
+</tr>
+<tr><td>total_colors</td>
+<td>unsigned long</td>
+<td>The number of colors in the image after
+QuantizeImage(), or QuantizeImages() if the
+verbose flag was set before the call. Calculated
+by GetNumberColors().</td>
+</tr>
+<tr><td>units</td>
+<td>ResolutionType</td>
+<td>Units of image resolution</td>
+</tr>
+<tr><td>x_resolution</td>
+<td>double</td>
+<td>Horizontal resolution of the image</td>
+</tr>
+<tr><td>y_resolution</td>
+<td>double</td>
+<td>Vertical resolution of the image</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="imageinfo">
+<h1><a class="toc-backref" href="#id25">ImageInfo</a></h1>
+<p>The ImageInfo structure is used to supply option information to the
+functions AllocateImage(), AnimateImages(), BlobToImage(),
+CloneAnnotateInfo(), DisplayImages(), GetAnnotateInfo(), ImageToBlob(),
+PingImage(), ReadImage(), ReadImages(), and, WriteImage(). These
+functions update information in ImageInfo to reflect attributes of the
+current image.</p>
+<p>Use CloneImageInfo() to duplicate an existing ImageInfo structure or
+allocate a new one. Use DestroyImageInfo() to deallocate memory
+associated with an ImageInfo structure. Use GetImageInfo() to initialize
+an existing ImageInfo structure. Use SetImageInfo() to set image type
+information in the ImageInfo structure based on an existing image.</p>
+<p>The members of the ImageInfo structure are shown in the following table:</p>
+<table border="1" class="docutils">
+<caption>ImageInfo Structure Members</caption>
+<colgroup>
+<col width="16%" />
+<col width="15%" />
+<col width="68%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Member</td>
+<td>Type</td>
+<td>Description</td>
+</tr>
+<tr><td>adjoin</td>
+<td>unsigned int</td>
+<td>Join images into a single multi-image file.</td>
+</tr>
+<tr><td>antialias</td>
+<td>unsigned int</td>
+<td>Control antialiasing of rendered Postscript and Postscript or
+TrueType fonts. Enabled by default.</td>
+</tr>
+<tr><td>background_color</td>
+<td>PixelPacket</td>
+<td>Image background color.</td>
+</tr>
+<tr><td>border_color</td>
+<td>PixelPacket</td>
+<td>Image border color.</td>
+</tr>
+<tr><td>colorspace</td>
+<td>ColorspaceType</td>
+<td>Image pixel interpretation.If the colorspace is RGB the pixels are
+red, green, blue. If matte is true, then red, green, blue, and
+index. If it is CMYK, the pixels are cyan, yellow, magenta, black.
+Otherwise the colorspace is ignored.</td>
+</tr>
+<tr><td>compression</td>
+<td>CompressionType</td>
+<td>Image compresion type. The default is the compression type of the
+specified image file.</td>
+</tr>
+<tr><td>delay</td>
+<td>char *</td>
+<td>Time in 1/100ths of a second (0 to 65535) which must expire before
+displaying the next image in an animated sequence. This option is
+useful for regulating the animation of a sequence of GIF images
+within Netscape.</td>
+</tr>
+<tr><td>density</td>
+<td>char *</td>
+<td>Vertical and horizontal resolution in pixels of the image. This
+option specifies an image density when decoding a Postscript or
+Portable Document page. Often used with page.</td>
+</tr>
+<tr><td>depth</td>
+<td>unsigned int</td>
+<td>Image depth (8 or 16). QuantumLeap must be defined before a depth
+of 16 is valid.</td>
+</tr>
+<tr><td>dispose</td>
+<td>char *</td>
+<td>GIF disposal method. This option is used to control how successive
+frames are rendered (how the preceding frame is disposed of) when
+creating a GIF animation.</td>
+</tr>
+<tr><td>dither</td>
+<td>unsigned int</td>
+<td>Apply Floyd/Steinberg error diffusion to the image. The basic
+strategy of dithering is to trade intensity resolution for spatial
+resolution by averaging the intensities of several neighboring
+pixels. Images which suffer from severe contouring when reducing
+colors can be improved with this option. The colors or monochrome
+option must be set for this option to take effect.</td>
+</tr>
+<tr><td>file</td>
+<td>FILE *</td>
+<td>Stdio stream to read image from or write image to. If set,
+ImageMagick will read from or write to the stream rather than
+opening a file. Used by ReadImage() and WriteImage(). The stream is
+closed when the operation completes.</td>
+</tr>
+<tr><td>filename</td>
+<td>char
+[MaxTextExtent]</td>
+<td>Image file name to read or write.</td>
+</tr>
+<tr><td>fill</td>
+<td>PixelPacket</td>
+<td>Drawing object fill color.</td>
+</tr>
+<tr><td>font</td>
+<td>char *</td>
+<td>Text rendering font. If the font is a fully qualified X server font
+name, the font is obtained from an X server. To use a TrueType
+font, precede the TrueType filename with an @. Otherwise, specify a
+Postscript font name (e.g. "helvetica").</td>
+</tr>
+<tr><td>fuzz</td>
+<td>int</td>
+<td>Colors within this distance are considered equal. A number of
+algorithms search for a target color. By default the color must be
+exact. Use this option to match colors that are close to the target
+color in RGB space.</td>
+</tr>
+<tr><td>interlace</td>
+<td>InterlaceType</td>
+<td>The type of interlacing scheme (default NoInterlace). This option
+is used to specify the type of interlacing scheme for raw image
+formats such as RGB or YUV. NoInterlace means do not interlace,
+LineInterlace uses scanline interlacing, and PlaneInterlace uses
+plane interlacing. PartitionInterlace is like PlaneInterlace except
+the different planes are saved to individual files (e.g. image.R,
+image.G, and image.B). Use LineInterlace or PlaneInterlace to
+create an interlaced GIF or progressive JPEG image.</td>
+</tr>
+<tr><td>iterations</td>
+<td>char *</td>
+<td>Number of iterations to loop an animation (e.g. Netscape loop
+extension) for.</td>
+</tr>
+<tr><td>linewidth</td>
+<td>unsigned int</td>
+<td>Line width for drawing lines, circles, ellipses, etc.</td>
+</tr>
+<tr><td>magick</td>
+<td>char
+[MaxTextExtent]</td>
+<td>Image encoding format (e.g. "GIF").</td>
+</tr>
+<tr><td>matte_color</td>
+<td>PixelPacket</td>
+<td>Image matte (transparent) color.</td>
+</tr>
+<tr><td>monochrome</td>
+<td>unsigned int</td>
+<td>Transform the image to black and white.</td>
+</tr>
+<tr><td>page</td>
+<td>char *</td>
+<td>Equivalent size of Postscript page.</td>
+</tr>
+<tr><td>ping</td>
+<td>unsigned int</td>
+<td>Set to True to read enough of the image to determine the image
+columns, rows, and filesize. The columns, rows, and size attributes
+are valid after invoking ReadImage() while ping is set. The image
+data is not valid after calling ReadImage() if ping is set.</td>
+</tr>
+<tr><td>pointsize</td>
+<td>double</td>
+<td>Text rendering font point size.</td>
+</tr>
+<tr><td>preview_type</td>
+<td>PreviewType</td>
+<td>Image manipulation preview option. Used by 'display'.</td>
+</tr>
+<tr><td>quality</td>
+<td>unsigned int</td>
+<td>JPEG/MIFF/PNG compression level (default 75).</td>
+</tr>
+<tr><td>server_name</td>
+<td>char *</td>
+<td>X11 display to display to obtain fonts from, or to capture image
+from.</td>
+</tr>
+<tr><td>size</td>
+<td>char *</td>
+<td>Width and height of a raw image (an image which does not support
+width and height information). Size may also be used to affect the
+image size read from a multi-resolution format (e.g. Photo CD,
+JBIG, or JPEG.</td>
+</tr>
+<tr><td>stroke</td>
+<td>PixelPacket</td>
+<td>Drawing object outline color.</td>
+</tr>
+<tr><td>subimage</td>
+<td>unsigned int</td>
+<td>Subimage of an image sequence.</td>
+</tr>
+<tr><td>subrange</td>
+<td>unsigned int</td>
+<td>Number of images relative to the base image.</td>
+</tr>
+<tr><td>texture</td>
+<td>char *</td>
+<td>Image filename to use as background texture.</td>
+</tr>
+<tr><td>tile</td>
+<td>char *</td>
+<td>Tile name.</td>
+</tr>
+<tr><td>units</td>
+<td>ResolutionType</td>
+<td>Units of image resolution.</td>
+</tr>
+<tr><td>verbose</td>
+<td>unsigned int</td>
+<td>Print detailed information about the image if True.</td>
+</tr>
+<tr><td>view</td>
+<td>char *</td>
+<td>FlashPix viewing parameters.</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="imagetype">
+<h1><a class="toc-backref" href="#id26">ImageType</a></h1>
+<p>ImageType indicates the type classification of the image.</p>
+<table border="1" class="docutils">
+<caption>ImageType</caption>
+<colgroup>
+<col width="31%" />
+<col width="69%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Description</td>
+</tr>
+<tr><td>UndefinedType</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>BilevelType</td>
+<td>Monochrome image</td>
+</tr>
+<tr><td>GrayscaleType</td>
+<td>Grayscale image</td>
+</tr>
+<tr><td>PaletteType</td>
+<td>Indexed color (palette) image</td>
+</tr>
+<tr><td>PaletteMatteType</td>
+<td>Indexed color (palette) image with opacity</td>
+</tr>
+<tr><td>TrueColorType</td>
+<td>Truecolor image</td>
+</tr>
+<tr><td>TrueColorMatteType</td>
+<td>Truecolor image with opacity</td>
+</tr>
+<tr><td>ColorSeparationType</td>
+<td>Cyan/Yellow/Magenta/Black (CYMK) image</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="indexpacket">
+<h1><a class="toc-backref" href="#id27">IndexPacket</a></h1>
+<p>IndexPacket is the type used for a colormap index. An array of type
+IndexPacket is used to represent an image in PseudoClass type. Currently
+supported IndexPacket underlying types are 'unsigned char' and 'unsigned
+short'. The type is selected at build time according to the QuantumDepth
+setting.</p>
+</div>
+<div class="section" id="interlacetype">
+<h1><a class="toc-backref" href="#id28">InterlaceType</a></h1>
+<p>InterlaceType specifies the ordering of the red, green, and blue pixel
+information in the image. Interlacing is usually used to make image
+information available to the user faster by taking advantage of the space
+vs time tradeoff. For example, interlacing allows images on the Web to be
+recognizable sooner and satellite images to accumulate/render with image
+resolution increasing over time.</p>
+<p>Use LineInterlace or PlaneInterlace to create an interlaced GIF or
+progressive JPEG image.</p>
+<table border="1" class="docutils">
+<caption>InterlaceType</caption>
+<colgroup>
+<col width="19%" />
+<col width="81%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Description</td>
+</tr>
+<tr><td>UndefinedInterlace</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>NoInterlace</td>
+<td>Don't interlace image (RGBRGBRGBRGBRGBRGB...)</td>
+</tr>
+<tr><td>LineInterlace</td>
+<td>Use scanline interlacing (RRR...GGG...BBB...RRR...GGG...BBB...)</td>
+</tr>
+<tr><td>PlaneInterlace</td>
+<td>Use plane interlacing (RRRRRR...GGGGGG...BBBBBB...)</td>
+</tr>
+<tr><td>PartitionInterlace</td>
+<td>Similar to plane interlaing except that the different planes are saved to
+individual files (e.g. image.R, image.G, and image.B)</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="layertype">
+<h1><a class="toc-backref" href="#id29">LayerType</a></h1>
+<p>LayerType is used as an argument when doing color separations. Use
+LayerType when extracting a layer from an image. MatteLayer is useful for
+extracting the opacity values from an image.</p>
+<table border="1" class="docutils">
+<caption>LayerType</caption>
+<colgroup>
+<col width="28%" />
+<col width="72%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Description</td>
+</tr>
+<tr><td>UndefinedLayer</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>RedLayer</td>
+<td>Select red layer</td>
+</tr>
+<tr><td>GreenLayer</td>
+<td>Select green layer</td>
+</tr>
+<tr><td>BlueLayer</td>
+<td>Select blue layer</td>
+</tr>
+<tr><td>MatteLayer</td>
+<td>Select matte (opacity values) layer</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="magickinfo">
+<h1><a class="toc-backref" href="#id30">MagickInfo</a></h1>
+<p>The MagickInfo structure is used by GraphicsMagick to register support
+for an image format. The MagickInfo structure is allocated with default
+parameters by calling SetMagickInfo(). Image formats are registered by
+calling RegisterMagickInfo() which adds the initial structure to a linked
+list (at which point it is owned by the list). A pointer to the structure
+describing a format may be obtained by calling GetMagickInfo(). Pass the
+argument NULL to obtain the first member of this list. A human-readable
+list of registered image formats may be printed to a file descriptor by
+calling ListMagickInfo().</p>
+<p>Support for formats may be provided as a module which is part of the
+GraphicsMagick library, provided by a module which is loaded dynamically
+at run-time, or directly by the linked program. Users of GraphicsMagick
+will normally want to create a loadable-module, or support encode/decode
+of an image format directly from within their program.</p>
+<p>Sample Module:</p>
+<p>The following shows sample code for a module called "GIF" (gif.c). Note
+that the names of the Register and Unregister call-back routines are
+calculated at run-time, and therefore must follow the rigid naming scheme
+RegisterFORMATImage and UnregisterFORMATImage, respectively, where FORMAT
+is the upper-cased name of the module file:</p>
+<pre class="literal-block">
+/* Read image */
+Image *ReadGIFImage(const ImageInfo *image_info)
+{
+ [ decode the image ... ]
+}
+
+/* Write image */
+unsigned int WriteGIFImage(const ImageInfo *image_info,Image *image)
+{
+ [ encode the image ... ]
+}
+
+/* Module call-back to register support for formats */
+void RegisterGIFImage(void)
+{
+ MagickInfo *entry;
+ entry=SetMagickInfo("GIF");
+ entry->decoder=ReadGIFImage;
+ entry->encoder=WriteGIFImage;
+ entry->description="CompuServe graphics interchange format";
+ entry->module="GIF";
+ RegisterMagickInfo(entry);
+
+ entry=SetMagickInfo("GIF87");
+ entry->decoder=ReadGIFImage;
+ entry->encoder=WriteGIFImage;
+ entry->adjoin=False;
+ entry->description="CompuServe graphics interchange format (version 87a)";
+ entry->module="GIF";
+ RegisterMagickInfo(entry);
+}
+
+/* Module call-back to unregister support for formats */
+Export void UnregisterGIFImage(void)
+{
+ UnregisterMagickInfo("GIF");
+ UnregisterMagickInfo("GIF87");
+}
+</pre>
+<p>Sample Application Code</p>
+<p>Image format support provided within the user's application does not need
+to implement the RegisterFORMATImage and UnregisterFORMATImage call-back
+routines. Instead, the application takes responsibility for the
+registration itself. An example follows:</p>
+<pre class="literal-block">
+/* Read image */
+Image *ReadGIFImage(const ImageInfo *image_info)
+{
+ [ decode the image ... ]
+}
+/* Write image */
+unsigned int WriteGIFImage(const ImageInfo *image_info,Image *image)
+{
+ [ encode the image ... ]
+}
+#include <stdio.h>
+int main( void )
+{
+ struct MagickInfo* info;
+ info = SetMagickInfo("GIF");
+ if ( info == (MagickInfo*)NULL )
+ exit(1);
+ info->decoder = ReadGIFImage;
+ info->encoder = WriteGIFImage;
+ info->adjoin = False;
+ info->description = "CompuServe graphics interchange format";
+ /* Add MagickInfo structure to list */
+ RegisterMagickInfo(info);
+ info = GetMagickInfo("GIF");
+ [ do something with info ... ]
+ ListMagickInfo( stdout );
+ return;
+}
+</pre>
+<p>MagickInfo Structure Definition</p>
+<p>The members of the MagickInfo structure are shown in the following table:</p>
+<table border="1" class="docutils">
+<caption>MagickInfo Structure Members</caption>
+<colgroup>
+<col width="12%" />
+<col width="20%" />
+<col width="67%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Member</td>
+<td>Type</td>
+<td>Description</td>
+</tr>
+<tr><td>adjoin</td>
+<td>unsigned int</td>
+<td>Set to non-zero (True) if this file format supports multi-frame
+images.</td>
+</tr>
+<tr><td>blob_support</td>
+<td>unsigned int</td>
+<td>Set to non-zero (True) if the encoder and decoder for this format
+supports operating on arbitrary BLOBs (rather than only disk
+files).</td>
+</tr>
+<tr><td>data</td>
+<td>void *</td>
+<td>User specified data. A way to pass any sort of data structure to
+the endoder/decoder. To set this, GetMagickInfo() must be called
+to first obtain a pointer to the registered structure since it can
+not be set via a RegisterMagickInfo() parameter.</td>
+</tr>
+<tr><td>decoder</td>
+<td>Image *(*decoder)
+(const ImageInfo
+*)</td>
+<td>Function to decode image data and return GraphicsMagick Image.</td>
+</tr>
+<tr><td>description</td>
+<td>char *</td>
+<td>Long form image format description (e.g. "CompuServe graphics
+interchange format").</td>
+</tr>
+<tr><td>encoder</td>
+<td>unsigned int
+(*encoder)(const
+ImageInfo *, Image
+*)</td>
+<td>Function to encode image data with options passed via ImageInfo
+and image represented by Image.</td>
+</tr>
+<tr><td>module</td>
+<td>char *</td>
+<td>Name of module (e.g. "GIF") which registered this format. Set to
+NULL if format is not registered by a module.</td>
+</tr>
+<tr><td>name</td>
+<td>const char *</td>
+<td>Magick string (e.g. "GIF") which identifies this format.</td>
+</tr>
+<tr><td>next</td>
+<td>MagickInfo</td>
+<td>Next MagickInfo struct in linked-list. NULL if none.</td>
+</tr>
+<tr><td>previous</td>
+<td>MagickInfo</td>
+<td>Previous MagickInfo struct in linked-list. NULL if none.</td>
+</tr>
+<tr><td>raw</td>
+<td>unsigned int</td>
+<td>Image format does not contain size (must be specified in
+ImageInfo).</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="monitorhandler">
+<h1><a class="toc-backref" href="#id31">MonitorHandler</a></h1>
+<p>MonitorHandler is the function type to be used for the progress monitor
+callback. Its definition is as follows:</p>
+<pre class="literal-block">
+typedef unsigned int
+ (*MonitorHandler)(const char *text, const magick_int64_t quantum,
+ const magick_uint64_t span, ExceptionInfo *exception);
+</pre>
+<p>The operation of the monitor handler is described in the following table:</p>
+<table border="1" class="docutils">
+<caption>MonitorHandler Parameters</caption>
+<colgroup>
+<col width="25%" />
+<col width="25%" />
+<col width="49%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Parameter</td>
+<td>Type</td>
+<td>Description</td>
+</tr>
+<tr><td>return status</td>
+<td>unsigned int</td>
+<td>The progress monitor should normally return
+True (a non-zero value) if the operation is
+to continue. If the progress monitor returns
+false, then the operation is will be aborted.
+This mechanism allows a user to terminate a
+process which is taking too long to complete.</td>
+</tr>
+<tr><td>text</td>
+<td>const char *</td>
+<td>A description of the current operation being
+performed.</td>
+</tr>
+<tr><td>quantum</td>
+<td>const magick_int64_t</td>
+<td>A value within the range of 0 to span which
+indicates the degree of progress.</td>
+</tr>
+<tr><td>span</td>
+<td>const magick_uint64_t</td>
+<td>The total range that quantum will span.</td>
+</tr>
+<tr><td>exception</td>
+<td>exceptionInfo *</td>
+<td>If the progress monitor returns False (abort
+operation), it should also update the
+structure passed via the exception parameter
+so that an error message may be reported to
+the user.</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="montageinfo">
+<h1><a class="toc-backref" href="#id32">MontageInfo</a></h1>
+<pre class="literal-block">
+typedef struct _MontageInfo
+{
+ char
+ *geometry,
+ *tile,
+ *title,
+ *frame,
+ *texture,
+ *font;
+
+ double
+ pointsize;
+
+ unsigned long
+ border_width;
+
+ unsigned int
+ shadow;
+
+ PixelPacket
+ fill,
+ stroke,
+ background_color,
+ border_color,
+ matte_color;
+
+ GravityType
+ gravity;
+
+ char
+ filename[MaxTextExtent];
+
+ unsigned long
+ signature;
+} MontageInfo;
+</pre>
+</div>
+<div class="section" id="noisetype">
+<h1><a class="toc-backref" href="#id33">NoiseType</a></h1>
+<p>NoiseType is used as an argument to select the type of noise to be added
+to the image.</p>
+<table border="1" class="docutils">
+<caption>NoiseType</caption>
+<colgroup>
+<col width="48%" />
+<col width="52%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Description</td>
+</tr>
+<tr><td>UniformNoise</td>
+<td>Uniform noise</td>
+</tr>
+<tr><td>GaussianNoise</td>
+<td>Gaussian noise</td>
+</tr>
+<tr><td>MultiplicativeGaussianNoise</td>
+<td>Multiplicative Gaussian noise</td>
+</tr>
+<tr><td>ImpulseNoise</td>
+<td>Impulse noise</td>
+</tr>
+<tr><td>LaplacianNoise</td>
+<td>Laplacian noise</td>
+</tr>
+<tr><td>PoissonNoise</td>
+<td>Poisson noise</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="orientationtype">
+<h1><a class="toc-backref" href="#id34">OrientationType</a></h1>
+<p>OrientationType specifies the orientation of the image. Useful for when
+the image is produced via a different ordinate system, the camera was
+turned on its side, or the page was scanned sideways.</p>
+<table border="1" class="docutils">
+<caption>OrientationType</caption>
+<colgroup>
+<col width="25%" />
+<col width="29%" />
+<col width="45%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Scanline Direction</td>
+<td>Frame Direction</td>
+</tr>
+<tr><td>UndefinedOrientation</td>
+<td>Unknown</td>
+<td>Unknown</td>
+</tr>
+<tr><td>TopLeftOrientation</td>
+<td>Left to right</td>
+<td>Top to bottom</td>
+</tr>
+<tr><td>TopRightOrientation</td>
+<td>Right to left</td>
+<td>Top to bottom</td>
+</tr>
+<tr><td>BottomRightOrientation</td>
+<td>Right to left</td>
+<td>Bottom to top</td>
+</tr>
+<tr><td>BottomLeftOrientation</td>
+<td>Left to right</td>
+<td>Bottom to top</td>
+</tr>
+<tr><td>LeftTopOrientation</td>
+<td>Top to bottom</td>
+<td>Left to right</td>
+</tr>
+<tr><td>RightTopOrientation</td>
+<td>Top to bottom</td>
+<td>Right to left</td>
+</tr>
+<tr><td>RightBottomOrientation</td>
+<td>Bottom to top</td>
+<td>Right to left</td>
+</tr>
+<tr><td>LeftBottomOrientation</td>
+<td>Bottom to top</td>
+<td>Left to right</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="paintmethod">
+<h1><a class="toc-backref" href="#id35">PaintMethod</a></h1>
+<p>PaintMethod specifies how pixel colors are to be replaced in the image.
+It is used to select the pixel-filling algorithm employed.</p>
+<table border="1" class="docutils">
+<caption>PaintMethod</caption>
+<colgroup>
+<col width="19%" />
+<col width="81%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Description</td>
+</tr>
+<tr><td>PointMethod</td>
+<td>Replace pixel color at point.</td>
+</tr>
+<tr><td>ReplaceMethod</td>
+<td>Replace color for all image pixels matching color at point.</td>
+</tr>
+<tr><td>FloodfillMethod</td>
+<td>Replace color for pixels surrounding point until encountering pixel that fails
+to match color at point.</td>
+</tr>
+<tr><td>FillToBorderMethod</td>
+<td>Replace color for pixels surrounding point until encountering pixels matching
+border color.</td>
+</tr>
+<tr><td>ResetMethod</td>
+<td>Replace colors for all pixels in image with pen color.</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="pixelpacket">
+<h1><a class="toc-backref" href="#id36">PixelPacket</a></h1>
+<p>The PixelPacket structure is used to represent DirectClass color pixels
+in GraphicsMagick. If the image is indicated as a PseudoClass image, its
+DirectClass representation is only valid immediately after calling
+SyncImage(). If an image is set as PseudoClass and the DirectClass
+representation is modified, the image should then be set as DirectClass.
+Use QuantizeImage() to restore the PseudoClass colormap if the
+DirectClass representation is modified.</p>
+<p>The members of the PixelPacket structure are shown in the following table:</p>
+<table border="1" class="docutils">
+<caption>PixelPacket Structure Members</caption>
+<colgroup>
+<col width="11%" />
+<col width="10%" />
+<col width="24%" />
+<col width="33%" />
+<col width="23%" />
+</colgroup>
+<tbody valign="top">
+<tr><td rowspan="2">Member</td>
+<td rowspan="2">Type</td>
+<td colspan="3">Interpretation</td>
+</tr>
+<tr><td>RGBColorspace (3)</td>
+<td>RGBColorspace + matte(3)</td>
+<td>CMYKColorspace</td>
+</tr>
+<tr><td>red</td>
+<td>Quantum</td>
+<td>Red</td>
+<td>Red</td>
+<td>Cyan</td>
+</tr>
+<tr><td>green</td>
+<td>Quantum</td>
+<td>Green</td>
+<td>Green</td>
+<td>Magenta</td>
+</tr>
+<tr><td>blue</td>
+<td>Quantum</td>
+<td>Blue</td>
+<td>Blue</td>
+<td>Yellow</td>
+</tr>
+<tr><td>opacity</td>
+<td>Quantum</td>
+<td>Ignored</td>
+<td>Opacity</td>
+<td>Black</td>
+</tr>
+</tbody>
+</table>
+<p>Notes:</p>
+<blockquote>
+<ol class="arabic simple">
+<li>Quantum is an unsigned short (MaxRGB=65535) if GraphicsMagick is
+built using -DQuantumDepth=16 Otherwise it is an unsigned char
+(MaxRGB=255).</li>
+<li>SyncImage() may be used to synchronize the DirectClass color pixels
+to the current PseudoClass colormap.</li>
+<li>For pixel representation purposes, all colorspaces are treated like
+RGBColorspace except for CMYKColorspace.</li>
+</ol>
+</blockquote>
+</div>
+<div class="section" id="pointinfo">
+<h1><a class="toc-backref" href="#id37">PointInfo</a></h1>
+<p>The PointInfo structure is used by the ChromaticityInfo structure to
+specify chromaticity point values. This defines the boundaries and gammut
+(range of included color) of the colorspace.</p>
+<p>The members of the PointInfo structure are shown in the following table:</p>
+<table border="1" class="docutils">
+<caption>PointInfo Structure Members</caption>
+<colgroup>
+<col width="31%" />
+<col width="25%" />
+<col width="44%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Member</td>
+<td>Type</td>
+<td>Description</td>
+</tr>
+<tr><td>x</td>
+<td>double</td>
+<td>X ordinate</td>
+</tr>
+<tr><td>y</td>
+<td>double</td>
+<td>Y ordinate</td>
+</tr>
+<tr><td>z</td>
+<td>double</td>
+<td>Z ordinate</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="profileinfo">
+<h1><a class="toc-backref" href="#id38">ProfileInfo</a></h1>
+<p>The ProfileInfo structure is used to represent ICC or IPCT profiles in
+GraphicsMagick (stored as an opaque BLOB).</p>
+<p>The members of the ProfileInfo structure are shown in the following table:</p>
+<table border="1" class="docutils">
+<caption>ProfileInfo Structure Members</caption>
+<colgroup>
+<col width="24%" />
+<col width="40%" />
+<col width="36%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Member</td>
+<td>Type</td>
+<td>Description</td>
+</tr>
+<tr><td>length</td>
+<td>unsigned int</td>
+<td>Profile length</td>
+</tr>
+<tr><td>info</td>
+<td>unsigned char *</td>
+<td>Profile data</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="quantizeinfo">
+<h1><a class="toc-backref" href="#id39">QuantizeInfo</a></h1>
+<p>The QuantizeInfo structure is used to support passing parameters to
+GraphicsMagick's color quantization (reduction) functions. Color
+quantization is the process of analyzing one or more images, and
+calculating a color palette which best approximates the image within a
+specified colorspace, and then adjusting the image pixels to use the
+calculated color palette. The maximum number of colors allowed in the
+color palette may be specified.</p>
+<table border="1" class="docutils">
+<caption>Methods Supporting QuantizeInfo</caption>
+<colgroup>
+<col width="20%" />
+<col width="80%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Method</td>
+<td>Description</td>
+</tr>
+<tr><td>GetQuantizeInfo()</td>
+<td>Allocate new structure with defaults set.</td>
+</tr>
+<tr><td>CloneQuantizeInfo()</td>
+<td>Copy existing structure, allocating new structure in the process.</td>
+</tr>
+<tr><td>DestroyQuantizeInfo
+()</td>
+<td>Deallocate structure, including any members.</td>
+</tr>
+<tr><td>QuantizeImage</td>
+<td>Analyzes the colors within a reference image and chooses a fixed number of
+colors to represent the image.</td>
+</tr>
+<tr><td>QuantizeImages</td>
+<td>Analyzes the colors within a set of reference images and chooses a fixed
+number of colors to represent the set.</td>
+</tr>
+</tbody>
+</table>
+<table border="1" class="docutils">
+<caption>QuantizeInfo Structure Members</caption>
+<colgroup>
+<col width="13%" />
+<col width="14%" />
+<col width="72%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Member</td>
+<td>Type</td>
+<td>Description</td>
+</tr>
+<tr><td>colorspace</td>
+<td>ColorspaceType</td>
+<td>The colorspace to quantize in. Color reduction, by default, takes
+place in the RGB color space. Empirical evidence suggests that
+distances in color spaces such as YUV or YIQ correspond to
+perceptual color differences more closely than do distances in RGB
+space. The Transparent color space behaves uniquely in that it
+preserves the matte channel of the image if it exists.</td>
+</tr>
+<tr><td>dither</td>
+<td>unsigned int</td>
+<td>Set to True (non-zero) to apply Floyd/Steinberg error diffusion to the
+image. When the size of the color palette is less than the image
+colors, this trades off spacial resolution for color resolution by
+dithering to achieve a similar looking image.</td>
+</tr>
+<tr><td>measure_error</td>
+<td>unsigned int</td>
+<td>Set to True (non-zero) to calculate quantization errors when
+quantizing the image.</td>
+</tr>
+<tr><td>number_colors</td>
+<td>unsigned int</td>
+<td>Specify the maximum number of colors in the output image. Must be
+equal to, or less than MaxRGB, which is determined by the value of
+QuantumLeap when GraphicsMagick was compiled.</td>
+</tr>
+<tr><td>signature</td>
+<td>unsigned long</td>
+<td>???</td>
+</tr>
+<tr><td>tree_depth</td>
+<td>unsigned int</td>
+<td>Specify the tree depth to use while quantizing. The values zero and
+one support automatic tree depth determination. The tree depth may be
+forced via values ranging from two to eight. The ideal tree depth
+depends on the characteristics of the input image, and may be
+determined through experimentation.</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="quantum">
+<h1><a class="toc-backref" href="#id40">Quantum</a></h1>
+<p>Quantum is the base type ('unsigned char', 'unsigned short', 'unsigned
+int') used to store a pixel component (e.g. 'R' is one pixel component of
+an RGB pixel).</p>
+</div>
+<div class="section" id="quantumtype">
+<h1><a class="toc-backref" href="#id41">QuantumType</a></h1>
+<p>QuantumType is used to indicate the source or destination format of
+entire pixels, or components of pixels ("Quantums") while they are being
+read, or written to, a pixel cache. The validity of these format
+specifications depends on whether the Image pixels are in RGB format,
+RGBA format, or CMYK format. The pixel Quantum size is determined by the
+Image depth (eight or sixteen bits).</p>
+<table border="1" class="docutils">
+<caption>RGB(A) Image Quantums</caption>
+<colgroup>
+<col width="18%" />
+<col width="82%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Description</td>
+</tr>
+<tr><td>IndexQuantum</td>
+<td>PseudoColor colormap indices (valid only for image with colormap)</td>
+</tr>
+<tr><td>RedQuantum</td>
+<td>Red pixel Quantum</td>
+</tr>
+<tr><td>GreenQuantum</td>
+<td>Green pixel Quantum</td>
+</tr>
+<tr><td>BlueQuantum</td>
+<td>Blue pixel Quantum</td>
+</tr>
+<tr><td>OpacityQuantum</td>
+<td>Opacity (Alpha) Quantum</td>
+</tr>
+</tbody>
+</table>
+<table border="1" class="docutils">
+<caption>CMY(K) Image Quantum</caption>
+<colgroup>
+<col width="40%" />
+<col width="60%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Description</td>
+</tr>
+<tr><td>CyanQuantum</td>
+<td>Cyan pixel Quantum</td>
+</tr>
+<tr><td>MagentaQuantum</td>
+<td>Magenta pixel Quantum</td>
+</tr>
+<tr><td>YellowQuantum</td>
+<td>Yellow pixel Quantum</td>
+</tr>
+<tr><td>BlackQuantum</td>
+<td>Black pixel Quantum</td>
+</tr>
+</tbody>
+</table>
+<table border="1" class="docutils">
+<caption>Grayscale Image Quantums</caption>
+<colgroup>
+<col width="58%" />
+<col width="42%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Description</td>
+</tr>
+<tr><td>GrayQuantum</td>
+<td>Gray pixel</td>
+</tr>
+<tr><td>GrayOpacityQuantum</td>
+<td>Pixel opacity</td>
+</tr>
+</tbody>
+</table>
+<table border="1" class="docutils">
+<caption>Entire Pixels (Expressed in Byte Order)</caption>
+<colgroup>
+<col width="28%" />
+<col width="72%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Description</td>
+</tr>
+<tr><td>RGBQuantum</td>
+<td>RGB pixel (24 or 48 octets)</td>
+</tr>
+<tr><td>RGBAQuantum</td>
+<td>RGBA pixel (32 or 64 octets)</td>
+</tr>
+<tr><td>CMYKQuantum</td>
+<td>CMYK pixel (32 or 64 octets)</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="rectangleinfo">
+<h1><a class="toc-backref" href="#id42">RectangleInfo</a></h1>
+<p>The RectangleInfo structure is used to represent positioning information
+in GraphicsMagick.</p>
+<p>The members of the RectangleInfo structure are shown in the following
+table:</p>
+<table border="1" class="docutils">
+<caption>RectangleInfo Structure Members</caption>
+<colgroup>
+<col width="20%" />
+<col width="25%" />
+<col width="55%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Member</td>
+<td>Type</td>
+<td>Description</td>
+</tr>
+<tr><td>width</td>
+<td>unsigned int</td>
+<td>Rectangle width</td>
+</tr>
+<tr><td>height</td>
+<td>unsigned int</td>
+<td>Rectangle height</td>
+</tr>
+<tr><td>x</td>
+<td>int</td>
+<td>Rectangle horizontal offset</td>
+</tr>
+<tr><td>y</td>
+<td>int</td>
+<td>Rectangle vertical offset</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="registrytype">
+<h1><a class="toc-backref" href="#id43">RegistryType</a></h1>
+<pre class="literal-block">
+typedef enum
+{
+ UndefinedRegistryType,
+ ImageRegistryType,
+ ImageInfoRegistryType
+} RegistryType;
+</pre>
+</div>
+<div class="section" id="renderingintent">
+<h1><a class="toc-backref" href="#id44">RenderingIntent</a></h1>
+<p>Rendering intent is a concept defined by ICC Spec ICC.1:1998-09, "File
+Format for Color Profiles". GraphicsMagick uses RenderingIntent in order
+to support ICC Color Profiles.</p>
+<p>From the specification: "Rendering intent specifies the style of
+reproduction to be used during the evaluation of this profile in a
+sequence of profiles. It applies specifically to that profile in the
+sequence and not to the entire sequence. Typically, the user or
+application will set the rendering intent dynamically at runtime or
+embedding time."</p>
+<table border="1" class="docutils">
+<caption>RenderingIntent</caption>
+<colgroup>
+<col width="17%" />
+<col width="83%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Description</td>
+</tr>
+<tr><td>UndefinedIntent</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>SaturationIntent</td>
+<td>A rendering intent that specifies the saturation of the pixels in the image is
+preserved perhaps at the expense of accuracy in hue and lightness.</td>
+</tr>
+<tr><td>PerceptualIntent</td>
+<td>A rendering intent that specifies the full gamut of the image is compressed or
+expanded to fill the gamut of the destination device. Gray balance is preserved
+but colorimetric accuracy might not be preserved.</td>
+</tr>
+<tr><td>AbsoluteIntent</td>
+<td>Absolute colorimetric</td>
+</tr>
+<tr><td>RelativeIntent</td>
+<td>Relative colorimetric</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="resolutiontype">
+<h1><a class="toc-backref" href="#id45">ResolutionType</a></h1>
+<p>By default, GraphicsMagick defines resolutions in pixels per inch.
+ResolutionType provides a means to adjust this.</p>
+<table border="1" class="docutils">
+<caption>ResolutionType</caption>
+<colgroup>
+<col width="30%" />
+<col width="70%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Enumeration</td>
+<td>Description</td>
+</tr>
+<tr><td>UndefinedResolution</td>
+<td>Unset value.</td>
+</tr>
+<tr><td>PixelsPerInchResolution</td>
+<td>Density specifications are specified in units of pixels per inch
+(english units).</td>
+</tr>
+<tr><td>PixelsPerCentimeterResolution</td>
+<td>Density specifications are specified in units of pixels per
+centimeter (metric units).</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="resourcetype">
+<h1><a class="toc-backref" href="#id46">ResourceType</a></h1>
+<pre class="literal-block">
+typedef enum
+{
+ UndefinedResource,
+ FileResource,
+ MemoryResource,
+ MapResource,
+ DiskResource
+} ResourceType;
+</pre>
+</div>
+<div class="section" id="segmentinfo">
+<h1><a class="toc-backref" href="#id47">SegmentInfo</a></h1>
+<pre class="literal-block">
+typedef struct _SegmentInfo
+{
+ double
+ x1,
+ y1,
+ x2,
+ y2;
+} SegmentInfo;
+</pre>
+</div>
+<div class="section" id="signatureinfo">
+<h1><a class="toc-backref" href="#id48">SignatureInfo</a></h1>
+<pre class="literal-block">
+typedef struct _SignatureInfo
+{
+ unsigned long
+ digest[8],
+ low_order,
+ high_order;
+
+ long
+ offset;
+
+ unsigned char
+ message[SignatureSize];
+} SignatureInfo;
+</pre>
+</div>
+<div class="section" id="storagetype">
+<h1><a class="toc-backref" href="#id49">StorageType</a></h1>
+<pre class="literal-block">
+typedef enum
+{
+ CharPixel,
+ ShortPixel,
+ IntegerPixel,
+ LongPixel,
+ FloatPixel,
+ DoublePixel
+} StorageType;
+</pre>
+</div>
+<div class="section" id="streamhandler">
+<h1><a class="toc-backref" href="#id50">StreamHandler</a></h1>
+<pre class="literal-block">
+typedef unsigned int
+ (*StreamHandler)(const Image *,const void *,const size_t);
+</pre>
+</div>
+<div class="section" id="stretchtype">
+<h1><a class="toc-backref" href="#id51">StretchType</a></h1>
+<pre class="literal-block">
+typedef enum
+{
+ NormalStretch,
+ UltraCondensedStretch,
+ ExtraCondensedStretch,
+ CondensedStretch,
+ SemiCondensedStretch,
+ SemiExpandedStretch,
+ ExpandedStretch,
+ ExtraExpandedStretch,
+ UltraExpandedStretch,
+ AnyStretch
+} StretchType;
+</pre>
+</div>
+<div class="section" id="styletype">
+<h1><a class="toc-backref" href="#id52">StyleType</a></h1>
+<pre class="literal-block">
+typedef enum
+{
+ NormalStyle,
+ ItalicStyle,
+ ObliqueStyle,
+ AnyStyle
+} StyleType;
+</pre>
+</div>
+<div class="section" id="typemetric">
+<h1><a class="toc-backref" href="#id53">TypeMetric</a></h1>
+<pre class="literal-block">
+typedef struct _TypeMetric
+{
+ PointInfo
+ pixels_per_em;
+
+ double
+ ascent,
+ descent,
+ width,
+ height,
+ max_advance;
+
+ SegmentInfo
+ bounds;
+
+ double
+ underline_position,
+ underline_thickness;
+} TypeMetric;
+</pre>
+</div>
+<div class="section" id="viewinfo">
+<h1><a class="toc-backref" href="#id54">ViewInfo</a></h1>
+<p>ViewInfo represents a handle to a pixel view, which represents a uniquely
+selectable rectangular region of pixels. The only limit on the number of
+views is the amount of available memory. Each Image contains a collection
+of default views (one view per thread) so that the image may be usefully
+accessed without needing to explicitly allocate pixel views.</p>
+<pre class="literal-block">
+typedef void *ViewInfo;
+</pre>
+</div>
+<div class="section" id="virtualpixelmethod">
+<h1><a class="toc-backref" href="#id55">VirtualPixelMethod</a></h1>
+<pre class="literal-block">
+typedef enum
+{
+ UndefinedVirtualPixelMethod,
+ ConstantVirtualPixelMethod,
+ EdgeVirtualPixelMethod,
+ MirrorVirtualPixelMethod,
+ TileVirtualPixelMethod
+} VirtualPixelMethod;
+</pre>
+</div>
+<div class="section" id="magickxresourceinfo">
+<h1><a class="toc-backref" href="#id56">MagickXResourceInfo</a></h1>
+<pre class="literal-block">
+typedef struct _XResourceInfo
+{
+ XrmDatabase
+ resource_database;
+
+ ImageInfo
+ *image_info;
+
+ QuantizeInfo
+ *quantize_info;
+
+ unsigned long
+ colors;
+
+ unsigned int
+ close_server,
+ backdrop;
+
+ char
+ *background_color,
+ *border_color;
+
+ char
+ *client_name;
+
+ XColormapType
+ colormap;
+
+ unsigned int
+ border_width,
+ color_recovery,
+ confirm_exit,
+ delay;
+
+ char
+ *display_gamma;
+
+ char
+ *font,
+ *font_name[MaxNumberFonts],
+ *foreground_color;
+
+ unsigned int
+ display_warnings,
+ gamma_correct;
+
+ char
+ *icon_geometry;
+
+ unsigned int
+ iconic,
+ immutable;
+
+ char
+ *image_geometry;
+
+ char
+ *map_type,
+ *matte_color,
+ *name;
+
+ unsigned int
+ magnify,
+ pause; char
+ *pen_colors[MaxNumberPens];
+
+ char
+ *text_font,
+ *title;
+
+ int
+ quantum;
+
+ unsigned int
+ update,
+ use_pixmap,
+ use_shared_memory;
+
+ unsigned long
+ undo_cache;
+
+ char
+ *visual_type,
+ *window_group,
+ *window_id,
+ *write_filename;
+
+ Image
+ *copy_image;
+
+ int
+ gravity;
+
+ char
+ home_directory[MaxTextExtent];
+} XResourceInfo;
+</pre>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</div>
+</body>
+</html>
encoding an image. Be aware that most image types only support a sub-set
of the available compression types. If the compression type specified is
incompatable with the image, GraphicsMagick selects a compression type
-compatable with the image type.
+compatable with the image type, which might be no compression at all.
.. table:: CompressionType
+---------------------------+---------------------------------------------------------------------+
|ZipCompression |Lempel-Ziv compression (LZ77) as used in PKZIP and GNU gzip. |
+---------------------------+---------------------------------------------------------------------+
+ |LZMACompression |LZMA - Lempel-Ziv-Markov chain algorithm |
+ +---------------------------+---------------------------------------------------------------------+
+ |JPEG2000Compression |JPEG 2000 - ISO/IEC std 15444-1 |
+ +---------------------------+---------------------------------------------------------------------+
+ |JBIG1Compression |JBIG v1 - ISO/IEC std 11544 / ITU-T rec T.82 |
+ +---------------------------+---------------------------------------------------------------------+
+ |JBIG2Compression |JBIG v2 - ISO/IEC std 14492 / ITU-T rec T.88 |
+ +---------------------------+---------------------------------------------------------------------+
+ |ZSTDCompression |Facebook's Zstandard/Zstd |
+ +---------------------------+---------------------------------------------------------------------+
+ |WebPCompression |Google's WebP |
+ +---------------------------+---------------------------------------------------------------------+
+
DecorationType
==============
|SouthEastGravity |Position object at bottom-right of region |
+--------------------------+----------------------------------------------------------------------+
+LogEventType
+============
+
+LogEventType specifies the log event type to match one or more log
+areas. Although defined as an enum type, the values are based on
+unsigned integer flags value with one mask bit set, more than one mask
+bit set, or all of the assigned mask bits set. Values are boolean
+ORed together to represent multiple event types.
+
+.. table:: LogEventType
+
+ +--------------------------+----------------------------------------------------------------------+
+ | Enumeration | Description |
+ +--------------------------+----------------------------------------------------------------------+
+ |UndefinedEventMask | No events specified |
+ +--------------------------+----------------------------------------------------------------------+
+ |NoEventsMask | No events specified |
+ +--------------------------+----------------------------------------------------------------------+
+ |ConfigureEventMask | Configuration event (related to initialization or shutdown) |
+ +--------------------------+----------------------------------------------------------------------+
+ |AnnotateEventMask | Annotation event (text drawing) |
+ +--------------------------+----------------------------------------------------------------------+
+ |RenderEventMask | Rendering event (vector drawing) |
+ +--------------------------+----------------------------------------------------------------------+
+ |TransformEventMask | Image transformation event (e.g. cropping) |
+ +--------------------------+----------------------------------------------------------------------+
+ |LocaleEventMask | Locale event (internationalization) |
+ +--------------------------+----------------------------------------------------------------------+
+ |CoderEventMask | Coder event (file decode or encode) |
+ +--------------------------+----------------------------------------------------------------------+
+ |X11EventMask | X11 event (event related to use of X11) |
+ +--------------------------+----------------------------------------------------------------------+
+ |CacheEventMask | Pixel cache event (pixel storage in memory or on disk) |
+ +--------------------------+----------------------------------------------------------------------+
+ |BlobEventMask | Blob event (I/O to/from memory or a file) |
+ +--------------------------+----------------------------------------------------------------------+
+ |DeprecateEventMask | Deprecation event (use of a function which will be removed) |
+ +--------------------------+----------------------------------------------------------------------+
+ |UserEventMask | User event (event allowed for the user, not otherwise used) |
+ +--------------------------+----------------------------------------------------------------------+
+ |ResourceEventMask | Resource event (resource limit assignment, allocation/deallocation) |
+ +--------------------------+----------------------------------------------------------------------+
+ |TemporaryFileEventMask | Temporary file event (temporary file created or removed) |
+ +--------------------------+----------------------------------------------------------------------+
+ |ExceptionEventMask | Exception event (a warning or error was reported into ExceptionInfo) |
+ +--------------------------+----------------------------------------------------------------------+
+ |OptionEventMask | Option event (something related to a user provided option) |
+ +--------------------------+----------------------------------------------------------------------+
+ |InformationEventMask | Information event |
+ +--------------------------+----------------------------------------------------------------------+
+ |WarningEventMask | Warning event (a warning was reported into ExceptionInfo) |
+ +--------------------------+----------------------------------------------------------------------+
+ |ErrorEventMask | Error event (an error was reported into ExceptionInfo) |
+ +--------------------------+----------------------------------------------------------------------+
+ |FatalErrorEventMask | Fatal error event (a fatal error was reported into ExceptionInfo) |
+ +--------------------------+----------------------------------------------------------------------+
+ |AllEventsMask | All events (matches any/all events) |
+ +--------------------------+----------------------------------------------------------------------+
+
+
+LogMethod
+=========
+
+LogMethod is a call-back function type in the form::
+
+ typedef void (*LogMethod)(const ExceptionType type,const char *text)
+
+LogOutputType
+=============
+
+LogOutputType specifies how/where logging ("tracing") output is to be directed.
+
+.. table:: LogOutputType
+
+ +--------------------------+----------------------------------------------------------------------+
+ | Enumeration | Description |
+ +--------------------------+----------------------------------------------------------------------+
+ |DisabledOutput |Reporting disabled |
+ +--------------------------+----------------------------------------------------------------------+
+ |UndefinedOutput |Reporting disabled |
+ +--------------------------+----------------------------------------------------------------------+
+ |StdoutOutput |Log to stdout in "human readable" format |
+ +--------------------------+----------------------------------------------------------------------+
+ |StderrOutput |Log to stderr in "human readable" format |
+ +--------------------------+----------------------------------------------------------------------+
+ |XMLFileOutput |Log to a file in an XML format |
+ +--------------------------+----------------------------------------------------------------------+
+ |TXTFileOutput |Log to a file in a text format |
+ +--------------------------+----------------------------------------------------------------------+
+ |Win32DebugOutput |Windows, Output events to the application/system debugger. |
+ +--------------------------+----------------------------------------------------------------------+
+ |Win32EventlogOutput |Windows, Output events to the Application event log. |
+ +--------------------------+----------------------------------------------------------------------+
+ |MethodOutput |Log by calling registered C-language callback function |
+ +--------------------------+----------------------------------------------------------------------+
+
+
Image
=====
char
home_directory[MaxTextExtent];
} XResourceInfo;
-
--------------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="widget">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>widget</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="widget">
+<h1 class="title">widget</h1>
+<h2 class="subtitle" id="x11-widgets">X11 Widgets</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#xcolorbrowserwidget" id="id25">XColorBrowserWidget</a></li>
+<li><a class="reference internal" href="#xcommandwidget" id="id26">XCommandWidget</a></li>
+<li><a class="reference internal" href="#xconfirmwidget" id="id27">XConfirmWidget</a></li>
+<li><a class="reference internal" href="#xdialogwidget" id="id28">XDialogWidget</a></li>
+<li><a class="reference internal" href="#xfilebrowserwidget" id="id29">XFileBrowserWidget</a></li>
+<li><a class="reference internal" href="#xfontbrowserwidget" id="id30">XFontBrowserWidget</a></li>
+<li><a class="reference internal" href="#xinfowidget" id="id31">XInfoWidget</a></li>
+<li><a class="reference internal" href="#xlistbrowserwidget" id="id32">XListBrowserWidget</a></li>
+<li><a class="reference internal" href="#xmenuwidget" id="id33">XMenuWidget</a></li>
+<li><a class="reference internal" href="#xmonitorwidget" id="id34">XMonitorWidget</a></li>
+<li><a class="reference internal" href="#xnoticewidget" id="id35">XNoticeWidget</a></li>
+<li><a class="reference internal" href="#xpreferenceswidget" id="id36">XPreferencesWidget</a></li>
+<li><a class="reference internal" href="#xtextviewwidget" id="id37">XTextViewWidget</a></li>
+</ul>
+</div>
+<div class="section" id="xcolorbrowserwidget">
+<h1><a class="toc-backref" href="#id25">XColorBrowserWidget</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void MagickXColorBrowserWidget( Display *display, MagickXWindows *windows, const char *action,
+ char *reply );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>Method MagickXColorBrowserWidget displays a Color Browser widget with a color
+query to the user. The user keys a reply and presses the Action or Cancel
+button to exit. The typed text is returned as the reply function parameter.</p>
+<p>The format of the MagickXColorBrowserWidget method is:</p>
+<pre class="literal-block">
+void MagickXColorBrowserWidget( Display *display, MagickXWindows *windows, const char *action,
+ char *reply );
+</pre>
+<dl class="docutils">
+<dt>display:</dt>
+<dd>Specifies a connection to an X server; returned from
+XOpenDisplay.</dd>
+<dt>window:</dt>
+<dd>Specifies a pointer to a MagickXWindows structure.</dd>
+<dt>action:</dt>
+<dd>Specifies a pointer to the action of this widget.</dd>
+<dt>reply:</dt>
+<dd>The response from the user is returned in this parameter.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="xcommandwidget">
+<h1><a class="toc-backref" href="#id26">XCommandWidget</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+int MagickXCommandWidget( Display *display, MagickXWindows *windows,
+ const char ** selections, XEvent *event );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>Method MagickXCommandWidget maps a menu and returns the command pointed to by
+the user when the button is released.</p>
+<p>The format of the MagickXCommandWidget method is:</p>
+<pre class="literal-block">
+int MagickXCommandWidget( Display *display, MagickXWindows *windows,
+ const char ** selections, XEvent *event );
+</pre>
+<dl class="docutils">
+<dt>selection_number:</dt>
+<dd>Specifies the number of the selection that the
+user choose.</dd>
+<dt>display:</dt>
+<dd>Specifies a connection to an X server; returned from
+XOpenDisplay.</dd>
+<dt>window:</dt>
+<dd>Specifies a pointer to a MagickXWindows structure.</dd>
+<dt>selections:</dt>
+<dd>Specifies a pointer to one or more strings that comprise
+the choices in the menu.</dd>
+<dt>event:</dt>
+<dd>Specifies a pointer to a X11 XEvent structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="xconfirmwidget">
+<h1><a class="toc-backref" href="#id27">XConfirmWidget</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+int MagickXConfirmWidget( Display *display, MagickXWindows *windows, const char *reason,
+ const char *description );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>Method MagickXConfirmWidget displays a Confirm widget with a notice to the user.
+The function returns -1 if Dismiss is pressed, 0 for Cancel, and 1 for
+Yes.</p>
+<p>The format of the MagickXConfirmWidget method is:</p>
+<pre class="literal-block">
+int MagickXConfirmWidget( Display *display, MagickXWindows *windows, const char *reason,
+ const char *description );
+</pre>
+<dl class="docutils">
+<dt>status:</dt>
+<dd>Method MagickXConfirmWidget returns True if the user presses Yes
+otherwise False is returned.</dd>
+<dt>display:</dt>
+<dd>Specifies a connection to an X server; returned from
+XOpenDisplay.</dd>
+<dt>window:</dt>
+<dd>Specifies a pointer to a MagickXWindows structure.</dd>
+<dt>reason:</dt>
+<dd>Specifies the message to display before terminating the
+program.</dd>
+<dt>description:</dt>
+<dd>Specifies any description to the message.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="xdialogwidget">
+<h1><a class="toc-backref" href="#id28">XDialogWidget</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+int MagickXDialogWidget( Display *display, MagickXWindows *windows, const char *action,
+ const char *query, char *reply );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>Method MagickXDialogWidget displays a Dialog widget with a query to the user.
+The user keys a reply and presses the Ok or Cancel button to exit. The
+typed text is returned as the reply function parameter.</p>
+<p>The format of the MagickXDialogWidget method is:</p>
+<pre class="literal-block">
+int MagickXDialogWidget( Display *display, MagickXWindows *windows, const char *action,
+ const char *query, char *reply );
+</pre>
+<dl class="docutils">
+<dt>display:</dt>
+<dd>Specifies a connection to an X server; returned from
+XOpenDisplay.</dd>
+<dt>window:</dt>
+<dd>Specifies a pointer to a MagickXWindows structure.</dd>
+<dt>action:</dt>
+<dd>Specifies a pointer to the action of this widget.</dd>
+<dt>query:</dt>
+<dd>Specifies a pointer to the query to present to the user.</dd>
+<dt>reply:</dt>
+<dd>The response from the user is returned in this parameter.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="xfilebrowserwidget">
+<h1><a class="toc-backref" href="#id29">XFileBrowserWidget</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void MagickXFileBrowserWidget( Display *display, MagickXWindows *windows, const char *action,
+ char *reply );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>Method MagickXFileBrowserWidget displays a File Browser widget with a file query
+to the user. The user keys a reply and presses the Action or Cancel button
+to exit. The typed text is returned as the reply function parameter.</p>
+<p>The format of the MagickXFileBrowserWidget method is:</p>
+<pre class="literal-block">
+void MagickXFileBrowserWidget( Display *display, MagickXWindows *windows, const char *action,
+ char *reply );
+</pre>
+<dl class="docutils">
+<dt>display:</dt>
+<dd>Specifies a connection to an X server; returned from
+XOpenDisplay.</dd>
+<dt>window:</dt>
+<dd>Specifies a pointer to a MagickXWindows structure.</dd>
+<dt>action:</dt>
+<dd>Specifies a pointer to the action of this widget.</dd>
+<dt>reply:</dt>
+<dd>The response from the user is returned in this parameter.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="xfontbrowserwidget">
+<h1><a class="toc-backref" href="#id30">XFontBrowserWidget</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void MagickXFontBrowserWidget( Display *display, MagickXWindows *windows, const char *action,
+ char *reply );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>Method MagickXFontBrowserWidget displays a Font Browser widget with a font query
+to the user. The user keys a reply and presses the Action or Cancel button
+to exit. The typed text is returned as the reply function parameter.</p>
+<p>The format of the MagickXFontBrowserWidget method is:</p>
+<pre class="literal-block">
+void MagickXFontBrowserWidget( Display *display, MagickXWindows *windows, const char *action,
+ char *reply );
+</pre>
+<dl class="docutils">
+<dt>display:</dt>
+<dd>Specifies a connection to an X server; returned from
+XOpenDisplay.</dd>
+<dt>window:</dt>
+<dd>Specifies a pointer to a MagickXWindows structure.</dd>
+<dt>action:</dt>
+<dd>Specifies a pointer to the action of this widget.</dd>
+<dt>reply:</dt>
+<dd>The response from the user is returned in this parameter.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="xinfowidget">
+<h1><a class="toc-backref" href="#id31">XInfoWidget</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void MagickXInfoWidget( Display *display, MagickXWindows *windows, const char *activity );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>Method MagickXInfoWidget displays text in the Info widget. The purpose is to
+inform the user that what activity is currently being performed (e.g.
+reading an image, rotating an image, etc.).</p>
+<p>The format of the MagickXInfoWidget method is:</p>
+<pre class="literal-block">
+void MagickXInfoWidget( Display *display, MagickXWindows *windows, const char *activity );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>display:</dt>
+<dd>Specifies a connection to an X server; returned from
+XOpenDisplay.</dd>
+<dt>window:</dt>
+<dd>Specifies a pointer to a MagickXWindows structure.</dd>
+<dt>activity:</dt>
+<dd>This character string reflects the current activity and is
+displayed in the Info widget.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="xlistbrowserwidget">
+<h1><a class="toc-backref" href="#id32">XListBrowserWidget</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void MagickXListBrowserWidget( Display *display, MagickXWindows *windows,
+ MagickXWindowInfo *window_info, const char ** list,
+ const char *action, const char *query, char *reply );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>Method MagickXListBrowserWidget displays a List Browser widget with a query to
+the user. The user keys a reply or select a reply from the list. Finally,
+the user presses the Action or Cancel button to exit. The typed text is
+returned as the reply function parameter.</p>
+<p>The format of the MagickXListBrowserWidget method is:</p>
+<pre class="literal-block">
+void MagickXListBrowserWidget( Display *display, MagickXWindows *windows,
+ MagickXWindowInfo *window_info, const char ** list,
+ const char *action, const char *query, char *reply );
+</pre>
+<dl class="docutils">
+<dt>display:</dt>
+<dd>Specifies a connection to an X server; returned from
+XOpenDisplay.</dd>
+<dt>window:</dt>
+<dd>Specifies a pointer to a MagickXWindows structure.</dd>
+<dt>list:</dt>
+<dd>Specifies a pointer to an array of strings. The user can
+select from these strings as a possible reply value.</dd>
+<dt>action:</dt>
+<dd>Specifies a pointer to the action of this widget.</dd>
+<dt>query:</dt>
+<dd>Specifies a pointer to the query to present to the user.</dd>
+<dt>reply:</dt>
+<dd>The response from the user is returned in this parameter.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="xmenuwidget">
+<h1><a class="toc-backref" href="#id33">XMenuWidget</a></h1>
+<div class="section" id="id15">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+int MagickXMenuWidget( Display *display, MagickXWindows *windows, const char *title,
+ const char ** selections, char *item );
+</pre>
+</div>
+<div class="section" id="id16">
+<h2>Description</h2>
+<p>Method MagickXMenuWidget maps a menu and returns the command pointed to by the
+user when the button is released.</p>
+<p>The format of the MagickXMenuWidget method is:</p>
+<pre class="literal-block">
+int MagickXMenuWidget( Display *display, MagickXWindows *windows, const char *title,
+ const char ** selections, char *item );
+</pre>
+<dl class="docutils">
+<dt>selection_number:</dt>
+<dd>Specifies the number of the selection that the
+user choose.</dd>
+<dt>display:</dt>
+<dd>Specifies a connection to an X server; returned from
+XOpenDisplay.</dd>
+<dt>window:</dt>
+<dd>Specifies a pointer to a MagickXWindows structure.</dd>
+<dt>title:</dt>
+<dd>Specifies a character string that describes the menu selections.</dd>
+<dt>selections:</dt>
+<dd>Specifies a pointer to one or more strings that comprise
+the choices in the menu.</dd>
+<dt>item:</dt>
+<dd>Specifies a character array. The item selected from the menu
+is returned here.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="xmonitorwidget">
+<h1><a class="toc-backref" href="#id34">XMonitorWidget</a></h1>
+<div class="section" id="id17">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void MagickXMonitorWidget( Display *display, MagickXWindows *windows, const char *task,
+ const magick_int64_t quantum, const magick_uint64_t span );
+</pre>
+</div>
+<div class="section" id="id18">
+<h2>Description</h2>
+<p>Method MagickXMonitorWidget displays the progress a task is making in
+completing a task. A span of zero toggles the active status. An inactive
+state disables the progress monitor.</p>
+<p>The format of the MagickXMonitorWidget method is:</p>
+<pre class="literal-block">
+void MagickXMonitorWidget( Display *display, MagickXWindows *windows, const char *task,
+ const magick_int64_t quantum, const magick_uint64_t span );
+</pre>
+<dl class="docutils">
+<dt>display:</dt>
+<dd>Specifies a connection to an X server; returned from
+XOpenDisplay.</dd>
+<dt>window:</dt>
+<dd>Specifies a pointer to a MagickXWindows structure.</dd>
+<dt>task:</dt>
+<dd>Identifies the task in progress.</dd>
+<dt>quantum:</dt>
+<dd>Specifies the quantum position within the span which represents
+how much progress has been made in completing a task.</dd>
+<dt>span:</dt>
+<dd>Specifies the span relative to completing a task.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="xnoticewidget">
+<h1><a class="toc-backref" href="#id35">XNoticeWidget</a></h1>
+<div class="section" id="id19">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void MagickXNoticeWidget( Display *display, MagickXWindows *windows, const char *reason,
+ const char *description );
+</pre>
+</div>
+<div class="section" id="id20">
+<h2>Description</h2>
+<p>Method MagickXNoticeWidget displays a Notice widget with a notice to the user.
+The function returns when the user presses the "Dismiss" button.</p>
+<p>The format of the MagickXNoticeWidget method is:</p>
+<pre class="literal-block">
+void MagickXNoticeWidget( Display *display, MagickXWindows *windows, const char *reason,
+ const char *description );
+</pre>
+<dl class="docutils">
+<dt>display:</dt>
+<dd>Specifies a connection to an X server; returned from
+XOpenDisplay.</dd>
+<dt>window:</dt>
+<dd>Specifies a pointer to a MagickXWindows structure.</dd>
+<dt>reason:</dt>
+<dd>Specifies the message to display before terminating the
+program.</dd>
+<dt>description:</dt>
+<dd>Specifies any description to the message.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="xpreferenceswidget">
+<h1><a class="toc-backref" href="#id36">XPreferencesWidget</a></h1>
+<div class="section" id="id21">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickXPreferencesWidget( Display *display,
+ <a class="reference external" href="../api/types.html#magickxresourceinfo">MagickXResourceInfo</a> *resource_info,
+ MagickXWindows *windows );
+</pre>
+</div>
+<div class="section" id="id22">
+<h2>Description</h2>
+<p>Method MagickXPreferencesWidget displays a Preferences widget with program
+preferences. If the user presses the Apply button, the preferences are
+stored in a configuration file in the users' home directory.</p>
+<p>The format of the MagickXPreferencesWidget method is:</p>
+<pre class="literal-block">
+unsigned int MagickXPreferencesWidget( Display *display,
+ <a class="reference external" href="../api/types.html#magickxresourceinfo">MagickXResourceInfo</a> *resource_info,
+ MagickXWindows *windows );
+</pre>
+<dl class="docutils">
+<dt>display:</dt>
+<dd>Specifies a connection to an X server; returned from
+XOpenDisplay.</dd>
+<dt>resource_info:</dt>
+<dd>Specifies a pointer to a X11 MagickXResourceInfo structure.</dd>
+<dt>window:</dt>
+<dd>Specifies a pointer to a MagickXWindows structure.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="xtextviewwidget">
+<h1><a class="toc-backref" href="#id37">XTextViewWidget</a></h1>
+<div class="section" id="id23">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void MagickXTextViewWidget( Display *display, const <a class="reference external" href="../api/types.html#magickxresourceinfo">MagickXResourceInfo</a> *resource_info,
+ MagickXWindows *windows, const unsigned int mono,
+ const char *title, const char ** textlist );
+</pre>
+</div>
+<div class="section" id="id24">
+<h2>Description</h2>
+<p>Method MagickXTextViewWidget displays text in a Text View widget.</p>
+<p>The format of the MagickXTextViewWidget method is:</p>
+<pre class="literal-block">
+void MagickXTextViewWidget( Display *display, const <a class="reference external" href="../api/types.html#magickxresourceinfo">MagickXResourceInfo</a> *resource_info,
+ MagickXWindows *windows, const unsigned int mono,
+ const char *title, const char ** textlist );
+</pre>
+<dl class="docutils">
+<dt>display:</dt>
+<dd>Specifies a connection to an X server; returned from
+XOpenDisplay.</dd>
+<dt>resource_info:</dt>
+<dd>Specifies a pointer to a X11 MagickXResourceInfo structure.</dd>
+<dt>window:</dt>
+<dd>Specifies a pointer to a MagickXWindows structure.</dd>
+<dt>mono:</dt>
+<dd>Use mono-spaced font when displaying text.</dd>
+<dt>title:</dt>
+<dd>This character string is displayed at the top of the widget
+window.</dd>
+<dt>textlist:</dt>
+<dd>This string list is displayed within the Text View widget.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Authors</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-authors">
<dt>Mike Edmonds</dt>
<dd>Contributed the median filter algorithm.</dd>
</dl>
-<hr class="docutils" />
-<div class="line-block">
-<div class="line">Copyright © GraphicsMagick Group 2002 - 2020</div>
</div>
-<p>This program is covered by multiple licenses, which are described in
-Copyright.txt. You should have received a copy of Copyright.txt with this
-package; otherwise see <a class="reference external" href="http://www.graphicsmagick.org/Copyright.html">http://www.graphicsmagick.org/Copyright.html</a>.</p>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Authors</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-authors">
+<h1 class="title">GraphicsMagick Authors</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>The following people have contributed substantially to the development
+of GraphicsMagick. Please let us know if an author is missing, or a
+significant contribution was made and not recorded.</p>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#active-graphicsmagick-contributors" id="id1">Active GraphicsMagick Contributors</a></li>
+<li><a class="reference internal" href="#former-graphicsmagick-contributors" id="id2">Former GraphicsMagick Contributors</a></li>
+<li><a class="reference internal" href="#other-contributors-via-imagemagick" id="id3">Other Contributors (via ImageMagick)</a></li>
+</ul>
+</div>
+<div class="section" id="active-graphicsmagick-contributors">
+<h1><a class="toc-backref" href="#id1">Active GraphicsMagick Contributors</a></h1>
+<dl class="docutils">
+<dt>Bob Friesenhahn</dt>
+<dd>Principal maintainer of GraphicsMagick. Author of
+Magick++ (C++ API to ImageMagick and GraphicsMagick).
+Author of module loader facility, automatic file
+identification (magic) support, Unix/Cygwin/MinGW
+configure/make facility, Windows setup.exe style
+installer, WMF renderer, C API documentation formatter,
+and the C, C++, and Perl test suites used by ImageMagick
+and GraphicsMagick.</dd>
+<dt>Jaroslav Fojtik</dt>
+<dd>Authored the ART, CUT, HRZ, JNX, MAC, MATLAB, TOPOL,
+and WPG coder modules. Improved the FITS and TXT coder
+modules. VisualMagick 'configure' improvements and
+build testing/fixes for many versions of Microsoft
+Visual Studio.</dd>
+<dt>Troy Patteson</dt>
+<dd>Contributed a several significant patches to fix image
+rotation bugs and improve image rotation performance,
+as well as an improved bi-linear interpolation
+implementation.</dd>
+</dl>
+</div>
+<div class="section" id="former-graphicsmagick-contributors">
+<h1><a class="toc-backref" href="#id2">Former GraphicsMagick Contributors</a></h1>
+<dl class="docutils">
+<dt>Glenn Randers-Pehrson</dt>
+<dd>Contributed significantly to the utilities, including
+writing the 'gm' utility wrapper. Authored support for
+JNG, MNG, and PNG formats. Provided significant
+support for the BMP format. Significant improvements
+to the documentation, including creating a
+documentation authoring environment based on the
+<imdoc> format. Maintained the SourceForge mailing
+lists. GraphicsMagick would not be what it is today
+without Glenn and he will always be remembered.</dd>
+<dt>Gregory J Wolfe</dt>
+<dd>Contributed significant improvements to the SVG
+parsing and rendering code.</dd>
+<dt>Kenneth Xu</dt>
+<dd>Contributed the implementation of 'gm batch', a simple
+batch mode for GraphicsMagick.</dd>
+<dt>Sara Shafaei</dt>
+<dd>Contributed a number of Wand API functions as well as
+fixes for several composition operators.</dd>
+<dt>Brendan Lane</dt>
+<dd>Contributed a large number of new Photoshop
+composition operators and alpha-channel fixes for
+existing ones.</dd>
+<dt>Dirk Lemstra</dt>
+<dd>Contributed improvements to the VisualMagick configure
+program to support configuring more build options via
+the GUI dialogs and to deal with similarly named
+files.</dd>
+<dt>Roman Hiestand</dt>
+<dd>Contributed WebP coder improvements.</dd>
+<dt>Mike Chiarappa</dt>
+<dd>Created and maintains the Borland C++ Builder 6.0 build
+environment for GraphicsMagick.</dd>
+<dt>Daniel Kobras</dt>
+<dd>Provided many security patches and fixes from the Debian
+project.</dd>
+<dt>William Radcliffe</dt>
+<dd>Author of the VisualMagick project configure facility for
+Visual C++. Author of FlashPix module. Author of the
+ImageMagickObject COM object for Windows. Author of the
+EMF, XTRN, and META coders. Significant contributions to
+the MSL, JPEG, TIFF, SVG, and URL coders. Authored
+"process" module support. Wrote the micro-timer facility
+used by 'identify'. Ported module loader support to
+Windows. Significantly improved polygon rendering
+performance.</dd>
+<dt>Leonard Rosenthol</dt>
+<dd>Authored the 'conjure' utility and associated MSL
+execution environment. Provided MacOS support. Authored
+the CLIPBOARD, XCF, and PSD coders. Postscript and PDF
+expertise. Significant drawing enhancements including
+support for dash patterns, linecap stroking, clipping
+masks and a mask image.</dd>
+<dt>Lars Ruben Skyum</dt>
+<dd>Contributed the -clippath functionality, added
+-define support, improved color profile support,
+and re-wrote the PS3 coder.</dd>
+<dt>Rolf Schroedter</dt>
+<dd>Principal author of TclMagick.</dd>
+<dt>David N. Welton</dt>
+<dd>Co-author of TclMagick, particularly in the Unix environment.</dd>
+<dt>Mark Mitchell</dt>
+<dd>Contributed a new design for the web pages, including the
+formatting scripts, and converted many pages to the new
+format.</dd>
+<dt>Richard Nolde</dt>
+<dd>Contributed code for converting between native floating
+point types, and short (16/24) bit float types.</dd>
+<dt>Clément Follet</dt>
+<dd>Contributed Hald CLUT and ASC-CDL implementations.</dd>
+<dt>John Sergeant</dt>
+<dd>Re-wrote the HP PCL writer to work much better,
+including support for compression. Implemented
+support for CALS type 1 format. Re-wrote the DICOM
+reader.</dd>
+<dt>Roberto de Deus Barbosa Murta</dt>
+<dd>Contributed the adaptive threshold implementation
+(-lat), which executes in linear rather than quadratic
+time.</dd>
+<dt>Samuel Thibault</dt>
+<dd>Contributed support for the Braille image format.</dd>
+</dl>
+</div>
+<div class="section" id="other-contributors-via-imagemagick">
+<h1><a class="toc-backref" href="#id3">Other Contributors (via ImageMagick)</a></h1>
+<dl class="docutils">
+<dt>John Cristy</dt>
+<dd>Creator, principal author, and principal maintainer of
+ImageMagick, from which GraphicsMagick is originally
+derived (from ImageMagick 5.5.2). Also the author of
+the Wand API to ImageMagick which is incorporated as
+a stand-alone library by GraphicsMagick.</dd>
+<dt>Kelly Bergougnoux</dt>
+<dd>Authored the initial Cineon coder (which has since been
+replaced).</dd>
+<dt>Christopher R. Hawks</dt>
+<dd>Authored the PALM coder.</dd>
+<dt>Francis J. Franklin</dt>
+<dd>Ported the WMF coder to the libwmf 0.2 API.</dd>
+<dt>Rick Mabry</dt>
+<dd>Contributed code to support filling drawn objects using a
+pattern image.</dd>
+<dt>Nathan Brown</dt>
+<dd>Original author of the JP2 coder.</dd>
+<dt>Kyle Shorter</dt>
+<dd>Original author of PerlMagick. Original author of the
+LOCALE coder.</dd>
+<dt>Markus Friedl</dt>
+<dd>Original author of Base64 encode/decode sources.</dd>
+<dt>David Harr</dt>
+<dd>Contributed (with Leonard Rosenthol) dash pattern,
+linecap stroking algorithm, and minor rendering
+improvements.</dd>
+<dt>Troy Edwards</dt>
+<dd>Authored the source RPM spec file for GraphicsMagick.</dd>
+<dt>Milan Votava</dt>
+<dd>Contributed support for Wireless BitMap, used in WAP -
+Wireless Access Protocol.</dd>
+<dt>Mike Edmonds</dt>
+<dd>Contributed the median filter algorithm.</dd>
+</dl>
+<hr class="docutils" />
+<div class="line-block">
+<div class="line">Copyright © GraphicsMagick Group 2002 - 2020</div>
+</div>
+<p>This program is covered by multiple licenses, which are described in
+Copyright.txt. You should have received a copy of Copyright.txt with this
+package; otherwise see <a class="reference external" href="http://www.graphicsmagick.org/Copyright.html">http://www.graphicsmagick.org/Copyright.html</a>.</p>
+</div>
+</div>
+</body>
+</html>
Mike Edmonds
Contributed the median filter algorithm.
-
-
----------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-| Copyright |copy| GraphicsMagick Group 2002 - 2020
-
-This program is covered by multiple licenses, which are described in
-Copyright.txt. You should have received a copy of Copyright.txt with this
-package; otherwise see http://www.graphicsmagick.org/Copyright.html.
gm batch -echo on -feedback on script.txt
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
error. Specify <strong>-stop-on-error on</strong> to cause processing to quit
immediately on error.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
</td></tr></table>
under Linux and Solaris provides a way to observe CPU core clock rates
while a benchmark is running.</em>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
threads is taken from the standard <tt>OMP_NUM_THREADS</tt>
environment variable.</font></td></tr></table>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
</td></tr></table>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick vs ImageMagick Benchmarks</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-vs-imagemagick-benchmarks">
sleep 1
done 2>&1
</pre>
-<hr class="docutils" />
-<div class="line-block">
-<div class="line">Copyright (C) 2008 - 2020 GraphicsMagick Group</div>
</div>
-<p>This program is covered by multiple licenses, which are described in
-Copyright.txt. You should have received a copy of Copyright.txt with this
-package; otherwise see <a class="reference external" href="http://www.graphicsmagick.org/Copyright.html">http://www.graphicsmagick.org/Copyright.html</a>.</p>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick vs ImageMagick Benchmarks</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-vs-imagemagick-benchmarks">
+<h1 class="title">GraphicsMagick vs ImageMagick Benchmarks</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#foreword" id="id1">Foreword</a></li>
+<li><a class="reference internal" href="#strategy" id="id2">Strategy</a></li>
+<li><a class="reference internal" href="#the-benchmark" id="id3">The Benchmark</a></li>
+</ul>
+</div>
+<div class="section" id="foreword">
+<h1><a class="toc-backref" href="#id1">Foreword</a></h1>
+<p>This page used to document benchmark results which compared
+GraphicsMagick 1.3.8 performance to ImageMagick 6.5.8-10 performance.
+We found that GraphicsMagick was usually considerably faster at
+executing image processing operations from the command line than
+ImageMagick 6.5.8-10 was. One ImageMagick algorithm ran as much as 770
+times slower. GraphicsMagick clearly ran much more efficiently under
+Microsoft Windows.</p>
+<p>We now find that a simple head to head performance comparison between
+GraphicsMagick and recent ImageMagick is no longer possible because
+ImageMagick has changed the meanings of the existing arguments. In
+particular, we discovered that ImageMagick filter arguments producing
+convolution matrices are now producing lower-order convolution
+matrices representing perhaps an order of magnitude less work given
+the same arguments. The resulting images are visually substantially
+less filtered. Using the same command-line filter arguments causes
+GraphicsMagick to appear slower when it is actually doing far more
+work than ImageMagick.</p>
+<p>Due to it not being feasable to do a head to head performance
+measurement between GraphicsMagick and ImageMagick, we have decided to
+not post results at the moment. However, the strategy and a simple
+benchmark driver script are still provided for those who want to do
+their own performance comparisons between GraphicsMagick and
+ImageMagick.</p>
+</div>
+<div class="section" id="strategy">
+<h1><a class="toc-backref" href="#id2">Strategy</a></h1>
+<p>The benchmark focuses on the ability to process many medium sized
+HD-resolution (1920x1080 pixels) images. In order to prevent disk I/O
+from being a factor, we use a small input image and tile it to create
+a larger input image via the "tile:" coder. The processed image is
+sent to the "null:" coder so that file writes to a slow disk are also
+not a factor. Static executables are used and executed via full paths
+in order to minimize variability from the execution environment. In
+order to obtain accurate and useful timing, we use the bash shell to
+execute the command 40 times and see how long it takes. This is a very
+simple benchmark approach which is quite representative of the
+performance that the typical user observes.</p>
+<p>This new benchmark reveals the following performance criteria:</p>
+<blockquote>
+<ul class="simple">
+<li>Basic execution overhead of the software.</li>
+<li>Image processing algorithmic efficiency.</li>
+<li>Efficacy of OpenMP enhancements.</li>
+</ul>
+</blockquote>
+</div>
+<div class="section" id="the-benchmark">
+<h1><a class="toc-backref" href="#id3">The Benchmark</a></h1>
+<p>The benchmark is quite simple. It reads a list of commands to execute
+from a file named "commands.txt" and times how long it takes to
+execute each command 40 times using GraphicsMagick and ImageMagick.</p>
+<p>Here is the simple benchmark script:</p>
+<pre class="literal-block">
+#!/usr/bin/env bash
+#
+# Measure the performance between two 'convert' commands by
+# executing a subcommand through many iterations and seeing
+# the total time that it takes.
+#
+# Written by Bob Friesenhahn, October 2008
+#
+
+# GraphicsMagick
+convert1='/usr/local/bin/gm convert'
+#convert1='/c/Program\ Files/GraphicsMagick-1.3.8-Q16/gm.exe convert'
+
+# ImageMagick
+convert2='/usr/local/bin/convert'
+#convert2='/c/Program\ Files/ImageMagick-6.5.9-Q16/convert.exe'
+
+# Input file specification
+input_image='-size 1920x1080 tile:model.pnm'
+
+# Ouput file specification
+output_image="null:"
+
+# Should not need to change any of the rest
+typeset -i iterations=40
+echo "Convert-1: ${convert1}"
+echo "Version: `eval "${convert1}" -version | head -1`"
+echo "Convert-2: ${convert2}"
+echo "Version: `eval "${convert2}" -version | head -1`"
+echo "Date: `date`"
+echo "Host: `uname -n`"
+echo "OS: `uname -s`"
+echo "Release: `uname -r`"
+echo "Arch: `uname -p`"
+echo "Input File: ${input_image}"
+echo "Output File: ${output_image}"
+echo "Threads: ${OMP_NUM_THREADS:-1}"
+echo "Iterations: ${iterations}"
+echo "========================================================================================"
+echo
+typeset -i count=0 i=0
+cat commands.txt | while read subcommand
+do
+ echo ${subcommand}
+
+ command1="${convert1} ${input_image} ${subcommand} ${output_image}"
+ i=0
+ count=$iterations
+ time while ((i < count))
+ do
+ eval "${command1}"
+ let i=i+1
+ done
+ sleep 1
+
+ command2="${convert2} ${input_image} ${subcommand} ${output_image}"
+ i=0
+ count=$iterations
+ time while ((i < count))
+ do
+ eval "${command2}"
+ let i=i+1
+ done
+
+ echo
+ sleep 1
+done 2>&1
+</pre>
+<hr class="docutils" />
+<div class="line-block">
+<div class="line">Copyright (C) 2008 - 2020 GraphicsMagick Group</div>
+</div>
+<p>This program is covered by multiple licenses, which are described in
+Copyright.txt. You should have received a copy of Copyright.txt with this
+package; otherwise see <a class="reference external" href="http://www.graphicsmagick.org/Copyright.html">http://www.graphicsmagick.org/Copyright.html</a>.</p>
+</div>
+</div>
+</body>
+</html>
echo
sleep 1
done 2>&1
-
-
---------------------------------------------------------------------------
-
-| Copyright (C) 2008 - 2020 GraphicsMagick Group
-
-This program is covered by multiple licenses, which are described in
-Copyright.txt. You should have received a copy of Copyright.txt with this
-package; otherwise see http://www.graphicsmagick.org/Copyright.html.
-
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-bugs">
</ul>
</blockquote>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Bugs</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-bugs">
+<h1 class="title">GraphicsMagick Bugs</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>The following bugs are known to exist in GraphicsMagick. Please report
+any additional bugs to the GraphicsMagick <a class="reference external" href="https://sourceforge.net/p/graphicsmagick/_list/tickets">bug tracker</a> at SourceForge.</p>
+<blockquote>
+<ul class="simple">
+<li>BMP reader is not working for some obscure low-color packed files.</li>
+<li>DPX reader/writer does not properly handle subformats where row
+samples spill over the storage word boundary. This means that
+single-channel/grayscale 10-bit DPX files will only work for widths
+evenly divisible by three. (SF 1533184)</li>
+<li>The PSD reader is disabled by default because it does not work well
+enough and several man-years worth of dedicated volunteer time is
+required to make it work properly.</li>
+<li>Scitex reader is not working for some files.</li>
+<li>SVG writer works only if you are particularly luckly and so it is
+not included in the build by default..</li>
+<li>SVG reader mishandles basic units and many other syntax elements (SF
+1231547, 1298606).</li>
+</ul>
+</blockquote>
+</div>
+</body>
+</html>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<hr>
<p>Here are some example color selections to choose from or define
your own. GraphicsMagick understands color names or hex values (.e.g.
-white or #ffffff).
+white or #ffffff).
</p>
<table class="named-colors">
<colgroup>
compare -highlight-style assign -highlight-color purple -file diff.miff original.miff compare.miff
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<a href="GraphicsMagick.html"><em>GraphicsMagick(1)</em></a>.
<br> <br>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
gm composite -compose CopyBlue blue.png red-green.png composite.png
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<a href="GraphicsMagick.html"><em>GraphicsMagick(1)</em></a>.
<br> <br>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
All operations will closely follow the key/value pairs defined in
PerlMagick, unless otherwise noted.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
</font></font></font></b></td></tr></table>
<table width="90%" border="0" cellspacing="0" cellpadding="8"> <tr><td width="6%"><br></td><td>print GraphicsMagick version string</td></tr></table>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Contributing to GraphicsMagick</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="contributing-to-graphicsmagick">
<li>Complete the port of ralcgm to Windows so that it may be used as a
delegate under Windows.</li>
</ul>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Contributing to GraphicsMagick</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="contributing-to-graphicsmagick">
+<h1 class="title">Contributing to GraphicsMagick</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>The future and success of GraphicsMagick depends on your contributions.
+By contributing to GraphicsMagick you will benefit from the
+features/fixes you contribute, can take pride in taking part in the
+development of a quality product, and you can tell your friends that you
+contribute to the GraphicsMagick project.</p>
+<p>There are a number of ways you can contribute:</p>
+<ul class="simple">
+<li>Submit bug reports to the GraphicsMagick bug tracking system at
+SourceForge.</li>
+<li>Submit patches to the GraphicsMagick patch submission system at
+SourceForge.</li>
+<li>Perform test builds on unusual systems and report the results.</li>
+<li>Submit ideas and proposed designs to the graphicsmagick-core
+mailing list.</li>
+<li>Create a new language interface, dependent library, or application.</li>
+<li>Join the GraphicsMagick Group as a full-fledged developer with CVS
+commit access.</li>
+</ul>
+<p>Regardless of how you choose to contribute, your contributions will be
+treated with the respect and value that they deserve.</p>
+<p>Becoming a member of the GraphicsMagick Group requires a majority vote
+from existing members. Your chances of being admitted to the group are
+increased significantly if you have a proven track-record of success on
+other open source projects, are a recognized expert in the field, or have
+already demonstrated your capabilities and commitment by contributing to
+the project in other ways. Please contact Bob Friesenhahn
+<<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>> in order to be considered for group
+membership.</p>
+<div class="section" id="areas-to-contribute">
+<h1>Areas To Contribute</h1>
+<p>The following are areas where significant contributions may be made to
+the GraphicsMagick project:</p>
+<ul class="simple">
+<li>Support building and distributing GraphicsMagick RPMs for Linux.</li>
+<li>Act as formal maintainer for the Gentoo Linux GraphicsMagick ebuild so
+that it is added back to Portage. This is not difficult since the
+ebuild has been actively maintained via the Gentoo bug tracking system.
+At the very least, registering a vote for the Gentoo bug may be helpful.
+See <a class="reference external" href="http://bugs.gentoo.org/show_bug.cgi?id=190372">http://bugs.gentoo.org/show_bug.cgi?id=190372</a>.</li>
+<li>Set up an FTP mirror site for GraphicsMagick.</li>
+<li>Create a language interface using SWIG <<a class="reference external" href="http://www.swig.org/">http://www.swig.org/</a>> to
+support scripting in Perl, Python, TCL/TK, Guile, MzScheme, Ruby,
+Java, PHP, and CHICKEN, based on a common implementation.</li>
+<li>Create a new utility command parser based on a separate LALR or
+XML-based syntax definition, and using an approach suitable to
+replace the existing error-prone command parsers in magick/command.c</li>
+<li>Create a vector encoder for EPS, Postscript, PDF, SVG
+<<a class="reference external" href="http://www.w3.org/Graphics/SVG/">http://www.w3.org/Graphics/SVG/</a>>, Macromedia Flash
+(SWF), WebCGM <<a class="reference external" href="http://www.w3.org/Graphics/WebCGM/">http://www.w3.org/Graphics/WebCGM/</a>>, or WMF.</li>
+<li>Create an OpenEXR coder based on the OpenEXR
+<<a class="reference external" href="http://www.openexr.com/">http://www.openexr.com/</a>> library from Industrial Light & Magic.</li>
+<li>Create a <em>pstoedit</em> module to import Postscript, EPS, and PDF
+files as vector data using pstoedit <<a class="reference external" href="http://www.pstoedit.net/">http://www.pstoedit.net/</a>> which
+already includes a high-quality driver to render Postscript vectors via
+GraphicsMagick. This module could also export vector data in many
+formats using pstoedit's output drivers.</li>
+<li>Work on adding EXIF profile writing support which works for JPEG and
+TIFF formats.</li>
+<li>Add integrated Adobe XMP
+<<a class="reference external" href="http://www.adobe.com/products/xmp/index.html">http://www.adobe.com/products/xmp/index.html</a>> profile support for
+TIFF, JPEG, PNG, PDF, EPS, and Postscript.</li>
+<li>Port Erik Reinhard's super-cool Parameter Estimation For
+Photographic Tone Reproduction
+<<a class="reference external" href="http://www.cs.ucf.edu/~reinhard/Reinhard02/">http://www.cs.ucf.edu/~reinhard/Reinhard02/</a>> algorithm to
+GraphicsMagick.</li>
+<li>Create a replacement (using a portable Widget set such as FLTK) for the
+IMDisplay Windows GUI program and possibly the X11 'display' program.</li>
+<li>Create an interface between GraphicsMagick and OpenOffice.org.
+<<a class="reference external" href="http://www.openoffice.org/">http://www.openoffice.org/</a>> so that OpenOffice may load and save
+any format supported by GraphicsMagick. OpenOffice.org offers a
+separate SDK so there may be a number of other opportunities to
+explore.</li>
+<li>Complete the port of ralcgm to Windows so that it may be used as a
+delegate under Windows.</li>
+</ul>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</div>
+</body>
+</html>
* Complete the port of ralcgm to Windows so that it may be used as a
delegate under Windows.
-
---------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
<a href="GraphicsMagick.html"><em>GraphicsMagick(1)</em></a>.
<br> <br>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
gm convert -delay 20 dna.* dna.mng
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<a href="GraphicsMagick.html"><em>GraphicsMagick(1)</em></a>.
<br> <br>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<dd><img SRC="images/ball.png" ALT="*">display images specified by a World Wide Web (WWW) uniform resource locator (URL)
</dl>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
gm gm convert file.jpg HISTOGRAM:- | gm display -
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<a href="GraphicsMagick.html"><em>GraphicsMagick(1)</em></a>.
<br> <br>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
and
<a href="miff.html">miff</a> for more details.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
Move the pointer away from the sub-menu if you decide not to execute a
particular command.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
Press ALT and one of the arrow keys to trim off one pixel from any side
of the image.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
gm display.pan.geometry: 256x256
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
To select your image from the X server screen instead of from a file, Choose
<strong>Grab</strong> of the <strong>Open</strong> widget.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
the <strong>File</strong> sub-menu of the Command widget to return to the Visual
Image Directory.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
corners, pressing a button, and dragging. Finally, press Cut to commit
your copy region. To exit without cutting the image, press Dismiss.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
corners, pressing a button, and dragging. Finally, press Copy to commit
your copy region. To exit without copying the image, press Dismiss.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<em>PseudoClass</em> image to remain <em>PseudoClass</em>,
use <strong>-colors</strong>.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
corners, pressing a button, and dragging. Finally, press Crop to commit
your cropping region. To exit without cropping the image, press Dismiss.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
To cancel the image chopping, move the pointer back to the starting point
of the line and release the button.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
To cancel the image rotation, move the pointer back to the starting point
of the line and release the button.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
Pattern Recognition, Volume 23, Number 9, pages 935-952, 1990.</blockquote>
<br> <br>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
to remain
<em>PseudoClass</em>, use <strong>-colors</strong>.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
To force a <em>PseudoClass</em> image to remain <em>PseudoClass</em>,
use <strong>-colors</strong>.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
To force a <em>PseudoClass</em> image to remain
<em>PseudoClass</em>, use <strong>-colors</strong>.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
matte editing behavior may require a <em>TrueColor</em> or <em>DirectColor</em>
visual or a <em>Standard Colormap</em>.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
To cancel image drawing, move the pointer back to the starting point of
the line and release the button.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
you can move the region of interest before applying another image processing
technique. To exit, press Dismiss.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
The panning icon is withdrawn if the image becomes smaller than the dimensions
of the X server screen.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
are considered a precious resource, use them with discretion.</dd>
</dl>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Download</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-download">
from the <a class="reference external" href="http://sourceforge.net/projects/graphicsmagick/files/">SourceForge Download</a> page since SourceForge has lots of
bandwidth, and many mirror sites. Snapshot packages should usually be
retrieved from the <a class="reference external" href="ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/">GraphicsMagick FTP</a> site or one of its mirrors.
-There are mirrors of the ftp site in Czechoslovakia and Poland.</p>
+There are mirrors of the ftp site in the Czech Republic and Poland.</p>
<div class="section" id="ftp-site-organization">
<h1><a class="toc-backref" href="#id1">Ftp Site Organization</a></h1>
<p>The organization of the GraphicsMagick directory on ftp sites is as
<p><a class="reference external" href="ftp://ftp.icm.edu.pl/pub/unix/graphics/GraphicsMagick/">Polish ftp mirror via ftp</a> (ftp protocol)</p>
<p><a class="reference external" href="http://ftp.icm.edu.pl/pub/unix/graphics/GraphicsMagick/">Polish ftp mirror via http</a> (http protocol)</p>
</blockquote>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Download</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-download">
+<h1 class="title">GraphicsMagick Download</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#ftp-site-organization" id="id1">Ftp Site Organization</a></li>
+<li><a class="reference internal" href="#download-sites" id="id2">Download Sites</a></li>
+</ul>
+</div>
+<p>The source distribution of GraphicsMagick as well as pre-compiled
+binaries are available at the sites listed here (unless otherwise
+noted). At the moment, the fastest way to obtain formal releases is
+from the <a class="reference external" href="http://sourceforge.net/projects/graphicsmagick/files/">SourceForge Download</a> page since SourceForge has lots of
+bandwidth, and many mirror sites. Snapshot packages should usually be
+retrieved from the <a class="reference external" href="ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/">GraphicsMagick FTP</a> site or one of its mirrors.
+There are mirrors of the ftp site in Czechoslovakia and Poland.</p>
+<div class="section" id="ftp-site-organization">
+<h1><a class="toc-backref" href="#id1">Ftp Site Organization</a></h1>
+<p>The organization of the GraphicsMagick directory on ftp sites is as
+follows:</p>
+<p><a class="reference external" href="ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/">GraphicsMagick FTP</a></p>
+<blockquote>
+Contains the core GraphicsMagick sources in a file named similar to
+GraphicsMagick-1.3.tar.bz2, GraphicsMagick-1.3.tar.gz, or
+GraphicsMagick-1.3.tar.xz. These core sources are sufficient to
+compile a minimal GraphicsMagick on a Unix system (including
+MacOS-X), or under the Cygwin and MinGW environments for Windows.
+Additional development packages need to be installed in advance to
+support formats like JPEG and PNG.</blockquote>
+<p><a class="reference external" href="ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/delegates/">delegates</a></p>
+<blockquote>
+Add on third-party libraries and applications which extend the
+formats supported by GraphicsMagick may be obtained from this
+directory. Windows users can usually ignore the contents of this
+directory since all common delegates are included in the Windows
+source and binaries packages.</blockquote>
+<p><a class="reference external" href="ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/linux/">linux</a></p>
+<blockquote>
+Linux source RPM (SRPM) packages for Red Hat Linux, other Linux
+systems, or any system with RPM installed, may be found here.</blockquote>
+<p><a class="reference external" href="ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/snapshots/">snapshots</a></p>
+<blockquote>
+Snapshots (between releases) copies of GraphicsMagick may be found
+here. New snapshots may be cut every few days as time
+permits. Quality may vary (but is usually excellent).</blockquote>
+<p><a class="reference external" href="ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/windows/">windows</a></p>
+<blockquote>
+Installable binary packages and the extended source code package for
+use with Microsoft Visual C++ (including configured delegates and a
+Visual C++ workspace) may be found here.</blockquote>
+</div>
+<div class="section" id="download-sites">
+<h1><a class="toc-backref" href="#id2">Download Sites</a></h1>
+<p>Here are some known download sites for GraphicsMagick:</p>
+<blockquote>
+<p><a class="reference external" href="https://sourceforge.net/projects/graphicsmagick/files/">SourceForge file download</a> (http protocol)</p>
+<p><a class="reference external" href="http://78.108.103.11/MIRROR/ftp/GraphicsMagick/">Czech ftp mirror</a> (http protocol)</p>
+<p><a class="reference external" href="ftp://ftp.icm.edu.pl/pub/unix/graphics/GraphicsMagick/">Polish ftp mirror via ftp</a> (ftp protocol)</p>
+<p><a class="reference external" href="http://ftp.icm.edu.pl/pub/unix/graphics/GraphicsMagick/">Polish ftp mirror via http</a> (http protocol)</p>
+</blockquote>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</div>
+</body>
+</html>
from the `SourceForge Download`_ page since SourceForge has lots of
bandwidth, and many mirror sites. Snapshot packages should usually be
retrieved from the `GraphicsMagick FTP`_ site or one of its mirrors.
-There are mirrors of the ftp site in Czechoslovakia and Poland.
+There are mirrors of the ftp site in the Czech Republic and Poland.
Ftp Site Organization
---------------------
`Polish ftp mirror via ftp <ftp://ftp.icm.edu.pl/pub/unix/graphics/GraphicsMagick/>`_ (ftp protocol)
`Polish ftp mirror via http <http://ftp.icm.edu.pl/pub/unix/graphics/GraphicsMagick/>`_ (http protocol)
-
---------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Supported Formats</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-supported-formats">
extensions: .gz for Zip compression, .Z for Unix compression, and .bz2
for block compression. For example, a PNM image called image.pnm.gz is
automatically uncompressed while the image is read.</p>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Supported Formats</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-supported-formats">
+<h1 class="title">GraphicsMagick Supported Formats</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>GraphicsMagick uses an ASCII string known as "magick" (e.g. "GIF") to
+identify file formats, algorithms acting as formats, built-in images, and
+embedded profile types. After a file has been read or "pinged", the
+associated magick string is stored in the "magick" member of the Image
+structure, and is reported in the default output of 'gm identify'.</p>
+<p>GraphicsMagick supports reading over 88 major file formats (not including
+sub-formats). The following table provides a summary of the supported
+image formats.</p>
+<table border="1" class="docutils">
+<caption>Supported Image Formats</caption>
+<colgroup>
+<col width="14%" />
+<col width="6%" />
+<col width="28%" />
+<col width="52%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Format</td>
+<td>Mode</td>
+<td>Description</td>
+<td>Notes</td>
+</tr>
+<tr><td>ART</td>
+<td>RW</td>
+<td>PFS: 1st Publisher</td>
+<td>Format originally used on the Macintosh
+(MacPaint?) and later used for PFS: 1st
+Publisher clip art.</td>
+</tr>
+<tr><td>AVS</td>
+<td>RW</td>
+<td>AVS X image</td>
+<td> </td>
+</tr>
+<tr><td><a class="reference external" href="http://www.fileformat.info/format/bmp/egff.htm">BMP</a></td>
+<td>RW</td>
+<td>Microsoft Windows bitmap</td>
+<td> </td>
+</tr>
+<tr><td><a class="reference external" href="http://www.fileformat.info/format/cals/egff.htm">CALS</a></td>
+<td>R</td>
+<td>Continuous Acquisition
+and Life-cycle Support
+Type 1 image</td>
+<td>Specified in MIL-R-28002 and MIL-PRF-28002.
+Standard blueprint archive format as used by the
+US military to replace microfiche.</td>
+</tr>
+<tr><td><a class="reference external" href="motion-picture.html">CIN</a></td>
+<td>R</td>
+<td>Kodak Cineon</td>
+<td>Kodak Cineon Log format (4.5 draft).
+Precursor to SMPTE <a class="reference external" href="motion-picture.html">DPX</a></td>
+</tr>
+<tr><td><a class="reference external" href="http://www.fileformat.info/format/cgm/egff.htm">CGM</a></td>
+<td>R</td>
+<td>Computer Graphics
+Metafile</td>
+<td>Requires <a class="reference external" href="http://www.agocg.ac.uk/train/cgm/ralcgm.htm">ralcgm</a> to render CGM files.</td>
+</tr>
+<tr><td>CMYK</td>
+<td>RW</td>
+<td>Raw cyan, magenta,
+yellow, and black samples</td>
+<td>Use -size, -depth, -endian, and -interlace to
+specify the image width, height, depth, byte
+order, and interlace.</td>
+</tr>
+<tr><td>CUR</td>
+<td>R</td>
+<td>Microsoft Cursor Icon</td>
+<td> </td>
+</tr>
+<tr><td>CUT</td>
+<td>R</td>
+<td>DR Halo</td>
+<td> </td>
+</tr>
+<tr><td>DCM</td>
+<td>R</td>
+<td>Digital Imaging and
+Communications in
+Medicine (<a class="reference external" href="http://dicom.nema.org/">DICOM</a>) image</td>
+<td>Used by the medical community for images like
+X-rays. See the NEMA <a class="reference external" href="http://dicom.nema.org/">DICOM</a> web site for more
+information. <a class="reference external" href="http://dicom.nema.org/">DICOM</a> is the basis for the
+<a class="reference external" href="http://www.geinspectiontechnologies.com/en/products/software/diconde.html">DICONDE</a> format.</td>
+</tr>
+<tr><td>DCX</td>
+<td>RW</td>
+<td>ZSoft IBM PC multi-page
+Paintbrush image</td>
+<td> </td>
+</tr>
+<tr><td>DIB</td>
+<td>RW</td>
+<td>Microsoft Windows Device
+Independent Bitmap</td>
+<td>DIB is a BMP file without the BMP header. Used
+to support embedded images in compound formats
+like WMF.</td>
+</tr>
+<tr><td><a class="reference external" href="motion-picture.html">DPX</a></td>
+<td>RW</td>
+<td>Digital Moving Picture
+Exchange</td>
+<td>RGB and grayscale are fully supported at 1, 8,
+10, 12, and 16 bits as per the <a class="reference external" href="http://www.smpte.org/">SMPTE</a> 268M-2003
+(V2.0) specification. This includes support for
+images stored in a planar (multi-element)
+configuration and Cineon Log RGB. Rec. 601 and
+709 YCbCr are fully supported with 4:4:4 and
+4:2:2 subsampling. <a class="reference external" href="motion-picture.html">DPX</a> is commonly used to
+store image frames in film and HDTV production.</td>
+</tr>
+<tr><td>EMF</td>
+<td>R</td>
+<td>Microsoft Enhanced
+Metafile (32-bit)</td>
+<td>Only available under Microsoft Windows.</td>
+</tr>
+<tr><td>EPDF</td>
+<td>RW</td>
+<td>Encapsulated Portable
+Document Format</td>
+<td> </td>
+</tr>
+<tr><td>EPI</td>
+<td>RW</td>
+<td>Adobe Encapsulated
+PostScript Interchange
+format</td>
+<td>Requires <a class="reference external" href="http://pages.cs.wisc.edu/~ghost/">Ghostscript</a> to read.</td>
+</tr>
+<tr><td>EPS</td>
+<td>RW</td>
+<td>Adobe Encapsulated
+PostScript</td>
+<td>Requires <a class="reference external" href="http://pages.cs.wisc.edu/~ghost/">Ghostscript</a> to read.</td>
+</tr>
+<tr><td>EPS2</td>
+<td>W</td>
+<td>Adobe Level II
+Encapsulated PostScript</td>
+<td>Requires <a class="reference external" href="http://pages.cs.wisc.edu/~ghost/">Ghostscript</a> to read.</td>
+</tr>
+<tr><td>EPS3</td>
+<td>W</td>
+<td>Adobe Level III
+Encapsulated PostScript</td>
+<td>Requires <a class="reference external" href="http://pages.cs.wisc.edu/~ghost/">Ghostscript</a> to read.</td>
+</tr>
+<tr><td>EPSF</td>
+<td>RW</td>
+<td>Adobe Encapsulated
+PostScript</td>
+<td>Requires <a class="reference external" href="http://pages.cs.wisc.edu/~ghost/">Ghostscript</a> to read.</td>
+</tr>
+<tr><td>EPSI</td>
+<td>RW</td>
+<td>Adobe Encapsulated
+PostScript Interchange
+format</td>
+<td>Requires <a class="reference external" href="http://pages.cs.wisc.edu/~ghost/">Ghostscript</a> to read.</td>
+</tr>
+<tr><td>EPT</td>
+<td>RW</td>
+<td>Adobe Encapsulated
+PostScript Interchange
+format with <a class="reference external" href="http://www.simplesystems.org/libtiff/">TIFF</a> preview</td>
+<td>Requires <a class="reference external" href="http://pages.cs.wisc.edu/~ghost/">Ghostscript</a> to read.</td>
+</tr>
+<tr><td>FAX</td>
+<td>RW</td>
+<td>Group 3 FAX</td>
+<td>Note that FAX machines use non-square pixels
+which are 1.5 times wider than they are tall but
+computer displays use square pixels, so FAX
+images may appear to be narrow unless they are
+explicitly resized using a resize specification
+of "150x100%". Please note that this is <em>not</em> a
+<a class="reference external" href="http://www.simplesystems.org/libtiff/">TIFF</a> format.</td>
+</tr>
+<tr><td>FIG</td>
+<td>R</td>
+<td>FIG graphics format</td>
+<td>Requires TransFig.</td>
+</tr>
+<tr><td><a class="reference external" href="http://www.cv.nrao.edu/fits/">FITS</a></td>
+<td>RW</td>
+<td>Flexible Image Transport
+System</td>
+<td> </td>
+</tr>
+<tr><td>FPX</td>
+<td>RW</td>
+<td>FlashPix Format</td>
+<td>Requires FlashPix SDK.</td>
+</tr>
+<tr><td><a class="reference external" href="http://www.fileformat.info/format/gif/egff.htm">GIF</a></td>
+<td>RW</td>
+<td>CompuServe Graphics
+Interchange Format</td>
+<td><p class="first">8-bit RGB PseudoColor with up to 256 palette
+entires. Specify the format "GIF87" to write the
+older version 87a of the format.</p>
+<p class="last">The PNG format provides a superior set of
+features to GIF. Consider using PNG format
+rather than GIF if clients are able to read PNG.</p>
+</td>
+</tr>
+<tr><td>GRAY</td>
+<td>RW</td>
+<td>Raw gray samples</td>
+<td>Use -size, -depth, and -endian to specify the
+image width, height, depth, and byte order.</td>
+</tr>
+<tr><td>GRAYA</td>
+<td>RW</td>
+<td>Raw gray samples + alpha</td>
+<td>Use -size, -depth, and -endian to specify the
+image width, height, depth, and byte order.</td>
+</tr>
+<tr><td>HPGL</td>
+<td>R</td>
+<td>HP-GL plotter language</td>
+<td>Requires <a class="reference external" href="http://www.gnu.org/software/hp2xx/hp2xx.html">hp2xx</a> 3.2.0 or later</td>
+</tr>
+<tr><td>HTML</td>
+<td>RW</td>
+<td>Hypertext Markup Language
+with a client-side image
+map</td>
+<td>Also known as "HTM". Requires html2ps to read.</td>
+</tr>
+<tr><td>ICO</td>
+<td>R</td>
+<td>Microsoft icon</td>
+<td>Also known as "ICON".</td>
+</tr>
+<tr><td><a class="reference external" href="http://www.jpeg.org/">JBIG</a></td>
+<td>RW</td>
+<td>Joint Bi-level Image
+experts Group file
+interchange format</td>
+<td>Also known as "BIE" and "JBG". Requires
+<a class="reference external" href="http://www.cl.cam.ac.uk/~mgk25/jbigkit/">jbigkit</a> 1.0 or later</td>
+</tr>
+<tr><td><a class="reference external" href="http://www.libmng.com/">JNG</a></td>
+<td>RW</td>
+<td><a class="reference external" href="http://www.jpeg.org/">JPEG</a> Network Graphics</td>
+<td><a class="reference external" href="http://www.jpeg.org/">JPEG</a> in a PNG-style wrapper with transparency.
+Requires libjpeg and libpng-1.0.2 or later,
+libpng-1.2.5 or later recommended.</td>
+</tr>
+<tr><td>JP2</td>
+<td>RW</td>
+<td>JPEG-2000 JP2 File Format
+Syntax</td>
+<td>Requires <a class="reference external" href="http://www.ece.uvic.ca/~mdadams/jasper/">jasper</a> 1.600.0 or later</td>
+</tr>
+<tr><td>JPC</td>
+<td>RW</td>
+<td>JPEG-2000 Code Stream
+Syntax</td>
+<td>Requires <a class="reference external" href="http://www.ece.uvic.ca/~mdadams/jasper/">jasper</a> 1.600.0 or later</td>
+</tr>
+<tr><td><a class="reference external" href="http://www.jpeg.org/">JPEG</a></td>
+<td>RW</td>
+<td>Joint Photographic
+Experts Group JFIF format</td>
+<td>Requires jpegsrc.v6b.tar.gz</td>
+</tr>
+<tr><td>MAN</td>
+<td>R</td>
+<td>Unix reference manual
+pages</td>
+<td>Requires that GNU groff and Ghostcript are
+installed.</td>
+</tr>
+<tr><td>MAT</td>
+<td>RW</td>
+<td>MATLAB image format</td>
+<td>Coming from <a class="reference external" href="http://www.mathworks.com/">MathWorks</a> for storing matrices.
+Currently supported types are 2D matrices: byte,
+word, double, complex and 3D matrices containing
+RGB [x*y*3] byte, word.</td>
+</tr>
+<tr><td><a class="reference external" href="miff.html">MIFF</a></td>
+<td>RW</td>
+<td>Magick image file format</td>
+<td>ImageMagick's lossless image format (with
+ASCII header) which ensures that no image
+attributes understood by ImageMagick or
+GraphicsMagick are lost.</td>
+</tr>
+<tr><td>MONO</td>
+<td>RW</td>
+<td>Bi-level bitmap in
+least-significant-byte
+first order</td>
+<td> </td>
+</tr>
+<tr><td><a class="reference external" href="http://www.libmng.com/">MNG</a></td>
+<td>RW</td>
+<td>Multiple-image Network
+Graphics</td>
+<td>Requires libpng-1.0.2 or later, libpng-1.2.5 or
+later recommended.</td>
+</tr>
+<tr><td><a class="reference external" href="http://www.mpeg.org/">MPEG</a></td>
+<td>RW</td>
+<td>Motion Picture Experts
+Group file interchange
+format (version 1)</td>
+<td>Requires mpeg2vidcodec_v12.tar.gz.</td>
+</tr>
+<tr><td><a class="reference external" href="http://www.mpeg.org/">M2V</a></td>
+<td>RW</td>
+<td>Motion Picture Experts
+Group file interchange
+format (version 2)</td>
+<td>Requires mpeg2vidcodec_v12.tar.gz.</td>
+</tr>
+<tr><td>MPC</td>
+<td>RW</td>
+<td>Magick Persistent Cache
+image file format</td>
+<td><p class="first">The native "in-memory" GraphicsMagick
+uncompressed file format. This file format is
+identical to that used by Open ImageMagick to
+represent images in memory and is read in "zero
+time" via memory mapping. The MPC format is not
+portable and is not suitable as an archive
+format. It is suitable as an intermediate format
+for high-performance image processing.</p>
+<p class="last">The MPC format requires two files to support one
+image. When writing the MPC format, a file with
+extension ".mpc" is used to store information
+about the image, while a file with extension
+<tt class="docutils literal">.cache</tt> stores the image pixels. The storage
+space required by a MPC image (or an image in
+memory) may be calculated by the equation
+(QuantumDepth*Rows*Columns*5)/8.</p>
+</td>
+</tr>
+<tr><td>MSL</td>
+<td>RW</td>
+<td>Magick Scripting Language</td>
+<td>MSL is the XML-based scripting language
+supported by the conjure utility.</td>
+</tr>
+<tr><td><a class="reference external" href="http://www.fileformat.info/format/mtv/egff.htm">MTV</a></td>
+<td>RW</td>
+<td>MTV Raytracing image
+format</td>
+<td> </td>
+</tr>
+<tr><td>MVG</td>
+<td>RW</td>
+<td>Magick Vector Graphics.</td>
+<td>The native GraphicsMagick vector metafile
+format. A text file containing vector drawing
+commands accepted by <a class="reference external" href="convert.html">convert</a>'s -draw option.</td>
+</tr>
+<tr><td>OTB</td>
+<td>RW</td>
+<td>On-the-air Bitmap</td>
+<td> </td>
+</tr>
+<tr><td>P7</td>
+<td>RW</td>
+<td>Xv's Visual Schnauzer
+thumbnail format</td>
+<td> </td>
+</tr>
+<tr><td>PALM</td>
+<td>RW</td>
+<td>Palm pixmap</td>
+<td> </td>
+</tr>
+<tr><td><a class="reference external" href="http://netpbm.sourceforge.net/doc/pam.html">PAM</a></td>
+<td>RW</td>
+<td>Portable Arbitrary Map
+format</td>
+<td>Superset of PNM (PPM, PGM, PPM) raw type formats.
+Supports bilevel, gray, RGB, CMYK, alpha channel.</td>
+</tr>
+<tr><td><a class="reference external" href="http://www.fileformat.info/format/pbm/egff.htm">PBM</a></td>
+<td>RW</td>
+<td>Portable bitmap format
+(black and white)</td>
+<td> </td>
+</tr>
+<tr><td>PCD</td>
+<td>RW</td>
+<td>Photo CD</td>
+<td>The maximum resolution written is 768x512 pixels
+since larger images require huffman compression
+(which is not supported).</td>
+</tr>
+<tr><td>PCDS</td>
+<td>RW</td>
+<td>Photo CD</td>
+<td>Decode with the sRGB color tables.</td>
+</tr>
+<tr><td>PCL</td>
+<td>W</td>
+<td>HP Page Control Language</td>
+<td>For output to HP laser printers.</td>
+</tr>
+<tr><td><a class="reference external" href="http://www.fileformat.info/format/pcx/egff.htm">PCX</a></td>
+<td>RW</td>
+<td>ZSoft IBM PC Paintbrush
+file</td>
+<td> </td>
+</tr>
+<tr><td>PDB</td>
+<td>RW</td>
+<td>Palm Database ImageViewer
+Format</td>
+<td> </td>
+</tr>
+<tr><td>PDF</td>
+<td>RW</td>
+<td>Portable Document Format</td>
+<td>Requires <a class="reference external" href="http://pages.cs.wisc.edu/~ghost/">Ghostscript</a> to read.</td>
+</tr>
+<tr><td>PFA</td>
+<td>R</td>
+<td>Postscript Type 1 font
+(ASCII)</td>
+<td>Opening as file returns a preview image.</td>
+</tr>
+<tr><td>PFB</td>
+<td>R</td>
+<td>Postscript Type 1 font
+(binary)</td>
+<td>Opening as file returns a preview image.</td>
+</tr>
+<tr><td>PGM</td>
+<td>RW</td>
+<td>Portable graymap format
+(gray scale)</td>
+<td> </td>
+</tr>
+<tr><td>PICON</td>
+<td>RW</td>
+<td>Personal Icon</td>
+<td> </td>
+</tr>
+<tr><td>PICT</td>
+<td>RW</td>
+<td>Apple Macintosh QuickDraw
+/PICT file</td>
+<td> </td>
+</tr>
+<tr><td>PIX</td>
+<td>R</td>
+<td>Alias/Wavefront RLE image
+format</td>
+<td> </td>
+</tr>
+<tr><td>PNG</td>
+<td>RW</td>
+<td>Portable Network Graphics</td>
+<td>Requires libpng-1.0.2 or later, libpng-1.2.5 or
+later recommended.</td>
+</tr>
+<tr><td>PNM</td>
+<td>RW</td>
+<td>Portable anymap</td>
+<td><p class="first">PNM is a family of formats supporting portable
+bitmaps (PBM) , graymaps (PGM), and pixmaps
+(PPM). There is no file format associated with
+pnm itself. If PNM is used as the output format
+specifier, then GraphicsMagick automatically
+selects the most appropriate format to represent
+the image.</p>
+<p class="last">The default is to write the binary version of
+the formats. Use '-quality 0' to write the
+ASCII version of the formats.</p>
+</td>
+</tr>
+<tr><td>PPM</td>
+<td>RW</td>
+<td>Portable pixmap format
+(color)</td>
+<td> </td>
+</tr>
+<tr><td>PS</td>
+<td>RW</td>
+<td>Adobe PostScript file</td>
+<td>Requires <a class="reference external" href="http://pages.cs.wisc.edu/~ghost/">Ghostscript</a> to read.</td>
+</tr>
+<tr><td>PS2</td>
+<td>RW</td>
+<td>Adobe Level II PostScript
+file</td>
+<td>Requires <a class="reference external" href="http://pages.cs.wisc.edu/~ghost/">Ghostscript</a> to read.</td>
+</tr>
+<tr><td>PS3</td>
+<td>RW</td>
+<td>Adobe Level III
+PostScript file</td>
+<td>Requires <a class="reference external" href="http://pages.cs.wisc.edu/~ghost/">Ghostscript</a> to read.</td>
+</tr>
+<tr><td>PSD</td>
+<td>RW</td>
+<td>Adobe Photoshop bitmap
+file</td>
+<td>PSD format is no longer supported since the
+1.3.24 release.</td>
+</tr>
+<tr><td>PTIF</td>
+<td>RW</td>
+<td>Pyramid encoded <a class="reference external" href="http://www.simplesystems.org/libtiff/">TIFF</a></td>
+<td>Multi-resolution <a class="reference external" href="http://www.simplesystems.org/libtiff/">TIFF</a> containing successively
+smaller versions of the image down to the size
+of an icon. The desired sub-image size may be
+specified when reading via the -size option.</td>
+</tr>
+<tr><td><a class="reference external" href="http://www.photoworks.com/">PWP</a></td>
+<td>R</td>
+<td>Seattle File Works
+multi-image file</td>
+<td> </td>
+</tr>
+<tr><td>RAS</td>
+<td>R</td>
+<td><a class="reference external" href="http://www.topol.cz/english/share/index.php3">TopoL</a> (GIS)</td>
+<td> </td>
+</tr>
+<tr><td>RAD</td>
+<td>R</td>
+<td><a class="reference external" href="http://radsite.lbl.gov/radiance/HOME.html">Radiance</a> image file</td>
+<td>Requires that ra_ppm from the <a class="reference external" href="http://radsite.lbl.gov/radiance/HOME.html">Radiance</a> software
+package be installed.</td>
+</tr>
+<tr><td>RGB</td>
+<td>RW</td>
+<td>Raw red, green, and blue
+samples</td>
+<td>Use -size, -depth, -endian, and -interlace to
+specify the image width, height, depth, byte
+order, and interlace.</td>
+</tr>
+<tr><td>RGBA</td>
+<td>RW</td>
+<td>Raw red, green, and blue
+and matte samples</td>
+<td>Use -size, -depth, -endian, and -interlace to
+specify the image width, height, depth, byte
+order, and interlace.</td>
+</tr>
+<tr><td>RLA</td>
+<td>R</td>
+<td>Alias/Wavefront image
+file</td>
+<td> </td>
+</tr>
+<tr><td>RLE</td>
+<td>R</td>
+<td>Utah Run length encoded
+image file</td>
+<td> </td>
+</tr>
+<tr><td><a class="reference external" href="http://oreilly.com/www/centers/gff/formats/scitex/">SCT</a></td>
+<td>R</td>
+<td>Scitex Continuous Tone
+Picture</td>
+<td> </td>
+</tr>
+<tr><td><a class="reference external" href="http://www.algonet.se/~cyren/sfw/">SFW</a></td>
+<td>R</td>
+<td>Seattle File Works image</td>
+<td> </td>
+</tr>
+<tr><td>SGI</td>
+<td>RW</td>
+<td>Irix RGB image</td>
+<td> </td>
+</tr>
+<tr><td>SHTML</td>
+<td>W</td>
+<td>Hypertext Markup Language
+client-side image map</td>
+<td>Used to write HTML clickable image maps based on
+a the output of montage or a format which
+supports tiled images such as <a class="reference external" href="miff.html">MIFF</a>.</td>
+</tr>
+<tr><td>SUN</td>
+<td>RW</td>
+<td>SUN Rasterfile</td>
+<td> </td>
+</tr>
+<tr><td><a class="reference external" href="http://www.w3.org/Graphics/SVG/">SVG</a></td>
+<td>RW</td>
+<td>Scalable Vector Graphics</td>
+<td>Requires <a class="reference external" href="http://xmlsoft.org/">libxml2</a> and <a class="reference external" href="http://www.freetype.org/">freetype2</a>. Note that <a class="reference external" href="http://www.w3.org/Graphics/SVG/">SVG</a>
+is a very complex specification so support is
+still not complete.</td>
+</tr>
+<tr><td>TGA</td>
+<td>RW</td>
+<td>Truevision Targa image</td>
+<td>Also known as formats "ICB", "VDA", and "VST".</td>
+</tr>
+<tr><td><a class="reference external" href="http://www.simplesystems.org/libtiff/">TIFF</a></td>
+<td>RW</td>
+<td>Tagged Image File Format</td>
+<td>Also known as "TIF". Requires tiff-v3.5.4.tar.gz
+or later. Note that since the Unisys LZW patent
+recently expired, libtiff may still require a
+separate LZW patch in order to support LZW. LZW
+is included in libtiff by default since v3.7.0.</td>
+</tr>
+<tr><td>TIM</td>
+<td>R</td>
+<td>PSX TIM file</td>
+<td> </td>
+</tr>
+<tr><td>TTF</td>
+<td>R</td>
+<td>TrueType font file</td>
+<td>Requires <a class="reference external" href="http://www.freetype.org/">freetype2</a>. Opening as file returns a
+preview image.</td>
+</tr>
+<tr><td>TXT</td>
+<td>RW</td>
+<td>Raw text file</td>
+<td> </td>
+</tr>
+<tr><td>UIL</td>
+<td>W</td>
+<td>X-Motif UIL table</td>
+<td> </td>
+</tr>
+<tr><td>UYVY</td>
+<td>RW</td>
+<td>Interleaved YUV raw image</td>
+<td>Use -size command line option to specify width
+and height.</td>
+</tr>
+<tr><td>VICAR</td>
+<td>RW</td>
+<td>VICAR rasterfile format</td>
+<td> </td>
+</tr>
+<tr><td><a class="reference external" href="http://www.fileformat.info/format/viff/egff.htm">VIFF</a></td>
+<td>RW</td>
+<td>Khoros Visualization
+Image File Format</td>
+<td> </td>
+</tr>
+<tr><td><a class="reference external" href="http://www.openmobilealliance.org/Technical/wapindex.aspx">WBMP</a></td>
+<td>RW</td>
+<td>Wireless bitmap</td>
+<td>Support for uncompressed monochrome only.</td>
+</tr>
+<tr><td><a class="reference external" href="http://www.fileformat.info/format/wmf/egff.htm">WMF</a></td>
+<td> </td>
+<td>Windows Metafile</td>
+<td>Requires libwmf. By default, renders WMF files
+using the dimensions specified by the metafile
+header. Use the -density option to adjust the
+output resolution, and thereby adjust the ouput
+size. The default output resolution is 72DPI so
+"-density 144" results in an image twice as
+large as the default. Use -background <a class="reference external" href="color.html">color</a> to
+specify the WMF background color (default white)
+or -texture filename to specify a background
+texture image.</td>
+</tr>
+<tr><td><a class="reference external" href="http://www.fileformat.info/format/wpg/egff.htm">WPG</a></td>
+<td>R</td>
+<td>Word Perfect Graphics
+File</td>
+<td> </td>
+</tr>
+<tr><td><a class="reference external" href="http://www.fileformat.info/format/xbm/egff.htm">XBM</a></td>
+<td>RW</td>
+<td>X Windows system bitmap,
+black and white only</td>
+<td>Used by the X Windows System to store monochrome
+icons.</td>
+</tr>
+<tr><td>XCF</td>
+<td>R</td>
+<td>GIMP image</td>
+<td> </td>
+</tr>
+<tr><td><a class="reference external" href="http://www.fileformat.info/format/xpm/egff.htm">XPM</a></td>
+<td>RW</td>
+<td>X Windows system pixmap</td>
+<td>Also known as "PM". Used by the X Windows System
+to store color icons.</td>
+</tr>
+<tr><td><a class="reference external" href="http://www.fileformat.info/format/xwd/egff.htm">XWD</a></td>
+<td>RW</td>
+<td>X Windows system window
+dump</td>
+<td>Used by the X Windows System to save/display
+screen dumps.</td>
+</tr>
+<tr><td>YUV</td>
+<td>RW</td>
+<td>CCIR 601 4:1:1</td>
+<td>Use -size command line option to specify width
+and height.</td>
+</tr>
+</tbody>
+</table>
+<p>GraphicsMagick supports a number of image format specifications which
+refer to images prepared via an algorithm, or input/output targets. The
+following table lists these pseudo image formats:</p>
+<table border="1" class="docutils">
+<caption>Pseudo Image Formats</caption>
+<colgroup>
+<col width="13%" />
+<col width="6%" />
+<col width="25%" />
+<col width="56%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Tag</td>
+<td>Mode</td>
+<td>Description</td>
+<td>Notes</td>
+</tr>
+<tr><td>CAPTION</td>
+<td>R</td>
+<td>Image caption</td>
+<td>Draws text on a canvas image with size specified by <cite>-size</cite>
+canvas color as specified by <cite>-background' (default white),
+and text stroke and fill colors as specified by `-stroke</cite>
+and <cite>-fill</cite>. Capable of supporting multi-line text.</td>
+</tr>
+<tr><td>CLIPBOARD</td>
+<td>RW</td>
+<td>Windows Clipboard</td>
+<td>Only available under Microsoft Windows.</td>
+</tr>
+<tr><td>FRACTAL</td>
+<td>R</td>
+<td>Plasma fractal image</td>
+<td> </td>
+</tr>
+<tr><td>GRADIENT</td>
+<td>R</td>
+<td>Gradual passing from
+one shade to another</td>
+<td><p class="first">Returns a rendered gradient image using the
+specified image size. Specify the desired
+shading as part of the filename. For example:</p>
+<blockquote class="last">
+<tt class="docutils literal"><span class="pre">gradient:red-blue</span></tt> or <tt class="docutils literal"><span class="pre">gradient:#F00-#00F</span></tt></blockquote>
+</td>
+</tr>
+<tr><td>HISTOGRAM</td>
+<td>W</td>
+<td>Histogram of the image</td>
+<td><p class="first">Generate an RGB histogram of the input image.
+The output format is always ImageMagick <a class="reference external" href="miff.html">MIFF</a>
+(regardless of file extension). For example:</p>
+<blockquote class="last">
+<tt class="docutils literal">gm convert file.tiff histogram:file.miff</tt></blockquote>
+</td>
+</tr>
+<tr><td>IDENTITY</td>
+<td>R</td>
+<td><a class="reference external" href="http://www.quelsolaar.com/technology/clut.html">Hald CLUT</a> identity
+image</td>
+<td>Generate a Hald CLUT identity image of a specified order.
+The order is specified as an argument like "IDENTITY:8".
+The default order is eight, producing a 512x512 image.</td>
+</tr>
+<tr><td>INFO</td>
+<td>W</td>
+<td>Image descriptive
+information and
+statistics</td>
+<td>Writes descriptive information similar to 'identify'</td>
+</tr>
+<tr><td>LABEL</td>
+<td>R</td>
+<td>Text image format</td>
+<td>Specify the desired text as the filename (e.g.
+"label:This is a label").</td>
+</tr>
+<tr><td>MAP</td>
+<td>RW</td>
+<td>Colormap intensities
+and indices</td>
+<td>Set -depth to set the sample size of the
+intensities; indices are 16-bit if colors >
+256.</td>
+</tr>
+<tr><td>MATTE</td>
+<td>W</td>
+<td>MATTE format</td>
+<td>Write only.</td>
+</tr>
+<tr><td>NULL</td>
+<td>RW</td>
+<td>NULL image</td>
+<td>Useful for creating blank tiles with montage
+(use "NULL:"). Also useful as an output format
+when evaluating image read performance.</td>
+</tr>
+<tr><td>PLASMA</td>
+<td>R</td>
+<td>Plasma fractal image</td>
+<td><p class="first">Creates an image using the plasma fractal. For
+example:</p>
+<blockquote class="last">
+<tt class="docutils literal">gm convert <span class="pre">-size</span> 640x480 plasma: file.miff</tt></blockquote>
+</td>
+</tr>
+<tr><td>PREVIEW</td>
+<td>W</td>
+<td>Show a preview an image
+enhancement, effect, or
+f/x</td>
+<td><p class="first">Creates a preview montage of images prepared
+over a parameteric range in order to assist
+with parameter selection. Specify the desired
+preview type via the -preview option). The
+output file is always written in the
+ImageMagick <a class="reference external" href="miff.html">MIFF</a> format.</p>
+<p>For example:</p>
+<blockquote class="last">
+<tt class="docutils literal">gm convert file.tiff <span class="pre">-preview</span> gamma preview:file.miff</tt></blockquote>
+</td>
+</tr>
+<tr><td>PRINT</td>
+<td>W</td>
+<td>Send image to your
+computer printer</td>
+<td>Unix users may set the PRINTER (for 'lp') or
+LPDEST (for 'lpr') environment variables to
+select the desired printer.</td>
+</tr>
+<tr><td>SCAN</td>
+<td>R</td>
+<td>Import image from a
+scanner device</td>
+<td>Requires <a class="reference external" href="http://www.mostang.com/sane/">SANE</a> Specify the device name and path
+as the filename (e.g. "scan:mustek:/dev/scanner").</td>
+</tr>
+<tr><td>STEGANO</td>
+<td>R</td>
+<td>Steganographic image</td>
+<td>Use -size command line option to specify width,
+height, and offset of the steganographic image</td>
+</tr>
+<tr><td>TILE</td>
+<td>R</td>
+<td>Tiled image</td>
+<td><p class="first">Create a tiled version of an image at by tiling
+a image. Use -size to specify the tiled image
+size. The image is specified similar to
+"TILE:image.miff".
+For example:</p>
+<blockquote class="last">
+<tt class="docutils literal">gm convert <span class="pre">-size</span> 800x600 tile:image.jpg out.jpg</tt></blockquote>
+</td>
+</tr>
+<tr><td>VID</td>
+<td>RW</td>
+<td>Visual Image Directory</td>
+<td><p class="first">Used to create a thumbnailed directory (tiled
+thumbnails) of a set of images which may be
+used to select images to view via the display
+program, or saved to a <a class="reference external" href="miff.html">MIFF</a> or SHTML file.
+For example:</p>
+<blockquote class="last">
+<tt class="docutils literal">gm convert <span class="pre">vid:"*.jpg"</span> index.miff</tt></blockquote>
+</td>
+</tr>
+<tr><td>WIN</td>
+<td>RW</td>
+<td>Select image from or
+display image to your
+computer screen</td>
+<td><p class="first">Only supported under Microsoft Windows. For example:</p>
+<blockquote class="last">
+<tt class="docutils literal">gm convert file.jpg <span class="pre">-rotate</span> 90 win:</tt></blockquote>
+</td>
+</tr>
+<tr><td>X</td>
+<td>RW</td>
+<td>Select image from or
+display image to your X
+server screen</td>
+<td><p class="first">Also see the import and display programs. For example:</p>
+<blockquote class="last">
+<tt class="docutils literal">gm convert file.jpg <span class="pre">-rotate</span> 90 x:</tt></blockquote>
+</td>
+</tr>
+<tr><td>XC</td>
+<td>R</td>
+<td>Canvas image of
+specified color</td>
+<td><p class="first">Useful to create solid color "canvas" images.
+Use -size and -depth to specify the image
+width, height, and depth. Example XC color
+specifications include "XC:red" and "XC:#
+FF0000". See the <a class="reference external" href="color.html">color</a> reference for the
+numeric values used for named colors. For example:</p>
+<blockquote class="last">
+<tt class="docutils literal">gm convert <span class="pre">-size</span> 640x480 xc:red red.jpg</tt></blockquote>
+</td>
+</tr>
+</tbody>
+</table>
+<p>GraphicsMagick includes a number of built-in (embedded) images which may
+be referenced as if they were an image file. The <tt class="docutils literal">IMAGE:</tt> format tag may
+be used via the syntax "IMAGE:name" to request an embedded image (e.g.
+<tt class="docutils literal">IMAGE:LOGO</tt>). For backwards compatibility, the image specifications
+<tt class="docutils literal">GRANITE:</tt>, <tt class="docutils literal">LOGO:</tt>, <tt class="docutils literal">NETSCAPE:</tt>, and <tt class="docutils literal">ROSE:</tt> may also be used to request
+images with those names.</p>
+<p>A new canvas image of a specified size may be created using one of these pattern
+images using a command similar to:</p>
+<pre class="literal-block">
+gm convert -size 640x480 PATTERN:BRICKS bricks.miff
+</pre>
+<p>The TILE: virtual image type may also be used similar to:</p>
+<pre class="literal-block">
+gm convert -size 640x480 TILE:IMAGE:BRICKS bricks.miff
+</pre>
+<table border="1" class="docutils">
+<caption>Built-In Images And Patterns</caption>
+<colgroup>
+<col width="22%" />
+<col width="37%" />
+<col width="41%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Name</td>
+<td>Description</td>
+<td>Notes/Sample</td>
+</tr>
+<tr><td>BRICKS</td>
+<td>16x16 brick pattern</td>
+<td><img alt="bricks" src="images/patterns/bricks.png" /></td>
+</tr>
+<tr><td>CHECKERBOARD</td>
+<td>30x30 checkerboard pattern</td>
+<td><img alt="checkerboard" src="images/patterns/checkerboard.png" /></td>
+</tr>
+<tr><td>CIRCLES</td>
+<td>16x16 circles pattern</td>
+<td><img alt="circles" src="images/patterns/circles.png" /></td>
+</tr>
+<tr><td>CROSSHATCH</td>
+<td>8x4 crosshatch pattern</td>
+<td><img alt="crosshatch" src="images/patterns/crosshatch.png" /></td>
+</tr>
+<tr><td>CROSSHATCH30</td>
+<td>8x4 crosshatch pattern with lines
+at 30 degrees.</td>
+<td><img alt="crosshatch30" src="images/patterns/crosshatch30.png" /></td>
+</tr>
+<tr><td>CROSSHATCH45</td>
+<td>8x4 crosshatch pattern with lines
+at 45 degrees.</td>
+<td><img alt="crosshatch45" src="images/patterns/crosshatch45.png" /></td>
+</tr>
+<tr><td>FISHSCALES</td>
+<td>16x8 fish scales pattern</td>
+<td><img alt="fishscales" src="images/patterns/fishscales.png" /></td>
+</tr>
+<tr><td>GRANITE</td>
+<td>128x128 granite texture pattern</td>
+<td><img alt="granite" src="images/patterns/granite.png" /></td>
+</tr>
+<tr><td>GRAY0</td>
+<td>32x32 0% intensity gray</td>
+<td><img alt="gray0" src="images/patterns/gray0.png" /></td>
+</tr>
+<tr><td>GRAY5</td>
+<td>32x32 5% intensity gray</td>
+<td><img alt="gray5" src="images/patterns/gray5.png" /></td>
+</tr>
+<tr><td>GRAY10</td>
+<td>32x32 10% intensity gray</td>
+<td><img alt="gray10" src="images/patterns/gray10.png" /></td>
+</tr>
+<tr><td>GRAY15</td>
+<td>32x32 15% intensity gray</td>
+<td><img alt="gray15" src="images/patterns/gray15.png" /></td>
+</tr>
+<tr><td>GRAY20</td>
+<td>32x32 20% intensity gray</td>
+<td><img alt="gray20" src="images/patterns/gray20.png" /></td>
+</tr>
+<tr><td>GRAY25</td>
+<td>32x32 25% intensity gray</td>
+<td><img alt="gray25" src="images/patterns/gray25.png" /></td>
+</tr>
+<tr><td>GRAY30</td>
+<td>32x32 30% intensity gray</td>
+<td><img alt="gray30" src="images/patterns/gray30.png" /></td>
+</tr>
+<tr><td>GRAY35</td>
+<td>32x32 35% intensity gray</td>
+<td><img alt="gray35" src="images/patterns/gray35.png" /></td>
+</tr>
+<tr><td>GRAY40</td>
+<td>32x32 40% intensity gray</td>
+<td><img alt="gray40" src="images/patterns/gray40.png" /></td>
+</tr>
+<tr><td>GRAY45</td>
+<td>32x32 45% intensity gray</td>
+<td><img alt="gray45" src="images/patterns/gray45.png" /></td>
+</tr>
+<tr><td>GRAY50</td>
+<td>32x32 50% intensity gray</td>
+<td><img alt="gray50" src="images/patterns/gray50.png" /></td>
+</tr>
+<tr><td>GRAY55</td>
+<td>32x32 55% intensity gray</td>
+<td><img alt="gray55" src="images/patterns/gray55.png" /></td>
+</tr>
+<tr><td>GRAY60</td>
+<td>32x32 60% intensity gray</td>
+<td><img alt="gray60" src="images/patterns/gray60.png" /></td>
+</tr>
+<tr><td>GRAY65</td>
+<td>32x32 65% intensity gray</td>
+<td><img alt="gray65" src="images/patterns/gray65.png" /></td>
+</tr>
+<tr><td>GRAY70</td>
+<td>32x32 70% intensity gray</td>
+<td><img alt="gray70" src="images/patterns/gray70.png" /></td>
+</tr>
+<tr><td>GRAY75</td>
+<td>32x32 75% intensity gray</td>
+<td><img alt="gray75" src="images/patterns/gray75.png" /></td>
+</tr>
+<tr><td>GRAY80</td>
+<td>32x32 80% intensity gray</td>
+<td><img alt="gray80" src="images/patterns/gray80.png" /></td>
+</tr>
+<tr><td>GRAY85</td>
+<td>32x32 85% intensity gray</td>
+<td><img alt="gray85" src="images/patterns/gray85.png" /></td>
+</tr>
+<tr><td>GRAY90</td>
+<td>32x32 90% intensity gray</td>
+<td><img alt="gray90" src="images/patterns/gray90.png" /></td>
+</tr>
+<tr><td>GRAY95</td>
+<td>32x32 95% intensity gray</td>
+<td><img alt="gray95" src="images/patterns/gray95.png" /></td>
+</tr>
+<tr><td>GRAY100</td>
+<td>32x32 100% intensity gray</td>
+<td><img alt="gray100" src="images/patterns/gray100.png" /></td>
+</tr>
+<tr><td>HEXAGONS</td>
+<td>30x18 hexagon pattern</td>
+<td><img alt="hexagons" src="images/patterns/hexagons.png" /></td>
+</tr>
+<tr><td>HORIZONTAL</td>
+<td>8x4 horizontal line pattern</td>
+<td><img alt="horizontal" src="images/patterns/horizontal.png" /></td>
+</tr>
+<tr><td>HORIZONTALSAW</td>
+<td>16x8 horizontal saw-tooth pattern</td>
+<td><img alt="horizontalsaw" src="images/patterns/horizontalsaw.png" /></td>
+</tr>
+<tr><td>HS_BDIAGONAL</td>
+<td>8x8 backward diagonal line pattern
+(45 degrees slope)</td>
+<td><img alt="hs_bdiagonal" src="images/patterns/hs_bdiagonal.png" /></td>
+</tr>
+<tr><td>HS_CROSS</td>
+<td>8x8 cross line pattern</td>
+<td><img alt="hs_cross" src="images/patterns/hs_cross.png" /></td>
+</tr>
+<tr><td>HS_DIAGCROSS</td>
+<td>8x8 diagonal line cross pattern
+(45 degrees slope)</td>
+<td><img alt="hs_diagcross" src="images/patterns/hs_diagcross.png" /></td>
+</tr>
+<tr><td>HS_FDIAGONAL</td>
+<td>8x8 forward diagonal line pattern
+(45 degrees slope)</td>
+<td><img alt="hs_fdiagonal" src="images/patterns/hs_fdiagonal.png" /></td>
+</tr>
+<tr><td>HS_HORIZONTAL</td>
+<td>8x8 horizontal line pattern</td>
+<td><img alt="hs_horizontal" src="images/patterns/hs_horizontal.png" /></td>
+</tr>
+<tr><td>HS_VERTICAL</td>
+<td>8x8 vertical line pattern</td>
+<td><img alt="hs_vertical" src="images/patterns/hs_vertical.png" /></td>
+</tr>
+<tr><td>LEFT30</td>
+<td>8x4 forward diagonal pattern (30
+degrees slope)</td>
+<td><img alt="left30" src="images/patterns/left30.png" /></td>
+</tr>
+<tr><td>LEFT45</td>
+<td>8x8 forward diagonal line pattern
+(45 degrees slope)</td>
+<td><img alt="left45" src="images/patterns/left45.png" /></td>
+</tr>
+<tr><td>LEFTSHINGLE</td>
+<td>24x24 left shingle pattern</td>
+<td><img alt="leftshingle" src="images/patterns/leftshingle.png" /></td>
+</tr>
+<tr><td>LOGO</td>
+<td>640x480, GraphicsMagick Logo</td>
+<td><img alt="logo" src="images/gm-125x80t.png" /></td>
+</tr>
+<tr><td>NETSCAPE</td>
+<td>216x144 image using colors in
+Netscape 216 (6x6x6 ) color cube.</td>
+<td>Most commonly used with the
+<a class="reference external" href="convert.html">convert</a>/<a class="reference external" href="mogrify.html">mogrify</a> -map option to
+create <em>web safe</em> images.</td>
+</tr>
+<tr><td>OCTAGONS</td>
+<td>16x16 octagons pattern</td>
+<td><img alt="octagons" src="images/patterns/octagons.png" /></td>
+</tr>
+<tr><td>RIGHT30</td>
+<td>8x4 backward diagonal line pattern
+(30 degrees)</td>
+<td><img alt="right30" src="images/patterns/right30.png" /></td>
+</tr>
+<tr><td>RIGHT45</td>
+<td>8x8 backward diagonal line pattern
+(30 degrees)</td>
+<td><img alt="right45" src="images/patterns/right45.png" /></td>
+</tr>
+<tr><td>RIGHTSHINGLE</td>
+<td>24x24 right shingle pattern</td>
+<td><img alt="rightshingle" src="images/patterns/rightshingle.png" /></td>
+</tr>
+<tr><td>ROSE</td>
+<td>70x46, Picture of a rose.</td>
+<td><img alt="rose" src="images/patterns/rose.png" /></td>
+</tr>
+<tr><td>SMALLFISHSCALES</td>
+<td>8x8 small fish scales pattern</td>
+<td><img alt="smallfishscales" src="images/patterns/smallfishscales.png" /></td>
+</tr>
+<tr><td>VERTICAL</td>
+<td>8x8 vertical line pattern</td>
+<td><img alt="vertical" src="images/patterns/vertical.png" /></td>
+</tr>
+<tr><td>VERTICALBRICKS</td>
+<td>16x16 vertical brick pattern</td>
+<td><img alt="verticalbricks" src="images/patterns/verticalbricks.png" /></td>
+</tr>
+<tr><td>VERTICALLEFTSHINGLE</td>
+<td>24x24 vertical left shingle
+pattern</td>
+<td><img alt="verticalleftshingle" src="images/patterns/verticalleftshingle.png" /></td>
+</tr>
+<tr><td>VERTICALRIGHTSHINGLE</td>
+<td>24x24 vertical right shingle
+pattern</td>
+<td><img alt="verticalrightshingle" src="images/patterns/verticalrightshingle.png" /></td>
+</tr>
+<tr><td>VERTICALSAW</td>
+<td>8x16 vertical saw-tooth pattern</td>
+<td><img alt="verticalsaw" src="images/patterns/verticalsaw.png" /></td>
+</tr>
+</tbody>
+</table>
+<p>GraphicsMagick provides a number of format identifiers which are used
+to add, remove, and save embedded profiles for images which can
+support embedded profiles. Image types which may contain embedded
+profiles are <a class="reference external" href="http://www.simplesystems.org/libtiff/">TIFF</a>, <a class="reference external" href="http://www.jpeg.org/">JPEG</a>, PDF, and PNG.</p>
+<table border="1" class="docutils">
+<caption>Supported Embedded Profile Formats</caption>
+<colgroup>
+<col width="19%" />
+<col width="6%" />
+<col width="27%" />
+<col width="48%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Format</td>
+<td>Mode</td>
+<td>Description</td>
+<td>Notes</td>
+</tr>
+<tr><td>8BIM</td>
+<td>RW</td>
+<td>Photoshop resource format
+(binary)</td>
+<td> </td>
+</tr>
+<tr><td>8BIMTEXT</td>
+<td>RW</td>
+<td>Photoshop resource format
+(ASCII)</td>
+<td>An ASCII representation of the 8BIM format.</td>
+</tr>
+<tr><td>APP1</td>
+<td>RW</td>
+<td>Raw application
+information</td>
+<td> </td>
+</tr>
+<tr><td>APP1JPEG</td>
+<td>RW</td>
+<td>Raw <a class="reference external" href="http://www.jpeg.org/">JPEG</a> binary data</td>
+<td>Profile in <a class="reference external" href="http://www.jpeg.org/">JPEG</a> wrapper.</td>
+</tr>
+<tr><td>ICC</td>
+<td>RW</td>
+<td>International Color
+Consortium color profile</td>
+<td>Also known as "ICM". To read, use -profile with
+convert.</td>
+</tr>
+<tr><td>IPTC</td>
+<td>RW</td>
+<td>IPTC Newsphoto (binary)</td>
+<td>To read, use -profile with convert</td>
+</tr>
+<tr><td>IPTCTEXT</td>
+<td>RW</td>
+<td>IPTC Newsphoto (ASCII)</td>
+<td>An ASCII representation of the IPTC format.</td>
+</tr>
+</tbody>
+</table>
+<p>Support for some of the formats are delegated to libraries or external
+programs. The README describes where to find these distributions and
+any special configuration options required.</p>
+<p>To get a complete listing of the image formats which are supported on
+your system, type</p>
+<pre class="literal-block">
+gm convert -list format
+</pre>
+<p>On some platforms, GraphicsMagick automatically processes these
+extensions: .gz for Zip compression, .Z for Unix compression, and .bz2
+for block compression. For example, a PNM image called image.pnm.gz is
+automatically uncompressed while the image is read.</p>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</body>
+</html>
extensions: .gz for Zip compression, .Z for Unix compression, and .bz2
for block compression. For example, a PNM image called image.pnm.gz is
automatically uncompressed while the image is read.
-
------------------------------------------------------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
version" without any options, and looking for "Q:16" in the first line
of output.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
filenames from that file. This is convenient in the event you have too
many image filenames to fit on the command line.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
use different endianness.
</dd>
<dt>dpx:swap-samples={true|false}</dt>
+<dt>dpx:swap-samples-read={true|false}</dt>
+<dt>dpx:swap-samples-write={true|false}</dt>
<dd>GraphicsMagick strives to adhere to the DPX standard but certain
-aspects of the standard can be quite confusing. As a result, some 10-bit
-DPX files have Red and Blue interchanged, or Cb and Cr interchanged due
-to an different interpretation of the standard, or getting the wires
-crossed. The swap-samples option may be supplied when reading or writing
-in order to read or write using the necessary sample order.
+aspects of the standard can be quite confusing. As a result, some
+10-bit DPX files have Red and Blue interchanged, or Cb and Cr
+interchanged due to an different interpretation of the standard, or
+getting the wires crossed. The swap-samples option may be supplied
+when reading or writing in order to read or write using the necessary
+sample order. Use swap-samples-read when swapping should only occur
+in the reader, or swap-samples-write when swapping should only occur
+in the writer.
</dd>
<dt>gradient:direction={South|North|West|East|NorthWest|NorthEast|SouthWest|SouthEast}</dt>
<dd>By default, the gradient coder produces a gradient from top to
<table width="90%" border="0" cellspacing="0" cellpadding="8"> <tr><td width="6%"><br></td><td><font size="-1">
If the image does not have a matte channel, create an opaque one.</font></td></tr></table>
<table width="90%" border="0" cellspacing="0" cellpadding="8"> <tr><td width="6%"><br></td><td><font size="-1">
-Use <strong>+matte</strong> to ignore the matte channel and to avoid writing a
+Use <strong>+matte</strong> to ignore the matte channel (treats it as opaque) and to avoid writing a
matte channel in the output file.</font></td></tr></table>
+<table width="90%" border="0" cellspacing="0" cellpadding="8"> <tr><td width="6%"><br></td><td><font size="-1">
+For the compare command, <strong>-matte</strong> will add an opaque matte
+channel to images if they do not already have a matte channel, and
+matte will be enabled for both images. Likewise, if <strong>+matte</strong> is
+used, the matte channel is disabled for both images. This makes it
+easier to compare images regardless of if they already have a matte
+channel.</font></td></tr></table>
<table BORDER=0 WIDTH="94%">
<tr>
<td width="3%"><br></td>
<table width="90%" border="0" cellspacing="0" cellpadding="8"> <tr><td width="6%"><br></td><td><font size="-1">Select an operator from <strong>Add</strong>, <strong>And</strong>, <strong>Assign</strong>,
<strong>Depth</strong>, <strong>Divide</strong>, <strong>Gamma</strong>, <strong>Negate</strong>,
<strong>LShift</strong>, <strong>Log</strong>, <strong>Max</strong>, <strong>Min</strong>, <strong>Multiply</strong>,
-<strong>Or</strong>, <strong>Pow</strong> <strong>RShift</strong>, <strong>Subtract</strong>,
+<strong>Or</strong>, <strong>Pow</strong>, <strong>RShift</strong>, <strong>Subtract</strong>,
<strong>Threshold</strong>, <strong>Threshold-White</strong>,
<strong>Threshold-White-Negate</strong>, <strong>Threshold-Black</strong>,
<strong>Threshold-Black-Negate</strong>, <strong>Xor</strong>, <strong>Noise-Gaussian</strong>,
"X Resources", below,
for details.</font></td></tr></table>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
just one thread. See the OpenMP specification for other standard
adjustments and your compiler's manual for vendor-specific settings.</td></tr></table>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
</typemap>
</pre></font></td></tr></table>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<br> <br>
for details. This method is recommended for colormapped X server because
it eliminates the need to compute a global colormap.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
gm animate +borderwidth -backdrop cockatoo.*
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
is specified in the image. Otherwise the images will display in the order
they appear on the command line.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
Press any button to map or unmap the Command widget. See the next section
for more information about the Command widget.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
Move the pointer away from the sub-menu if you decide not to execute a
particular command.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<dd>Press to discard all images and exit program.</dd>
</dl>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
of header identifying the window. The default is the image file name.</dd>
</dl>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<br> <br>
gm batch -echo on -feedback on script.txt
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
under Linux and Solaris provides a way to observe CPU core clock rates
while a benchmark is running.</em>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
-file diff.miff original.miff compare.miff
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
gm composite.png
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
All operations will closely follow the key/value pairs defined in
PerlMagick, unless otherwise noted.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
</font></font></font></b></td></tr></table>
<table width="90%" border="0" cellspacing="0" cellpadding="8"> <tr><td width="6%"><br></td><td>print GraphicsMagick version string</td></tr></table>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<em>GraphicsMagick(1)</em>.
<br> <br>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
gm convert -delay 20 dna.* dna.mng
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<dd><img SRC="images/ball.png" ALT="*">display images specified by a World Wide Web (WWW) uniform resource locator (URL)
</dl>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
gm gm convert file.jpg HISTOGRAM:- | gm display -
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
Options, above.
<br> <br>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
and
<a href="miff.html">miff</a> for more details.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
Move the pointer away from the sub-menu if you decide not to execute a
particular command.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
Press ALT and one of the arrow keys to trim off one pixel from any side
of the image.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
gm display.pan.geometry: 256x256
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
To select your image from the X server screen instead of from a file, Choose
<strong>Grab</strong> of the <strong>Open</strong> widget.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
the <strong>File</strong> sub-menu of the Command widget to return to the Visual
Image Directory.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
corners, pressing a button, and dragging. Finally, press Cut to commit
your copy region. To exit without cutting the image, press Dismiss.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
corners, pressing a button, and dragging. Finally, press Copy to commit
your copy region. To exit without copying the image, press Dismiss.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<em>PseudoClass</em> image to remain <em>PseudoClass</em>,
use <strong>-colors</strong>.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
corners, pressing a button, and dragging. Finally, press Crop to commit
your cropping region. To exit without cropping the image, press Dismiss.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
To cancel the image chopping, move the pointer back to the starting point
of the line and release the button.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
To cancel the image rotation, move the pointer back to the starting point
of the line and release the button.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
to remain
<em>PseudoClass</em>, use <strong>-colors</strong>.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
To force a <em>PseudoClass</em> image to remain <em>PseudoClass</em>,
use <strong>-colors</strong>.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
To force a <em>PseudoClass</em> image to remain
<em>PseudoClass</em>, use <strong>-colors</strong>.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
matte editing behavior may require a <em>TrueColor</em> or <em>DirectColor</em>
visual or a <em>Standard Colormap</em>.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
To cancel image drawing, move the pointer back to the starting point of
the line and release the button.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
you can move the region of interest before applying another image processing
technique. To exit, press Dismiss.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
The panning icon is withdrawn if the image becomes smaller than the dimensions
of the X server screen.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
are considered a precious resource, use them with discretion.</dd>
</dl>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<br> <br>
will be written if the <tt>-debug coder</tt> or <tt>-debug all</tt> option
is used.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
Options, above.
<br> <br>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<br> <br>
release the button. The keyboard bell is rung once at the beginning of
the screen capture and twice when it completes.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
corner.png
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
The graphics formats supported by <strong>mogrify</strong> are listed in
<em>GraphicsMagick(1)</em>.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
gm mogrify -resize 640x480! cockatoo.miff
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
Options, above.
<br> <br>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<br> <br>
a visual image directory. Choose a particular tile of the composite and
press a button to display it. See <strong>display(1)</strong> and <strong>miff(5)</strong>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
-geometry 50x50+0+0 *.png joined.png
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
Options, above.
<br> <br>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<li><strong>total</strong> - the total elapsed time consumed.
</ul>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
LIBS = ...
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
will be written if the <tt>-debug coder</tt> or <tt>-debug all</tt> option
is used.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<a href="GraphicsMagick.html"><em>GraphicsMagick(1)</em></a>.
<br> <br>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
release the button. The keyboard bell is rung once at the beginning of
the screen capture and twice when it completes.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
corner.png
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Image Processing System</title>
<meta content="GraphicsMagick is a robust collection of tools and libraries to read, write, and manipulate an image in any of the more popular image formats including GIF, JPEG, PNG, PDF, and WebP. With GraphicsMagick you can create GIFs dynamically making it suitable for Web applications. You can also resize, rotate, sharpen, color reduce, or add special effects to an image and save your completed work in the same or differing image format. " name="description" />
<meta content="GraphicsMagick, GM, PerlMagick, Perl Magick, Perl Magic, image processing, software development, TclMagick, Magick++" name="keywords" />
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-image-processing-system">
</colgroup>
<tbody valign="top">
<tr><td>Current Release</td>
-<td>1.3.35 (Released February 23, 2020) <a class="reference external" href="http://sourceforge.net/projects/graphicsmagick/files/">download release</a></td>
+<td>1.3.36 (Released December 26, 2020) <a class="reference external" href="http://sourceforge.net/projects/graphicsmagick/files/">download release</a></td>
</tr>
<tr><td>Development Snapshots</td>
<td>(Updated frequently) <a class="reference external" href="ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/snapshots/">download development snapshots</a></td>
<li>Describe the format and characteristics of an image</li>
</ul>
</blockquote>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Image Processing System</title>
+<meta content="GraphicsMagick is a robust collection of tools and libraries to read, write, and manipulate an image in any of the more popular image formats including GIF, JPEG, PNG, PDF, and WebP. With GraphicsMagick you can create GIFs dynamically making it suitable for Web applications. You can also resize, rotate, sharpen, color reduce, or add special effects to an image and save your completed work in the same or differing image format. " name="description" />
+<meta content="GraphicsMagick, GM, PerlMagick, Perl Magick, Perl Magic, image processing, software development, TclMagick, Magick++" name="keywords" />
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-image-processing-system">
+<h1 class="title">GraphicsMagick Image Processing System</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<table border="1" class="docutils">
+<colgroup>
+<col width="33%" />
+<col width="67%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Current Release</td>
+<td>1.3.35 (Released February 23, 2020) <a class="reference external" href="http://sourceforge.net/projects/graphicsmagick/files/">download release</a></td>
+</tr>
+<tr><td>Development Snapshots</td>
+<td>(Updated frequently) <a class="reference external" href="ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/snapshots/">download development snapshots</a></td>
+</tr>
+<tr><td>Mercurial Repository</td>
+<td>(Updated frequently) <a class="reference external" href="http://sourceforge.net/p/graphicsmagick/code/">visit Mercurial repository</a></td>
+</tr>
+</tbody>
+</table>
+<p>Check <a class="reference external" href="http://www.GraphicsMagick.org/">http://www.GraphicsMagick.org/</a> for the latest version of this page.</p>
+<p>GraphicsMagick is the swiss army knife of image processing. Comprised
+of 267K physical lines (according to David A. Wheeler's <a class="reference external" href="http://www.dwheeler.com/sloccount/">SLOCCount</a>)
+of source code in the base package (or 1,225K including 3rd party
+libraries) it provides a robust and efficient collection of tools and
+libraries which support reading, writing, and manipulating an image in
+over 89 major formats including important formats like DPX, GIF, JPEG,
+JPEG-2000, PNG, PDF, PNM, TIFF, and WebP.</p>
+<p>Image processing is multi-threaded using <a class="reference external" href="http://www.openmp.org/">OpenMP</a> (<a class="reference external" href="OpenMP.html">read about OpenMP
+in GraphicsMagick</a>) so that CPU-bound tasks scale linearly as
+processor cores are added. <a class="reference external" href="http://www.openmp.org/">OpenMP</a> support requires compilation with
+GCC 4.2 (or later), or use of any C compiler supporting at least the
+<a class="reference external" href="http://www.openmp.org/">OpenMP</a> 2.0 specification.</p>
+<p>GraphicsMagick is quite portable, and compiles under almost every general
+purpose operating system that runs on 32-bit or 64-bit CPUs.
+GraphicsMagick is available for virtually any Unix or Unix-like system,
+including Linux. It also runs under <a class="reference external" href="INSTALL-windows.html">Windows</a>
+2000 and later (Windows 2000, XP, Vista, 7, 8.X, 10), and MacOS-X.</p>
+<p>GraphicsMagick supports huge images and has been tested with
+gigapixel-size images. GraphicsMagick can create new images on the
+fly, making it suitable for building dynamic Web
+applications. GraphicsMagick may be used to resize, rotate, sharpen,
+color reduce, or add special effects to an image and save the result
+in the same or different image format. Image processing operations are
+available from the command line, as well as through C, C++, Lua, Perl,
+PHP, Python, Tcl, Ruby, Windows .NET, or Windows COM programming
+interfaces. With some modification, language extensions for
+ImageMagick may be used.</p>
+<p>GraphicsMagick is originally derived from <a class="reference external" href="http://www.imagemagick.org/">ImageMagick</a> 5.5.2 as of
+November 2002 but has been completely independent of the ImageMagick
+project since then. Since the fork from ImageMagick many improvements
+have been made (see <a class="reference external" href="NEWS.html">NEWS</a>) by many <a class="reference external" href="authors.html">authors</a> using an open
+development model but without breaking the API or utilities operation.</p>
+<p>Here are some reasons to prefer GraphicsMagick over ImageMagick or
+other popular software:</p>
+<blockquote>
+<ul class="simple">
+<li>GM is more efficient than ImageMagick so it gets the job done
+faster using fewer resources.</li>
+<li>GM is much smaller and lighter than ImageMagick (3-5X smaller
+installation footprint).</li>
+<li>GM is used to process billions of files at the world's largest photo
+sites (e.g. <a class="reference external" href="http://www.kitchensoap.com/2009/04/03/slides-from-web20-expo-2009-and-somethin-else-interestin/">Flickr</a> and <a class="reference external" href="http://codeascraft.etsy.com/2010/07/09/batch-processing-millions-of-images/">Etsy</a>).</li>
+<li>GM does not conflict with other installed software.</li>
+<li>GM suffers from fewer security issues and exploits than ImageMagick.</li>
+<li>GM participates in Google's <a class="reference external" href="https://github.com/google/oss-fuzz">oss-fuzz</a> project (since February, 2018).</li>
+<li>GM <a class="reference external" href="http://www.valgrind.org/">valgrind</a>'s 100% clean (memcheck and helgrind).</li>
+<li>GM passes rigorous memory error testing using <a class="reference external" href="https://github.com/google/sanitizers/wiki/AddressSanitizer">ASan</a>.</li>
+<li>GM passes undefined behavior testing using <a class="reference external" href="https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html">UBSan</a>.</li>
+<li>GM comes with a comprehensive <a class="reference external" href="GraphicsMagick.html">manual page</a>.</li>
+<li>GM provides API and ABI stability and managed releases that you can
+count on (ImageMagick does not).</li>
+<li>GM provides detailed yet comprehensible <a class="reference external" href="Changelog.html">ChangeLog</a> and <a class="reference external" href="NEWS.html">NEWS</a>
+files (ImageMagick does not).</li>
+<li>GM is available for free, and may be used to support both open and
+proprietary applications.</li>
+<li>GM is distributed under an X11-style license (<a class="reference external" href="http://opensource.org/licenses/MIT">MIT License</a>),
+approved by the <a class="reference external" href="http://www.opensource.org/">Open Source Initiative</a>, recommended for use by
+the <a class="reference external" href="http://www.osscc.net/en/index.html">OSSCC</a>, and compatible with the <a class="reference external" href="http://www.fsf.org/licenses/licenses.html">GNU GPL</a>.</li>
+<li>GM source code is managed in <a class="reference external" href="https://www.mercurial-scm.org/">Mercurial</a>, a distributed source
+control management tool which supports management of local
+changes. The repository history goes back to 1998.</li>
+<li>GM has 0.00 (zero) defects per 1000 lines of code (293,341 total
+lines included) according to Coverity analysis on May 25, 2015.</li>
+<li>GM developers contribute to other free projects for the public good.</li>
+</ul>
+</blockquote>
+<p>GraphicsMagick is <a class="reference external" href="Copyright.html">copyrighted</a> by the GraphicsMagick
+Group as well as many others.</p>
+<p>Here are just a few examples of what GraphicsMagick can do:</p>
+<blockquote>
+<ul class="simple">
+<li>Convert an image from one format to another (e.g. TIFF to JPEG)</li>
+<li>Resize, rotate, sharpen, color reduce, or add special effects to an
+image</li>
+<li>Create a montage of image thumbnails</li>
+<li>Create a transparent image suitable for use on the Web</li>
+<li>Compare two images</li>
+<li>Turn a group of images into a GIF animation sequence</li>
+<li>Create a composite image by combining several separate images</li>
+<li>Draw shapes or text on an image</li>
+<li>Decorate an image with a border or frame</li>
+<li>Describe the format and characteristics of an image</li>
+</ul>
+</blockquote>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</body>
+</html>
.. _programming : programming.html
=========================== ========================================================
-Current Release 1.3.35 (Released February 23, 2020) `download release`__
+Current Release 1.3.36 (Released December 26, 2020) `download release`__
Development Snapshots (Updated frequently) `download development snapshots`__
Mercurial Repository (Updated frequently) `visit Mercurial repository`__
=========================== ========================================================
* Decorate an image with a border or frame
* Describe the format and characteristics of an image
-
-------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Related Links</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="related-links">
<!-- This text is in reStucturedText format, so it may look a bit odd. -->
<!-- See http://docutils.sourceforge.net/rst.html for details. -->
<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#graphicsmagick-topics" id="id8">GraphicsMagick Topics</a></li>
<li><a class="reference internal" href="#graphicsmagick-vulnerabilities" id="id9">GraphicsMagick Vulnerabilities</a></li>
<div class="section" id="stock-photos">
<h1><a class="toc-backref" href="#id21">Stock Photos</a></h1>
<p><a class="reference external" href="http://www.morguefile.com/">MorgueFile</a>, Free high-resolution stock photo images.</p>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Related Links</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="related-links">
+<h1 class="title">Related Links</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#graphicsmagick-topics" id="id8">GraphicsMagick Topics</a></li>
+<li><a class="reference internal" href="#graphicsmagick-vulnerabilities" id="id9">GraphicsMagick Vulnerabilities</a></li>
+<li><a class="reference internal" href="#image-processing-topics" id="id10">Image Processing Topics</a></li>
+<li><a class="reference internal" href="#color-technology-related-topics" id="id11">Color Technology Related Topics</a></li>
+<li><a class="reference internal" href="#gamma-related-topics" id="id12">Gamma Related Topics</a></li>
+<li><a class="reference internal" href="#tiff-related-topics" id="id13">TIFF Related Topics</a></li>
+<li><a class="reference internal" href="#jpeg-related-topics" id="id14">JPEG Related Topics</a></li>
+<li><a class="reference internal" href="#dicom-related-topics" id="id15">DICOM Related Topics</a></li>
+<li><a class="reference internal" href="#metadata-associated-data-topics" id="id16">Metadata (Associated Data) Topics</a></li>
+<li><a class="reference internal" href="#high-dynamic-range-topics" id="id17">High Dynamic Range Topics</a></li>
+<li><a class="reference internal" href="#motion-picture-links" id="id18">Motion Picture Links</a></li>
+<li><a class="reference internal" href="#video-topics" id="id19">Video Topics</a></li>
+<li><a class="reference internal" href="#other-software-packages" id="id20">Other Software Packages</a></li>
+<li><a class="reference internal" href="#stock-photos" id="id21">Stock Photos</a></li>
+</ul>
+</div>
+<div class="section" id="graphicsmagick-topics">
+<h1><a class="toc-backref" href="#id8">GraphicsMagick Topics</a></h1>
+<p><a class="reference external" href="http://directory.fsf.org/project/GraphicsMagick/">Free Software Foundation</a> GraphicsMagick Entry.</p>
+<p><a class="reference external" href="https://www.freshports.org/graphics/GraphicsMagick/">FreeBSD port</a> for GraphicsMagick.</p>
+<p><a class="reference external" href="http://pkgsrc.se/graphics/GraphicsMagick/">NetBSD/pkgsrc port</a> for GraphicsMagick.</p>
+<p><a class="reference external" href="http://bugs.gentoo.org/show_bug.cgi?id=190372">Gentoo Sunrise</a> Bug Tracker Entry.</p>
+<p><a class="reference external" href="https://bugzilla.redhat.com/buglist.cgi?component=GraphicsMagick&product=Fedora">Red Hat Linux</a> GraphicsMagick related bugs.</p>
+<p>Debian <a class="reference external" href="http://packages.debian.org/search?keywords=GraphicsMagick&amp;searchon=names&amp;suite=all&amp;section=main">GraphicsMagick packages</a>.</p>
+<p><a class="reference external" href="http://en.wikipedia.org/wiki/GraphicsMagick">WikiPedia</a> GraphicsMagick Entry.</p>
+<p><a class="reference external" href="https://www.openhub.net/p/graphics_magick">Black Duck | Open HUB</a> GraphicsMagick Entry.</p>
+<p><a class="reference external" href="http://sourceforge.net/projects/graphicsmagick/">SourceForge</a> GraphicsMagick Entry.</p>
+<p><a class="reference external" href="http://stackoverflow.com/questions/tagged/graphicsmagick?">GraphicsMagick questions on StackOverflow</a>.</p>
+<p><a class="reference external" href="https://abi-laboratory.pro/tracker/timeline/graphicsmagick/">GraphicsMagick ABI/API Changes</a>.</p>
+</div>
+<div class="section" id="graphicsmagick-vulnerabilities">
+<h1><a class="toc-backref" href="#id9">GraphicsMagick Vulnerabilities</a></h1>
+<p>Search for <a class="reference external" href="https://www.cvedetails.com/vulnerability-list/vendor_id-2802/Graphicsmagick.html">GraphicsMagick</a> CVEs.</p>
+<p>Seach SecurityFocus Bugtraq for <a class="reference external" href="http://www.securityfocus.com/bid">GraphicsMagick</a> vulnerabilities (select Vendor 'GraphicsMagick').</p>
+<p>Debian vulnerabilities in <a class="reference external" href="https://security-tracker.debian.org/tracker/source-package/graphicsmagick">GraphicsMagick</a>.</p>
+<p>Oss-fuzz issues pertaining to <a class="reference external" href="https://bugs.chromium.org/p/oss-fuzz/issues/list?q=graphicsmagick">GraphicsMagick</a>.</p>
+<p>Oss-fuzz build status for <a class="reference external" href="https://oss-fuzz-build-logs.storage.googleapis.com/index.html#graphicsmagick">GraphicsMagick</a>.</p>
+</div>
+<div class="section" id="image-processing-topics">
+<h1><a class="toc-backref" href="#id10">Image Processing Topics</a></h1>
+<p><a class="reference external" href="http://homepages.inf.ed.ac.uk/rbf/HIPR2/">HyperMedia Image Processing Reference</a>,
+A guide to image processing algorithms, many of which are supported by GraphicsMagick.</p>
+</div>
+<div class="section" id="color-technology-related-topics">
+<h1><a class="toc-backref" href="#id11">Color Technology Related Topics</a></h1>
+<p>Charles Poynton's <a class="reference external" href="http://www.poynton.com/Poynton-color.html">Color technology FAQs</a>,
+very useful documentation on color technologies.</p>
+<p><a class="reference external" href="http://www.color.org/">International Color Consortium</a>,
+the organization responsible for color profile standards.</p>
+<p><a class="reference external" href="http://www.argyllcms.com/">Argyll Color Management System</a>,
+a free experimental color management system.</p>
+<p><a class="reference external" href="http://www.littlecms.com/">Littlecms</a>,
+a free commercial-grade colormanagement engine in 100K (and used by GraphicsMagick).</p>
+<p><a class="reference external" href="http://www.brucelindbloom.com/">Bruce Lindbloom's Web Site</a>,
+offering interesting information related to color science and working spaces.</p>
+<p><a class="reference external" href="http://www.w3.org/Graphics/Color/sRGB.html">sRGB</a>,
+A standard default color space for the Internet.</p>
+<p><a class="reference external" href="http://www.anyhere.com/gward/hdrenc/hdr_encodings.html">High Dynamic Range Image Encodings</a>,
+an analysis by Greg Ward of various HDR encodings.</p>
+</div>
+<div class="section" id="gamma-related-topics">
+<h1><a class="toc-backref" href="#id12">Gamma Related Topics</a></h1>
+<p>While most computer images are encoded with a gamma of 2.2 (really 2.2
+to 2.6), GraphicsMagick does not attempt to convert images to
+linear-light before applying image processing operations since it is
+not possible to know for sure to know how to do so. Some algorithms
+such as resize, blur, and composition, will produce more accurate
+results when performed on images encoded in a linear-light scaled
+space.</p>
+<p>For a typical sRGB image encoded in a gamma-corrected space with gamma
+2.2, the option <tt class="docutils literal"><span class="pre">-gamma</span> 0.45</tt> (1/2.2 = 0.45) will remove that
+encoding for subsequent algorithms so that they are done in
+linear-light space. When processing is completed, then <tt class="docutils literal"><span class="pre">-gamma</span> 2.2</tt>
+will restore gamma-correction for viewing. It is recommended to use a
+Q16 or Q32 build of GraphicsMagick when doing this since linear-light
+space encoding is not efficient and will lose accuracy if stored with
+less than 14 bits per sample.</p>
+<p>The following documents and pages provide interesting information on
+gamma-related topics:</p>
+<p><a class="reference external" href="http://www.poynton.com/GammaFAQ.html">Charles Poynton's Gamma FAQ</a>,
+provides an excellent description of what gamma is, why it is good,
+and when you don't want it.</p>
+</div>
+<div class="section" id="tiff-related-topics">
+<h1><a class="toc-backref" href="#id13">TIFF Related Topics</a></h1>
+<p><a class="reference external" href="http://www.simplesystems.org/libtiff/">LibTIFF</a>,
+Libtiff library and TIFF format mailing list.</p>
+<p>AWare Systems <a class="reference external" href="http://www.awaresystems.be/imaging/tiff.html">TIFF</a> site.
+Detailed TIFF-related information which goes beyond the TIFF specification,
+list archives for the libtiff mailing list, and information regarding the emerging Big TIFF format.</p>
+<p><a class="reference external" href="http://www.adobe.com/products/dng/index.html">Digital Negative (DNG)</a>,
+Adobe TIFF specification for digital camera raw images.</p>
+<p><a class="reference external" href="http://www.anyhere.com/gward/pixformat/tiffluv.html">LogLuv Encoding for TIFF Images</a>,
+A way to store HDR images using TIFF.</p>
+</div>
+<div class="section" id="jpeg-related-topics">
+<h1><a class="toc-backref" href="#id14">JPEG Related Topics</a></h1>
+<p><a class="reference external" href="http://www.ijg.org/">Independent JPEG Group</a> (home of IJG JPEG library).</p>
+<p><a class="reference external" href="http://jpegclub.org/">Guido Vollbeding's JPEG site</a>, including various patches to IJG JPEG release 6b.</p>
+</div>
+<div class="section" id="dicom-related-topics">
+<h1><a class="toc-backref" href="#id15">DICOM Related Topics</a></h1>
+<p><a class="reference external" href="http://www.dclunie.com/">David Clunie's Medical Image Format Site</a>,
+information about medical images.</p>
+</div>
+<div class="section" id="metadata-associated-data-topics">
+<h1><a class="toc-backref" href="#id16">Metadata (Associated Data) Topics</a></h1>
+<p><a class="reference external" href="http://www.adobe.com/products/xmp/index.html">Extensible Metadata Platform (XMP)</a>,
+Adobe's XML-based embedded metadata format.</p>
+<p><a class="reference external" href="http://www.exif.org/">EXIF</a>,
+Format for metadata in images, particularly JPEG files from digital cameras.</p>
+</div>
+<div class="section" id="high-dynamic-range-topics">
+<h1><a class="toc-backref" href="#id17">High Dynamic Range Topics</a></h1>
+<p><a class="reference external" href="http://www.anyhere.com/gward/hdrenc/hdr_encodings.html">High Dynamic Range Image Encodings</a>,
+An analsys by Greg Ward of various HDR encodings.</p>
+<p><a class="reference external" href="http://www.anyhere.com/gward/pixformat/tiffluv.html">LogLuv Encoding for TIFF Images</a>,
+A way to store HDR images using TIFF.</p>
+<p><a class="reference external" href="http://www.openexr.com/">OpenEXR</a>,
+library and sample tools for dealing with high dynamic-range (HDR) images.</p>
+</div>
+<div class="section" id="motion-picture-links">
+<h1><a class="toc-backref" href="#id18">Motion Picture Links</a></h1>
+<p><a class="reference external" href="http://www.dcimovies.com/">Digital Cinema Initiatives</a>,
+DCI offers the first complete specification for digital cinema delivery.</p>
+<p><a class="reference external" href="http://ingex.sourceforge.net/index.html">Ingex</a> Tapeless video &
+audio capture, transcoding and network file serving. From the BBC.</p>
+</div>
+<div class="section" id="video-topics">
+<h1><a class="toc-backref" href="#id19">Video Topics</a></h1>
+<p><a class="reference external" href="http://www.fourcc.org/">Video Codecs and Pixel Formats</a>, offers a summary of YUV encoding formats.</p>
+</div>
+<div class="section" id="other-software-packages">
+<h1><a class="toc-backref" href="#id20">Other Software Packages</a></h1>
+<p><a class="reference external" href="http://dmmd.net/main_wp/visere/">DMMD Visere</a>,
+truly outstanding image viewing/browsing software for Microsoft Windows.
+Visere is based on GraphicsMagick.</p>
+<p><a class="reference external" href="http://elynxlab.free.fr/en/index.html">eLynx lab</a> High resolution image processing tool.</p>
+<p>The <a class="reference external" href="http://www.gimp.org/">GIMP</a>, interactive image editing software (like Photoshop).</p>
+<p><a class="reference external" href="http://www.imagemagick.org/">ImageMagick</a>, the ancestor of GraphicsMagick.</p>
+<p><a class="reference external" href="https://github.com/libvips/">VIPS</a>, an image processing system also useful with
+large images, and which comes with an unusual GUI.</p>
+<p><a class="reference external" href="http://freeimage.sourceforge.net/index.html">FreeImage</a>,
+a free image processing library.</p>
+<p><a class="reference external" href="http://rsbweb.nih.gov/ij/">ImageJ</a> Image Processing and Analysis in Java.</p>
+<p><a class="reference external" href="http://www.pstoedit.net/">Pstoedit</a>,
+A Postscript to editable vector translation utility.</p>
+<p><a class="reference external" href="http://ufraw.sourceforge.net/">UFRaw</a>,
+a utility to read and manipulate raw images from digital cameras.</p>
+<p><a class="reference external" href="http://lprof.sourceforge.net/index.html">LPROF</a>,
+an open source ICC profiler with graphical user interface.</p>
+<p><a class="reference external" href="http://gallery.menalto.com/">Gallery</a>,
+a facinating web-based photo album organizer. Works with GraphicsMagick!.</p>
+<p><a class="reference external" href="http://djv.sourceforge.net/">DJV Imaging</a>, professional movie
+playback and image processing software for the film and computer
+animation industries.</p>
+<p><a class="reference external" href="https://sites.google.com/site/openimageio/">OpenImageIO</a> library
+for reading and writing images, and a bunch of related classes,
+utilities, and applications.</p>
+</div>
+<div class="section" id="stock-photos">
+<h1><a class="toc-backref" href="#id21">Stock Photos</a></h1>
+<p><a class="reference external" href="http://www.morguefile.com/">MorgueFile</a>, Free high-resolution stock photo images.</p>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</div>
+</body>
+</html>
=============
`MorgueFile <http://www.morguefile.com/>`_, Free high-resolution stock photo images.
-
---------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>Magick Image File Format (version 1.0)</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="magick-image-file-format-version-1-0">
<h1>Authors</h1>
<p>John Cristy, <a class="reference external" href="mailto:magick-users%40imagemagick.org">magick-users<span>@</span>imagemagick<span>.</span>org</a> ImageMagick Studio LLC.</p>
<p>Maintained since 2002 by Bob Friesenhahn, GraphicsMagick Group.</p>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>Magick Image File Format (version 1.0)</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="magick-image-file-format-version-1-0">
+<h1 class="title">Magick Image File Format (version 1.0)</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>Magick Image File Format (MIFF) is a platform-independent format for
+storing bitmap images. MIFF was originally invented by John Cristy for
+ImageMagick, but is also a native format of GraphicsMagick. It is
+useful as an efficient lossless working file format which assures that
+all of the image attributes used by ImageMagick and GraphicsMagick are
+preserved. Several lossless compression algorithms are available in
+order to save space.</p>
+<div class="section" id="description">
+<h1>Description</h1>
+<p>A MIFF image file consist of two sections. The first section is a header
+composed of keywords describing the image in text form. The next section
+is the binary image data. The header is separated from the image data by
+a : character immediately followed by a ctrl-Z.</p>
+<p>The MIFF header is composed entirely of LATIN-1 characters. The fields in
+the header are keyword and value combination in the keyword=value format,
+with each keyword and value separated by an equal sign (=). Each
+keyword=value combination is delimited by at least one control or
+whitespace character. Comments may appear in the header section and are
+always delimited by braces. The MIFF header always ends with a colon (:)
+character, followed by a ctrl-Z character. It is also common to precede
+the colon with a formfeed and a newline character. The formfeed prevents
+the listing of binary data when using more(1) under Unix where the ctrl-Z
+has the same effect with the type command on the Win32 command line.</p>
+<p>It is required that the 'id' keyword be present with the value
+'ImageMagick' (id=ImageMagick) and be the first keyword listed in the
+MIFF header. Files not starting with this keyword/value may be
+rejected. The 'version' keyword must always be emitted for all new
+files with the value '1.0' (version=1.0).</p>
+<p>The MIFF header supports arbitrary LATIN-1 keyword strings. Some
+keyword strings have special interpretation while others are merely
+stored as image attributes. The following is a list of keyword=value
+combinations with special interpretation that may be found in a MIFF
+file:</p>
+<p>background-color=color</p>
+<p>border-color=color</p>
+<p>matte-color=color</p>
+<blockquote>
+these optional keywords reflects the image background, border, and
+matte colors respectively. A color can be a name (e.g. white) or a hex
+value (e.g. #ccc).</blockquote>
+<p>class=DirectClass</p>
+<p>class=PseudoClass</p>
+<blockquote>
+the type of binary image data stored in the MIFF file. If this keyword
+is not present, DirectClass image data is assumed.</blockquote>
+<p>colors=value</p>
+<blockquote>
+the number of colors in a DirectClass image. For a PseudoClass image,
+this keyword specifies the size of the colormap. If this keyword is not
+present in the header, and the image is PseudoClass, a linear 256 color
+grayscale colormap is used with the image data. The maximum number of
+colormap entries is 65535.</blockquote>
+<p>columns=value</p>
+<blockquote>
+the width of the image in pixels. This is a required keyword and has no
+default.</blockquote>
+<p>colorspace=RGB</p>
+<p>colorspace=CMYK</p>
+<blockquote>
+the colorspace of the pixel data. The default is RGB.</blockquote>
+<p>comment={text}</p>
+<blockquote>
+comment text. Note that extremely old MIFF files used a different
+means to indicate comment text.</blockquote>
+<p>compression=BZip</p>
+<p>compression=None</p>
+<p>compression=RLE</p>
+<p>compression=Zip</p>
+<blockquote>
+the type of algorithm used to compress the image data. If this keyword
+is not present, the image data is assumed to be uncompressed.</blockquote>
+<p>delay <1/100ths of a second></p>
+<blockquote>
+the interframe delay in an image sequence. The maximum delay is 65535.</blockquote>
+<p>depth=8</p>
+<p>depth=16</p>
+<p>depth=32</p>
+<blockquote>
+depth of a single color value representing values from 0 to 255
+(depth 8), 65535 (depth 16), or 4294967295 (depth 32). If this
+keyword is absent, a depth of 8 is assumed. Depth values of 1 to 32
+are accepted, with the storage depth being rounded up to 8, 16,
+or 32.</blockquote>
+<p>dispose value</p>
+<blockquote>
+<p>GIF disposal method. Here are the valid methods:</p>
+<blockquote>
+<table border="1" class="docutils">
+<colgroup>
+<col width="19%" />
+<col width="81%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Disposal</td>
+<td>Description</td>
+</tr>
+<tr><td>0</td>
+<td>No disposal specified.</td>
+</tr>
+<tr><td>1</td>
+<td>Do not dispose between frames.</td>
+</tr>
+<tr><td>2</td>
+<td>Overwrite frame with background color from
+header.</td>
+</tr>
+<tr><td>3</td>
+<td>Overwrite with previous frame.</td>
+</tr>
+</tbody>
+</table>
+</blockquote>
+</blockquote>
+<p>gamma=value</p>
+<blockquote>
+gamma of the image. If it is not specified, a gamma value of
+.45454545 (linear-intensity gamma "2.2" as used by NTSC, sRGB, and
+Rec.709) is assumed. A gamma value of 1.0 indicates linear-light.</blockquote>
+<p>id=ImageMagick</p>
+<blockquote>
+identify the file as a MIFF-format image file. This keyword is required
+and has no default. Although this keyword can appear anywhere in the
+header, it should start as the first keyword of the header in column 1.
+This will allow programs like file(1) to easily identify the file as
+MIFF.</blockquote>
+<p>iterations value</p>
+<blockquote>
+the number of times an image sequence loops before stopping.</blockquote>
+<p>label={value}</p>
+<blockquote>
+this optional keyword defines a short title or caption for the image.
+If any whitespace appears in the label, it must be enclosed within
+double quotes.</blockquote>
+<p>matte=True</p>
+<p>matte=False</p>
+<blockquote>
+specifies whether a DirectClass image has matte data. Matte data is
+generally useful for image compositing. This keyword has no meaning for
+pseudocolor images.</blockquote>
+<p>montage=<width>x<height>{+-}<xoffset>{+-}<yoffset></p>
+<blockquote>
+size and location of the individual tiles of a composite image. See
+X(1) for details about the geometry specification. Use this keyword
+when the image is a composite of a number of different tiles. A tile
+consists of an image and optionally a border and a label. < width> is
+the size in pixels of each individual tile in the horizontal direction
+and <height> is the size in the vertical direction. Each tile must have
+an equal number of pixels in width and equal in height. However, the
+width can differ from the height. <xoffset> is the offset in number of
+pixels from the vertical edge of the composite image where the first
+tile of a row begins and <yoffset> is the offset from the horizontal
+edge where the first tile of a column begins. If this keyword is
+specified, a directory of tile names must follow the image header. The
+format of the directory is explained below.</blockquote>
+<p>page=<width>x<height>{+-}<xoffset>{+-}<yoffset></p>
+<blockquote>
+preferred size and location of an image canvas.</blockquote>
+<p>profile-icc=value</p>
+<blockquote>
+the number of bytes in the International Color Consortium color
+profile. The profile is defined by the ICC profile specification.</blockquote>
+<p>profile-iptc=value</p>
+<blockquote>
+the number of bytes in the IPTC Newsphoto profile. The profile is
+defined by the IPTC specification.</blockquote>
+<p>profile-name=value</p>
+<blockquote>
+the number of bytes in the generic profile name where name identifies
+the profile. Name is substituted with any LATIN-1 string to form a
+unique generic profile identifier.</blockquote>
+<p>profile:name=value</p>
+<blockquote>
+the number of bytes in the generic profile name where name identifies
+the profile. Name is substituted with any LATIN-1 string to form a
+unique generic profile identifier.</blockquote>
+<p>red-primary=x,y</p>
+<p>green-primary=x,y</p>
+<p>blue-primary=x,y</p>
+<p>white-point=x,y</p>
+<blockquote>
+these optional keywords reflect the chromaticity primaries and white point.</blockquote>
+<p>rendering-intent=saturation</p>
+<p>rendering-intent=perceptual</p>
+<p>rendering-intent=absolute</p>
+<p>rendering-intent=relative</p>
+<blockquote>
+Rendering intent is the CSS-1 property that has been defined by the
+International Color Consortium.</blockquote>
+<p>resolution=<x-resolution>x<y-resolution></p>
+<blockquote>
+vertical and horizontal resolution of the image. See units for the
+specific resolution units (e.g. pixels per inch).</blockquote>
+<p>rows=value</p>
+<blockquote>
+the height of the image in pixels. This is a required keyword and has
+no default.</blockquote>
+<p>orientation=value</p>
+<blockquote>
+specifies the orientation of the image as an attribute (does not
+effect pixel storage). Supported values are TopLeft, TopRight,
+BottomRight, BottomLeft, LeftTop, RightTop, RightBottom, LeftBottom
+as specified by the TIFF and EXIF standards.</blockquote>
+<p>scene=value</p>
+<blockquote>
+the sequence number for this MIFF image file. This optional keyword is
+used when a MIFF image file is one in a sequence of files used in an
+animation.</blockquote>
+<p>signature=value</p>
+<blockquote>
+this optional keyword contains a string that uniquely identifies the
+image pixel contents. NIST's SHA-256 message digest algorithm is
+recommended.</blockquote>
+<p>units=pixels-per-inch</p>
+<p>units=pixels-per-centimeter</p>
+<blockquote>
+image resolution units.</blockquote>
+<p>version=1.0</p>
+<blockquote>
+Identifies the MIFF version used, which is 1.0 for the purpose of
+this specification. If version is omitted, then certain MIFF
+features (e.g. compressed rows) are assumed to be encoded using a
+defunct MIFF format.</blockquote>
+<p>Other key value pairs are permitted. If a value contains whitespace it must be
+enclosed with braces as illustrated here:</p>
+<pre class="literal-block">
+id=ImageMagick version=1.0
+class=PseudoClass colors=256
+compression=RLE
+columns=1280 rows=1024
+scene=1
+signature=d79e1c308aa5bbcdeea8ed63df412da9
+copyright={Copyright (c) 2000 Mortimer Snerd}
+<FF>
+:
+</pre>
+<p>Note that keyword=value combinations may be separated by newlines or
+spaces and may occur in any order within the header. Comments (within
+braces) may appear anywhere before the colon.</p>
+<p>The elements shown in the following table may appear after the header and
+before the image data. These elements appear in the order described in
+the following table if the keyword indicates that they exist.</p>
+<table border="1" class="docutils">
+<colgroup>
+<col width="21%" />
+<col width="21%" />
+<col width="57%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Element</td>
+<td>Keyword</td>
+<td>Description</td>
+</tr>
+<tr><td>Image
+directory</td>
+<td>montage</td>
+<td>The directory consists of a name for each
+tile of the composite image separated by
+a newline character. The list is
+terminated with a NULL character.</td>
+</tr>
+<tr><td>ICC Profile</td>
+<td>profile-icc</td>
+<td>Binary color profile.</td>
+</tr>
+<tr><td>IPTC Profile</td>
+<td>profile-iptc</td>
+<td>Binary IPTC Newsphoto profile.</td>
+</tr>
+<tr><td>Generic
+Profiles</td>
+<td>profile-<name></td>
+<td>Binary generic profile. Multiple named
+generic profiles may exist.</td>
+</tr>
+</tbody>
+</table>
+<p>Next comes the binary image data itself. How the image data is formatted
+depends upon the class of the image as specified (or not specified) by
+the value of the class keyword in the header. All numeric values in the
+binary section are written with the most significant bytes occuring first
+(big-endian ordering).</p>
+<p>DirectClass images (class=DirectClass) are continuous-tone, images stored
+as RGB (red, green, blue), RGBA (red, green, blue, alpha), CMYK (cyan,
+yellow, magenta, black), and CMYKA (cyan, yellow, magenta, black, alpha)
+intensity values as defined by the colorspace and matte keywords. The
+size of each intensity value depends on the depth of the image. The
+depth, number of bytes, and numeric range of each value are shown in the
+following table:</p>
+<blockquote>
+<table border="1" class="docutils">
+<colgroup>
+<col width="21%" />
+<col width="41%" />
+<col width="38%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Depth</td>
+<td>Bytes Per
+Value</td>
+<td>Value Range</td>
+</tr>
+<tr><td>8</td>
+<td>1</td>
+<td>0..255</td>
+</tr>
+<tr><td>16</td>
+<td>2</td>
+<td>0..65535</td>
+</tr>
+<tr><td>32</td>
+<td>4</td>
+<td>0..4294967295</td>
+</tr>
+</tbody>
+</table>
+</blockquote>
+<p>The alpha value (if it occurs) represents the degree of pixel opacity
+(zero is totally transparent).</p>
+<p>PseudoClass images (class=PseudoClass) are colormapped RGB images. The
+colormap is stored as a series of red, green, and blue pixel values. The
+size of each colormap value depends on the image depth, as shown in the
+following table:</p>
+<blockquote>
+<table border="1" class="docutils">
+<colgroup>
+<col width="19%" />
+<col width="22%" />
+<col width="31%" />
+<col width="28%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Depth</td>
+<td>Bytes Per
+Value</td>
+<td>Value Range</td>
+<td>Bytes Per
+Colormap Entry</td>
+</tr>
+<tr><td>8</td>
+<td>1</td>
+<td>0..255</td>
+<td>3</td>
+</tr>
+<tr><td>16</td>
+<td>2</td>
+<td>0..65535</td>
+<td>6</td>
+</tr>
+<tr><td>32</td>
+<td>4</td>
+<td>0..4294967295</td>
+<td>12</td>
+</tr>
+</tbody>
+</table>
+</blockquote>
+<p>The number of colormap entries is defined by the colors keyword. The
+colormap data occurs immediately following the header (or image directory
+if the montage keyword is in the header). Immediately following the
+colormap data is the PseudoClass image data. PseudoClass image data is an
+array of index values into the color map. The number of bytes comprising
+the index value depends on the number of colors in the image. The
+following table shows the number of bytes in each colormap index as
+determined by the colors keyword:</p>
+<blockquote>
+<table border="1" class="docutils">
+<colgroup>
+<col width="31%" />
+<col width="31%" />
+<col width="38%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Colors</td>
+<td>Bytes Per
+Index</td>
+<td>Index Range</td>
+</tr>
+<tr><td><=256</td>
+<td>1</td>
+<td>0..255</td>
+</tr>
+<tr><td><=65535</td>
+<td>2</td>
+<td>0..65535</td>
+</tr>
+<tr><td><=4294967295</td>
+<td>4</td>
+<td>0..4294967295</td>
+</tr>
+</tbody>
+</table>
+</blockquote>
+<p>If matte is true, each colormap index is immediately followed by an
+equally-sized alpha value. The alpha value represents the degree of pixel
+opacity (zero is totally transparent).</p>
+<p>The image data in a MIFF file may be uncompressed, runlength encoded,
+Zip compressed, or BZip compressed. The compression keyword in the
+header defines how the image data is compressed. Uncompressed pixels
+are stored one scanline at a time in row order. Runlength encoded
+compression counts runs of identical adjacent pixels and stores the
+pixels followed by a length byte (the number of identical pixels minus
+1). Zip and BZip compression for version 1.0 compresses each row of an
+image and precedes the compressed row with the length of compressed
+pixel bytes as a 32-bit unsigned value in most significant byte first
+order. If the version tag is not present (indicating a virtually
+unused legacy format) then Zip and BZip omit this length value and the
+reader must incrementally decode each row and restart compression at
+the point where decoding completed for the previous row.</p>
+<p>Note that compression in MIFF is scanline-based without any
+specialized pre-processing as is found in the PNG and TIFF file
+formats. As a result, available compression levels are likely to be
+less than some other file formats given the same compression algorithm.</p>
+<p>MIFF files may contain more than one image. Simply concatenate each
+individual image (composed of a header and image data) into one file.</p>
+</div>
+<div class="section" id="authors">
+<h1>Authors</h1>
+<p>John Cristy, <a class="reference external" href="mailto:magick-users%40imagemagick.org">magick-users<span>@</span>imagemagick<span>.</span>org</a> ImageMagick Studio LLC.</p>
+<p>Maintained since 2002 by Bob Friesenhahn, GraphicsMagick Group.</p>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</div>
+</body>
+</html>
John Cristy, magick-users@imagemagick.org ImageMagick Studio LLC.
Maintained since 2002 by Bob Friesenhahn, GraphicsMagick Group.
-
--------------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Mission Statement</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-mission-statement">
<li>Value, and respect the contributions of developers, and observe and
respect the copyrights of other projects.</li>
</ul>
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Mission Statement</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-mission-statement">
+<h1 class="title">GraphicsMagick Mission Statement</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>In November, 2002, the GraphicsMagick project was formed as a branch from
+ImageMagick 5.5.2. The project was formed in order to develop a more
+"stable" form of ImageMagick which is suitable to be use as a base for
+other open source (and proprietary) applications. It was perceived that
+ImageMagick provided tremendous value, but also proved to be difficult to
+rely on as a stable application component since the ImageMagick
+interfaces often changed between releases, and there was no concept of
+shared library ABI stability. GraphicsMagick intends to resolve these
+issues while providing an appealing development environment to attract
+the best available developers.</p>
+<p>The objectives of the GraphicsMagick project are to:</p>
+<ul class="simple">
+<li>Use an open development model.</li>
+<li>Encourage new developers to join the project.</li>
+<li>Avoid unnecessary source code "churn".</li>
+<li>Establish and preserve both a stable API, and stable ABI, making
+GraphicsMagick a stable component in Linux and BSD distributions.</li>
+<li>Use efficient coding practices which result in fast code.</li>
+<li>Improve memory efficiency.</li>
+<li>Use a release process which assures a working product.</li>
+<li>Prioritize bug-fixes over new feature enhancements.</li>
+<li>Maintain an accurate change log.</li>
+<li>Value, and respect the contributions of developers, and observe and
+respect the copyrights of other projects.</li>
+</ul>
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</body>
+</html>
* Value, and respect the contributions of developers, and observe and
respect the copyrights of other projects.
-
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
The graphics formats supported by <strong>mogrify</strong> are listed in
<a href="GraphicsMagick.html"><em>GraphicsMagick(1)</em></a>.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
gm mogrify -resize 640x480! cockatoo.miff
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<a href="GraphicsMagick.html"><em>GraphicsMagick(1)</em></a>.
<br> <br>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
a visual image directory. Choose a particular tile of the composite and
press a button to display it. See <strong>display(1)</strong> and <strong>miff(5)</strong>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
gm montage +frame +shadow +label -tile 5x1 -geometry 50x50+0+0 *.png joined.png
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<a href="GraphicsMagick.html"><em>GraphicsMagick(1)</em></a>.
<br> <br>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
image. The default is not to place a title at the top of the composite
image.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Cineon and SMTPE DPX Support</title>
<meta content="Describes GraphicsMagick's support for Cineon and SMPTE DPX formats. " name="description" />
<meta content="GraphicsMagick, Cineon, DPX, SMPTE 268M, Motion Picture" name="keywords" />
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-cineon-and-smtpe-dpx-support">
or getting the wires crossed. The swap-samples option may be
supplied when reading or writing in order to read or write using
the necessary sample order.</dd>
+<dt>-define dpx:swap-samples-read={true|false}</dt>
+<dd>Similar to dpx:swap-samples but only applied while reading.</dd>
+<dt>-define dpx:swap-samples-write={true|false}</dt>
+<dd>Similar to dpx:swap-samples but only applied while writing.</dd>
<dt>-interlace plane</dt>
<dd>By default, samples are stored contiguously in a single element
when possible. Specifying '-interlace plane' causes each sample
gm identify -format '%[dpx:*]' foo.dpx
</pre>
<p>to list all DPX header attributes.</p>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Cineon and SMTPE DPX Support</title>
+<meta content="Describes GraphicsMagick's support for Cineon and SMPTE DPX formats. " name="description" />
+<meta content="GraphicsMagick, Cineon, DPX, SMPTE 268M, Motion Picture" name="keywords" />
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-cineon-and-smtpe-dpx-support">
+<h1 class="title">GraphicsMagick Cineon and SMTPE DPX Support</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#introduction" id="id1">Introduction</a></li>
+<li><a class="reference internal" href="#applications" id="id2">Applications</a></li>
+<li><a class="reference internal" href="#dpx-features" id="id3">DPX features</a><ul>
+<li><a class="reference internal" href="#basic" id="id4">Basic</a></li>
+<li><a class="reference internal" href="#colorspaces" id="id5">Colorspaces</a></li>
+<li><a class="reference internal" href="#storage" id="id6">Storage</a></li>
+<li><a class="reference internal" href="#yet-to-be-supported" id="id7">Yet to be supported</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#using-graphicsmagick" id="id8">Using GraphicsMagick</a><ul>
+<li><a class="reference internal" href="#image-resize" id="id9">Image Resize</a></li>
+<li><a class="reference internal" href="#annotate-image" id="id10">Annotate Image</a></li>
+<li><a class="reference internal" href="#colorspace-transformation" id="id11">Colorspace Transformation</a></li>
+<li><a class="reference internal" href="#modifying-an-image-in-place" id="id12">Modifying An Image In-Place</a></li>
+<li><a class="reference internal" href="#creating-a-contact-sheet" id="id13">Creating A Contact Sheet</a></li>
+<li><a class="reference internal" href="#animating-a-sequence" id="id14">Animating A Sequence</a></li>
+<li><a class="reference internal" href="#displaying-one-image-frame" id="id15">Displaying One Image Frame</a></li>
+<li><a class="reference internal" href="#viewing-a-sequence" id="id16">Viewing A Sequence</a></li>
+<li><a class="reference internal" href="#using-the-batch-capability" id="id17">Using the Batch capability</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#options-and-attributes" id="id18">Options And Attributes</a><ul>
+<li><a class="reference internal" href="#command-options" id="id19">Command options</a></li>
+<li><a class="reference internal" href="#dpx-attributes" id="id20">DPX Attributes</a></li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="section" id="introduction">
+<h1><a class="toc-backref" href="#id1">Introduction</a></h1>
+<p>GraphicsMagick supports legacy Legacy 10-bit Kodak Cineon format as
+well as high-grade support for <a class="reference external" href="http://www.smpte.org/">SMPTE</a> DPX Version 2.0 (<a class="reference external" href="http://www.smpte.org/">SMPTE</a>
+268M-2003). SMPTE DPX RGB and YCbCr colorspaces are supported. The
+DPX implementation supports 8, 10, 12, and 16 bits/sample and any
+arbitrary image pixel size. The Cineon implementation supports 8 and
+10 bits/sample.</p>
+<p>Film images are usually captured at <em>2K</em> resolution (82 pixels/mm),
+<em>4K</em> resolution (164 pixels/mm), or even <em>8K</em> resolution (328
+pixels/mm), where the actual resolution values approximate the
+horizontal dimension of the image. A table of <a class="reference external" href="http://www.surrealroad.com/digital/index.php/archives/2005/standard-data-resolutions/">typical pixel
+resolutions</a> for various film sizes may be found on the <a class="reference external" href="http://blog.surrealroad.com//">Surreal
+Road</a> site (table reproduced here for convenience). File sizes may be
+quite large and range in size from 8MB to as much as 180MB. The common
+10-bit <em>2K</em> format consumes 12MB of disk while a 10-bit <em>4K</em> scan
+consumes 50MB of disk.</p>
+<table border="1" class="docutils">
+<caption>Standard data resolutions</caption>
+<colgroup>
+<col width="57%" />
+<col width="13%" />
+<col width="18%" />
+<col width="13%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Format</th>
+<th class="head">Picture
+aspect
+ratio</th>
+<th class="head">Standard
+pixel
+resolution</th>
+<th class="head">Pixel
+aspect
+ratio</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>Apple iPod video</td>
+<td class="decimal">1.33</td>
+<td>320×240</td>
+<td class="decimal">1.0</td>
+</tr>
+<tr><td>Apple iPhone video</td>
+<td class="decimal">1.5</td>
+<td>480×320</td>
+<td class="decimal">1.0</td>
+</tr>
+<tr><td>Sony PlayStationPortable</td>
+<td class="decimal">1.76</td>
+<td>480×272</td>
+<td class="decimal">1.0</td>
+</tr>
+<tr><td>SD video (PAL, DV)</td>
+<td class="decimal">1.33</td>
+<td>720×576</td>
+<td class="decimal">1.067</td>
+</tr>
+<tr><td>SD video (NTSC, DV)</td>
+<td class="decimal">1.33</td>
+<td>720×486</td>
+<td class="decimal">0.9</td>
+</tr>
+<tr><td>SD video (PAL, square pixels)</td>
+<td class="decimal">1.33</td>
+<td>768×576</td>
+<td class="decimal">1.0</td>
+</tr>
+<tr><td>SD video (NTSC, square pixels)</td>
+<td class="decimal">1.33</td>
+<td>648×486</td>
+<td class="decimal">1.0</td>
+</tr>
+<tr><td>DVD video (NTSC, 4:3)</td>
+<td class="decimal">1.33</td>
+<td>720×480</td>
+<td class="decimal">0.9</td>
+</tr>
+<tr><td>DVD video (PAL, 4:3)</td>
+<td class="decimal">1.33</td>
+<td>720×576</td>
+<td class="decimal">1.067</td>
+</tr>
+<tr><td>DVD video (NTSC, 16:9)</td>
+<td class="decimal">1.78</td>
+<td>720×480</td>
+<td class="decimal">1.185</td>
+</tr>
+<tr><td>DVD video (PAL, 16:9)</td>
+<td class="decimal">1.78</td>
+<td>720×576</td>
+<td class="decimal">1.69</td>
+</tr>
+<tr><td>Blu-ray</td>
+<td class="decimal">1.78</td>
+<td>1920×1080</td>
+<td class="decimal">1.0</td>
+</tr>
+<tr><td>HD video @720</td>
+<td class="decimal">1.78</td>
+<td>1280×720</td>
+<td class="decimal">1.0</td>
+</tr>
+<tr><td>HD video @1080 (certain types)</td>
+<td class="decimal">1.78</td>
+<td>1440×1080</td>
+<td class="decimal">1.33</td>
+</tr>
+<tr><td>HD video @1080</td>
+<td class="decimal">1.78</td>
+<td>1920×1080</td>
+<td class="decimal">1.0</td>
+</tr>
+<tr><td>DVC Pro HD @59.94i</td>
+<td class="decimal">1.78</td>
+<td>1280×1080</td>
+<td class="decimal">1.5</td>
+</tr>
+<tr><td>16mm</td>
+<td class="decimal">1.37</td>
+<td>1712×1240</td>
+<td class="decimal">1.00</td>
+</tr>
+<tr><td>Super-16</td>
+<td class="decimal">1.65</td>
+<td>2048×1240</td>
+<td class="decimal">1.00</td>
+</tr>
+<tr><td>“Academy” aperture (2k)</td>
+<td class="decimal">1.37</td>
+<td>1828×1332</td>
+<td class="decimal">1.00</td>
+</tr>
+<tr><td>“Academy” aperture (4k)</td>
+<td class="decimal">1.37</td>
+<td>3656×2664</td>
+<td class="decimal">1.00</td>
+</tr>
+<tr><td>Cinemascope (Squeezed, 2k)</td>
+<td class="decimal">2.35</td>
+<td>1828×1556</td>
+<td class="decimal">2.00</td>
+</tr>
+<tr><td>Cinemascope (Squeezed, 4k)</td>
+<td class="decimal">2.35</td>
+<td>3656×2664</td>
+<td class="decimal">2.00</td>
+</tr>
+<tr><td>Cinemascope (Unsqueezed, 2k)</td>
+<td class="decimal">2.35</td>
+<td>2048×872</td>
+<td class="decimal">1.00</td>
+</tr>
+<tr><td>Cinemascope (Unsqueezed, 4k)</td>
+<td class="decimal">2.35</td>
+<td>3656×1556</td>
+<td class="decimal">1.00</td>
+</tr>
+<tr><td>Full Aperture (2k)</td>
+<td class="decimal">1.33</td>
+<td>2048×1556</td>
+<td class="decimal">1.00</td>
+</tr>
+<tr><td>Full Aperture (4k)</td>
+<td class="decimal">1.33</td>
+<td>4096×3112</td>
+<td class="decimal">1.00</td>
+</tr>
+<tr><td>8-perf “VistaVision” (3k)</td>
+<td class="decimal">1.5</td>
+<td>3072×2048</td>
+<td class="decimal">1.00</td>
+</tr>
+<tr><td>8-perf “VistaVision” (6k)</td>
+<td class="decimal">1.5</td>
+<td>6144×4096</td>
+<td class="decimal">1.00</td>
+</tr>
+<tr><td>Red (16:9, 4k)</td>
+<td class="decimal">1.78</td>
+<td>4096×2304</td>
+<td class="decimal">1.00</td>
+</tr>
+<tr><td>Red (2:1, 4k)</td>
+<td class="decimal">2.0</td>
+<td>4096×2048</td>
+<td class="decimal">1.00</td>
+</tr>
+<tr><td>Digital Cinema (2k)</td>
+<td class="decimal">1.9</td>
+<td>2048×1080</td>
+<td class="decimal">1.00</td>
+</tr>
+<tr><td>Digital Cinema (4k)</td>
+<td class="decimal">1.9</td>
+<td>4096×2160</td>
+<td class="decimal">1.00</td>
+</tr>
+<tr><td>UHDTV ("4k")</td>
+<td class="decimal">1.78</td>
+<td>3840×2160</td>
+<td class="decimal">1.00</td>
+</tr>
+<tr><td>UHDTV ("8k")</td>
+<td class="decimal">1.78</td>
+<td>7860×4320</td>
+<td class="decimal">1.00</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="applications">
+<h1><a class="toc-backref" href="#id2">Applications</a></h1>
+<p>The strength of GraphicsMagick versus specialized proprietary software
+are its cost (absolutely free!), open source availability (user is
+able to fix software flaws or tailor software to meet specific needs),
+general purpose image processing capabilities, deep image capabilities
+(up to 32-bits per sample), excellent performance, platform
+independence, lack of encumbering usage licenses, and robust
+implementation. Examples of areas where GraphicsMagick may be used
+are:</p>
+<blockquote>
+<ul class="simple">
+<li>View the image on a display.</li>
+<li>Scaling (for example, <em>4K</em> to <em>2K</em> or 1920x1080 HD with excellent quality)</li>
+<li>Cropping</li>
+<li>Rotation</li>
+<li>Filtering</li>
+<li>ICC ICM profile-based color management and transformations</li>
+<li>Gamma adjustment</li>
+<li>Color adjustment</li>
+<li>Conversion to grayscale</li>
+<li>Text annotations</li>
+<li>Compositions</li>
+<li>Drawing on images (for example drawing markers on image)</li>
+<li>Conversion to and from other formats (e.g. Kodak Cineon, TIFF, JPEG, SGI,
+Postscript, PNG, and PNM)</li>
+</ul>
+</blockquote>
+<p>GraphicsMagick's DPX file format support is very comprehensive. It
+goes beyond the DPX format support in other applications by striving
+to implement the complete DPX specification rather than just a few
+commonly used sub-formats. The capabilities of GraphicsMagick's DPX
+support are as follows:</p>
+</div>
+<div class="section" id="dpx-features">
+<h1><a class="toc-backref" href="#id3">DPX features</a></h1>
+<div class="section" id="basic">
+<h2><a class="toc-backref" href="#id4">Basic</a></h2>
+<blockquote>
+<ul class="simple">
+<li>Anything which can be read, can also be written.</li>
+<li>All DPX header information (including the user specific area) are
+stored as image attributes and restored when the image is written.</li>
+<li>Image source header information is updated appropriately.</li>
+</ul>
+</blockquote>
+</div>
+<div class="section" id="colorspaces">
+<h2><a class="toc-backref" href="#id5">Colorspaces</a></h2>
+<blockquote>
+<ul class="simple">
+<li>Linear RGB</li>
+<li>Cineon Log RGB (default density range = 2.048)</li>
+<li>Grayscale (Luma)</li>
+<li>Rec. 601 and Rec. 709 YCbCr (4:4:4 and 4:2:2). Below-black and
+above-white values are clipped.</li>
+</ul>
+</blockquote>
+</div>
+<div class="section" id="storage">
+<h2><a class="toc-backref" href="#id6">Storage</a></h2>
+<blockquote>
+<ul class="simple">
+<li>Bits per sample of 1, 8, 10, 12, and 16.</li>
+<li>Packed, or fill type A or B for 10/12 bits.</li>
+<li>All RGB-oriented element types (R, G, B, A, RGB, RGBA, ABGR).</li>
+<li>YCbCr</li>
+<li>Planar (multi-element) storage fully supported.</li>
+<li>Alpha may be stored in a separate element.</li>
+<li>Big and little endian storage.</li>
+</ul>
+</blockquote>
+</div>
+<div class="section" id="yet-to-be-supported">
+<h2><a class="toc-backref" href="#id7">Yet to be supported</a></h2>
+<blockquote>
+<ul class="simple">
+<li>Composite video.</li>
+<li>Floating point formats (32 and 64 bits)</li>
+<li>Depth channel (not supportable within GraphicsMagick).</li>
+<li>Studio (reduced range) YCbCr and RGB.</li>
+</ul>
+</blockquote>
+<p>The software is written efficiently so the performance when reading
+and writing files is limited by the performance of the file I/O
+subsystem. The software is designed to avoid seeking while reading
+and writing so that files may be read and written over pipes, or via a
+user provided file descriptor.</p>
+</div>
+</div>
+<div class="section" id="using-graphicsmagick">
+<h1><a class="toc-backref" href="#id8">Using GraphicsMagick</a></h1>
+<div class="section" id="image-resize">
+<h2><a class="toc-backref" href="#id9">Image Resize</a></h2>
+<p>GraphicsMagick is easy to use. The following is an example of scaling
+a <em>4K</em> 16 bit scan to a <em>2K</em> <em>Academy</em> 10 bit image using the <a class="reference external" href="convert.html">convert</a>
+command:</p>
+<pre class="literal-block">
+gm convert 4k.dpx -resize 1828x1556 -depth 10 2k.dpx
+</pre>
+<p>The above example uses the default resizing filters which are
+optimized for quality, but take longer than some other filters. The
+<em>box</em> resize filter provides reasonably good scaling in a reasonable
+amount of time:</p>
+<pre class="literal-block">
+gm convert 4k.dpx -filter box -resize 1828x1556 -depth 10 2k.dpx
+</pre>
+<p>The above example command takes about 4 seconds (on an Apple 2.5GHz G5
+PowerMac or Intel 2.4GHz Xeon) to down-convert from a 131MB <em>5K</em>
+(5232x4376) original 16-bit scan from a NorthLight scanner to a 11MB
+<em>2K</em> 10-bit working image. Operations on more typical <em>2K</em> images take
+about a quarter of a second.</p>
+</div>
+<div class="section" id="annotate-image">
+<h2><a class="toc-backref" href="#id10">Annotate Image</a></h2>
+<p>The following example shows how GraphicsMagick's resize capability may
+be combined with its powerful drawing capability to take a full size
+source image and produce a smaller (720x576) version which includes
+the image filename and timecode at the top of the image, and a logo
+<em>bug</em> image in the bottom right corner:</p>
+<pre class="literal-block">
+gm convert infile.dpx -resize '720x576!' \
+ -draw 'fill "white";text-undercolor "Blue";font "Helvetica";font-size 18;\
+ text 10,20 "%f (%[DPX:tv.time.code])";image atop 500,400 0,0 "gm-125x80t.png"' \
+ outfile.dpx
+</pre>
+<p>As may be seen, the argument to -draw can become extremely long, so to
+make things easy, the drawing commands may be placed in a simple text
+file and passed by reference to the draw comand:</p>
+<p>First lets check what we edited into our drawing command file:</p>
+<pre class="literal-block">
+% cat drawcmd.txt
+fill "white"
+text-undercolor "Blue"
+font "Helvetica"
+font-size 18
+text 10,20 "%f (%[DPX:tv.time.code])"
+image atop 500,400 "0,0 "gm-125x80t.png"
+</pre>
+<p>and now we can apply it by passing the filename prefixed with a '@' to the
+-draw command:</p>
+<pre class="literal-block">
+gm convert infile.dpx -resize '720x576!' -draw '@drawcmd.txt' outfile.dpx
+</pre>
+<p>The <tt class="docutils literal">0,0</tt> in the image composition command argument says to use the
+image as is. If the composited image should be automatically resized,
+then simply replace the <tt class="docutils literal">0,0</tt> with the desired size.</p>
+<p>There are a number of powerful scripting environments for
+GraphicsMagick. One of these is RMagick (Ruby language interface to
+GraphicsMagick). In Ruby, the same effect may be obtained via a script
+that looks like:</p>
+<pre class="literal-block">
+#! /usr/local/bin/ruby -w
+require 'RMagick'
+include Magick
+img = Image.read('infile.dpx')[0]
+frog = Image.read('gm-125x80t.png')[0]
+gc = Draw.new
+gc.fill('white')
+gc.text_undercolor("Blue")
+gc.font("Helvetica")
+gc.font_size(18)
+gc.text(10, 20, "%f (%[DPX:tv.time.code])")
+gc.composite(500, 400, 0, 0, frog, AtopCompositeOp)
+gc.draw(img)
+img.write('outfile.dpx')
+</pre>
+<p>In addition to Ruby, there are scripting interfaces for Perl, Python,
+Tcl, and Ch (C-like scripting language).</p>
+</div>
+<div class="section" id="colorspace-transformation">
+<h2><a class="toc-backref" href="#id11">Colorspace Transformation</a></h2>
+<p>To convert an RGB file to a 4:2:2 YCbCr file in Rec 709 space:</p>
+<pre class="literal-block">
+gm convert 2k.dpx -depth 10 -colorspace Rec709YCbCr -sampling-factor 4:2:2 2k-ycbcr.dpx
+</pre>
+</div>
+<div class="section" id="modifying-an-image-in-place">
+<h2><a class="toc-backref" href="#id12">Modifying An Image In-Place</a></h2>
+<p>Besides convert, which converts from one file to another, there is
+<a class="reference external" href="mogrify.html">mogrify</a> which transforms the file in place. A temporary file is used
+(if necessary) to ensure that the existing image file is not damaged
+if something goes wrong (e.g., not enough disk space). Note that
+unlike some applications supporting DPX/Cineon, when a file is modifed
+<em>in-place</em> , it is completely re-written. While GraphicsMagick makes
+every attempt to preserve header information, some previously existing
+features of the file (such as the offset to the pixel data) may
+change.</p>
+<p>A typical mogrify command is</p>
+<pre class="literal-block">
+gm mogrify -resize 1828x1556 -depth 10 file-0001.dpx file-0002.dpx
+</pre>
+<p>Multiple files may be specified on the command line so the same
+command may process hundreds of files in one invocation.</p>
+<p>Unix users can use the find and xargs programs to perform operations
+on any number of files:</p>
+<pre class="literal-block">
+find /assets/001 -name '*.dpx' -print | \
+ xargs gm mogrify -resize 1828x1556 -depth 10
+</pre>
+<p>Xargs works by pasting as many file names as possible on the end of
+the command provided to it.</p>
+<p>The GNU version of xargs provides an added benefit. It is able to run
+several commands in the background. This means that if your system has
+multiple CPUs, it can take advantage of all the CPUs while still using
+one command:</p>
+<pre class="literal-block">
+find /assets/001 -name '*.dpx' -print | \
+ xargs --max-procs 3 --max-args 25 gm mogrify -resize 1828x1556 -depth 10
+</pre>
+<p>The mogrify command supports the -output-directory option to sent
+files to a different directory than the input files. This allows
+processing a large number of files without overwriting the input
+files:</p>
+<pre class="literal-block">
+mkdir dest
+cd source
+gm mogrify -output-directory ../dest -resize 1828x1556 -depth 10 '*.dpx'
+</pre>
+<p>Note that the entire input file path specification is preserved when
+composing the output path so that the input file path is simply
+appended to the output directory path. Also, unless the
+-create-directories option is added, the user is responsible for
+creating any necessary destination directories. As an example of the
+path composition algorithm, if the input file name is specified as
+source/file.dpx and the output directory is specified as dest, then
+the output file path will be dest/source/file.dpx.</p>
+<p>Here is an incantation which recursively processes all DPX files under
+source and sends the result to a similar directory tree under dest.</p>
+<pre class="literal-block">
+mkdir dest
+cd source
+find . name '*.dpx' -print | xargs gm mogrify -output-directory ../dest \
+ -create-directories -resize 1828x1556 -depth 10
+</pre>
+</div>
+<div class="section" id="creating-a-contact-sheet">
+<h2><a class="toc-backref" href="#id13">Creating A Contact Sheet</a></h2>
+<p>GraphicsMagick may be used to create a contact sheet (grid of
+thumbnails with name and size) by using the <em>VID</em> pseudoformat which
+accepts a wildcarded argument of files (protected by quotes!) to
+read. The output files are buffered while files are being read so
+there is a practical limit to the number of files which may be
+processed at once. To output to a Postscript file:</p>
+<pre class="literal-block">
+gm convert "vid:*.dpx" "contact-sheet.ps"
+</pre>
+<p>or to a PDF file:</p>
+<pre class="literal-block">
+gm convert "vid:*.dpx" "contact-sheet.pdf"
+</pre>
+<p>or to a sequence of JPEG files ranging from contact-sheet-000.jpg to
+contact-sheet-999.jpg:</p>
+<pre class="literal-block">
+gm convert "vid:*.dpx" "contact-sheet-%03d.jpg"
+</pre>
+<p>or to a MIFF file which may be used to interactively browse the
+original files using 'gm display':</p>
+<pre class="literal-block">
+gm convert "vid:*.dpx" "contact-sheet.miff"
+</pre>
+</div>
+<div class="section" id="animating-a-sequence">
+<h2><a class="toc-backref" href="#id14">Animating A Sequence</a></h2>
+<p>GraphicsMagick may be used to animate an image sequence on an X11
+display using the <a class="reference external" href="animate.html">animate</a> subcommand. Frames are buffered in memory
+(pre-loaded into the X11 server) so the number of frames which may be
+animated at once is limited. GraphicsMagick has been used to animate
+1080P (1920x1080) images at 24 frames per second with at least 300
+frames in the sequence.More frames may be buffered on 64-bit
+systems. Many more frames may be animated by preparing a reduced set
+of frames in advance.</p>
+<p>To visualize an animation at 24 frames per second (delay (1/24)*100) use</p>
+<pre class="literal-block">
+gm animate -delay 4.17 'Frame_*.dpx'
+</pre>
+<p>In order to obtain a preview of a larger sequence, and if the frames
+are numbered, a broader span of time may be animated by selecting
+every 10^th frame (terminating with zero) to animate at 2.4 frames per
+second:</p>
+<pre class="literal-block">
+gm animate -delay 41.7 'Frame_*0.dpx'
+</pre>
+</div>
+<div class="section" id="displaying-one-image-frame">
+<h2><a class="toc-backref" href="#id15">Displaying One Image Frame</a></h2>
+<p>An image frame may be displayed on an X11 server using the <a class="reference external" href="display.html">display</a>
+subcommand. By default the name of the image file is displayed in the
+title bar. By specifying the format of the title, other useful
+information such as the time code (see the DPX Attributes section for
+more details) may be included in the window title:</p>
+<pre class="literal-block">
+gm display -title '%f (%[DPX:tv.time.code])' foo.dpx
+</pre>
+</div>
+<div class="section" id="viewing-a-sequence">
+<h2><a class="toc-backref" href="#id16">Viewing A Sequence</a></h2>
+<p>A sequence of images may be displayed on an X11 server using the
+<a class="reference external" href="display.html">display</a> subcommand. Unlike 'gm animate' there are no arbitrary limits
+when displaying a sequence this way. Unlike 'gm animate' the
+inter-frame delay can not be set to less than a second (100 ticks is
+one second).</p>
+<pre class="literal-block">
+gm display +progress -delay 100 'Frame_*.dpx'
+</pre>
+</div>
+<div class="section" id="using-the-batch-capability">
+<h2><a class="toc-backref" href="#id17">Using the Batch capability</a></h2>
+<p>A 'batch' command is provided (starting with the GraphicsMagick 1.3.18
+release) which supports executing an arbitrary number of
+GraphicsMagick commands from a file, or provided via standard input,
+while executing just one instance of GraphicsMagick. This provides
+for more efficiency and for use of GraphicsMagick as a co-process. An
+arbitrary script which produces the commands may continue to produce
+the commands as GraphicsMagick executes them. For example (Bourne
+shell script):</p>
+<pre class="literal-block">
+outdir=outdir
+mkdir $outdir
+find fromdir -name '*.dpx'| sort |
+while read infile
+do
+ outfile=$outdir/`basename $infile`
+ echo time convert $infile -gaussian 0x1 $outfile
+done | gm batch -
+</pre>
+</div>
+</div>
+<div class="section" id="options-and-attributes">
+<h1><a class="toc-backref" href="#id18">Options And Attributes</a></h1>
+<div class="section" id="command-options">
+<h2><a class="toc-backref" href="#id19">Command options</a></h2>
+<p>The following command options are particularly useful when dealing with
+DPX files:</p>
+<dl class="docutils">
+<dt>-colorspace {CineonLog|RGB|Gray|Rec601Luma|Rec709Luma|Rec601YCbCr|Rec709YCbCr}</dt>
+<dd>Specifies the colorspace to be used when saving the DPX
+file. CineonLog selects log encoding according to Kodak Cineon
+specifications. RGB selects linear RGB encoding. Gray selects
+linear gray encoding similar to RGB, but with a single
+channel. Rec601Luma requests that RGB is converted to a gray image
+using Rec601 Luma. Rec709Luma requests that RGB is converted to a
+gray image using Rec709Luma. Rec601YCbCr requests that the image
+is saved as YCbCr according to Rec601 (SDTV)
+specifications. Rec709CbCr requests that the image is saved as
+YCbCr according to Rec709 (HDTV) specifications.</dd>
+<dt>-endian {lsb|msb}</dt>
+<dd>Specifies the endian order to use when writing the DPX
+file. GraphicsMagick writes big-endian DPX files by default since
+they are the most portable. Other implementations may use the
+native order of the host CPU (e.g. little-endian when using an
+Intel 'x86 CPU).</dd>
+<dt>-depth <value></dt>
+<dd>Specifies the number of bits to preserve in a color sample. By
+default the output file is written with the same number of bits as
+the input file. For example, if the input file is 16 bits, it may
+be reduced to 10 bits via '-depth 10'.</dd>
+<dt>-define dpx:bits-per-sample=<value></dt>
+<dd>If the dpx:bits-per-sample key is defined, GraphicsMagick will
+write DPX images with the specified bits per sample, overriding
+any existing depth value. If this option is not specified, then
+the value is based on the existing image depth value from the
+original image file. The DPX standard supports bits per sample
+values of 1, 8, 10, 12, and 16. Many DPX readers demand a sample
+size of 10 bits with type A padding (see below).</dd>
+<dt>-define dpx:colorspace={rgb|cineonlog}</dt>
+<dd>Use the dpx:colorspace option when reading a DPX file to specify
+the colorspace the DPX file uses. This overrides the colorspace
+type implied by the DPX header (if any). Currently files with the
+transfer characteristic Printing Density are assumed to be log
+encoded density while files marked as Linear are assumed to be
+linear. Hint: use <tt class="docutils literal"><span class="pre">-define</span> dpx:colorspace=rgb</tt> in order to avoid
+the log to linear transformation for DPX files which use Printing
+Density.</dd>
+<dt>-define dpx:packing-method={packed|a|b|lsbpad|msbpad}</dt>
+<dd>DPX samples may be output within 32-bit words. They may be tightly
+packed end-to-end within the words ("packed"), padded with null
+bits to the right of the sample ("a" or "lsbpad"), or padded with
+null bits to the left of the sample ("b" or "msbpad"). This option
+only has an effect for sample sizes of 10 or 12 bits. If samples
+are not packed, the DPX standard recommends type A padding. Many
+DPX readers demand a sample size of 10 bits with type A padding.</dd>
+<dt>-define dpx:pixel-endian={lsb|msb}</dt>
+<dd>DPX pixels should use the endian order that the DPX header
+specifies. Sometimes there is a mis-match and the pixels use a
+different endian order than the file header specifies. For
+example, the file header may specify little endian, but the pixels
+are in big-endian order. To work around that use -define
+dpx-pixel-endian=msb when reading the file. Likewise, this option
+may be used to intentionally write the pixels using a different
+order than the header.</dd>
+<dt>-define dpx:swap-samples={true|false}</dt>
+<dd>GraphicsMagick strives to adhere to the DPX standard but certain
+aspects of the standard can be quite confusing. As a result, some
+10-bit DPX files have Red and Blue interchanged, or Cb and Cr
+interchanged due to an different interpretation of the standard,
+or getting the wires crossed. The swap-samples option may be
+supplied when reading or writing in order to read or write using
+the necessary sample order.</dd>
+<dt>-interlace plane</dt>
+<dd>By default, samples are stored contiguously in a single element
+when possible. Specifying '-interlace plane' causes each sample
+type (e.g. 'red') to be stored in its own image element. Planar
+storage is fully supported for grayscale (with alpha) and RGB. For
+YCbCr, chroma must be 4:2:2 subsampled in order to use planar
+storage. While planar storage offers a number of benefits, it
+seems that very few DPX-supporting applications support it.</dd>
+<dt>-sampling-factor 4:2:2</dt>
+<dd>Select 4:2:2subsampling when saving an image in YCbCr
+format. Subsampling is handled via a general-purpose image resize
+algorithm (lanczos) rather than a dedicated filter so subsampling
+is slow (but good).</dd>
+<dt>-set reference-white <value></dt>
+<dd>Set the 90% white card level (default 685) for Cineon Log.</dd>
+<dt>-set reference-black <value></dt>
+<dd>Set the 1% black card level (default 95) for Cineon Log.</dd>
+<dt>-set display-gamma <value></dt>
+<dd>Set the display gamma (default 1.7) for Cineon Log.</dd>
+<dt>-set film-gamma <value></dt>
+<dd>Set the film gamma (default 0.6) for Cineon Log.</dd>
+<dt>-set soft-clip-offset <value></dt>
+<dd>Set the soft clip offset (default 0) when converting to <em>computer</em> RGB from
+Cineon Log.</dd>
+</dl>
+</div>
+<div class="section" id="dpx-attributes">
+<h2><a class="toc-backref" href="#id20">DPX Attributes</a></h2>
+<p>GraphicsMagick provides almost full access to DPX header
+attributes. DPX header attributes are shown in the output of 'gm
+identify -verbose' and may be set using the -define syntax
+(e.g. '-define dpx:mp.frame.position=2000') on the command line in
+order to add a value, or override an existing value. The attributes in
+the list below may be viewed or updated. The names are similar to the
+attribute descriptions from the DPX standard.</p>
+<pre class="literal-block">
+dpx:file.copyright
+dpx:file.creation.datetime
+dpx:file.creator
+dpx:file.encryption.key
+dpx:file.filename
+dpx:file.project.name
+dpx:file.version
+dpx:image.orientation
+dpx:mp.count
+dpx:mp.film.manufacturer.id
+dpx:mp.film.type
+dpx:mp.format
+dpx:mp.frame.id
+dpx:mp.frame.position
+dpx:mp.frame.rate
+dpx:mp.held.count
+dpx:mp.perfs.offset
+dpx:mp.prefix
+dpx:mp.sequence.length
+dpx:mp.shutter.angle
+dpx:mp.slate.info
+dpx:source.aspect.ratio.horizontal
+dpx:source.aspect.ratio.vertical
+dpx:source.border.validity.bottom
+dpx:source.border.validity.left
+dpx:source.border.validity.right
+dpx:source.border.validity.top
+dpx:source.creation.datetime
+dpx:source.device.name
+dpx:source.device.serialnumber
+dpx:source.filename
+dpx:source.scanned.size.x
+dpx:source.scanned.size.y
+dpx:source.x-center
+dpx:source.x-offset
+dpx:source.x-original-size
+dpx:source.y-center
+dpx:source.y-offset
+dpx:source.y-original-size
+dpx:tv.black.gain
+dpx:tv.black.level
+dpx:tv.breakpoint
+dpx:tv.field.number
+dpx:tv.gama
+dpx:tv.horizontal.sampling.rate
+dpx:tv.integration.time
+dpx:tv.interlace
+dpx:tv.sync.time
+dpx:tv.temporal.sampling.rate
+dpx:tv.time.code
+dpx:tv.user.bits
+dpx:tv.video.signal
+dpx:tv.white.level
+dpx:user.data.id
+</pre>
+<p>Specific header values from a DPX file may be displayed quickly using a command
+similar to:</p>
+<pre class="literal-block">
+gm identify -format '%[DPX:tv.time.code]' foo.dpx
+</pre>
+<p>Use</p>
+<pre class="literal-block">
+gm identify -format '%[dpx:*]' foo.dpx
+</pre>
+<p>to list all DPX header attributes.</p>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</div>
+</div>
+</body>
+</html>
supplied when reading or writing in order to read or write using
the necessary sample order.
+-define dpx:swap-samples-read={true|false}
+ Similar to dpx:swap-samples but only applied while reading.
+
+-define dpx:swap-samples-write={true|false}
+ Similar to dpx:swap-samples but only applied while writing.
+
-interlace plane
By default, samples are stored contiguously in a single element
when possible. Specifying '-interlace plane' causes each sample
gm identify -format '%[dpx:*]' foo.dpx
to list all DPX header attributes.
-
--------------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Perl API -- PerlMagick</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-perl-api-perlmagick">
$status =~ /(\d+)/;
die "unable to continue" if ($1 == ResourceLimitError);
</pre>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Perl API -- PerlMagick</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-perl-api-perlmagick">
+<h1 class="title">GraphicsMagick Perl API -- PerlMagick</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#introduction" id="id1">Introduction</a></li>
+<li><a class="reference internal" href="#installation" id="id2">Installation</a><ul>
+<li><a class="reference internal" href="#unix" id="id3">UNIX</a></li>
+<li><a class="reference internal" href="#windows-xp-windows-8" id="id4">Windows XP - Windows 8</a></li>
+<li><a class="reference internal" href="#running-the-regression-tests" id="id5">Running the Regression Tests</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#overview" id="id6">Overview</a></li>
+<li><a class="reference internal" href="#example-script" id="id7">Example Script</a></li>
+<li><a class="reference internal" href="#read-or-write-an-image" id="id8">Read or Write an Image</a></li>
+<li><a class="reference internal" href="#manipulate-an-image" id="id9">Manipulate an Image</a></li>
+<li><a class="reference internal" href="#set-an-image-attribute" id="id10">Set an Image Attribute</a></li>
+<li><a class="reference internal" href="#get-an-image-attribute" id="id11">Get an Image Attribute</a></li>
+<li><a class="reference internal" href="#create-an-image-montage" id="id12">Create an Image Montage</a></li>
+<li><a class="reference internal" href="#working-with-blobs" id="id13">Working with Blobs</a></li>
+<li><a class="reference internal" href="#miscellaneous-methods" id="id14">Miscellaneous Methods</a></li>
+<li><a class="reference internal" href="#handling-errors" id="id15">Handling Errors</a></li>
+</ul>
+</div>
+<div class="section" id="introduction">
+<h1><a class="toc-backref" href="#id1">Introduction</a></h1>
+<p>PerlMagick is an objected-oriented Perl interface to GraphicsMagick. Use
+the module to read, manipulate, or write an image or image sequence from
+within a Perl script. This makes it very suitable for Web CGI scripts.
+You must have GraphicsMagick 1.0.0 or above and Perl version 5.005_02 or
+greater installed on your system for either of these utilities to work.
+There are a number of useful scripts available to show you the value of
+PerlMagick. The PerlMagick demo directory provides a number of sample
+demos.</p>
+</div>
+<div class="section" id="installation">
+<h1><a class="toc-backref" href="#id2">Installation</a></h1>
+<div class="section" id="unix">
+<h2><a class="toc-backref" href="#id3">UNIX</a></h2>
+<p>PerlMagick is installed by default by installing GraphicsMagick.
+Installing PerlMagick as a subordinate package of GraphicsMagick is the
+best way to avoid problems.</p>
+<p>For Unix, you typically need to be root to install the software. There
+are ways around this. Consult the Perl manual pages for more information.</p>
+</div>
+<div class="section" id="windows-xp-windows-8">
+<h2><a class="toc-backref" href="#id4">Windows XP - Windows 8</a></h2>
+<p>Please note that a nice GUI installer is available for GraphicsMagick.
+PerlMagick is included in this installer. If you are using the installer,
+then there is no need to compile PerlMagick.</p>
+<p>After GraphicsMagick has been compiled from the GraphicsMagick Windows
+source distribution using Microsoft Visual C++, PerlMagick may be
+manually built and installed by opening a CLI window and performing the
+following steps:</p>
+<pre class="literal-block">
+cd PerlMagick
+copy Makefile.nt Makefile.PL
+perl Makefile.PL
+nmake
+nmake install
+</pre>
+<p>See the PerlMagick Windows HowTo page for further installation
+instructions.</p>
+</div>
+<div class="section" id="running-the-regression-tests">
+<h2><a class="toc-backref" href="#id5">Running the Regression Tests</a></h2>
+<p>To verify a correct installation, type:</p>
+<pre class="literal-block">
+make test
+</pre>
+<p>Use nmake test under Windows. There are a few demonstration scripts
+available to exercise many of the functions PerlMagick can perform. Type</p>
+<pre class="literal-block">
+cd demo
+make
+</pre>
+<p>You are now ready to utilize the PerlMagick methods from within your Perl
+scripts.</p>
+</div>
+</div>
+<div class="section" id="overview">
+<h1><a class="toc-backref" href="#id6">Overview</a></h1>
+<p>Any script that wants to use PerlMagick methods must first define the
+methods within its namespace and instantiate an image object. Do this
+with</p>
+<pre class="literal-block">
+use Graphics::Magick;
+$image=Graphics::Magick->new;
+</pre>
+<p>Note that this differs from the ImageMagick version of PerlMagick which
+uses the namespace Image::Magick. Any PerlMagick code written for the
+ImageMagick version of PerlMagick requires a global substition of
+Image::Magick to Graphics::Magick in order to work with the
+GraphicsMagick version.</p>
+<p>The new() method takes the same parameters as SetAttribute . For example:</p>
+<pre class="literal-block">
+$image=Graphics::Magick->new(size=>'384x256');
+</pre>
+<p>Next you will want to read an image or image sequence, manipulate it, and
+then display or write it. The input and output methods for PerlMagick are
+defined in Read or Write an Image. See Set an Image Attribute for methods
+that affect the way an image is read or written. Refer to Manipulate an
+Image for a list of methods to transform an image. Get an Image Attribute
+describes how to retrieve an attribute for an image. Refer to Create an
+Image Montage for details about tiling your images as thumbnails on a
+background. Finally, some methods do not neatly fit into any of the
+categories just mentioned. Review Miscellaneous Methods for a list of
+these methods.</p>
+<p>Once you are finished with a PerlMagick object you should consider
+destroying it. Each image in an image sequence is stored in either
+virtual memory or as a file in the system's temporary file directory.
+This can potentially add up to megabytes of memory or disk. Upon
+destroying a PerlMagick object, the memory is returned for use by other
+Perl methods. The recommended way to destroy an object is with undef</p>
+<pre class="literal-block">
+undef $image;
+</pre>
+<p>To delete all the images but retain the Graphics::Magick object use</p>
+<pre class="literal-block">
+@$image = ();
+</pre>
+<p>and finally, to delete a single image from a multi-image sequence, use</p>
+<pre class="literal-block">
+undef $image->[x];
+</pre>
+<p>The next section illustrates how to use various PerlMagick methods to
+manipulate an image sequence.</p>
+<p>Some of the PerlMagick methods require external programs such as
+Ghostscript. This may require an explicit path in your PATH environment
+variable to work properly. For example,</p>
+<pre class="literal-block">
+$ENV{PATH}='/bin:/usr/bin:/usr/local/bin';
+</pre>
+</div>
+<div class="section" id="example-script">
+<h1><a class="toc-backref" href="#id7">Example Script</a></h1>
+<p>Here is an example script to get you started:</p>
+<pre class="literal-block">
+#!/usr/local/bin/perl
+use Graphics::Magick;
+my($image, $status);
+$image = Graphics::Magick->new;
+$status = $image->Read('girl.png', 'logo.png', 'rose.png');
+warn "$status" if "$status";
+$status = $image->Crop(geometry=>'100x100+100+100');
+warn "$status" if "$status";
+$status = $image->Write('x.gif');
+warn "$status" if "$status";
+</pre>
+<p>The script reads three images, crops them, and writes a single image as a
+GIF animation sequence. In many cases you may want to access individual
+images of a sequence. The next example illustrates how this is done:</p>
+<pre class="literal-block">
+#!/usr/local/bin/perl
+use Graphics::Magick;
+my($image, $p, $q);
+$image = new Graphics::Magick;
+$image->Read('x1.png');
+$image->Read('j*.jpg');
+$image->Read('k.miff[1, 5, 3]');
+$image->Contrast();
+for ($x = 0; $image->[x]; $x++)
+{
+ $image->[x]->Frame('100x200') if $image->[x]->Get('magick') eq 'GIF';
+ undef $image->[x] if $image->[x]->Get('columns') < 100;
+}
+$p = $image->[1];
+$p->Draw(stroke=>'red', primitive=>'rectangle', points=>'20,20 100,100');
+$q = $p->Montage();
+undef $image;
+$q->Write('x.miff');
+</pre>
+<p>Suppose you want to start out with a 100 by 100 pixel white canvas with a
+red pixel in the center. Try</p>
+<pre class="literal-block">
+$image = Graphics::Magick->new;
+$image->Set(size=>'100x100');
+$image->ReadImage('xc:white');
+$image->Set('pixel[49,49]'=>'red');
+</pre>
+<p>Or suppose you want to convert your color image to grayscale:</p>
+<pre class="literal-block">
+$image->Quantize(colorspace=>'gray');
+</pre>
+<p>Here we annotate an image with a Taipai TrueType font:</p>
+<pre class="literal-block">
+$text = 'Works like magick!';
+$image->Annotate(font=>'kai.ttf', pointsize=>40, fill=>'green', text=>$text);
+</pre>
+<p>Other clever things you can do with a PerlMagick objects include</p>
+<pre class="literal-block">
+$i = $#$p"+1"; # return the number of images associated with object p
+push(@$q, @$p); # push the images from object p onto object q
+@$p = (); # delete the images but not the object p
+$p->Convolve([1, 2, 1, 2, 4, 2, 1, 2, 1]); # 3x3 Gaussian kernel
+</pre>
+</div>
+<div class="section" id="read-or-write-an-image">
+<h1><a class="toc-backref" href="#id8">Read or Write an Image</a></h1>
+<p>Use the methods listed below to either read, write, or display an image
+or image sequence.</p>
+<table border="1" class="docutils">
+<caption>Read or Write Methods</caption>
+<colgroup>
+<col width="10%" />
+<col width="19%" />
+<col width="27%" />
+<col width="44%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Method</td>
+<td>Parameters</td>
+<td>Return Value</td>
+<td>Description</td>
+</tr>
+<tr><td>Read</td>
+<td>one or more
+filenames</td>
+<td>the number of
+images read</td>
+<td>read an image or image sequence</td>
+</tr>
+<tr><td>Write</td>
+<td>filename</td>
+<td>the number of
+images written</td>
+<td>write an image or image
+sequence</td>
+</tr>
+<tr><td>Display</td>
+<td>server name</td>
+<td>the number of
+images displayed</td>
+<td>display the image or image
+sequence to an X server</td>
+</tr>
+<tr><td>Animate</td>
+<td>server name</td>
+<td>the number of
+images animated</td>
+<td>animate image sequence to an X
+server</td>
+</tr>
+</tbody>
+</table>
+<p>For convenience, methods Write(), Display(), and Animate() can take any
+parameter that SetAttribute knows about. For example,</p>
+<pre class="literal-block">
+$image->Write(filename=>'image.png', compression=>'None');
+</pre>
+<p>Use - as the filename to method Read() to read from standard in or to
+method Write() to write to standard out:</p>
+<pre class="literal-block">
+binmode STDOUT;
+$image->Write('png:-');
+</pre>
+<dl class="docutils">
+<dt>To read an image from a disk file, use::</dt>
+<dd>$image = Graphics::Magick->new;
+$filename = 'test.gif';
+$status = $image->Read ($filename);</dd>
+</dl>
+<p>and to write the image back to the disk file, use:</p>
+<pre class="literal-block">
+$status = $image->Write($filename);
+</pre>
+<p>To read an image in the GIF format from a PERL filehandle, use:</p>
+<pre class="literal-block">
+$image = Graphics::Magick->new;
+open(IMAGE, 'image.gif');
+$status = $image->Read(file=>\*IMAGE);
+close(IMAGE);
+</pre>
+<p>To write an image in the PNG format to a PERL filehandle, use:</p>
+<pre class="literal-block">
+$filename = "image.png";
+open(IMAGE, ">$filename");
+$status = $image->Write(file=>\*IMAGE, filename=>$filename);
+close(IMAGE);
+</pre>
+<p>If %0Nd appears in the filename, it is interpreted as a printf format
+specification and the specification is replaced with the specified
+decimal encoding of the scene number. For example,</p>
+<pre class="literal-block">
+image%03d.miff
+</pre>
+<p>converts files image000.miff, image001.miff, etc.</p>
+<p>You can optionally add Image to any method name. For example, ReadImage()
+is an alias for method Read().</p>
+</div>
+<div class="section" id="manipulate-an-image">
+<h1><a class="toc-backref" href="#id9">Manipulate an Image</a></h1>
+<p>Once you create an image with, for example, method ReadImage() you may want
+to operate on it. Below is a list of all the image manipulations methods
+available to you with PerlMagick. There are examples of select PerlMagick
+methods. Here is an example call to an image manipulation method:</p>
+<pre class="literal-block">
+$image->Crop(geometry=>'100x100"+1"0+20');
+$image->[x]->Frame("100x200");
+</pre>
+<p>Image method parameters are often redundant. For example, a 'geometry'
+string parameter (e.g. 800x600+10+20) is equivalent to the explicit use of
+width, height, x, and y, parameters.</p>
+<p>The following image manipulation methods are available:</p>
+<table border="1" class="docutils">
+<caption>Image Manipulation Methods</caption>
+<colgroup>
+<col width="24%" />
+<col width="46%" />
+<col width="30%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Method</td>
+<td>Parameters</td>
+<td>Description</td>
+</tr>
+<tr><td>AdaptiveThreshold</td>
+<td>geometry=>geometry, width=>
+integer, height=> integer, offset
+=>integer</td>
+<td>Local adaptive
+thresholding. Width
+and height specify
+the size of the local
+region while offset
+specifies the amount
+to subtract from the
+average of the
+region.</td>
+</tr>
+<tr><td>AddNoise</td>
+<td>noise=>{Uniform, Gaussian,
+Multiplicative, Impulse,
+Laplacian, Poisson, Random}</td>
+<td>Add noise to an image
+across the red,
+green, and blue,
+channels. Set the
+image colorspace to
+GRAY to obtain
+intensity noise.</td>
+</tr>
+<tr><td>AffineTransform</td>
+<td>affine=>array of float values,
+translate=>float, float, scale=>
+float, float, rotate=>float,
+skewX=>float, skewY=>float</td>
+<td>Affine transform
+image</td>
+</tr>
+<tr><td>Annotate</td>
+<td>text=>string, font=>string,
+family=>string, style=>{Normal,
+Italic, Oblique, Any}, stretch=>
+{Normal, UltraCondensed,
+ExtraCondensed, Condensed,
+SemiCondensed, SemiExpanded,
+Expanded, ExtraExpanded,
+UltraExpanded}, weight=>integer,
+pointsize=>integer, density=>
+geometry, stroke=> color name,
+strokewidth=>integer, fill=>color
+name, undercolor=>color name,
+geometry=>geometry, gravity=>
+{NorthWest, North, NorthEast,
+West, Center, East, SouthWest,
+South, SouthEast}, antialias=>
+{true, false}, x=>integer, y=>
+integer, affine=>array of float
+values, translate=>float, float,
+scale=>float, float, rotate=>
+float. skewX=>float, skewY=>
+float, align=>{Left, Center,
+Right}, encoding=>{UTF-8}</td>
+<td>annotate an image
+with text. See
+QueryFontMetrics to
+get font metrics
+without rendering any
+text.</td>
+</tr>
+<tr><td>Blur</td>
+<td>geometry=>geometry, radius=>
+double, sigma=> double</td>
+<td>blur the image with a
+Gaussian operator of
+the given radius and
+standard deviation
+(sigma).</td>
+</tr>
+<tr><td>Border</td>
+<td>geometry=>geometry, width=>
+integer, height=> integer, fill=>
+color name</td>
+<td>surround the image
+with a border of
+color</td>
+</tr>
+<tr><td>Channel</td>
+<td>channel=>{Red, Cyan, Green,
+Magenta, Blue, Yellow, Opacity,
+Black, Matte, All, Gray}</td>
+<td>extract a channel
+from the image</td>
+</tr>
+<tr><td>Charcoal</td>
+<td>order=>integer</td>
+<td>simulate a charcoal
+drawing</td>
+</tr>
+<tr><td>Chop</td>
+<td>geometry=>geometry, width=>
+integer, height=> integer, x=>
+integer, y=>integer</td>
+<td>chop an image</td>
+</tr>
+<tr><td>Coalesce</td>
+<td> </td>
+<td>merge a sequence of
+images</td>
+</tr>
+<tr><td>Clip</td>
+<td> </td>
+<td>apply any clipping
+path information as
+an image clip mask.</td>
+</tr>
+<tr><td>ColorFloodfill</td>
+<td>geometry=>geometry, x=>integer, y
+=>integer , fill=>color name,
+bordercolor=> color name</td>
+<td>changes the color
+value of any pixel
+that matches the
+color of the target
+pixel and is a
+neighbor. If you
+specify a border
+color, the color
+value is changed for
+any neighbor pixel
+that is not that
+color.</td>
+</tr>
+<tr><td>Colorize</td>
+<td>fill=>color name, opacity=>string</td>
+<td>colorize the image
+with the fill color</td>
+</tr>
+<tr><td>Comment</td>
+<td>string</td>
+<td>add a comment to your
+image</td>
+</tr>
+<tr><td>Compare</td>
+<td>image=>image-handle</td>
+<td>compare image to a
+reference image</td>
+</tr>
+<tr><td>Composite</td>
+<td>image=>image-handle, compose=>{
+Over, In, Out, Atop, Xor, Plus,
+Minus, Add, Subtract,
+Difference, Multiply, Bumpmap,
+Copy, CopyRed, CopyGreen,
+CopyBlue, CopyOpacity,
+Clear, Dissolve, Displace,
+Modulate, Threshold, No, Darken,
+Lighten, Hue, Saturate,
+Colorize, Luminize, Screen,
+Overlay, CopyCyan, CopyMagenta,
+CopyYellow, CopyBlack, Divide,
+HardLight},
+mask=>
+image-handle, geometry=>geometry,
+x=>integer, y=>integer, gravity=>
+{NorthWest, North, NorthEast,
+West, Center, East, SouthWest,
+South, SouthEast}, opacity=>
+integer, tile=>{True, False},
+rotate=>double, color=>color name</td>
+<td>composite one image
+onto another</td>
+</tr>
+<tr><td>Contrast</td>
+<td>sharpen=>{True, False}</td>
+<td>enhance or reduce the
+image contrast</td>
+</tr>
+<tr><td>Convolve</td>
+<td>coefficients=>array of float
+values</td>
+<td>apply a convolution
+kernel to the image.
+Given a kernel order
+, you would supply
+order*order float
+values (e.g. 3x3
+implies 9 values).</td>
+</tr>
+<tr><td>Crop</td>
+<td>geometry=>geometry, width=>
+integer, height=> integer, x=>
+integer, y=>integer</td>
+<td>crop an image</td>
+</tr>
+<tr><td>CycleColormap</td>
+<td>amount=>integer</td>
+<td>displace image
+colormap by amount</td>
+</tr>
+<tr><td>Deconstruct</td>
+<td> </td>
+<td>break down an image
+sequence into
+constituent parts</td>
+</tr>
+<tr><td>Despeckle</td>
+<td> </td>
+<td>reduce the speckles
+within an image</td>
+</tr>
+<tr><td>Draw</td>
+<td>primitive=>{point, line,
+rectangle, roundRectangle, arc,
+ellipse, circle, polyline,
+polygon, ,bezier, path, color,
+matte, text, image, @filename},
+points=>string , method=>{Point,
+Replace, Floodfill, FillToBorder,
+Reset}, stroke=> color name, fill
+=>color name, tile=>image-handle,
+strokewidth=>float, antialias=>
+{true, false}, bordercolor=>color
+name, x=> float, y=>float, affine
+=>array of float values,
+translate=>float, float, scale=>
+float, float, rotate=>float.
+skewX=>float, skewY=> float</td>
+<td>annotate an image
+with one or more
+graphic primitives</td>
+</tr>
+<tr><td>Edge</td>
+<td>radius=>double</td>
+<td>enhance edges within
+the image with a
+convolution filter of
+the given radius.</td>
+</tr>
+<tr><td>Emboss</td>
+<td>geometry=>geometry, radius=>
+double, sigma=> double</td>
+<td>emboss the image with
+a convolution filter
+of the given radius
+and standard
+deviation (sigma).</td>
+</tr>
+<tr><td>Enhance</td>
+<td> </td>
+<td>apply a digital
+filter to enhance a
+noisy image</td>
+</tr>
+<tr><td>Equalize</td>
+<td> </td>
+<td>perform histogram
+equalization to the
+image</td>
+</tr>
+<tr><td>Flatten</td>
+<td> </td>
+<td>flatten a sequence of
+images</td>
+</tr>
+<tr><td>Flip</td>
+<td> </td>
+<td>create a mirror image
+by reflecting the
+image scanlines in
+the vertical
+direction</td>
+</tr>
+<tr><td>Flop</td>
+<td> </td>
+<td>create a mirror image
+by reflecting the
+image scanlines in
+the horizontal
+direction</td>
+</tr>
+<tr><td>Frame</td>
+<td>geometry=>geometry, width=>
+integer, height=> integer, inner
+=>integer, outer=>integer, fill=>
+color name</td>
+<td>surround the image
+with an ornamental
+border</td>
+</tr>
+<tr><td>Gamma</td>
+<td>gamma=>string, red=>double, green
+=>double , blue=>double</td>
+<td>gamma correct the
+image</td>
+</tr>
+<tr><td>Implode</td>
+<td>amount=>double</td>
+<td>implode image pixels
+about the center</td>
+</tr>
+<tr><td>Label</td>
+<td>string</td>
+<td>assign a label to an
+image</td>
+</tr>
+<tr><td>Level</td>
+<td>level=>string, 'black-point'=>
+double, 'mid-point'=>double,
+'white-point'=>double</td>
+<td>adjust the level of
+image contrast</td>
+</tr>
+<tr><td>Magnify</td>
+<td> </td>
+<td>double the size of an
+image</td>
+</tr>
+<tr><td>Map</td>
+<td>image=>image-handle, dither=>
+{True, False}</td>
+<td>choose a particular
+set of colors from
+this image</td>
+</tr>
+<tr><td>MatteFloodfill</td>
+<td>geometry=>geometry, x=>integer, y
+=>integer , matte=>integer,
+bordercolor=>color name</td>
+<td>changes the matte
+value of any pixel
+that matches the
+color of the target
+pixel and is a
+neighbor. If you
+specify a border
+color, the matte
+value is changed for
+any neighbor pixel
+that is not that
+color.</td>
+</tr>
+<tr><td>MedianFilter</td>
+<td>radius=>double</td>
+<td>replace each pixel
+with the median
+intensity pixel of a
+neighborhood.</td>
+</tr>
+<tr><td>Minify</td>
+<td> </td>
+<td>half the size of an
+image</td>
+</tr>
+<tr><td>Modulate</td>
+<td>brightness=>double, saturation=>
+double, hue=> double</td>
+<td>vary the brightness,
+saturation, and hue
+of an image by the
+specified percentage</td>
+</tr>
+<tr><td>MotionBlur</td>
+<td>geometry=>geometry, radius=>
+double, sigma=> double, angle=>
+double</td>
+<td>blur the image with a
+Gaussian operator of
+the given radius and
+standard deviation
+(sigma) at the given
+angle to simulate the
+effect of motion</td>
+</tr>
+<tr><td>Negate</td>
+<td>gray=>{True, False}</td>
+<td>replace every pixel
+with its
+complementary color
+(white becomes black,
+yellow becomes blue,
+etc.)</td>
+</tr>
+<tr><td>Normalize</td>
+<td> </td>
+<td>transform image to
+span the full range
+of color values</td>
+</tr>
+<tr><td>OilPaint</td>
+<td>radius=>integer</td>
+<td>simulate an oil
+painting</td>
+</tr>
+<tr><td>Opaque</td>
+<td>color=>color name, fill=> color
+name</td>
+<td>change this color to
+the fill color within
+the image</td>
+</tr>
+<tr><td>Quantize</td>
+<td>colors=>integer, colorspace=>
+{RGB, Gray, Transparent, OHTA,
+XYZ, YCbCr, YIQ, YPbPr, YUV,
+CMYK}, treedepth=> integer,
+dither=>{True, False},
+measure_error=>{True, False},
+global_colormap=>{True, False}</td>
+<td>preferred number of
+colors in the image</td>
+</tr>
+<tr><td>Profile</td>
+<td>name=>{ICM, IPTC}, profile=>blob</td>
+<td>add or remove ICC or
+IPTC image profile</td>
+</tr>
+<tr><td>Raise</td>
+<td>geometry=>geometry, width=>
+integer, height=> integer, x=>
+integer, y=>integer, raise=>
+{True, False}</td>
+<td>lighten or darken
+image edges to create
+a 3-D effect</td>
+</tr>
+<tr><td>ReduceNoise</td>
+<td>radius=>double</td>
+<td>reduce noise in the
+image with a noise
+peak elimination
+filter</td>
+</tr>
+<tr><td>Resize</td>
+<td>geometry=>geometry, width=>
+integer, height=> integer, filter
+=>{Point, Box, Triangle, Hermite,
+Hanning, Hamming, Blackman,
+Gaussian, Quadratic, Cubic,
+Catrom, Mitchell, Lanczos,
+Bessel, Sinc}, blur=>double</td>
+<td>scale image to
+desired size. Specify
+blur > 1 for blurry
+or < 1 for sharp</td>
+</tr>
+<tr><td>Roll</td>
+<td>geometry=>geometry, x=>integer, y
+=>integer</td>
+<td>roll an image
+vertically or
+horizontally</td>
+</tr>
+<tr><td>Rotate</td>
+<td>degrees=>double, color=>color
+name</td>
+<td>rotate an image</td>
+</tr>
+<tr><td>Sample</td>
+<td>geometry=>geometry, width=>
+integer, height=> integer</td>
+<td>scale image with
+pixel sampling</td>
+</tr>
+<tr><td>Scale</td>
+<td>geometry=>geometry, width=>
+integer, height=> integer</td>
+<td>scale image to
+desired size</td>
+</tr>
+<tr><td>Segment</td>
+<td>colorspace=>{RGB, Gray,
+Transparent, OHTA, XYZ, YCbCr,
+YCC, YIQ, YPbPr, YUV, CMYK},
+verbose={True, False}, cluster=>
+double, smooth= double</td>
+<td>segment an image by
+analyzing the
+histograms of the
+color components and
+identifying units
+that are homogeneous</td>
+</tr>
+<tr><td>Shade</td>
+<td>geometry=>geometry, azimuth=>
+double, elevation=> double, gray
+=>{true, false}</td>
+<td>shade the image using
+a distant light
+source</td>
+</tr>
+<tr><td>Sharpen</td>
+<td>geometry=>geometry, radius=>
+double, sigma=> double</td>
+<td>sharpen the image
+with a Gaussian
+operator of the given
+radius and standard
+deviation (sigma).</td>
+</tr>
+<tr><td>Shave</td>
+<td>geometry=>geometry, width=>
+integer, height=> integer</td>
+<td>shave pixels from the
+image edges</td>
+</tr>
+<tr><td>Shear</td>
+<td>geometry=>geometry, x=>double, y
+=>double color=>color name</td>
+<td>shear the image along
+the X or Y axis by a
+positive or negative
+shear angle</td>
+</tr>
+<tr><td>Signature</td>
+<td> </td>
+<td>generate an SHA-256
+message digest for
+the image pixel
+stream</td>
+</tr>
+<tr><td>Solarize</td>
+<td>threshold=>integer</td>
+<td>negate all pixels
+above the threshold
+level</td>
+</tr>
+<tr><td>Spread</td>
+<td>amount=>integer</td>
+<td>displace image pixels
+by a random amount</td>
+</tr>
+<tr><td>Stereo</td>
+<td>image=>image-handle</td>
+<td>composites two images
+and produces a single
+image that is the
+composite of a left
+and right image of a
+stereo pair</td>
+</tr>
+<tr><td>Stegano</td>
+<td>image=>image-handle, offset=>
+integer</td>
+<td>hide a digital
+watermark within the
+image</td>
+</tr>
+<tr><td>Swirl</td>
+<td>degrees=>double</td>
+<td>swirl image pixels
+about the center</td>
+</tr>
+<tr><td>Texture</td>
+<td>texture=>image-handle</td>
+<td>name of texture to
+tile onto the image
+background</td>
+</tr>
+<tr><td>Threshold</td>
+<td>threshold=>string</td>
+<td>threshold the image</td>
+</tr>
+<tr><td>Transparent</td>
+<td>color=>color name</td>
+<td>make this color
+transparent within
+the image</td>
+</tr>
+<tr><td>Trim</td>
+<td> </td>
+<td>remove edges that are
+the background color
+from the image</td>
+</tr>
+<tr><td>UnsharpMask</td>
+<td>geometry=>geometry, radius=>
+double, sigma=> double, amount=>
+double, threshold=>double</td>
+<td>sharpen the image
+with the unsharp mask
+algorithm.</td>
+</tr>
+<tr><td>Wave</td>
+<td>geometry=>geometry, amplitude=>
+double, wavelength=> double</td>
+<td>alter an image along
+a sine wave</td>
+</tr>
+</tbody>
+</table>
+<p>Note, that the geometry parameter is a short cut for the width and height
+parameters (e.g. geometry=>'106x80' is equivalent to width=>106,
+height=>80).</p>
+<p>You can specify @filename in both Annotate() and Draw(). This reads the
+text or graphic primitive instructions from a file on disk. For example,</p>
+<pre class="literal-block">
+$image->Draw(fill=>'red', primitive=>'rectangle',
+points=>'20,20 100,100 40,40 200,200 60,60 300,300');
+</pre>
+<p>Is equivalent to</p>
+<pre class="literal-block">
+$image->Draw(fill=>'red', primitive=>'@draw.txt');
+</pre>
+<p>Where draw.txt is a file on disk that contains this:</p>
+<pre class="literal-block">
+rectangle 20, 20 100, 100
+rectangle 40, 40 200, 200
+rectangle 60, 60 300, 300
+</pre>
+<p>The text parameter for methods, Annotate(), Comment(), Draw(), and
+Label() can include the image filename, type, width, height, or other
+image attribute by embedding these special format characters:</p>
+<pre class="literal-block">
+%b file size
+%d comment
+%d directory
+%e filename extension
+%f filename
+%h height
+%m magick
+%p page number
+%s scene number
+%t top of filename
+%w width
+%x x resolution
+%y y resolution
+\n newline
+\r carriage return
+</pre>
+<p>For example,</p>
+<pre class="literal-block">
+text=>"%m:%f %wx%h"
+</pre>
+<p>produces an annotation of MIFF:bird.miff 512x480 for an image titled
+bird.miff and whose width is 512 and height is 480.</p>
+<p>You can optionally add Image to any method name. For example, TrimImage()
+is an alias for method Trim().</p>
+<p>Most of the attributes listed above have an analog in convert. See the
+documentation for a more detailed description of these attributes.</p>
+</div>
+<div class="section" id="set-an-image-attribute">
+<h1><a class="toc-backref" href="#id10">Set an Image Attribute</a></h1>
+<p>Use method Set() to set an image attribute. For example,</p>
+<pre class="literal-block">
+$image->Set(dither=>'True');
+$image->[$x]->Set(delay=>3);
+</pre>
+<p>And here is a list of all the image attributes you can set:</p>
+<table border="1" class="docutils">
+<caption>Image Attributes</caption>
+<colgroup>
+<col width="23%" />
+<col width="51%" />
+<col width="27%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Attribute</td>
+<td>Values</td>
+<td>Description</td>
+</tr>
+<tr><td>adjoin</td>
+<td>{True, False}</td>
+<td>join images into a
+single multi-image
+file</td>
+</tr>
+<tr><td>antialias</td>
+<td>{True, False}</td>
+<td>remove pixel
+aliasing</td>
+</tr>
+<tr><td>authenticate</td>
+<td>string</td>
+<td>decrypt image with
+this password.</td>
+</tr>
+<tr><td>background</td>
+<td>color name</td>
+<td>image background
+color</td>
+</tr>
+<tr><td>blue-primary</td>
+<td>x-value, y-value</td>
+<td>chromaticity blue
+primary point (e.g.
+0.15, 0.06)</td>
+</tr>
+<tr><td>bordercolor</td>
+<td>color name</td>
+<td>set the image
+border color</td>
+</tr>
+<tr><td>clip-mask</td>
+<td>image</td>
+<td>Associate a clip
+mask with the
+image.</td>
+</tr>
+<tr><td>colormap[i]</td>
+<td>color name</td>
+<td>color name (e.g.
+red) or hex value
+(e.g. #ccc) at
+position i</td>
+</tr>
+<tr><td>colorspace</td>
+<td>{RGB, CMYK}</td>
+<td>type of colorspace</td>
+</tr>
+<tr><td>comment</td>
+<td>string</td>
+<td>Append to the image
+comment.</td>
+</tr>
+<tr><td>compression</td>
+<td>{None, BZip, Fax, Group4, JPEG,
+LosslessJPEG, LZW, RLE, Zip, LZMA
+JPEG2000, JBIG1, JBIG2}</td>
+<td>type of image
+compression</td>
+</tr>
+<tr><td>debug</td>
+<td>{No, Configure, Annotate, Render,
+Transform, Locale, Coder, X11,
+Cache, Blob, Deprecate, User,
+Resource, TemporaryFile,
+Exception,All}</td>
+<td>log copious
+debugging
+information for
+one or more event
+types</td>
+</tr>
+<tr><td>delay</td>
+<td>integer</td>
+<td>this many 1/100ths
+of a second must
+expire before
+displaying the next
+image in a sequence</td>
+</tr>
+<tr><td>density</td>
+<td>geometry</td>
+<td>vertical and
+horizontal
+resolution in
+pixels of the image</td>
+</tr>
+<tr><td>disk-limit</td>
+<td>integer</td>
+<td>set disk resource
+limit in megabytes</td>
+</tr>
+<tr><td>dispose</td>
+<td>{Undefined, None, Background,
+Previous}</td>
+<td>GIF disposal method</td>
+</tr>
+<tr><td>dither</td>
+<td>{True, False}</td>
+<td>apply error
+diffusion to the
+image</td>
+</tr>
+<tr><td>display</td>
+<td>string</td>
+<td>specifies the X
+server to contact</td>
+</tr>
+<tr><td>endian</td>
+<td>{Undefined, LSB, MSB, Native}</td>
+<td>specifies the
+ordering of bytes
+in a multi-byte
+word. MSB is
+big-endian, LSB is
+little-endian, and
+Native is whatever
+the current host
+uses by default.</td>
+</tr>
+<tr><td>file</td>
+<td>filehandle</td>
+<td>set the image
+filehandle</td>
+</tr>
+<tr><td>filename</td>
+<td>string</td>
+<td>set the image
+filename</td>
+</tr>
+<tr><td>fill</td>
+<td>color</td>
+<td>The fill color
+paints any areas
+inside the outline
+of drawn shape.</td>
+</tr>
+<tr><td>font</td>
+<td>string</td>
+<td>use this font when
+annotating the
+image with text</td>
+</tr>
+<tr><td>fuzz</td>
+<td>integer</td>
+<td>colors within this
+distance are
+considered equal</td>
+</tr>
+<tr><td>gamma</td>
+<td>double</td>
+<td>gamma level of the
+image</td>
+</tr>
+<tr><td>Gravity</td>
+<td>{Forget, NorthWest, North,
+NorthEast, West, Center, East,
+SouthWest, South, SouthEast}</td>
+<td>type of image
+gravity</td>
+</tr>
+<tr><td>green-primary</td>
+<td>x-value, y-value</td>
+<td>chromaticity green
+primary point (e.g.
+0.3, 0.6)</td>
+</tr>
+<tr><td>index[x, y]</td>
+<td>string</td>
+<td>colormap index at
+position (x, y)</td>
+</tr>
+<tr><td>interlace</td>
+<td>{None, Line, Plane, Partition}</td>
+<td>the type of
+interlacing scheme</td>
+</tr>
+<tr><td>iterations</td>
+<td>integer</td>
+<td>add Netscape loop
+extension to your
+GIF animation</td>
+</tr>
+<tr><td>label</td>
+<td>string</td>
+<td>Append to the image
+label.</td>
+</tr>
+<tr><td>loop</td>
+<td>integer</td>
+<td>add Netscape loop
+extension to your
+GIF animation</td>
+</tr>
+<tr><td>magick</td>
+<td>string</td>
+<td>set the image
+format</td>
+</tr>
+<tr><td>matte</td>
+<td>{True, False}</td>
+<td>True if the image
+has transparency</td>
+</tr>
+<tr><td>mattecolor</td>
+<td>color name</td>
+<td>set the image matte
+color</td>
+</tr>
+<tr><td>map-limit</td>
+<td>integer</td>
+<td>set map resource
+limit in megabytes</td>
+</tr>
+<tr><td>memory-limit</td>
+<td>integer</td>
+<td>set memory resource
+limit in megabytes</td>
+</tr>
+<tr><td>monochrome</td>
+<td>{True, False}</td>
+<td>transform the image
+to black and white</td>
+</tr>
+<tr><td>page</td>
+<td>{ Letter, Tabloid, Ledger, Legal,
+Statement, Executive, A3, A4, A5,
+B4, B5, Folio, Quarto, 10x14} or
+geometry</td>
+<td>preferred size and
+location of an
+image canvas</td>
+</tr>
+<tr><td>pixel[x, y]</td>
+<td>string</td>
+<td>hex value (e.g. #
+ccc) at position (x
+, y)</td>
+</tr>
+<tr><td>pointsize</td>
+<td>integer</td>
+<td>pointsize of the
+Postscript or
+TrueType font</td>
+</tr>
+<tr><td>preview</td>
+<td>{ Rotate, Shear, Roll, Hue,
+Saturation, Brightness, Gamma,
+Spiff, Dull, Grayscale, Quantize,
+Despeckle, ReduceNoise, AddNoise,
+Sharpen, Blur, Threshold,
+EdgeDetect, Spread, Solarize, Shade,
+Raise, Segment, Swirl, Implode,
+Wave, OilPaint, Charcoal,
+JPEG}</td>
+<td>type of preview for
+the Preview image
+format</td>
+</tr>
+<tr><td>quality</td>
+<td>integer</td>
+<td>JPEG/MIFF/PNG
+compression level</td>
+</tr>
+<tr><td>red-primary</td>
+<td>x-value, y-value</td>
+<td>chromaticity red
+primary point (e.g.
+0.64, 0.33)</td>
+</tr>
+<tr><td>rendering-intent</td>
+<td>{Undefined, Saturation, Perceptual,
+Absolute, Relative}</td>
+<td>the type of
+rendering intent</td>
+</tr>
+<tr><td>sampling-factor</td>
+<td>geometry</td>
+<td>horizontal and
+vertical sampling
+factor</td>
+</tr>
+<tr><td>scene</td>
+<td>integer</td>
+<td>image scene number</td>
+</tr>
+<tr><td>subimage</td>
+<td>integer</td>
+<td>subimage of an
+image sequence</td>
+</tr>
+<tr><td>subrange</td>
+<td>integer</td>
+<td>number of images
+relative to the
+base image</td>
+</tr>
+<tr><td>server</td>
+<td>string</td>
+<td>specifies the X
+server to contact</td>
+</tr>
+<tr><td>size</td>
+<td>string</td>
+<td>width and height of
+a raw image</td>
+</tr>
+<tr><td>stroke</td>
+<td>color</td>
+<td>The stroke color
+paints along the
+outline of a shape.</td>
+</tr>
+<tr><td>tile</td>
+<td>string</td>
+<td>tile name</td>
+</tr>
+<tr><td>texture</td>
+<td>string</td>
+<td>name of texture to
+tile onto the image
+background</td>
+</tr>
+<tr><td>type</td>
+<td>{Bilevel, Grayscale, GrayscaleMatte,
+Palette, PaletteMatte, TrueColor,
+TrueColorMatte, ColorSeparation,
+ColorSeparationMatte, Optimize }</td>
+<td>image type</td>
+</tr>
+<tr><td>units</td>
+<td>{ Undefined, PixelsPerInch,
+PixelsPerCentimeters}</td>
+<td>units of image
+resolution</td>
+</tr>
+<tr><td>verbose</td>
+<td>{True, False}</td>
+<td>print detailed
+information about
+the image</td>
+</tr>
+<tr><td>virtual-pixel</td>
+<td>{Constant, Edge, Mirror, Tile}</td>
+<td>the virtual pixel
+method</td>
+</tr>
+<tr><td>white-point</td>
+<td>x-value, y-value</td>
+<td>chromaticity white
+point (e.g. 0.3127,
+0.329)</td>
+</tr>
+</tbody>
+</table>
+<p>Note, that the geometry parameter is a short cut for the width and height
+parameters (e.g. geometry=>'106x80' is equivalent to width=>106, height=>
+80).</p>
+<p>SetAttribute() is an alias for method Set().</p>
+<p>Most of the attributes listed above have an analog in gm convert. See the
+gm documentation for a more detailed description of these attributes.</p>
+</div>
+<div class="section" id="get-an-image-attribute">
+<h1><a class="toc-backref" href="#id11">Get an Image Attribute</a></h1>
+<p>Use method Get() to get an image attribute. For example,</p>
+<pre class="literal-block">
+($a, $b, $c) = $image->Get('colorspace', 'magick', 'adjoin');
+$width = $image->[3]->Get('columns');
+</pre>
+<p>In addition to all the attributes listed in Set an Image Attribute , you
+can get these additional attributes:</p>
+<table border="1" class="docutils">
+<caption>Image Attributes</caption>
+<colgroup>
+<col width="18%" />
+<col width="14%" />
+<col width="68%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Attribute</td>
+<td>Values</td>
+<td>Description</td>
+</tr>
+<tr><td>base-columns</td>
+<td>integer</td>
+<td>base image width (before transformations)</td>
+</tr>
+<tr><td>base-filename</td>
+<td>string</td>
+<td>base image filename (before transformations)</td>
+</tr>
+<tr><td>base-rows</td>
+<td>integer</td>
+<td>base image height (before transformations)</td>
+</tr>
+<tr><td>class</td>
+<td>{Direct,
+Pseudo}</td>
+<td>image class</td>
+</tr>
+<tr><td>colors</td>
+<td>integer</td>
+<td>number of unique colors in the image</td>
+</tr>
+<tr><td>comment</td>
+<td>string</td>
+<td>image comment</td>
+</tr>
+<tr><td>columns</td>
+<td>integer</td>
+<td>image width</td>
+</tr>
+<tr><td>depth</td>
+<td>integer</td>
+<td>image depth</td>
+</tr>
+<tr><td>directory</td>
+<td>string</td>
+<td>tile names from within an image montage</td>
+</tr>
+<tr><td>error</td>
+<td>double</td>
+<td>the mean error per pixel computed with methods
+Compare() or Quantize()</td>
+</tr>
+<tr><td>filesize</td>
+<td>integer</td>
+<td>number of bytes of the image on disk</td>
+</tr>
+<tr><td>format</td>
+<td>string</td>
+<td>get the descriptive image format</td>
+</tr>
+<tr><td>geometry</td>
+<td>string</td>
+<td>image geometry</td>
+</tr>
+<tr><td>height</td>
+<td>integer</td>
+<td>the number of rows or height of an image</td>
+</tr>
+<tr><td>id</td>
+<td>integer</td>
+<td>GraphicsMagick registry id</td>
+</tr>
+<tr><td>label</td>
+<td>string</td>
+<td>image label</td>
+</tr>
+<tr><td>maximum-error</td>
+<td>double</td>
+<td>the normalized max error per pixel computed with
+methods Compare() or Quantize()</td>
+</tr>
+<tr><td>mean-error</td>
+<td>double</td>
+<td>the normalized mean error per pixel computed
+with methods Compare() or Quantize()</td>
+</tr>
+<tr><td>montage</td>
+<td>geometry</td>
+<td>tile size and offset within an image montage</td>
+</tr>
+<tr><td>rows</td>
+<td>integer</td>
+<td>the number of rows or height of an image</td>
+</tr>
+<tr><td>signature</td>
+<td>string</td>
+<td>SHA-256 message digest associated with the image
+pixel stream</td>
+</tr>
+<tr><td>taint</td>
+<td>{True,
+False}</td>
+<td>True if the image has been modified</td>
+</tr>
+<tr><td>width</td>
+<td>integer</td>
+<td>the number of columns or width of an image</td>
+</tr>
+<tr><td>x-resolution</td>
+<td>integer</td>
+<td>x resolution of the image</td>
+</tr>
+<tr><td>y-resolution</td>
+<td>integer</td>
+<td>y resolution of the image</td>
+</tr>
+</tbody>
+</table>
+<p>GetAttribute() is an alias for method Get().</p>
+<p>Most of the attributes listed above have an analog in convert. See the
+documentation for a more detailed description of these attributes.</p>
+</div>
+<div class="section" id="create-an-image-montage">
+<h1><a class="toc-backref" href="#id12">Create an Image Montage</a></h1>
+<p>Use method Montage() to create a composite image by combining several
+separate images. The images are tiled on the composite image with the
+name of the image optionally appearing just below the individual tile.
+For example,</p>
+<pre class="literal-block">
+$image->Montage(geometry=>'160x160', tile=>'2x2', texture=>'granite:');
+</pre>
+<p>And here is a list of Montage() parameters you can set:</p>
+<table border="1" class="docutils">
+<caption>Montage Parameters</caption>
+<colgroup>
+<col width="15%" />
+<col width="52%" />
+<col width="32%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Parameter</td>
+<td>Values</td>
+<td>Description</td>
+</tr>
+<tr><td>background</td>
+<td>color name</td>
+<td>background color name</td>
+</tr>
+<tr><td>borderwidth</td>
+<td>integer</td>
+<td>image border width</td>
+</tr>
+<tr><td>compose</td>
+<td>{Over, In, Out, Atop, Xor, Plus,
+Minus, Add, Subtract, Difference,
+Bumpmap, Copy, Mask, Dissolve, Clear,
+Displace}</td>
+<td>composite operator</td>
+</tr>
+<tr><td>filename</td>
+<td>string</td>
+<td>name of montage image</td>
+</tr>
+<tr><td>fill</td>
+<td>color name</td>
+<td>fill color for
+annotations</td>
+</tr>
+<tr><td>font</td>
+<td>string</td>
+<td>X11 font name</td>
+</tr>
+<tr><td>frame</td>
+<td>geometry</td>
+<td>surround the image with
+an ornamental border</td>
+</tr>
+<tr><td>geometry</td>
+<td>geometry</td>
+<td>preferred tile and
+border size of each
+tile of the composite
+image</td>
+</tr>
+<tr><td>gravity</td>
+<td>{NorthWest, North, NorthEast, West,
+Center, East, SouthWest, South,
+SouthEast}</td>
+<td>direction image
+gravitates to within a
+tile</td>
+</tr>
+<tr><td>ICM</td>
+<td>blob</td>
+<td>color information
+profile</td>
+</tr>
+<tr><td>IPTC</td>
+<td>blob</td>
+<td>newswire information
+profile</td>
+</tr>
+<tr><td>label</td>
+<td>string</td>
+<td>assign a label to an
+image</td>
+</tr>
+<tr><td>mode</td>
+<td>{Frame, Unframe, Concatenate}</td>
+<td>thumbnail framing
+options</td>
+</tr>
+<tr><td>pointsize</td>
+<td>integer</td>
+<td>pointsize of the
+Postscript or TrueType
+font</td>
+</tr>
+<tr><td>shadow</td>
+<td>{True, False}</td>
+<td>add a shadow beneath a
+tile to simulate depth</td>
+</tr>
+<tr><td>stroke</td>
+<td>color name</td>
+<td>stroke color for
+annotations</td>
+</tr>
+<tr><td>texture</td>
+<td>string</td>
+<td>name of texture to tile
+onto the image
+background</td>
+</tr>
+<tr><td>tile</td>
+<td>geometry</td>
+<td>number of tiles per row
+and column</td>
+</tr>
+<tr><td>title</td>
+<td>string</td>
+<td>assign a title to the
+image montage</td>
+</tr>
+<tr><td>transparent</td>
+<td>string</td>
+<td>make this color
+transparent within the
+image</td>
+</tr>
+</tbody>
+</table>
+<p>Note, that the geometry parameter is a short cut for the width and height
+parameters (e.g. geometry=>'106x80' is equivalent to width=>106, height=>
+80).</p>
+<p>MontageImage() is an alias for method Montage().</p>
+<p>Most of the attributes listed above have an analog in montage. See the
+documentation for a more detailed description of these attributes.</p>
+</div>
+<div class="section" id="working-with-blobs">
+<h1><a class="toc-backref" href="#id13">Working with Blobs</a></h1>
+<p>A blob contains data that directly represent a particular image format in
+memory instead of on disk. PerlMagick supports blobs in any of these
+image formats and provides methods to convert a blob to or from a
+particular image format.</p>
+<table border="1" class="docutils">
+<caption>Blob Methods</caption>
+<colgroup>
+<col width="16%" />
+<col width="14%" />
+<col width="34%" />
+<col width="36%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Method</td>
+<td>Parameters</td>
+<td>Return Value</td>
+<td>Description</td>
+</tr>
+<tr><td>ImageToBlob</td>
+<td>any image
+attribute</td>
+<td>an array of image data
+in the respective image
+format</td>
+<td>convert an image or image
+sequence to an array of
+blobs</td>
+</tr>
+<tr><td>BlobToImage</td>
+<td>one or
+more blobs</td>
+<td>the number of blobs
+converted to an image</td>
+<td>convert one or more blobs
+to an image</td>
+</tr>
+</tbody>
+</table>
+<p>ImageToBlob() returns the image data in their respective formats. You can
+then print it, save it to an ODBC database, write it to a file, or pipe
+it to a display program:</p>
+<pre class="literal-block">
+@blobs = $image->ImageToBlob();
+open(DISPLAY,"| display -") || die;
+binmode DISPLAY;
+print DISPLAY $blobs[0];
+close DISPLAY;
+</pre>
+<p>Method BlobToImage() returns an image or image sequence converted from
+the supplied blob:</p>
+<pre class="literal-block">
+@blob=$db->GetImage();
+$image=Graphics::Magick->new(magick=>'jpg');
+$image->BlobToImage(@blob);
+</pre>
+</div>
+<div class="section" id="miscellaneous-methods">
+<h1><a class="toc-backref" href="#id14">Miscellaneous Methods</a></h1>
+<p>The Append() method append a set of images. For example,</p>
+<pre class="literal-block">
+$p = $image->Append(stack=>{true,false});
+</pre>
+<p>appends all the images associated with object $image. By default, images
+are stacked left-to-right. Set stack to True to stack them top-to-bottom.</p>
+<p>The Average() method averages a set of images. For example,</p>
+<pre class="literal-block">
+$p = $image->Average();
+</pre>
+<p>averages all the images associated with object $image.</p>
+<p>The Clone() method copies a set of images. For example,</p>
+<pre class="literal-block">
+$p = $image->Clone();
+</pre>
+<p>copies all the images from object $q to $p. You can use this method for
+single or multi-image sequences.</p>
+<p>The Morph() method morphs a set of images. Both the image pixels and size
+are linearly interpolated to give the appearance of a meta-morphosis from
+one image to the next:</p>
+<pre class="literal-block">
+$p = $image->Morph(frames=>integer);
+</pre>
+<p>where frames is the number of in-between images to generate. The default
+is 1.</p>
+<p>Mosaic() creates an mosaic from an image sequence.</p>
+<p>Method Mogrify() is a single entry point for the image manipulation
+methods (Manipulate an Image). The parameters are the name of a method
+followed by any parameters the method may require. For example, these
+calls are equivalent:</p>
+<pre class="literal-block">
+$image->Crop('340x256+0+0');
+$image->Mogrify('crop', '340x256+0+0');
+</pre>
+<p>Method MogrifyRegion() applies a transform to a region of the image. It
+is similar to Mogrify() but begins with the region geometry. For example,
+suppose you want to brighten a 100x100 region of your image at location
+(40, 50):</p>
+<pre class="literal-block">
+$image->MogrifyRegion('100x100+40+50', 'modulate', brightness=>50);
+</pre>
+<p>Ping() is a convenience method that returns information about an image
+without having to read the image into memory. It returns the width,
+height, file size in bytes, and the file format of the image. You can
+specify more than one filename but only one filehandle:</p>
+<pre class="literal-block">
+($width, $height, $size, $format) = $image->Ping('logo.png');
+($width, $height, $size, $format) = $image->Ping(file=>\*IMAGE);
+($width, $height, $size, $format) = $image->Ping(blob=>@blob);
+</pre>
+<p>This is a more efficient and less memory intensive way to query if an
+image exists and what its characteristics are.</p>
+<p>To have full control over text positioning you need font metric
+information. Use</p>
+<pre class="literal-block">
+($x_ppem, $y_ppem, $ascender, $descender, $width, $height, $max_advance) =
+$image->QueryFontMetrics(parameters);
+
+Where parameters is any parameter of the Annotate method. The
+'text' parameter must be specified since there can be no default for
+the text to render. The return values are
+
+* character width
+* character height
+* ascender
+* descender
+* text width
+* text height
+* maximum horizontal advance
+</pre>
+<p>Call QueryColor() with no parameters to return a list of known colors
+names or specify one or more color names to get these attributes: red,
+green, blue, and opacity value.</p>
+<pre class="literal-block">
+@colors = $image->QueryColor();
+($red, $green, $blue, $opacity) = $image->QueryColor('cyan');
+($red, $green, $blue, $opacity) = $image->QueryColor('#716bae');
+</pre>
+<p>QueryColorname() accepts a color value and returns its respective name or
+hex value;</p>
+<pre class="literal-block">
+$name = $image->QueryColorname('rgba(80,60,0,0)');
+</pre>
+<p>Call QueryFont() with no parameters to return a list of known fonts or
+specify one or more font names to get these attributes: font name,
+description, family, style, stretch, weight, encoding, foundry, format,
+metrics, and glyphs values.</p>
+<pre class="literal-block">
+@fonts = $image->QueryFont();
+$weight = ($image->QueryFont('Helvetica'))[5];
+</pre>
+<p>Call QueryFormat() with no parameters to return a list of known image
+formats or specify one or more format names to get these attributes:
+adjoin, blob support, raw, decoder, encoder, description, and module.</p>
+<pre class="literal-block">
+@formats = $image->QueryFormat();
+($adjoin, $blob_support, $raw, $decoder, $encoder, $description, $module) = $image->QueryFormat('gif');
+</pre>
+<p>Use RemoteCommand() to send a command to an already running display or
+animate application. The only parameter is the name of the image file to
+display or animate.</p>
+<p>Finally, the Transform() method accepts a fully-qualified geometry
+specification for cropping or resizing one or more images. For example,</p>
+<pre class="literal-block">
+$p = $image->Transform(crop=>'100x100');
+</pre>
+<p>You can optionally add Image to any method name above. For example,
+PingImage() is an alias for method Ping().</p>
+</div>
+<div class="section" id="handling-errors">
+<h1><a class="toc-backref" href="#id15">Handling Errors</a></h1>
+<p>All PerlMagick methods return an undefined string context upon success. If
+any problems occur, the error is returned as a string with an embedded
+numeric status code. A status code less than 400 is a warning. This means
+that the operation did not complete but was recoverable to some degree. A
+numeric code greater or equal to 400 is an error and indicates the
+operation failed completely. Here is how errors are returned for the
+different methods:</p>
+<blockquote>
+<ul>
+<li><p class="first">Methods which return a number (e.g. Read(), Write()):</p>
+<pre class="literal-block">
+$status = $image->Read(...);
+warn "$status" if "$status"; # print the error message
+$status =~ /(\d+)/;
+print $1; # print the error number
+print 0+$status; # print the number of images read
+</pre>
+</li>
+<li><p class="first">Methods which operate on an image (e.g. Resize(), Crop()):</p>
+<pre class="literal-block">
+$status = $image->Crop(...);
+warn "$status" if "$status"; # print the error message
+$status =~ /(\d+)/;
+print $1; # print the error number
+</pre>
+</li>
+<li><p class="first">Methods which return images (Average(), Montage(), Clone()) should be
+checked for errors this way:</p>
+<pre class="literal-block">
+$status = $image->Montage(...);
+warn "$status" if !ref($status); # print the error message
+$status =~ /(\d+)/;
+print $1; # print the error number
+</pre>
+</li>
+</ul>
+</blockquote>
+<p>Here is an example error message:</p>
+<pre class="literal-block">
+Error 400: Memory allocation failed
+</pre>
+<p>Below is a list of error and warning codes:</p>
+<table border="1" class="docutils">
+<caption>Error and Warning Codes</caption>
+<colgroup>
+<col width="6%" />
+<col width="31%" />
+<col width="63%" />
+</colgroup>
+<tbody valign="top">
+<tr><td>Code</td>
+<td>Mnemonic</td>
+<td>Description</td>
+</tr>
+<tr><td>0</td>
+<td>Success</td>
+<td>method completed without an error or warning</td>
+</tr>
+<tr><td>300</td>
+<td>ResourceLimitWarning</td>
+<td>a program resource is exhausted (e.g. not
+enough memory)</td>
+</tr>
+<tr><td>305</td>
+<td>TypeWarning</td>
+<td>A font is unavailable; a substitution may
+have occurred</td>
+</tr>
+<tr><td>310</td>
+<td>OptionWarning</td>
+<td>a command-line option was malformed</td>
+</tr>
+<tr><td>315</td>
+<td>DelegateWarning</td>
+<td>an GraphicsMagick delegate returned a warning</td>
+</tr>
+<tr><td>320</td>
+<td>MissingDelegateWarning</td>
+<td>the image type can not be read or written
+because the appropriate Delegate is missing</td>
+</tr>
+<tr><td>325</td>
+<td>CorruptImageWarning</td>
+<td>the image file may be corrupt</td>
+</tr>
+<tr><td>330</td>
+<td>FileOpenWarning</td>
+<td>the image file could not be opened</td>
+</tr>
+<tr><td>335</td>
+<td>BlobWarning</td>
+<td>a binary large object could not be allocated</td>
+</tr>
+<tr><td>340</td>
+<td>StreamWarning</td>
+<td>there was a problem reading or writing from a
+stream</td>
+</tr>
+<tr><td>345</td>
+<td>CacheWarning</td>
+<td>pixels could not be saved to the pixel cache</td>
+</tr>
+<tr><td>350</td>
+<td>CoderWarning</td>
+<td>there was a problem with an image coder</td>
+</tr>
+<tr><td>355</td>
+<td>ModuleWarning</td>
+<td>there was a problem with an image module</td>
+</tr>
+<tr><td>360</td>
+<td>DrawWarning</td>
+<td>a drawing operation failed</td>
+</tr>
+<tr><td>365</td>
+<td>ImageWarning</td>
+<td>the operation could not complete due to an
+incompatible image</td>
+</tr>
+<tr><td>380</td>
+<td>XServerWarning</td>
+<td>an X resource is unavailable</td>
+</tr>
+<tr><td>385</td>
+<td>MonitorWarning</td>
+<td>there was a problem with prgress monitor</td>
+</tr>
+<tr><td>390</td>
+<td>RegistryWarning</td>
+<td>there was a problem getting or setting the
+registry</td>
+</tr>
+<tr><td>395</td>
+<td>ConfigureWarning</td>
+<td>there was a problem getting a configuration
+file</td>
+</tr>
+<tr><td>400</td>
+<td>ResourceLimitError</td>
+<td>a program resource is exhausted (e.g. not
+enough memory)</td>
+</tr>
+<tr><td>405</td>
+<td>TypeError</td>
+<td>A font is unavailable; a substitution may
+have occurred</td>
+</tr>
+<tr><td>410</td>
+<td>OptionError</td>
+<td>a command-line option was malformed</td>
+</tr>
+<tr><td>415</td>
+<td>DelegateError</td>
+<td>an GraphicsMagick delegate returned a warning</td>
+</tr>
+<tr><td>420</td>
+<td>MissingDelegateError</td>
+<td>the image type can not be read or written
+because the appropriate Delegate is missing</td>
+</tr>
+<tr><td>425</td>
+<td>CorruptImageError</td>
+<td>the image file may be corrupt</td>
+</tr>
+<tr><td>430</td>
+<td>FileOpenError</td>
+<td>the image file could not be opened</td>
+</tr>
+<tr><td>435</td>
+<td>BlobError</td>
+<td>a binary large object could not be allocated</td>
+</tr>
+<tr><td>440</td>
+<td>StreamError</td>
+<td>there was a problem reading or writing from a
+stream</td>
+</tr>
+<tr><td>445</td>
+<td>CacheError</td>
+<td>pixels could not be saved to the pixel cache</td>
+</tr>
+<tr><td>450</td>
+<td>CoderError</td>
+<td>there was a problem with an image coder</td>
+</tr>
+<tr><td>455</td>
+<td>ModuleError</td>
+<td>there was a problem with an image module</td>
+</tr>
+<tr><td>460</td>
+<td>DrawError</td>
+<td>a drawing operation failed</td>
+</tr>
+<tr><td>465</td>
+<td>ImageError</td>
+<td>the operation could not complete due to an
+incompatible image</td>
+</tr>
+<tr><td>480</td>
+<td>XServerError</td>
+<td>an X resource is unavailable</td>
+</tr>
+<tr><td>480</td>
+<td>MonitorError</td>
+<td>there was a progress monitor error</td>
+</tr>
+<tr><td>490</td>
+<td>RegistryError</td>
+<td>there was a problem getting or setting the
+registry</td>
+</tr>
+<tr><td>495</td>
+<td>ConfigureError</td>
+<td>there was a problem getting a configuration
+file</td>
+</tr>
+</tbody>
+</table>
+<p>The following illustrates how you can use a numeric status code:</p>
+<pre class="literal-block">
+$status = $image->Read('rose.png');
+$status =~ /(\d+)/;
+die "unable to continue" if ($1 == ResourceLimitError);
+</pre>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</div>
+</body>
+</html>
$status = $image->Read('rose.png');
$status =~ /(\d+)/;
die "unable to continue" if ($1 == ResourceLimitError);
-
-
--------------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Development Process</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-development-process">
final release.</p>
<p>Exit Criteria: None</p>
</blockquote>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Development Process</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-development-process">
+<h1 class="title">GraphicsMagick Development Process</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>In order to ensure an orderly development process, and assure the highest
+quality releases, a development process has been established for
+GraphicsMagick.</p>
+<div class="section" id="phases-of-development">
+<h1>Phases of Development</h1>
+<p>Four major development phases have been identified. These are the
+feature development phase, snapshot phase, beta phase, and release
+phase. The phases used depend on the nature of preceding development.
+The Beta phase is usually skipped. The descriptions of these phases
+are as follows:</p>
+<div class="section" id="feature-development-phase">
+<h2>Feature Development Phase</h2>
+<blockquote>
+<p>The feature development phase is a time of rapid development and
+innovation. Work is normally done on Mercurial 'tip'. During the
+feature development phase, Mercurial is the only way to access the
+work in progress. Before updates are committed to Mercurial, they
+should be proven to compile on at least one architecture and pass
+the test suite ('make distcheck').</p>
+<p>Entry Criteria: There is a plan for feature development.</p>
+<p>Exit Criteria: Test suite passes on at least one machine.</p>
+</blockquote>
+</div>
+<div class="section" id="snapshot-phase">
+<h2>Snapshot Phase</h2>
+<blockquote>
+<p>The snapshot phase is entered when it is decided that the work is
+stable enough for non-developers to test. API and user interfaces
+should be stable before the snapshot phase begins in order to avoid
+confusion. Snapshot development is done on Mercurial 'tip'. Snapshot
+packages are identified by the date of the snapshot, and no Mercurial
+branching or tagging is performed to support the snapshot.</p>
+<p>Entry Criteria: Interfaces are stable, and code compiles and runs on
+multiple architectures.</p>
+<p>Exit Criteria: Code is release quality. The test suite must show
+100% completion for Q:8 and Q:16 quantum depths on at least three
+operating environments.</p>
+</blockquote>
+</div>
+<div class="section" id="beta-phase">
+<h2>Beta Phase</h2>
+<blockquote>
+<p>The Beta phase (usually only occuring at the beginning of a major
+release cycle) is entered when the work is feature complete, the
+package passes all tests, and it is considered time for versioned
+releases. As the first step of entering the beta phase, a release
+branch is created off of the trunk to support change sets for the
+release. The purpose of the beta phase is to wring out any remaining
+bugs prior to release. When a beta package is prepared, a release
+tag is applied to the associated release branch in Mercurial.</p>
+<p>Entry Criteria: Code is release quality.. The test suite must show
+100% completion for Q:8 and Q:16 quantum depths on at least three
+operating environments.</p>
+<p>Exit Criteria: The test suite must show 100% completion for Q:8, Q:16,
+and Q:32 quantum depths on at least three operating environments. The
+current beta package is determined to be sufficiently flawless for a
+final release.</p>
+</blockquote>
+</div>
+<div class="section" id="release-phase">
+<h2>Release Phase</h2>
+<blockquote>
+<p>The release phase is entered when the most recent Beta (or snapshot)
+is considered to be of acceptable quality for a release or bug-fixes
+have been prepared based on a previous release. At this time, a
+formal release tag is applied to the release branch, and release
+packages are created. Once a release tag has been applied to a
+release branch, that release branch is considered to be in release
+state and may only be used to prepare additional releases intended
+to correct bugs found in preceding releases. The initial release on
+a release branch has a two-digit (i.e. X.X) release
+designation. Bug-fix releases have a three-digit (i.e. X.X.X)
+release designation. A release designation may only be used once. If
+a problem is discovered with the release package, a new release
+number is assigned to support the corrected release package.</p>
+<p>Entry Criteria: The test suite must show 100% completion for Q:8, Q:16,
+and Q:32 quantum depths on at least three operating environments. The
+current beta package is determined to be sufficiently flawless for a
+final release.</p>
+<p>Exit Criteria: None</p>
+</blockquote>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</div>
+</div>
+</body>
+</html>
final release.
Exit Criteria: None
-
---------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Programming Interfaces</title>
<meta content="GraphicsMagick is a robust collection of tools and libraries to read, write, and manipulate an image in any of the more popular image formats including GIF, JPEG, PNG, PDF, and Photo CD. With GraphicsMagick you can create GIFs dynamically making it suitable for Web applications. You can also resize, rotate, sharpen, color reduce, or add special effects to an image and save your completed work in the same or differing image format. " name="description" />
<meta content="GraphicsMagick, Image Magick, Image Magic, PerlMagick, Perl Magick, Perl Magic, image processing, software development, image, software, Magick++" name="keywords" />
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-programming-interfaces">
</table>
<p><em>Some of these languages and scripting environments are supported by the
GraphicsMagick Group while others are developed and supported by third parties.</em></p>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Programming Interfaces</title>
+<meta content="GraphicsMagick is a robust collection of tools and libraries to read, write, and manipulate an image in any of the more popular image formats including GIF, JPEG, PNG, PDF, and Photo CD. With GraphicsMagick you can create GIFs dynamically making it suitable for Web applications. You can also resize, rotate, sharpen, color reduce, or add special effects to an image and save your completed work in the same or differing image format. " name="description" />
+<meta content="GraphicsMagick, Image Magick, Image Magic, PerlMagick, Perl Magick, Perl Magic, image processing, software development, image, software, Magick++" name="keywords" />
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-programming-interfaces">
+<h1 class="title">GraphicsMagick Programming Interfaces</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>GraphicsMagick capabilities may be accessed from many languages and scripting
+environments via programming APIs as shown in the following table:</p>
+<table border="1" class="docutils">
+<colgroup>
+<col width="23%" />
+<col width="77%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Language</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td><a class="reference external" href="api/api.html">C Core</a></td>
+<td>C language API for the lowest-level core programming interface.</td>
+</tr>
+<tr><td><a class="reference external" href="wand/wand.html">C Wand</a></td>
+<td>C language API for the mid-level Wand API programming interface.</td>
+</tr>
+<tr><td><a class="reference external" href="Magick++/index.html">C++</a></td>
+<td>Magick++ provides an abstract object-oriented C++ interface.</td>
+</tr>
+<tr><td><a class="reference external" href="https://github.com/arcapos/luagraphicsmagick">Lua</a></td>
+<td>GraphicsMagick for Lua interfaces to GraphicsMagick's Wand API.</td>
+</tr>
+<tr><td><a class="reference external" href="http://aheckmann.github.com/gm/">node.js</a></td>
+<td>Graphicsmagick for node.js provides server-side support for
+Javascript programming with node.js.</td>
+</tr>
+<tr><td><a class="reference external" href="http://pecl.php.net/package/gmagick">PHP</a></td>
+<td>Gmagick provides a small and fast extension for PHP.</td>
+</tr>
+<tr><td><a class="reference external" href="perl.html">Perl</a></td>
+<td>PerlMagick provides an object-oriented Perl interface.</td>
+</tr>
+<tr><td><a class="reference external" href="https://github.com/hhatto/pgmagick">Python</a></td>
+<td>PgMagick provides the power and ease of the C++ API, but in Python.</td>
+</tr>
+<tr><td><a class="reference external" href="https://github.com/RedisLabsModules/graphicsmagick">Redis Module</a></td>
+<td>Image processing via redis APIs</td>
+</tr>
+<tr><td><a class="reference external" href="http://rmagick.rubyforge.org/">Ruby (RMagick)</a></td>
+<td>RMagick provides a native Ruby language extension</td>
+</tr>
+<tr><td><a class="reference external" href="https://github.com/minimagick/minimagick">Ruby (MiniMagick)</a></td>
+<td>MiniMagick provides a Ruby language extension via a command line
+wrapper.</td>
+</tr>
+<tr><td><a class="reference external" href="http://www.graphicsmagick.org/TclMagick/doc/">Tcl/Tk</a></td>
+<td>TclMagick provides a scripting environment based on Tcl or Tcl/Tk.</td>
+</tr>
+<tr><td><a class="reference external" href="https://graphicsmagick.codeplex.com/">Windows .NET</a></td>
+<td>GraphicsMagick.NET provides a Windows .NET programming interface,
+allowing use of GraphicsMagick features via a stand-alone package.</td>
+</tr>
+<tr><td><a class="reference external" href="ImageMagickObject.html">Windows OLE</a></td>
+<td>The ImageMagickObject OLE control supports utility-style access via
+a COM+ object.</td>
+</tr>
+</tbody>
+</table>
+<p><em>Some of these languages and scripting environments are supported by the
+GraphicsMagick Group while others are developed and supported by third parties.</em></p>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</body>
+</html>
*Some of these languages and scripting environments are supported by the
GraphicsMagick Group while others are developed and supported by third parties.*
-
---------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Project Information</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-project-information">
<p><a class="reference external" href="authors.html">Authors</a> - Read about those who provided source code or algorithms.</p>
<p><a class="reference external" href="thanks.html">Thanks</a> - Read about those who helped in ways other than contributing code.</p>
<p><a class="reference external" href="Hg.html">Source Control</a> - Source control is important. We use Mercurial.</p>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2012 - 2020</p>
+</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Project Information</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-project-information">
+<h1 class="title">GraphicsMagick Project Information</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p><a class="reference external" href="security.html">Security</a> - GraphicsMagick security (and how to report issues).</p>
+<p><a class="reference external" href="Changes.html">Change Logs</a> - Read the detailed change logs to see what changed.</p>
+<p><a class="reference external" href="Copyright.html">License</a> - Copyrights and usage terms for GraphicsMagick.</p>
+<p><a class="reference external" href="contribute.html">Contribute</a> - Contribute your work to the project.</p>
+<p><a class="reference external" href="https://sourceforge.net/p/graphicsmagick/_list/tickets">Bugs</a> - Report a bug via the tracker at SourceForge.</p>
+<p><a class="reference external" href="process.html">Development Process</a> - Read about the project development process.</p>
+<p><a class="reference external" href="download.html">Download</a> - Download the source code or binaries.</p>
+<p><a class="reference external" href="FAQ.html">FAQ</a> - Answers for the questions asked the most often.</p>
+<p><a class="reference external" href="README.html">Install</a> - Read about how to install the software.</p>
+<p><a class="reference external" href="links.html">Links</a> - Some links we find useful.</p>
+<p><a class="reference external" href="https://sourceforge.net/p/graphicsmagick/mailman/">Mailing Lists</a> - Participate in discussions on our mailing lists.</p>
+<p><a class="reference external" href="mission.html">Mission</a> - Every project needs a mission statement.</p>
+<p><a class="reference external" href="NEWS.html">News</a> - Read the project news and release notes.</p>
+<p><a class="reference external" href="authors.html">Authors</a> - Read about those who provided source code or algorithms.</p>
+<p><a class="reference external" href="thanks.html">Thanks</a> - Read about those who helped in ways other than contributing code.</p>
+<p><a class="reference external" href="Hg.html">Source Control</a> - Source control is important. We use Mercurial.</p>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2012 - 2020</p>
+</div>
+</body>
+</html>
`Thanks`_ - Read about those who helped in ways other than contributing code.
`Source Control`_ - Source control is important. We use Mercurial.
-
---------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2012 - 2020
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Color Quantization</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-color-quantization">
<p>Paul Raveling, USC Information Sciences Institute, for the original idea
of using space subdivision for the color reduction algorithm. With Paul's
permission, this document is an adaptation from a document he wrote.</p>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Color Quantization</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-color-quantization">
+<h1 class="title">GraphicsMagick Color Quantization</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<blockquote>
+This document describes how GraphicsMagick performs color
+reduction on an image. To fully understand this document,
+you should have a knowledge of basic imaging techniques and
+the tree data structure and terminology.</blockquote>
+<div class="section" id="description">
+<h1>Description</h1>
+<p>For purposes of color allocation, an image is a set of n pixels, where
+each pixel is a point in RGB space. RGB space is a 3-dimensional vector
+space, and each pixel, p(i), is defined by an ordered triple of red,
+green, and blue coordinates, (r(i),g(i),b(i)).</p>
+<p>Each primary color component (red, green, or blue) represents an
+intensity which varies linearly from 0 to a maximum value, Cmax, which
+corresponds to full saturation of that color. Color allocation is defined
+over a domain consisting of the cube in RGB space with opposite vertices
+at (0,0,0) and (Cmax ,Cmax,Cmax). GraphicsMagick requires Cmax= 255.</p>
+<p>The algorithm maps this domain onto a tree in which each node represents
+a cube within that domain. In the following discussion, these cubes are
+defined by the coordinate of two opposite vertices: The vertex nearest
+the origin in RGB space and the vertex farthest from the origin.</p>
+<p>The tree's root node represents the the entire domain, (0,0,0) through
+(Cmax, Cmax,Cmax). Each lower level in the tree is generated by
+subdividing one node's cube into eight smaller cubes of equal size. This
+corresponds to bisecting the parent cube with planes passing through the
+midpoints of each edge.</p>
+<p>The basic algorithm operates in three phases:</p>
+<blockquote>
+<ul class="simple">
+<li>Classification,</li>
+<li>Reduction, and</li>
+<li>Assignment.</li>
+</ul>
+</blockquote>
+<p>Classification builds a color description tree for the image. Reduction
+collapses the tree until the number it represents, at most, is the number
+of colors desired in the output image. Assignment defines the output
+image's color map and sets each pixel's color by reclassification in the
+reduced tree. Our goal is to minimize the numerical discrepancies between
+the original colors and quantized colors. To learn more about
+quantization error, see Measuring Color Reduction Error later in this
+document.</p>
+<p>Classification begins by initializing a color description tree of
+sufficient depth to represent each possible input color in a leaf.
+However, it is impractical to generate a fully-formed color description
+tree in the classification phase for realistic values of Cmax. If color
+components in the input image are quantized to k-bit precision, so that
+Cmax = 2^k-1, the tree would need k levels below the root node to allow
+representing each possible input color in a leaf. This becomes
+prohibitive because the tree's:</p>
+<pre class="literal-block">
+total number of nodes = 1+Sum(8^i), i=1,k
+
+For k=8,
+Number of nodes= 1 + (8^1+8^2+....+8^8)
+8^8 - 1
+= 1 + 8.-----------
+8 - 1
+= 19,173,961
+</pre>
+<p>Therefore, to avoid building a fully populated tree, GraphicsMagick:</p>
+<ol class="arabic simple">
+<li>Initializes data structures for nodes only as they are needed;</li>
+<li>Chooses a maximum depth for the tree as a function of the desired
+number of colors in the output image (currently based-two logarithm
+of Cmax).</li>
+</ol>
+<p>For Cmax=255,</p>
+<pre class="literal-block">
+Maximum tree depth = log (256)
+2
+
+= log (256) / log (2)
+e e
+
+= 8
+</pre>
+<p>A tree of this depth generally allows the best representation of the
+source image with the fastest computational speed and the least amount of
+memory. However, the default depth is inappropriate for some images.
+Therefore, the caller can request a specific tree depth.</p>
+<p>For each pixel in the input image, classification scans downward from the
+root of the color description tree. At each level of the tree, it
+identifies the single node which represents a cube in RGB space
+containing the pixel's color. It updates the following data for each such
+node:</p>
+<blockquote>
+<dl class="docutils">
+<dt>n1:</dt>
+<dd>Number of pixels whose color is contained in the RGB cube which
+this node represents;</dd>
+<dt>n2:</dt>
+<dd>Number of pixels whose color is not represented in a node at lower
+depth in the tree; initially, n2=0 for all nodes except leaves of
+the tree.</dd>
+<dt>Sr,Sg,Sb:</dt>
+<dd>Sums of the red, green, and blue component values for all pixels
+not classified at a lower depth. The combination of these sums and
+n2 will ultimately characterize the mean color of a set of pixels
+represented by this node.</dd>
+<dt>E:</dt>
+<dd>The distance squared in RGB space between each pixel contained
+within a node and the nodes' center. This represents the
+quantization error for a node.</dd>
+</dl>
+</blockquote>
+<p>Reduction repeatedly prunes the tree until the number of nodes with n2 >
+0 is less than or equal to the maximum number of colors allowed in the
+output image. On any given iteration over the tree, it selects those
+nodes whose E value is minimal for pruning and merges their color
+statistics upward. It uses a pruning threshold, Ep, to govern node
+selection as follows:</p>
+<pre class="literal-block">
+Ep = 0
+while number of nodes with (n2 > 0) > required maximum number of colors
+prune all nodes such that E <= Ep
+Set Ep to minimum E in remaining nodes
+</pre>
+<p>This has the effect of minimizing any quantization error when merging two
+nodes together.</p>
+<p>When a node to be pruned has offspring, the pruning procedure invokes
+itself recursively in order to prune the tree from the leaves upward. The
+values of n2 ,Sr, Sg and Sb in a node being pruned are always added to
+the corresponding data in that node's parent. This retains the pruned
+node's color characteristics for later averaging.</p>
+<p>For each node, n2 pixels exist for which that node represents the
+smallest volume in RGB space containing those pixel's colors. When n2 > 0
+the node will uniquely define a color in the output image. At the
+beginning of reduction, n2 = 0 for all nodes except the leaves of the
+tree which represent colors present in the input image.</p>
+<p>The other pixel count, n1, indicates the total number of colors within
+the cubic volume which the node represents. This includes n1 - n2 pixels
+whose colors should be defined by nodes at a lower level in the tree.</p>
+<p>Assignment generates the output image from the pruned tree. The output
+image consists of two parts:</p>
+<ol class="arabic simple">
+<li>A color map, which is an array of color descriptions (RGB triples)
+for each color present in the output image.</li>
+<li>A pixel array, which represents each pixel as an index into the
+color map array.</li>
+</ol>
+<p>First, the assignment phase makes one pass over the pruned color
+description tree to establish the image's color map. For each node with
+n2 > 0, it divides Sr, Sg, and Sb by n2. This produces the mean color of
+all pixels that classify no lower than this node. Each of these colors
+becomes an entry in the color map.</p>
+<p>Finally, the assignment phase reclassifies each pixel in the pruned tree
+to identify the deepest node containing the pixel's color. The pixel's
+value in the pixel array becomes the index of this node's mean color in
+the color map.</p>
+<p>Empirical evidence suggests that the distances in color spaces such as
+YUV, or YIQ correspond to perceptual color differences more closely than
+do distances in RGB space. These color spaces may give better results
+when color reducing an image. Here the algorithm is as described except
+each pixel is a point in the alternate color space. For convenience, the
+color components are normalized to the range 0 to a maximum value, Cmax.
+The color reduction can then proceed as described.</p>
+</div>
+<div class="section" id="measuring-color-reduction-error">
+<h1>Measuring Color Reduction Error</h1>
+<p>Depending on the image, the color reduction error may be obvious or
+invisible. Images with high spatial frequencies (such as hair or grass)
+will show error much less than pictures with large smoothly shaded areas
+(such as faces). This is because the high-frequency contour edges
+introduced by the color reduction process are masked by the high
+frequencies in the image.</p>
+<p>To measure the difference between the original and color reduced images
+(the total color reduction error), GraphicsMagick sums over all pixels in
+an image the distance squared in RGB space between each original pixel
+value and its color reduced value. GraphicsMagick prints several error
+measurements including the mean error per pixel, the normalized mean
+error, and the normalized maximum error.</p>
+<p>The normalized error measurement can be used to compare images. In
+general, the closer the mean error is to zero the more the quantized
+image resembles the source image. Ideally, the error should be
+perceptually-based, since the human eye is the final judge of
+quantization quality.</p>
+<p>These errors are measured and printed when -verbose and -colorsare
+specified on the command line:</p>
+<blockquote>
+<dl class="docutils">
+<dt>mean error per pixel:</dt>
+<dd>is the mean error for any single pixel in the image.</dd>
+<dt>normalized mean square error:</dt>
+<dd>is the normalized mean square quantization error for any single
+pixel in the image.
+This distance measure is normalized to a range between 0 and 1. It
+is independent of the range of red, green, and blue values in the
+image.</dd>
+<dt>normalized maximum square error:</dt>
+<dd>is the largest normalized square quantization error for any single
+pixel in the image.
+This distance measure is normalized to a range between and blue
+values in the image.</dd>
+</dl>
+</blockquote>
+</div>
+<div class="section" id="authors">
+<h1>Authors</h1>
+<p>John Cristy, <a class="reference external" href="mailto:magick%40imagemagick.org">magick<span>@</span>imagemagick<span>.</span>org</a>, ImageMagick Studio.</p>
+</div>
+<div class="section" id="acknowledgements">
+<h1>Acknowledgements</h1>
+<p>Paul Raveling, USC Information Sciences Institute, for the original idea
+of using space subdivision for the color reduction algorithm. With Paul's
+permission, this document is an adaptation from a document he wrote.</p>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</div>
+</body>
+</html>
Paul Raveling, USC Information Sciences Institute, for the original idea
of using space subdivision for the color reduction algorithm. With Paul's
permission, this document is an adaptation from a document he wrote.
-
--------------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Reference Information</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-reference-information">
<p><a class="reference external" href="formats.html">Formats</a> - File formats supported by GraphicsMagick.</p>
<p><a class="reference external" href="miff.html">MIFF</a> - Magick Image File Format.</p>
<p><a class="reference external" href="links.html">Links</a> - Some links we find useful.</p>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2012 - 2020</p>
+</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Reference Information</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-reference-information">
+<h1 class="title">GraphicsMagick Reference Information</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p><a class="reference external" href="color.html">Colors</a> - Reference of colors known by GraphicsMagick.</p>
+<p><a class="reference external" href="FAQ.html">FAQ</a> - Answers for the questions asked the most often.</p>
+<p><a class="reference external" href="formats.html">Formats</a> - File formats supported by GraphicsMagick.</p>
+<p><a class="reference external" href="miff.html">MIFF</a> - Magick Image File Format.</p>
+<p><a class="reference external" href="links.html">Links</a> - Some links we find useful.</p>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2012 - 2020</p>
+</div>
+</body>
+</html>
MIFF_ - Magick Image File Format.
Links_ - Some links we find useful.
-
---------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2012 - 2020
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Security</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-security">
=UAq2
-----END PGP PUBLIC KEY BLOCK-----
</pre>
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Security</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-security">
+<h1 class="title">GraphicsMagick Security</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<div class="section" id="background">
+<h1>Background</h1>
+<p>Although GraphicsMagick is image processing software, security is a
+very important consideration for GraphicsMagick. GraphicsMagick may
+be used to open files and URLs produced by an untrusted party. Given
+a suitable weakness (which we make every effort to prevent), an
+intentionally constructed file might be able to cause the software to
+crash, leak memory, request huge amounts of memory, run forever, or in
+the worst case execute arbitrary code, including shell code.
+GraphicsMagick is very powerful and complex software supporting many
+capabilities and so untrusted parties should never be allowed to
+submit arbitrary requests into it.</p>
+<p>GraphicsMagick includes the ability to access arbitrary http and ftp
+URLs as well as local image, font, and SVG files. The SVG renderer
+supports read access to http and ftp URLs as well as local files
+according to the SVG specification. Since URLs and local file paths
+may be included in SVG files, untrusted SVG files may create a Server
+Side Request Forgery (<a class="reference external" href="https://cwe.mitre.org/data/definitions/918.html">SSRF</a>) vulnerability since URL requests are
+done by the computer executing the SVG, which may be in a realm of
+trust (e.g. inside the firewall and able to access "localhost"
+addresses).</p>
+<p>The <cite>-comment</cite>, <cite>-draw</cite>, <cite>-format</cite>, and <cite>-label</cite> utility options
+support a <cite>@filename</cite> syntax to incorporate any readable file on the
+system as a convenience to the user. If text from an untrusted source
+(e.g. a web page) is allowed to supply these options, then they may be
+used to read arbitrary files, creating a potential security hazard.</p>
+<p>The GraphicsMagick project is continually striving to eliminate
+conditions in the software which might pose a risk for its users while
+not constraining what its users may do with the software.</p>
+</div>
+<div class="section" id="reporting-issues">
+<h1>Reporting Issues</h1>
+<p>If you become aware of a serious security issue with GraphicsMagick,
+then it may be addressed by email directly to the GraphicsMagick
+maintainers or to the <a class="reference external" href="mailto:graphicsmagick-security%40graphicsmagick.org">GraphicsMagick Security</a> mail address. More
+minor issues are best addressed via the <a class="reference external" href="https://sourceforge.net/p/graphicsmagick/bugs/">GraphicsMagick Bug Tracker</a>
+at SourceForge. Please remember to set the bug to 'private' if you
+use the bug tracker or else someone may aquire a zero-day exploit from
+your report. We will set the bug to 'public' as soon as a remedy has
+been made available.</p>
+<p>Reporting an issue will allow us to fix it so that future releases of
+the software won't suffer from the problem.</p>
+<p>The current state of free software is that security-sensitive free
+software projects have been undergoing automated testing by machines
+(and sometimes what might be hundreds of machines). Machines do not
+need to work at a day job, take care of families, rest, or eat, but we
+do. Any bug report which comes with a patch or changeset to fix the
+problem is greatly appreciated and helps to move the project forward.</p>
+<p>The remedy available to us is to submit a changeset to the
+GraphicsMagick Mercurial repository, and include the changes in the
+next release. Regardless of how an issue becomes known to us, the
+issue will become public knowledge as soon as we commit a fix to the
+source code repository. Only in exceedingly rare and dire
+circumstances (e.g a previously-unknown zero-day shell exploit) might
+we do anything different.</p>
+</div>
+<div class="section" id="safe-use-of-the-software">
+<h1>Safe Use Of The Software</h1>
+<p>You are the first line of defense when it comes to GraphicsMagick
+security!</p>
+<p>If you are operating a server which supports file uploads from
+untrusted users, or delivered via a network protocol such as http,
+ftp, or email, then you should take steps to assure that a problem
+with opening/processing the file does not place the whole server at
+risk. These are steps which can be taken:</p>
+<ol class="arabic">
+<li><p class="first">Subscribe to the <a class="reference external" href="https://lists.sourceforge.net/lists/listinfo/graphicsmagick-announce">graphicsmagick-announce</a> mailing list so that
+you are informed about new GraphicsMagick releases or special
+security bulletins.</p>
+</li>
+<li><p class="first">Make sure that GraphicsMagick is up to date as reported on the
+GraphicsMagick web site. Don't simply trust that packages from
+your operating system vendor are kept up to date or are updated to
+include security fixes. Keeping GraphicsMagick up to date might
+require that you compile GraphicsMagick yourself from source code.</p>
+</li>
+<li><p class="first">Execute the software in a <a class="reference external" href="https://en.wikipedia.org/wiki/Operating-system-level_virtualization">Container</a>, <a class="reference external" href="https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/jails.html">FreeBSD Jail</a>, <a class="reference external" href="https://illumos.org/man/5/zones">Solaris
+Zone</a>, or <a class="reference external" href="https://en.wikipedia.org/wiki/Chroot">chrooted</a> environment such that it can not cause harm
+to the system running it.</p>
+</li>
+<li><p class="first">Execute the software as a least-privileged user (e.g. 'nobody').</p>
+</li>
+<li><p class="first">Normalize input file names or any other external inputs so that
+they are under your control and not controlled by an untrusted
+party. This should include any file name specifications, which may
+include arbitrary 'glob' patterns (wildcards) (requiring hours or
+days to complete if sufficiently close long file names exist), and
+options supporting a <cite>@filename</cite> syntax.</p>
+</li>
+<li><p class="first">Enforce that uploaded files are passed to the expected reader. For
+example, the uploaded file "file.jpg" is forced to be read by the
+JPEG reader (rather than a reader selected based on header magic
+testing) by using the file name "jpg:file.jpg". If the file is not
+really what was indicated, then an error is reported.</p>
+<p>GraphicsMagick supports a great many file types and auto-detects
+many file types based on their content rather than file extension.
+The file which pretends to be an ordinary PNG or JPEG file might be
+something else entirely. Note that even using independent file
+header testing may not be sufficient since it is possible to
+construct valid files with a header which appears to be several
+different types, but the first type which matches while testing the
+header will be selected.</p>
+</li>
+<li><p class="first">Apply resource limits via the <cite>-limit</cite> option or the
+<cite>MAGICK_LIMIT_*</cite> environment variables (e.g. <cite>export
+MAGICK_LIMIT_PIXELS=30Mp</cite>, <cite>export MAGICK_LIMIT_MEMORY=500Mb</cite>).
+Also consider setting resource limits using the <cite>ulimit</cite> command.</p>
+</li>
+<li><p class="first">Consider using the <cite>MAGICK_CODER_STABILITY</cite> environment variable to
+constrain the supported file formats to the subsets selected by
+<cite>PRIMARY</cite> or <cite>STABLE</cite>. After setting this environment variable
+(e.g. <cite>export MAGICK_CODER_STABILITY=PRIMARY</cite>), use <cite>gm
+convert -list format</cite> and verify that the format support you need
+is enabled. Selecting the <cite>PRIMARY</cite> or <cite>STABLE</cite> options blocks
+access of http and ftp URLs (<a class="reference external" href="https://cwe.mitre.org/data/definitions/918.html">SSRF</a> vulnerability), but does not
+block SVG renderer access to read local image files.</p>
+</li>
+</ol>
+</div>
+<div class="section" id="pgp-public-key">
+<h1>PGP Public Key</h1>
+<p>The following PGP public key (belonging to Bob Friesenhahn) is used to
+sign release files on the ftp site and may be used for private
+correspondence:</p>
+<pre class="literal-block">
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQMuBFvWDmMRCACvO+aWyRPlp7jezY8m4t8q+MkLQXczLCoC8sUVQ5qd5T28HsfD
+rUVzrFYY6pWT1K3AgTTKZnVcBO5lyZtLLS6HQI41FESp1Gp/FtyisYbOlQAeOvfG
+yJVCQe16QoaHye0UIC8rs2VqH055nSewk7YOpEg9PNdHce0/Mvajkxyj2Eb6C4jp
+mZuvcPhU4MaEqo9yAlSnRztwqmmDwvO60LPEoS7WRUB3oEqDGGR8wnMARbCwjlVn
+kMHd5BqgOnFDhqxxGnQzq+dv9C4RKGZtpIFl+jVpx9m5DszF9ZYEDtNMwxAoCIia
+mZE0DkxTwI5lbwe9Pc3HZSK/wEF7Df1HC/U7AQDoVpk/g33Tllvsd52UYUZM1aca
+3qaPM6orhVLXysaI+Qf+LoRoQgTlQX4IP19Z2t8MIx7VP08SOsrZdNAwIgHO4fhs
+dOX6okfwpiYOl1bGqnakprit4HarAhtSM0Xd8JPtXImPqzHN07yz6jhCKZBIFWGC
+kJSzPFar+P/jCmCWArL7DfBelBw0aHiV7HmSqEQJsyKVZBYjgHmXzjLkp3zsFRaR
+tAj3TnB+nN4uXCchv63bVmYd3Cv55AZyugJb49Kl5PHqHarcle39Gbhg/UPPiduo
+zIQKqtsKZcLckxZWi5f3XF/BnIY+uKdbOssTY0u8hyCqj904KdUl50GtYEb274EZ
+a7ZepmcSp6a3aTtQmmHMf1MP/5U7Z6c6fNha4N3Xwwf+O1Zhc0Y11JSEV8G/2gAC
+rjwYCIQ17w6/KDUe4nflxZpCsTP7+YOwmaXRSBqBoCz5N3ZH9jTp0xu73l6hK5wY
+LodkfYHRhIMSyRCrW4T7yalUlpcuJy0NhFUnCDALgkjAhLUi4goJ+nsnOIJWC1dp
+5DhZtClRTWNIHWK1AmIrWAUBuodpcp6K1NouJFenQB/NtwHS71J+ILli9LTxt6jM
+CvaOAseRjvOs8JxG3pBm2LPOvZDyvQQFvfrTgqOlcMgqVp4mIqTKeEtXa2AQWrCG
+QK5Ig3ZxfiQuNYIYNRsbag8Xyo8/udvbMDXVOAWQlmQz2B/Ge23rTGQZPMixoA+e
+JrQuQm9iIEZyaWVzZW5oYWhuIDxiZnJpZXNlbkBzaW1wbGUuZGFsbGFzLnR4LnVz
+PoiZBBMRCABBAhsDBQkSzAMABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE69/b
+IbAg7o/RUaiN4wEEfeEZiXUFAlvWDvECGQEACgkQ4wEEfeEZiXXLpgEAqPfOR6nD
+iq8o/5RZ57f8UFNSPBiLTFbi/FTHhn9FV/oA/14uiKfpWhhKib3INfOZweDC0sHX
+GdULE2Nrbx54Rn/otCxCb2IgRnJpZXNlbmhhaG4gPGJmcmllc2VuQHNpbXBsZXN5
+c3RlbXMub3JnPoiWBBMRCAA+FiEE69/bIbAg7o/RUaiN4wEEfeEZiXUFAlvWDskC
+GwMFCRLMAwAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ4wEEfeEZiXWxkwD8
+DK9I1UeGW8TIQQ5zzyk9Ue2+0C3RP5R45Dg3cg9W01oA+gIELZMu+15wCOG22dRO
+NAvZUjNS8TrGIWtGvQNE5IYctC1Cb2IgRnJpZXNlbmhhaG4gPGJmcmllc2VuQGdy
+YXBoaWNzbWFnaWNrLm9yZz6IlgQTEQgAPhYhBOvf2yGwIO6P0VGojeMBBH3hGYl1
+BQJb1g7jAhsDBQkSzAMABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEOMBBH3h
+GYl1RekA/2UUHeqkrePzLtI10VfprqAgjYYRIb4Ue/Y18hzSHYEyAP4+LBt/y6CS
+5kq5G7RtM072ujLm4LMRu+KKGmSVQz1u2LQrQm9iIEZyaWVzZW5oYWhuIDxib2Jq
+ZnJpZXNlbmhhaG5AZ21haWwuY29tPoiWBBMRCAA+FiEE69/bIbAg7o/RUaiN4wEE
+feEZiXUFAlvWIvsCGwMFCRLMAwAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ
+4wEEfeEZiXWYugEAv6hEjxqDR2pZu6/2qrG642OMk0lHVlFjla3F8hpMabIBALNd
+pWvc+nb/HbZTWT5cebhA8Z/dExYTjB9jUIdNYAbU0dKI0oYBEAABAQAAAAAAAAAA
+AAAAAP/Y/+AAEEpGSUYAAQEBAEgASAAA/9sAQwAUDg8SDw0UEhASFxUUGB4yIR4c
+HB49LC4kMklATEtHQEZFUFpzYlBVbVZFRmSIZW13e4GCgU5gjZeMfZZzfoF8/9sA
+QwEVFxceGh47ISE7fFNGU3x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8
+fHx8fHx8fHx8fHx8fHx8fHx8/8AAEQgBBQDEAwEiAAIRAQMRAf/EABoAAAIDAQEA
+AAAAAAAAAAAAAAABAwQFAgb/xAA1EAABBAAFAgQEBQQDAQEAAAABAAIDEQQSITFB
+BVETImFxIzKBkRRCUqHBBrHR8CRy4VPx/8QAGQEAAwEBAQAAAAAAAAAAAAAAAAEC
+AwQF/8QAIBEBAQACAgMAAwEAAAAAAAAAAAECERIhAzFBFDJRcf/aAAwDAQACEQMR
+AD8A9MmkmmgJoQmDQhCQNCEJgJoQgBChfiWtdlaM55rYKE44NP5SeaKQ0uoConqL
+QdRp6FdjHMcQMzWj1KNjS4hQiYH8wPsVK0gj0QDTQhACEIQAhCaASaEJGEIQglZN
+CYVAIQmkAmhNACFHNNHBGXyvDWjkrCxfW5Z3+Dg2lpPNalAk228RiocMLleAeByV
+hdQ67mOSG+xA3/ZRswMkvmxMpBO4adT7lWoMLDh21FG1oUXJrMGZHJ1DEnWIhg2B
+8oVhuFxjmgOdG0e5K02hdAJbaTBnfgZq0kafbRP8JiAKDz9Fo0utktjgyM0+HdYF
+fRXML1YWGygtPcK0Q1wIcL91Tn6bHJrGSw71xacqbg2sPiGTMBa4G+ymXlRJicBJ
+rY107Fa3TerxYs5H3HJtR2JVysrjpqpICaaQhCEAIQhIwhCEwrppBNBBNJNANRYn
+ENw8ZcdTsB3K7cQBrovO9Z6sG3HCC52wQNKWOkxvUcaIswaOa2aFo4TDRYSPJENe
+XHd3uocLF4MWvzu1ee5VtgtZ2t8cdJAuwEmhdtClqAF1SNF0AkZUhd0kgOU6QnSA
+5dG2RpY8AtPBWH1LAOw5EjLLBs69R7rfASexsjCxwBaRRBTlRZtmdK6zKwtixJL2
+HQOO4Xo2PbIwOYQWnYheHxMBwGLfEbyEW0ntwtro+Py0x7hlO/v3WkrDLF6BCN0K
+kBCEIMIQhIK6a5TTI00knGmknhAZfWcb4bPBjdT3D7DuvN4MHEYwvqo4/wBypMXi
+XYnETSa+c0PZWcHEIcO0VqdSprTGLrNQpmLiIeVdtWbeJ2KVoChYpm6pKMjZABXR
+GyKQBRQbQUAoBhMhIFdboIkIQgMzrmFM+E8WNtyRa1+ochY+EmEbWk2WO0BPHofV
+eqdq0grzpwrRPPh3aNJtp7K8WWT1PT5fGwcbr1Aoqysb+nZiYJIX6PYdVtLRjSQm
+kgBCEICradri07SDu1V6nJ4XT53XRy0FYtZ3XnV0yQDckD90B5iMgkWTZND0C1I9
+aWTCfi2BY2WzBVWpya4rLRQXbVwx7CaDh90zLGzXMFDVO1WGBZoxsPiZQ4WrsMzX
+mgUHtMQlei6cQHNHcII8pSNxVrsNSZRFrtppAKkFPMLSKZBCSaROSsrGDLjWkfmF
+LVKzce23NPY/ZVPaMvSfpALcWTW4ylbqxeln/lHs4X9VtLVhSQhCAEIQgKNp2uLT
+CRurWT/UcmXAtHd9/YKx1PqLenQskdE6QOdXl4WTNjGdadFC1ro3B1lpB2re0QMv
+COLpAaJA9F3iJ5nGg6OMcHxAD9la69HHh3RQxU1gZfue5WWMGHZRkKSoCZLP/Miv
+uHKF7cQbAlbIPR4/ytODpTHfN9lbHRoDu0JbiuNYMMkkcgE7HjsSKXpOm4gkgA7L
+lvTGZXZSAGiyCd0mxtwoYQCHXr29KSt2qTTXM2ado9FZcaiJWTA/PPm4AWpYdGaI
+Oilr8V/xGRt/dU39Re3K0aOOps1SeJJaSwDlVHYbO5zpDZIqhsE5EZVHP158DnBu
+R3uaXcX9SsLR4jCL5GyryYPENPwGRtHfIFxLh+pvykyE0KALQaH2VaiO2tF1yB58
+pDh2vVaWHxcOIAyPAJ4O68m6PFRn4kMT/eMD+ynwxLZB5fCdwWmwfoUuJ8q9Udln
+Yt2Ug+qs4fEGQZJBlkq/Rw7hVMfpde6J7F9LfSac8G9iVsLB6K4+O5vG63lowoQh
+CAEIQgM5MJJhSpFisNHi8O6GUeV3bceqzWfisFQxERxAhGWN8ernt9u4/dXsTjRC
+7K0Znc9gqb8cXzxOc0AMu6PCNq43W2L1iZmM6lD4Ts8bwKKslrImhzjoOUY0RzdV
+bNGwCm+Z1VZTdEZt9ApyqsIrnqDi7LG0l36Rx7lVD1jEFxADQB3ctiHBxsbo0A9w
+qj+hwPmLjI5oOtCkTSrMvjnD46RznNf8KRhymzmaT7qeWd0rSx7HAkfk1P0XYwMU
+EJjiILXGzm3KpY1skdRRE+cZRR2vc/b+6OtjvisdJwgxbc80kjh2ugtg9Oa2KoJZ
+YqN+V3P1UfTomxQNa3QAK8HdlO6vj0ycOZfFlbNL4hj2NV/pUj5mMbZIACrYvxIc
+c4Rg1I5poC7Gx/hdy4enEtIIGluKdTHbMW0nRjj76KwMYx7ySyu+TWvosHHskjlH
+ntuW96srnARfiMZGGZ2fMXAPuv8AdE5iVy1XpS1k7aaQ4Kv+CLHG2HKPTZRQmWHE
+hshzEEVIBv6OW9IGyREtcNtdUr0VZ2KbL4DPw+UTAjIXbLOkxM4kP4uB7DYAIAyg
+HueVrv8AmjB4dazuqPANO0BBBVQrFzpDSzFubd0KK3Fh9Ft09uGoYL96C3FcZX2a
+EIQQQhCAzkwkmFKnmcU/EPnd4ZoXa4OctIkAtwG3ZX8RHlne0dyFWxDalib62foF
+M9ujP1NOWktpsu36uPr2V6JrXNGWj7KvCddiphDC45sgB7jT+yVTFlsY5T8JlWVA
+2Ng2dKB2zlN0UVate/8A7OJSaK+JkYDkiGd/YbD3PCqMjLpc7zmLef8AHorkoOXK
+0BjewUIAAIQFvDSHQBXm7WVRwjL1V9tbIUrYuMuyyNoOadCos4l/LRG4PBV1zbBB
+5UEmHsB2ocNnD+U0a7Rsa2sr42lvqF3Fh4Y3EsjDeNBS5D5GkAta760rDJHf/B59
+i0/ygWQNaL2UwBaw1suAZSfLAR/2cAuvDlefiva1v6Wc+5KNFa5Z8WW26sZoD3Kp
+45oc9xrYi/RabGhgDQKA4VHGNqU38sjKKcqMp0v9MhbDDmLgZH6nXYdlfCzGECJl
+18o3VrDSX5bscaqpl8Tl4+trKEIVMjQhCAzkwuUwpUz8c0NxLT31WdibGJbppS1e
+os0jkH5TSysa4eNC6xRtR9bzvBZw40Vto0VSA6BWwdLCRwz2pRuPCkvRRlJcQTaN
+Vbeh6qxLqCoZAI47JArkpwq0sOwBgpTtjJdfCp9PxQljFEEjkG1fbJqnobJzK1Qw
+A6cIkkFgWBabRWyVDh+HadQFy1mUiiVYCKHZAJgJ5K7DAEAUmChNjl26p4s3LG29
+CDatuPmIWfijnxbQD8oTib30vvY2SLVunCjwTGxYtwYTltSQOaWZfRPBsJlc/gFE
+9rvWNX0JJrVyBCaEBmphJNSpzMzxInN53C851T4Yjygb3/lemWB1pmWUNrRwJCWu
+1S9acYV9sDuFfD7CxMDMdWna91psfbjSmtcatNdaHBcRFSOdQUtIrzGmk9lR6phn
+Y3Dhsb6G/ur0725aOqpRNklcRH5GcknhOSllZ9VukwzYAeeqcbIBsLdje5xvhcQw
+HIM2ulFdyOc1lMGwGytH+MjDx4t/Vn4rEkhpcWMHGXhejjdY0WdHIS5zHjQa3Wy0
+ImgN02U1eNmkoXYXC6UmLpLNok86KJ7twE00y7c9lVgp0ksjt/l912ZBIQBzofRT
+QYcZibHsq+Il7EIy2eFoQMyRAcnUqsxpfLVeUH7q4njC82Xw00k1bAIQhAZqaSal
+RrI64wlraGpBC11Q6nHnaK7FEDzTSYbaBbgaF+ivYeexRNqji7YGyaeTUqOCcNkA
+HJ0SsaS6egErWNtxpVZcc296UTneNJlGrWts+/CrFzTiBoSAaHb3SmKrn/E7ZjPI
+QbAHqruGDYcwNOOVun3A/hZ2Ghe3ERmVvlPblabXND3Ea63/AIVRnbatRSF0Ugde
+hoouwATR0B9FA2VrXObqc2ug5Xcbmud5tB8pKD7jp7PzaZxYschd4fEtbe9Hj91F
+LMDbjoAwnTdUnYjMyMtNOePlHFIolsb7XtdsV2CsSLEB5zG8xOlaa+qvYfFEnI/R
+1WPVZ2NZktvIrVUZJhZYDr3UuImHgmjqs2I+JJbtDv8A+pyJtWMI7MTffRbDQAL5
+WbhoqnAO1rVijsAnbgKtI3Jd1JGzKL5K7QhX6ZW7uzCaSaAEIQgM0JpIUKNQ4ttx
+X2UyT252FvdM3kuoRfDu9CdlR8PLK0uFNvfst7FQZnlrhq02FRmhysLq0bdE+qDP
+DuAwbnEAEmw30vS/suIp4g03Ys73qVSfO4wsDXZW0AQe4U7Mr21ltu59UWiTa67F
+RuBLi0nvey6in8RtMzEDaguIRFuYmj6LSiEeW7LfdTttJFOOZ7Xi2kV6Ky97nNrK
+6uNFbbC0nyuFrsQkncE+6e1ajOLixpu6OtEKIRxHKYyAW3QWx4RHDQqs+Fhf53AE
+j9OiNpsjL8Tw3hwNg7g8lW2yuzMNgDVwJ40Uc+AY0Zm2Ne9rqDD5mPr5kts6c2Iz
+OaRdEbKaOIuexxGlVf7qsxpMoBAFG233W3HBUbB20KqQrRGLksC/MFpMFNAKqYaE
+tdbtVcTZ0JpJpkaaSEgaEIQGahJNSo0wkmg1PHRA+YDcarzmNmtkrR5gR27L1szP
+EiI5XnJoWsxZz2WuFaDdUGPgsE7FSuLh5Wmr4Wo+BkDQ2MXQ0FLRw8LI4sopjBtl
+1v8A9XMsVyBxbduAq1NVjYrQQuOYvdmIFG9gVaw7GeEC46uK5ja510QBZvTSu391
+wHRweGXmg11C+AnBdrD/AJ5Xg5ctAWp35hqDu0G/2KqR4qN7HuLSA55FuG9jT/fZ
+TjENcMgIOawD/CeoXKos73ucMxB0+65aHaG/RdNzid7OTlN/79FbDAS5vqVOlckD
+2ktoV6qCAmKUHSgav0WjHCxwNGtPsoMVhHPBLBrzXdKQWqFEvAPzBxP0tbuCOaNz
+SSaNi1jx+WVjng+ITRJ5W5hIso13O6uIqxEKGqkXIFBNNBppJpA0IQgGhCEBmJpI
+UqNNJCDdcLHxI82bkHstdYeLxELZ/Bc8ZydAnCaOGa3L5tXFtk9go3NzyNNO9PQJ
+wvDi4N9zamyB7zuTaoRAGBpNN04pRmIOcKs9waVp7fLTSA0bmlAb8IAD5jeqixrL
+tCYBK5zKto3ICkiw4I20F/dON1AtbppqfqVLC7LGe5KQcxsBc11eZhrbcKWhmIH0
++6cDT+IBrQ3f0XToyXuGxHyn90y6d4YuzBrxRHNbqyYhR9eFxDTmBx0J0KlJNU5X
+IzyrMlhBkAduTuB6/wB1oYY39lBLXzVvpqpMGbkefRK3s9dbW00kIQaaSaAaEIQD
+QhCAy01nP6o0HyRkjuTSgl6nK8VG0R+u5UbjaeLKtaSVkTc0jg0dys6Tq4LqhZYH
+LlmyOe+3PcXHuSowKAStbY+GfV6TqM8gIz0D2FKiyFrfinWV+uZMLsaxt9giU88Z
+J0u4Kf5g7QVS1mWBodatedIc0B7SR7LTwWLa/IzMb222WkrmyxXg24DfJJUZFAkg
+VltqkJDRpyVG7zUAf97J6TtXaKlDBp5QSiEF2dw+UaV90nSZJiSNtR9f/wAUkJIj
+JA1ddUlo9rTfJzsAfupqtmY6ktUbMpaTuC0BSBwzDsdE9Fak0aRtqkX2wncqOaQE
+V2XG+vdO3QmOyldXl4CgzOaSWuLT3C7fqVGNzysbW8nWleXFdQwzi9jzOz9JAsf5
+VrB9Y8ePMWA8GtCEZbVANEeJmrSyL96RuqmMy6sehgxMc/yHXsd1MvOxyEPsGloY
+HqQcfCnPmGzj/KqZIz8NncaaEgbTVOc0IQgPE7hACGbJhYvSIjRcOFKalwQg0QUk
+Y+Dr7LghOF/mew+4REeT0sxAFhB4UbmOifnZpym05JG9ireXM2+FW2FiGLGTM3dp
+6q14zZAasGvuoBC0k1SnjhA11VyouJkGQEHbddMaWM0qq0U0cYI7Fd+BYT2nTiKS
+mhrj7qbOKAC48Dm1IG0jkOLkMvfZdONBdcKJ5oKLWkmnPdyTBaZ0aiMeW0jDnBjS
+47ALLa4yFz/1G1Zx8t1C3d2/sq7RQUtvHPqRpoEqOJxyl252Se7yn9l3EKbXYIaL
+cONlhAyutvYq5H1iO8srHA9wLCyeKKVJy2M8vHjl7egb1DCuF+KB7hCwLpCrkj8f
+FRYu0IUtjCCEISNG4KJxyzMI5tpQhETn+q05vw77K9hzcYtCE4wFZXabFStOtUhC
+ok7ApWuIQhNNMnZG6EJAHZQu+coQkopRTVy55jgLhqUIQGVGS8ukcbc4qW9EIUuq
+enG8jRxuu2H4lIQg3ZCChCCcOOqEITD/2YiWBBMRCAA+FiEE69/bIbAg7o/RUaiN
+4wEEfeEZiXUFAlvWLooCGwMFCRLMAwAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AA
+CgkQ4wEEfeEZiXUcvgD8Dd3c9PMFe8l36YcKLs1ubSEF30mu3b/s8oG7CgeBdOcA
+/062qY6F+Hy0GK/kc5WN9pr5rvFcdS/Tz8wDq5d1shjYuQINBFvWDmMQCAC0JHbI
+pX4rz6HzifXiVvPKKgOFdxRs4xZkOA8/sPcK3rB34waMuOgBme6jL7iJNfbC60eo
+TIMv75i0C1MWxQReoR+UA+mQctuvpcrkzzceEYH2JWFf0NZZtT5wYoJ8JNfW1ngi
+r/QhPRWC4fNfJQiJhWdf4sdP2BnW0hi5IIPnmkHQ44G0xBQpOqPrv7A8F97ROGYD
+oS3LNmKmfLV9nKRBH+NmQ+zdaToNcQTOlSbMVZ/hag1F9LSmAUFcqXr9bKKk/qKj
+RBkEweAsYppTgn0N7StNtcT9aR5zZkqJ9FBgls6LSr2H6QPiaGZeixZrywjxz2ku
+xz5C1D92ZVAe0qhTAAMFCACyCRhU7YmWUdC3D5rMna97JhFu2fQygn5FQEuHOFao
+abaUicXCxlW3IKQqBjOcpN6rZl+crapYVKGCGM4nMvmxEqqRBYAHLw8vc3Nfys/O
+AXWxI6kiZlVAIX/Q0IZveFejRCoEo6bBabGSfDHWH7QqZXEo2TNWiGJ6oLOyIISl
+x1MM4e9jRSufukrtTfsU8HDoWKycRSnaxtYOz4FAAofrCeQ6/Nf3Vf887NXXD1I6
+xMp9vyuYqx68SrqtmX9FauagsHzmLylYI42JciTCvje09D9kAHFaidkR58DVgzPW
+xFQCGBDO8Rrk1lVjO2gX2bVzKW1J+67ENM1YdWjiVzt9iH4EGBEIACYWIQTr39sh
+sCDuj9FRqI3jAQR94RmJdQUCW9YOYwIbDAUJEswDAAAKCRDjAQR94RmJdRzqAQCZ
+KJFm7j0Zug7NN+IPTqnIrPCioJkt1iGbec6SbBHh5AEAy5JEbI2ugQEePaIMGWVV
+akWaTz0WKIOiD9Lm2ylI9J0=
+=UAq2
+-----END PGP PUBLIC KEY BLOCK-----
+</pre>
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</div>
+</body>
+</html>
akWaTz0WKIOiD9Lm2ylI9J0=
=UAq2
-----END PGP PUBLIC KEY BLOCK-----
-
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Thanks</title>
<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
</head>
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-thanks">
<dd>Inventor of the eight hull algorithm used for speckle
reduction.</dd>
</dl>
-<hr class="docutils" />
-<div class="line-block">
-<div class="line">Copyright © GraphicsMagick Group 2002 - 2020</div>
</div>
-<p>This program is covered by multiple licenses, which are described in
-Copyright.txt. You should have received a copy of Copyright.txt with this
-package; otherwise see <a class="reference external" href="http://www.graphicsmagick.org/Copyright.html">http://www.graphicsmagick.org/Copyright.html</a>.</p>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Thanks</title>
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-thanks">
+<h1 class="title">GraphicsMagick Thanks</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>We would like to thank the following organizations or individuals who
+may have not contributed code but contributed substantially in other
+ways:</p>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#fuzz-testing" id="id1">Fuzz Testing</a></li>
+<li><a class="reference internal" href="#security-analysis-reports" id="id2">Security Analysis/Reports</a></li>
+<li><a class="reference internal" href="#static-code-analysis" id="id3">Static Code Analysis</a></li>
+<li><a class="reference internal" href="#software-analysis-tools" id="id4">Software Analysis Tools</a></li>
+<li><a class="reference internal" href="#additional-acknowledgements" id="id5">Additional Acknowledgements</a></li>
+</ul>
+</div>
+<div class="section" id="fuzz-testing">
+<h1><a class="toc-backref" href="#id1">Fuzz Testing</a></h1>
+<blockquote>
+<ul class="simple">
+<li>Gustavo Grieco</li>
+<li>Agostino Sarubbo</li>
+<li>Jodie Cunningham</li>
+<li>Gynvael Coldwind and Mateusz Jurczyk of the Google Security Team</li>
+<li>Hanno Böck</li>
+<li>Tobias Ospelt</li>
+<li>Michal Zalewski</li>
+<li>Moshe Kaplan</li>
+</ul>
+</blockquote>
+</div>
+<div class="section" id="security-analysis-reports">
+<h1><a class="toc-backref" href="#id2">Security Analysis/Reports</a></h1>
+<blockquote>
+<ul class="simple">
+<li>John Lightsey</li>
+<li>David Chan</li>
+<li>Federico Larumbe</li>
+<li>Petr Gajdos</li>
+</ul>
+</blockquote>
+</div>
+<div class="section" id="static-code-analysis">
+<h1><a class="toc-backref" href="#id3">Static Code Analysis</a></h1>
+<blockquote>
+<ul class="simple">
+<li><a class="reference external" href="http://www.synopsys.com/software/coverity/">Coverity</a> was used (free of charge) to perform static code
+analysis of the software. After resolving many issues, there are
+now zero reported defects per 1000 lines of code.</li>
+</ul>
+</blockquote>
+</div>
+<div class="section" id="software-analysis-tools">
+<h1><a class="toc-backref" href="#id4">Software Analysis Tools</a></h1>
+<blockquote>
+<ul class="simple">
+<li><a class="reference external" href="http://lcamtuf.coredump.cx/afl/">American fuzzy lop</a> was used (by many) to produce and discover
+many of the files which caused problems for the software.</li>
+<li><a class="reference external" href="http://quickfuzz.org/">QuickFuzz</a> was used (by Gustavo Grieco) to discover issues in the
+SVG renderer. <a class="reference external" href="http://quickfuzz.org/">QuickFuzz</a> provides specific support for a set of
+file formats and is very good at chasing down and isolating
+weaknesses.</li>
+<li><a class="reference external" href="https://code.google.com/p/address-sanitizer/">AddressSanitizer</a> (ASan) was used to detect and isolate memory
+access issues.</li>
+<li><a class="reference external" href="http://www.valgrind.org/">Valgrind</a> was used to detect and isolate memory access issues as
+well as memory leaks.</li>
+</ul>
+</blockquote>
+</div>
+<div class="section" id="additional-acknowledgements">
+<h1><a class="toc-backref" href="#id5">Additional Acknowledgements</a></h1>
+<dl class="docutils">
+<dt>David Pensak, E. I. du Pont de Nemours and Company</dt>
+<dd>For providing the computing environment that made
+developing ImageMagick possible.</dd>
+<dt>Alexander Zimmermann</dt>
+<dd>Responsible for the ImageMagick Linux binary
+distributions for many years. His efforts are very much
+appreciated.</dd>
+<dt>Paul Heckbert, Carnegie Mellon University</dt>
+<dd>Image resizing is based on Paul Heckbert's Zoom program.</dd>
+<dt>Paul Raveling, USC Information Sciences Institute</dt>
+<dd>The spatial subdivision color reduction algorithm is
+based on his Img software.</dd>
+<dt>Michael Halle, Spatial Imaging Group at MIT</dt>
+<dd>For the initial implementation of Alan Paeth's image
+rotation algorithm.</dd>
+<dt>Peder Langlo, Hewlett Packard</dt>
+<dd>Made hundreds of suggestions and bug reports. Without
+Peder, this software would not be nearly as useful as it
+is today.</dd>
+<dt>Rod Bogart and John W. Peterson, University of Utah</dt>
+<dd>Image compositing is loosely based on rlecomp of the
+Utah Raster Toolkit.</dd>
+<dt>Alvy Ray Smith and Eric Ray Lyons</dt>
+<dd>HWB color transform and algorithm.</dd>
+<dt>Thomas R Crimmins</dt>
+<dd>Inventor of the eight hull algorithm used for speckle
+reduction.</dd>
+</dl>
+<hr class="docutils" />
+<div class="line-block">
+<div class="line">Copyright © GraphicsMagick Group 2002 - 2020</div>
+</div>
+<p>This program is covered by multiple licenses, which are described in
+Copyright.txt. You should have received a copy of Copyright.txt with this
+package; otherwise see <a class="reference external" href="http://www.graphicsmagick.org/Copyright.html">http://www.graphicsmagick.org/Copyright.html</a>.</p>
+</div>
+</div>
+</body>
+</html>
Thomas R Crimmins
Inventor of the eight hull algorithm used for speckle
reduction.
-
-
----------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-| Copyright |copy| GraphicsMagick Group 2002 - 2020
-
-This program is covered by multiple licenses, which are described in
-Copyright.txt. You should have received a copy of Copyright.txt with this
-package; otherwise see http://www.graphicsmagick.org/Copyright.html.
<li><strong>total</strong> - the total elapsed time consumed.
</ul>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<p>The time command reqires no options other than the gm command to
execute.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
</td></tr></table>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Tools</title>
<meta content="GraphicsMagick is a robust collection of tools and libraries to read, write, and manipulate an image in any of the more popular image formats including GIF, JPEG, PNG, PDF, and Photo CD. With GraphicsMagick you can create GIFs dynamically making it suitable for Web applications. You can also resize, rotate, sharpen, color reduce, or add special effects to an image and save your completed work in the same or differing image format. " name="description" />
<meta content="GraphicsMagick, Image Magick, Image Magic, PerlMagick, Perl Magick, Perl Magic, image processing, software development, image, software, Magick++" name="keywords" />
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-tools">
<p><a class="reference external" href="montage.html">Montage</a> creates a composite by combining several separate images. The
images are tiled on a composite image with the name of the image and its
properties optionally appearing just below the individual tile.</p>
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Tools</title>
+<meta content="GraphicsMagick is a robust collection of tools and libraries to read, write, and manipulate an image in any of the more popular image formats including GIF, JPEG, PNG, PDF, and Photo CD. With GraphicsMagick you can create GIFs dynamically making it suitable for Web applications. You can also resize, rotate, sharpen, color reduce, or add special effects to an image and save your completed work in the same or differing image format. " name="description" />
+<meta content="GraphicsMagick, Image Magick, Image Magic, PerlMagick, Perl Magick, Perl Magic, image processing, software development, image, software, Magick++" name="keywords" />
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-tools">
+<h1 class="title">GraphicsMagick Tools</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#animate-animate-a-sequence-of-images" id="id2">Animate: animate a sequence of images</a></li>
+<li><a class="reference internal" href="#compare-compare-two-images-using-statistics-and-or-visual-differencing" id="id3">Compare: compare two images using statistics and/or visual differencing</a></li>
+<li><a class="reference internal" href="#composite-composite-images-together" id="id4">Composite: composite images together</a></li>
+<li><a class="reference internal" href="#conjure-execute-a-magick-scripting-language-msl-xml-script" id="id5">Conjure: execute a Magick Scripting Language (MSL) XML script</a></li>
+<li><a class="reference internal" href="#convert-convert-an-image-or-sequence-of-images" id="id6">Convert: convert an image or sequence of images</a></li>
+<li><a class="reference internal" href="#display-display-an-image-on-a-workstation-running-x" id="id7">Display: display an image on a workstation running X</a></li>
+<li><a class="reference internal" href="#identify-describe-an-image-or-image-sequence" id="id8">Identify: describe an image or image sequence</a></li>
+<li><a class="reference internal" href="#import-capture-an-application-or-x-server-screen" id="id9">Import: capture an application or X server screen</a></li>
+<li><a class="reference internal" href="#mogrify-transform-an-image-or-sequence-of-images" id="id10">Mogrify: transform an image or sequence of images</a></li>
+<li><a class="reference internal" href="#montage-create-a-composite-image-in-a-grid-from-separate-images" id="id11">Montage: create a composite image (in a grid) from separate images</a></li>
+</ul>
+</div>
+<div class="section" id="animate-animate-a-sequence-of-images">
+<h1><a class="toc-backref" href="#id2">Animate: animate a sequence of images</a></h1>
+<p><a class="reference external" href="animate.html">Animate</a> displays a sequence of images or an animation on any display
+running an X server.</p>
+</div>
+<div class="section" id="compare-compare-two-images-using-statistics-and-or-visual-differencing">
+<h1><a class="toc-backref" href="#id3">Compare: compare two images using statistics and/or visual differencing</a></h1>
+<p><a class="reference external" href="compare.html">Compare</a> compares two images using either a specified standard
+statistical metric (MAE, MSE, PAE, PSNR, RMSE), or a specified visual
+differencing method (assign, threshold, tint, xor). The statistical
+comparison produces a textual display of metric values while the visual
+differencing method writes a difference image with the differences
+annotated using the specified algorithm. For example:</p>
+<pre class="literal-block">
+% gm convert input.jpg -blur 0x1.5 output.jpg
+% gm compare -metric MSE input.jpg output.jpg
+Image Difference (MeanSquaredError):
+ Normalized Absolute
+ ============ ==========
+ Red: 0.0014374614 94.2
+ Green: 0.0014396270 94.3
+ Blue: 0.0014464548 94.8
+ Total: 0.0014411811 94.4
+</pre>
+</div>
+<div class="section" id="composite-composite-images-together">
+<h1><a class="toc-backref" href="#id4">Composite: composite images together</a></h1>
+<p><a class="reference external" href="composite.html">Composite</a> blends and merges images to create new images.</p>
+</div>
+<div class="section" id="conjure-execute-a-magick-scripting-language-msl-xml-script">
+<h1><a class="toc-backref" href="#id5">Conjure: execute a Magick Scripting Language (MSL) XML script</a></h1>
+<p><a class="reference external" href="conjure.html">Conjure</a> interprets and executes scripts in the Magick Scripting Language
+(MSL). The interpreter is called conjure and here is an example script:</p>
+<pre class="literal-block">
+<?xml version="1.0" encoding="UTF-8"?>
+<image size="400x400" >
+ <read filename="image.gif" />
+ <get width="base-width" height="base-height" />
+ <resize geometry="%[dimensions]" />
+ <get width="width" height="height" />
+ <print output=
+ "Image sized from %[base-width]x%[base-height]
+ to %[width]x%[height].\n" />
+ <write filename="image.png" />
+</image>
+</pre>
+<p>which is invoked like</p>
+<pre class="literal-block">
+conjure -dimensions 400x400 incantation.msl
+</pre>
+<p>All operations closely follow the key/value pairs defined in the
+<a class="reference external" href="perl.html">PerlMagick</a> documentation, unless otherwise noted.</p>
+</div>
+<div class="section" id="convert-convert-an-image-or-sequence-of-images">
+<h1><a class="toc-backref" href="#id6">Convert: convert an image or sequence of images</a></h1>
+<p><a class="reference external" href="convert.html">Convert</a> converts an input file using one image format to an output file
+with using any of the supported writeable image formats. A large number
+of image processing operations may be performed on the image before it is
+written. By default, the input image format is determined by its magic
+number. To specify a particular image format, precede the filename with
+an image format name and a colon (i.e. ps:image) or specify the image
+type as the filename suffix (i.e. image.ps). Specify file as - for
+standard input or output. If file has the extension .Z, the file is
+decoded with uncompress. For example:</p>
+<pre class="literal-block">
+% gm convert input.jpg -rotate 90 rotated.tiff
+</pre>
+</div>
+<div class="section" id="display-display-an-image-on-a-workstation-running-x">
+<h1><a class="toc-backref" href="#id7">Display: display an image on a workstation running X</a></h1>
+<p><a class="reference external" href="display.html">Display</a> is a machine architecture independent image processing and
+display program. It can display an image on any workstation display
+running an X server. The image can be displayed as background image of
+any window.</p>
+</div>
+<div class="section" id="identify-describe-an-image-or-image-sequence">
+<h1><a class="toc-backref" href="#id8">Identify: describe an image or image sequence</a></h1>
+<p><a class="reference external" href="identify.html">Identify</a> describes the format and characteristics of one or more image
+files. It will also report if an image is incomplete or corrupt. The
+information displayed includes the scene number, the file name, the width
+and height of the image, whether the image is colormapped or not, the
+number of colors in the image, the number of bytes in the image, the
+format of the image (JPEG, PNM, etc.), and finally the number of seconds
+it took to read and process the image. For example:</p>
+<pre class="literal-block">
+% gm identify tiger-1200-rgb16.tiff
+tiger-1200-rgb16.tiff TIFF 9083x9450+0+0 DirectClass 16-bit 491.2M 0.000u 0:01
+</pre>
+</div>
+<div class="section" id="import-capture-an-application-or-x-server-screen">
+<h1><a class="toc-backref" href="#id9">Import: capture an application or X server screen</a></h1>
+<p><a class="reference external" href="import.html">Import</a> reads an image from any visible window on an X server and outputs
+it as an image file. You can capture a single window, the entire screen,
+or any rectangular portion of the screen.</p>
+<p>The target window can be specified by id, name, or may be selected by
+clicking the mouse in the desired window. If you press a button and then
+drag, a rectangle will form which expands and contracts as the mouse
+moves. To save the portion of the screen defined by the rectangle, just
+release the button. The keyboard bell is rung once at the beginning of
+the screen capture and twice when it completes. For example:</p>
+<pre class="literal-block">
+% gm import capture.tiff
+</pre>
+</div>
+<div class="section" id="mogrify-transform-an-image-or-sequence-of-images">
+<h1><a class="toc-backref" href="#id10">Mogrify: transform an image or sequence of images</a></h1>
+<p><a class="reference external" href="mogrify.html">Mogrify</a> transforms an image or a sequence of images "in place". These
+transforms include image scaling, image rotation, color reduction, and
+others. The transmogrified image overwrites the original image. <a class="reference external" href="mogrify.html">Mogrify</a>
+is very similar to <a class="reference external" href="convert.html">Convert</a> except that it can operate on many images at
+once, and overwrites the input files by default. However, <a class="reference external" href="mogrify.html">Mogrify</a> may
+also be used to convert file formats, and send modified files to another
+directory. For example, the following reads several JPEG files and writes
+a rotated version of them in TIFF format:</p>
+<pre class="literal-block">
+% gm mogrify -rotate 90 -format tiff image1.jpg image2.jpg image3.jpg
+</pre>
+</div>
+<div class="section" id="montage-create-a-composite-image-in-a-grid-from-separate-images">
+<h1><a class="toc-backref" href="#id11">Montage: create a composite image (in a grid) from separate images</a></h1>
+<p><a class="reference external" href="montage.html">Montage</a> creates a composite by combining several separate images. The
+images are tiled on a composite image with the name of the image and its
+properties optionally appearing just below the individual tile.</p>
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</div>
+</body>
+</html>
Montage_ creates a composite by combining several separate images. The
images are tiled on a composite image with the name of the image and its
properties optionally appearing just below the individual tile.
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Utilities</title>
<meta content="GraphicsMagick is a robust collection of tools and libraries to read, write, and manipulate an image in any of the more popular image formats including GIF, JPEG, PNG, PDF, and Photo CD. With GraphicsMagick you can create GIFs dynamically making it suitable for Web applications. You can also resize, rotate, sharpen, color reduce, or add special effects to an image and save your completed work in the same or differing image format. " name="description" />
<meta content="GraphicsMagick, Image Magick, Image Magic, PerlMagick, Perl Magick, Perl Magic, image processing, software development, image, software, Magick++" name="keywords" />
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="index.html">Home</a></li>
-<li><a href="project.html">Project</a></li>
-<li><a href="download.html">Download</a></li>
-<li><a href="README.html">Install</a></li>
-<li><a href="Hg.html">Source</a></li>
-<li><a href="NEWS.html">News</a> </li>
-<li><a href="utilities.html">Utilities</a></li>
-<li><a href="programming.html">Programming</a></li>
-<li><a href="reference.html">Reference</a></li>
+ <li><a href="index.html">Home</a></li>
+ <li><a href="project.html">Project</a></li>
+ <li><a href="download.html">Download</a></li>
+ <li><a href="README.html">Install</a></li>
+ <li><a href="Hg.html">Source</a></li>
+ <li><a href="NEWS.html">News</a> </li>
+ <li><a href="utilities.html">Utilities</a></li>
+ <li><a href="programming.html">Programming</a></li>
+ <li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-utilities">
</tr>
</tbody>
</table>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Utilities</title>
+<meta content="GraphicsMagick is a robust collection of tools and libraries to read, write, and manipulate an image in any of the more popular image formats including GIF, JPEG, PNG, PDF, and Photo CD. With GraphicsMagick you can create GIFs dynamically making it suitable for Web applications. You can also resize, rotate, sharpen, color reduce, or add special effects to an image and save your completed work in the same or differing image format. " name="description" />
+<meta content="GraphicsMagick, Image Magick, Image Magic, PerlMagick, Perl Magick, Perl Magic, image processing, software development, image, software, Magick++" name="keywords" />
+<link rel="stylesheet" href="docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="project.html">Project</a></li>
+<li><a href="download.html">Download</a></li>
+<li><a href="README.html">Install</a></li>
+<li><a href="Hg.html">Source</a></li>
+<li><a href="NEWS.html">News</a> </li>
+<li><a href="utilities.html">Utilities</a></li>
+<li><a href="programming.html">Programming</a></li>
+<li><a href="reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-utilities">
+<h1 class="title">GraphicsMagick Utilities</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>GraphicsMagick provides a powerful command line utility <cite>gm</cite>, which
+may be used to access all GraphicsMagick functions. Gm uses a
+consistent set of options (<a class="reference external" href="GraphicsMagick.html">see options documentation</a>). GraphicsMagick provides access to major
+commands via a single executable command-line program; for example, to
+use the "convert" sub-command, type <tt class="docutils literal">gm convert ...</tt>. The available
+commands are as follows:</p>
+<table border="1" class="docutils">
+<colgroup>
+<col width="17%" />
+<col width="83%" />
+</colgroup>
+<tbody valign="top">
+<tr><td><a class="reference external" href="animate.html">animate</a></td>
+<td>Animate a sequence of images</td>
+</tr>
+<tr><td><a class="reference external" href="batch.html">batch</a></td>
+<td>Executes an arbitary number of utility commands</td>
+</tr>
+<tr><td><a class="reference external" href="benchmark.html">benchmark</a></td>
+<td>Measure and report utility command performance.</td>
+</tr>
+<tr><td><a class="reference external" href="compare.html">compare</a></td>
+<td>Compare two images using statistics and/or visual differencing</td>
+</tr>
+<tr><td><a class="reference external" href="composite.html">composite</a></td>
+<td>Composite images together</td>
+</tr>
+<tr><td><a class="reference external" href="conjure.html">conjure</a></td>
+<td>Execute a Magick Scripting Language (MSL) XML script</td>
+</tr>
+<tr><td><a class="reference external" href="convert.html">convert</a></td>
+<td>Convert an image or sequence of images</td>
+</tr>
+<tr><td><a class="reference external" href="display.html">display</a></td>
+<td>Display an image on a workstation running X</td>
+</tr>
+<tr><td><a class="reference external" href="identify.html">identify</a></td>
+<td>Describe an image or image sequence</td>
+</tr>
+<tr><td><a class="reference external" href="import.html">import</a></td>
+<td>Capture an application or X server screen</td>
+</tr>
+<tr><td><a class="reference external" href="mogrify.html">mogrify</a></td>
+<td>Transform an image or sequence of images</td>
+</tr>
+<tr><td><a class="reference external" href="montage.html">montage</a></td>
+<td>Create a composite image (in a grid) from separate images</td>
+</tr>
+<tr><td><a class="reference external" href="time.html">time</a></td>
+<td>Time the execution of a utility command.</td>
+</tr>
+<tr><td><a class="reference external" href="version.html">version</a></td>
+<td>Report GraphicsMagick version, features, and build options.</td>
+</tr>
+</tbody>
+</table>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2002 - 2020</p>
+</div>
+</body>
+</html>
time_ Time the execution of a utility command.
version_ Report GraphicsMagick version, features, and build options.
=============== =========================================================================
-
---------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2002 - 2020
LIBS = ...
</pre>
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
<table BORDER=0 WIDTH="100%">
<tr><td width="3%"><br></td><td>
<p>The version command does not currently support any options.
</td></tr></table>
- <p>
+<p>
<i><a href="#top">Back to Contents</a></i>
</p>
</td></tr></table>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
<title>drawing_wand</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="drawing-wand">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>drawing_wand</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="drawing-wand">
+<h1 class="title">drawing_wand</h1>
+<h2 class="subtitle" id="wand-vector-drawing-interfaces">Wand vector drawing interfaces</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#clonedrawingwand" id="id227">CloneDrawingWand</a></li>
+<li><a class="reference internal" href="#destroydrawingwand" id="id228">DestroyDrawingWand</a></li>
+<li><a class="reference internal" href="#drawannotation" id="id229">DrawAnnotation</a></li>
+<li><a class="reference internal" href="#drawaffine" id="id230">DrawAffine</a></li>
+<li><a class="reference internal" href="#drawallocatewand" id="id231">DrawAllocateWand</a></li>
+<li><a class="reference internal" href="#drawarc" id="id232">DrawArc</a></li>
+<li><a class="reference internal" href="#drawbezier" id="id233">DrawBezier</a></li>
+<li><a class="reference internal" href="#drawcircle" id="id234">DrawCircle</a></li>
+<li><a class="reference internal" href="#drawclearexception" id="id235">DrawClearException</a></li>
+<li><a class="reference internal" href="#drawgetclippath" id="id236">DrawGetClipPath</a></li>
+<li><a class="reference internal" href="#drawsetclippath" id="id237">DrawSetClipPath</a></li>
+<li><a class="reference internal" href="#drawgetcliprule" id="id238">DrawGetClipRule</a></li>
+<li><a class="reference internal" href="#drawsetcliprule" id="id239">DrawSetClipRule</a></li>
+<li><a class="reference internal" href="#drawgetclipunits" id="id240">DrawGetClipUnits</a></li>
+<li><a class="reference internal" href="#drawgetexception" id="id241">DrawGetException</a></li>
+<li><a class="reference internal" href="#drawsetclipunits" id="id242">DrawSetClipUnits</a></li>
+<li><a class="reference internal" href="#drawcolor" id="id243">DrawColor</a></li>
+<li><a class="reference internal" href="#drawcomment" id="id244">DrawComment</a></li>
+<li><a class="reference internal" href="#drawellipse" id="id245">DrawEllipse</a></li>
+<li><a class="reference internal" href="#drawgetfillcolor" id="id246">DrawGetFillColor</a></li>
+<li><a class="reference internal" href="#drawsetfillcolor" id="id247">DrawSetFillColor</a></li>
+<li><a class="reference internal" href="#drawsetfillpatternurl" id="id248">DrawSetFillPatternURL</a></li>
+<li><a class="reference internal" href="#drawgetfillopacity" id="id249">DrawGetFillOpacity</a></li>
+<li><a class="reference internal" href="#drawsetfillopacity" id="id250">DrawSetFillOpacity</a></li>
+<li><a class="reference internal" href="#drawgetfillrule" id="id251">DrawGetFillRule</a></li>
+<li><a class="reference internal" href="#drawsetfillrule" id="id252">DrawSetFillRule</a></li>
+<li><a class="reference internal" href="#drawgetfont" id="id253">DrawGetFont</a></li>
+<li><a class="reference internal" href="#drawsetfont" id="id254">DrawSetFont</a></li>
+<li><a class="reference internal" href="#drawgetfontfamily" id="id255">DrawGetFontFamily</a></li>
+<li><a class="reference internal" href="#drawsetfontfamily" id="id256">DrawSetFontFamily</a></li>
+<li><a class="reference internal" href="#drawgetfontsize" id="id257">DrawGetFontSize</a></li>
+<li><a class="reference internal" href="#drawsetfontsize" id="id258">DrawSetFontSize</a></li>
+<li><a class="reference internal" href="#drawgetfontstretch" id="id259">DrawGetFontStretch</a></li>
+<li><a class="reference internal" href="#drawsetfontstretch" id="id260">DrawSetFontStretch</a></li>
+<li><a class="reference internal" href="#drawgetfontstyle" id="id261">DrawGetFontStyle</a></li>
+<li><a class="reference internal" href="#drawsetfontstyle" id="id262">DrawSetFontStyle</a></li>
+<li><a class="reference internal" href="#drawgetfontweight" id="id263">DrawGetFontWeight</a></li>
+<li><a class="reference internal" href="#drawsetfontweight" id="id264">DrawSetFontWeight</a></li>
+<li><a class="reference internal" href="#drawgetgravity" id="id265">DrawGetGravity</a></li>
+<li><a class="reference internal" href="#drawsetgravity" id="id266">DrawSetGravity</a></li>
+<li><a class="reference internal" href="#drawcomposite" id="id267">DrawComposite</a></li>
+<li><a class="reference internal" href="#drawline" id="id268">DrawLine</a></li>
+<li><a class="reference internal" href="#drawmatte" id="id269">DrawMatte</a></li>
+<li><a class="reference internal" href="#drawpathclose" id="id270">DrawPathClose</a></li>
+<li><a class="reference internal" href="#drawpathcurvetoabsolute" id="id271">DrawPathCurveToAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathcurvetorelative" id="id272">DrawPathCurveToRelative</a></li>
+<li><a class="reference internal" href="#drawpathcurvetoquadraticbezierabsolute" id="id273">DrawPathCurveToQuadraticBezierAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathcurvetoquadraticbezierrelative" id="id274">DrawPathCurveToQuadraticBezierRelative</a></li>
+<li><a class="reference internal" href="#drawpathcurvetoquadraticbeziersmoothabsolute" id="id275">DrawPathCurveToQuadraticBezierSmoothAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathcurvetoquadraticbeziersmoothrelative" id="id276">DrawPathCurveToQuadraticBezierSmoothRelative</a></li>
+<li><a class="reference internal" href="#drawpathcurvetosmoothabsolute" id="id277">DrawPathCurveToSmoothAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathcurvetosmoothrelative" id="id278">DrawPathCurveToSmoothRelative</a></li>
+<li><a class="reference internal" href="#drawpathellipticarcabsolute" id="id279">DrawPathEllipticArcAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathellipticarcrelative" id="id280">DrawPathEllipticArcRelative</a></li>
+<li><a class="reference internal" href="#drawpathfinish" id="id281">DrawPathFinish</a></li>
+<li><a class="reference internal" href="#drawpathlinetoabsolute" id="id282">DrawPathLineToAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathlinetorelative" id="id283">DrawPathLineToRelative</a></li>
+<li><a class="reference internal" href="#drawpathlinetohorizontalabsolute" id="id284">DrawPathLineToHorizontalAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathlinetohorizontalrelative" id="id285">DrawPathLineToHorizontalRelative</a></li>
+<li><a class="reference internal" href="#drawpathlinetoverticalabsolute" id="id286">DrawPathLineToVerticalAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathlinetoverticalrelative" id="id287">DrawPathLineToVerticalRelative</a></li>
+<li><a class="reference internal" href="#drawpathmovetoabsolute" id="id288">DrawPathMoveToAbsolute</a></li>
+<li><a class="reference internal" href="#drawpathmovetorelative" id="id289">DrawPathMoveToRelative</a></li>
+<li><a class="reference internal" href="#drawpathstart" id="id290">DrawPathStart</a></li>
+<li><a class="reference internal" href="#drawpeekgraphiccontext" id="id291">DrawPeekGraphicContext</a></li>
+<li><a class="reference internal" href="#drawpoint" id="id292">DrawPoint</a></li>
+<li><a class="reference internal" href="#drawpolygon" id="id293">DrawPolygon</a></li>
+<li><a class="reference internal" href="#drawpolyline" id="id294">DrawPolyline</a></li>
+<li><a class="reference internal" href="#drawpopclippath" id="id295">DrawPopClipPath</a></li>
+<li><a class="reference internal" href="#drawpopdefs" id="id296">DrawPopDefs</a></li>
+<li><a class="reference internal" href="#drawpopgraphiccontext" id="id297">DrawPopGraphicContext</a></li>
+<li><a class="reference internal" href="#drawpoppattern" id="id298">DrawPopPattern</a></li>
+<li><a class="reference internal" href="#drawpushclippath" id="id299">DrawPushClipPath</a></li>
+<li><a class="reference internal" href="#drawpushdefs" id="id300">DrawPushDefs</a></li>
+<li><a class="reference internal" href="#drawpushgraphiccontext" id="id301">DrawPushGraphicContext</a></li>
+<li><a class="reference internal" href="#drawpushpattern" id="id302">DrawPushPattern</a></li>
+<li><a class="reference internal" href="#drawrectangle" id="id303">DrawRectangle</a></li>
+<li><a class="reference internal" href="#drawrender" id="id304">DrawRender</a></li>
+<li><a class="reference internal" href="#drawrotate" id="id305">DrawRotate</a></li>
+<li><a class="reference internal" href="#drawroundrectangle" id="id306">DrawRoundRectangle</a></li>
+<li><a class="reference internal" href="#drawscale" id="id307">DrawScale</a></li>
+<li><a class="reference internal" href="#drawskewx" id="id308">DrawSkewX</a></li>
+<li><a class="reference internal" href="#drawskewy" id="id309">DrawSkewY</a></li>
+<li><a class="reference internal" href="#drawsetstopcolor" id="id310">DrawSetStopColor</a></li>
+<li><a class="reference internal" href="#drawgetstrokecolor" id="id311">DrawGetStrokeColor</a></li>
+<li><a class="reference internal" href="#drawsetstrokecolor" id="id312">DrawSetStrokeColor</a></li>
+<li><a class="reference internal" href="#drawsetstrokepatternurl" id="id313">DrawSetStrokePatternURL</a></li>
+<li><a class="reference internal" href="#drawgetstrokeantialias" id="id314">DrawGetStrokeAntialias</a></li>
+<li><a class="reference internal" href="#drawsetstrokeantialias" id="id315">DrawSetStrokeAntialias</a></li>
+<li><a class="reference internal" href="#drawgetstrokedasharray" id="id316">DrawGetStrokeDashArray</a></li>
+<li><a class="reference internal" href="#drawsetstrokedasharray" id="id317">DrawSetStrokeDashArray</a></li>
+<li><a class="reference internal" href="#drawgetstrokedashoffset" id="id318">DrawGetStrokeDashOffset</a></li>
+<li><a class="reference internal" href="#drawsetstrokedashoffset" id="id319">DrawSetStrokeDashOffset</a></li>
+<li><a class="reference internal" href="#drawgetstrokelinecap" id="id320">DrawGetStrokeLineCap</a></li>
+<li><a class="reference internal" href="#drawsetstrokelinecap" id="id321">DrawSetStrokeLineCap</a></li>
+<li><a class="reference internal" href="#drawgetstrokelinejoin" id="id322">DrawGetStrokeLineJoin</a></li>
+<li><a class="reference internal" href="#drawsetstrokelinejoin" id="id323">DrawSetStrokeLineJoin</a></li>
+<li><a class="reference internal" href="#drawgetstrokemiterlimit" id="id324">DrawGetStrokeMiterLimit</a></li>
+<li><a class="reference internal" href="#drawsetstrokemiterlimit" id="id325">DrawSetStrokeMiterLimit</a></li>
+<li><a class="reference internal" href="#drawgetstrokeopacity" id="id326">DrawGetStrokeOpacity</a></li>
+<li><a class="reference internal" href="#drawsetstrokeopacity" id="id327">DrawSetStrokeOpacity</a></li>
+<li><a class="reference internal" href="#drawgetstrokewidth" id="id328">DrawGetStrokeWidth</a></li>
+<li><a class="reference internal" href="#drawsetstrokewidth" id="id329">DrawSetStrokeWidth</a></li>
+<li><a class="reference internal" href="#drawgettextantialias" id="id330">DrawGetTextAntialias</a></li>
+<li><a class="reference internal" href="#drawsettextantialias" id="id331">DrawSetTextAntialias</a></li>
+<li><a class="reference internal" href="#drawgettextdecoration" id="id332">DrawGetTextDecoration</a></li>
+<li><a class="reference internal" href="#drawsettextdecoration" id="id333">DrawSetTextDecoration</a></li>
+<li><a class="reference internal" href="#drawgettextencoding" id="id334">DrawGetTextEncoding</a></li>
+<li><a class="reference internal" href="#drawsettextencoding" id="id335">DrawSetTextEncoding</a></li>
+<li><a class="reference internal" href="#drawgettextundercolor" id="id336">DrawGetTextUnderColor</a></li>
+<li><a class="reference internal" href="#drawsettextundercolor" id="id337">DrawSetTextUnderColor</a></li>
+<li><a class="reference internal" href="#drawtranslate" id="id338">DrawTranslate</a></li>
+<li><a class="reference internal" href="#drawsetviewbox" id="id339">DrawSetViewbox</a></li>
+<li><a class="reference internal" href="#newdrawingwand" id="id340">NewDrawingWand</a></li>
+</ul>
+</div>
+<div class="section" id="clonedrawingwand">
+<h1><a class="toc-backref" href="#id227">CloneDrawingWand</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+DrawingWand *CloneDrawingWand( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>CloneDrawingWand() returns a new drawing wand which is a full (deep) copy
+of an existing drawing wand.</p>
+<p>The format of the CloneDrawingWand method is:</p>
+<pre class="literal-block">
+DrawingWand *CloneDrawingWand( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand to copy</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="destroydrawingwand">
+<h1><a class="toc-backref" href="#id228">DestroyDrawingWand</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DestroyDrawingWand( DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>DestroyDrawingWand() frees all resources associated with the drawing
+wand. Once the drawing wand has been freed, it should not be used
+any further unless it re-allocated.</p>
+<p>The format of the DestroyDrawingWand method is:</p>
+<pre class="literal-block">
+void DestroyDrawingWand( DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand to destroy.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawannotation">
+<h1><a class="toc-backref" href="#id229">DrawAnnotation</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawAnnotation( DrawingWand *drawing_wand, const double x, const double y,
+ const unsigned char *text );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>DrawAnnotation() draws text on the image.</p>
+<p>The format of the DrawAnnotation method is:</p>
+<pre class="literal-block">
+void DrawAnnotation( DrawingWand *drawing_wand, const double x, const double y,
+ const unsigned char *text );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x:</dt>
+<dd>x ordinate to left of text</dd>
+<dt>y:</dt>
+<dd>y ordinate to text baseline</dd>
+<dt>text:</dt>
+<dd>text to draw</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawaffine">
+<h1><a class="toc-backref" href="#id230">DrawAffine</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawAffine( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#affinematrix">AffineMatrix</a> *affine );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>DrawAffine() adjusts the current affine transformation matrix with
+the specified affine transformation matrix. Note that the current affine
+transform is adjusted rather than replaced.</p>
+<p>The format of the DrawAffine method is:</p>
+<pre class="literal-block">
+void DrawAffine( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#affinematrix">AffineMatrix</a> *affine );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>Drawing drawing_wand</dd>
+<dt>affine:</dt>
+<dd>Affine matrix parameters</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawallocatewand">
+<h1><a class="toc-backref" href="#id231">DrawAllocateWand</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+DrawingWand DrawAllocateWand( const <a class="reference external" href="../api/types.html#drawinfo">DrawInfo</a> *draw_info, <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>DrawAllocateWand() allocates an initial drawing wand which is an
+opaque handle required by the remaining drawing methods.</p>
+<p>The format of the DrawAllocateWand method is:</p>
+<pre class="literal-block">
+DrawingWand DrawAllocateWand( const <a class="reference external" href="../api/types.html#drawinfo">DrawInfo</a> *draw_info, <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>draw_info:</dt>
+<dd>Initial drawing defaults. Set to NULL to use
+ImageMagick defaults.</dd>
+<dt>image:</dt>
+<dd>The image to draw on.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawarc">
+<h1><a class="toc-backref" href="#id232">DrawArc</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawArc( DrawingWand *drawing_wand, const double sx, const double sy, const double ex,
+ const double ey, const double sd, const double ed );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>DrawArc() draws an arc falling within a specified bounding rectangle on the
+image.</p>
+<p>The format of the DrawArc method is:</p>
+<pre class="literal-block">
+void DrawArc( DrawingWand *drawing_wand, const double sx, const double sy, const double ex,
+ const double ey, const double sd, const double ed );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>sx:</dt>
+<dd>starting x ordinate of bounding rectangle</dd>
+<dt>sy:</dt>
+<dd>starting y ordinate of bounding rectangle</dd>
+<dt>ex:</dt>
+<dd>ending x ordinate of bounding rectangle</dd>
+<dt>ey:</dt>
+<dd>ending y ordinate of bounding rectangle</dd>
+<dt>sd:</dt>
+<dd>starting degrees of rotation</dd>
+<dt>ed:</dt>
+<dd>ending degrees of rotation</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawbezier">
+<h1><a class="toc-backref" href="#id233">DrawBezier</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawBezier( DrawingWand *drawing_wand, const unsigned long number_coordinates,
+ const <a class="reference external" href="../api/types.html#pointinfo">PointInfo</a> *coordinates );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>DrawBezier() draws a bezier curve through a set of points on the image.</p>
+<p>The format of the DrawBezier method is:</p>
+<pre class="literal-block">
+void DrawBezier( DrawingWand *drawing_wand, const unsigned long number_coordinates,
+ const <a class="reference external" href="../api/types.html#pointinfo">PointInfo</a> *coordinates );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>number_coordinates:</dt>
+<dd>number of coordinates</dd>
+<dt>coordinates:</dt>
+<dd>coordinates</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawcircle">
+<h1><a class="toc-backref" href="#id234">DrawCircle</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawCircle( DrawingWand *drawing_wand, const double ox, const double oy, const double px,
+ const double py );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>DrawCircle() draws a circle on the image.</p>
+<p>The format of the DrawCircle method is:</p>
+<pre class="literal-block">
+void DrawCircle( DrawingWand *drawing_wand, const double ox, const double oy, const double px,
+ const double py );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>ox:</dt>
+<dd>origin x ordinate</dd>
+<dt>oy:</dt>
+<dd>origin y ordinate</dd>
+<dt>px:</dt>
+<dd>perimeter x ordinate</dd>
+<dt>py:</dt>
+<dd>perimeter y ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawclearexception">
+<h1><a class="toc-backref" href="#id235">DrawClearException</a></h1>
+<div class="section" id="id15">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail DrawClearException( DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id16">
+<h2>Description</h2>
+<p>DrawClearException() clears any existing exception from the drawing wand.</p>
+<p>The format of the DrawGetException method is:</p>
+<pre class="literal-block">
+MagickPassFail DrawClearException( DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetclippath">
+<h1><a class="toc-backref" href="#id236">DrawGetClipPath</a></h1>
+<div class="section" id="id17">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+char *DrawGetClipPath( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id18">
+<h2>Description</h2>
+<p>DrawGetClipPath() obtains the current clipping path ID. The value returned
+must be deallocated by the user when it is no longer needed.</p>
+<p>The format of the DrawGetClipPath method is:</p>
+<pre class="literal-block">
+char *DrawGetClipPath( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetclippath">
+<h1><a class="toc-backref" href="#id237">DrawSetClipPath</a></h1>
+<div class="section" id="id19">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetClipPath( DrawingWand *drawing_wand, const char *clip_path );
+</pre>
+</div>
+<div class="section" id="id20">
+<h2>Description</h2>
+<p>DrawSetClipPath() associates a named clipping path with the image. Only
+the areas drawn on by the clipping path will be modified as long as it
+remains in effect.</p>
+<p>The format of the DrawSetClipPath method is:</p>
+<pre class="literal-block">
+void DrawSetClipPath( DrawingWand *drawing_wand, const char *clip_path );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>clip_path:</dt>
+<dd>name of clipping path to associate with image</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetcliprule">
+<h1><a class="toc-backref" href="#id238">DrawGetClipRule</a></h1>
+<div class="section" id="id21">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#fillrule">FillRule</a> DrawGetClipRule( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id22">
+<h2>Description</h2>
+<p>DrawGetClipRule() returns the current polygon fill rule to be used by the
+clipping path.</p>
+<p>The format of the DrawGetClipRule method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#fillrule">FillRule</a> DrawGetClipRule( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetcliprule">
+<h1><a class="toc-backref" href="#id239">DrawSetClipRule</a></h1>
+<div class="section" id="id23">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetClipRule( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#fillrule">FillRule</a> fill_rule );
+</pre>
+</div>
+<div class="section" id="id24">
+<h2>Description</h2>
+<p>DrawSetClipRule() set the polygon fill rule to be used by the clipping path.</p>
+<p>The format of the DrawSetClipRule method is:</p>
+<pre class="literal-block">
+void DrawSetClipRule( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#fillrule">FillRule</a> fill_rule );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>fill_rule:</dt>
+<dd>fill rule (EvenOddRule or NonZeroRule)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetclipunits">
+<h1><a class="toc-backref" href="#id240">DrawGetClipUnits</a></h1>
+<div class="section" id="id25">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#clippathunits">ClipPathUnits</a> DrawGetClipUnits( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id26">
+<h2>Description</h2>
+<p>DrawGetClipUnits() returns the interpretation of clip path units.</p>
+<p>The format of the DrawGetClipUnits method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#clippathunits">ClipPathUnits</a> DrawGetClipUnits( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetexception">
+<h1><a class="toc-backref" href="#id241">DrawGetException</a></h1>
+<div class="section" id="id27">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+char *DrawGetException( const DrawingWand *drawing_wand, <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> *severity );
+</pre>
+</div>
+<div class="section" id="id28">
+<h2>Description</h2>
+<p>DrawGetException() obtains error information associated with the last
+exception (if any). If an exception did occur, an allocated text string
+is returned which contains a detailed description of the exception. This
+string must be deallocated by the user once it is no longer needed.</p>
+<p>The format of the DrawGetException method is:</p>
+<pre class="literal-block">
+char *DrawGetException( const DrawingWand *drawing_wand, <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> *severity );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>severity:</dt>
+<dd>Enumeration corresponding to last thrown exception.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetclipunits">
+<h1><a class="toc-backref" href="#id242">DrawSetClipUnits</a></h1>
+<div class="section" id="id29">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetClipUnits( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#clippathunits">ClipPathUnits</a> clip_units );
+</pre>
+</div>
+<div class="section" id="id30">
+<h2>Description</h2>
+<p>DrawSetClipUnits() sets the interpretation of clip path units.</p>
+<p>The format of the DrawSetClipUnits method is:</p>
+<pre class="literal-block">
+void DrawSetClipUnits( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#clippathunits">ClipPathUnits</a> clip_units );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>clip_units:</dt>
+<dd>units to use (UserSpace, UserSpaceOnUse, or ObjectBoundingBox)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawcolor">
+<h1><a class="toc-backref" href="#id243">DrawColor</a></h1>
+<div class="section" id="id31">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawColor( DrawingWand *drawing_wand, const double x, const double y,
+ const <a class="reference external" href="../api/types.html#paintmethod">PaintMethod</a> paintMethod );
+</pre>
+</div>
+<div class="section" id="id32">
+<h2>Description</h2>
+<p>DrawColor() draws color on image using the current fill color, starting at
+specified position, and using specified paint method. The available paint
+methods are:</p>
+<p>PointMethod: Recolors the target pixel
+ReplaceMethod: Recolor any pixel that matches the target pixel.
+FloodfillMethod: Recolors target pixels and matching neighbors.
+FillToBorderMethod: Recolor target pixels and neighbors not matching
+ResetMethod: Recolor all pixels.</p>
+<p>The format of the DrawColor method is:</p>
+<pre class="literal-block">
+void DrawColor( DrawingWand *drawing_wand, const double x, const double y,
+ const <a class="reference external" href="../api/types.html#paintmethod">PaintMethod</a> paintMethod );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x:</dt>
+<dd>x ordinate</dd>
+<dt>y:</dt>
+<dd>y ordinate</dd>
+<dt>paintMethod:</dt>
+<dd>paint method</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawcomment">
+<h1><a class="toc-backref" href="#id244">DrawComment</a></h1>
+<div class="section" id="id33">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawComment( DrawingWand *drawing_wand, const char *comment );
+</pre>
+</div>
+<div class="section" id="id34">
+<h2>Description</h2>
+<p>DrawComment() adds a comment to a vector output stream.</p>
+<p>The format of the DrawComment method is:</p>
+<pre class="literal-block">
+void DrawComment( DrawingWand *drawing_wand, const char *comment );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>comment:</dt>
+<dd>comment text</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawellipse">
+<h1><a class="toc-backref" href="#id245">DrawEllipse</a></h1>
+<div class="section" id="id35">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawEllipse( DrawingWand *drawing_wand, const double ox, const double oy, const double rx,
+ const double ry, const double start, const double end );
+</pre>
+</div>
+<div class="section" id="id36">
+<h2>Description</h2>
+<p>DrawEllipse() draws an ellipse on the image.</p>
+<p>The format of the DrawEllipse method is:</p>
+<pre class="literal-block">
+void DrawEllipse( DrawingWand *drawing_wand, const double ox, const double oy, const double rx,
+ const double ry, const double start, const double end );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>ox:</dt>
+<dd>origin x ordinate</dd>
+<dt>oy:</dt>
+<dd>origin y ordinate</dd>
+<dt>rx:</dt>
+<dd>radius in x</dd>
+<dt>ry:</dt>
+<dd>radius in y</dd>
+<dt>start:</dt>
+<dd>starting rotation in degrees</dd>
+<dt>end:</dt>
+<dd>ending rotation in degrees</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfillcolor">
+<h1><a class="toc-backref" href="#id246">DrawGetFillColor</a></h1>
+<div class="section" id="id37">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawGetFillColor( const DrawingWand *drawing_wand, PixelWand *fill_color );
+</pre>
+</div>
+<div class="section" id="id38">
+<h2>Description</h2>
+<p>DrawGetFillColor() returns the fill color used for drawing filled objects.</p>
+<p>The format of the DrawGetFillColor method is:</p>
+<pre class="literal-block">
+void DrawGetFillColor( const DrawingWand *drawing_wand, PixelWand *fill_color );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>fill_color:</dt>
+<dd>Return the fill color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfillcolor">
+<h1><a class="toc-backref" href="#id247">DrawSetFillColor</a></h1>
+<div class="section" id="id39">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFillColor( DrawingWand *drawing_wand, const PixelWand *fill_wand );
+</pre>
+</div>
+<div class="section" id="id40">
+<h2>Description</h2>
+<p>DrawSetFillColor() sets the fill color to be used for drawing filled objects.</p>
+<p>The format of the DrawSetFillColor method is:</p>
+<pre class="literal-block">
+void DrawSetFillColor( DrawingWand *drawing_wand, const PixelWand *fill_wand );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>fill_wand:</dt>
+<dd>fill wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfillpatternurl">
+<h1><a class="toc-backref" href="#id248">DrawSetFillPatternURL</a></h1>
+<div class="section" id="id41">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFillPatternURL( DrawingWand *drawing_wand, const char *fill_url );
+</pre>
+</div>
+<div class="section" id="id42">
+<h2>Description</h2>
+<p>DrawSetFillPatternURL() sets the URL to use as a fill pattern for filling
+objects. Only local URLs ("#identifier") are supported at this time. These
+local URLs are normally created by defining a named fill pattern with
+DrawPushPattern/DrawPopPattern.</p>
+<p>The format of the DrawSetFillPatternURL method is:</p>
+<pre class="literal-block">
+void DrawSetFillPatternURL( DrawingWand *drawing_wand, const char *fill_url );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>fill_url:</dt>
+<dd>URL to use to obtain fill pattern.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfillopacity">
+<h1><a class="toc-backref" href="#id249">DrawGetFillOpacity</a></h1>
+<div class="section" id="id43">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double DrawGetFillOpacity( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id44">
+<h2>Description</h2>
+<p>DrawGetFillOpacity() returns the opacity used when drawing using the fill
+color or fill texture. Fully opaque is 1.0.</p>
+<p>The format of the DrawGetFillOpacity method is:</p>
+<pre class="literal-block">
+double DrawGetFillOpacity( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfillopacity">
+<h1><a class="toc-backref" href="#id250">DrawSetFillOpacity</a></h1>
+<div class="section" id="id45">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFillOpacity( DrawingWand *drawing_wand, const double fill_opacity );
+</pre>
+</div>
+<div class="section" id="id46">
+<h2>Description</h2>
+<p>DrawSetFillOpacity() sets the opacity to use when drawing using the fill
+color or fill texture. Fully opaque is 1.0.</p>
+<p>The format of the DrawSetFillOpacity method is:</p>
+<pre class="literal-block">
+void DrawSetFillOpacity( DrawingWand *drawing_wand, const double fill_opacity );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>fill_opacity:</dt>
+<dd>fill opacity</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfillrule">
+<h1><a class="toc-backref" href="#id251">DrawGetFillRule</a></h1>
+<div class="section" id="id47">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#fillrule">FillRule</a> DrawGetFillRule( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id48">
+<h2>Description</h2>
+<p>DrawGetFillRule() returns the fill rule used while drawing polygons.</p>
+<p>The format of the DrawGetFillRule method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#fillrule">FillRule</a> DrawGetFillRule( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfillrule">
+<h1><a class="toc-backref" href="#id252">DrawSetFillRule</a></h1>
+<div class="section" id="id49">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFillRule( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#fillrule">FillRule</a> fill_rule );
+</pre>
+</div>
+<div class="section" id="id50">
+<h2>Description</h2>
+<p>DrawSetFillRule() sets the fill rule to use while drawing polygons.</p>
+<p>The format of the DrawSetFillRule method is:</p>
+<pre class="literal-block">
+void DrawSetFillRule( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#fillrule">FillRule</a> fill_rule );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>fill_rule:</dt>
+<dd>fill rule (EvenOddRule or NonZeroRule)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfont">
+<h1><a class="toc-backref" href="#id253">DrawGetFont</a></h1>
+<div class="section" id="id51">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+char *DrawGetFont( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id52">
+<h2>Description</h2>
+<p>DrawGetFont() returns a null-terminaged string specifying the font used
+when annotating with text. The value returned must be freed by the user
+when no longer needed.</p>
+<p>The format of the DrawGetFont method is:</p>
+<pre class="literal-block">
+char *DrawGetFont( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfont">
+<h1><a class="toc-backref" href="#id254">DrawSetFont</a></h1>
+<div class="section" id="id53">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFont( DrawingWand *drawing_wand, const char *font_name );
+</pre>
+</div>
+<div class="section" id="id54">
+<h2>Description</h2>
+<p>DrawSetFont() sets the fully-sepecified font to use when annotating with
+text.</p>
+<p>The format of the DrawSetFont method is:</p>
+<pre class="literal-block">
+void DrawSetFont( DrawingWand *drawing_wand, const char *font_name );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>font_name:</dt>
+<dd>font name</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfontfamily">
+<h1><a class="toc-backref" href="#id255">DrawGetFontFamily</a></h1>
+<div class="section" id="id55">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+char *DrawGetFontFamily( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id56">
+<h2>Description</h2>
+<p>DrawGetFontFamily() returns the font family to use when annotating with text.
+The value returned must be freed by the user when it is no longer needed.</p>
+<p>The format of the DrawGetFontFamily method is:</p>
+<pre class="literal-block">
+char *DrawGetFontFamily( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfontfamily">
+<h1><a class="toc-backref" href="#id256">DrawSetFontFamily</a></h1>
+<div class="section" id="id57">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFontFamily( DrawingWand *drawing_wand, const char *font_family );
+</pre>
+</div>
+<div class="section" id="id58">
+<h2>Description</h2>
+<p>DrawSetFontFamily() sets the font family to use when annotating with text.</p>
+<p>The format of the DrawSetFontFamily method is:</p>
+<pre class="literal-block">
+void DrawSetFontFamily( DrawingWand *drawing_wand, const char *font_family );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>font_family:</dt>
+<dd>font family</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfontsize">
+<h1><a class="toc-backref" href="#id257">DrawGetFontSize</a></h1>
+<div class="section" id="id59">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double DrawGetFontSize( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id60">
+<h2>Description</h2>
+<p>DrawGetFontSize() returns the font pointsize used when annotating with text.</p>
+<p>The format of the DrawGetFontSize method is:</p>
+<pre class="literal-block">
+double DrawGetFontSize( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfontsize">
+<h1><a class="toc-backref" href="#id258">DrawSetFontSize</a></h1>
+<div class="section" id="id61">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFontSize( DrawingWand *drawing_wand, const double pointsize );
+</pre>
+</div>
+<div class="section" id="id62">
+<h2>Description</h2>
+<p>DrawSetFontSize() sets the font pointsize to use when annotating with text.</p>
+<p>The format of the DrawSetFontSize method is:</p>
+<pre class="literal-block">
+void DrawSetFontSize( DrawingWand *drawing_wand, const double pointsize );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>pointsize:</dt>
+<dd>text pointsize</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfontstretch">
+<h1><a class="toc-backref" href="#id259">DrawGetFontStretch</a></h1>
+<div class="section" id="id63">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#stretchtype">StretchType</a> DrawGetFontStretch( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id64">
+<h2>Description</h2>
+<p>DrawGetFontStretch() returns the font stretch used when annotating with text.</p>
+<p>The format of the DrawGetFontStretch method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#stretchtype">StretchType</a> DrawGetFontStretch( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfontstretch">
+<h1><a class="toc-backref" href="#id260">DrawSetFontStretch</a></h1>
+<div class="section" id="id65">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFontStretch( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#stretchtype">StretchType</a> font_stretch );
+</pre>
+</div>
+<div class="section" id="id66">
+<h2>Description</h2>
+<p>DrawSetFontStretch() sets the font stretch to use when annotating with text.
+The AnyStretch enumeration acts as a wild-card "don't care" option.</p>
+<p>The format of the DrawSetFontStretch method is:</p>
+<pre class="literal-block">
+void DrawSetFontStretch( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#stretchtype">StretchType</a> font_stretch );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>font_stretch:</dt>
+<dd>font stretch (NormalStretch, UltraCondensedStretch,
+CondensedStretch, SemiCondensedStretch,
+SemiExpandedStretch, ExpandedStretch,
+ExtraExpandedStretch, UltraExpandedStretch, AnyStretch)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfontstyle">
+<h1><a class="toc-backref" href="#id261">DrawGetFontStyle</a></h1>
+<div class="section" id="id67">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#styletype">StyleType</a> DrawGetFontStyle( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id68">
+<h2>Description</h2>
+<p>DrawGetFontStyle() returns the font style used when annotating with text.</p>
+<p>The format of the DrawGetFontStyle method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#styletype">StyleType</a> DrawGetFontStyle( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfontstyle">
+<h1><a class="toc-backref" href="#id262">DrawSetFontStyle</a></h1>
+<div class="section" id="id69">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFontStyle( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#styletype">StyleType</a> style );
+</pre>
+</div>
+<div class="section" id="id70">
+<h2>Description</h2>
+<p>DrawSetFontStyle() sets the font style to use when annotating with text.
+The AnyStyle enumeration acts as a wild-card "don't care" option.</p>
+<p>The format of the DrawSetFontStyle method is:</p>
+<pre class="literal-block">
+void DrawSetFontStyle( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#styletype">StyleType</a> style );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>style:</dt>
+<dd>font style (NormalStyle, ItalicStyle, ObliqueStyle, AnyStyle)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetfontweight">
+<h1><a class="toc-backref" href="#id263">DrawGetFontWeight</a></h1>
+<div class="section" id="id71">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long DrawGetFontWeight( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id72">
+<h2>Description</h2>
+<p>DrawGetFontWeight() returns the font weight used when annotating with text.</p>
+<p>The format of the DrawGetFontWeight method is:</p>
+<pre class="literal-block">
+unsigned long DrawGetFontWeight( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetfontweight">
+<h1><a class="toc-backref" href="#id264">DrawSetFontWeight</a></h1>
+<div class="section" id="id73">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetFontWeight( DrawingWand *drawing_wand, const unsigned long font_weight );
+</pre>
+</div>
+<div class="section" id="id74">
+<h2>Description</h2>
+<p>DrawSetFontWeight() sets the font weight to use when annotating with text.</p>
+<p>The format of the DrawSetFontWeight method is:</p>
+<pre class="literal-block">
+void DrawSetFontWeight( DrawingWand *drawing_wand, const unsigned long font_weight );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>font_weight:</dt>
+<dd>font weight (valid range 100-900)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetgravity">
+<h1><a class="toc-backref" href="#id265">DrawGetGravity</a></h1>
+<div class="section" id="id75">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#gravitytype">GravityType</a> DrawGetGravity( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id76">
+<h2>Description</h2>
+<p>DrawGetGravity() returns the text placement gravity used when annotating
+with text.</p>
+<p>The format of the DrawGetGravity method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#gravitytype">GravityType</a> DrawGetGravity( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetgravity">
+<h1><a class="toc-backref" href="#id266">DrawSetGravity</a></h1>
+<div class="section" id="id77">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetGravity( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#gravitytype">GravityType</a> gravity );
+</pre>
+</div>
+<div class="section" id="id78">
+<h2>Description</h2>
+<p>DrawSetGravity() sets the text placement gravity to use when annotating
+with text.</p>
+<p>The format of the DrawSetGravity method is:</p>
+<pre class="literal-block">
+void DrawSetGravity( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#gravitytype">GravityType</a> gravity );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>gravity:</dt>
+<dd>positioning gravity (NorthWestGravity, NorthGravity,
+NorthEastGravity, WestGravity, CenterGravity,
+EastGravity, SouthWestGravity, SouthGravity,
+SouthEastGravity)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawcomposite">
+<h1><a class="toc-backref" href="#id267">DrawComposite</a></h1>
+<div class="section" id="id79">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawComposite( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#compositeoperator">CompositeOperator</a> composite_operator,
+ const double x, const double y, const double width, const double height,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+</div>
+<div class="section" id="id80">
+<h2>Description</h2>
+<p>DrawComposite() composites an image onto the current image, using the
+specified composition operator, specified position, and at the specified
+size.</p>
+<p>The format of the DrawComposite method is:</p>
+<pre class="literal-block">
+void DrawComposite( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#compositeoperator">CompositeOperator</a> composite_operator,
+ const double x, const double y, const double width, const double height,
+ const <a class="reference external" href="../api/types.html#image">Image</a> *image );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>composite_operator:</dt>
+<dd>composition operator</dd>
+<dt>x:</dt>
+<dd>x ordinate of top left corner</dd>
+<dt>y:</dt>
+<dd>y ordinate of top left corner</dd>
+<dt>width:</dt>
+<dd>Width to resize image to prior to compositing. Specify zero to
+use existing width.</dd>
+<dt>height:</dt>
+<dd>Height to resize image to prior to compositing. Specify zero
+to use existing height.</dd>
+<dt>image:</dt>
+<dd>Image to composite</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawline">
+<h1><a class="toc-backref" href="#id268">DrawLine</a></h1>
+<div class="section" id="id81">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawLine( DrawingWand *drawing_wand, const double sx, const double sy, const double ex,
+ const double ey );
+</pre>
+</div>
+<div class="section" id="id82">
+<h2>Description</h2>
+<p>DrawLine() draws a line on the image using the current stroke color,
+stroke opacity, and stroke width.</p>
+<p>The format of the DrawLine method is:</p>
+<pre class="literal-block">
+void DrawLine( DrawingWand *drawing_wand, const double sx, const double sy, const double ex,
+ const double ey );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>sx:</dt>
+<dd>starting x ordinate</dd>
+<dt>sy:</dt>
+<dd>starting y ordinate</dd>
+<dt>ex:</dt>
+<dd>ending x ordinate</dd>
+<dt>ey:</dt>
+<dd>ending y ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawmatte">
+<h1><a class="toc-backref" href="#id269">DrawMatte</a></h1>
+<div class="section" id="id83">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawMatte( DrawingWand *drawing_wand, const double x, const double y,
+ const <a class="reference external" href="../api/types.html#paintmethod">PaintMethod</a> paint_method );
+</pre>
+</div>
+<div class="section" id="id84">
+<h2>Description</h2>
+<p>DrawMatte() paints on the image's opacity channel in order to set effected
+pixels to transparent.
+to influence the opacity of pixels. The available paint
+methods are:</p>
+<p>PointMethod: Select the target pixel
+ReplaceMethod: Select any pixel that matches the target pixel.
+FloodfillMethod: Select the target pixel and matching neighbors.
+FillToBorderMethod: Select the target pixel and neighbors not matching
+border color.
+ResetMethod: Select all pixels.</p>
+<p>The format of the DrawMatte method is:</p>
+<pre class="literal-block">
+void DrawMatte( DrawingWand *drawing_wand, const double x, const double y,
+ const <a class="reference external" href="../api/types.html#paintmethod">PaintMethod</a> paint_method );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x:</dt>
+<dd>x ordinate</dd>
+<dt>y:</dt>
+<dd>y ordinate</dd>
+</dl>
+<p>o paint_method:</p>
+</div>
+</div>
+<div class="section" id="drawpathclose">
+<h1><a class="toc-backref" href="#id270">DrawPathClose</a></h1>
+<div class="section" id="id85">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathClose( DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id86">
+<h2>Description</h2>
+<p>DrawPathClose() adds a path element to the current path which closes the
+current subpath by drawing a straight line from the current point to the
+current subpath's most recent starting point (usually, the most recent
+moveto point).</p>
+<p>The format of the DrawPathClose method is:</p>
+<pre class="literal-block">
+void DrawPathClose( DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathcurvetoabsolute">
+<h1><a class="toc-backref" href="#id271">DrawPathCurveToAbsolute</a></h1>
+<div class="section" id="id87">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathCurveToAbsolute( DrawingWand *drawing_wand, const double x1, const double y1,
+ const double x2, const double y2, const double x,
+ const double y );
+</pre>
+</div>
+<div class="section" id="id88">
+<h2>Description</h2>
+<p>DrawPathCurveToAbsolute() draws a cubic Bezier curve from the current
+point to (x,y) using (x1,y1) as the control point at the beginning of
+the curve and (x2,y2) as the control point at the end of the curve using
+absolute coordinates. At the end of the command, the new current point
+becomes the final (x,y) coordinate pair used in the polybezier.</p>
+<p>The format of the DrawPathCurveToAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathCurveToAbsolute( DrawingWand *drawing_wand, const double x1, const double y1,
+ const double x2, const double y2, const double x,
+ const double y );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x1:</dt>
+<dd>x ordinate of control point for curve beginning</dd>
+<dt>y1:</dt>
+<dd>y ordinate of control point for curve beginning</dd>
+<dt>x2:</dt>
+<dd>x ordinate of control point for curve ending</dd>
+<dt>y2:</dt>
+<dd>y ordinate of control point for curve ending</dd>
+<dt>x:</dt>
+<dd>x ordinate of the end of the curve</dd>
+<dt>y:</dt>
+<dd>y ordinate of the end of the curve</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathcurvetorelative">
+<h1><a class="toc-backref" href="#id272">DrawPathCurveToRelative</a></h1>
+<div class="section" id="id89">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathCurveToRelative( DrawingWand *drawing_wand, const double x1, const double y1,
+ const double x2, const double y2, const double x,
+ const double y );
+</pre>
+</div>
+<div class="section" id="id90">
+<h2>Description</h2>
+<p>DrawPathCurveToRelative() draws a cubic Bezier curve from the current
+point to (x,y) using (x1,y1) as the control point at the beginning of
+the curve and (x2,y2) as the control point at the end of the curve using
+relative coordinates. At the end of the command, the new current point
+becomes the final (x,y) coordinate pair used in the polybezier.</p>
+<p>The format of the DrawPathCurveToRelative method is:</p>
+<pre class="literal-block">
+void DrawPathCurveToRelative( DrawingWand *drawing_wand, const double x1, const double y1,
+ const double x2, const double y2, const double x,
+ const double y );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x1:</dt>
+<dd>x ordinate of control point for curve beginning</dd>
+<dt>y1:</dt>
+<dd>y ordinate of control point for curve beginning</dd>
+<dt>x2:</dt>
+<dd>x ordinate of control point for curve ending</dd>
+<dt>y2:</dt>
+<dd>y ordinate of control point for curve ending</dd>
+<dt>x:</dt>
+<dd>x ordinate of the end of the curve</dd>
+<dt>y:</dt>
+<dd>y ordinate of the end of the curve</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathcurvetoquadraticbezierabsolute">
+<h1><a class="toc-backref" href="#id273">DrawPathCurveToQuadraticBezierAbsolute</a></h1>
+<div class="section" id="id91">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathCurveToQuadraticBezierAbsolute( DrawingWand *drawing_wand, const double x1,
+ const double y1, onst double x, const double y );
+</pre>
+</div>
+<div class="section" id="id92">
+<h2>Description</h2>
+<p>DrawPathCurveToQuadraticBezierAbsolute() draws a quadratic Bezier curve
+from the current point to (x,y) using (x1,y1) as the control point using
+absolute coordinates. At the end of the command, the new current point
+becomes the final (x,y) coordinate pair used in the polybezier.</p>
+<p>The format of the DrawPathCurveToQuadraticBezierAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathCurveToQuadraticBezierAbsolute( DrawingWand *drawing_wand, const double x1,
+ const double y1, onst double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x1:</dt>
+<dd>x ordinate of the control point</dd>
+<dt>y1:</dt>
+<dd>y ordinate of the control point</dd>
+<dt>x:</dt>
+<dd>x ordinate of final point</dd>
+<dt>y:</dt>
+<dd>y ordinate of final point</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathcurvetoquadraticbezierrelative">
+<h1><a class="toc-backref" href="#id274">DrawPathCurveToQuadraticBezierRelative</a></h1>
+<div class="section" id="id93">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathCurveToQuadraticBezierRelative( DrawingWand *drawing_wand, const double x1,
+ const double y1, const double x,
+ const double y );
+</pre>
+</div>
+<div class="section" id="id94">
+<h2>Description</h2>
+<p>DrawPathCurveToQuadraticBezierRelative() draws a quadratic Bezier curve
+from the current point to (x,y) using (x1,y1) as the control point using
+relative coordinates. At the end of the command, the new current point
+becomes the final (x,y) coordinate pair used in the polybezier.</p>
+<p>The format of the DrawPathCurveToQuadraticBezierRelative method is:</p>
+<pre class="literal-block">
+void DrawPathCurveToQuadraticBezierRelative( DrawingWand *drawing_wand, const double x1,
+ const double y1, const double x,
+ const double y );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x1:</dt>
+<dd>x ordinate of the control point</dd>
+<dt>y1:</dt>
+<dd>y ordinate of the control point</dd>
+<dt>x:</dt>
+<dd>x ordinate of final point</dd>
+<dt>y:</dt>
+<dd>y ordinate of final point</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathcurvetoquadraticbeziersmoothabsolute">
+<h1><a class="toc-backref" href="#id275">DrawPathCurveToQuadraticBezierSmoothAbsolute</a></h1>
+<div class="section" id="id95">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathCurveToQuadraticBezierSmoothAbsolute( DrawingWand *drawing_wand, const double x,
+ const double y );
+</pre>
+</div>
+<div class="section" id="id96">
+<h2>Description</h2>
+<p>DrawPathCurveToQuadraticBezierSmoothAbsolute() draws a quadratic
+Bezier curve (using absolute coordinates) from the current point to
+(x,y). The control point is assumed to be the reflection of the
+control point on the previous command relative to the current
+point. (If there is no previous command or if the previous command was
+not a DrawPathCurveToQuadraticBezierAbsolute,
+DrawPathCurveToQuadraticBezierRelative,
+DrawPathCurveToQuadraticBezierSmoothAbsolute or
+DrawPathCurveToQuadraticBezierSmoothRelative, assume the control point
+is coincident with the current point.). At the end of the command, the
+new current point becomes the final (x,y) coordinate pair used in the
+polybezier.</p>
+<p>The format of the DrawPathCurveToQuadraticBezierSmoothAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathCurveToQuadraticBezierSmoothAbsolute( DrawingWand *drawing_wand, const double x,
+ const double y );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x:</dt>
+<dd>x ordinate of final point</dd>
+<dt>y:</dt>
+<dd>y ordinate of final point</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathcurvetoquadraticbeziersmoothrelative">
+<h1><a class="toc-backref" href="#id276">DrawPathCurveToQuadraticBezierSmoothRelative</a></h1>
+<div class="section" id="id97">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathCurveToQuadraticBezierSmoothRelative( DrawingWand *drawing_wand, const double x,
+ const double y );
+</pre>
+</div>
+<div class="section" id="id98">
+<h2>Description</h2>
+<p>DrawPathCurveToQuadraticBezierSmoothRelative() draws a quadratic
+Bezier curve (using relative coordinates) from the current point to
+(x,y). The control point is assumed to be the reflection of the
+control point on the previous command relative to the current
+point. (If there is no previous command or if the previous command was
+not a DrawPathCurveToQuadraticBezierAbsolute,
+DrawPathCurveToQuadraticBezierRelative,
+DrawPathCurveToQuadraticBezierSmoothAbsolute or
+DrawPathCurveToQuadraticBezierSmoothRelative, assume the control point
+is coincident with the current point.). At the end of the command, the
+new current point becomes the final (x,y) coordinate pair used in the
+polybezier.</p>
+<p>The format of the DrawPathCurveToQuadraticBezierSmoothRelative method is:</p>
+<pre class="literal-block">
+void DrawPathCurveToQuadraticBezierSmoothRelative( DrawingWand *drawing_wand, const double x,
+ const double y );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x:</dt>
+<dd>x ordinate of final point</dd>
+<dt>y:</dt>
+<dd>y ordinate of final point</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathcurvetosmoothabsolute">
+<h1><a class="toc-backref" href="#id277">DrawPathCurveToSmoothAbsolute</a></h1>
+<div class="section" id="id99">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathCurveToSmoothAbsolute( DrawingWand *drawing_wand, const double x2const double y2,
+ const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id100">
+<h2>Description</h2>
+<p>DrawPathCurveToSmoothAbsolute() draws a cubic Bezier curve from the
+current point to (x,y) using absolute coordinates. The first control
+point is assumed to be the reflection of the second control point on
+the previous command relative to the current point. (If there is no
+previous command or if the previous command was not an
+DrawPathCurveToAbsolute, DrawPathCurveToRelative,
+DrawPathCurveToSmoothAbsolute or DrawPathCurveToSmoothRelative, assume
+the first control point is coincident with the current point.) (x2,y2)
+is the second control point (i.e., the control point at the end of the
+curve). At the end of the command, the new current point becomes the
+final (x,y) coordinate pair used in the polybezier.</p>
+<p>The format of the DrawPathCurveToSmoothAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathCurveToSmoothAbsolute( DrawingWand *drawing_wand, const double x2const double y2,
+ const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x2:</dt>
+<dd>x ordinate of second control point</dd>
+<dt>y2:</dt>
+<dd>y ordinate of second control point</dd>
+<dt>x:</dt>
+<dd>x ordinate of termination point</dd>
+<dt>y:</dt>
+<dd>y ordinate of termination point</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathcurvetosmoothrelative">
+<h1><a class="toc-backref" href="#id278">DrawPathCurveToSmoothRelative</a></h1>
+<div class="section" id="id101">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathCurveToSmoothRelative( DrawingWand *drawing_wand, const double x2,
+ const double y2, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id102">
+<h2>Description</h2>
+<p>DrawPathCurveToSmoothRelative() draws a cubic Bezier curve from the
+current point to (x,y) using relative coordinates. The first control
+point is assumed to be the reflection of the second control point on
+the previous command relative to the current point. (If there is no
+previous command or if the previous command was not an
+DrawPathCurveToAbsolute, DrawPathCurveToRelative,
+DrawPathCurveToSmoothAbsolute or DrawPathCurveToSmoothRelative, assume
+the first control point is coincident with the current point.) (x2,y2)
+is the second control point (i.e., the control point at the end of the
+curve). At the end of the command, the new current point becomes the
+final (x,y) coordinate pair used in the polybezier.</p>
+<p>The format of the DrawPathCurveToSmoothRelative method is:</p>
+<pre class="literal-block">
+void DrawPathCurveToSmoothRelative( DrawingWand *drawing_wand, const double x2,
+ const double y2, const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x2:</dt>
+<dd>x ordinate of second control point</dd>
+<dt>y2:</dt>
+<dd>y ordinate of second control point</dd>
+<dt>x:</dt>
+<dd>x ordinate of termination point</dd>
+<dt>y:</dt>
+<dd>y ordinate of termination point</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathellipticarcabsolute">
+<h1><a class="toc-backref" href="#id279">DrawPathEllipticArcAbsolute</a></h1>
+<div class="section" id="id103">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathEllipticArcAbsolute( DrawingWand *drawing_wand, const double rx, const double ry,
+ const double x_axis_rotation,
+ unsigned int large_arc_flag, unsigned int sweep_flag,
+ const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id104">
+<h2>Description</h2>
+<p>DrawPathEllipticArcAbsolute() draws an elliptical arc from the current
+point to (x, y) using absolute coordinates. The size and orientation
+of the ellipse are defined by two radii (rx, ry) and an
+xAxisRotation, which indicates how the ellipse as a whole is rotated
+relative to the current coordinate system. The center (cx, cy) of the
+ellipse is calculated automatically to satisfy the constraints imposed
+by the other parameters. largeArcFlag and sweepFlag contribute to the
+automatic calculations and help determine how the arc is drawn. If
+largeArcFlag is true then draw the larger of the available arcs. If
+sweepFlag is true, then draw the arc matching a clock-wise rotation.</p>
+<p>The format of the DrawPathEllipticArcAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathEllipticArcAbsolute( DrawingWand *drawing_wand, const double rx, const double ry,
+ const double x_axis_rotation,
+ unsigned int large_arc_flag, unsigned int sweep_flag,
+ const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>rx:</dt>
+<dd>x radius</dd>
+<dt>ry:</dt>
+<dd>y radius</dd>
+<dt>x_axis_rotation:</dt>
+<dd>indicates how the ellipse as a whole is rotated
+relative to the current coordinate system</dd>
+<dt>large_arc_flag:</dt>
+<dd>If non-zero (true) then draw the larger of the
+available arcs</dd>
+<dt>sweep_flag:</dt>
+<dd>If non-zero (true) then draw the arc matching a
+clock-wise rotation</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathellipticarcrelative">
+<h1><a class="toc-backref" href="#id280">DrawPathEllipticArcRelative</a></h1>
+<div class="section" id="id105">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathEllipticArcRelative( DrawingWand *drawing_wand, const double rx, const double ry,
+ const double x_axis_rotation,
+ unsigned int large_arc_flag, unsigned int sweep_flag,
+ const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id106">
+<h2>Description</h2>
+<p>DrawPathEllipticArcRelative() draws an elliptical arc from the current
+point to (x, y) using relative coordinates. The size and orientation
+of the ellipse are defined by two radii (rx, ry) and an
+xAxisRotation, which indicates how the ellipse as a whole is rotated
+relative to the current coordinate system. The center (cx, cy) of the
+ellipse is calculated automatically to satisfy the constraints imposed
+by the other parameters. largeArcFlag and sweepFlag contribute to the
+automatic calculations and help determine how the arc is drawn. If
+largeArcFlag is true then draw the larger of the available arcs. If
+sweepFlag is true, then draw the arc matching a clock-wise rotation.</p>
+<p>The format of the DrawPathEllipticArcRelative method is:</p>
+<pre class="literal-block">
+void DrawPathEllipticArcRelative( DrawingWand *drawing_wand, const double rx, const double ry,
+ const double x_axis_rotation,
+ unsigned int large_arc_flag, unsigned int sweep_flag,
+ const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>rx:</dt>
+<dd>x radius</dd>
+<dt>ry:</dt>
+<dd>y radius</dd>
+<dt>x_axis_rotation:</dt>
+<dd>indicates how the ellipse as a whole is rotated
+relative to the current coordinate system</dd>
+<dt>large_arc_flag:</dt>
+<dd>If non-zero (true) then draw the larger of the
+available arcs</dd>
+<dt>sweep_flag:</dt>
+<dd>If non-zero (true) then draw the arc matching a
+clock-wise rotation</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathfinish">
+<h1><a class="toc-backref" href="#id281">DrawPathFinish</a></h1>
+<div class="section" id="id107">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathFinish( DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id108">
+<h2>Description</h2>
+<p>DrawPathFinish() terminates the current path.</p>
+<p>The format of the DrawPathFinish method is:</p>
+<pre class="literal-block">
+void DrawPathFinish( DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathlinetoabsolute">
+<h1><a class="toc-backref" href="#id282">DrawPathLineToAbsolute</a></h1>
+<div class="section" id="id109">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathLineToAbsolute( DrawingWand *drawing_wand, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id110">
+<h2>Description</h2>
+<p>DrawPathLineToAbsolute() draws a line path from the current point to the
+given coordinate using absolute coordinates. The coordinate then becomes
+the new current point.</p>
+<p>The format of the DrawPathLineToAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathLineToAbsolute( DrawingWand *drawing_wand, const double x, const double y );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x:</dt>
+<dd>target x ordinate</dd>
+<dt>y:</dt>
+<dd>target y ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathlinetorelative">
+<h1><a class="toc-backref" href="#id283">DrawPathLineToRelative</a></h1>
+<div class="section" id="id111">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathLineToRelative( DrawingWand *drawing_wand, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id112">
+<h2>Description</h2>
+<p>DrawPathLineToRelative() draws a line path from the current point to the
+given coordinate using relative coordinates. The coordinate then becomes
+the new current point.</p>
+<p>The format of the DrawPathLineToRelative method is:</p>
+<pre class="literal-block">
+void DrawPathLineToRelative( DrawingWand *drawing_wand, const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x:</dt>
+<dd>target x ordinate</dd>
+<dt>y:</dt>
+<dd>target y ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathlinetohorizontalabsolute">
+<h1><a class="toc-backref" href="#id284">DrawPathLineToHorizontalAbsolute</a></h1>
+<div class="section" id="id113">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathLineToHorizontalAbsolute( DrawingWand *drawing_wand, const PathMode mode,
+ const double x );
+</pre>
+</div>
+<div class="section" id="id114">
+<h2>Description</h2>
+<p>DrawPathLineToHorizontalAbsolute() draws a horizontal line path from the
+current point to the target point using absolute coordinates. The target
+point then becomes the new current point.</p>
+<p>The format of the DrawPathLineToHorizontalAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathLineToHorizontalAbsolute( DrawingWand *drawing_wand, const PathMode mode,
+ const double x );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x:</dt>
+<dd>target x ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathlinetohorizontalrelative">
+<h1><a class="toc-backref" href="#id285">DrawPathLineToHorizontalRelative</a></h1>
+<div class="section" id="id115">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathLineToHorizontalRelative( DrawingWand *drawing_wand, const double x );
+</pre>
+</div>
+<div class="section" id="id116">
+<h2>Description</h2>
+<p>DrawPathLineToHorizontalRelative() draws a horizontal line path from the
+current point to the target point using relative coordinates. The target
+point then becomes the new current point.</p>
+<p>The format of the DrawPathLineToHorizontalRelative method is:</p>
+<pre class="literal-block">
+void DrawPathLineToHorizontalRelative( DrawingWand *drawing_wand, const double x );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x:</dt>
+<dd>target x ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathlinetoverticalabsolute">
+<h1><a class="toc-backref" href="#id286">DrawPathLineToVerticalAbsolute</a></h1>
+<div class="section" id="id117">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathLineToVerticalAbsolute( DrawingWand *drawing_wand, const double y );
+</pre>
+</div>
+<div class="section" id="id118">
+<h2>Description</h2>
+<p>DrawPathLineToVerticalAbsolute() draws a vertical line path from the
+current point to the target point using absolute coordinates. The target
+point then becomes the new current point.</p>
+<p>The format of the DrawPathLineToVerticalAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathLineToVerticalAbsolute( DrawingWand *drawing_wand, const double y );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>y:</dt>
+<dd>target y ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathlinetoverticalrelative">
+<h1><a class="toc-backref" href="#id287">DrawPathLineToVerticalRelative</a></h1>
+<div class="section" id="id119">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathLineToVerticalRelative( DrawingWand *drawing_wand, const double y );
+</pre>
+</div>
+<div class="section" id="id120">
+<h2>Description</h2>
+<p>DrawPathLineToVerticalRelative() draws a vertical line path from the
+current point to the target point using relative coordinates. The target
+point then becomes the new current point.</p>
+<p>The format of the DrawPathLineToVerticalRelative method is:</p>
+<pre class="literal-block">
+void DrawPathLineToVerticalRelative( DrawingWand *drawing_wand, const double y );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>y:</dt>
+<dd>target y ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathmovetoabsolute">
+<h1><a class="toc-backref" href="#id288">DrawPathMoveToAbsolute</a></h1>
+<div class="section" id="id121">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathMoveToAbsolute( DrawingWand *drawing_wand, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id122">
+<h2>Description</h2>
+<p>DrawPathMoveToAbsolute() starts a new sub-path at the given coordinate
+using absolute coordinates. The current point then becomes the
+specified coordinate.</p>
+<p>The format of the DrawPathMoveToAbsolute method is:</p>
+<pre class="literal-block">
+void DrawPathMoveToAbsolute( DrawingWand *drawing_wand, const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x:</dt>
+<dd>target x ordinate</dd>
+<dt>y:</dt>
+<dd>target y ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathmovetorelative">
+<h1><a class="toc-backref" href="#id289">DrawPathMoveToRelative</a></h1>
+<div class="section" id="id123">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathMoveToRelative( DrawingWand *drawing_wand, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id124">
+<h2>Description</h2>
+<p>DrawPathMoveToRelative() starts a new sub-path at the given coordinate
+using relative coordinates. The current point then becomes the
+specified coordinate.</p>
+<p>The format of the DrawPathMoveToRelative method is:</p>
+<pre class="literal-block">
+void DrawPathMoveToRelative( DrawingWand *drawing_wand, const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x:</dt>
+<dd>target x ordinate</dd>
+<dt>y:</dt>
+<dd>target y ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpathstart">
+<h1><a class="toc-backref" href="#id290">DrawPathStart</a></h1>
+<div class="section" id="id125">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPathStart( DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id126">
+<h2>Description</h2>
+<p>DrawPathStart() declares the start of a path drawing list which is terminated
+by a matching DrawPathFinish() command. All other DrawPath commands must
+be enclosed between a DrawPathStart() and a DrawPathFinish() command. This
+is because path drawing commands are subordinate commands and they do not
+function by themselves.</p>
+<p>The format of the DrawPathStart method is:</p>
+<pre class="literal-block">
+void DrawPathStart( DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpeekgraphiccontext">
+<h1><a class="toc-backref" href="#id291">DrawPeekGraphicContext</a></h1>
+<div class="section" id="id127">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#drawinfo">DrawInfo</a> *DrawPeekGraphicContext( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id128">
+<h2>Description</h2>
+<p>DrawPeekGraphicContext() returns the current graphic drawing_wand.</p>
+<p>The format of the DrawPeekGraphicContext method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#drawinfo">DrawInfo</a> *DrawPeekGraphicContext( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpoint">
+<h1><a class="toc-backref" href="#id292">DrawPoint</a></h1>
+<div class="section" id="id129">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPoint( DrawingWand *drawing_wand, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id130">
+<h2>Description</h2>
+<p>DrawPoint() draws a point using the current stroke color and stroke
+thickness at the specified coordinates.</p>
+<p>The format of the DrawPoint method is:</p>
+<pre class="literal-block">
+void DrawPoint( DrawingWand *drawing_wand, const double x, const double y );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x:</dt>
+<dd>target x coordinate</dd>
+<dt>y:</dt>
+<dd>target y coordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpolygon">
+<h1><a class="toc-backref" href="#id293">DrawPolygon</a></h1>
+<div class="section" id="id131">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPolygon( DrawingWand *drawing_wand, const unsigned long number_coordinates,
+ const <a class="reference external" href="../api/types.html#pointinfo">PointInfo</a> *coordinates );
+</pre>
+</div>
+<div class="section" id="id132">
+<h2>Description</h2>
+<p>DrawPolygon() draws a polygon using the current stroke, stroke width, and
+fill color or texture, using the specified array of coordinates.</p>
+<p>The format of the DrawPolygon method is:</p>
+<pre class="literal-block">
+void DrawPolygon( DrawingWand *drawing_wand, const unsigned long number_coordinates,
+ const <a class="reference external" href="../api/types.html#pointinfo">PointInfo</a> *coordinates );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>number_coordinates:</dt>
+<dd>number of coordinates</dd>
+<dt>coordinates:</dt>
+<dd>coordinate array</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpolyline">
+<h1><a class="toc-backref" href="#id294">DrawPolyline</a></h1>
+<div class="section" id="id133">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPolyline( DrawingWand *drawing_wand, const unsigned long number_coordinates,
+ const <a class="reference external" href="../api/types.html#pointinfo">PointInfo</a> *coordinates );
+</pre>
+</div>
+<div class="section" id="id134">
+<h2>Description</h2>
+<p>DrawPolyline() draws a polyline using the current stroke, stroke width, and
+fill color or texture, using the specified array of coordinates.</p>
+<p>The format of the DrawPolyline method is:</p>
+<pre class="literal-block">
+void DrawPolyline( DrawingWand *drawing_wand, const unsigned long number_coordinates,
+ const <a class="reference external" href="../api/types.html#pointinfo">PointInfo</a> *coordinates );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>number_coordinates:</dt>
+<dd>number of coordinates</dd>
+<dt>coordinates:</dt>
+<dd>coordinate array</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpopclippath">
+<h1><a class="toc-backref" href="#id295">DrawPopClipPath</a></h1>
+<div class="section" id="id135">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPopClipPath( DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id136">
+<h2>Description</h2>
+<p>DrawPopClipPath() terminates a clip path definition.</p>
+<p>The format of the DrawPopClipPath method is:</p>
+<pre class="literal-block">
+void DrawPopClipPath( DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpopdefs">
+<h1><a class="toc-backref" href="#id296">DrawPopDefs</a></h1>
+<div class="section" id="id137">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPopDefs( DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id138">
+<h2>Description</h2>
+<p>DrawPopDefs() terminates a definition list</p>
+<p>The format of the DrawPopDefs method is:</p>
+<pre class="literal-block">
+void DrawPopDefs( DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpopgraphiccontext">
+<h1><a class="toc-backref" href="#id297">DrawPopGraphicContext</a></h1>
+<div class="section" id="id139">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPopGraphicContext( DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id140">
+<h2>Description</h2>
+<p>DrawPopGraphicContext() destroys the current drawing_wand returning to the
+previously pushed drawing wand. Multiple drawing wand may exist. It is an
+error to attempt to pop more drawing_wands than have been pushed, and it is
+proper form to pop all drawing_wands which have been pushed.</p>
+<p>The format of the DrawPopGraphicContext method is:</p>
+<pre class="literal-block">
+void DrawPopGraphicContext( DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpoppattern">
+<h1><a class="toc-backref" href="#id298">DrawPopPattern</a></h1>
+<div class="section" id="id141">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPopPattern( DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id142">
+<h2>Description</h2>
+<p>DrawPopPattern() terminates a pattern definition.</p>
+<p>The format of the DrawPopPattern method is:</p>
+<pre class="literal-block">
+void DrawPopPattern( DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpushclippath">
+<h1><a class="toc-backref" href="#id299">DrawPushClipPath</a></h1>
+<div class="section" id="id143">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPushClipPath( DrawingWand *drawing_wand, const char *clip_path_id );
+</pre>
+</div>
+<div class="section" id="id144">
+<h2>Description</h2>
+<p>DrawPushClipPath() starts a clip path definition which is comprized of
+any number of drawing commands and terminated by a DrawPopClipPath()
+command.</p>
+<p>The format of the DrawPushClipPath method is:</p>
+<pre class="literal-block">
+void DrawPushClipPath( DrawingWand *drawing_wand, const char *clip_path_id );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>clip_path_id:</dt>
+<dd>string identifier to associate with the clip path for
+later use.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpushdefs">
+<h1><a class="toc-backref" href="#id300">DrawPushDefs</a></h1>
+<div class="section" id="id145">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPushDefs( DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id146">
+<h2>Description</h2>
+<p>DrawPushDefs() indicates that commands up to a terminating DrawPopDefs()
+command create named elements (e.g. clip-paths, textures, etc.) which
+may safely be processed earlier for the sake of efficiency.</p>
+<p>The format of the DrawPushDefs method is:</p>
+<pre class="literal-block">
+void DrawPushDefs( DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpushgraphiccontext">
+<h1><a class="toc-backref" href="#id301">DrawPushGraphicContext</a></h1>
+<div class="section" id="id147">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPushGraphicContext( DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id148">
+<h2>Description</h2>
+<p>DrawPushGraphicContext() clones the current drawing wand to create a
+new drawing wand. The original drawing drawing_wand(s) may be returned to
+by invoking DrawPopGraphicContext(). The drawing wands are stored on a
+drawing wand stack. For every Pop there must have already been an
+equivalent Push.</p>
+<p>The format of the DrawPushGraphicContext method is:</p>
+<pre class="literal-block">
+void DrawPushGraphicContext( DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawpushpattern">
+<h1><a class="toc-backref" href="#id302">DrawPushPattern</a></h1>
+<div class="section" id="id149">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawPushPattern( DrawingWand *drawing_wand, const char *pattern_id, const double x,
+ const double y, const double width, const double height );
+</pre>
+</div>
+<div class="section" id="id150">
+<h2>Description</h2>
+<p>DrawPushPattern() indicates that subsequent commands up to a
+DrawPopPattern() command comprise the definition of a named pattern.
+The pattern space is assigned top left corner coordinates, a width
+and height, and becomes its own drawing space. Anything which can
+be drawn may be used in a pattern definition.
+Named patterns may be used as stroke or brush definitions.</p>
+<p>The format of the DrawPushPattern method is:</p>
+<pre class="literal-block">
+void DrawPushPattern( DrawingWand *drawing_wand, const char *pattern_id, const double x,
+ const double y, const double width, const double height );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>pattern_id:</dt>
+<dd>pattern identification for later reference</dd>
+<dt>x:</dt>
+<dd>x ordinate of top left corner</dd>
+<dt>y:</dt>
+<dd>y ordinate of top left corner</dd>
+<dt>width:</dt>
+<dd>width of pattern space</dd>
+<dt>height:</dt>
+<dd>height of pattern space</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawrectangle">
+<h1><a class="toc-backref" href="#id303">DrawRectangle</a></h1>
+<div class="section" id="id151">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawRectangle( DrawingWand *drawing_wand, const double x1, const double y1,
+ const double x2, const double y2 );
+</pre>
+</div>
+<div class="section" id="id152">
+<h2>Description</h2>
+<p>DrawRectangle() draws a rectangle given two coordinates and using
+the current stroke, stroke width, and fill settings.</p>
+<p>The format of the DrawRectangle method is:</p>
+<pre class="literal-block">
+void DrawRectangle( DrawingWand *drawing_wand, const double x1, const double y1,
+ const double x2, const double y2 );
+</pre>
+<dl class="docutils">
+<dt>x1:</dt>
+<dd>x ordinate of first coordinate</dd>
+<dt>y1:</dt>
+<dd>y ordinate of first coordinate</dd>
+<dt>x2:</dt>
+<dd>x ordinate of second coordinate</dd>
+<dt>y2:</dt>
+<dd>y ordinate of second coordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawrender">
+<h1><a class="toc-backref" href="#id304">DrawRender</a></h1>
+<div class="section" id="id153">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int DrawRender( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id154">
+<h2>Description</h2>
+<p>DrawRender() renders all preceding drawing commands onto the image.
+This function is deprecated. Use MagickDrawImage() instead.</p>
+<p>The format of the DrawRender method is:</p>
+<pre class="literal-block">
+unsigned int DrawRender( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawrotate">
+<h1><a class="toc-backref" href="#id305">DrawRotate</a></h1>
+<div class="section" id="id155">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawRotate( DrawingWand *drawing_wand, const double degrees );
+</pre>
+</div>
+<div class="section" id="id156">
+<h2>Description</h2>
+<p>DrawRotate() applies the specified rotation to the current coordinate space.</p>
+<p>The format of the DrawRotate method is:</p>
+<pre class="literal-block">
+void DrawRotate( DrawingWand *drawing_wand, const double degrees );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>degrees:</dt>
+<dd>degrees of rotation</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawroundrectangle">
+<h1><a class="toc-backref" href="#id306">DrawRoundRectangle</a></h1>
+<div class="section" id="id157">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawRoundRectangle( DrawingWand *drawing_wand, double x1, double y1, double x2, double y2,
+ double rx, double ry );
+</pre>
+</div>
+<div class="section" id="id158">
+<h2>Description</h2>
+<p>DrawRoundRectangle() draws a rounted rectangle given two coordinates,
+x & y corner radiuses and using the current stroke, stroke width,
+and fill settings.</p>
+<p>The format of the DrawRoundRectangle method is:</p>
+<pre class="literal-block">
+void DrawRoundRectangle( DrawingWand *drawing_wand, double x1, double y1, double x2, double y2,
+ double rx, double ry );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x1:</dt>
+<dd>x ordinate of first coordinate</dd>
+<dt>y1:</dt>
+<dd>y ordinate of first coordinate</dd>
+<dt>x2:</dt>
+<dd>x ordinate of second coordinate</dd>
+<dt>y2:</dt>
+<dd>y ordinate of second coordinate</dd>
+<dt>rx:</dt>
+<dd>radius of corner in horizontal direction</dd>
+<dt>ry:</dt>
+<dd>radius of corner in vertical direction</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawscale">
+<h1><a class="toc-backref" href="#id307">DrawScale</a></h1>
+<div class="section" id="id159">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawScale( DrawingWand *drawing_wand, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id160">
+<h2>Description</h2>
+<p>DrawScale() adjusts the scaling factor to apply in the horizontal and
+vertical directions to the current coordinate space.</p>
+<p>The format of the DrawScale method is:</p>
+<pre class="literal-block">
+void DrawScale( DrawingWand *drawing_wand, const double x, const double y );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x:</dt>
+<dd>horizontal scale factor</dd>
+<dt>y:</dt>
+<dd>vertical scale factor</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawskewx">
+<h1><a class="toc-backref" href="#id308">DrawSkewX</a></h1>
+<div class="section" id="id161">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSkewX( DrawingWand *drawing_wand, const double degrees );
+</pre>
+</div>
+<div class="section" id="id162">
+<h2>Description</h2>
+<p>DrawSkewX() skews the current coordinate system in the horizontal
+direction.</p>
+<p>The format of the DrawSkewX method is:</p>
+<pre class="literal-block">
+void DrawSkewX( DrawingWand *drawing_wand, const double degrees );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>degrees:</dt>
+<dd>number of degrees to skew the coordinates</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawskewy">
+<h1><a class="toc-backref" href="#id309">DrawSkewY</a></h1>
+<div class="section" id="id163">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSkewY( DrawingWand *drawing_wand, const double degrees );
+</pre>
+</div>
+<div class="section" id="id164">
+<h2>Description</h2>
+<p>DrawSkewY() skews the current coordinate system in the vertical
+direction.</p>
+<p>The format of the DrawSkewY method is:</p>
+<pre class="literal-block">
+void DrawSkewY( DrawingWand *drawing_wand, const double degrees );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>degrees:</dt>
+<dd>number of degrees to skew the coordinates</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstopcolor">
+<h1><a class="toc-backref" href="#id310">DrawSetStopColor</a></h1>
+<div class="section" id="id165">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStopColor( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *stop_color,
+ const double offset );
+</pre>
+</div>
+<div class="section" id="id166">
+<h2>Description</h2>
+<p>DrawSetStopColor() sets the stop color and offset for gradients</p>
+<p>The format of the DrawSetStopColor method is:</p>
+<pre class="literal-block">
+void DrawSetStopColor( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *stop_color,
+ const double offset );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+<p>o stop_color:</p>
+<p>o offset:</p>
+</div>
+</div>
+<div class="section" id="drawgetstrokecolor">
+<h1><a class="toc-backref" href="#id311">DrawGetStrokeColor</a></h1>
+<div class="section" id="id167">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawGetStrokeColor( const DrawingWand *drawing_wand, ;
+</pre>
+</div>
+<div class="section" id="id168">
+<h2>Description</h2>
+<p>DrawGetStrokeColor() returns the color used for stroking object outlines.</p>
+<p>The format of the DrawGetStrokeColor method is:</p>
+<pre class="literal-block">
+void DrawGetStrokeColor( const DrawingWand *drawing_wand, ;
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>stroke_color:</dt>
+<dd>Return the stroke color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokecolor">
+<h1><a class="toc-backref" href="#id312">DrawSetStrokeColor</a></h1>
+<div class="section" id="id169">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeColor( DrawingWand *drawing_wand, const PixelWand *stroke_wand );
+</pre>
+</div>
+<div class="section" id="id170">
+<h2>Description</h2>
+<p>DrawSetStrokeColor() sets the color used for stroking object outlines.</p>
+<p>The format of the DrawSetStrokeColor method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeColor( DrawingWand *drawing_wand, const PixelWand *stroke_wand );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>stroke_wand:</dt>
+<dd>stroke wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokepatternurl">
+<h1><a class="toc-backref" href="#id313">DrawSetStrokePatternURL</a></h1>
+<div class="section" id="id171">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokePatternURL( DrawingWand *drawing_wand, const char *stroke_url );
+</pre>
+</div>
+<div class="section" id="id172">
+<h2>Description</h2>
+<p>DrawSetStrokePatternURL() sets the pattern used for stroking object outlines.</p>
+<p>The format of the DrawSetStrokePatternURL method is:</p>
+<pre class="literal-block">
+void DrawSetStrokePatternURL( DrawingWand *drawing_wand, const char *stroke_url );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>stroke_url:</dt>
+<dd>URL specifying pattern ID (e.g. "#pattern_id")</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetstrokeantialias">
+<h1><a class="toc-backref" href="#id314">DrawGetStrokeAntialias</a></h1>
+<div class="section" id="id173">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int DrawGetStrokeAntialias( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id174">
+<h2>Description</h2>
+<p>DrawGetStrokeAntialias() returns the current stroke antialias setting.
+Stroked outlines are antialiased by default. When antialiasing is disabled
+stroked pixels are thresholded to determine if the stroke color or
+underlying canvas color should be used.</p>
+<p>The format of the DrawGetStrokeAntialias method is:</p>
+<pre class="literal-block">
+unsigned int DrawGetStrokeAntialias( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokeantialias">
+<h1><a class="toc-backref" href="#id315">DrawSetStrokeAntialias</a></h1>
+<div class="section" id="id175">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeAntialias( DrawingWand *drawing_wand,
+ const unsigned int stroke_antialias );
+</pre>
+</div>
+<div class="section" id="id176">
+<h2>Description</h2>
+<p>DrawSetStrokeAntialias() controls whether stroked outlines are antialiased.
+Stroked outlines are antialiased by default. When antialiasing is disabled
+stroked pixels are thresholded to determine if the stroke color or
+underlying canvas color should be used.</p>
+<p>The format of the DrawSetStrokeAntialias method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeAntialias( DrawingWand *drawing_wand,
+ const unsigned int stroke_antialias );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>stroke_antialias:</dt>
+<dd>set to false (zero) to disable antialiasing</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetstrokedasharray">
+<h1><a class="toc-backref" href="#id316">DrawGetStrokeDashArray</a></h1>
+<div class="section" id="id177">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double *DrawGetStrokeDashArray( const DrawingWand *drawing_wand,
+ unsigned long *number_elements );
+</pre>
+</div>
+<div class="section" id="id178">
+<h2>Description</h2>
+<p>DrawGetStrokeDashArray() returns an array representing the pattern of
+dashes and gaps used to stroke paths (see DrawSetStrokeDashArray). The
+array must be freed once it is no longer required by the user.</p>
+<p>The format of the DrawGetStrokeDashArray method is:</p>
+<pre class="literal-block">
+double *DrawGetStrokeDashArray( const DrawingWand *drawing_wand,
+ unsigned long *number_elements );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>number_elements:</dt>
+<dd>address to place number of elements in dash array</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokedasharray">
+<h1><a class="toc-backref" href="#id317">DrawSetStrokeDashArray</a></h1>
+<div class="section" id="id179">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeDashArray( DrawingWand *drawing_wand, const unsigned long number_elements,
+ const double *dash_array );
+</pre>
+</div>
+<div class="section" id="id180">
+<h2>Description</h2>
+<p>DrawSetStrokeDashArray() specifies the pattern of dashes and gaps used to
+stroke paths. The stroke dash array represents an array of numbers that
+specify the lengths of alternating dashes and gaps in pixels. If an odd
+number of values is provided, then the list of values is repeated to yield
+an even number of values. To remove an existing dash array, pass a zero
+number_elements argument and null dash_array.
+A typical stroke dash array might contain the members 5 3 2.</p>
+<p>The format of the DrawSetStrokeDashArray method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeDashArray( DrawingWand *drawing_wand, const unsigned long number_elements,
+ const double *dash_array );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>number_elements:</dt>
+<dd>number of elements in dash array</dd>
+<dt>dash_array:</dt>
+<dd>dash array values</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetstrokedashoffset">
+<h1><a class="toc-backref" href="#id318">DrawGetStrokeDashOffset</a></h1>
+<div class="section" id="id181">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double DrawGetStrokeDashOffset( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id182">
+<h2>Description</h2>
+<p>DrawGetStrokeDashOffset() returns the offset into the dash pattern to
+start the dash.</p>
+<p>The format of the DrawGetStrokeDashOffset method is:</p>
+<pre class="literal-block">
+double DrawGetStrokeDashOffset( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokedashoffset">
+<h1><a class="toc-backref" href="#id319">DrawSetStrokeDashOffset</a></h1>
+<div class="section" id="id183">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeDashOffset( DrawingWand *drawing_wand, const double dash_offset );
+</pre>
+</div>
+<div class="section" id="id184">
+<h2>Description</h2>
+<p>DrawSetStrokeDashOffset() specifies the offset into the dash pattern to
+start the dash.</p>
+<p>The format of the DrawSetStrokeDashOffset method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeDashOffset( DrawingWand *drawing_wand, const double dash_offset );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>dash_offset:</dt>
+<dd>dash offset</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetstrokelinecap">
+<h1><a class="toc-backref" href="#id320">DrawGetStrokeLineCap</a></h1>
+<div class="section" id="id185">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+LineCap DrawGetStrokeLineCap( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id186">
+<h2>Description</h2>
+<p>DrawGetStrokeLineCap() returns the shape to be used at the end of
+open subpaths when they are stroked. Values of LineCap are
+UndefinedCap, ButtCap, RoundCap, and SquareCap.</p>
+<p>The format of the DrawGetStrokeLineCap method is:</p>
+<pre class="literal-block">
+LineCap DrawGetStrokeLineCap( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokelinecap">
+<h1><a class="toc-backref" href="#id321">DrawSetStrokeLineCap</a></h1>
+<div class="section" id="id187">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeLineCap( DrawingWand *drawing_wand, const LineCap linecap );
+</pre>
+</div>
+<div class="section" id="id188">
+<h2>Description</h2>
+<p>DrawSetStrokeLineCap() specifies the shape to be used at the end of
+open subpaths when they are stroked. Values of LineCap are
+UndefinedCap, ButtCap, RoundCap, and SquareCap.</p>
+<p>The format of the DrawSetStrokeLineCap method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeLineCap( DrawingWand *drawing_wand, const LineCap linecap );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>linecap:</dt>
+<dd>linecap style</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetstrokelinejoin">
+<h1><a class="toc-backref" href="#id322">DrawGetStrokeLineJoin</a></h1>
+<div class="section" id="id189">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+LineJoin DrawGetStrokeLineJoin( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id190">
+<h2>Description</h2>
+<p>DrawGetStrokeLineJoin() returns the shape to be used at the
+corners of paths (or other vector shapes) when they are
+stroked. Values of LineJoin are UndefinedJoin, MiterJoin, RoundJoin,
+and BevelJoin.</p>
+<p>The format of the DrawGetStrokeLineJoin method is:</p>
+<pre class="literal-block">
+LineJoin DrawGetStrokeLineJoin( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokelinejoin">
+<h1><a class="toc-backref" href="#id323">DrawSetStrokeLineJoin</a></h1>
+<div class="section" id="id191">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeLineJoin( DrawingWand *drawing_wand, const LineJoin linejoin );
+</pre>
+</div>
+<div class="section" id="id192">
+<h2>Description</h2>
+<p>DrawSetStrokeLineJoin() specifies the shape to be used at the
+corners of paths (or other vector shapes) when they are
+stroked. Values of LineJoin are UndefinedJoin, MiterJoin, RoundJoin,
+and BevelJoin.</p>
+<p>The format of the DrawSetStrokeLineJoin method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeLineJoin( DrawingWand *drawing_wand, const LineJoin linejoin );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>linejoin:</dt>
+<dd>line join style</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetstrokemiterlimit">
+<h1><a class="toc-backref" href="#id324">DrawGetStrokeMiterLimit</a></h1>
+<div class="section" id="id193">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long DrawGetStrokeMiterLimit( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id194">
+<h2>Description</h2>
+<p>DrawGetStrokeMiterLimit() returns the miter limit. When two line
+segments meet at a sharp angle and miter joins have been specified for
+'lineJoin', it is possible for the miter to extend far beyond the
+thickness of the line stroking the path. The miterLimit' imposes a
+limit on the ratio of the miter length to the 'lineWidth'.</p>
+<p>The format of the DrawGetStrokeMiterLimit method is:</p>
+<pre class="literal-block">
+unsigned long DrawGetStrokeMiterLimit( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokemiterlimit">
+<h1><a class="toc-backref" href="#id325">DrawSetStrokeMiterLimit</a></h1>
+<div class="section" id="id195">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeMiterLimit( DrawingWand *drawing_wand, const unsigned long miterlimit );
+</pre>
+</div>
+<div class="section" id="id196">
+<h2>Description</h2>
+<p>DrawSetStrokeMiterLimit() specifies the miter limit. When two line
+segments meet at a sharp angle and miter joins have been specified for
+'lineJoin', it is possible for the miter to extend far beyond the
+thickness of the line stroking the path. The miterLimit' imposes a
+limit on the ratio of the miter length to the 'lineWidth'.</p>
+<p>The format of the DrawSetStrokeMiterLimit method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeMiterLimit( DrawingWand *drawing_wand, const unsigned long miterlimit );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>miterlimit:</dt>
+<dd>miter limit</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetstrokeopacity">
+<h1><a class="toc-backref" href="#id326">DrawGetStrokeOpacity</a></h1>
+<div class="section" id="id197">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double DrawGetStrokeOpacity( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id198">
+<h2>Description</h2>
+<p>DrawGetStrokeOpacity() returns the opacity of stroked object outlines.</p>
+<p>The format of the DrawGetStrokeOpacity method is:</p>
+<pre class="literal-block">
+double DrawGetStrokeOpacity( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokeopacity">
+<h1><a class="toc-backref" href="#id327">DrawSetStrokeOpacity</a></h1>
+<div class="section" id="id199">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeOpacity( DrawingWand *drawing_wand, const double stroke_opacity );
+</pre>
+</div>
+<div class="section" id="id200">
+<h2>Description</h2>
+<p>DrawSetStrokeOpacity() specifies the opacity of stroked object outlines.</p>
+<p>The format of the DrawSetStrokeOpacity method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeOpacity( DrawingWand *drawing_wand, const double stroke_opacity );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>stroke_opacity:</dt>
+<dd>stroke opacity. The value 1.0 is opaque.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgetstrokewidth">
+<h1><a class="toc-backref" href="#id328">DrawGetStrokeWidth</a></h1>
+<div class="section" id="id201">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double DrawGetStrokeWidth( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id202">
+<h2>Description</h2>
+<p>DrawGetStrokeWidth() returns the width of the stroke used to draw object
+outlines.</p>
+<p>The format of the DrawGetStrokeWidth method is:</p>
+<pre class="literal-block">
+double DrawGetStrokeWidth( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetstrokewidth">
+<h1><a class="toc-backref" href="#id329">DrawSetStrokeWidth</a></h1>
+<div class="section" id="id203">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetStrokeWidth( DrawingWand *drawing_wand, const double stroke_width );
+</pre>
+</div>
+<div class="section" id="id204">
+<h2>Description</h2>
+<p>DrawSetStrokeWidth() sets the width of the stroke used to draw object
+outlines.</p>
+<p>The format of the DrawSetStrokeWidth method is:</p>
+<pre class="literal-block">
+void DrawSetStrokeWidth( DrawingWand *drawing_wand, const double stroke_width );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>stroke_width:</dt>
+<dd>stroke width</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgettextantialias">
+<h1><a class="toc-backref" href="#id330">DrawGetTextAntialias</a></h1>
+<div class="section" id="id205">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int DrawGetTextAntialias( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id206">
+<h2>Description</h2>
+<p>DrawGetTextAntialias() returns the current text antialias setting, which
+determines whether text is antialiased. Text is antialiased by default.</p>
+<p>The format of the DrawGetTextAntialias method is:</p>
+<pre class="literal-block">
+unsigned int DrawGetTextAntialias( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsettextantialias">
+<h1><a class="toc-backref" href="#id331">DrawSetTextAntialias</a></h1>
+<div class="section" id="id207">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetTextAntialias( DrawingWand *drawing_wand, const unsigned int text_antialias );
+</pre>
+</div>
+<div class="section" id="id208">
+<h2>Description</h2>
+<p>DrawSetTextAntialias() controls whether text is antialiased. Text is
+antialiased by default.</p>
+<p>The format of the DrawSetTextAntialias method is:</p>
+<pre class="literal-block">
+void DrawSetTextAntialias( DrawingWand *drawing_wand, const unsigned int text_antialias );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>text_antialias:</dt>
+<dd>antialias boolean. Set to false (0) to disable
+antialiasing.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgettextdecoration">
+<h1><a class="toc-backref" href="#id332">DrawGetTextDecoration</a></h1>
+<div class="section" id="id209">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#decorationtype">DecorationType</a> DrawGetTextDecoration( DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id210">
+<h2>Description</h2>
+<p>DrawGetTextDecoration() returns the decoration applied when annotating with
+text.</p>
+<p>The format of the DrawGetTextDecoration method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#decorationtype">DecorationType</a> DrawGetTextDecoration( DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsettextdecoration">
+<h1><a class="toc-backref" href="#id333">DrawSetTextDecoration</a></h1>
+<div class="section" id="id211">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetTextDecoration( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#decorationtype">DecorationType</a> decoration );
+</pre>
+</div>
+<div class="section" id="id212">
+<h2>Description</h2>
+<p>DrawSetTextDecoration() specifies a decoration to be applied when
+annotating with text.</p>
+<p>The format of the DrawSetTextDecoration method is:</p>
+<pre class="literal-block">
+void DrawSetTextDecoration( DrawingWand *drawing_wand, const <a class="reference external" href="../api/types.html#decorationtype">DecorationType</a> decoration );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>decoration:</dt>
+<dd>text decoration. One of NoDecoration, UnderlineDecoration,
+OverlineDecoration, or LineThroughDecoration</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgettextencoding">
+<h1><a class="toc-backref" href="#id334">DrawGetTextEncoding</a></h1>
+<div class="section" id="id213">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+char *DrawGetTextEncoding( const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id214">
+<h2>Description</h2>
+<p>DrawGetTextEncoding() returns a null-terminated string which specifies the
+code set used for text annotations. The string must be freed by the user
+once it is no longer required.</p>
+<p>The format of the DrawGetTextEncoding method is:</p>
+<pre class="literal-block">
+char *DrawGetTextEncoding( const DrawingWand *drawing_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsettextencoding">
+<h1><a class="toc-backref" href="#id335">DrawSetTextEncoding</a></h1>
+<div class="section" id="id215">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetTextEncoding( DrawingWand *drawing_wand, const char *encoding );
+</pre>
+</div>
+<div class="section" id="id216">
+<h2>Description</h2>
+<p>DrawSetTextEncoding() specifies specifies the code set to use for
+text annotations. The only character encoding which may be specified
+at this time is "UTF-8" for representing Unicode as a sequence of
+bytes. Specify an empty string to set text encoding to the system's
+default. Successful text annotation using Unicode may require fonts
+designed to support Unicode.</p>
+<p>The format of the DrawSetTextEncoding method is:</p>
+<pre class="literal-block">
+void DrawSetTextEncoding( DrawingWand *drawing_wand, const char *encoding );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>encoding:</dt>
+<dd>character string specifying text encoding</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawgettextundercolor">
+<h1><a class="toc-backref" href="#id336">DrawGetTextUnderColor</a></h1>
+<div class="section" id="id217">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawGetTextUnderColor( const DrawingWand *drawing_wand, PixelWand *under_color );
+</pre>
+</div>
+<div class="section" id="id218">
+<h2>Description</h2>
+<p>DrawGetTextUnderColor() returns the color of a background rectangle
+to place under text annotations.</p>
+<p>The format of the DrawGetTextUnderColor method is:</p>
+<pre class="literal-block">
+void DrawGetTextUnderColor( const DrawingWand *drawing_wand, PixelWand *under_color );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>under_color:</dt>
+<dd>Return the under color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsettextundercolor">
+<h1><a class="toc-backref" href="#id337">DrawSetTextUnderColor</a></h1>
+<div class="section" id="id219">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetTextUnderColor( DrawingWand *drawing_wand, const PixelWand *under_wand );
+</pre>
+</div>
+<div class="section" id="id220">
+<h2>Description</h2>
+<p>DrawSetTextUnderColor() specifies the color of a background rectangle
+to place under text annotations.</p>
+<p>The format of the DrawSetTextUnderColor method is:</p>
+<pre class="literal-block">
+void DrawSetTextUnderColor( DrawingWand *drawing_wand, const PixelWand *under_wand );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>under_wand.:</dt>
+<dd>text under wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawtranslate">
+<h1><a class="toc-backref" href="#id338">DrawTranslate</a></h1>
+<div class="section" id="id221">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawTranslate( DrawingWand *drawing_wand, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id222">
+<h2>Description</h2>
+<p>DrawTranslate() applies a translation to the current coordinate
+system which moves the coordinate system origin to the specified
+coordinate.</p>
+<p>The format of the DrawTranslate method is:</p>
+<pre class="literal-block">
+void DrawTranslate( DrawingWand *drawing_wand, const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x:</dt>
+<dd>new x ordinate for coordinate system origin</dd>
+<dt>y:</dt>
+<dd>new y ordinate for coordinate system origin</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="drawsetviewbox">
+<h1><a class="toc-backref" href="#id339">DrawSetViewbox</a></h1>
+<div class="section" id="id223">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DrawSetViewbox( DrawingWand *drawing_wand, unsigned long x1, unsigned long y1,
+ unsigned long x2, unsigned long y2 );
+</pre>
+</div>
+<div class="section" id="id224">
+<h2>Description</h2>
+<p>DrawSetViewbox() sets the overall canvas size to be recorded with the
+drawing vector data. Usually this will be specified using the same
+size as the canvas image. When the vector data is saved to SVG or MVG
+formats, the viewbox is use to specify the size of the canvas image that
+a viewer will render the vector data on.</p>
+<p>The format of the DrawSetViewbox method is:</p>
+<pre class="literal-block">
+void DrawSetViewbox( DrawingWand *drawing_wand, unsigned long x1, unsigned long y1,
+ unsigned long x2, unsigned long y2 );
+</pre>
+<dl class="docutils">
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>x1:</dt>
+<dd>left x ordinate</dd>
+<dt>y1:</dt>
+<dd>top y ordinate</dd>
+<dt>x2:</dt>
+<dd>right x ordinate</dd>
+<dt>y2:</dt>
+<dd>bottom y ordinate</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="newdrawingwand">
+<h1><a class="toc-backref" href="#id340">NewDrawingWand</a></h1>
+<div class="section" id="id225">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+DrawingWand *NewDrawingWand( void );
+</pre>
+</div>
+<div class="section" id="id226">
+<h2>Description</h2>
+<p>NewDrawingWand() returns a drawing wand required for all other methods in
+the API.</p>
+<p>The format of the NewDrawingWand method is:</p>
+<pre class="literal-block">
+DrawingWand *NewDrawingWand( void );
+</pre>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
<title>magick_wand</title>
<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="magick-wand">
<dl class="docutils">
<dt>wand:</dt>
<dd>The magick wand.</dd>
-<dt>number_factoes:</dt>
-<dd>The number of factors.</dd>
+<dt>number_factors:</dt>
+<dd>The number of factors. This value should be evenly
+divisible by two.</dd>
<dt>sampling_factors:</dt>
<dd>An array of doubles representing the sampling factor
-for each color component (in RGB order).</dd>
+for each color component (in RGB order). Two double values must be
+provided for each color component.</dd>
</dl>
</div>
</div>
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>magick_wand</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="magick-wand">
+<h1 class="title">magick_wand</h1>
+<h2 class="subtitle" id="wand-image-processing-interfaces">Wand image processing interfaces</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#clonemagickwand" id="id473">CloneMagickWand</a></li>
+<li><a class="reference internal" href="#destroymagickwand" id="id474">DestroyMagickWand</a></li>
+<li><a class="reference internal" href="#magickadaptivethresholdimage" id="id475">MagickAdaptiveThresholdImage</a></li>
+<li><a class="reference internal" href="#magickaddimage" id="id476">MagickAddImage</a></li>
+<li><a class="reference internal" href="#magickaddnoiseimage" id="id477">MagickAddNoiseImage</a></li>
+<li><a class="reference internal" href="#magickaffinetransformimage" id="id478">MagickAffineTransformImage</a></li>
+<li><a class="reference internal" href="#magickannotateimage" id="id479">MagickAnnotateImage</a></li>
+<li><a class="reference internal" href="#magickanimateimages" id="id480">MagickAnimateImages</a></li>
+<li><a class="reference internal" href="#magickappendimages" id="id481">MagickAppendImages</a></li>
+<li><a class="reference internal" href="#magickautoorientimage" id="id482">MagickAutoOrientImage</a></li>
+<li><a class="reference internal" href="#magickaverageimages" id="id483">MagickAverageImages</a></li>
+<li><a class="reference internal" href="#magickblackthresholdimage" id="id484">MagickBlackThresholdImage</a></li>
+<li><a class="reference internal" href="#magickblurimage" id="id485">MagickBlurImage</a></li>
+<li><a class="reference internal" href="#magickborderimage" id="id486">MagickBorderImage</a></li>
+<li><a class="reference internal" href="#magickcdlimage" id="id487">MagickCdlImage</a></li>
+<li><a class="reference internal" href="#magickcharcoalimage" id="id488">MagickCharcoalImage</a></li>
+<li><a class="reference internal" href="#magickchopimage" id="id489">MagickChopImage</a></li>
+<li><a class="reference internal" href="#magickclearexception" id="id490">MagickClearException</a></li>
+<li><a class="reference internal" href="#magickclipimage" id="id491">MagickClipImage</a></li>
+<li><a class="reference internal" href="#magickclippathimage" id="id492">MagickClipPathImage</a></li>
+<li><a class="reference internal" href="#magickcoalesceimages" id="id493">MagickCoalesceImages</a></li>
+<li><a class="reference internal" href="#magickcolorfloodfillimage" id="id494">MagickColorFloodfillImage</a></li>
+<li><a class="reference internal" href="#magickcolorizeimage" id="id495">MagickColorizeImage</a></li>
+<li><a class="reference internal" href="#magickcommentimage" id="id496">MagickCommentImage</a></li>
+<li><a class="reference internal" href="#magickcompareimagechannels" id="id497">MagickCompareImageChannels</a></li>
+<li><a class="reference internal" href="#magickcompareimages" id="id498">MagickCompareImages</a></li>
+<li><a class="reference internal" href="#magickcompositeimage" id="id499">MagickCompositeImage</a></li>
+<li><a class="reference internal" href="#magickcontrastimage" id="id500">MagickContrastImage</a></li>
+<li><a class="reference internal" href="#magickconvolveimage" id="id501">MagickConvolveImage</a></li>
+<li><a class="reference internal" href="#magickcropimage" id="id502">MagickCropImage</a></li>
+<li><a class="reference internal" href="#magickcyclecolormapimage" id="id503">MagickCycleColormapImage</a></li>
+<li><a class="reference internal" href="#magickdeconstructimages" id="id504">MagickDeconstructImages</a></li>
+<li><a class="reference internal" href="#magickdescribeimage" id="id505">MagickDescribeImage</a></li>
+<li><a class="reference internal" href="#magickdespeckleimage" id="id506">MagickDespeckleImage</a></li>
+<li><a class="reference internal" href="#magickdisplayimage" id="id507">MagickDisplayImage</a></li>
+<li><a class="reference internal" href="#magickdisplayimages" id="id508">MagickDisplayImages</a></li>
+<li><a class="reference internal" href="#magickdrawimage" id="id509">MagickDrawImage</a></li>
+<li><a class="reference internal" href="#magickedgeimage" id="id510">MagickEdgeImage</a></li>
+<li><a class="reference internal" href="#magickembossimage" id="id511">MagickEmbossImage</a></li>
+<li><a class="reference internal" href="#magickenhanceimage" id="id512">MagickEnhanceImage</a></li>
+<li><a class="reference internal" href="#magickequalizeimage" id="id513">MagickEqualizeImage</a></li>
+<li><a class="reference internal" href="#magickextentimage" id="id514">MagickExtentImage</a></li>
+<li><a class="reference internal" href="#magickflattenimages" id="id515">MagickFlattenImages</a></li>
+<li><a class="reference internal" href="#magickflipimage" id="id516">MagickFlipImage</a></li>
+<li><a class="reference internal" href="#magickflopimage" id="id517">MagickFlopImage</a></li>
+<li><a class="reference internal" href="#magickframeimage" id="id518">MagickFrameImage</a></li>
+<li><a class="reference internal" href="#magickfximage" id="id519">MagickFxImage</a></li>
+<li><a class="reference internal" href="#magickfximagechannel" id="id520">MagickFxImageChannel</a></li>
+<li><a class="reference internal" href="#magickgammaimage" id="id521">MagickGammaImage</a></li>
+<li><a class="reference internal" href="#magickgammaimagechannel" id="id522">MagickGammaImageChannel</a></li>
+<li><a class="reference internal" href="#magickgetconfigureinfo" id="id523">MagickGetConfigureInfo</a></li>
+<li><a class="reference internal" href="#magickgetcopyright" id="id524">MagickGetCopyright</a></li>
+<li><a class="reference internal" href="#magickgetexception" id="id525">MagickGetException</a></li>
+<li><a class="reference internal" href="#magickgetfilename" id="id526">MagickGetFilename</a></li>
+<li><a class="reference internal" href="#magickgethomeurl" id="id527">MagickGetHomeURL</a></li>
+<li><a class="reference internal" href="#magickgetimage" id="id528">MagickGetImage</a></li>
+<li><a class="reference internal" href="#magickgetimageattribute" id="id529">MagickGetImageAttribute</a></li>
+<li><a class="reference internal" href="#magickgetimagebackgroundcolor" id="id530">MagickGetImageBackgroundColor</a></li>
+<li><a class="reference internal" href="#magickgetimageblueprimary" id="id531">MagickGetImageBluePrimary</a></li>
+<li><a class="reference internal" href="#magickgetimagebordercolor" id="id532">MagickGetImageBorderColor</a></li>
+<li><a class="reference internal" href="#magickgetimageboundingbox" id="id533">MagickGetImageBoundingBox</a></li>
+<li><a class="reference internal" href="#magickgetimagechanneldepth" id="id534">MagickGetImageChannelDepth</a></li>
+<li><a class="reference internal" href="#magickgetimagechannelextrema" id="id535">MagickGetImageChannelExtrema</a></li>
+<li><a class="reference internal" href="#magickgetimagechannelmean" id="id536">MagickGetImageChannelMean</a></li>
+<li><a class="reference internal" href="#magickgetimagecolormapcolor" id="id537">MagickGetImageColormapColor</a></li>
+<li><a class="reference internal" href="#magickgetimagecolors" id="id538">MagickGetImageColors</a></li>
+<li><a class="reference internal" href="#magickgetimagecolorspace" id="id539">MagickGetImageColorspace</a></li>
+<li><a class="reference internal" href="#magickgetimagecompose" id="id540">MagickGetImageCompose</a></li>
+<li><a class="reference internal" href="#magickgetimagecompression" id="id541">MagickGetImageCompression</a></li>
+<li><a class="reference internal" href="#magickgetimagedelay" id="id542">MagickGetImageDelay</a></li>
+<li><a class="reference internal" href="#magickgetimagedepth" id="id543">MagickGetImageDepth</a></li>
+<li><a class="reference internal" href="#magickgetimageextrema" id="id544">MagickGetImageExtrema</a></li>
+<li><a class="reference internal" href="#magickgetimagedispose" id="id545">MagickGetImageDispose</a></li>
+<li><a class="reference internal" href="#magickgetimagefilename" id="id546">MagickGetImageFilename</a></li>
+<li><a class="reference internal" href="#magickgetimageformat" id="id547">MagickGetImageFormat</a></li>
+<li><a class="reference internal" href="#magickgetimagefuzz" id="id548">MagickGetImageFuzz</a></li>
+<li><a class="reference internal" href="#magickgetimagegamma" id="id549">MagickGetImageGamma</a></li>
+<li><a class="reference internal" href="#magickgetimagegravity" id="id550">MagickGetImageGravity</a></li>
+<li><a class="reference internal" href="#magickgetimagegreenprimary" id="id551">MagickGetImageGreenPrimary</a></li>
+<li><a class="reference internal" href="#magickgetimageheight" id="id552">MagickGetImageHeight</a></li>
+<li><a class="reference internal" href="#magickgetimagehistogram" id="id553">MagickGetImageHistogram</a></li>
+<li><a class="reference internal" href="#magickgetimageindex" id="id554">MagickGetImageIndex</a></li>
+<li><a class="reference internal" href="#magickgetimageinterlacescheme" id="id555">MagickGetImageInterlaceScheme</a></li>
+<li><a class="reference internal" href="#magickgetimageiterations" id="id556">MagickGetImageIterations</a></li>
+<li><a class="reference internal" href="#magickgetimagemattecolor" id="id557">MagickGetImageMatteColor</a></li>
+<li><a class="reference internal" href="#magickgetimageorientation" id="id558">MagickGetImageOrientation</a></li>
+<li><a class="reference internal" href="#magickgetimagepage" id="id559">MagickGetImagePage</a></li>
+<li><a class="reference internal" href="#magickgetimagepixels" id="id560">MagickGetImagePixels</a></li>
+<li><a class="reference internal" href="#magickgetimageprofile" id="id561">MagickGetImageProfile</a></li>
+<li><a class="reference internal" href="#magickgetimageredprimary" id="id562">MagickGetImageRedPrimary</a></li>
+<li><a class="reference internal" href="#magickgetimagerenderingintent" id="id563">MagickGetImageRenderingIntent</a></li>
+<li><a class="reference internal" href="#magickgetimageresolution" id="id564">MagickGetImageResolution</a></li>
+<li><a class="reference internal" href="#magickgetimagescene" id="id565">MagickGetImageScene</a></li>
+<li><a class="reference internal" href="#magickgetimagesignature" id="id566">MagickGetImageSignature</a></li>
+<li><a class="reference internal" href="#magickgetimagesize" id="id567">MagickGetImageSize</a></li>
+<li><a class="reference internal" href="#magickgetimagetype" id="id568">MagickGetImageType</a></li>
+<li><a class="reference internal" href="#magickgetimagesavedtype" id="id569">MagickGetImageSavedType</a></li>
+<li><a class="reference internal" href="#magickgetimageunits" id="id570">MagickGetImageUnits</a></li>
+<li><a class="reference internal" href="#magickgetimagevirtualpixelmethod" id="id571">MagickGetImageVirtualPixelMethod</a></li>
+<li><a class="reference internal" href="#magickgetimagewhitepoint" id="id572">MagickGetImageWhitePoint</a></li>
+<li><a class="reference internal" href="#magickgetimagewidth" id="id573">MagickGetImageWidth</a></li>
+<li><a class="reference internal" href="#magickgetnumberimages" id="id574">MagickGetNumberImages</a></li>
+<li><a class="reference internal" href="#magickgetpackagename" id="id575">MagickGetPackageName</a></li>
+<li><a class="reference internal" href="#magickgetquantumdepth" id="id576">MagickGetQuantumDepth</a></li>
+<li><a class="reference internal" href="#magickgetreleasedate" id="id577">MagickGetReleaseDate</a></li>
+<li><a class="reference internal" href="#magickgetresourcelimit" id="id578">MagickGetResourceLimit</a></li>
+<li><a class="reference internal" href="#magickgetsamplingfactors" id="id579">MagickGetSamplingFactors</a></li>
+<li><a class="reference internal" href="#magickgetsize" id="id580">MagickGetSize</a></li>
+<li><a class="reference internal" href="#magickgetversion" id="id581">MagickGetVersion</a></li>
+<li><a class="reference internal" href="#magickhaldclutimage" id="id582">MagickHaldClutImage</a></li>
+<li><a class="reference internal" href="#magickhascolormap" id="id583">MagickHasColormap</a></li>
+<li><a class="reference internal" href="#magickhasnextimage" id="id584">MagickHasNextImage</a></li>
+<li><a class="reference internal" href="#magickhaspreviousimage" id="id585">MagickHasPreviousImage</a></li>
+<li><a class="reference internal" href="#magickimplodeimage" id="id586">MagickImplodeImage</a></li>
+<li><a class="reference internal" href="#magickisgrayimage" id="id587">MagickIsGrayImage</a></li>
+<li><a class="reference internal" href="#magickismonochromeimage" id="id588">MagickIsMonochromeImage</a></li>
+<li><a class="reference internal" href="#magickisopaqueimage" id="id589">MagickIsOpaqueImage</a></li>
+<li><a class="reference internal" href="#magickispaletteimage" id="id590">MagickIsPaletteImage</a></li>
+<li><a class="reference internal" href="#magicklabelimage" id="id591">MagickLabelImage</a></li>
+<li><a class="reference internal" href="#magicklevelimage" id="id592">MagickLevelImage</a></li>
+<li><a class="reference internal" href="#magicklevelimagechannel" id="id593">MagickLevelImageChannel</a></li>
+<li><a class="reference internal" href="#magickmagnifyimage" id="id594">MagickMagnifyImage</a></li>
+<li><a class="reference internal" href="#magickmapimage" id="id595">MagickMapImage</a></li>
+<li><a class="reference internal" href="#magickmattefloodfillimage" id="id596">MagickMatteFloodfillImage</a></li>
+<li><a class="reference internal" href="#magickmedianfilterimage" id="id597">MagickMedianFilterImage</a></li>
+<li><a class="reference internal" href="#magickminifyimage" id="id598">MagickMinifyImage</a></li>
+<li><a class="reference internal" href="#magickmodulateimage" id="id599">MagickModulateImage</a></li>
+<li><a class="reference internal" href="#magickmontageimage" id="id600">MagickMontageImage</a></li>
+<li><a class="reference internal" href="#magickmorphimages" id="id601">MagickMorphImages</a></li>
+<li><a class="reference internal" href="#magickmosaicimages" id="id602">MagickMosaicImages</a></li>
+<li><a class="reference internal" href="#magickmotionblurimage" id="id603">MagickMotionBlurImage</a></li>
+<li><a class="reference internal" href="#magicknegateimage" id="id604">MagickNegateImage</a></li>
+<li><a class="reference internal" href="#magicknegateimagechannel" id="id605">MagickNegateImageChannel</a></li>
+<li><a class="reference internal" href="#magicknextimage" id="id606">MagickNextImage</a></li>
+<li><a class="reference internal" href="#magicknormalizeimage" id="id607">MagickNormalizeImage</a></li>
+<li><a class="reference internal" href="#magickoilpaintimage" id="id608">MagickOilPaintImage</a></li>
+<li><a class="reference internal" href="#magickopaqueimage" id="id609">MagickOpaqueImage</a></li>
+<li><a class="reference internal" href="#magickpingimage" id="id610">MagickPingImage</a></li>
+<li><a class="reference internal" href="#magickpreviewimages" id="id611">MagickPreviewImages</a></li>
+<li><a class="reference internal" href="#magickpreviousimage" id="id612">MagickPreviousImage</a></li>
+<li><a class="reference internal" href="#magickprofileimage" id="id613">MagickProfileImage</a></li>
+<li><a class="reference internal" href="#magickquantizeimage" id="id614">MagickQuantizeImage</a></li>
+<li><a class="reference internal" href="#magickquantizeimages" id="id615">MagickQuantizeImages</a></li>
+<li><a class="reference internal" href="#magickqueryfontmetrics" id="id616">MagickQueryFontMetrics</a></li>
+<li><a class="reference internal" href="#magickqueryfonts" id="id617">MagickQueryFonts</a></li>
+<li><a class="reference internal" href="#magickqueryformats" id="id618">MagickQueryFormats</a></li>
+<li><a class="reference internal" href="#magickradialblurimage" id="id619">MagickRadialBlurImage</a></li>
+<li><a class="reference internal" href="#magickraiseimage" id="id620">MagickRaiseImage</a></li>
+<li><a class="reference internal" href="#magickreadimage" id="id621">MagickReadImage</a></li>
+<li><a class="reference internal" href="#magickreadimageblob" id="id622">MagickReadImageBlob</a></li>
+<li><a class="reference internal" href="#magickreadimagefile" id="id623">MagickReadImageFile</a></li>
+<li><a class="reference internal" href="#magickreducenoiseimage" id="id624">MagickReduceNoiseImage</a></li>
+<li><a class="reference internal" href="#magickrelinquishmemory" id="id625">MagickRelinquishMemory</a></li>
+<li><a class="reference internal" href="#magickremoveimage" id="id626">MagickRemoveImage</a></li>
+<li><a class="reference internal" href="#magickremoveimageoption" id="id627">MagickRemoveImageOption</a></li>
+<li><a class="reference internal" href="#magickremoveimageprofile" id="id628">MagickRemoveImageProfile</a></li>
+<li><a class="reference internal" href="#magickresetiterator" id="id629">MagickResetIterator</a></li>
+<li><a class="reference internal" href="#magickresampleimage" id="id630">MagickResampleImage</a></li>
+<li><a class="reference internal" href="#magickresizeimage" id="id631">MagickResizeImage</a></li>
+<li><a class="reference internal" href="#magickrollimage" id="id632">MagickRollImage</a></li>
+<li><a class="reference internal" href="#magickrotateimage" id="id633">MagickRotateImage</a></li>
+<li><a class="reference internal" href="#magicksampleimage" id="id634">MagickSampleImage</a></li>
+<li><a class="reference internal" href="#magickscaleimage" id="id635">MagickScaleImage</a></li>
+<li><a class="reference internal" href="#magickseparateimagechannel" id="id636">MagickSeparateImageChannel</a></li>
+<li><a class="reference internal" href="#magicksetcompressionquality" id="id637">MagickSetCompressionQuality</a></li>
+<li><a class="reference internal" href="#magicksetdepth" id="id638">MagickSetDepth</a></li>
+<li><a class="reference internal" href="#magicksetfilename" id="id639">MagickSetFilename</a></li>
+<li><a class="reference internal" href="#magicksetformat" id="id640">MagickSetFormat</a></li>
+<li><a class="reference internal" href="#magicksetimage" id="id641">MagickSetImage</a></li>
+<li><a class="reference internal" href="#magicksetimageattribute" id="id642">MagickSetImageAttribute</a></li>
+<li><a class="reference internal" href="#magicksetimagebackgroundcolor" id="id643">MagickSetImageBackgroundColor</a></li>
+<li><a class="reference internal" href="#magicksetimageblueprimary" id="id644">MagickSetImageBluePrimary</a></li>
+<li><a class="reference internal" href="#magicksetimagebordercolor" id="id645">MagickSetImageBorderColor</a></li>
+<li><a class="reference internal" href="#magicksetimagecolormapcolor" id="id646">MagickSetImageColormapColor</a></li>
+<li><a class="reference internal" href="#magicksetimagecolorspace" id="id647">MagickSetImageColorspace</a></li>
+<li><a class="reference internal" href="#magicksetimagecompose" id="id648">MagickSetImageCompose</a></li>
+<li><a class="reference internal" href="#magicksetimagecompression" id="id649">MagickSetImageCompression</a></li>
+<li><a class="reference internal" href="#magicksetimagedelay" id="id650">MagickSetImageDelay</a></li>
+<li><a class="reference internal" href="#magicksetimagechanneldepth" id="id651">MagickSetImageChannelDepth</a></li>
+<li><a class="reference internal" href="#magicksetimagedepth" id="id652">MagickSetImageDepth</a></li>
+<li><a class="reference internal" href="#magicksetimagedispose" id="id653">MagickSetImageDispose</a></li>
+<li><a class="reference internal" href="#magicksetimagefilename" id="id654">MagickSetImageFilename</a></li>
+<li><a class="reference internal" href="#magicksetimageformat" id="id655">MagickSetImageFormat</a></li>
+<li><a class="reference internal" href="#magicksetimagefuzz" id="id656">MagickSetImageFuzz</a></li>
+<li><a class="reference internal" href="#magicksetimagegamma" id="id657">MagickSetImageGamma</a></li>
+<li><a class="reference internal" href="#magicksetimagegravity" id="id658">MagickSetImageGravity</a></li>
+<li><a class="reference internal" href="#magicksetimagegreenprimary" id="id659">MagickSetImageGreenPrimary</a></li>
+<li><a class="reference internal" href="#magicksetimageindex" id="id660">MagickSetImageIndex</a></li>
+<li><a class="reference internal" href="#magicksetimageinterlacescheme" id="id661">MagickSetImageInterlaceScheme</a></li>
+<li><a class="reference internal" href="#magicksetimageiterations" id="id662">MagickSetImageIterations</a></li>
+<li><a class="reference internal" href="#magicksetimagemattecolor" id="id663">MagickSetImageMatteColor</a></li>
+<li><a class="reference internal" href="#magicksetimageoption" id="id664">MagickSetImageOption</a></li>
+<li><a class="reference internal" href="#magicksetimageorientation" id="id665">MagickSetImageOrientation</a></li>
+<li><a class="reference internal" href="#magicksetimagepage" id="id666">MagickSetImagePage</a></li>
+<li><a class="reference internal" href="#magicksetimagepixels" id="id667">MagickSetImagePixels</a></li>
+<li><a class="reference internal" href="#magicksetimageprofile" id="id668">MagickSetImageProfile</a></li>
+<li><a class="reference internal" href="#magicksetimageredprimary" id="id669">MagickSetImageRedPrimary</a></li>
+<li><a class="reference internal" href="#magicksetimagerenderingintent" id="id670">MagickSetImageRenderingIntent</a></li>
+<li><a class="reference internal" href="#magicksetimageresolution" id="id671">MagickSetImageResolution</a></li>
+<li><a class="reference internal" href="#magicksetimagescene" id="id672">MagickSetImageScene</a></li>
+<li><a class="reference internal" href="#magicksetimagetype" id="id673">MagickSetImageType</a></li>
+<li><a class="reference internal" href="#magicksetimagesavedtype" id="id674">MagickSetImageSavedType</a></li>
+<li><a class="reference internal" href="#magicksetimageunits" id="id675">MagickSetImageUnits</a></li>
+<li><a class="reference internal" href="#magicksetimagevirtualpixelmethod" id="id676">MagickSetImageVirtualPixelMethod</a></li>
+<li><a class="reference internal" href="#magicksetinterlacescheme" id="id677">MagickSetInterlaceScheme</a></li>
+<li><a class="reference internal" href="#magicksetresolution" id="id678">MagickSetResolution</a></li>
+<li><a class="reference internal" href="#magicksetresolutionunits" id="id679">MagickSetResolutionUnits</a></li>
+<li><a class="reference internal" href="#magicksetresourcelimit" id="id680">MagickSetResourceLimit</a></li>
+<li><a class="reference internal" href="#magicksetsamplingfactors" id="id681">MagickSetSamplingFactors</a></li>
+<li><a class="reference internal" href="#magicksetsize" id="id682">MagickSetSize</a></li>
+<li><a class="reference internal" href="#magicksetimagewhitepoint" id="id683">MagickSetImageWhitePoint</a></li>
+<li><a class="reference internal" href="#magicksetpassphrase" id="id684">MagickSetPassphrase</a></li>
+<li><a class="reference internal" href="#magicksharpenimage" id="id685">MagickSharpenImage</a></li>
+<li><a class="reference internal" href="#magickshaveimage" id="id686">MagickShaveImage</a></li>
+<li><a class="reference internal" href="#magickshearimage" id="id687">MagickShearImage</a></li>
+<li><a class="reference internal" href="#magicksolarizeimage" id="id688">MagickSolarizeImage</a></li>
+<li><a class="reference internal" href="#magickspreadimage" id="id689">MagickSpreadImage</a></li>
+<li><a class="reference internal" href="#magicksteganoimage" id="id690">MagickSteganoImage</a></li>
+<li><a class="reference internal" href="#magickstereoimage" id="id691">MagickStereoImage</a></li>
+<li><a class="reference internal" href="#magickstripimage" id="id692">MagickStripImage</a></li>
+<li><a class="reference internal" href="#magickswirlimage" id="id693">MagickSwirlImage</a></li>
+<li><a class="reference internal" href="#magicktextureimage" id="id694">MagickTextureImage</a></li>
+<li><a class="reference internal" href="#magickthresholdimage" id="id695">MagickThresholdImage</a></li>
+<li><a class="reference internal" href="#magickthresholdimagechannel" id="id696">MagickThresholdImageChannel</a></li>
+<li><a class="reference internal" href="#magicktintimage" id="id697">MagickTintImage</a></li>
+<li><a class="reference internal" href="#magicktransformimage" id="id698">MagickTransformImage</a></li>
+<li><a class="reference internal" href="#magicktransparentimage" id="id699">MagickTransparentImage</a></li>
+<li><a class="reference internal" href="#magicktrimimage" id="id700">MagickTrimImage</a></li>
+<li><a class="reference internal" href="#magickunsharpmaskimage" id="id701">MagickUnsharpMaskImage</a></li>
+<li><a class="reference internal" href="#magickwaveimage" id="id702">MagickWaveImage</a></li>
+<li><a class="reference internal" href="#magickwhitethresholdimage" id="id703">MagickWhiteThresholdImage</a></li>
+<li><a class="reference internal" href="#magickwriteimage" id="id704">MagickWriteImage</a></li>
+<li><a class="reference internal" href="#magickwriteimagesfile" id="id705">MagickWriteImagesFile</a></li>
+<li><a class="reference internal" href="#magickwriteimageblob" id="id706">MagickWriteImageBlob</a></li>
+<li><a class="reference internal" href="#magickwriteimagefile" id="id707">MagickWriteImageFile</a></li>
+<li><a class="reference internal" href="#magickwriteimages" id="id708">MagickWriteImages</a></li>
+<li><a class="reference internal" href="#newmagickwand" id="id709">NewMagickWand</a></li>
+</ul>
+</div>
+<div class="section" id="clonemagickwand">
+<h1><a class="toc-backref" href="#id473">CloneMagickWand</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *CloneMagickWand( const MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>CloneMagickWand() makes an exact copy of the specified wand.</p>
+<p>The format of the CloneMagickWand method is:</p>
+<pre class="literal-block">
+MagickWand *CloneMagickWand( const MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand to clone.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="destroymagickwand">
+<h1><a class="toc-backref" href="#id474">DestroyMagickWand</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void DestroyMagickWand( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>DestroyMagickWand() deallocates memory associated with an MagickWand.</p>
+<p>The format of the DestroyMagickWand method is:</p>
+<pre class="literal-block">
+void DestroyMagickWand( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickadaptivethresholdimage">
+<h1><a class="toc-backref" href="#id475">MagickAdaptiveThresholdImage</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickAdaptiveThresholdImage( MagickWand *wand, const unsigned long width,
+ const unsigned long height, const long offset );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>MagickAdaptiveThresholdImage() selects an individual threshold for each pixel
+based on the range of intensity values in its local neighborhood. This
+allows for thresholding of an image whose global intensity histogram
+doesn't contain distinctive peaks.</p>
+<p>The format of the MagickAdaptiveThresholdImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickAdaptiveThresholdImage( MagickWand *wand, const unsigned long width,
+ const unsigned long height, const long offset );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>width:</dt>
+<dd>The width of the local neighborhood.</dd>
+<dt>height:</dt>
+<dd>The height of the local neighborhood.</dd>
+<dt>offset:</dt>
+<dd>The mean offset.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickaddimage">
+<h1><a class="toc-backref" href="#id476">MagickAddImage</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickAddImage( MagickWand *wand, const MagickWand *add_wand );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>MagickAddImage() adds the specified images at the current image location.</p>
+<p>The format of the MagickAddImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickAddImage( MagickWand *wand, const MagickWand *add_wand );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>insert:</dt>
+<dd>The splice wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickaddnoiseimage">
+<h1><a class="toc-backref" href="#id477">MagickAddNoiseImage</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickAddNoiseImage( MagickWand *wand, const <a class="reference external" href="../api/types.html#noisetype">NoiseType</a> noise_type );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>MagickAddNoiseImage() adds random noise to the image.</p>
+<p>The format of the MagickAddNoiseImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickAddNoiseImage( MagickWand *wand, const <a class="reference external" href="../api/types.html#noisetype">NoiseType</a> noise_type );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>noise_type:</dt>
+<dd>The type of noise: Uniform, Gaussian, Multiplicative,
+Impulse, Laplacian, Poisson, or Random.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickaffinetransformimage">
+<h1><a class="toc-backref" href="#id478">MagickAffineTransformImage</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickAffineTransformImage( MagickWand *wand, const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>MagickAffineTransformImage() transforms an image as dictated by the affine
+matrix of the drawing wand.</p>
+<p>The format of the MagickAffineTransformImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickAffineTransformImage( MagickWand *wand, const DrawingWand *drawing_wand );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>drawing_wand:</dt>
+<dd>The draw wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickannotateimage">
+<h1><a class="toc-backref" href="#id479">MagickAnnotateImage</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickAnnotateImage( MagickWand *wand, const DrawingWand *drawing_wand,
+ const double x, const double y, const double angle,
+ const char *text );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>MagickAnnotateImage() annotates an image with text.</p>
+<p>The format of the MagickAnnotateImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickAnnotateImage( MagickWand *wand, const DrawingWand *drawing_wand,
+ const double x, const double y, const double angle,
+ const char *text );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>drawing_wand:</dt>
+<dd>The draw wand.</dd>
+<dt>x:</dt>
+<dd>x ordinate to left of text</dd>
+<dt>y:</dt>
+<dd>y ordinate to text baseline</dd>
+<dt>angle:</dt>
+<dd>rotate text relative to this angle.</dd>
+<dt>text:</dt>
+<dd>text to draw</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickanimateimages">
+<h1><a class="toc-backref" href="#id480">MagickAnimateImages</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickAnimateImages( MagickWand *wand, const char *server_name );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>MagickAnimateImages() animates an image or image sequence.</p>
+<p>The format of the MagickAnimateImages method is:</p>
+<pre class="literal-block">
+unsigned int MagickAnimateImages( MagickWand *wand, const char *server_name );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>server_name:</dt>
+<dd>The X server name.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickappendimages">
+<h1><a class="toc-backref" href="#id481">MagickAppendImages</a></h1>
+<div class="section" id="id15">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *MagickAppendImages( MagickWand *wand, const unsigned int stack );
+</pre>
+</div>
+<div class="section" id="id16">
+<h2>Description</h2>
+<p>MagickAppendImages() append a set of images.</p>
+<p>The format of the MagickAppendImages method is:</p>
+<pre class="literal-block">
+MagickWand *MagickAppendImages( MagickWand *wand, const unsigned int stack );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>stack:</dt>
+<dd>By default, images are stacked left-to-right. Set stack to True
+to stack them top-to-bottom.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickautoorientimage">
+<h1><a class="toc-backref" href="#id482">MagickAutoOrientImage</a></h1>
+<div class="section" id="id17">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickAutoOrientImage( MagickWand *wand,
+ const OrientationType current_orientation,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+</div>
+<div class="section" id="id18">
+<h2>Description</h2>
+<p>MagickAutoOrientImage() adjusts the current image so that its orientation
+is suitable for viewing (i.e. top-left orientation).</p>
+<p>The format of the MagickAutoOrientImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickAutoOrientImage( MagickWand *wand,
+ const OrientationType current_orientation,
+ <a class="reference external" href="../api/types.html#exceptioninfo">ExceptionInfo</a> *exception );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>current_orientation:</dt>
+<dd>Current image orientation. May be one of:
+TopLeftOrientation Left to right and Top to bottom
+TopRightOrientation Right to left and Top to bottom
+BottomRightOrientation Right to left and Bottom to top
+BottomLeftOrientation Left to right and Bottom to top
+LeftTopOrientation Top to bottom and Left to right
+RightTopOrientation Top to bottom and Right to left
+RightBottomOrientation Bottom to top and Right to left
+LeftBottomOrientation Bottom to top and Left to right
+UndefinedOrientation Current orientation is not known.
+Use orientation defined by the
+current image if any. Equivalent
+to MagickGetImageOrientation().</dd>
+</dl>
+<p>Returns True on success, False otherwise.</p>
+<p>Note that after successful auto-orientation the internal orientation will
+be set to TopLeftOrientation. However this internal value is only written
+to TIFF files. For JPEG files, there is currently no support for resetting
+the EXIF orientation tag to TopLeft so the JPEG should be stripped or EXIF
+profile removed if present to prevent saved auto-oriented images from being
+incorrectly rotated a second time by follow-on viewers that understand the
+EXIF orientation tag.</p>
+</div>
+</div>
+<div class="section" id="magickaverageimages">
+<h1><a class="toc-backref" href="#id483">MagickAverageImages</a></h1>
+<div class="section" id="id19">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *MagickAverageImages( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id20">
+<h2>Description</h2>
+<p>MagickAverageImages() average a set of images.</p>
+<p>The format of the MagickAverageImages method is:</p>
+<pre class="literal-block">
+MagickWand *MagickAverageImages( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickblackthresholdimage">
+<h1><a class="toc-backref" href="#id484">MagickBlackThresholdImage</a></h1>
+<div class="section" id="id21">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickBlackThresholdImage( MagickWand *wand, const PixelWand *threshold );
+</pre>
+</div>
+<div class="section" id="id22">
+<h2>Description</h2>
+<p>MagickBlackThresholdImage() is like MagickThresholdImage() but forces all
+pixels below the threshold into black while leaving all pixels above the
+threshold unchanged.</p>
+<p>The format of the MagickBlackThresholdImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickBlackThresholdImage( MagickWand *wand, const PixelWand *threshold );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>threshold:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickblurimage">
+<h1><a class="toc-backref" href="#id485">MagickBlurImage</a></h1>
+<div class="section" id="id23">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickBlurImage( MagickWand *wand, const double radius, const double sigma );
+</pre>
+</div>
+<div class="section" id="id24">
+<h2>Description</h2>
+<p>MagickBlurImage() blurs an image. We convolve the image with a Gaussian
+operator of the given radius and standard deviation (sigma).
+For reasonable results, the radius should be larger than sigma. Use a
+radius of 0 and BlurImage() selects a suitable radius for you.</p>
+<p>The format of the MagickBlurImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickBlurImage( MagickWand *wand, const double radius, const double sigma );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>radius:</dt>
+<dd>The radius of the Gaussian, in pixels, not counting the center
+pixel.</dd>
+<dt>sigma:</dt>
+<dd>The standard deviation of the Gaussian, in pixels.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickborderimage">
+<h1><a class="toc-backref" href="#id486">MagickBorderImage</a></h1>
+<div class="section" id="id25">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickBorderImage( MagickWand *wand, const PixelWand *bordercolor,
+ const unsigned long width, const unsigned long height );
+</pre>
+</div>
+<div class="section" id="id26">
+<h2>Description</h2>
+<p>MagickBorderImage() surrounds the image with a border of the color defined
+by the bordercolor pixel wand.</p>
+<p>The format of the MagickBorderImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickBorderImage( MagickWand *wand, const PixelWand *bordercolor,
+ const unsigned long width, const unsigned long height );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>bordercolor:</dt>
+<dd>The border color pixel wand.</dd>
+<dt>width:</dt>
+<dd>The border width.</dd>
+<dt>height:</dt>
+<dd>The border height.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickcdlimage">
+<h1><a class="toc-backref" href="#id487">MagickCdlImage</a></h1>
+<div class="section" id="id27">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail MagickCdlImage( MagickWand *wand, const char *cdl );
+</pre>
+</div>
+<div class="section" id="id28">
+<h2>Description</h2>
+<p>The MagickCdlImage() method applies ("bakes in") the ASC-CDL which is a
+format for the exchange of basic primary color grading information between
+equipment and software from different manufacturers. The format defines
+the math for three functions: slope, offset and power. Each function uses
+a number for the red, green, and blue color channels for a total of nine
+numbers comprising a single color decision. A tenth number for chrominance
+(saturation) has been proposed but is not yet standardized.</p>
+<p>The cdl argument string is comma delimited and is in the form (but
+without invervening spaces or line breaks):</p>
+<p>redslope, redoffset, redpower :
+greenslope, greenoffset, greenpower :
+blueslope, blueoffset, bluepower :
+saturation</p>
+<p>with the unity (no change) specification being:</p>
+<p>"1.0,0.0,1.0:1.0,0.0,1.0:1.0,0.0,1.0:0.0"</p>
+<p>See <a class="reference external" href="http://en.wikipedia.org/wiki/ASC_CDL">http://en.wikipedia.org/wiki/ASC_CDL</a> for more information.</p>
+<p>The format of the MagickCdlImage method is:</p>
+<pre class="literal-block">
+MagickPassFail MagickCdlImage( MagickWand *wand, const char *cdl );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The image wand.</dd>
+<dt>cdl:</dt>
+<dd>Define the coefficients for slope offset and power in the
+red green and blue channels, plus saturation.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickcharcoalimage">
+<h1><a class="toc-backref" href="#id488">MagickCharcoalImage</a></h1>
+<div class="section" id="id29">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickCharcoalImage( MagickWand *wand, const double radius, const double sigma );
+</pre>
+</div>
+<div class="section" id="id30">
+<h2>Description</h2>
+<p>MagickCharcoalImage() simulates a charcoal drawing.</p>
+<p>The format of the MagickCharcoalImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickCharcoalImage( MagickWand *wand, const double radius, const double sigma );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>radius:</dt>
+<dd>The radius of the Gaussian, in pixels, not counting the center
+pixel.</dd>
+<dt>sigma:</dt>
+<dd>The standard deviation of the Gaussian, in pixels.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickchopimage">
+<h1><a class="toc-backref" href="#id489">MagickChopImage</a></h1>
+<div class="section" id="id31">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickChopImage( MagickWand *wand, const unsigned long width,
+ const unsigned long height, const long x, const long y );
+</pre>
+</div>
+<div class="section" id="id32">
+<h2>Description</h2>
+<p>MagickChopImage() removes a region of an image and collapses the image to
+occupy the removed portion</p>
+<p>The format of the MagickChopImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickChopImage( MagickWand *wand, const unsigned long width,
+ const unsigned long height, const long x, const long y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>width:</dt>
+<dd>The region width.</dd>
+<dt>height:</dt>
+<dd>The region height.</dd>
+<dt>x:</dt>
+<dd>The region x offset.</dd>
+<dt>y:</dt>
+<dd>The region y offset.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickclearexception">
+<h1><a class="toc-backref" href="#id490">MagickClearException</a></h1>
+<div class="section" id="id33">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void MagickClearException( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id34">
+<h2>Description</h2>
+<p>MagickClearException() clears the last wand exception.</p>
+<p>The format of the MagickClearException method is:</p>
+<pre class="literal-block">
+void MagickClearException( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickclipimage">
+<h1><a class="toc-backref" href="#id491">MagickClipImage</a></h1>
+<div class="section" id="id35">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickClipImage( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id36">
+<h2>Description</h2>
+<p>MagickClipImage() clips along the first path from the 8BIM profile, if
+present.</p>
+<p>The format of the MagickClipImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickClipImage( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickclippathimage">
+<h1><a class="toc-backref" href="#id492">MagickClipPathImage</a></h1>
+<div class="section" id="id37">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickClipPathImage( MagickWand *wand, const char *pathname,
+ const unsigned int inside );
+</pre>
+</div>
+<div class="section" id="id38">
+<h2>Description</h2>
+<p>MagickClipPathImage() clips along the named paths from the 8BIM profile, if
+present. Later operations take effect inside the path. Id may be a number
+if preceded with #, to work on a numbered path, e.g., "#1" to use the first
+path.</p>
+<p>The format of the MagickClipPathImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickClipPathImage( MagickWand *wand, const char *pathname,
+ const unsigned int inside );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>pathname:</dt>
+<dd>name of clipping path resource. If name is preceded by #, use
+clipping path numbered by name.</dd>
+<dt>inside:</dt>
+<dd>if non-zero, later operations take effect inside clipping path.
+Otherwise later operations take effect outside clipping path.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickcoalesceimages">
+<h1><a class="toc-backref" href="#id493">MagickCoalesceImages</a></h1>
+<div class="section" id="id39">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *MagickCoalesceImages( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id40">
+<h2>Description</h2>
+<p>MagickCoalesceImages() composites a set of images while respecting any page
+offsets and disposal methods. GIF, MIFF, and MNG animation sequences
+typically start with an image background and each subsequent image
+varies in size and offset. MagickCoalesceImages() returns a new sequence
+where each image in the sequence is the same size as the first and
+composited with the next image in the sequence.</p>
+<p>The format of the MagickCoalesceImages method is:</p>
+<pre class="literal-block">
+MagickWand *MagickCoalesceImages( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickcolorfloodfillimage">
+<h1><a class="toc-backref" href="#id494">MagickColorFloodfillImage</a></h1>
+<div class="section" id="id41">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickColorFloodfillImage( MagickWand *wand, const PixelWand *fill,
+ const double fuzz, const PixelWand *bordercolor,
+ const long x, const long y );
+</pre>
+</div>
+<div class="section" id="id42">
+<h2>Description</h2>
+<p>MagickColorFloodfillImage() changes the color value of any pixel that matches
+target and is an immediate neighbor. If the method FillToBorderMethod is
+specified, the color value is changed for any neighbor pixel that does not
+match the bordercolor member of image.</p>
+<p>The format of the MagickColorFloodfillImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickColorFloodfillImage( MagickWand *wand, const PixelWand *fill,
+ const double fuzz, const PixelWand *bordercolor,
+ const long x, const long y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>fill:</dt>
+<dd>The floodfill color pixel wand.</dd>
+<dt>fuzz:</dt>
+<dd>By default target must match a particular pixel color
+exactly. However, in many cases two colors may differ by a small amount.
+The fuzz member of image defines how much tolerance is acceptable to
+consider two colors as the same. For example, set fuzz to 10 and the
+color red at intensities of 100 and 102 respectively are now interpreted
+as the same color for the purposes of the floodfill.</dd>
+<dt>bordercolor:</dt>
+<dd>The border color pixel wand.</dd>
+<dt>x,y:</dt>
+<dd>The starting location of the operation.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickcolorizeimage">
+<h1><a class="toc-backref" href="#id495">MagickColorizeImage</a></h1>
+<div class="section" id="id43">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickColorizeImage( MagickWand *wand, const PixelWand *colorize,
+ const PixelWand *opacity );
+</pre>
+</div>
+<div class="section" id="id44">
+<h2>Description</h2>
+<p>MagickColorizeImage() blends the fill color with each pixel in the image.</p>
+<p>The format of the MagickColorizeImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickColorizeImage( MagickWand *wand, const PixelWand *colorize,
+ const PixelWand *opacity );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>colorize:</dt>
+<dd>The colorize pixel wand.</dd>
+<dt>opacity:</dt>
+<dd>The opacity pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickcommentimage">
+<h1><a class="toc-backref" href="#id496">MagickCommentImage</a></h1>
+<div class="section" id="id45">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickCommentImage( MagickWand *wand, const char *comment );
+</pre>
+</div>
+<div class="section" id="id46">
+<h2>Description</h2>
+<p>MagickCommentImage() adds a comment to your image.</p>
+<p>The format of the MagickCommentImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickCommentImage( MagickWand *wand, const char *comment );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>comment:</dt>
+<dd>The image comment.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickcompareimagechannels">
+<h1><a class="toc-backref" href="#id497">MagickCompareImageChannels</a></h1>
+<div class="section" id="id47">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *MagickCompareImageChannels( MagickWand *wand, const MagickWand *reference,
+ const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel, const MetricType metric,
+ double *distortion );
+</pre>
+</div>
+<div class="section" id="id48">
+<h2>Description</h2>
+<p>MagickCompareImageChannels() compares one or more image channels and
+returns the specified distortion metric.</p>
+<p>The format of the MagickCompareImageChannels method is:</p>
+<pre class="literal-block">
+MagickWand *MagickCompareImageChannels( MagickWand *wand, const MagickWand *reference,
+ const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel, const MetricType metric,
+ double *distortion );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>reference:</dt>
+<dd>The reference wand.</dd>
+<dt>channel:</dt>
+<dd>The channel.</dd>
+<dt>metric:</dt>
+<dd>The metric.</dd>
+<dt>distortion:</dt>
+<dd>The computed distortion between the images.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickcompareimages">
+<h1><a class="toc-backref" href="#id498">MagickCompareImages</a></h1>
+<div class="section" id="id49">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *MagickCompareImages( MagickWand *wand, const MagickWand *reference,
+ const MetricType metric, double *distortion );
+</pre>
+</div>
+<div class="section" id="id50">
+<h2>Description</h2>
+<p>MagickCompareImage() compares one or more images and returns the specified
+distortion metric.</p>
+<p>The format of the MagickCompareImages method is:</p>
+<pre class="literal-block">
+MagickWand *MagickCompareImages( MagickWand *wand, const MagickWand *reference,
+ const MetricType metric, double *distortion );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>reference:</dt>
+<dd>The reference wand.</dd>
+<dt>metric:</dt>
+<dd>The metric.</dd>
+<dt>distortion:</dt>
+<dd>The computed distortion between the images.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickcompositeimage">
+<h1><a class="toc-backref" href="#id499">MagickCompositeImage</a></h1>
+<div class="section" id="id51">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickCompositeImage( MagickWand *wand, const MagickWand *composite_wand,
+ const <a class="reference external" href="../api/types.html#compositeoperator">CompositeOperator</a> compose, const long x,
+ const long y );
+</pre>
+</div>
+<div class="section" id="id52">
+<h2>Description</h2>
+<p>MagickCompositeImage() composite one image onto another at the specified
+offset.</p>
+<p>The format of the MagickCompositeImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickCompositeImage( MagickWand *wand, const MagickWand *composite_wand,
+ const <a class="reference external" href="../api/types.html#compositeoperator">CompositeOperator</a> compose, const long x,
+ const long y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>composite_image:</dt>
+<dd>The composite image.</dd>
+<dt>compose:</dt>
+<dd>This operator affects how the composite is applied to the
+image. The default is Over. Choose from these operators:</dd>
+</dl>
+<p>OverCompositeOp InCompositeOp OutCompositeOP
+AtopCompositeOP XorCompositeOP PlusCompositeOP
+MinusCompositeOP AddCompositeOP SubtractCompositeOP
+DifferenceCompositeOP BumpmapCompositeOP CopyCompositeOP
+DisplaceCompositeOP</p>
+<dl class="docutils">
+<dt>x_offset:</dt>
+<dd>The column offset of the composited image.</dd>
+<dt>y_offset:</dt>
+<dd>The row offset of the composited image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickcontrastimage">
+<h1><a class="toc-backref" href="#id500">MagickContrastImage</a></h1>
+<div class="section" id="id53">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickContrastImage( MagickWand *wand, const unsigned int sharpen );
+</pre>
+</div>
+<div class="section" id="id54">
+<h2>Description</h2>
+<p>MagickContrastImage() enhances the intensity differences between the lighter
+and darker elements of the image. Set sharpen to a value other than 0 to
+increase the image contrast otherwise the contrast is reduced.</p>
+<p>The format of the MagickContrastImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickContrastImage( MagickWand *wand, const unsigned int sharpen );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>sharpen:</dt>
+<dd>Increase or decrease image contrast.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickconvolveimage">
+<h1><a class="toc-backref" href="#id501">MagickConvolveImage</a></h1>
+<div class="section" id="id55">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickConvolveImage( MagickWand *wand, const unsigned long order,
+ const double *kernel );
+</pre>
+</div>
+<div class="section" id="id56">
+<h2>Description</h2>
+<p>MagickConvolveImage() applies a custom convolution kernel to the image.</p>
+<p>The format of the MagickConvolveImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickConvolveImage( MagickWand *wand, const unsigned long order,
+ const double *kernel );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>order:</dt>
+<dd>The number of columns and rows in the filter kernel.</dd>
+<dt>kernel:</dt>
+<dd>An array of doubles representing the convolution kernel.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickcropimage">
+<h1><a class="toc-backref" href="#id502">MagickCropImage</a></h1>
+<div class="section" id="id57">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickCropImage( MagickWand *wand, const unsigned long width,
+ const unsigned long height, const long x, const long y );
+</pre>
+</div>
+<div class="section" id="id58">
+<h2>Description</h2>
+<p>MagickCropImage() extracts a region of the image.</p>
+<p>The format of the MagickCropImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickCropImage( MagickWand *wand, const unsigned long width,
+ const unsigned long height, const long x, const long y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>width:</dt>
+<dd>The region width.</dd>
+<dt>height:</dt>
+<dd>The region height.</dd>
+<dt>x:</dt>
+<dd>The region x offset.</dd>
+<dt>y:</dt>
+<dd>The region y offset.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickcyclecolormapimage">
+<h1><a class="toc-backref" href="#id503">MagickCycleColormapImage</a></h1>
+<div class="section" id="id59">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickCycleColormapImage( MagickWand *wand, const long displace );
+</pre>
+</div>
+<div class="section" id="id60">
+<h2>Description</h2>
+<p>MagickCycleColormapImage() displaces an image's colormap by a given number
+of positions. If you cycle the colormap a number of times you can produce
+a psychodelic effect.</p>
+<p>The format of the MagickCycleColormapImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickCycleColormapImage( MagickWand *wand, const long displace );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>pixel_wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickdeconstructimages">
+<h1><a class="toc-backref" href="#id504">MagickDeconstructImages</a></h1>
+<div class="section" id="id61">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *MagickDeconstructImages( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id62">
+<h2>Description</h2>
+<p>MagickDeconstructImages() compares each image with the next in a sequence
+and returns the maximum bounding region of any pixel differences it
+discovers.</p>
+<p>The format of the MagickDeconstructImages method is:</p>
+<pre class="literal-block">
+MagickWand *MagickDeconstructImages( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickdescribeimage">
+<h1><a class="toc-backref" href="#id505">MagickDescribeImage</a></h1>
+<div class="section" id="id63">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+const char *MagickDescribeImage( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id64">
+<h2>Description</h2>
+<p>MagickDescribeImage() describes an image by formatting its attributes
+to an allocated string which must be freed by the user. Attributes
+include the image width, height, size, and others. The string is
+similar to the output of 'identify -verbose'.</p>
+<p>The format of the MagickDescribeImage method is:</p>
+<pre class="literal-block">
+const char *MagickDescribeImage( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickdespeckleimage">
+<h1><a class="toc-backref" href="#id506">MagickDespeckleImage</a></h1>
+<div class="section" id="id65">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickDespeckleImage( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id66">
+<h2>Description</h2>
+<p>MagickDespeckleImage() reduces the speckle noise in an image while
+perserving the edges of the original image.</p>
+<p>The format of the MagickDespeckleImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickDespeckleImage( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickdisplayimage">
+<h1><a class="toc-backref" href="#id507">MagickDisplayImage</a></h1>
+<div class="section" id="id67">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickDisplayImage( MagickWand *wand, const char *server_name );
+</pre>
+</div>
+<div class="section" id="id68">
+<h2>Description</h2>
+<p>MagickDisplayImage() displays an image.</p>
+<p>The format of the MagickDisplayImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickDisplayImage( MagickWand *wand, const char *server_name );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>server_name:</dt>
+<dd>The X server name.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickdisplayimages">
+<h1><a class="toc-backref" href="#id508">MagickDisplayImages</a></h1>
+<div class="section" id="id69">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickDisplayImages( MagickWand *wand, const char *server_name );
+</pre>
+</div>
+<div class="section" id="id70">
+<h2>Description</h2>
+<p>MagickDisplayImages() displays an image or image sequence.</p>
+<p>The format of the MagickDisplayImages method is:</p>
+<pre class="literal-block">
+unsigned int MagickDisplayImages( MagickWand *wand, const char *server_name );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>server_name:</dt>
+<dd>The X server name.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickdrawimage">
+<h1><a class="toc-backref" href="#id509">MagickDrawImage</a></h1>
+<div class="section" id="id71">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickDrawImage( MagickWand *wand, const DrawingWand *drawing_wand );
+</pre>
+</div>
+<div class="section" id="id72">
+<h2>Description</h2>
+<p>MagickDrawImage() draws vectors on the image as described by DrawingWand.</p>
+<p>The format of the MagickDrawImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickDrawImage( MagickWand *wand, const DrawingWand *drawing_wand );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>drawing_wand:</dt>
+<dd>The draw wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickedgeimage">
+<h1><a class="toc-backref" href="#id510">MagickEdgeImage</a></h1>
+<div class="section" id="id73">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickEdgeImage( MagickWand *wand, const double radius );
+</pre>
+</div>
+<div class="section" id="id74">
+<h2>Description</h2>
+<p>MagickEdgeImage() enhance edges within the image with a convolution filter
+of the given radius. Use a radius of 0 and Edge() selects a suitable
+radius for you.</p>
+<p>The format of the MagickEdgeImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickEdgeImage( MagickWand *wand, const double radius );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>radius:</dt>
+<dd>the radius of the pixel neighborhood.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickembossimage">
+<h1><a class="toc-backref" href="#id511">MagickEmbossImage</a></h1>
+<div class="section" id="id75">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickEmbossImage( MagickWand *wand, const double radius, const double sigma );
+</pre>
+</div>
+<div class="section" id="id76">
+<h2>Description</h2>
+<p>MagickEmbossImage() returns a grayscale image with a three-dimensional
+effect. We convolve the image with a Gaussian operator of the given radius
+and standard deviation (sigma). For reasonable results, radius should be
+larger than sigma. Use a radius of 0 and Emboss() selects a suitable
+radius for you.</p>
+<p>The format of the MagickEmbossImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickEmbossImage( MagickWand *wand, const double radius, const double sigma );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>radius:</dt>
+<dd>The radius of the Gaussian, in pixels, not counting the center
+pixel.</dd>
+<dt>sigma:</dt>
+<dd>The standard deviation of the Gaussian, in pixels.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickenhanceimage">
+<h1><a class="toc-backref" href="#id512">MagickEnhanceImage</a></h1>
+<div class="section" id="id77">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickEnhanceImage( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id78">
+<h2>Description</h2>
+<p>MagickEnhanceImage() applies a digital filter that improves the quality of a
+noisy image.</p>
+<p>The format of the MagickEnhanceImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickEnhanceImage( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickequalizeimage">
+<h1><a class="toc-backref" href="#id513">MagickEqualizeImage</a></h1>
+<div class="section" id="id79">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickEqualizeImage( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id80">
+<h2>Description</h2>
+<p>MagickEqualizeImage() equalizes the image histogram.</p>
+<p>The format of the MagickEqualizeImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickEqualizeImage( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickextentimage">
+<h1><a class="toc-backref" href="#id514">MagickExtentImage</a></h1>
+<div class="section" id="id81">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickExtentImage( MagickWand *wand, const size_t width, const size_t height,
+ const ssize_t x, const ssize_t y );
+</pre>
+</div>
+<div class="section" id="id82">
+<h2>Description</h2>
+<p>Use MagickExtentImage() to change the image dimensions as specified by
+geometry width and height. The existing image content is composited at
+the position specified by geometry x and y using the image compose method.
+Existing image content which falls outside the bounds of the new image
+dimensions is discarded.</p>
+<p>The format of the MagickExtentImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickExtentImage( MagickWand *wand, const size_t width, const size_t height,
+ const ssize_t x, const ssize_t y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>width:</dt>
+<dd>New image width</dd>
+<dt>height:</dt>
+<dd>New image height</dd>
+<dt>x, y:</dt>
+<dd>Top left composition coordinate to place existing image content
+on the new image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickflattenimages">
+<h1><a class="toc-backref" href="#id515">MagickFlattenImages</a></h1>
+<div class="section" id="id83">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *MagickFlattenImages( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id84">
+<h2>Description</h2>
+<p>MagickFlattenImages() merges a sequence of images. This is useful for
+combining Photoshop layers into a single image.</p>
+<p>The format of the MagickFlattenImages method is:</p>
+<pre class="literal-block">
+MagickWand *MagickFlattenImages( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickflipimage">
+<h1><a class="toc-backref" href="#id516">MagickFlipImage</a></h1>
+<div class="section" id="id85">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickFlipImage( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id86">
+<h2>Description</h2>
+<p>MagickFlipImage() creates a vertical mirror image by reflecting the pixels
+around the central x-axis.</p>
+<p>The format of the MagickFlipImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickFlipImage( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickflopimage">
+<h1><a class="toc-backref" href="#id517">MagickFlopImage</a></h1>
+<div class="section" id="id87">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickFlopImage( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id88">
+<h2>Description</h2>
+<p>MagickFlopImage() creates a horizontal mirror image by reflecting the pixels
+around the central y-axis.</p>
+<p>The format of the MagickFlopImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickFlopImage( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickframeimage">
+<h1><a class="toc-backref" href="#id518">MagickFrameImage</a></h1>
+<div class="section" id="id89">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickFrameImage( MagickWand *wand, const PixelWand *matte_color,
+ const unsigned long width, const unsigned long height,
+ const long inner_bevel, const long outer_bevel );
+</pre>
+</div>
+<div class="section" id="id90">
+<h2>Description</h2>
+<p>MagickFrameImage() adds a simulated three-dimensional border around the
+image. The width and height specify the border width of the vertical and
+horizontal sides of the frame. The inner and outer bevels indicate the
+width of the inner and outer shadows of the frame.</p>
+<p>The format of the MagickFrameImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickFrameImage( MagickWand *wand, const PixelWand *matte_color,
+ const unsigned long width, const unsigned long height,
+ const long inner_bevel, const long outer_bevel );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>matte_color:</dt>
+<dd>The frame color pixel wand.</dd>
+<dt>width:</dt>
+<dd>The border width.</dd>
+<dt>height:</dt>
+<dd>The border height.</dd>
+<dt>inner_bevel:</dt>
+<dd>The inner bevel width.</dd>
+<dt>outer_bevel:</dt>
+<dd>The outer bevel width.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickfximage">
+<h1><a class="toc-backref" href="#id519">MagickFxImage</a></h1>
+<div class="section" id="id91">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *MagickFxImage( MagickWand *wand, const char *expression );
+</pre>
+</div>
+<div class="section" id="id92">
+<h2>Description</h2>
+<p>MagickFxImage() evaluate expression for each pixel in the image.</p>
+<p>The format of the MagickFxImage method is:</p>
+<pre class="literal-block">
+MagickWand *MagickFxImage( MagickWand *wand, const char *expression );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>expression:</dt>
+<dd>The expression.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickfximagechannel">
+<h1><a class="toc-backref" href="#id520">MagickFxImageChannel</a></h1>
+<div class="section" id="id93">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *MagickFxImageChannel( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const char *expression );
+</pre>
+</div>
+<div class="section" id="id94">
+<h2>Description</h2>
+<p>MagickFxImageChannel() evaluate expression for each pixel in the specified
+channel.</p>
+<p>The format of the MagickFxImageChannel method is:</p>
+<pre class="literal-block">
+MagickWand *MagickFxImageChannel( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const char *expression );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>channel:</dt>
+<dd>Identify which channel to level: RedChannel, GreenChannel,
+BlueChannel, OpacityChannel, CyanChannel, MagentaChannel, YellowChannel,
+BlackChannel.</dd>
+<dt>expression:</dt>
+<dd>The expression.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgammaimage">
+<h1><a class="toc-backref" href="#id521">MagickGammaImage</a></h1>
+<div class="section" id="id95">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGammaImage( MagickWand *wand, const double gamma );
+</pre>
+</div>
+<div class="section" id="id96">
+<h2>Description</h2>
+<p>Use MagickGammaImage() to gamma-correct an image. The same image viewed on
+different devices will have perceptual differences in the way the
+image's intensities are represented on the screen. Specify individual
+gamma levels for the red, green, and blue channels, or adjust all three
+with the gamma parameter. Values typically range from 0.8 to 2.3.</p>
+<p>You can also reduce the influence of a particular channel with a gamma
+value of 0.</p>
+<p>The format of the MagickGammaImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickGammaImage( MagickWand *wand, const double gamma );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>gamme:</dt>
+<dd>Define the level of gamma correction.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgammaimagechannel">
+<h1><a class="toc-backref" href="#id522">MagickGammaImageChannel</a></h1>
+<div class="section" id="id97">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGammaImageChannel( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const double gamma );
+</pre>
+</div>
+<div class="section" id="id98">
+<h2>Description</h2>
+<p>Use MagickGammaImageChannel() to gamma-correct a particular image channel.
+The same image viewed on different devices will have perceptual differences
+in the way the image's intensities are represented on the screen. Specify
+individual gamma levels for the red, green, and blue channels, or adjust all
+three with the gamma parameter. Values typically range from 0.8 to 2.3.</p>
+<p>You can also reduce the influence of a particular channel with a gamma
+value of 0.</p>
+<p>The format of the MagickGammaImageChannel method is:</p>
+<pre class="literal-block">
+unsigned int MagickGammaImageChannel( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const double gamma );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>channel:</dt>
+<dd>The channel.</dd>
+<dt>level:</dt>
+<dd>Define the level of gamma correction.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetconfigureinfo">
+<h1><a class="toc-backref" href="#id523">MagickGetConfigureInfo</a></h1>
+<div class="section" id="id99">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+char *MagickGetConfigureInfo( MagickWand *wand, const char *name );
+</pre>
+</div>
+<div class="section" id="id100">
+<h2>Description</h2>
+<p>MagickGetConfigureInfo() returns ImageMagick configure attributes such as
+NAME, VERSION, LIB_VERSION, COPYRIGHT, etc.</p>
+<p>The format of the MagickGetConfigureInfo() method is:</p>
+<pre class="literal-block">
+char *MagickGetConfigureInfo( MagickWand *wand, const char *name );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>name:</dt>
+<dd>Return the attribute associated with this name.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetcopyright">
+<h1><a class="toc-backref" href="#id524">MagickGetCopyright</a></h1>
+<div class="section" id="id101">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+const char *MagickGetCopyright( void );
+</pre>
+</div>
+<div class="section" id="id102">
+<h2>Description</h2>
+<p>MagickGetCopyright() returns the ImageMagick API copyright as a string.</p>
+<p>The format of the MagickGetCopyright method is:</p>
+<pre class="literal-block">
+const char *MagickGetCopyright( void );
+</pre>
+</div>
+</div>
+<div class="section" id="magickgetexception">
+<h1><a class="toc-backref" href="#id525">MagickGetException</a></h1>
+<div class="section" id="id103">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+char *MagickGetException( const MagickWand *wand, <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> *severity );
+</pre>
+</div>
+<div class="section" id="id104">
+<h2>Description</h2>
+<p>MagickGetException() returns the severity, reason, and description of any
+error that occurs when using other methods in this API.</p>
+<p>The format of the MagickGetException method is:</p>
+<pre class="literal-block">
+char *MagickGetException( const MagickWand *wand, <a class="reference external" href="../api/types.html#exceptiontype">ExceptionType</a> *severity );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>severity:</dt>
+<dd>The severity of the error is returned here.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetfilename">
+<h1><a class="toc-backref" href="#id526">MagickGetFilename</a></h1>
+<div class="section" id="id105">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+const char *MagickGetFilename( const MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id106">
+<h2>Description</h2>
+<p>MagickGetFilename() returns the filename associated with an image sequence.</p>
+<p>The format of the MagickGetFilename method is:</p>
+<pre class="literal-block">
+const char *MagickGetFilename( const MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgethomeurl">
+<h1><a class="toc-backref" href="#id527">MagickGetHomeURL</a></h1>
+<div class="section" id="id107">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+const char *MagickGetHomeURL( void );
+</pre>
+</div>
+<div class="section" id="id108">
+<h2>Description</h2>
+<p>MagickGetHomeURL() returns the ImageMagick home URL.</p>
+<p>The format of the MagickGetHomeURL method is:</p>
+<pre class="literal-block">
+const char *MagickGetHomeURL( void );
+</pre>
+</div>
+</div>
+<div class="section" id="magickgetimage">
+<h1><a class="toc-backref" href="#id528">MagickGetImage</a></h1>
+<div class="section" id="id109">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *MagickGetImage( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id110">
+<h2>Description</h2>
+<p>MagickGetImage() clones the image at the current image index.</p>
+<p>The format of the MagickGetImage method is:</p>
+<pre class="literal-block">
+MagickWand *MagickGetImage( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimageattribute">
+<h1><a class="toc-backref" href="#id529">MagickGetImageAttribute</a></h1>
+<div class="section" id="id111">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+char *MagickGetImageAttribute( MagickWand *wand, const char *name );
+</pre>
+</div>
+<div class="section" id="id112">
+<h2>Description</h2>
+<p>MagickGetImageAttribute returns an image attribute as a string</p>
+<p>The format of the MagickGetImageAttribute method is:</p>
+<pre class="literal-block">
+char *MagickGetImageAttribute( MagickWand *wand, const char *name );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>name:</dt>
+<dd>The name of the attribute</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagebackgroundcolor">
+<h1><a class="toc-backref" href="#id530">MagickGetImageBackgroundColor</a></h1>
+<div class="section" id="id113">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGetImageBackgroundColor( MagickWand *wand, PixelWand *background_color );
+</pre>
+</div>
+<div class="section" id="id114">
+<h2>Description</h2>
+<p>MagickGetImageBackgroundColor() returns the image background color.</p>
+<p>The format of the MagickGetImageBackgroundColor method is:</p>
+<pre class="literal-block">
+unsigned int MagickGetImageBackgroundColor( MagickWand *wand, PixelWand *background_color );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>background_color:</dt>
+<dd>Return the background color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimageblueprimary">
+<h1><a class="toc-backref" href="#id531">MagickGetImageBluePrimary</a></h1>
+<div class="section" id="id115">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGetImageBluePrimary( MagickWand *wand, double *x, double *y );
+</pre>
+</div>
+<div class="section" id="id116">
+<h2>Description</h2>
+<p>MagickGetImageBluePrimary() returns the chromaticy blue primary point for the
+image.</p>
+<p>The format of the MagickGetImageBluePrimary method is:</p>
+<pre class="literal-block">
+unsigned int MagickGetImageBluePrimary( MagickWand *wand, double *x, double *y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>x:</dt>
+<dd>The chromaticity blue primary x-point.</dd>
+<dt>y:</dt>
+<dd>The chromaticity blue primary y-point.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagebordercolor">
+<h1><a class="toc-backref" href="#id532">MagickGetImageBorderColor</a></h1>
+<div class="section" id="id117">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGetImageBorderColor( MagickWand *wand, PixelWand *border_color );
+</pre>
+</div>
+<div class="section" id="id118">
+<h2>Description</h2>
+<p>MagickGetImageBorderColor() returns the image border color.</p>
+<p>The format of the MagickGetImageBorderColor method is:</p>
+<pre class="literal-block">
+unsigned int MagickGetImageBorderColor( MagickWand *wand, PixelWand *border_color );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>border_color:</dt>
+<dd>Return the border color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimageboundingbox">
+<h1><a class="toc-backref" href="#id533">MagickGetImageBoundingBox</a></h1>
+<div class="section" id="id119">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGetImageBoundingBox( MagickWand *wand, const double fuzz,
+ unsigned long *width, unsigned long *height,
+ long *x, long *y );
+</pre>
+</div>
+<div class="section" id="id120">
+<h2>Description</h2>
+<p>MagickGetImageBoundingBox() obtains the crop bounding box required to
+remove a solid-color border from the image. Color quantums which differ
+less than the fuzz setting are considered to be the same. If a border is
+not detected, then the the original image dimensions are returned. The
+crop bounding box estimation uses the same algorithm as MagickTrimImage().</p>
+<p>The format of the MagickGetImageBoundingBox method is:</p>
+<pre class="literal-block">
+unsigned int MagickGetImageBoundingBox( MagickWand *wand, const double fuzz,
+ unsigned long *width, unsigned long *height,
+ long *x, long *y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>fuzz:</dt>
+<dd>Color comparison fuzz factor. Use 0.0 for exact match.</dd>
+<dt>width:</dt>
+<dd>The crop width</dd>
+<dt>height:</dt>
+<dd>The crop height</dd>
+<dt>x:</dt>
+<dd>The crop x offset</dd>
+<dt>y:</dt>
+<dd>The crop y offset</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagechanneldepth">
+<h1><a class="toc-backref" href="#id534">MagickGetImageChannelDepth</a></h1>
+<div class="section" id="id121">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long MagickGetImageChannelDepth( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel );
+</pre>
+</div>
+<div class="section" id="id122">
+<h2>Description</h2>
+<p>MagickGetImageChannelDepth() gets the depth for a particular image channel.</p>
+<p>The format of the MagickGetImageChannelDepth method is:</p>
+<pre class="literal-block">
+unsigned long MagickGetImageChannelDepth( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>channel:</dt>
+<dd>Identify which channel to extract: RedChannel, GreenChannel,
+BlueChannel, OpacityChannel, CyanChannel, MagentaChannel, YellowChannel,
+BlackChannel.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagechannelextrema">
+<h1><a class="toc-backref" href="#id535">MagickGetImageChannelExtrema</a></h1>
+<div class="section" id="id123">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGetImageChannelExtrema( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ unsigned long *minima, unsigned long *maxima );
+</pre>
+</div>
+<div class="section" id="id124">
+<h2>Description</h2>
+<p>MagickGetImageChannelExtrema() gets the extrema for one or more image
+channels.</p>
+<p>The format of the MagickGetImageChannelExtrema method is:</p>
+<pre class="literal-block">
+unsigned int MagickGetImageChannelExtrema( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ unsigned long *minima, unsigned long *maxima );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>channel:</dt>
+<dd>Identify which channel to extract: RedChannel, GreenChannel,
+BlueChannel, OpacityChannel, CyanChannel, MagentaChannel, YellowChannel,
+or BlackChannel.</dd>
+<dt>minima:</dt>
+<dd>The minimum pixel value for the specified channel(s).</dd>
+<dt>maxima:</dt>
+<dd>The maximum pixel value for the specified channel(s).</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagechannelmean">
+<h1><a class="toc-backref" href="#id536">MagickGetImageChannelMean</a></h1>
+<div class="section" id="id125">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGetImageChannelMean( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ double *mean, double *standard_deviation );
+</pre>
+</div>
+<div class="section" id="id126">
+<h2>Description</h2>
+<p>MagickGetImageChannelMean() gets the mean and standard deviation of one or
+more image channels.</p>
+<p>The format of the MagickGetImageChannelMean method is:</p>
+<pre class="literal-block">
+unsigned int MagickGetImageChannelMean( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ double *mean, double *standard_deviation );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>channel:</dt>
+<dd>Identify which channel to extract: RedChannel, GreenChannel,
+BlueChannel, OpacityChannel, CyanChannel, MagentaChannel, YellowChannel,
+or BlackChannel.</dd>
+<dt>mean:</dt>
+<dd>The mean pixel value for the specified channel(s).</dd>
+<dt>standard_deviation:</dt>
+<dd>The standard deviation for the specified channel(s).</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagecolormapcolor">
+<h1><a class="toc-backref" href="#id537">MagickGetImageColormapColor</a></h1>
+<div class="section" id="id127">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGetImageColormapColor( MagickWand *wand, const unsigned long index,
+ PixelWand *color );
+</pre>
+</div>
+<div class="section" id="id128">
+<h2>Description</h2>
+<p>MagickGetImageColormapColor() returns the color of the specified colormap
+index.</p>
+<p>The format of the MagickGetImageColormapColor method is:</p>
+<pre class="literal-block">
+unsigned int MagickGetImageColormapColor( MagickWand *wand, const unsigned long index,
+ PixelWand *color );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>index:</dt>
+<dd>The offset into the image colormap.</dd>
+<dt>color:</dt>
+<dd>Return the colormap color in this wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagecolors">
+<h1><a class="toc-backref" href="#id538">MagickGetImageColors</a></h1>
+<div class="section" id="id129">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long MagickGetImageColors( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id130">
+<h2>Description</h2>
+<p>MagickGetImageColors() gets the number of unique colors in the image.</p>
+<p>The format of the MagickGetImageColors method is:</p>
+<pre class="literal-block">
+unsigned long MagickGetImageColors( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagecolorspace">
+<h1><a class="toc-backref" href="#id539">MagickGetImageColorspace</a></h1>
+<div class="section" id="id131">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#colorspacetype">ColorspaceType</a> MagickGetImageColorspace( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id132">
+<h2>Description</h2>
+<p>MagickGetImageColorspace() gets the image colorspace.</p>
+<p>The format of the MagickGetImageColorspace method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#colorspacetype">ColorspaceType</a> MagickGetImageColorspace( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagecompose">
+<h1><a class="toc-backref" href="#id540">MagickGetImageCompose</a></h1>
+<div class="section" id="id133">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#compositeoperator">CompositeOperator</a> MagickGetImageCompose( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id134">
+<h2>Description</h2>
+<p>MagickGetImageCompose() returns the composite operator associated with the
+image.</p>
+<p>The format of the MagickGetImageCompose method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#compositeoperator">CompositeOperator</a> MagickGetImageCompose( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagecompression">
+<h1><a class="toc-backref" href="#id541">MagickGetImageCompression</a></h1>
+<div class="section" id="id135">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#compressiontype">CompressionType</a> MagickGetImageCompression( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id136">
+<h2>Description</h2>
+<p>MagickGetImageCompression() gets the image compression.</p>
+<p>The format of the MagickGetImageCompression method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#compressiontype">CompressionType</a> MagickGetImageCompression( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagedelay">
+<h1><a class="toc-backref" href="#id542">MagickGetImageDelay</a></h1>
+<div class="section" id="id137">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long MagickGetImageDelay( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id138">
+<h2>Description</h2>
+<p>MagickGetImageDelay() gets the image delay.</p>
+<p>The format of the MagickGetImageDelay method is:</p>
+<pre class="literal-block">
+unsigned long MagickGetImageDelay( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagedepth">
+<h1><a class="toc-backref" href="#id543">MagickGetImageDepth</a></h1>
+<div class="section" id="id139">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long MagickGetImageDepth( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id140">
+<h2>Description</h2>
+<p>MagickGetImageDepth() gets the image depth.</p>
+<p>The format of the MagickGetImageDepth method is:</p>
+<pre class="literal-block">
+unsigned long MagickGetImageDepth( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimageextrema">
+<h1><a class="toc-backref" href="#id544">MagickGetImageExtrema</a></h1>
+<div class="section" id="id141">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGetImageExtrema( MagickWand *wand, unsigned long *min,
+ unsigned long *max );
+</pre>
+</div>
+<div class="section" id="id142">
+<h2>Description</h2>
+<p>MagickGetImageExtrema() gets the extrema for the image.</p>
+<p>The format of the MagickGetImageExtrema method is:</p>
+<pre class="literal-block">
+unsigned int MagickGetImageExtrema( MagickWand *wand, unsigned long *min,
+ unsigned long *max );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>min:</dt>
+<dd>The minimum pixel value for the specified channel(s).</dd>
+<dt>max:</dt>
+<dd>The maximum pixel value for the specified channel(s).</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagedispose">
+<h1><a class="toc-backref" href="#id545">MagickGetImageDispose</a></h1>
+<div class="section" id="id143">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+DisposeType MagickGetImageDispose( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id144">
+<h2>Description</h2>
+<p>MagickGetImageDispose() gets the image disposal method.</p>
+<p>The format of the MagickGetImageDispose method is:</p>
+<pre class="literal-block">
+DisposeType MagickGetImageDispose( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagefilename">
+<h1><a class="toc-backref" href="#id546">MagickGetImageFilename</a></h1>
+<div class="section" id="id145">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+const char MagickGetImageFilename( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id146">
+<h2>Description</h2>
+<p>MagickGetImageFilename() returns the filename of a particular image in a
+sequence.</p>
+<p>The format of the MagickGetImageFilename method is:</p>
+<pre class="literal-block">
+const char MagickGetImageFilename( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimageformat">
+<h1><a class="toc-backref" href="#id547">MagickGetImageFormat</a></h1>
+<div class="section" id="id147">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+const char MagickGetImageFormat( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id148">
+<h2>Description</h2>
+<p>MagickGetImageFormat() returns the format of a particular image in a
+sequence.</p>
+<p>The format of the MagickGetImageFormat method is:</p>
+<pre class="literal-block">
+const char MagickGetImageFormat( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagefuzz">
+<h1><a class="toc-backref" href="#id548">MagickGetImageFuzz</a></h1>
+<div class="section" id="id149">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double MagickGetImageFuzz( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id150">
+<h2>Description</h2>
+<p>MagickGetImageFuzz() returns the color comparison fuzz factor. Colors
+closer than the fuzz factor are considered to be the same when comparing
+colors. Note that some other functions such as MagickColorFloodfillImage()
+implicitly set this value.</p>
+<p>The format of the MagickGetImageFuzz method is:</p>
+<pre class="literal-block">
+double MagickGetImageFuzz( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagegamma">
+<h1><a class="toc-backref" href="#id549">MagickGetImageGamma</a></h1>
+<div class="section" id="id151">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double MagickGetImageGamma( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id152">
+<h2>Description</h2>
+<p>MagickGetImageGamma() gets the image gamma.</p>
+<p>The format of the MagickGetImageGamma method is:</p>
+<pre class="literal-block">
+double MagickGetImageGamma( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagegravity">
+<h1><a class="toc-backref" href="#id550">MagickGetImageGravity</a></h1>
+<div class="section" id="id153">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#gravitytype">GravityType</a> MagickGetImageGravity( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id154">
+<h2>Description</h2>
+<p>MagickGetImageGravity() gets the image gravity.</p>
+<p>The format of the MagickGetImageGravity method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#gravitytype">GravityType</a> MagickGetImageGravity( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagegreenprimary">
+<h1><a class="toc-backref" href="#id551">MagickGetImageGreenPrimary</a></h1>
+<div class="section" id="id155">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGetImageGreenPrimary( MagickWand *wand, double *x, double *y );
+</pre>
+</div>
+<div class="section" id="id156">
+<h2>Description</h2>
+<p>MagickGetImageGreenPrimary() returns the chromaticy green primary point.</p>
+<p>The format of the MagickGetImageGreenPrimary method is:</p>
+<pre class="literal-block">
+unsigned int MagickGetImageGreenPrimary( MagickWand *wand, double *x, double *y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>x:</dt>
+<dd>The chromaticity green primary x-point.</dd>
+<dt>y:</dt>
+<dd>The chromaticity green primary y-point.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimageheight">
+<h1><a class="toc-backref" href="#id552">MagickGetImageHeight</a></h1>
+<div class="section" id="id157">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long MagickGetImageHeight( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id158">
+<h2>Description</h2>
+<p>MagickGetImageHeight() returns the image height.</p>
+<p>The format of the MagickGetImageHeight method is:</p>
+<pre class="literal-block">
+unsigned long MagickGetImageHeight( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagehistogram">
+<h1><a class="toc-backref" href="#id553">MagickGetImageHistogram</a></h1>
+<div class="section" id="id159">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+PixelWand *MagickGetImageHistogram( MagickWand *wand, unsigned long *number_colors );
+</pre>
+</div>
+<div class="section" id="id160">
+<h2>Description</h2>
+<p>MagickGetImageHistogram() returns the image histogram as an array of
+PixelWand wands.</p>
+<p>The format of the MagickGetImageHistogram method is:</p>
+<pre class="literal-block">
+PixelWand *MagickGetImageHistogram( MagickWand *wand, unsigned long *number_colors );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>number_colors:</dt>
+<dd>The number of unique colors in the image and the number
+of pixel wands returned.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimageindex">
+<h1><a class="toc-backref" href="#id554">MagickGetImageIndex</a></h1>
+<div class="section" id="id161">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGetImageIndex( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id162">
+<h2>Description</h2>
+<p>MagickGetImageIndex() returns the index of the current image.</p>
+<p>The format of the MagickGetImageIndex method is:</p>
+<pre class="literal-block">
+unsigned int MagickGetImageIndex( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimageinterlacescheme">
+<h1><a class="toc-backref" href="#id555">MagickGetImageInterlaceScheme</a></h1>
+<div class="section" id="id163">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#interlacetype">InterlaceType</a> MagickGetImageInterlaceScheme( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id164">
+<h2>Description</h2>
+<p>MagickGetImageInterlaceScheme() gets the image interlace scheme.</p>
+<p>The format of the MagickGetImageInterlaceScheme method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#interlacetype">InterlaceType</a> MagickGetImageInterlaceScheme( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimageiterations">
+<h1><a class="toc-backref" href="#id556">MagickGetImageIterations</a></h1>
+<div class="section" id="id165">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long MagickGetImageIterations( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id166">
+<h2>Description</h2>
+<p>MagickGetImageIterations() gets the image iterations.</p>
+<p>The format of the MagickGetImageIterations method is:</p>
+<pre class="literal-block">
+unsigned long MagickGetImageIterations( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagemattecolor">
+<h1><a class="toc-backref" href="#id557">MagickGetImageMatteColor</a></h1>
+<div class="section" id="id167">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGetImageMatteColor( MagickWand *wand, PixelWand *matte_color );
+</pre>
+</div>
+<div class="section" id="id168">
+<h2>Description</h2>
+<p>MagickGetImageMatteColor() returns the image matte color.</p>
+<p>The format of the MagickGetImageMatteColor method is:</p>
+<pre class="literal-block">
+unsigned int MagickGetImageMatteColor( MagickWand *wand, PixelWand *matte_color );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>matte_color:</dt>
+<dd>Return the matte color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimageorientation">
+<h1><a class="toc-backref" href="#id558">MagickGetImageOrientation</a></h1>
+<div class="section" id="id169">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+OrientationType MagickGetImageOrientation( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id170">
+<h2>Description</h2>
+<p>MagickGetImageOrientation() gets the image orientation type. May be one of:</p>
+<p>UndefinedOrientation Image orientation not specified or error.
+TopLeftOrientation Left to right and Top to bottom.
+TopRightOrientation Right to left and Top to bottom.
+BottomRightOrientation Right to left and Bottom to top.
+BottomLeftOrientation Left to right and Bottom to top.
+LeftTopOrientation Top to bottom and Left to right.
+RightTopOrientation Top to bottom and Right to left.
+RightBottomOrientation Bottom to top and Right to left.
+LeftBottomOrientation Bottom to top and Left to right.</p>
+<p>The format of the MagickGetImageOrientation method is:</p>
+<pre class="literal-block">
+OrientationType MagickGetImageOrientation( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagepage">
+<h1><a class="toc-backref" href="#id559">MagickGetImagePage</a></h1>
+<div class="section" id="id171">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickGetImagePage( MagickWand *wand, unsigned long *width, unsigned long *height, long *x,
+ long *y );
+</pre>
+</div>
+<div class="section" id="id172">
+<h2>Description</h2>
+<p>MagickGetImagePage() retrieves the image page size and offset used when
+placing (e.g. compositing) the image.</p>
+<p>The format of the MagickGetImagePage method is:</p>
+<pre class="literal-block">
+MagickGetImagePage( MagickWand *wand, unsigned long *width, unsigned long *height, long *x,
+ long *y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>width, height:</dt>
+<dd>The region size.</dd>
+<dt>x, y:</dt>
+<dd>Offset (from top left) on base canvas image on
+which to composite image data.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagepixels">
+<h1><a class="toc-backref" href="#id560">MagickGetImagePixels</a></h1>
+<div class="section" id="id173">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGetImagePixels( MagickWand *wand, const long x_offset, const long y_offset,
+ const unsigned long columns, const unsigned long rows,
+ const char *map, const <a class="reference external" href="../api/types.html#storagetype">StorageType</a> storage,
+ unsigned char *pixels );
+</pre>
+</div>
+<div class="section" id="id174">
+<h2>Description</h2>
+<p>MagickGetImagePixels() extracts pixel data from an image and returns it to
+you. The method returns False on success otherwise True if an error is
+encountered. The data is returned as char, short int, int, long, float,
+or double in the order specified by map.</p>
+<p>Suppose you want to extract the first scanline of a 640x480 image as
+character data in red-green-blue order:</p>
+<p>MagickGetImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels);</p>
+<p>The format of the MagickGetImagePixels method is:</p>
+<pre class="literal-block">
+unsigned int MagickGetImagePixels( MagickWand *wand, const long x_offset, const long y_offset,
+ const unsigned long columns, const unsigned long rows,
+ const char *map, const <a class="reference external" href="../api/types.html#storagetype">StorageType</a> storage,
+ unsigned char *pixels );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>x_offset, y_offset, columns, rows:</dt>
+<dd>These values define the perimeter
+of a region of pixels you want to extract.</dd>
+<dt>map:</dt>
+<dd>This string reflects the expected ordering of the pixel array.
+It can be any combination or order of R = red, G = green, B = blue,
+A = alpha, C = cyan, Y = yellow, M = magenta, K = black, or
+I = intensity (for grayscale).</dd>
+<dt>storage:</dt>
+<dd>Define the data type of the pixels. Float and double types are
+expected to be normalized [0..1] otherwise [0..MaxRGB]. Choose from
+these types: CharPixel, ShortPixel, IntegerPixel, LongPixel, FloatPixel,
+or DoublePixel.</dd>
+<dt>pixels:</dt>
+<dd>This array of values contain the pixel components as defined by
+map and type. You must preallocate this array where the expected
+length varies depending on the values of width, height, map, and type.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimageprofile">
+<h1><a class="toc-backref" href="#id561">MagickGetImageProfile</a></h1>
+<div class="section" id="id175">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned char *MagickGetImageProfile( MagickWand *wand, const char *name,
+ unsigned long *length );
+</pre>
+</div>
+<div class="section" id="id176">
+<h2>Description</h2>
+<p>MagickGetImageProfile() returns the named image profile.</p>
+<p>The format of the MagickGetImageProfile method is:</p>
+<pre class="literal-block">
+unsigned char *MagickGetImageProfile( MagickWand *wand, const char *name,
+ unsigned long *length );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>name:</dt>
+<dd>Name of profile to return: ICC, IPTC, or generic profile.</dd>
+<dt>length:</dt>
+<dd>The length of the profile.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimageredprimary">
+<h1><a class="toc-backref" href="#id562">MagickGetImageRedPrimary</a></h1>
+<div class="section" id="id177">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGetImageRedPrimary( MagickWand *wand, double *x, double *y );
+</pre>
+</div>
+<div class="section" id="id178">
+<h2>Description</h2>
+<p>MagickGetImageRedPrimary() returns the chromaticy red primary point.</p>
+<p>The format of the MagickGetImageRedPrimary method is:</p>
+<pre class="literal-block">
+unsigned int MagickGetImageRedPrimary( MagickWand *wand, double *x, double *y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>x:</dt>
+<dd>The chromaticity red primary x-point.</dd>
+<dt>y:</dt>
+<dd>The chromaticity red primary y-point.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagerenderingintent">
+<h1><a class="toc-backref" href="#id563">MagickGetImageRenderingIntent</a></h1>
+<div class="section" id="id179">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#renderingintent">RenderingIntent</a> MagickGetImageRenderingIntent( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id180">
+<h2>Description</h2>
+<p>MagickGetImageRenderingIntent() gets the image rendering intent.</p>
+<p>The format of the MagickGetImageRenderingIntent method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#renderingintent">RenderingIntent</a> MagickGetImageRenderingIntent( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimageresolution">
+<h1><a class="toc-backref" href="#id564">MagickGetImageResolution</a></h1>
+<div class="section" id="id181">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGetImageResolution( MagickWand *wand, double *x, double *y );
+</pre>
+</div>
+<div class="section" id="id182">
+<h2>Description</h2>
+<p>MagickGetImageResolution() gets the image X & Y resolution.</p>
+<p>The format of the MagickGetImageResolution method is:</p>
+<pre class="literal-block">
+unsigned int MagickGetImageResolution( MagickWand *wand, double *x, double *y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>x:</dt>
+<dd>The image x-resolution.</dd>
+<dt>y:</dt>
+<dd>The image y-resolution.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagescene">
+<h1><a class="toc-backref" href="#id565">MagickGetImageScene</a></h1>
+<div class="section" id="id183">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long MagickGetImageScene( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id184">
+<h2>Description</h2>
+<p>MagickGetImageScene() gets the image scene.</p>
+<p>The format of the MagickGetImageScene method is:</p>
+<pre class="literal-block">
+unsigned long MagickGetImageScene( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagesignature">
+<h1><a class="toc-backref" href="#id566">MagickGetImageSignature</a></h1>
+<div class="section" id="id185">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+const char MagickGetImageSignature( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id186">
+<h2>Description</h2>
+<p>MagickGetImageSignature() generates an SHA-256 message digest for the image
+pixel stream.</p>
+<p>The format of the MagickGetImageSignature method is:</p>
+<pre class="literal-block">
+const char MagickGetImageSignature( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagesize">
+<h1><a class="toc-backref" href="#id567">MagickGetImageSize</a></h1>
+<div class="section" id="id187">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickSizeType MagickGetImageSize( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id188">
+<h2>Description</h2>
+<p>MagickGetImageSize() returns the image size.</p>
+<p>The format of the MagickGetImageSize method is:</p>
+<pre class="literal-block">
+MagickSizeType MagickGetImageSize( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagetype">
+<h1><a class="toc-backref" href="#id568">MagickGetImageType</a></h1>
+<div class="section" id="id189">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#imagetype">ImageType</a> MagickGetImageType( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id190">
+<h2>Description</h2>
+<p>MagickGetImageType() gets the image type.</p>
+<p>The format of the MagickGetImageType method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#imagetype">ImageType</a> MagickGetImageType( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagesavedtype">
+<h1><a class="toc-backref" href="#id569">MagickGetImageSavedType</a></h1>
+<div class="section" id="id191">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#imagetype">ImageType</a> MagickGetImageSavedType( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id192">
+<h2>Description</h2>
+<p>MagickGetImageSavedType() gets the image type that will be used when the
+image is saved. This may be different to the current image type, returned
+by MagickGetImageType().</p>
+<p>The format of the MagickGetImageSavedType method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#imagetype">ImageType</a> MagickGetImageSavedType( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimageunits">
+<h1><a class="toc-backref" href="#id570">MagickGetImageUnits</a></h1>
+<div class="section" id="id193">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#resolutiontype">ResolutionType</a> MagickGetImageUnits( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id194">
+<h2>Description</h2>
+<p>MagickGetImageUnits() gets the image units of resolution.</p>
+<p>The format of the MagickGetImageUnits method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#resolutiontype">ResolutionType</a> MagickGetImageUnits( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagevirtualpixelmethod">
+<h1><a class="toc-backref" href="#id571">MagickGetImageVirtualPixelMethod</a></h1>
+<div class="section" id="id195">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#virtualpixelmethod">VirtualPixelMethod</a> MagickGetImageVirtualPixelMethod( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id196">
+<h2>Description</h2>
+<p>MagickGetImageVirtualPixelMethod() returns the virtual pixel method for the
+sepcified image.</p>
+<p>The format of the MagickGetImageVirtualPixelMethod method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#virtualpixelmethod">VirtualPixelMethod</a> MagickGetImageVirtualPixelMethod( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagewhitepoint">
+<h1><a class="toc-backref" href="#id572">MagickGetImageWhitePoint</a></h1>
+<div class="section" id="id197">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGetImageWhitePoint( MagickWand *wand, double *x, double *y );
+</pre>
+</div>
+<div class="section" id="id198">
+<h2>Description</h2>
+<p>MagickGetImageWhitePoint() returns the chromaticy white point.</p>
+<p>The format of the MagickGetImageWhitePoint method is:</p>
+<pre class="literal-block">
+unsigned int MagickGetImageWhitePoint( MagickWand *wand, double *x, double *y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>x:</dt>
+<dd>The chromaticity white x-point.</dd>
+<dt>y:</dt>
+<dd>The chromaticity white y-point.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetimagewidth">
+<h1><a class="toc-backref" href="#id573">MagickGetImageWidth</a></h1>
+<div class="section" id="id199">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long MagickGetImageWidth( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id200">
+<h2>Description</h2>
+<p>MagickGetImageWidth() returns the image width.</p>
+<p>The format of the MagickGetImageWidth method is:</p>
+<pre class="literal-block">
+unsigned long MagickGetImageWidth( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetnumberimages">
+<h1><a class="toc-backref" href="#id574">MagickGetNumberImages</a></h1>
+<div class="section" id="id201">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long MagickGetNumberImages( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id202">
+<h2>Description</h2>
+<p>MagickGetNumberOfImages() returns the number of images associated with a
+magick wand.</p>
+<p>The format of the MagickGetNumberImages method is:</p>
+<pre class="literal-block">
+unsigned long MagickGetNumberImages( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetpackagename">
+<h1><a class="toc-backref" href="#id575">MagickGetPackageName</a></h1>
+<div class="section" id="id203">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+const char *MagickGetPackageName( void );
+</pre>
+</div>
+<div class="section" id="id204">
+<h2>Description</h2>
+<p>MagickGetPackageName() returns the ImageMagick package name.</p>
+<p>The format of the MagickGetPackageName method is:</p>
+<pre class="literal-block">
+const char *MagickGetPackageName( void );
+</pre>
+</div>
+</div>
+<div class="section" id="magickgetquantumdepth">
+<h1><a class="toc-backref" href="#id576">MagickGetQuantumDepth</a></h1>
+<div class="section" id="id205">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+const char *MagickGetQuantumDepth( unsigned long *depth );
+</pre>
+</div>
+<div class="section" id="id206">
+<h2>Description</h2>
+<p>MagickGetQuantumDepth() returns the ImageMagick quantum depth.</p>
+<p>The format of the MagickGetQuantumDepth method is:</p>
+<pre class="literal-block">
+const char *MagickGetQuantumDepth( unsigned long *depth );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>depth:</dt>
+<dd>The quantum depth is returned as a number.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetreleasedate">
+<h1><a class="toc-backref" href="#id577">MagickGetReleaseDate</a></h1>
+<div class="section" id="id207">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+const char *MagickGetReleaseDate( void );
+</pre>
+</div>
+<div class="section" id="id208">
+<h2>Description</h2>
+<p>MagickGetReleaseDate() returns the ImageMagick release date.</p>
+<p>The format of the MagickGetReleaseDate method is:</p>
+<pre class="literal-block">
+const char *MagickGetReleaseDate( void );
+</pre>
+</div>
+</div>
+<div class="section" id="magickgetresourcelimit">
+<h1><a class="toc-backref" href="#id578">MagickGetResourceLimit</a></h1>
+<div class="section" id="id209">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long MagickGetResourceLimit( const <a class="reference external" href="../api/types.html#resourcetype">ResourceType</a> type );
+</pre>
+</div>
+<div class="section" id="id210">
+<h2>Description</h2>
+<p>MagickGetResourceLimit() returns the the specified resource in megabytes.</p>
+<p>The format of the MagickGetResourceLimit method is:</p>
+<pre class="literal-block">
+unsigned long MagickGetResourceLimit( const <a class="reference external" href="../api/types.html#resourcetype">ResourceType</a> type );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetsamplingfactors">
+<h1><a class="toc-backref" href="#id579">MagickGetSamplingFactors</a></h1>
+<div class="section" id="id211">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double *MagickGetSamplingFactors( MagickWand *wand, unsigned long *number_factors );
+</pre>
+</div>
+<div class="section" id="id212">
+<h2>Description</h2>
+<p>MagickGetSamplingFactors() gets the horizontal and vertical sampling factor.</p>
+<p>The format of the MagickGetSamplingFactors method is:</p>
+<pre class="literal-block">
+double *MagickGetSamplingFactors( MagickWand *wand, unsigned long *number_factors );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>number_factors:</dt>
+<dd>The number of factors in the returned array.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetsize">
+<h1><a class="toc-backref" href="#id580">MagickGetSize</a></h1>
+<div class="section" id="id213">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickGetSize( const MagickWand *wand, unsigned long *columns,
+ unsigned long *rows );
+</pre>
+</div>
+<div class="section" id="id214">
+<h2>Description</h2>
+<p>MagickGetSize() returns the size associated with the magick wand.</p>
+<p>The format of the MagickGetSize method is:</p>
+<pre class="literal-block">
+unsigned int MagickGetSize( const MagickWand *wand, unsigned long *columns,
+ unsigned long *rows );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>columns:</dt>
+<dd>The width in pixels.</dd>
+<dt>height:</dt>
+<dd>The height in pixels.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickgetversion">
+<h1><a class="toc-backref" href="#id581">MagickGetVersion</a></h1>
+<div class="section" id="id215">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+const char *MagickGetVersion( unsigned long *version );
+</pre>
+</div>
+<div class="section" id="id216">
+<h2>Description</h2>
+<p>MagickGetVersion() returns the ImageMagick API version as a string and
+as a number.</p>
+<p>The format of the MagickGetVersion method is:</p>
+<pre class="literal-block">
+const char *MagickGetVersion( unsigned long *version );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>version:</dt>
+<dd>The ImageMagick version is returned as a number.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickhaldclutimage">
+<h1><a class="toc-backref" href="#id582">MagickHaldClutImage</a></h1>
+<div class="section" id="id217">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickPassFail MagickHaldClutImage( MagickWand *wand, const MagickWand *clut_wand );
+</pre>
+</div>
+<div class="section" id="id218">
+<h2>Description</h2>
+<p>The MagickHaldClutImage() method apply a color lookup table (Hald CLUT) to
+the image. The fundamental principle of the Hald CLUT algorithm is that
+application of an identity CLUT causes no change to the input image,
+but an identity CLUT image which has had its colors transformed in
+some way (e.g. in Adobe Photoshop) may be used to implement an identical
+transform on any other image.</p>
+<p>The minimum CLUT level is 2, and the maximum depends on available memory
+(largest successfully tested is 24). A CLUT image is required to have equal
+width and height. A CLUT of level 8 is an image of dimension 512x512, a CLUT
+of level 16 is an image of dimension 4096x4096. Interpolation is used so
+extremely large CLUT images are not required.</p>
+<p>GraphicsMagick provides an 'identity' coder which may be used to generate
+identity HLUTs. For example, reading from "identity:8" creates an identity
+CLUT of order 8.</p>
+<p>The Hald CLUT algorithm has been developed by Eskil Steenberg as described
+at <a class="reference external" href="http://www.quelsolaar.com/technology/clut.html">http://www.quelsolaar.com/technology/clut.html</a>, and was adapted for
+GraphicsMagick by Clément Follet with support from Cédric Lejeune of
+Workflowers.</p>
+<p>The format of the HaldClutImage method is:</p>
+<pre class="literal-block">
+MagickPassFail MagickHaldClutImage( MagickWand *wand, const MagickWand *clut_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The image wand.</dd>
+<dt>clut_wand:</dt>
+<dd>The color lookup table image wand</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickhascolormap">
+<h1><a class="toc-backref" href="#id583">MagickHasColormap</a></h1>
+<div class="section" id="id219">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickHasColormap( MagickWand *wand, unsigned int *colormap );
+</pre>
+</div>
+<div class="section" id="id220">
+<h2>Description</h2>
+<p>MagickHasColormap() returns True if the check was successful with the
+colormap parameter set to a boolean value indicating whether the current
+wand image uses a color map or not. Returns False if there are no wand
+images available.</p>
+<p>The format of the MagickHasColormap method is:</p>
+<pre class="literal-block">
+unsigned int MagickHasColormap( MagickWand *wand, unsigned int *colormap );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>colormap:</dt>
+<dd>Set to True if current image uses a color map, False if not.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickhasnextimage">
+<h1><a class="toc-backref" href="#id584">MagickHasNextImage</a></h1>
+<div class="section" id="id221">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickHasNextImage( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id222">
+<h2>Description</h2>
+<p>MagickHasNextImage() returns True if the wand has more images when
+traversing the list in the forward direction</p>
+<p>The format of the MagickHasNextImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickHasNextImage( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickhaspreviousimage">
+<h1><a class="toc-backref" href="#id585">MagickHasPreviousImage</a></h1>
+<div class="section" id="id223">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickHasPreviousImage( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id224">
+<h2>Description</h2>
+<p>MagickHasPreviousImage() returns True if the wand has more images when
+traversing the list in the reverse direction</p>
+<p>The format of the MagickHasPreviousImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickHasPreviousImage( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickimplodeimage">
+<h1><a class="toc-backref" href="#id586">MagickImplodeImage</a></h1>
+<div class="section" id="id225">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickImplodeImage( MagickWand *wand, const double radius );
+</pre>
+</div>
+<div class="section" id="id226">
+<h2>Description</h2>
+<p>MagickImplodeImage() creates a new image that is a copy of an existing
+one with the image pixels "implode" by the specified percentage. It
+allocates the memory necessary for the new Image structure and returns a
+pointer to the new image.</p>
+<p>The format of the MagickImplodeImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickImplodeImage( MagickWand *wand, const double radius );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>amount:</dt>
+<dd>Define the extent of the implosion.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickisgrayimage">
+<h1><a class="toc-backref" href="#id587">MagickIsGrayImage</a></h1>
+<div class="section" id="id227">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickIsGrayImage( MagickWand *wand, unsigned int *grayimage );
+</pre>
+</div>
+<div class="section" id="id228">
+<h2>Description</h2>
+<p>MagickIsGrayImage() returns True if the check was successful with the
+grayimage parameter set to a boolean value indicating whether the current
+wand image is a gray-scale image or not. Returns False if there was
+an error.</p>
+<p>The format of the MagickIsGrayImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickIsGrayImage( MagickWand *wand, unsigned int *grayimage );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>grayimage:</dt>
+<dd>Set to True if current image is a gray-scale image,
+False if not.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickismonochromeimage">
+<h1><a class="toc-backref" href="#id588">MagickIsMonochromeImage</a></h1>
+<div class="section" id="id229">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickIsMonochromeImage( MagickWand *wand, unsigned int *monochrome );
+</pre>
+</div>
+<div class="section" id="id230">
+<h2>Description</h2>
+<p>MagickIsMonochromeImage() returns True if the check was successful with the
+monochrome parameter set to a boolean value indicating whether the current
+wand image is a monochrome image or not. Returns False if there was
+an error.</p>
+<p>The format of the MagickIsMonochromeImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickIsMonochromeImage( MagickWand *wand, unsigned int *monochrome );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>monochrome:</dt>
+<dd>Set to True if current image is a monochrome image,
+False if not.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickisopaqueimage">
+<h1><a class="toc-backref" href="#id589">MagickIsOpaqueImage</a></h1>
+<div class="section" id="id231">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickIsOpaqueImage( MagickWand *wand, unsigned int *opaque );
+</pre>
+</div>
+<div class="section" id="id232">
+<h2>Description</h2>
+<p>MagickIsOpaqueImage() returns True if the check was successful with the
+opaque parameter set to a boolean value indicating whether the current
+wand image is entirely opaque or not. Returns False if there was
+an error.</p>
+<p>The format of the MagickIsOpaqueImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickIsOpaqueImage( MagickWand *wand, unsigned int *opaque );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>opaque:</dt>
+<dd>Set to True if current image is entirely opaque,
+False if not.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickispaletteimage">
+<h1><a class="toc-backref" href="#id590">MagickIsPaletteImage</a></h1>
+<div class="section" id="id233">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickIsPaletteImage( MagickWand *wand, unsigned int *palette );
+</pre>
+</div>
+<div class="section" id="id234">
+<h2>Description</h2>
+<p>MagickIsPaletteImage() returns True if the check was successful with the
+palette parameter set to a boolean value indicating whether the current
+wand image is an image with 256 unique colors or less. Returns False if
+there was an error. Note that a palette image does not necessarily use a
+colormap. See MagickHasColormap() if needing to determine whether a
+colormap is in use.</p>
+<p>The format of the MagickIsPaletteImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickIsPaletteImage( MagickWand *wand, unsigned int *palette );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>palette:</dt>
+<dd>Set to True if current image is 256 colors or less,
+False if not.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicklabelimage">
+<h1><a class="toc-backref" href="#id591">MagickLabelImage</a></h1>
+<div class="section" id="id235">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickLabelImage( MagickWand *wand, const char *label );
+</pre>
+</div>
+<div class="section" id="id236">
+<h2>Description</h2>
+<p>MagickLabelImage() adds a label to your image.</p>
+<p>The format of the MagickLabelImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickLabelImage( MagickWand *wand, const char *label );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>label:</dt>
+<dd>The image label.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicklevelimage">
+<h1><a class="toc-backref" href="#id592">MagickLevelImage</a></h1>
+<div class="section" id="id237">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickLevelImage( MagickWand *wand, const double black_point, const double gamma,
+ const double white_point );
+</pre>
+</div>
+<div class="section" id="id238">
+<h2>Description</h2>
+<p>MagickLevelImage() adjusts the levels of an image by scaling the colors
+falling between specified white and black points to the full available
+quantum range. The parameters provided represent the black, mid, and white
+points. The black point specifies the darkest color in the image. Colors
+darker than the black point are set to zero. Mid point specifies a gamma
+correction to apply to the image. White point specifies the lightest color
+in the image. Colors brighter than the white point are set to the maximum
+quantum value.</p>
+<p>The format of the MagickLevelImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickLevelImage( MagickWand *wand, const double black_point, const double gamma,
+ const double white_point );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>black_point:</dt>
+<dd>The black point.</dd>
+<dt>gamma:</dt>
+<dd>The gamma.</dd>
+<dt>white_point:</dt>
+<dd>The white point.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicklevelimagechannel">
+<h1><a class="toc-backref" href="#id593">MagickLevelImageChannel</a></h1>
+<div class="section" id="id239">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickLevelImageChannel( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const double black_point, const double gamma,
+ const double white_point );
+</pre>
+</div>
+<div class="section" id="id240">
+<h2>Description</h2>
+<p>MagickLevelImageChannel() adjusts the levels of the specified channel of
+the reference image by scaling the colors falling between specified white
+and black points to the full available quantum range. The parameters
+provided represent the black, mid, and white points. The black point
+specifies the darkest color in the image. Colors darker than the black
+point are set to zero. Mid point specifies a gamma correction to apply
+to the image. White point specifies the lightest color in the image.
+Colors brighter than the white point are set to the maximum quantum value.</p>
+<p>The format of the MagickLevelImageChannel method is:</p>
+<pre class="literal-block">
+unsigned int MagickLevelImageChannel( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const double black_point, const double gamma,
+ const double white_point );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>channel:</dt>
+<dd>Identify which channel to level: RedChannel, GreenChannel,
+BlueChannel, OpacityChannel, CyanChannel, MagentaChannel, YellowChannel,
+BlackChannel.</dd>
+<dt>black_point:</dt>
+<dd>The black point.</dd>
+<dt>gamma:</dt>
+<dd>The gamma.</dd>
+<dt>white_point:</dt>
+<dd>The white point.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickmagnifyimage">
+<h1><a class="toc-backref" href="#id594">MagickMagnifyImage</a></h1>
+<div class="section" id="id241">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickMagnifyImage( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id242">
+<h2>Description</h2>
+<p>MagickMagnifyImage() is a convenience method that scales an image
+proportionally to twice its original size.</p>
+<p>The format of the MagickMagnifyImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickMagnifyImage( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickmapimage">
+<h1><a class="toc-backref" href="#id595">MagickMapImage</a></h1>
+<div class="section" id="id243">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickMapImage( MagickWand *wand, const MagickWand *map_wand,
+ const unsigned int dither );
+</pre>
+</div>
+<div class="section" id="id244">
+<h2>Description</h2>
+<p>MagickMapImage() replaces the colors of an image with the closest color
+from a reference image.</p>
+<p>The format of the MagickMapImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickMapImage( MagickWand *wand, const MagickWand *map_wand,
+ const unsigned int dither );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>map:</dt>
+<dd>The map wand.</dd>
+<dt>dither:</dt>
+<dd>Set this integer value to something other than zero to dither
+the mapped image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickmattefloodfillimage">
+<h1><a class="toc-backref" href="#id596">MagickMatteFloodfillImage</a></h1>
+<div class="section" id="id245">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickMatteFloodfillImage( MagickWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> opacity,
+ const double fuzz, const PixelWand *bordercolor,
+ const long x, const long y );
+</pre>
+</div>
+<div class="section" id="id246">
+<h2>Description</h2>
+<p>MagickMatteFloodfillImage() changes the transparency value of any pixel that
+matches target and is an immediate neighbor. If the method
+FillToBorderMethod is specified, the transparency value is changed for any
+neighbor pixel that does not match the bordercolor member of image.</p>
+<p>The format of the MagickMatteFloodfillImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickMatteFloodfillImage( MagickWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> opacity,
+ const double fuzz, const PixelWand *bordercolor,
+ const long x, const long y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>opacity:</dt>
+<dd>The opacity.</dd>
+<dt>fuzz:</dt>
+<dd>By default target must match a particular pixel color
+exactly. However, in many cases two colors may differ by a small amount.
+The fuzz member of image defines how much tolerance is acceptable to
+consider two colors as the same. For example, set fuzz to 10 and the
+color red at intensities of 100 and 102 respectively are now interpreted
+as the same color for the purposes of the floodfill.</dd>
+<dt>bordercolor:</dt>
+<dd>The border color pixel wand.</dd>
+<dt>x,y:</dt>
+<dd>The starting location of the operation.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickmedianfilterimage">
+<h1><a class="toc-backref" href="#id597">MagickMedianFilterImage</a></h1>
+<div class="section" id="id247">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickMedianFilterImage( MagickWand *wand, const double radius );
+</pre>
+</div>
+<div class="section" id="id248">
+<h2>Description</h2>
+<p>MagickMedianFilterImage() applies a digital filter that improves the quality
+of a noisy image. Each pixel is replaced by the median in a set of
+neighboring pixels as defined by radius.</p>
+<p>The format of the MagickMedianFilterImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickMedianFilterImage( MagickWand *wand, const double radius );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>radius:</dt>
+<dd>The radius of the pixel neighborhood.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickminifyimage">
+<h1><a class="toc-backref" href="#id598">MagickMinifyImage</a></h1>
+<div class="section" id="id249">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickMinifyImage( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id250">
+<h2>Description</h2>
+<p>MagickMinifyImage() is a convenience method that scales an image
+proportionally to one-half its original size</p>
+<p>The format of the MagickMinifyImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickMinifyImage( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickmodulateimage">
+<h1><a class="toc-backref" href="#id599">MagickModulateImage</a></h1>
+<div class="section" id="id251">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickModulateImage( MagickWand *wand, const double brightness,
+ const double saturation, const double hue );
+</pre>
+</div>
+<div class="section" id="id252">
+<h2>Description</h2>
+<p>MagickModulateImage() lets you control the brightness, saturation, and hue
+of an image.</p>
+<p>The format of the MagickModulateImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickModulateImage( MagickWand *wand, const double brightness,
+ const double saturation, const double hue );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>brightness:</dt>
+<dd>The percent change in brighness (-100 thru +100).</dd>
+<dt>saturation:</dt>
+<dd>The percent change in saturation (-100 thru +100)</dd>
+<dt>hue:</dt>
+<dd>The percent change in hue (-100 thru +100)</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickmontageimage">
+<h1><a class="toc-backref" href="#id600">MagickMontageImage</a></h1>
+<div class="section" id="id253">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand MagickMontageImage( MagickWand *wand, const DrawingWand drawing_wand,
+ const char *tile_geometry, const char *thumbnail_geometry,
+ const MontageMode mode, const char *frame );
+</pre>
+</div>
+<div class="section" id="id254">
+<h2>Description</h2>
+<p>Use MagickMontageImage() to create a composite image by combining several
+separate images. The images are tiled on the composite image with the name
+of the image optionally appearing just below the individual tile.</p>
+<p>The format of the MagickMontageImage method is:</p>
+<pre class="literal-block">
+MagickWand MagickMontageImage( MagickWand *wand, const DrawingWand drawing_wand,
+ const char *tile_geometry, const char *thumbnail_geometry,
+ const MontageMode mode, const char *frame );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>drawing_wand:</dt>
+<dd>The drawing wand. The font name, size, and color are
+obtained from this wand.</dd>
+<dt>tile_geometry:</dt>
+<dd>the number of tiles per row and page (e.g. 6x4+0+0).</dd>
+<dt>thumbnail_geometry:</dt>
+<dd>Preferred image size and border size of each
+thumbnail (e.g. 120x120+4+3>).</dd>
+<dt>mode:</dt>
+<dd>Thumbnail framing mode: Frame, Unframe, or Concatenate.</dd>
+<dt>frame:</dt>
+<dd>Surround the image with an ornamental border (e.g. 15x15+3+3).
+The frame color is that of the thumbnail's matte color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickmorphimages">
+<h1><a class="toc-backref" href="#id601">MagickMorphImages</a></h1>
+<div class="section" id="id255">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *MagickMorphImages( MagickWand *wand, const unsigned long number_frames );
+</pre>
+</div>
+<div class="section" id="id256">
+<h2>Description</h2>
+<p>MagickMorphImages() method morphs a set of images. Both the image pixels
+and size are linearly interpolated to give the appearance of a
+meta-morphosis from one image to the next.</p>
+<p>The format of the MagickMorphImages method is:</p>
+<pre class="literal-block">
+MagickWand *MagickMorphImages( MagickWand *wand, const unsigned long number_frames );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>number_frames:</dt>
+<dd>The number of in-between images to generate.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickmosaicimages">
+<h1><a class="toc-backref" href="#id602">MagickMosaicImages</a></h1>
+<div class="section" id="id257">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *MagickMosaicImages( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id258">
+<h2>Description</h2>
+<p>MagickMosaicImages() inlays an image sequence to form a single coherent
+picture. It returns a wand with each image in the sequence composited at
+the location defined by the page offset of the image.</p>
+<p>The format of the MagickMosaicImages method is:</p>
+<pre class="literal-block">
+MagickWand *MagickMosaicImages( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickmotionblurimage">
+<h1><a class="toc-backref" href="#id603">MagickMotionBlurImage</a></h1>
+<div class="section" id="id259">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickMotionBlurImage( MagickWand *wand, const double radius, const double sigma,
+ const double angle );
+</pre>
+</div>
+<div class="section" id="id260">
+<h2>Description</h2>
+<p>MagickMotionBlurImage() simulates motion blur. We convolve the image with a
+Gaussian operator of the given radius and standard deviation (sigma).
+For reasonable results, radius should be larger than sigma. Use a
+radius of 0 and MotionBlurImage() selects a suitable radius for you.
+Angle gives the angle of the blurring motion.</p>
+<p>The format of the MagickMotionBlurImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickMotionBlurImage( MagickWand *wand, const double radius, const double sigma,
+ const double angle );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>radius:</dt>
+<dd>The radius of the Gaussian, in pixels, not counting
+the center pixel.</dd>
+<dt>sigma:</dt>
+<dd>The standard deviation of the Gaussian, in pixels.</dd>
+<dt>angle:</dt>
+<dd>Apply the effect along this angle.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicknegateimage">
+<h1><a class="toc-backref" href="#id604">MagickNegateImage</a></h1>
+<div class="section" id="id261">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickNegateImage( MagickWand *wand, const unsigned int gray );
+</pre>
+</div>
+<div class="section" id="id262">
+<h2>Description</h2>
+<p>MagickNegateImage() negates the colors in the reference image. The
+Grayscale option means that only grayscale values within the image are
+negated.</p>
+<p>You can also reduce the influence of a particular channel with a gamma
+value of 0.</p>
+<p>The format of the MagickNegateImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickNegateImage( MagickWand *wand, const unsigned int gray );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>gray:</dt>
+<dd>If True, only negate grayscale pixels within the image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicknegateimagechannel">
+<h1><a class="toc-backref" href="#id605">MagickNegateImageChannel</a></h1>
+<div class="section" id="id263">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickNegateImageChannel( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const unsigned int gray );
+</pre>
+</div>
+<div class="section" id="id264">
+<h2>Description</h2>
+<p>MagickNegateImageChannel() negates the colors in the specified channel of the
+reference image. The Grayscale option means that only grayscale values
+within the image are negated. Note that the Grayscale option has no
+effect for GraphicsMagick.</p>
+<p>You can also reduce the influence of a particular channel with a gamma
+value of 0.</p>
+<p>The format of the MagickNegateImageChannel method is:</p>
+<pre class="literal-block">
+unsigned int MagickNegateImageChannel( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const unsigned int gray );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>channel:</dt>
+<dd>Identify which channel to extract: RedChannel, GreenChannel,
+BlueChannel, OpacityChannel, CyanChannel, MagentaChannel, YellowChannel,
+BlackChannel.</dd>
+<dt>gray:</dt>
+<dd>If True, only negate grayscale pixels within the image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicknextimage">
+<h1><a class="toc-backref" href="#id606">MagickNextImage</a></h1>
+<div class="section" id="id265">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickNextImage( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id266">
+<h2>Description</h2>
+<p>MagickNextImage() associates the next image in the image list with a magick
+wand. True is returned if the Wand iterated to a next image, or False is
+returned if the wand did not iterate to a next image.</p>
+<p>The format of the MagickNextImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickNextImage( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicknormalizeimage">
+<h1><a class="toc-backref" href="#id607">MagickNormalizeImage</a></h1>
+<div class="section" id="id267">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickNormalizeImage( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id268">
+<h2>Description</h2>
+<p>MagickNormalizeImage() enhances the contrast of a color image by adjusting
+the pixels color to span the entire range of colors available</p>
+<p>You can also reduce the influence of a particular channel with a gamma
+value of 0.</p>
+<p>The format of the MagickNormalizeImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickNormalizeImage( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickoilpaintimage">
+<h1><a class="toc-backref" href="#id608">MagickOilPaintImage</a></h1>
+<div class="section" id="id269">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickOilPaintImage( MagickWand *wand, const double radius );
+</pre>
+</div>
+<div class="section" id="id270">
+<h2>Description</h2>
+<p>MagickOilPaintImage() applies a special effect filter that simulates an oil
+painting. Each pixel is replaced by the most frequent color occurring
+in a circular region defined by radius.</p>
+<p>The format of the MagickOilPaintImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickOilPaintImage( MagickWand *wand, const double radius );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>radius:</dt>
+<dd>The radius of the circular neighborhood.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickopaqueimage">
+<h1><a class="toc-backref" href="#id609">MagickOpaqueImage</a></h1>
+<div class="section" id="id271">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickOpaqueImage( MagickWand *wand, const PixelWand *target,
+ const PixelWand *fill, const double fuzz );
+</pre>
+</div>
+<div class="section" id="id272">
+<h2>Description</h2>
+<p>MagickOpaqueImage() changes any pixel that matches color with the color
+defined by fill.</p>
+<p>The format of the MagickOpaqueImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickOpaqueImage( MagickWand *wand, const PixelWand *target,
+ const PixelWand *fill, const double fuzz );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>target:</dt>
+<dd>Change this target color to the fill color within the image.</dd>
+<dt>fill:</dt>
+<dd>The fill pixel wand.</dd>
+<dt>fuzz:</dt>
+<dd>By default target must match a particular pixel color
+exactly. However, in many cases two colors may differ by a small amount.
+The fuzz member of image defines how much tolerance is acceptable to
+consider two colors as the same. For example, set fuzz to 10 and the
+color red at intensities of 100 and 102 respectively are now interpreted
+as the same color for the purposes of the floodfill.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickpingimage">
+<h1><a class="toc-backref" href="#id610">MagickPingImage</a></h1>
+<div class="section" id="id273">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickPingImage( MagickWand *wand, const char *filename );
+</pre>
+</div>
+<div class="section" id="id274">
+<h2>Description</h2>
+<p>MagickPingImage() is like MagickReadImage() except the only valid
+information returned is the image width, height, size, and format. It
+is designed to efficiently obtain this information from a file without
+reading the entire image sequence into memory.</p>
+<p>The format of the MagickPingImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickPingImage( MagickWand *wand, const char *filename );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>filename:</dt>
+<dd>The image filename.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickpreviewimages">
+<h1><a class="toc-backref" href="#id611">MagickPreviewImages</a></h1>
+<div class="section" id="id275">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *MagickPreviewImages( MagickWand *wand, const PreviewType preview );
+</pre>
+</div>
+<div class="section" id="id276">
+<h2>Description</h2>
+<p>MagickPreviewImages() tiles 9 thumbnails of the specified image with an
+image processing operation applied at varying strengths. This is helpful
+to quickly pin-point an appropriate parameter for an image processing
+operation.</p>
+<p>The format of the MagickPreviewImages method is:</p>
+<pre class="literal-block">
+MagickWand *MagickPreviewImages( MagickWand *wand, const PreviewType preview );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>preview:</dt>
+<dd>The preview type.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickpreviousimage">
+<h1><a class="toc-backref" href="#id612">MagickPreviousImage</a></h1>
+<div class="section" id="id277">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickPreviousImage( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id278">
+<h2>Description</h2>
+<p>MagickPreviousImage() selects the previous image associated with a magick
+wand.</p>
+<p>The format of the MagickPreviousImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickPreviousImage( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickprofileimage">
+<h1><a class="toc-backref" href="#id613">MagickProfileImage</a></h1>
+<div class="section" id="id279">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickProfileImage( MagickWand *wand, const char *name,
+ const unsigned char *profile, const size_t length );
+</pre>
+</div>
+<div class="section" id="id280">
+<h2>Description</h2>
+<p>Use MagickProfileImage() to add or remove a ICC, IPTC, or generic profile
+from an image. If the profile is NULL, it is removed from the image
+otherwise added. Use a name of '*' and a profile of NULL to remove all
+profiles from the image.</p>
+<p>The format of the MagickProfileImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickProfileImage( MagickWand *wand, const char *name,
+ const unsigned char *profile, const size_t length );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>name:</dt>
+<dd>Name of profile to add or remove: ICC, IPTC, or generic profile.</dd>
+<dt>profile:</dt>
+<dd>The profile.</dd>
+<dt>length:</dt>
+<dd>The length of the profile.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickquantizeimage">
+<h1><a class="toc-backref" href="#id614">MagickQuantizeImage</a></h1>
+<div class="section" id="id281">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickQuantizeImage( MagickWand *wand, const unsigned long number_colors,
+ const <a class="reference external" href="../api/types.html#colorspacetype">ColorspaceType</a> colorspace,
+ const unsigned long treedepth, const unsigned int dither,
+ const unsigned int measure_error );
+</pre>
+</div>
+<div class="section" id="id282">
+<h2>Description</h2>
+<p>MagickQuantizeImage() analyzes the colors within a reference image and
+chooses a fixed number of colors to represent the image. The goal of the
+algorithm is to minimize the color difference between the input and output
+image while minimizing the processing time.</p>
+<p>The format of the MagickQuantizeImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickQuantizeImage( MagickWand *wand, const unsigned long number_colors,
+ const <a class="reference external" href="../api/types.html#colorspacetype">ColorspaceType</a> colorspace,
+ const unsigned long treedepth, const unsigned int dither,
+ const unsigned int measure_error );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>number_colors:</dt>
+<dd>The number of colors.</dd>
+<dt>colorspace:</dt>
+<dd>Perform color reduction in this colorspace, typically
+RGBColorspace.</dd>
+<dt>treedepth:</dt>
+<dd>Normally, this integer value is zero or one. A zero or
+one tells Quantize to choose a optimal tree depth of Log4(number_colors).% A tree of this depth generally allows the best representation of the
+reference image with the least amount of memory and the fastest
+computational speed. In some cases, such as an image with low color
+dispersion (a few number of colors), a value other than
+Log4(number_colors) is required. To expand the color tree completely,
+use a value of 8.</dd>
+<dt>dither:</dt>
+<dd>A value other than zero distributes the difference between an
+original image and the corresponding color reduced algorithm to
+neighboring pixels along a Hilbert curve.</dd>
+<dt>measure_error:</dt>
+<dd>A value other than zero measures the difference between
+the original and quantized images. This difference is the total
+quantization error. The error is computed by summing over all pixels
+in an image the distance squared in RGB space between each reference
+pixel value and its quantized value.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickquantizeimages">
+<h1><a class="toc-backref" href="#id615">MagickQuantizeImages</a></h1>
+<div class="section" id="id283">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickQuantizeImages( MagickWand *wand, const unsigned long number_colors,
+ const <a class="reference external" href="../api/types.html#colorspacetype">ColorspaceType</a> colorspace,
+ const unsigned long treedepth, const unsigned int dither,
+ const unsigned int measure_error );
+</pre>
+</div>
+<div class="section" id="id284">
+<h2>Description</h2>
+<p>MagickQuantizeImage() analyzes the colors within a sequence of images and
+chooses a fixed number of colors to represent the image. The goal of the
+algorithm is to minimize the color difference between the input and output
+image while minimizing the processing time.</p>
+<p>The format of the MagickQuantizeImages method is:</p>
+<pre class="literal-block">
+unsigned int MagickQuantizeImages( MagickWand *wand, const unsigned long number_colors,
+ const <a class="reference external" href="../api/types.html#colorspacetype">ColorspaceType</a> colorspace,
+ const unsigned long treedepth, const unsigned int dither,
+ const unsigned int measure_error );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>number_colors:</dt>
+<dd>The number of colors.</dd>
+<dt>colorspace:</dt>
+<dd>Perform color reduction in this colorspace, typically
+RGBColorspace.</dd>
+<dt>treedepth:</dt>
+<dd>Normally, this integer value is zero or one. A zero or
+one tells Quantize to choose a optimal tree depth of Log4(number_colors).% A tree of this depth generally allows the best representation of the
+reference image with the least amount of memory and the fastest
+computational speed. In some cases, such as an image with low color
+dispersion (a few number of colors), a value other than
+Log4(number_colors) is required. To expand the color tree completely,
+use a value of 8.</dd>
+<dt>dither:</dt>
+<dd>A value other than zero distributes the difference between an
+original image and the corresponding color reduced algorithm to
+neighboring pixels along a Hilbert curve.</dd>
+<dt>measure_error:</dt>
+<dd>A value other than zero measures the difference between
+the original and quantized images. This difference is the total
+quantization error. The error is computed by summing over all pixels
+in an image the distance squared in RGB space between each reference
+pixel value and its quantized value.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickqueryfontmetrics">
+<h1><a class="toc-backref" href="#id616">MagickQueryFontMetrics</a></h1>
+<div class="section" id="id285">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double *MagickQueryFontMetrics( MagickWand *wand, const DrawingWand *drawing_wand,
+ const char *text );
+</pre>
+</div>
+<div class="section" id="id286">
+<h2>Description</h2>
+<p>MagickQueryFontMetrics() returns a 7 element array representing the
+following font metrics:</p>
+</div>
+<div class="section" id="element-description">
+<h2>Element Description</h2>
+<p>0 character width
+1 character height
+2 ascender
+3 descender
+4 text width
+5 text height
+6 maximum horizontal advance</p>
+<p>The format of the MagickQueryFontMetrics method is:</p>
+<pre class="literal-block">
+double *MagickQueryFontMetrics( MagickWand *wand, const DrawingWand *drawing_wand,
+ const char *text );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The Magick wand.</dd>
+<dt>drawing_wand:</dt>
+<dd>The drawing wand.</dd>
+<dt>text:</dt>
+<dd>The text.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickqueryfonts">
+<h1><a class="toc-backref" href="#id617">MagickQueryFonts</a></h1>
+<div class="section" id="id287">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+char ** MagickQueryFonts( const char *pattern, unsigned long *number_fonts );
+</pre>
+</div>
+<div class="section" id="id288">
+<h2>Description</h2>
+<p>MagickQueryFonts() returns any font that match the specified pattern.</p>
+<p>The format of the MagickQueryFonts function is:</p>
+<pre class="literal-block">
+char ** MagickQueryFonts( const char *pattern, unsigned long *number_fonts );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>pattern:</dt>
+<dd>Specifies a pointer to a text string containing a pattern.</dd>
+<dt>number_fonts:</dt>
+<dd>This integer returns the number of fonts in the list.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickqueryformats">
+<h1><a class="toc-backref" href="#id618">MagickQueryFormats</a></h1>
+<div class="section" id="id289">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+char ** MagickQueryFormats( const char *pattern, unsigned long *number_formats );
+</pre>
+</div>
+<div class="section" id="id290">
+<h2>Description</h2>
+<p>MagickQueryFormats() returns any image formats that match the specified
+pattern.</p>
+<p>The format of the MagickQueryFormats function is:</p>
+<pre class="literal-block">
+char ** MagickQueryFormats( const char *pattern, unsigned long *number_formats );
+</pre>
+<dl class="docutils">
+<dt>pattern:</dt>
+<dd>Specifies a pointer to a text string containing a pattern.</dd>
+<dt>number_formats:</dt>
+<dd>This integer returns the number of image formats in the
+list.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickradialblurimage">
+<h1><a class="toc-backref" href="#id619">MagickRadialBlurImage</a></h1>
+<div class="section" id="id291">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickRadialBlurImage( MagickWand *wand, const double angle );
+</pre>
+</div>
+<div class="section" id="id292">
+<h2>Description</h2>
+<p>MagickRadialBlurImage() radial blurs an image.</p>
+<p>The format of the MagickRadialBlurImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickRadialBlurImage( MagickWand *wand, const double angle );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>angle:</dt>
+<dd>The angle of the blur in degrees.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickraiseimage">
+<h1><a class="toc-backref" href="#id620">MagickRaiseImage</a></h1>
+<div class="section" id="id293">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickRaiseImage( MagickWand *wand, const unsigned long width,
+ const unsigned long height, const long x, const long y,
+ const unsigned int raise_flag );
+</pre>
+</div>
+<div class="section" id="id294">
+<h2>Description</h2>
+<p>MagickRaiseImage() creates a simulated three-dimensional button-like effect
+by lightening and darkening the edges of the image. Members width and
+height of raise_info define the width of the vertical and horizontal
+edge of the effect.</p>
+<p>The format of the MagickRaiseImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickRaiseImage( MagickWand *wand, const unsigned long width,
+ const unsigned long height, const long x, const long y,
+ const unsigned int raise_flag );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>width,height,x,y:</dt>
+<dd>Define the dimensions of the area to raise.</dd>
+<dt>raise_flag:</dt>
+<dd>A value other than zero creates a 3-D raise effect,
+otherwise it has a lowered effect.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickreadimage">
+<h1><a class="toc-backref" href="#id621">MagickReadImage</a></h1>
+<div class="section" id="id295">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickReadImage( MagickWand *wand, const char *filename );
+</pre>
+</div>
+<div class="section" id="id296">
+<h2>Description</h2>
+<p>MagickReadImage() reads an image or image sequence.</p>
+<p>The format of the MagickReadImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickReadImage( MagickWand *wand, const char *filename );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>filename:</dt>
+<dd>The image filename.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickreadimageblob">
+<h1><a class="toc-backref" href="#id622">MagickReadImageBlob</a></h1>
+<div class="section" id="id297">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickReadImageBlob( MagickWand *wand, const unsigned char *blob,
+ const size_t length );
+</pre>
+</div>
+<div class="section" id="id298">
+<h2>Description</h2>
+<p>MagickReadImageBlob() reads an image or image sequence from a blob.</p>
+<p>The format of the MagickReadImageBlob method is:</p>
+<pre class="literal-block">
+unsigned int MagickReadImageBlob( MagickWand *wand, const unsigned char *blob,
+ const size_t length );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>blob:</dt>
+<dd>The blob.</dd>
+<dt>length:</dt>
+<dd>The blob length.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickreadimagefile">
+<h1><a class="toc-backref" href="#id623">MagickReadImageFile</a></h1>
+<div class="section" id="id299">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickReadImageFile( MagickWand *wand, FILE *file );
+</pre>
+</div>
+<div class="section" id="id300">
+<h2>Description</h2>
+<p>MagickReadImageFile() reads an image or image sequence from an open file
+descriptor.</p>
+<p>The format of the MagickReadImageFile method is:</p>
+<pre class="literal-block">
+unsigned int MagickReadImageFile( MagickWand *wand, FILE *file );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>file:</dt>
+<dd>The file descriptor.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickreducenoiseimage">
+<h1><a class="toc-backref" href="#id624">MagickReduceNoiseImage</a></h1>
+<div class="section" id="id301">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickReduceNoiseImage( MagickWand *wand, const double radius );
+</pre>
+</div>
+<div class="section" id="id302">
+<h2>Description</h2>
+<p>MagickReduceNoiseImage() smooths the contours of an image while still
+preserving edge information. The algorithm works by replacing each pixel
+with its neighbor closest in value. A neighbor is defined by radius. Use
+a radius of 0 and ReduceNoise() selects a suitable radius for you.</p>
+<p>The format of the MagickReduceNoiseImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickReduceNoiseImage( MagickWand *wand, const double radius );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>radius:</dt>
+<dd>The radius of the pixel neighborhood.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickrelinquishmemory">
+<h1><a class="toc-backref" href="#id625">MagickRelinquishMemory</a></h1>
+<div class="section" id="id303">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickRelinquishMemory( void *resource );
+</pre>
+</div>
+<div class="section" id="id304">
+<h2>Description</h2>
+<p>MagickRelinquishMemory() relinquishes memory resources returned by such
+methods as MagickDescribeImage(), MagickGetException(), etc.</p>
+<p>The format of the MagickRelinquishMemory method is:</p>
+<pre class="literal-block">
+unsigned int MagickRelinquishMemory( void *resource );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>resource:</dt>
+<dd>Relinquish the memory associated with this resource.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickremoveimage">
+<h1><a class="toc-backref" href="#id626">MagickRemoveImage</a></h1>
+<div class="section" id="id305">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickRemoveImage( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id306">
+<h2>Description</h2>
+<p>MagickRemoveImage() removes an image from the image list.</p>
+<p>The format of the MagickRemoveImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickRemoveImage( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickremoveimageoption">
+<h1><a class="toc-backref" href="#id627">MagickRemoveImageOption</a></h1>
+<div class="section" id="id307">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickRemoveImageOption( MagickWand *wand, const char *format,
+ const char *key );
+</pre>
+</div>
+<div class="section" id="id308">
+<h2>Description</h2>
+<p>MagickRemoveImageOption() removes an image format-specific option from the
+the image (.e.g MagickRemoveImageOption(wand,"jpeg","preserve-settings").</p>
+<p>The format of the MagickRemoveImageOption method is:</p>
+<pre class="literal-block">
+unsigned int MagickRemoveImageOption( MagickWand *wand, const char *format,
+ const char *key );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>format:</dt>
+<dd>The image format.</dd>
+<dt>key:</dt>
+<dd>The key.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickremoveimageprofile">
+<h1><a class="toc-backref" href="#id628">MagickRemoveImageProfile</a></h1>
+<div class="section" id="id309">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned char *MagickRemoveImageProfile( MagickWand *wand, const char *name,
+ unsigned long *length );
+</pre>
+</div>
+<div class="section" id="id310">
+<h2>Description</h2>
+<p>MagickRemoveImageProfile() removes the named image profile and returns it.</p>
+<p>The format of the MagickRemoveImageProfile method is:</p>
+<pre class="literal-block">
+unsigned char *MagickRemoveImageProfile( MagickWand *wand, const char *name,
+ unsigned long *length );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>name:</dt>
+<dd>Name of profile to return: ICC, IPTC, or generic profile.</dd>
+<dt>length:</dt>
+<dd>The length of the profile.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickresetiterator">
+<h1><a class="toc-backref" href="#id629">MagickResetIterator</a></h1>
+<div class="section" id="id311">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+void MagickResetIterator( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id312">
+<h2>Description</h2>
+<p>MagickReset() resets the wand iterator. Use it in conjunction
+with MagickNextImage() to iterate over all the images in a wand
+container.</p>
+<p>The format of the MagickReset method is:</p>
+<pre class="literal-block">
+void MagickResetIterator( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickresampleimage">
+<h1><a class="toc-backref" href="#id630">MagickResampleImage</a></h1>
+<div class="section" id="id313">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickResampleImage( MagickWand *wand, const double x_resolution,
+ const double y_resolution, const <a class="reference external" href="../api/types.html#filtertype">FilterTypes</a> filter,
+ const double blur );
+</pre>
+</div>
+<div class="section" id="id314">
+<h2>Description</h2>
+<p>MagickResampleImage() resample image to desired resolution.</p>
+<p>Bessel Blackman Box
+Catrom Cubic Gaussian
+Hanning Hermite Lanczos
+Mitchell Point Quandratic
+Sinc Triangle</p>
+<p>Most of the filters are FIR (finite impulse response), however, Bessel,
+Gaussian, and Sinc are IIR (infinite impulse response). Bessel and Sinc
+are windowed (brought down to zero) with the Blackman filter.</p>
+<p>The format of the MagickResampleImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickResampleImage( MagickWand *wand, const double x_resolution,
+ const double y_resolution, const <a class="reference external" href="../api/types.html#filtertype">FilterTypes</a> filter,
+ const double blur );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>x_resolution:</dt>
+<dd>The new image x resolution.</dd>
+<dt>y_resolution:</dt>
+<dd>The new image y resolution.</dd>
+<dt>filter:</dt>
+<dd>Image filter to use.</dd>
+<dt>blur:</dt>
+<dd>The blur factor where > 1 is blurry, < 1 is sharp.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickresizeimage">
+<h1><a class="toc-backref" href="#id631">MagickResizeImage</a></h1>
+<div class="section" id="id315">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickResizeImage( MagickWand *wand, const unsigned long columns,
+ const unsigned long rows, const <a class="reference external" href="../api/types.html#filtertype">FilterTypes</a> filter,
+ const double blur );
+</pre>
+</div>
+<div class="section" id="id316">
+<h2>Description</h2>
+<p>MagickResizeImage() scales an image to the desired dimensions with one of
+these filters:</p>
+<p>Bessel Blackman Box
+Catrom Cubic Gaussian
+Hanning Hermite Lanczos
+Mitchell Point Quandratic
+Sinc Triangle</p>
+<p>Most of the filters are FIR (finite impulse response), however, Bessel,
+Gaussian, and Sinc are IIR (infinite impulse response). Bessel and Sinc
+are windowed (brought down to zero) with the Blackman filter.</p>
+<p>The format of the MagickResizeImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickResizeImage( MagickWand *wand, const unsigned long columns,
+ const unsigned long rows, const <a class="reference external" href="../api/types.html#filtertype">FilterTypes</a> filter,
+ const double blur );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>columns:</dt>
+<dd>The number of columns in the scaled image.</dd>
+<dt>rows:</dt>
+<dd>The number of rows in the scaled image.</dd>
+<dt>filter:</dt>
+<dd>Image filter to use.</dd>
+<dt>blur:</dt>
+<dd>The blur factor where > 1 is blurry, < 1 is sharp.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickrollimage">
+<h1><a class="toc-backref" href="#id632">MagickRollImage</a></h1>
+<div class="section" id="id317">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickRollImage( MagickWand *wand, const long x_offset,
+ const unsigned long y_offset );
+</pre>
+</div>
+<div class="section" id="id318">
+<h2>Description</h2>
+<p>MagickRollImage() offsets an image as defined by x_offset and y_offset.</p>
+<p>The format of the MagickRollImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickRollImage( MagickWand *wand, const long x_offset,
+ const unsigned long y_offset );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>x_offset:</dt>
+<dd>The x offset.</dd>
+<dt>y_offset:</dt>
+<dd>The y offset.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickrotateimage">
+<h1><a class="toc-backref" href="#id633">MagickRotateImage</a></h1>
+<div class="section" id="id319">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickRotateImage( MagickWand *wand, const PixelWand *background,
+ const double degrees );
+</pre>
+</div>
+<div class="section" id="id320">
+<h2>Description</h2>
+<p>MagickRotateImage() rotates an image the specified number of degrees. Empty
+triangles left over from rotating the image are filled with the
+background color.</p>
+<p>The format of the MagickRotateImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickRotateImage( MagickWand *wand, const PixelWand *background,
+ const double degrees );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>background:</dt>
+<dd>The background pixel wand.</dd>
+<dt>degrees:</dt>
+<dd>The number of degrees to rotate the image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksampleimage">
+<h1><a class="toc-backref" href="#id634">MagickSampleImage</a></h1>
+<div class="section" id="id321">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSampleImage( MagickWand *wand, const unsigned long columns,
+ const unsigned long rows );
+</pre>
+</div>
+<div class="section" id="id322">
+<h2>Description</h2>
+<p>MagickSampleImage() scales an image to the desired dimensions with pixel
+sampling. Unlike other scaling methods, this method does not introduce
+any additional color into the scaled image.</p>
+<p>The format of the MagickSampleImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickSampleImage( MagickWand *wand, const unsigned long columns,
+ const unsigned long rows );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>columns:</dt>
+<dd>The number of columns in the scaled image.</dd>
+<dt>rows:</dt>
+<dd>The number of rows in the scaled image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickscaleimage">
+<h1><a class="toc-backref" href="#id635">MagickScaleImage</a></h1>
+<div class="section" id="id323">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickScaleImage( MagickWand *wand, const unsigned long columns,
+ const unsigned long rows );
+</pre>
+</div>
+<div class="section" id="id324">
+<h2>Description</h2>
+<p>MagickScaleImage() scales the size of an image to the given dimensions.</p>
+<p>The format of the MagickScaleImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickScaleImage( MagickWand *wand, const unsigned long columns,
+ const unsigned long rows );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>columns:</dt>
+<dd>The number of columns in the scaled image.</dd>
+<dt>rows:</dt>
+<dd>The number of rows in the scaled image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickseparateimagechannel">
+<h1><a class="toc-backref" href="#id636">MagickSeparateImageChannel</a></h1>
+<div class="section" id="id325">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSeparateImageChannel( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel );
+</pre>
+</div>
+<div class="section" id="id326">
+<h2>Description</h2>
+<p>MagickChannelImage() separates a channel from the image and returns a
+grayscale image. A channel is a particular color component of each pixel
+in the image.</p>
+<p>The format of the MagickChannelImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickSeparateImageChannel( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>channel:</dt>
+<dd>Identify which channel to extract: RedChannel, GreenChannel,
+BlueChannel, OpacityChannel, CyanChannel, MagentaChannel, YellowChannel,
+BlackChannel.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetcompressionquality">
+<h1><a class="toc-backref" href="#id637">MagickSetCompressionQuality</a></h1>
+<div class="section" id="id327">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetCompressionQuality( MagickWand *wand, const unsigned long quality );
+</pre>
+</div>
+<div class="section" id="id328">
+<h2>Description</h2>
+<p>MagickSetCompressionQuality() sets the image quality factor, which
+determines compression options when saving the file.</p>
+<p>For the JPEG and MPEG image formats, quality is 0 (lowest image
+quality and highest compression) to 100 (best quality but least
+effective compression). The default quality is 75. Use the
+-sampling-factor option to specify the factors for chroma
+downsampling. To use the same quality value as that found by the
+JPEG decoder, use the -define jpeg:preserve-settings flag.</p>
+<p>For the MIFF image format, and the TIFF format while using ZIP
+compression, quality/10 is the zlib compres- sion level, which is 0
+(worst but fastest compression) to 9 (best but slowest). It has no
+effect on the image appearance, since the compression is always
+lossless.</p>
+<p>For the JPEG-2000 image format, quality is mapped using a non-linear
+equation to the compression ratio required by the Jasper library.
+This non-linear equation is intended to loosely approximate the
+quality provided by the JPEG v1 format. The default quality value 75
+results in a request for 16:1 compression. The quality value 100
+results in a request for non-lossy compres- sion.</p>
+<p>For the MNG and PNG image formats, the quality value sets the zlib
+compression level (quality / 10) and filter-type (quality % 10).
+Compression levels range from 0 (fastest compression) to 100 (best
+but slowest). For compression level 0, the Huffman-only strategy is
+used, which is fastest but not necessarily the worst compression. If
+filter-type is 4 or less, the specified filter-type is used for all
+scanlines:</p>
+<ol class="arabic simple" start="0">
+<li>none</li>
+<li>sub</li>
+<li>up</li>
+<li>average</li>
+<li>Paeth</li>
+</ol>
+<p>If filter-type is 5, adaptive filtering is used when quality is
+greater than 50 and the image does not have a color map, otherwise no
+filtering is used.</p>
+<p>If filter-type is 6, adaptive filtering with minimum-
+sum-of-absolute-values is used.</p>
+<p>Only if the output is MNG, if filter-type is 7, the LOCO color
+transformation and adaptive filtering with
+minimum-sum-of-absolute-values are used.</p>
+<p>The default is quality is 75, which means nearly the best compression
+with adaptive filtering. The quality setting has no effect on the
+appearance of PNG and MNG images, since the compression is always
+lossless.</p>
+<p>For further information, see the PNG specification.</p>
+<p>When writing a JNG image with transparency, two quality values are
+required, one for the main image and one for the grayscale image that
+conveys the opacity channel. These are written as a single integer
+equal to the main image quality plus 1000 times the opacity quality.
+For example, if you want to use quality 75 for the main image and
+quality 90 to compress the opacity data, use -quality 90075.</p>
+<p>For the PNM family of formats (PNM, PGM, and PPM) specify a quality
+factor of zero in order to obtain the ASCII variant of the
+format. Note that -compress none used to be used to trigger ASCII
+output but provided the opposite result of what was expected as
+compared with other formats.</p>
+<p>The format of the MagickSetCompressionQuality method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetCompressionQuality( MagickWand *wand, const unsigned long quality );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>delay:</dt>
+<dd>The image quality.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetdepth">
+<h1><a class="toc-backref" href="#id638">MagickSetDepth</a></h1>
+<div class="section" id="id329">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetDepth( MagickWand *wand, const size_t depth );
+</pre>
+</div>
+<div class="section" id="id330">
+<h2>Description</h2>
+<p>MagickSetDepth() sets the sample depth to be used when reading from a
+raw image or a format which requires that the depth be specified in
+advance by the user.</p>
+<p>The format of the MagickSetDepth method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetDepth( MagickWand *wand, const size_t depth );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>depth:</dt>
+<dd>The sample depth.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetfilename">
+<h1><a class="toc-backref" href="#id639">MagickSetFilename</a></h1>
+<div class="section" id="id331">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetFilename( MagickWand *wand, const char *filename );
+</pre>
+</div>
+<div class="section" id="id332">
+<h2>Description</h2>
+<p>MagickSetFilename() sets the filename before you read or write an image file.</p>
+<p>The format of the MagickSetFilename method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetFilename( MagickWand *wand, const char *filename );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>filename:</dt>
+<dd>The image filename.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetformat">
+<h1><a class="toc-backref" href="#id640">MagickSetFormat</a></h1>
+<div class="section" id="id333">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetFormat( MagickWand *wand, const char *format );
+</pre>
+</div>
+<div class="section" id="id334">
+<h2>Description</h2>
+<p>MagickSetFormat() sets the file or blob format (e.g. "BMP") to be used
+when a file or blob is read. Usually this is not necessary because
+GraphicsMagick is able to auto-detect the format based on the file
+header (or the file extension), but some formats do not use a unique
+header or the selection may be ambigious. Use MagickSetImageFormat()
+to set the format to be used when a file or blob is to be written.</p>
+<p>The format of the MagickSetFormat method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetFormat( MagickWand *wand, const char *format );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>filename:</dt>
+<dd>The file or blob format.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimage">
+<h1><a class="toc-backref" href="#id641">MagickSetImage</a></h1>
+<div class="section" id="id335">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImage( MagickWand *wand, const MagickWand *set_wand );
+</pre>
+</div>
+<div class="section" id="id336">
+<h2>Description</h2>
+<p>MagickSetImage() replaces the last image returned by MagickSetImageIndex(),
+MagickNextImage(), MagickPreviousImage() with the images from the specified
+wand.</p>
+<p>The format of the MagickSetImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImage( MagickWand *wand, const MagickWand *set_wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>set_wand:</dt>
+<dd>The set_wand wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimageattribute">
+<h1><a class="toc-backref" href="#id642">MagickSetImageAttribute</a></h1>
+<div class="section" id="id337">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageAttribute( MagickWand *wand, const char *name,
+ const char *value );
+</pre>
+</div>
+<div class="section" id="id338">
+<h2>Description</h2>
+<p>MagickSetImageAttribute sets an image attribute</p>
+<p>The format of the MagickSetImageAttribute method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageAttribute( MagickWand *wand, const char *name,
+ const char *value );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>name:</dt>
+<dd>The name of the attribute</dd>
+<dt>value:</dt>
+<dd>The value of the attribute</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagebackgroundcolor">
+<h1><a class="toc-backref" href="#id643">MagickSetImageBackgroundColor</a></h1>
+<div class="section" id="id339">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageBackgroundColor( MagickWand *wand, const PixelWand *background );
+</pre>
+</div>
+<div class="section" id="id340">
+<h2>Description</h2>
+<p>MagickSetImageBackgroundColor() sets the image background color.</p>
+<p>The format of the MagickSetImageBackgroundColor method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageBackgroundColor( MagickWand *wand, const PixelWand *background );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>background:</dt>
+<dd>The background pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimageblueprimary">
+<h1><a class="toc-backref" href="#id644">MagickSetImageBluePrimary</a></h1>
+<div class="section" id="id341">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageBluePrimary( MagickWand *wand, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id342">
+<h2>Description</h2>
+<p>MagickSetImageBluePrimary() sets the image chromaticity blue primary point.</p>
+<p>The format of the MagickSetImageBluePrimary method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageBluePrimary( MagickWand *wand, const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>x:</dt>
+<dd>The blue primary x-point.</dd>
+<dt>y:</dt>
+<dd>The blue primary y-point.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagebordercolor">
+<h1><a class="toc-backref" href="#id645">MagickSetImageBorderColor</a></h1>
+<div class="section" id="id343">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageBorderColor( MagickWand *wand, const PixelWand *border );
+</pre>
+</div>
+<div class="section" id="id344">
+<h2>Description</h2>
+<p>MagickSetImageBorderColor() sets the image border color.</p>
+<p>The format of the MagickSetImageBorderColor method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageBorderColor( MagickWand *wand, const PixelWand *border );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>border:</dt>
+<dd>The border pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagecolormapcolor">
+<h1><a class="toc-backref" href="#id646">MagickSetImageColormapColor</a></h1>
+<div class="section" id="id345">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageColormapColor( MagickWand *wand, const unsigned long index,
+ const PixelWand *color );
+</pre>
+</div>
+<div class="section" id="id346">
+<h2>Description</h2>
+<p>MagickSetImageColormapColor() sets the color of the specified colormap
+index.</p>
+<p>The format of the MagickSetImageColormapColor method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageColormapColor( MagickWand *wand, const unsigned long index,
+ const PixelWand *color );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>index:</dt>
+<dd>The offset into the image colormap.</dd>
+<dt>color:</dt>
+<dd>Return the colormap color in this wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagecolorspace">
+<h1><a class="toc-backref" href="#id647">MagickSetImageColorspace</a></h1>
+<div class="section" id="id347">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageColorspace( MagickWand *wand, const <a class="reference external" href="../api/types.html#colorspacetype">ColorspaceType</a> colorspace );
+</pre>
+</div>
+<div class="section" id="id348">
+<h2>Description</h2>
+<p>MagickSetImageColorspace() sets the image colorspace.</p>
+<p>The format of the MagickSetImageColorspace method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageColorspace( MagickWand *wand, const <a class="reference external" href="../api/types.html#colorspacetype">ColorspaceType</a> colorspace );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>colorspace:</dt>
+<dd>The image colorspace: UndefinedColorspace, RGBColorspace,
+GRAYColorspace, TransparentColorspace, OHTAColorspace, XYZColorspace,
+YCbCrColorspace, YCCColorspace, YIQColorspace, YPbPrColorspace,
+YPbPrColorspace, YUVColorspace, CMYKColorspace, sRGBColorspace,
+HSLColorspace, or HWBColorspace.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagecompose">
+<h1><a class="toc-backref" href="#id648">MagickSetImageCompose</a></h1>
+<div class="section" id="id349">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageCompose( MagickWand *wand, const <a class="reference external" href="../api/types.html#compositeoperator">CompositeOperator</a> compose );
+</pre>
+</div>
+<div class="section" id="id350">
+<h2>Description</h2>
+<p>MagickSetImageCompose() sets the image composite operator, useful for
+specifying how to composite the image thumbnail when using the
+MagickMontageImage() method.</p>
+<p>The format of the MagickSetImageCompose method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageCompose( MagickWand *wand, const <a class="reference external" href="../api/types.html#compositeoperator">CompositeOperator</a> compose );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>compose:</dt>
+<dd>The image composite operator.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagecompression">
+<h1><a class="toc-backref" href="#id649">MagickSetImageCompression</a></h1>
+<div class="section" id="id351">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageCompression( MagickWand *wand,
+ const <a class="reference external" href="../api/types.html#compressiontype">CompressionType</a> compression );
+</pre>
+</div>
+<div class="section" id="id352">
+<h2>Description</h2>
+<p>MagickSetImageCompression() sets the image compression.</p>
+<p>The format of the MagickSetImageCompression method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageCompression( MagickWand *wand,
+ const <a class="reference external" href="../api/types.html#compressiontype">CompressionType</a> compression );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>compression:</dt>
+<dd>The image compression type.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagedelay">
+<h1><a class="toc-backref" href="#id650">MagickSetImageDelay</a></h1>
+<div class="section" id="id353">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageDelay( MagickWand *wand, const unsigned long delay );
+</pre>
+</div>
+<div class="section" id="id354">
+<h2>Description</h2>
+<p>MagickSetImageDelay() sets the image delay.</p>
+<p>The format of the MagickSetImageDelay method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageDelay( MagickWand *wand, const unsigned long delay );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>delay:</dt>
+<dd>The image delay in 1/100th of a second.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagechanneldepth">
+<h1><a class="toc-backref" href="#id651">MagickSetImageChannelDepth</a></h1>
+<div class="section" id="id355">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageChannelDepth( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const unsigned long depth );
+</pre>
+</div>
+<div class="section" id="id356">
+<h2>Description</h2>
+<p>MagickSetImageChannelDepth() sets the depth of a particular image channel.</p>
+<p>The format of the MagickSetImageChannelDepth method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageChannelDepth( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const unsigned long depth );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>channel:</dt>
+<dd>Identify which channel to extract: RedChannel, GreenChannel,
+BlueChannel, OpacityChannel, CyanChannel, MagentaChannel, YellowChannel,
+BlackChannel.</dd>
+<dt>depth:</dt>
+<dd>The image depth in bits.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagedepth">
+<h1><a class="toc-backref" href="#id652">MagickSetImageDepth</a></h1>
+<div class="section" id="id357">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageDepth( MagickWand *wand, const unsigned long depth );
+</pre>
+</div>
+<div class="section" id="id358">
+<h2>Description</h2>
+<p>MagickSetImageDepth() sets the image depth.</p>
+<p>The format of the MagickSetImageDepth method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageDepth( MagickWand *wand, const unsigned long depth );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>depth:</dt>
+<dd>The image depth in bits: 8, 16, or 32.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagedispose">
+<h1><a class="toc-backref" href="#id653">MagickSetImageDispose</a></h1>
+<div class="section" id="id359">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageDispose( MagickWand *wand, const DisposeType dispose );
+</pre>
+</div>
+<div class="section" id="id360">
+<h2>Description</h2>
+<p>MagickSetImageDispose() sets the image disposal method.</p>
+<p>The format of the MagickSetImageDispose method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageDispose( MagickWand *wand, const DisposeType dispose );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>dispose:</dt>
+<dd>The image disposeal type.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagefilename">
+<h1><a class="toc-backref" href="#id654">MagickSetImageFilename</a></h1>
+<div class="section" id="id361">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageFilename( MagickWand *wand, const char *filename );
+</pre>
+</div>
+<div class="section" id="id362">
+<h2>Description</h2>
+<p>MagickSetImageFilename() sets the filename of a particular image in a
+sequence.</p>
+<p>The format of the MagickSetImageFilename method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageFilename( MagickWand *wand, const char *filename );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>filename:</dt>
+<dd>The image filename.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimageformat">
+<h1><a class="toc-backref" href="#id655">MagickSetImageFormat</a></h1>
+<div class="section" id="id363">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageFormat( MagickWand *wand, const char *format );
+</pre>
+</div>
+<div class="section" id="id364">
+<h2>Description</h2>
+<p>MagickSetImageFormat() sets the format of a particular image in a
+sequence. The format is designated by a magick string (e.g. "GIF").</p>
+<p>The format of the MagickSetImageFormat method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageFormat( MagickWand *wand, const char *format );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>magick:</dt>
+<dd>The image format.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagefuzz">
+<h1><a class="toc-backref" href="#id656">MagickSetImageFuzz</a></h1>
+<div class="section" id="id365">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageFuzz( MagickWand *wand, const double fuzz );
+</pre>
+</div>
+<div class="section" id="id366">
+<h2>Description</h2>
+<p>MagickSetImageFuzz() sets the color comparison fuzz factor. Colors
+closer than the fuzz factor are considered to be the same when comparing
+colors. Note that some other functions such as MagickColorFloodfillImage()
+implicitly set this value.</p>
+<p>The format of the MagickSetImageFuzz method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageFuzz( MagickWand *wand, const double fuzz );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>fuzz:</dt>
+<dd>The color comparison fuzz factor</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagegamma">
+<h1><a class="toc-backref" href="#id657">MagickSetImageGamma</a></h1>
+<div class="section" id="id367">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageGamma( MagickWand *wand, const double gamma );
+</pre>
+</div>
+<div class="section" id="id368">
+<h2>Description</h2>
+<p>MagickSetImageGamma() sets the image gamma.</p>
+<p>The format of the MagickSetImageGamma method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageGamma( MagickWand *wand, const double gamma );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>gamma:</dt>
+<dd>The image gamma.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagegravity">
+<h1><a class="toc-backref" href="#id658">MagickSetImageGravity</a></h1>
+<div class="section" id="id369">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageGravity( MagickWand *wand, const <a class="reference external" href="../api/types.html#gravitytype">GravityType</a> );
+</pre>
+</div>
+<div class="section" id="id370">
+<h2>Description</h2>
+<p>MagickSetImageGravity() sets the image gravity. This is used
+when evaluating regions defined by a geometry and the image
+dimensions. It may be used in conjunction with operations which
+use a geometry parameter to adjust the x, y parameters of the
+final operation. Gravity is used in composition to determine where
+the image should be placed within the defined geometry region.
+It may be used with montage to effect placement of the image within
+the tile.</p>
+<p>The format of the MagickSetImageGravity method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageGravity( MagickWand *wand, const <a class="reference external" href="../api/types.html#gravitytype">GravityType</a> );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>gravity:</dt>
+<dd>The image gravity. Available values are ForgetGravity,
+NorthWestGravity, NorthGravity, NorthEastGravity, WestGravity,
+CenterGravity, EastGravity, SouthWestGravity, SouthGravity,
+SouthEastGravity, and StaticGravity</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagegreenprimary">
+<h1><a class="toc-backref" href="#id659">MagickSetImageGreenPrimary</a></h1>
+<div class="section" id="id371">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageGreenPrimary( MagickWand *wand, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id372">
+<h2>Description</h2>
+<p>MagickSetImageGreenPrimary() sets the image chromaticity green primary
+point.</p>
+<p>The format of the MagickSetImageGreenPrimary method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageGreenPrimary( MagickWand *wand, const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>x:</dt>
+<dd>The green primary x-point.</dd>
+<dt>y:</dt>
+<dd>The green primary y-point.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimageindex">
+<h1><a class="toc-backref" href="#id660">MagickSetImageIndex</a></h1>
+<div class="section" id="id373">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageIndex( MagickWand *wand, const long index );
+</pre>
+</div>
+<div class="section" id="id374">
+<h2>Description</h2>
+<p>MagickSetImageIndex() set the current image to the position of the list
+specified with the index parameter.</p>
+<p>The format of the MagickSetImageIndex method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageIndex( MagickWand *wand, const long index );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>index:</dt>
+<dd>The scene number.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimageinterlacescheme">
+<h1><a class="toc-backref" href="#id661">MagickSetImageInterlaceScheme</a></h1>
+<div class="section" id="id375">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageInterlaceScheme( MagickWand *wand,
+ const <a class="reference external" href="../api/types.html#interlacetype">InterlaceType</a> interlace_scheme );
+</pre>
+</div>
+<div class="section" id="id376">
+<h2>Description</h2>
+<p>MagickSetImageInterlaceScheme() sets the image interlace scheme. Please
+use SetInterlaceScheme() instead to change the interlace scheme used when
+writing the image.</p>
+<p>The format of the MagickSetImageInterlaceScheme method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageInterlaceScheme( MagickWand *wand,
+ const <a class="reference external" href="../api/types.html#interlacetype">InterlaceType</a> interlace_scheme );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>interlace_scheme:</dt>
+<dd>The image interlace scheme: NoInterlace, LineInterlace,
+PlaneInterlace, PartitionInterlace.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimageiterations">
+<h1><a class="toc-backref" href="#id662">MagickSetImageIterations</a></h1>
+<div class="section" id="id377">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageIterations( MagickWand *wand, const unsigned long iterations );
+</pre>
+</div>
+<div class="section" id="id378">
+<h2>Description</h2>
+<p>MagickSetImageIterations() sets the image iterations.</p>
+<p>The format of the MagickSetImageIterations method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageIterations( MagickWand *wand, const unsigned long iterations );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>delay:</dt>
+<dd>The image delay in 1/100th of a second.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagemattecolor">
+<h1><a class="toc-backref" href="#id663">MagickSetImageMatteColor</a></h1>
+<div class="section" id="id379">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageMatteColor( MagickWand *wand, const PixelWand *matte );
+</pre>
+</div>
+<div class="section" id="id380">
+<h2>Description</h2>
+<p>MagickSetImageMatteColor() sets the image matte color.</p>
+<p>The format of the MagickSetImageMatteColor method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageMatteColor( MagickWand *wand, const PixelWand *matte );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>matte:</dt>
+<dd>The matte pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimageoption">
+<h1><a class="toc-backref" href="#id664">MagickSetImageOption</a></h1>
+<div class="section" id="id381">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageOption( MagickWand *wand, const char *format, const char *key,
+ const char *value );
+</pre>
+</div>
+<div class="section" id="id382">
+<h2>Description</h2>
+<p>MagickSetImageOption() associates one or options with a particular image
+format (.e.g MagickSetImageOption(wand,"jpeg","preserve-settings","true").</p>
+<p>The format of the MagickSetImageOption method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageOption( MagickWand *wand, const char *format, const char *key,
+ const char *value );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>format:</dt>
+<dd>The image format.</dd>
+<dt>key:</dt>
+<dd>The key.</dd>
+<dt>value:</dt>
+<dd>The value.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimageorientation">
+<h1><a class="toc-backref" href="#id665">MagickSetImageOrientation</a></h1>
+<div class="section" id="id383">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickSetImageOrientation( MagickWand *wand, OrientationType new_orientation );
+</pre>
+</div>
+<div class="section" id="id384">
+<h2>Description</h2>
+<p>MagickSetImageOrientation() sets the internal image orientation type.
+The EXIF orientation tag will be updated if present.</p>
+<p>The format of the MagickSetImageOrientation method is:</p>
+<pre class="literal-block">
+MagickSetImageOrientation( MagickWand *wand, OrientationType new_orientation );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>new_orientation:</dt>
+<dd>The new orientation of the image. One of:</dd>
+</dl>
+<p>UndefinedOrientation Image orientation not specified.
+TopLeftOrientation Left to right and Top to bottom.
+TopRightOrientation Right to left and Top to bottom.
+BottomRightOrientation Right to left and Bottom to top.
+BottomLeftOrientation Left to right and Bottom to top.
+LeftTopOrientation Top to bottom and Left to right.
+RightTopOrientation Top to bottom and Right to left.
+RightBottomOrientation Bottom to top and Right to left.
+LeftBottomOrientation Bottom to top and Left to right.</p>
+<p>Returns True on success, False otherwise.</p>
+</div>
+</div>
+<div class="section" id="magicksetimagepage">
+<h1><a class="toc-backref" href="#id666">MagickSetImagePage</a></h1>
+<div class="section" id="id385">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImagePage( MagickWand *wand, const unsigned long width,
+ const unsigned long height, const long x, const long y );
+</pre>
+</div>
+<div class="section" id="id386">
+<h2>Description</h2>
+<p>MagickSetImagePage() sets the image page size and offset used when
+placing (e.g. compositing) the image. Pass all zeros for the
+default placement.</p>
+<p>The format of the MagickSetImagePage method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImagePage( MagickWand *wand, const unsigned long width,
+ const unsigned long height, const long x, const long y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>width, height:</dt>
+<dd>The region size.</dd>
+<dt>x, y:</dt>
+<dd>Offset (from top left) on base canvas image on
+which to composite image data.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagepixels">
+<h1><a class="toc-backref" href="#id667">MagickSetImagePixels</a></h1>
+<div class="section" id="id387">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImagePixels( MagickWand *wand, const long x_offset, const long y_offset,
+ const unsigned long columns, const unsigned long rows,
+ const char *map, const <a class="reference external" href="../api/types.html#storagetype">StorageType</a> storage,
+ unsigned char *pixels );
+</pre>
+</div>
+<div class="section" id="id388">
+<h2>Description</h2>
+<p>MagickSetImagePixels() accepts pixel data and stores it in the image at the
+location you specify. The method returns False on success otherwise True
+if an error is encountered. The pixel data can be either char, short int,
+int, long, float, or double in the order specified by map.</p>
+<p>Suppose your want want to upload the first scanline of a 640x480 image from
+character data in red-green-blue order:</p>
+<p>MagickSetImagePixels(wand,0,0,0,640,1,"RGB",CharPixel,pixels);</p>
+<p>The format of the MagickSetImagePixels method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImagePixels( MagickWand *wand, const long x_offset, const long y_offset,
+ const unsigned long columns, const unsigned long rows,
+ const char *map, const <a class="reference external" href="../api/types.html#storagetype">StorageType</a> storage,
+ unsigned char *pixels );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>x_offset, y_offset:</dt>
+<dd>Offset (from top left) on base canvas image on
+which to composite image data.</dd>
+<dt>columns, rows:</dt>
+<dd>Dimensions of image.</dd>
+<dt>map:</dt>
+<dd>This string reflects the expected ordering of the pixel array.
+It can be any combination or order of R = red, G = green, B = blue,
+A = alpha (same as Transparency), O = Opacity, T = Transparency,
+C = cyan, Y = yellow, M = magenta, K = black, or I = intensity
+(for grayscale). Specify "P" = pad, to skip over a quantum which is
+intentionally ignored. Creation of an alpha channel for CMYK images
+is currently not supported.</dd>
+<dt>storage:</dt>
+<dd>Define the data type of the pixels. Float and double types are
+expected to be normalized [0..1] otherwise [0..MaxRGB]. Choose from
+these types: CharPixel, ShortPixel, IntegerPixel, LongPixel, FloatPixel,
+or DoublePixel.</dd>
+<dt>pixels:</dt>
+<dd>This array of values contain the pixel components as defined by
+map and type. You must preallocate this array where the expected
+length varies depending on the values of width, height, map, and type.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimageprofile">
+<h1><a class="toc-backref" href="#id668">MagickSetImageProfile</a></h1>
+<div class="section" id="id389">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageProfile( MagickWand *wand, const char *name,
+ const unsigned char *profile,
+ const unsigned long length );
+</pre>
+</div>
+<div class="section" id="id390">
+<h2>Description</h2>
+<p>MagickSetImageProfile() adds a named profile to the magick wand. If a
+profile with the same name already exists, it is replaced. This method
+differs from the MagickProfileImage() method in that it does not apply any
+CMS color profiles.</p>
+<p>The format of the MagickSetImageProfile method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageProfile( MagickWand *wand, const char *name,
+ const unsigned char *profile,
+ const unsigned long length );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>name:</dt>
+<dd>Name of profile to add or remove: ICC, IPTC, or generic profile.</dd>
+<dt>profile:</dt>
+<dd>The profile.</dd>
+<dt>length:</dt>
+<dd>The length of the profile.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimageredprimary">
+<h1><a class="toc-backref" href="#id669">MagickSetImageRedPrimary</a></h1>
+<div class="section" id="id391">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageRedPrimary( MagickWand *wand, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id392">
+<h2>Description</h2>
+<p>MagickSetImageRedPrimary() sets the image chromaticity red primary point.</p>
+<p>The format of the MagickSetImageRedPrimary method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageRedPrimary( MagickWand *wand, const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>x:</dt>
+<dd>The red primary x-point.</dd>
+<dt>y:</dt>
+<dd>The red primary y-point.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagerenderingintent">
+<h1><a class="toc-backref" href="#id670">MagickSetImageRenderingIntent</a></h1>
+<div class="section" id="id393">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageRenderingIntent( MagickWand *wand,
+ const <a class="reference external" href="../api/types.html#renderingintent">RenderingIntent</a> rendering_intent );
+</pre>
+</div>
+<div class="section" id="id394">
+<h2>Description</h2>
+<p>MagickSetImageRenderingIntent() sets the image rendering intent.</p>
+<p>The format of the MagickSetImageRenderingIntent method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageRenderingIntent( MagickWand *wand,
+ const <a class="reference external" href="../api/types.html#renderingintent">RenderingIntent</a> rendering_intent );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>rendering_intent:</dt>
+<dd>The image rendering intent: UndefinedIntent,
+SaturationIntent, PerceptualIntent, AbsoluteIntent, or RelativeIntent.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimageresolution">
+<h1><a class="toc-backref" href="#id671">MagickSetImageResolution</a></h1>
+<div class="section" id="id395">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageResolution( MagickWand *wand, const double x_resolution,
+ const doubtl y_resolution );
+</pre>
+</div>
+<div class="section" id="id396">
+<h2>Description</h2>
+<p>MagickSetImageResolution() sets the image resolution.</p>
+<p>The format of the MagickSetImageResolution method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageResolution( MagickWand *wand, const double x_resolution,
+ const doubtl y_resolution );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>x_resolution:</dt>
+<dd>The image x resolution.</dd>
+<dt>y_resolution:</dt>
+<dd>The image y resolution.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagescene">
+<h1><a class="toc-backref" href="#id672">MagickSetImageScene</a></h1>
+<div class="section" id="id397">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageScene( MagickWand *wand, const unsigned long scene );
+</pre>
+</div>
+<div class="section" id="id398">
+<h2>Description</h2>
+<p>MagickSetImageScene() sets the image scene.</p>
+<p>The format of the MagickSetImageScene method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageScene( MagickWand *wand, const unsigned long scene );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>delay:</dt>
+<dd>The image scene number.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagetype">
+<h1><a class="toc-backref" href="#id673">MagickSetImageType</a></h1>
+<div class="section" id="id399">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageType( MagickWand *wand, const <a class="reference external" href="../api/types.html#imagetype">ImageType</a> image_type );
+</pre>
+</div>
+<div class="section" id="id400">
+<h2>Description</h2>
+<p>MagickSetImageType() sets the image type.</p>
+<p>The format of the MagickSetImageType method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageType( MagickWand *wand, const <a class="reference external" href="../api/types.html#imagetype">ImageType</a> image_type );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>image_type:</dt>
+<dd>The image type: UndefinedType, BilevelType, GrayscaleType,
+GrayscaleMatteType, PaletteType, PaletteMatteType, TrueColorType,
+TrueColorMatteType, ColorSeparationType, ColorSeparationMatteType,
+or OptimizeType.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagesavedtype">
+<h1><a class="toc-backref" href="#id674">MagickSetImageSavedType</a></h1>
+<div class="section" id="id401">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageSavedType( MagickWand *wand, const <a class="reference external" href="../api/types.html#imagetype">ImageType</a> image_type );
+</pre>
+</div>
+<div class="section" id="id402">
+<h2>Description</h2>
+<p>MagickSetImageSavedType() sets the image type that will be used when the
+image is saved.</p>
+<p>The format of the MagickSetImageSavedType method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageSavedType( MagickWand *wand, const <a class="reference external" href="../api/types.html#imagetype">ImageType</a> image_type );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>image_type:</dt>
+<dd>The image type: UndefinedType, BilevelType, GrayscaleType,
+GrayscaleMatteType, PaletteType, PaletteMatteType, TrueColorType,
+TrueColorMatteType, ColorSeparationType, ColorSeparationMatteType,
+or OptimizeType.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimageunits">
+<h1><a class="toc-backref" href="#id675">MagickSetImageUnits</a></h1>
+<div class="section" id="id403">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageUnits( MagickWand *wand, const <a class="reference external" href="../api/types.html#resolutiontype">ResolutionType</a> units );
+</pre>
+</div>
+<div class="section" id="id404">
+<h2>Description</h2>
+<p>MagickSetImageUnits() sets the image units of resolution.</p>
+<p>The format of the MagickSetImageUnits method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageUnits( MagickWand *wand, const <a class="reference external" href="../api/types.html#resolutiontype">ResolutionType</a> units );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>units:</dt>
+<dd>The image units of resolution : Undefinedresolution,
+PixelsPerInchResolution, or PixelsPerCentimeterResolution.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagevirtualpixelmethod">
+<h1><a class="toc-backref" href="#id676">MagickSetImageVirtualPixelMethod</a></h1>
+<div class="section" id="id405">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageVirtualPixelMethod( MagickWand *wand,
+ const <a class="reference external" href="../api/types.html#virtualpixelmethod">VirtualPixelMethod</a> method );
+</pre>
+</div>
+<div class="section" id="id406">
+<h2>Description</h2>
+<p>MagickSetImageVirtualPixelMethod() sets the image virtual pixel method.</p>
+<p>The format of the MagickSetImageVirtualPixelMethod method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageVirtualPixelMethod( MagickWand *wand,
+ const <a class="reference external" href="../api/types.html#virtualpixelmethod">VirtualPixelMethod</a> method );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>method:</dt>
+<dd>The image virtual pixel method : UndefinedVirtualPixelMethod,
+ConstantVirtualPixelMethod, EdgeVirtualPixelMethod,
+MirrorVirtualPixelMethod, or TileVirtualPixelMethod.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetinterlacescheme">
+<h1><a class="toc-backref" href="#id677">MagickSetInterlaceScheme</a></h1>
+<div class="section" id="id407">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetInterlaceScheme( MagickWand *wand,
+ const <a class="reference external" href="../api/types.html#interlacetype">InterlaceType</a> interlace_scheme );
+</pre>
+</div>
+<div class="section" id="id408">
+<h2>Description</h2>
+<p>MagickSetInterlaceScheme() sets the interlace scheme used when writing
+the image.</p>
+<p>The format of the MagickSetInterlaceScheme method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetInterlaceScheme( MagickWand *wand,
+ const <a class="reference external" href="../api/types.html#interlacetype">InterlaceType</a> interlace_scheme );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>interlace_scheme:</dt>
+<dd>The image interlace scheme: NoInterlace, LineInterlace,
+PlaneInterlace, PartitionInterlace.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetresolution">
+<h1><a class="toc-backref" href="#id678">MagickSetResolution</a></h1>
+<div class="section" id="id409">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetResolution( MagickWand *wand, const double x_resolution,
+ const double y_resolution );
+</pre>
+</div>
+<div class="section" id="id410">
+<h2>Description</h2>
+<p>MagickSetResolution() sets the resolution (density) of the magick wand.
+Set it before you read an EPS, PDF, or Postscript file in order to
+influence the size of the returned image, or after an image has already
+been created to influence the rendered image size when used with
+typesetting software.</p>
+<p>Also see MagickSetResolutionUnits() which specifies the units to use for
+the image resolution.</p>
+<p>The format of the MagickSetResolution method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetResolution( MagickWand *wand, const double x_resolution,
+ const double y_resolution );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>x_resolution:</dt>
+<dd>The horizontal resolution</dd>
+<dt>y_resolution:</dt>
+<dd>The vertical reesolution</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetresolutionunits">
+<h1><a class="toc-backref" href="#id679">MagickSetResolutionUnits</a></h1>
+<div class="section" id="id411">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetResolutionUnits( MagickWand *wand, const <a class="reference external" href="../api/types.html#resolutiontype">ResolutionType</a> units );
+</pre>
+</div>
+<div class="section" id="id412">
+<h2>Description</h2>
+<p>MagickSetResolutionUnits() sets the resolution units of the magick wand.
+It should be used in conjunction with MagickSetResolution().
+This method works both before and after an image has been read.</p>
+<p>Also see MagickSetImageUnits() which specifies the units which apply to
+the image resolution setting after an image has been read.</p>
+<p>The format of the MagickSetResolutionUnits method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetResolutionUnits( MagickWand *wand, const <a class="reference external" href="../api/types.html#resolutiontype">ResolutionType</a> units );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>units:</dt>
+<dd>The image units of resolution : Undefinedresolution,
+PixelsPerInchResolution, or PixelsPerCentimeterResolution.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetresourcelimit">
+<h1><a class="toc-backref" href="#id680">MagickSetResourceLimit</a></h1>
+<div class="section" id="id413">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetResourceLimit( const <a class="reference external" href="../api/types.html#resourcetype">ResourceType</a> type, const unsigned long *limit );
+</pre>
+</div>
+<div class="section" id="id414">
+<h2>Description</h2>
+<p>MagickSetResourceLimit() sets the limit for a particular resource in
+megabytes.</p>
+<p>The format of the MagickSetResourceLimit method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetResourceLimit( const <a class="reference external" href="../api/types.html#resourcetype">ResourceType</a> type, const unsigned long *limit );
+</pre>
+<dl class="docutils">
+<dt>type:</dt>
+<dd>The type of resource: DiskResource, FileResource, MapResource,
+MemoryResource, PixelsResource, ThreadsResource, WidthResource,
+HeightResource.</dd>
+</dl>
+<p>o The maximum limit for the resource.</p>
+</div>
+</div>
+<div class="section" id="magicksetsamplingfactors">
+<h1><a class="toc-backref" href="#id681">MagickSetSamplingFactors</a></h1>
+<div class="section" id="id415">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetSamplingFactors( MagickWand *wand, const unsigned long number_factors,
+ const double *sampling_factors );
+</pre>
+</div>
+<div class="section" id="id416">
+<h2>Description</h2>
+<p>MagickSetSamplingFactors() sets the image sampling factors.</p>
+<p>The format of the MagickSetSamplingFactors method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetSamplingFactors( MagickWand *wand, const unsigned long number_factors,
+ const double *sampling_factors );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>number_factoes:</dt>
+<dd>The number of factors.</dd>
+<dt>sampling_factors:</dt>
+<dd>An array of doubles representing the sampling factor
+for each color component (in RGB order).</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetsize">
+<h1><a class="toc-backref" href="#id682">MagickSetSize</a></h1>
+<div class="section" id="id417">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetSize( MagickWand *wand, const unsigned long columns,
+ const unsigned long rows );
+</pre>
+</div>
+<div class="section" id="id418">
+<h2>Description</h2>
+<p>MagickSetSize() sets the size of the magick wand. Set it before you
+read a raw image format such as RGB, GRAY, or CMYK.</p>
+<p>The format of the MagickSetSize method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetSize( MagickWand *wand, const unsigned long columns,
+ const unsigned long rows );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>columns:</dt>
+<dd>The width in pixels.</dd>
+<dt>height:</dt>
+<dd>The height in pixels.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetimagewhitepoint">
+<h1><a class="toc-backref" href="#id683">MagickSetImageWhitePoint</a></h1>
+<div class="section" id="id419">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetImageWhitePoint( MagickWand *wand, const double x, const double y );
+</pre>
+</div>
+<div class="section" id="id420">
+<h2>Description</h2>
+<p>MagickSetImageWhitePoint() sets the image chromaticity white point.</p>
+<p>The format of the MagickSetImageWhitePoint method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetImageWhitePoint( MagickWand *wand, const double x, const double y );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>x:</dt>
+<dd>The white x-point.</dd>
+<dt>y:</dt>
+<dd>The white y-point.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksetpassphrase">
+<h1><a class="toc-backref" href="#id684">MagickSetPassphrase</a></h1>
+<div class="section" id="id421">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSetPassphrase( MagickWand *wand, const char *passphrase );
+</pre>
+</div>
+<div class="section" id="id422">
+<h2>Description</h2>
+<p>MagickSetPassphrase() sets the passphrase.</p>
+<p>The format of the MagickSetPassphrase method is:</p>
+<pre class="literal-block">
+unsigned int MagickSetPassphrase( MagickWand *wand, const char *passphrase );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>passphrase:</dt>
+<dd>The passphrase.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksharpenimage">
+<h1><a class="toc-backref" href="#id685">MagickSharpenImage</a></h1>
+<div class="section" id="id423">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSharpenImage( MagickWand *wand, const double radius, const double sigma );
+</pre>
+</div>
+<div class="section" id="id424">
+<h2>Description</h2>
+<p>MagickSharpenImage() sharpens an image. We convolve the image with a Gaussian
+operator of the given radius and standard deviation (sigma).
+For reasonable results, the radius should be larger than sigma. Use a
+radius of 0 and SharpenImage() selects a suitable radius for you.</p>
+<p>The format of the MagickSharpenImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickSharpenImage( MagickWand *wand, const double radius, const double sigma );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>radius:</dt>
+<dd>The radius of the Gaussian, in pixels, not counting the center
+pixel.</dd>
+<dt>sigma:</dt>
+<dd>The standard deviation of the Gaussian, in pixels.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickshaveimage">
+<h1><a class="toc-backref" href="#id686">MagickShaveImage</a></h1>
+<div class="section" id="id425">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickShaveImage( MagickWand *wand, const unsigned long columns,
+ const unsigned long rows );
+</pre>
+</div>
+<div class="section" id="id426">
+<h2>Description</h2>
+<p>MagickShaveImage() shaves pixels from the image edges. It allocates the
+memory necessary for the new Image structure and returns a pointer to the
+new image.</p>
+<p>The format of the MagickShaveImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickShaveImage( MagickWand *wand, const unsigned long columns,
+ const unsigned long rows );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>columns:</dt>
+<dd>The number of columns in the scaled image.</dd>
+<dt>rows:</dt>
+<dd>The number of rows in the scaled image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickshearimage">
+<h1><a class="toc-backref" href="#id687">MagickShearImage</a></h1>
+<div class="section" id="id427">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickShearImage( MagickWand *wand, const PixelWand *background,
+ const double x_shear, onst double y_shear );
+</pre>
+</div>
+<div class="section" id="id428">
+<h2>Description</h2>
+<p>MagickShearImage() slides one edge of an image along the X or Y axis,
+creating a parallelogram. An X direction shear slides an edge along the X
+axis, while a Y direction shear slides an edge along the Y axis. The amount
+of the shear is controlled by a shear angle. For X direction shears, x_shear
+is measured relative to the Y axis, and similarly, for Y direction shears
+y_shear is measured relative to the X axis. Empty triangles left over from
+shearing the image are filled with the background color.</p>
+<p>The format of the MagickShearImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickShearImage( MagickWand *wand, const PixelWand *background,
+ const double x_shear, onst double y_shear );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>background:</dt>
+<dd>The background pixel wand.</dd>
+<dt>x_shear:</dt>
+<dd>The number of degrees to shear the image.</dd>
+<dt>y_shear:</dt>
+<dd>The number of degrees to shear the image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksolarizeimage">
+<h1><a class="toc-backref" href="#id688">MagickSolarizeImage</a></h1>
+<div class="section" id="id429">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSolarizeImage( MagickWand *wand, const double threshold );
+</pre>
+</div>
+<div class="section" id="id430">
+<h2>Description</h2>
+<p>MagickSolarizeImage() applies a special effect to the image, similar to the
+effect achieved in a photo darkroom by selectively exposing areas of photo
+sensitive paper to light. Threshold ranges from 0 to MaxRGB and is a
+measure of the extent of the solarization.</p>
+<p>The format of the MagickSolarizeImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickSolarizeImage( MagickWand *wand, const double threshold );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>threshold:</dt>
+<dd>Define the extent of the solarization.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickspreadimage">
+<h1><a class="toc-backref" href="#id689">MagickSpreadImage</a></h1>
+<div class="section" id="id431">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSpreadImage( MagickWand *wand, const double radius );
+</pre>
+</div>
+<div class="section" id="id432">
+<h2>Description</h2>
+<p>MagickSpreadImage() is a special effects method that randomly displaces each
+pixel in a block defined by the radius parameter.</p>
+<p>The format of the MagickSpreadImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickSpreadImage( MagickWand *wand, const double radius );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>radius:</dt>
+<dd>Choose a random pixel in a neighborhood of this extent.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicksteganoimage">
+<h1><a class="toc-backref" href="#id690">MagickSteganoImage</a></h1>
+<div class="section" id="id433">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *MagickSteganoImage( MagickWand *wand, const MagickWand *watermark_wand,
+ const long offset );
+</pre>
+</div>
+<div class="section" id="id434">
+<h2>Description</h2>
+<p>Use MagickSteganoImage() to hide a digital watermark within the image.
+Recover the hidden watermark later to prove that the authenticity of
+an image. Offset defines the start position within the image to hide
+the watermark.</p>
+<p>The format of the MagickSteganoImage method is:</p>
+<pre class="literal-block">
+MagickWand *MagickSteganoImage( MagickWand *wand, const MagickWand *watermark_wand,
+ const long offset );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>watermark_wand:</dt>
+<dd>The watermark wand.</dd>
+<dt>offset:</dt>
+<dd>Start hiding at this offset into the image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickstereoimage">
+<h1><a class="toc-backref" href="#id691">MagickStereoImage</a></h1>
+<div class="section" id="id435">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *MagickStereoImage( MagickWand *wand, const MagickWand *offset_wand );
+</pre>
+</div>
+<div class="section" id="id436">
+<h2>Description</h2>
+<p>MagickStereoImage() composites two images and produces a single image that
+is the composite of a left and right image of a stereo pair</p>
+<p>The format of the MagickStereoImage method is:</p>
+<pre class="literal-block">
+MagickWand *MagickStereoImage( MagickWand *wand, const MagickWand *offset_wand );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>offset_wand:</dt>
+<dd>Another image wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickstripimage">
+<h1><a class="toc-backref" href="#id692">MagickStripImage</a></h1>
+<div class="section" id="id437">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickStripImage( MagickWand *wand );
+</pre>
+</div>
+<div class="section" id="id438">
+<h2>Description</h2>
+<p>MagickStripImage() removes all profiles and text attributes from the image.</p>
+<p>The format of the MagickStripImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickStripImage( MagickWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickswirlimage">
+<h1><a class="toc-backref" href="#id693">MagickSwirlImage</a></h1>
+<div class="section" id="id439">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickSwirlImage( MagickWand *wand, const double degrees );
+</pre>
+</div>
+<div class="section" id="id440">
+<h2>Description</h2>
+<p>MagickSwirlImage() swirls the pixels about the center of the image, where
+degrees indicates the sweep of the arc through which each pixel is moved.
+You get a more dramatic effect as the degrees move from 1 to 360.</p>
+<p>The format of the MagickSwirlImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickSwirlImage( MagickWand *wand, const double degrees );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>degrees:</dt>
+<dd>Define the tightness of the swirling effect.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicktextureimage">
+<h1><a class="toc-backref" href="#id694">MagickTextureImage</a></h1>
+<div class="section" id="id441">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *MagickTextureImage( MagickWand *wand, const MagickWand *texture_wand );
+</pre>
+</div>
+<div class="section" id="id442">
+<h2>Description</h2>
+<p>MagickTextureImage() repeatedly tiles the texture image across and down the
+image canvas.</p>
+<p>The format of the MagickTextureImage method is:</p>
+<pre class="literal-block">
+MagickWand *MagickTextureImage( MagickWand *wand, const MagickWand *texture_wand );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>texture_wand:</dt>
+<dd>The texture wand</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickthresholdimage">
+<h1><a class="toc-backref" href="#id695">MagickThresholdImage</a></h1>
+<div class="section" id="id443">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickThresholdImage( MagickWand *wand, const double threshold );
+</pre>
+</div>
+<div class="section" id="id444">
+<h2>Description</h2>
+<p>MagickThresholdImage() changes the value of individual pixels based on
+the intensity of each pixel compared to threshold. The result is a
+high-contrast, two color image.</p>
+<p>The format of the MagickThresholdImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickThresholdImage( MagickWand *wand, const double threshold );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>threshold:</dt>
+<dd>Define the threshold value.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickthresholdimagechannel">
+<h1><a class="toc-backref" href="#id696">MagickThresholdImageChannel</a></h1>
+<div class="section" id="id445">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickThresholdImageChannel( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const double threshold );
+</pre>
+</div>
+<div class="section" id="id446">
+<h2>Description</h2>
+<p>MagickThresholdImageChannel() changes the value of individual pixel
+component based on the intensity of each pixel compared to threshold. The
+result is a high-contrast, two color image.</p>
+<p>The format of the MagickThresholdImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickThresholdImageChannel( MagickWand *wand, const <a class="reference external" href="../api/types.html#channeltype">ChannelType</a> channel,
+ const double threshold );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>channel:</dt>
+<dd>The channel.</dd>
+<dt>threshold:</dt>
+<dd>Define the threshold value.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicktintimage">
+<h1><a class="toc-backref" href="#id697">MagickTintImage</a></h1>
+<div class="section" id="id447">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickTintImage( MagickWand *wand, const PixelWand *tint,
+ const PixelWand *opacity );
+</pre>
+</div>
+<div class="section" id="id448">
+<h2>Description</h2>
+<p>MagickTintImage() applies a color vector to each pixel in the image. The
+length of the vector is 0 for black and white and at its maximum for the
+midtones. The vector weighting function is
+f(x)=(1-(4.0*((x-0.5)*(x-0.5)))).</p>
+<p>The format of the MagickTintImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickTintImage( MagickWand *wand, const PixelWand *tint,
+ const PixelWand *opacity );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>tint:</dt>
+<dd>The tint pixel wand.</dd>
+<dt>opacity:</dt>
+<dd>The opacity pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicktransformimage">
+<h1><a class="toc-backref" href="#id698">MagickTransformImage</a></h1>
+<div class="section" id="id449">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand *MagickTransformImage( MagickWand *wand, const char *crop,
+ const char *geometry );
+</pre>
+</div>
+<div class="section" id="id450">
+<h2>Description</h2>
+<p>MagickTransformImage() is a convenience method that behaves like
+MagickResizeImage() or MagickCropImage() but accepts scaling and/or cropping
+information as a region geometry specification. If the operation fails, the
+original image handle is returned.</p>
+<p>The format of the MagickTransformImage method is:</p>
+<pre class="literal-block">
+MagickWand *MagickTransformImage( MagickWand *wand, const char *crop,
+ const char *geometry );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>crop:</dt>
+<dd>A crop geometry string. This geometry defines a subregion of the
+image to crop.</dd>
+<dt>geometry:</dt>
+<dd>An image geometry string. This geometry defines the final
+size of the image.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicktransparentimage">
+<h1><a class="toc-backref" href="#id699">MagickTransparentImage</a></h1>
+<div class="section" id="id451">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickTransparentImage( MagickWand *wand, const PixelWand *target,
+ const unsigned int opacity, const double fuzz );
+</pre>
+</div>
+<div class="section" id="id452">
+<h2>Description</h2>
+<p>MagickTransparentImage() changes any pixel that matches color with the color
+defined by fill.</p>
+<p>The format of the MagickTransparentImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickTransparentImage( MagickWand *wand, const PixelWand *target,
+ const unsigned int opacity, const double fuzz );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>target:</dt>
+<dd>Change this target color to specified opacity value within
+the image.</dd>
+<dt>opacity:</dt>
+<dd>The replacement opacity value.</dd>
+<dt>fuzz:</dt>
+<dd>By default target must match a particular pixel color
+exactly. However, in many cases two colors may differ by a small amount.
+The fuzz member of image defines how much tolerance is acceptable to
+consider two colors as the same. For example, set fuzz to 10 and the
+color red at intensities of 100 and 102 respectively are now interpreted
+as the same color for the purposes of the floodfill.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magicktrimimage">
+<h1><a class="toc-backref" href="#id700">MagickTrimImage</a></h1>
+<div class="section" id="id453">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickTrimImage( MagickWand *wand, const double fuzz );
+</pre>
+</div>
+<div class="section" id="id454">
+<h2>Description</h2>
+<p>MagickTrimImage() remove edges that are the background color from the image.</p>
+<p>The format of the MagickTrimImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickTrimImage( MagickWand *wand, const double fuzz );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>fuzz:</dt>
+<dd>By default target must match a particular pixel color
+exactly. However, in many cases two colors may differ by a small amount.
+The fuzz member of image defines how much tolerance is acceptable to
+consider two colors as the same. For example, set fuzz to 10 and the
+color red at intensities of 100 and 102 respectively are now interpreted
+as the same color for the purposes of the floodfill.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickunsharpmaskimage">
+<h1><a class="toc-backref" href="#id701">MagickUnsharpMaskImage</a></h1>
+<div class="section" id="id455">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickUnsharpMaskImage( MagickWand *wand, const double radius, const double sigma,
+ const double amount, const double threshold );
+</pre>
+</div>
+<div class="section" id="id456">
+<h2>Description</h2>
+<p>MagickUnsharpMaskImage() sharpens an image. We convolve the image with a
+Gaussian operator of the given radius and standard deviation (sigma).
+For reasonable results, radius should be larger than sigma. Use a radius
+of 0 and UnsharpMaskImage() selects a suitable radius for you.</p>
+<p>The format of the MagickUnsharpMaskImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickUnsharpMaskImage( MagickWand *wand, const double radius, const double sigma,
+ const double amount, const double threshold );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>radius:</dt>
+<dd>The radius of the Gaussian, in pixels, not counting the center
+pixel.</dd>
+<dt>sigma:</dt>
+<dd>The standard deviation of the Gaussian, in pixels.</dd>
+<dt>amount:</dt>
+<dd>The percentage of the difference between the original and the
+blur image that is added back into the original.</dd>
+<dt>threshold:</dt>
+<dd>The threshold in pixels needed to apply the diffence amount.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickwaveimage">
+<h1><a class="toc-backref" href="#id702">MagickWaveImage</a></h1>
+<div class="section" id="id457">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickWaveImage( MagickWand *wand, const double amplitude,
+ const double wave_length );
+</pre>
+</div>
+<div class="section" id="id458">
+<h2>Description</h2>
+<p>MagickWaveImage() creates a "ripple" effect in the image by shifting
+the pixels vertically along a sine wave whose amplitude and wavelength
+is specified by the given parameters.</p>
+<p>The format of the MagickWaveImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickWaveImage( MagickWand *wand, const double amplitude,
+ const double wave_length );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>amplitude, wave_length:</dt>
+<dd>Define the amplitude and wave length of the
+sine wave.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickwhitethresholdimage">
+<h1><a class="toc-backref" href="#id703">MagickWhiteThresholdImage</a></h1>
+<div class="section" id="id459">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickWhiteThresholdImage( MagickWand *wand, const PixelWand *threshold );
+</pre>
+</div>
+<div class="section" id="id460">
+<h2>Description</h2>
+<p>MagickWhiteThresholdImage() is like ThresholdImage() but forces all pixels
+above the threshold into white while leaving all pixels below the threshold
+unchanged.</p>
+<p>The format of the MagickWhiteThresholdImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickWhiteThresholdImage( MagickWand *wand, const PixelWand *threshold );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>threshold:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickwriteimage">
+<h1><a class="toc-backref" href="#id704">MagickWriteImage</a></h1>
+<div class="section" id="id461">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickWriteImage( MagickWand *wand, const char *filename );
+</pre>
+</div>
+<div class="section" id="id462">
+<h2>Description</h2>
+<p>MagickWriteImage() writes an image.</p>
+<p>The format of the MagickWriteImage method is:</p>
+<pre class="literal-block">
+unsigned int MagickWriteImage( MagickWand *wand, const char *filename );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>filename:</dt>
+<dd>The image filename.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickwriteimagesfile">
+<h1><a class="toc-backref" href="#id705">MagickWriteImagesFile</a></h1>
+<div class="section" id="id463">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickWriteImagesFile( MagickWand *wand, FILE *file, const unsigned int adjoin );
+</pre>
+</div>
+<div class="section" id="id464">
+<h2>Description</h2>
+<p>MagickWriteImagesFile() writes an image or image sequence to a stdio
+FILE handle. This may be used to append an encoded image to an already
+existing appended image sequence if the file seek position is at the end
+of an existing file.</p>
+<p>The format of the MagickWriteImages method is:</p>
+<pre class="literal-block">
+unsigned int MagickWriteImagesFile( MagickWand *wand, FILE *file, const unsigned int adjoin );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>file:</dt>
+<dd>The open (and positioned) file handle.</dd>
+<dt>adjoin:</dt>
+<dd>join images into a single multi-image file.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickwriteimageblob">
+<h1><a class="toc-backref" href="#id706">MagickWriteImageBlob</a></h1>
+<div class="section" id="id465">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned char *MagickWriteImageBlob( MagickWand *wand, size_t *length );
+</pre>
+</div>
+<div class="section" id="id466">
+<h2>Description</h2>
+<p>MagickWriteImageBlob() implements direct to memory image formats. It
+returns the image as a blob (a formatted "file" in memory) and its
+length, starting from the current position in the image sequence.
+Use MagickSetImageFormat() to set the format to write to the blob
+(GIF, JPEG, PNG, etc.).</p>
+<p>Use MagickResetIterator() on the wand if it is desired to write
+a sequence from the beginning and the iterator is not currently
+at the beginning.</p>
+<p>The format of the MagickWriteImageBlob method is:</p>
+<pre class="literal-block">
+unsigned char *MagickWriteImageBlob( MagickWand *wand, size_t *length );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>length:</dt>
+<dd>The length of the blob.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickwriteimagefile">
+<h1><a class="toc-backref" href="#id707">MagickWriteImageFile</a></h1>
+<div class="section" id="id467">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickWriteImageFile( MagickWand *wand, FILE *file );
+</pre>
+</div>
+<div class="section" id="id468">
+<h2>Description</h2>
+<p>MagickWriteImageFile() writes an image to an open file descriptor.</p>
+<p>The format of the MagickWandToFile method is:</p>
+<pre class="literal-block">
+unsigned int MagickWriteImageFile( MagickWand *wand, FILE *file );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>file:</dt>
+<dd>The file descriptor.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="magickwriteimages">
+<h1><a class="toc-backref" href="#id708">MagickWriteImages</a></h1>
+<div class="section" id="id469">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int MagickWriteImages( MagickWand *wand, const char *filename,
+ const unsigned int adjoin );
+</pre>
+</div>
+<div class="section" id="id470">
+<h2>Description</h2>
+<p>MagickWriteImages() writes an image or image sequence. If the wand
+represents an image sequence, then it is written starting at the first
+frame in the sequence.</p>
+<p>The format of the MagickWriteImages method is:</p>
+<pre class="literal-block">
+unsigned int MagickWriteImages( MagickWand *wand, const char *filename,
+ const unsigned int adjoin );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The magick wand.</dd>
+<dt>filename:</dt>
+<dd>The image filename.</dd>
+<dt>adjoin:</dt>
+<dd>join images into a single multi-image file.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="newmagickwand">
+<h1><a class="toc-backref" href="#id709">NewMagickWand</a></h1>
+<div class="section" id="id471">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+MagickWand NewMagickWand( void );
+</pre>
+</div>
+<div class="section" id="id472">
+<h2>Description</h2>
+<p>NewMagickWand() returns a wand required for all other methods in the API.</p>
+<p>The format of the NewMagickWand method is:</p>
+<pre class="literal-block">
+MagickWand NewMagickWand( void );
+</pre>
+</div>
+</div>
+</div>
+</body>
+</html>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="pixel-wand">
</div>
</div>
</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
+</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>pixel_wand</title>
+<link rel="stylesheet" href="../docutils-api.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="pixel-wand">
+<h1 class="title">pixel_wand</h1>
+<h2 class="subtitle" id="wand-pixel-access-interfaces">Wand pixel access interfaces</h2>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#clonepixelwand" id="id85">ClonePixelWand</a></li>
+<li><a class="reference internal" href="#clonepixelwands" id="id86">ClonePixelWands</a></li>
+<li><a class="reference internal" href="#destroypixelwand" id="id87">DestroyPixelWand</a></li>
+<li><a class="reference internal" href="#newpixelwand" id="id88">NewPixelWand</a></li>
+<li><a class="reference internal" href="#newpixelwands" id="id89">NewPixelWands</a></li>
+<li><a class="reference internal" href="#pixelgetexception" id="id90">PixelGetException</a></li>
+<li><a class="reference internal" href="#pixelgetblack" id="id91">PixelGetBlack</a></li>
+<li><a class="reference internal" href="#pixelgetblackquantum" id="id92">PixelGetBlackQuantum</a></li>
+<li><a class="reference internal" href="#pixelgetblue" id="id93">PixelGetBlue</a></li>
+<li><a class="reference internal" href="#pixelgetbluequantum" id="id94">PixelGetBlueQuantum</a></li>
+<li><a class="reference internal" href="#pixelgetcolorasstring" id="id95">PixelGetColorAsString</a></li>
+<li><a class="reference internal" href="#pixelgetcolorcount" id="id96">PixelGetColorCount</a></li>
+<li><a class="reference internal" href="#pixelgetcyan" id="id97">PixelGetCyan</a></li>
+<li><a class="reference internal" href="#pixelgetcyanquantum" id="id98">PixelGetCyanQuantum</a></li>
+<li><a class="reference internal" href="#pixelgetgreen" id="id99">PixelGetGreen</a></li>
+<li><a class="reference internal" href="#pixelgetgreenquantum" id="id100">PixelGetGreenQuantum</a></li>
+<li><a class="reference internal" href="#pixelgetmagenta" id="id101">PixelGetMagenta</a></li>
+<li><a class="reference internal" href="#pixelgetmagentaquantum" id="id102">PixelGetMagentaQuantum</a></li>
+<li><a class="reference internal" href="#pixelgetopacity" id="id103">PixelGetOpacity</a></li>
+<li><a class="reference internal" href="#pixelgetopacityquantum" id="id104">PixelGetOpacityQuantum</a></li>
+<li><a class="reference internal" href="#pixelgetred" id="id105">PixelGetRed</a></li>
+<li><a class="reference internal" href="#pixelgetredquantum" id="id106">PixelGetRedQuantum</a></li>
+<li><a class="reference internal" href="#pixelgetyellow" id="id107">PixelGetYellow</a></li>
+<li><a class="reference internal" href="#pixelgetyellowquantum" id="id108">PixelGetYellowQuantum</a></li>
+<li><a class="reference internal" href="#pixelsetblack" id="id109">PixelSetBlack</a></li>
+<li><a class="reference internal" href="#pixelsetblackquantum" id="id110">PixelSetBlackQuantum</a></li>
+<li><a class="reference internal" href="#pixelsetblue" id="id111">PixelSetBlue</a></li>
+<li><a class="reference internal" href="#pixelsetbluequantum" id="id112">PixelSetBlueQuantum</a></li>
+<li><a class="reference internal" href="#pixelsetcolor" id="id113">PixelSetColor</a></li>
+<li><a class="reference internal" href="#pixelsetcolorcount" id="id114">PixelSetColorCount</a></li>
+<li><a class="reference internal" href="#pixelsetcyan" id="id115">PixelSetCyan</a></li>
+<li><a class="reference internal" href="#pixelsetcyanquantum" id="id116">PixelSetCyanQuantum</a></li>
+<li><a class="reference internal" href="#pixelsetgreen" id="id117">PixelSetGreen</a></li>
+<li><a class="reference internal" href="#pixelsetgreenquantum" id="id118">PixelSetGreenQuantum</a></li>
+<li><a class="reference internal" href="#pixelsetmagenta" id="id119">PixelSetMagenta</a></li>
+<li><a class="reference internal" href="#pixelsetmagentaquantum" id="id120">PixelSetMagentaQuantum</a></li>
+<li><a class="reference internal" href="#pixelsetopacity" id="id121">PixelSetOpacity</a></li>
+<li><a class="reference internal" href="#pixelsetopacityquantum" id="id122">PixelSetOpacityQuantum</a></li>
+<li><a class="reference internal" href="#pixelsetquantumcolor" id="id123">PixelSetQuantumColor</a></li>
+<li><a class="reference internal" href="#pixelsetred" id="id124">PixelSetRed</a></li>
+<li><a class="reference internal" href="#pixelsetredquantum" id="id125">PixelSetRedQuantum</a></li>
+<li><a class="reference internal" href="#pixelsetyellow" id="id126">PixelSetYellow</a></li>
+<li><a class="reference internal" href="#pixelsetyellowquantum" id="id127">PixelSetYellowQuantum</a></li>
+</ul>
+</div>
+<div class="section" id="clonepixelwand">
+<h1><a class="toc-backref" href="#id85">ClonePixelWand</a></h1>
+<div class="section" id="synopsis">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+PixelWand *ClonePixelWand( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>ClonePixelWand() creates an exact copy of a PixelWand. PixelWand may not be
+a null pointer.</p>
+<p>The format of the ClonePixelWand method is:</p>
+<pre class="literal-block">
+PixelWand *ClonePixelWand( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand to clone.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="clonepixelwands">
+<h1><a class="toc-backref" href="#id86">ClonePixelWands</a></h1>
+<div class="section" id="id1">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+PixelWand ** ClonePixelWands( const PixelWand ** wands, const unsigned long number_wands );
+</pre>
+</div>
+<div class="section" id="id2">
+<h2>Description</h2>
+<p>ClonePixelWands creates a deep-copy an array of PixelWands.</p>
+<p>The format of the ClonePixelWands method is:</p>
+<pre class="literal-block">
+PixelWand ** ClonePixelWands( const PixelWand ** wands, const unsigned long number_wands );
+</pre>
+<dl class="docutils">
+<dt>wands:</dt>
+<dd>The pixel wands to clone.</dd>
+<dt>number_wands:</dt>
+<dd>The number of wands in the array</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="destroypixelwand">
+<h1><a class="toc-backref" href="#id87">DestroyPixelWand</a></h1>
+<div class="section" id="id3">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int DestroyPixelWand( PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id4">
+<h2>Description</h2>
+<p>DestroyPixelWand() deallocates resources associated with a PixelWand.</p>
+<p>The format of the DestroyPixelWand method is:</p>
+<pre class="literal-block">
+unsigned int DestroyPixelWand( PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="newpixelwand">
+<h1><a class="toc-backref" href="#id88">NewPixelWand</a></h1>
+<div class="section" id="id5">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+PixelWand NewPixelWand( void );
+</pre>
+</div>
+<div class="section" id="id6">
+<h2>Description</h2>
+<p>NewPixelWand() returns a new pixel wand.</p>
+<p>The format of the NewPixelWand method is:</p>
+<pre class="literal-block">
+PixelWand NewPixelWand( void );
+</pre>
+</div>
+</div>
+<div class="section" id="newpixelwands">
+<h1><a class="toc-backref" href="#id89">NewPixelWands</a></h1>
+<div class="section" id="id7">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+PixelWand NewPixelWands( const unsigned long number_wands );
+</pre>
+</div>
+<div class="section" id="id8">
+<h2>Description</h2>
+<p>NewPixelWands() returns an array of pixel wands.</p>
+<p>The format of the NewPixelWand method is:</p>
+<pre class="literal-block">
+PixelWand NewPixelWands( const unsigned long number_wands );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>number_wands:</dt>
+<dd>The number of wands.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetexception">
+<h1><a class="toc-backref" href="#id90">PixelGetException</a></h1>
+<div class="section" id="id9">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelGetException( PixelWand *wand, char ** description );
+</pre>
+</div>
+<div class="section" id="id10">
+<h2>Description</h2>
+<p>PixelGetException() returns the severity, reason, and description of any
+error that occurs when using the pixel wand methods.</p>
+<p>The format of the PixelGetException method is:</p>
+<pre class="literal-block">
+unsigned int PixelGetException( PixelWand *wand, char ** description );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>description:</dt>
+<dd>A description of the error.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetblack">
+<h1><a class="toc-backref" href="#id91">PixelGetBlack</a></h1>
+<div class="section" id="id11">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double PixelGetBlack( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id12">
+<h2>Description</h2>
+<p>PixelGetBlack() returns the normalized black color of the pixel wand.</p>
+<p>The format of the PixelGetBlack method is:</p>
+<pre class="literal-block">
+double PixelGetBlack( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetblackquantum">
+<h1><a class="toc-backref" href="#id92">PixelGetBlackQuantum</a></h1>
+<div class="section" id="id13">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantum">Quantum</a> PixelGetBlackQuantum( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id14">
+<h2>Description</h2>
+<p>PixelGetBlackQuantum() returns the black color of the pixel wand. The
+color is in the range of [0..MaxRGB]</p>
+<p>The format of the PixelGetBlackQuantum method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantum">Quantum</a> PixelGetBlackQuantum( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetblue">
+<h1><a class="toc-backref" href="#id93">PixelGetBlue</a></h1>
+<div class="section" id="id15">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double PixelGetBlue( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id16">
+<h2>Description</h2>
+<p>PixelGetBlue(const) returns the normalized blue color of the pixel wand.</p>
+<p>The format of the PixelGetBlue method is:</p>
+<pre class="literal-block">
+double PixelGetBlue( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetbluequantum">
+<h1><a class="toc-backref" href="#id94">PixelGetBlueQuantum</a></h1>
+<div class="section" id="id17">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantum">Quantum</a> PixelGetBlueQuantum( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id18">
+<h2>Description</h2>
+<p>PixelGetBlueQuantum(const ) returns the blue color of the pixel wand. The
+color is in the range of [0..MaxRGB]</p>
+<p>The format of the PixelGetBlueQuantum method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantum">Quantum</a> PixelGetBlueQuantum( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetcolorasstring">
+<h1><a class="toc-backref" href="#id95">PixelGetColorAsString</a></h1>
+<div class="section" id="id19">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+char *PixelGetColorAsString( PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id20">
+<h2>Description</h2>
+<p>PixelGetColorAsString() gets the color of the pixel wand.</p>
+<p>The format of the PixelGetColorAsString method is:</p>
+<pre class="literal-block">
+char *PixelGetColorAsString( PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetcolorcount">
+<h1><a class="toc-backref" href="#id96">PixelGetColorCount</a></h1>
+<div class="section" id="id21">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned long PixelGetColorCount( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id22">
+<h2>Description</h2>
+<p>PixelGetColorCount() returns the color count associated with this color.</p>
+<p>The format of the PixelGetColorCount method is:</p>
+<pre class="literal-block">
+unsigned long PixelGetColorCount( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetcyan">
+<h1><a class="toc-backref" href="#id97">PixelGetCyan</a></h1>
+<div class="section" id="id23">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double PixelGetCyan( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id24">
+<h2>Description</h2>
+<p>PixelGetCyan() returns the normalized cyan color of the pixel wand.</p>
+<p>The format of the PixelGetCyan method is:</p>
+<pre class="literal-block">
+double PixelGetCyan( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetcyanquantum">
+<h1><a class="toc-backref" href="#id98">PixelGetCyanQuantum</a></h1>
+<div class="section" id="id25">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantum">Quantum</a> PixelGetCyanQuantum( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id26">
+<h2>Description</h2>
+<p>PixelGetCyanQuantum() returns the cyan color of the pixel wand. The color
+is in the range of [0..MaxRGB]</p>
+<p>The format of the PixelGetCyanQuantum method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantum">Quantum</a> PixelGetCyanQuantum( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetgreen">
+<h1><a class="toc-backref" href="#id99">PixelGetGreen</a></h1>
+<div class="section" id="id27">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double PixelGetGreen( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id28">
+<h2>Description</h2>
+<p>PixelGetGreen(const ) returns the normalized green color of the pixel wand.</p>
+<p>The format of the PixelGetGreen method is:</p>
+<pre class="literal-block">
+double PixelGetGreen( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetgreenquantum">
+<h1><a class="toc-backref" href="#id100">PixelGetGreenQuantum</a></h1>
+<div class="section" id="id29">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantum">Quantum</a> PixelGetGreenQuantum( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id30">
+<h2>Description</h2>
+<p>PixelGetGreenQuantum(const ) returns the green color of the pixel wand. The
+color is in the range of [0..MaxRGB]</p>
+<p>The format of the PixelGetGreenQuantum method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantum">Quantum</a> PixelGetGreenQuantum( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetmagenta">
+<h1><a class="toc-backref" href="#id101">PixelGetMagenta</a></h1>
+<div class="section" id="id31">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double PixelGetMagenta( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id32">
+<h2>Description</h2>
+<p>PixelGetMagenta() returns the normalized magenta color of the pixel wand.</p>
+<p>The format of the PixelGetMagenta method is:</p>
+<pre class="literal-block">
+double PixelGetMagenta( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetmagentaquantum">
+<h1><a class="toc-backref" href="#id102">PixelGetMagentaQuantum</a></h1>
+<div class="section" id="id33">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantum">Quantum</a> PixelGetMagentaQuantum( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id34">
+<h2>Description</h2>
+<p>PixelGetMagentaQuantum() returns the magenta color of the pixel wand. The
+color is in the range of [0..MaxRGB]</p>
+<p>The format of the PixelGetMagentaQuantum method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantum">Quantum</a> PixelGetMagentaQuantum( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetopacity">
+<h1><a class="toc-backref" href="#id103">PixelGetOpacity</a></h1>
+<div class="section" id="id35">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double PixelGetOpacity( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id36">
+<h2>Description</h2>
+<p>PixelGetOpacity(const ) returns the normalized opacity color of the pixel
+wand.</p>
+<p>The format of the PixelGetOpacity method is:</p>
+<pre class="literal-block">
+double PixelGetOpacity( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetopacityquantum">
+<h1><a class="toc-backref" href="#id104">PixelGetOpacityQuantum</a></h1>
+<div class="section" id="id37">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantum">Quantum</a> PixelGetOpacityQuantum( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id38">
+<h2>Description</h2>
+<p>PixelGetOpacityQuantum(const ) returns the opacity color of the pixel wand.
+The color is in the range of [0..MaxRGB]</p>
+<p>The format of the PixelGetOpacityQuantum method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantum">Quantum</a> PixelGetOpacityQuantum( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetred">
+<h1><a class="toc-backref" href="#id105">PixelGetRed</a></h1>
+<div class="section" id="id39">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double PixelGetRed( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id40">
+<h2>Description</h2>
+<p>PixelGetRed(const ) returns the normalized red color of the pixel wand.</p>
+<p>The format of the PixelGetRed method is:</p>
+<pre class="literal-block">
+double PixelGetRed( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetredquantum">
+<h1><a class="toc-backref" href="#id106">PixelGetRedQuantum</a></h1>
+<div class="section" id="id41">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantum">Quantum</a> PixelGetRedQuantum( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id42">
+<h2>Description</h2>
+<p>PixelGetRedQuantum(const ) returns the red color of the pixel wand. The
+color is in the range of [0..MaxRGB]</p>
+<p>The format of the PixelGetRedQuantum method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantum">Quantum</a> PixelGetRedQuantum( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetyellow">
+<h1><a class="toc-backref" href="#id107">PixelGetYellow</a></h1>
+<div class="section" id="id43">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+double PixelGetYellow( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id44">
+<h2>Description</h2>
+<p>PixelGetYellow() returns the normalized yellow color of the pixel wand.</p>
+<p>The format of the PixelGetYellow method is:</p>
+<pre class="literal-block">
+double PixelGetYellow( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelgetyellowquantum">
+<h1><a class="toc-backref" href="#id108">PixelGetYellowQuantum</a></h1>
+<div class="section" id="id45">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantum">Quantum</a> PixelGetYellowQuantum( const PixelWand *wand );
+</pre>
+</div>
+<div class="section" id="id46">
+<h2>Description</h2>
+<p>PixelGetYellowQuantum() returns the yellow color of the pixel wand. The
+color is in the range of [0..MaxRGB]</p>
+<p>The format of the PixelGetYellowQuantum method is:</p>
+<pre class="literal-block">
+<a class="reference external" href="../api/types.html#quantum">Quantum</a> PixelGetYellowQuantum( const PixelWand *wand );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetblack">
+<h1><a class="toc-backref" href="#id109">PixelSetBlack</a></h1>
+<div class="section" id="id47">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetBlack( PixelWand *wand, const double black );
+</pre>
+</div>
+<div class="section" id="id48">
+<h2>Description</h2>
+<p>PixelSetBlack() sets the normalized black color of the pixel wand.</p>
+<p>The format of the PixelSetBlack method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetBlack( PixelWand *wand, const double black );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>black:</dt>
+<dd>The black color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetblackquantum">
+<h1><a class="toc-backref" href="#id110">PixelSetBlackQuantum</a></h1>
+<div class="section" id="id49">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetBlackQuantum( PixelWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> black );
+</pre>
+</div>
+<div class="section" id="id50">
+<h2>Description</h2>
+<p>PixelSetBlackQuantum() sets the black color of the pixel wand. The color
+must be in the range of [0..MaxRGB]</p>
+<p>The format of the PixelSetBlackQuantum method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetBlackQuantum( PixelWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> black );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>black:</dt>
+<dd>The black color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetblue">
+<h1><a class="toc-backref" href="#id111">PixelSetBlue</a></h1>
+<div class="section" id="id51">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetBlue( PixelWand *wand, const double blue );
+</pre>
+</div>
+<div class="section" id="id52">
+<h2>Description</h2>
+<p>PixelSetBlue() sets the normalized blue color of the pixel wand.</p>
+<p>The format of the PixelSetBlue method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetBlue( PixelWand *wand, const double blue );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>blue:</dt>
+<dd>The blue color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetbluequantum">
+<h1><a class="toc-backref" href="#id112">PixelSetBlueQuantum</a></h1>
+<div class="section" id="id53">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetBlueQuantum( PixelWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> blue );
+</pre>
+</div>
+<div class="section" id="id54">
+<h2>Description</h2>
+<p>PixelSetBlueQuantum() sets the blue color of the pixel wand. The color must
+be in the range of [0..MaxRGB]</p>
+<p>The format of the PixelSetBlueQuantum method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetBlueQuantum( PixelWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> blue );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>blue:</dt>
+<dd>The blue color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetcolor">
+<h1><a class="toc-backref" href="#id113">PixelSetColor</a></h1>
+<div class="section" id="id55">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetColor( PixelWand *wand, const char *color );
+</pre>
+</div>
+<div class="section" id="id56">
+<h2>Description</h2>
+<p>PixelSetColor() sets the color of the pixel wand with a string (e.g.
+"blue", "#0000ff", "rgb(0,0,255)", etc.).</p>
+<p>The format of the PixelSetColor method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetColor( PixelWand *wand, const char *color );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>color:</dt>
+<dd>The pixel wand color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetcolorcount">
+<h1><a class="toc-backref" href="#id114">PixelSetColorCount</a></h1>
+<div class="section" id="id57">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetColorCount( PixelWand *wand, const unsigned long count );
+</pre>
+</div>
+<div class="section" id="id58">
+<h2>Description</h2>
+<p>PixelSetColorCount() sets the color count of the pixel wand.</p>
+<p>The format of the PixelSetColorCount method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetColorCount( PixelWand *wand, const unsigned long count );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>count:</dt>
+<dd>The number of this particular color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetcyan">
+<h1><a class="toc-backref" href="#id115">PixelSetCyan</a></h1>
+<div class="section" id="id59">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetCyan( PixelWand *wand, const double cyan );
+</pre>
+</div>
+<div class="section" id="id60">
+<h2>Description</h2>
+<p>PixelSetCyan() sets the normalized cyan color of the pixel wand.</p>
+<p>The format of the PixelSetCyan method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetCyan( PixelWand *wand, const double cyan );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>cyan:</dt>
+<dd>The cyan color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetcyanquantum">
+<h1><a class="toc-backref" href="#id116">PixelSetCyanQuantum</a></h1>
+<div class="section" id="id61">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetCyanQuantum( PixelWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> cyan );
+</pre>
+</div>
+<div class="section" id="id62">
+<h2>Description</h2>
+<p>PixelSetCyanQuantum() sets the cyan color of the pixel wand. The color must
+be in the range of [0..MaxRGB]</p>
+<p>The format of the PixelSetCyanQuantum method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetCyanQuantum( PixelWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> cyan );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>cyan:</dt>
+<dd>The cyan color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetgreen">
+<h1><a class="toc-backref" href="#id117">PixelSetGreen</a></h1>
+<div class="section" id="id63">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetGreen( PixelWand *wand, const double green );
+</pre>
+</div>
+<div class="section" id="id64">
+<h2>Description</h2>
+<p>PixelSetGreen() sets the normalized green color of the pixel wand.</p>
+<p>The format of the PixelSetGreen method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetGreen( PixelWand *wand, const double green );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>green:</dt>
+<dd>The green color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetgreenquantum">
+<h1><a class="toc-backref" href="#id118">PixelSetGreenQuantum</a></h1>
+<div class="section" id="id65">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetGreenQuantum( PixelWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> green );
+</pre>
+</div>
+<div class="section" id="id66">
+<h2>Description</h2>
+<p>PixelSetGreenQuantum() sets the green color of the pixel wand. The color must
+be in the range of [0..MaxRGB]</p>
+<p>The format of the PixelSetGreenQuantum method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetGreenQuantum( PixelWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> green );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>green:</dt>
+<dd>The green color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetmagenta">
+<h1><a class="toc-backref" href="#id119">PixelSetMagenta</a></h1>
+<div class="section" id="id67">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetMagenta( PixelWand *wand, const double magenta );
+</pre>
+</div>
+<div class="section" id="id68">
+<h2>Description</h2>
+<p>PixelSetMagenta() sets the normalized magenta color of the pixel wand.</p>
+<p>The format of the PixelSetMagenta method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetMagenta( PixelWand *wand, const double magenta );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>magenta:</dt>
+<dd>The magenta color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetmagentaquantum">
+<h1><a class="toc-backref" href="#id120">PixelSetMagentaQuantum</a></h1>
+<div class="section" id="id69">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetMagentaQuantum( PixelWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> magenta );
+</pre>
+</div>
+<div class="section" id="id70">
+<h2>Description</h2>
+<p>PixelSetMagentaQuantum() sets the magenta color of the pixel wand. The
+color must be in the range of [0..MaxRGB]</p>
+<p>The format of the PixelSetMagentaQuantum method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetMagentaQuantum( PixelWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> magenta );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>magenta:</dt>
+<dd>The magenta color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetopacity">
+<h1><a class="toc-backref" href="#id121">PixelSetOpacity</a></h1>
+<div class="section" id="id71">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetOpacity( PixelWand *wand, const double opacity );
+</pre>
+</div>
+<div class="section" id="id72">
+<h2>Description</h2>
+<p>PixelSetOpacity() sets the normalized opacity color of the pixel wand.</p>
+<p>The format of the PixelSetOpacity method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetOpacity( PixelWand *wand, const double opacity );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>opacity:</dt>
+<dd>The opacity value.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetopacityquantum">
+<h1><a class="toc-backref" href="#id122">PixelSetOpacityQuantum</a></h1>
+<div class="section" id="id73">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetOpacityQuantum( PixelWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> opacity );
+</pre>
+</div>
+<div class="section" id="id74">
+<h2>Description</h2>
+<p>PixelSetOpacityQuantum() sets the opacity color of the pixel wand. The
+color must be in the range of [0..MaxRGB]</p>
+<p>The format of the PixelSetOpacityQuantum method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetOpacityQuantum( PixelWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> opacity );
+</pre>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>opacity:</dt>
+<dd>The opacity value.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetquantumcolor">
+<h1><a class="toc-backref" href="#id123">PixelSetQuantumColor</a></h1>
+<div class="section" id="id75">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+PixelSetQuantumColor( PixelWand *wand, <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *color );
+</pre>
+</div>
+<div class="section" id="id76">
+<h2>Description</h2>
+<p>PixelSetQuantumColor() sets the color of the pixel wand.</p>
+<p>The format of the PixelSetQuantumColor method is:</p>
+<pre class="literal-block">
+PixelSetQuantumColor( PixelWand *wand, <a class="reference external" href="../api/types.html#pixelpacket">PixelPacket</a> *color );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>color:</dt>
+<dd>The pixel wand color (expressed as a PixelPacket).</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetred">
+<h1><a class="toc-backref" href="#id124">PixelSetRed</a></h1>
+<div class="section" id="id77">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetRed( PixelWand *wand, const double red );
+</pre>
+</div>
+<div class="section" id="id78">
+<h2>Description</h2>
+<p>PixelSetRed() sets the normalized red color of the pixel wand.</p>
+<p>The format of the PixelSetRed method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetRed( PixelWand *wand, const double red );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>red:</dt>
+<dd>The red color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetredquantum">
+<h1><a class="toc-backref" href="#id125">PixelSetRedQuantum</a></h1>
+<div class="section" id="id79">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetRedQuantum( PixelWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> red );
+</pre>
+</div>
+<div class="section" id="id80">
+<h2>Description</h2>
+<p>PixelSetRedQuantum() sets the red color of the pixel wand. The color must
+be in the range of [0..MaxRGB]</p>
+<p>The format of the PixelSetRedQuantum method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetRedQuantum( PixelWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> red );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>red:</dt>
+<dd>The red color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetyellow">
+<h1><a class="toc-backref" href="#id126">PixelSetYellow</a></h1>
+<div class="section" id="id81">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetYellow( PixelWand *wand, const double yellow );
+</pre>
+</div>
+<div class="section" id="id82">
+<h2>Description</h2>
+<p>PixelSetYellow() sets the normalized yellow color of the pixel wand.</p>
+<p>The format of the PixelSetYellow method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetYellow( PixelWand *wand, const double yellow );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>yellow:</dt>
+<dd>The yellow color.</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="pixelsetyellowquantum">
+<h1><a class="toc-backref" href="#id127">PixelSetYellowQuantum</a></h1>
+<div class="section" id="id83">
+<h2>Synopsis</h2>
+<pre class="literal-block">
+unsigned int PixelSetYellowQuantum( PixelWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> yellow );
+</pre>
+</div>
+<div class="section" id="id84">
+<h2>Description</h2>
+<p>PixelSetYellowQuantum() sets the yellow color of the pixel wand. The color
+must be in the range of [0..MaxRGB]</p>
+<p>The format of the PixelSetYellowQuantum method is:</p>
+<pre class="literal-block">
+unsigned int PixelSetYellowQuantum( PixelWand *wand, const <a class="reference external" href="../api/types.html#quantum">Quantum</a> yellow );
+</pre>
+<p>A description of each parameter follows:</p>
+<dl class="docutils">
+<dt>wand:</dt>
+<dd>The pixel wand.</dd>
+<dt>yellow:</dt>
+<dd>The yellow color.</dd>
+</dl>
+</div>
+</div>
+</div>
+</body>
+</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.2: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
<title>GraphicsMagick Wand C API</title>
<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
</head>
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
- <input type="hidden" name="domains" value="www.graphicsmagick.org" />
- <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
- <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
-<li><a href="../index.html">Home</a></li>
-<li><a href="../project.html">Project</a></li>
-<li><a href="../download.html">Download</a></li>
-<li><a href="../README.html">Install</a></li>
-<li><a href="../Hg.html">Source</a></li>
-<li><a href="../NEWS.html">News</a> </li>
-<li><a href="../utilities.html">Utilities</a></li>
-<li><a href="../programming.html">Programming</a></li>
-<li><a href="../reference.html">Reference</a></li>
+ <li><a href="../index.html">Home</a></li>
+ <li><a href="../project.html">Project</a></li>
+ <li><a href="../download.html">Download</a></li>
+ <li><a href="../README.html">Install</a></li>
+ <li><a href="../Hg.html">Source</a></li>
+ <li><a href="../NEWS.html">News</a> </li>
+ <li><a href="../utilities.html">Utilities</a></li>
+ <li><a href="../programming.html">Programming</a></li>
+ <li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-wand-c-api">
<p>The GraphicsMagickWand-config script reproduces the options which were used to
compile the GraphicsMagick wand library. Using compatible options ensures that
your program will compile and run.</p>
-<hr class="docutils" />
-<p>Copyright © GraphicsMagick Group 2009 - 2020</p>
+</div>
+
+<hr class="docutils">
+<div class="document">
+ <p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2020<!--SPONSOR_LOGO--></p>
</div>
</body>
</html>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
+<title>GraphicsMagick Wand C API</title>
+<link rel="stylesheet" href="../docutils-articles.css" type="text/css" />
+</head>
+<body>
+
+<div class="banner">
+<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
+<span class="title">GraphicsMagick</span>
+<form action="http://www.google.com/search">
+ <input type="hidden" name="domains" value="www.graphicsmagick.org" />
+ <input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
+ <span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
+</form>
+</div>
+
+<div class="navmenu">
+<ul>
+<li><a href="../index.html">Home</a></li>
+<li><a href="../project.html">Project</a></li>
+<li><a href="../download.html">Download</a></li>
+<li><a href="../README.html">Install</a></li>
+<li><a href="../Hg.html">Source</a></li>
+<li><a href="../NEWS.html">News</a> </li>
+<li><a href="../utilities.html">Utilities</a></li>
+<li><a href="../programming.html">Programming</a></li>
+<li><a href="../reference.html">Reference</a></li>
+</ul>
+</div>
+<div class="document" id="graphicsmagick-wand-c-api">
+<h1 class="title">GraphicsMagick Wand C API</h1>
+
+<!-- -*- mode: rst -*- -->
+<!-- This text is in reStucturedText format, so it may look a bit odd. -->
+<!-- See http://docutils.sourceforge.net/rst.html for details. -->
+<p>The GraphicsMagick Wand C library provides a mid-level abstract C
+language programming interface for GraphicsMagick. It is originally
+based on the Wand API provided in ImageMagick as of August 2003.
+After August 2003, ImageMagick changed its license to one unusable by
+GraphicsMagick so this version of the Wand library is not completely
+in sync with the current ImageMagick version.</p>
+<p>The API is divided into a number of categories. While reading this
+documentation, please reference the <a class="reference external" href="../api/types.html">types</a> documentation as required:</p>
+<blockquote>
+<ul class="simple">
+<li><a class="reference external" href="drawing_wand.html">Drawing</a>: Wand vector drawing interfaces.</li>
+<li><a class="reference external" href="magick_wand.html">Magick</a>: Wand image processing interfaces</li>
+<li><a class="reference external" href="pixel_wand.html">Pixel</a>: Wand pixel access/update interfaces</li>
+</ul>
+</blockquote>
+<p>The following is a simple example program which (assuming the program
+name is <cite>rotate</cite>) is executed similar to <cite>rotate infile outfile</cite>. It
+reads from file <cite>infile</cite>, rotates the image 30 degrees using a black
+background, and writes the result to file <cite>outfile</cite>:</p>
+<pre class="literal-block">
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <wand/magick_wand.h>
+
+int main(int argc,char **argv)
+{
+ MagickWand *magick_wand;
+ MagickPassFail status = MagickPass;
+ const char *infile, *outfile;
+
+ if (argc != 3)
+ {
+ fprintf(stderr,"Usage: %s: infile outfile\n",argv[0]);
+ return 1;
+ }
+
+ infile=argv[1];
+ outfile=argv[2];
+
+ // Initialize GraphicsMagick API
+ InitializeMagick(*argv);
+
+ // Allocate Wand handle
+ magick_wand=NewMagickWand();
+
+ // Read input image file
+ if (status == MagickPass)
+ {
+ status = MagickReadImage(magick_wand,infile);
+ }
+
+ // Rotate image clockwise 30 degrees with black background
+ if (status == MagickPass)
+ {
+ PixelWand *background;
+ background=NewPixelWand();
+ PixelSetColor(background,"#000000");
+ status = MagickRotateImage(magick_wand,background,30);
+ DestroyPixelWand(background);
+ }
+
+ // Write output file
+ if (status == MagickPass)
+ {
+ status = MagickWriteImage(magick_wand,outfile);
+ }
+
+ // Diagnose any error
+ if (status != MagickPass)
+ {
+ char *description;
+ ExceptionType severity;
+
+ description=MagickGetException(magick_wand,&severity);
+ (void) fprintf(stderr,"%.1024s (severity %d)\n",
+ description,severity);
+ }
+
+ // Release Wand handle
+ DestroyMagickWand(magick_wand);
+
+ // Destroy GraphicsMagick API
+ DestroyMagick();
+
+ return (status == MagickPass ? 0 : 1);
+}
+</pre>
+<p>To compile on Unix, the command looks something like this:</p>
+<pre class="literal-block">
+gcc -o demo demo.c -O `GraphicsMagickWand-config --cppflags --ldflags --libs`
+</pre>
+<p>The GraphicsMagickWand-config script reproduces the options which were used to
+compile the GraphicsMagick wand library. Using compatible options ensures that
+your program will compile and run.</p>
+<hr class="docutils" />
+<p>Copyright © GraphicsMagick Group 2009 - 2020</p>
+</div>
+</body>
+</html>
The GraphicsMagickWand-config script reproduces the options which were used to
compile the GraphicsMagick wand library. Using compatible options ensures that
your program will compile and run.
-
--------------------------------------------------------------------------------
-
-.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN
-
-Copyright |copy| GraphicsMagick Group 2009 - 2020