This is Magick++, the object-oriented C++ API to the ImageMagick
image-processing library, the most comprehensive open-source image processing
solution available. Read the release notes for Magick++.

Magick++ supports an object model which is inspired by PerlMagick.  Magick++
executes faster than PerlMagick since it is accessed from a compiled language
rather than from a scripting language. This makes it more suitable for Web CGI
programs which must start-up and execute quickly.  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 Magick++. 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.

Magick++ provides integrated support for the Standard Template Library (STL) so
that the powerful containers available (e.g. deque, vector, list, and map) can
be used to write programs similar to those possible with PERL & PerlMagick.
STL-compatable template versions of ImageMagick's list-style operations are
provided so that operations may be performed on multiple images stored in STL
containers.

Documentation

Detailed documentation are provided for all Magick++ classes, class methods,
and template functions which comprise the API.

Obtaining Magick++

Magick++ is included as part of ImageMagick source releases and may be
retrieved via ftp or Subversion.

Installation

Once you have the sources available, follow these detailed installation
instructions for UNIX and Windows.

Usage

A helper script named Magick++-config is installed under Unix which assists
with recalling compilation options required to compile and link programs which
use Magick++.  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):

     c++ `Magick++-config --cxxflags --cppflags --ldflags --libs` \
       -o example example.cpp

Windows users may get started by manually editing a project file for one of the
Magick++ demo programs.

Reporting Bugs

Please report any bugs via the Magick++ Bug Tracking System at
https://imagemagick.org/discourse-server/.
