WARNING: OBSOLETE (Krita's internal code has become much better by now) From time to time, people come up with the suggestion to use an existing imaging library with Krita, to replace our own core. This file contains a list of all libraries known to me, and a short evaluation. Perhaps, one day, we will decide to either use an existing library, or remodel our core after one of those. Of the libraries present, except for our own Krita, Vigra look like it's the best bet from a technical point of view, with Vips a good runner-up. * Krita (http://koffice.kde.org/krita) Krita contains its own 2D image library, consisting of the tile manager, the layer classes and KisPainter. We really should separate this 2d lib from the interface code, and put it in a real lib with a well-defined interface. Advantages: - Already works - Optimized for interactive work - Allows different colour models - Uses GraphicsMagick or ImageMagick for loading and saving. Disadvantages: - Does not work well with different channel depths - Not integrated with CMS - TileManager complicated and slow for pixel reading and writing. * Gimp (http://www.gimp.org) The Gimp contains a complex core that allows interactive painting of images with a channel depth of 8 bits. Advantages: - Well tested, very complete - Optimized for interactive usage Disadvantages: - Written in C. - Not readily available as a library. - Depends on glib and gtk - 8-bit only - No colour models - Has problems handling really large images * Vigra (http://kogs-www.informatik.uni-hamburg.de/~koethe/vigra/) Vigra is a C++ imaging library written by Ullrich Koetthe to demonstrate his Phd thesis on flexible image algorithms. Advantages: - Supports very large images - Supports colour models - Supports different bit depths through templating - C++ - Relatively small - Relatively well-documented Disadvantages: - License incompatible with GPL? - Not optimized for interactive use - Unsure about future development since this was a research project. * Vips (http://www.vips.ecs.soton.ac.uk/) Vips is a C library with a C++ layer. It has been designed for handling very large images, mainly in the context of research into paintings in museums like the National Gallery. It comes with a gtk2 gui. Advantages: - Handles very large images - Handles colour models - Handles different bit depths - C++ interface Disadvantages: - Not optimized for paintbox type apps (even though it is possible). - Very large. * VXL (http://vxl.sourceforge.net/) VXL is a collection of small libraries that are used for compution vision and imaging purposes in an academic setting. Advantages: - Handles very large images - C++ Disadvantages: - Not recently updated - Comes with its own core libraries that replace standard C++ - Optimized for simple rgb images. - No license at all - Badly documented * CImg (http://cimg.sourceforge.net/) CImg is a very cool, very small library that offers some extremely innovative image effects, like inpainting of damaged or noise images. Advantages: - Small - GPL - Cool stuff Disadvantages: - Everything, including GUI stuff, in one header file. - badly documented. * Gegl (http://www.gegl.org/) Gegl was intended to become the Gimp 2.0 core, but development had stalled so much that the move to Gegl didn't happen before Gimp 2.0. However, the Thawte millionaire whose name has escaped me, has promised to support gegl development financially, freeing the developer to work full-time on it. It is, more or less, an attempt to write a templated library in C++ with the help of a custom language to describe image operations. Advantages: - It's got money behind it - Small - Optimized for interactive use Disadvantages: - Not finished yet - C - Complex hack around the fact that C is a low-level language * libart_lgpl (http://www.levien.com/libart/) Libart isn't really an image library, but rather a canvas that can be used to paint images on. It is optimized for vector graphics, and is used by Karbon to render tqshapes before display. Advantages: - Raph Levien is really good at this stuff, so libart is quality Disadvantages: - C - It isn't an image library, really * java2D (http://java.sun.com/j2se/1.4.2/docs/guide/2d/index.html) Java2D is more or less complete library to write a paint app around. It offers image types, colour spaces, kernel convolutions and text. It's in Java, of course, and the free re-implementation is not done yet, and besides, is based around Cairo. Advantages: - Neat OO design - Complete Disadvantages: - Java - Not free - Has some legacy cruft. * ImageMagick/GraphicsMagick (http://imagemagick.org/, http://www.graphicsmagick.org/) GraphicsMagick is ImageMagick with a different license, and a focus on API stability. GM and IM now also differ slightly in terms of features offered. Krita used to be based around IM (which can still be seen in many places in the code). The IM core was dropped in favour of the present core because it turned out that IM was not re-entrant, making it hard to use in an interactive application. Advantages: - Mature - C++ interface - Full-featured - RGB and CMYK (but not more) - License compatible with Krita - Under active development Disadvantages: - Bit-depth a compile-time option - Not re-entrant: not optimized for interactive use. * Paintlib2 (http://www.paintlib.de/paintlib/) A portable (windows/Linux) library for image loading, manipulation and saving. The same kind of thing as IM/GM, but not quite as mature. Advantages: Disadvantages: - No support for larger bit depths per channel - Windows (bmp) centric - Development seems to have stopped in 2000 * Antigrain (http://www.antigrain.com/) Antigrain is a graphics lib that specializes in high-quality anti-aliasing. It can be useful to mine for algorithms, but is mainly a library to render vector data to bitmaps, just like libart or cairo. Advantages: - High quality algorithms - Completely free license. - Colour-space agnostic Disadvantages: - Not a complete 2D library - self-admittedly complex and hard to use. - No support for greater bit-depths. * The Visualization Toolkit (VTK, http://public.kitware.com/VTK/) A very big C++ library for 2d and 3d image processing and visualisation. It's too big to easily evaluate for me. Advantages - It is used in other Qt applications, like Julius - Probably very good Disadvantages - The book is very expensive - Uses its own make equivalent, CMake - Very large * Java Advanced Imaging