This is Magick++, the object-oriented C++ API to the ImageMagick image-processing library. Please report any problems to Bob Friesenhahn <bfriesen@simple.dallas.tx.us>.
Magick++ supports an object model which is inspired by PerlMagick. Magick++ should be a bit faster than PerlMagick since it is written in a compiled language which is not parsed at run-time. This makes it suitable for Web CGI programs. 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 STL. This support allows Magick++ to be used with the Standard Template Library (STL) so that the powerful containers available (e.g. vector and list) 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.
Please be aware that until Magick++ reaches version 1.0, some minor
changes may be expected to implemented APIs based on operational experience.
1.0 API for operating on individual images and STL containers of images
This version supports all ImageMagick API operations which operate on a single image as well as providing STL container support for operating on multiple images (on any STL compatable container which supports a forward input iterator).
STL is used as the framework in which to store images. Template functions (e.g. montage) are provided to build the image lists required by ImageMagick and then invoke the list-oriented ImageMagick API. STL is quite powerful yet easy to use. At this stage Magick++ has matched what is currently available/possible using the PerlMagick API due to leveraging the power of STL.2.0 CORBA IDL based client API with server implementation for executing image processing operations on a remote (or local) computer.
This version provides a standard CORBA IDL-based API. A C++ wrapper API compatable with that developed for release 2.0 is available for use by clients. Client wrappers may also be developed for other languages (e.g. Java). A CORBA server is provided which is implemented in terms of the Magick++ API in order to satisfy client requests (which may run a different operating system than the server) . An implementation repository and object activation is used to instantiate the server upon demand to ensure that server machines are not unnecessarily burdended. The CORBA ORB employed is expected to be TAO developed by Doug Schmidt (and friends).3.0 Integration of IDL-based API with an existing open source work-queing system in order to load-share image processing tasks and the image frame and file level across a large number of machines.
This version is the culmination of the effort. By intelligently spreading work over many machines, the performance of ImageMagick is magnified. In order for this to be a success algorithms for efficient transfer of image data must be developed. Algorithms that take into account processor afinity and the CPU vs I/O tradeoff for the task to be performed must be developed. At this point in time, the queuing system to be employed has not been identified.