summaryrefslogtreecommitdiffstats
path: root/debian/imlib/imlib-1.9.15/doc
diff options
context:
space:
mode:
Diffstat (limited to 'debian/imlib/imlib-1.9.15/doc')
-rw-r--r--debian/imlib/imlib-1.9.15/doc/Makefile.am9
-rw-r--r--debian/imlib/imlib-1.9.15/doc/Makefile.in321
-rw-r--r--debian/imlib/imlib-1.9.15/doc/bg.gifbin0 -> 16684 bytes
-rw-r--r--debian/imlib/imlib-1.9.15/doc/border_diag.gifbin0 -> 1522 bytes
-rw-r--r--debian/imlib/imlib-1.9.15/doc/border_eg1.gifbin0 -> 1653 bytes
-rw-r--r--debian/imlib/imlib-1.9.15/doc/border_eg2.gifbin0 -> 2516 bytes
-rw-r--r--debian/imlib/imlib-1.9.15/doc/border_eg3.gifbin0 -> 2478 bytes
-rw-r--r--debian/imlib/imlib-1.9.15/doc/curve1.gifbin0 -> 5899 bytes
-rw-r--r--debian/imlib/imlib-1.9.15/doc/curve2.gifbin0 -> 5982 bytes
-rw-r--r--debian/imlib/imlib-1.9.15/doc/imlib.gifbin0 -> 37300 bytes
-rw-r--r--debian/imlib/imlib-1.9.15/doc/index.html1547
11 files changed, 1877 insertions, 0 deletions
diff --git a/debian/imlib/imlib-1.9.15/doc/Makefile.am b/debian/imlib/imlib-1.9.15/doc/Makefile.am
new file mode 100644
index 00000000..ac375b39
--- /dev/null
+++ b/debian/imlib/imlib-1.9.15/doc/Makefile.am
@@ -0,0 +1,9 @@
+EXTRA_DIST = bg.gif \
+ border_diag.gif \
+ border_eg1.gif \
+ border_eg2.gif \
+ border_eg3.gif \
+ curve1.gif \
+ curve2.gif \
+ imlib.gif \
+ index.html
diff --git a/debian/imlib/imlib-1.9.15/doc/Makefile.in b/debian/imlib/imlib-1.9.15/doc/Makefile.in
new file mode 100644
index 00000000..cbc5d0a2
--- /dev/null
+++ b/debian/imlib/imlib-1.9.15/doc/Makefile.in
@@ -0,0 +1,321 @@
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DYNAMIC_MODULES_WORK_FALSE = @DYNAMIC_MODULES_WORK_FALSE@
+DYNAMIC_MODULES_WORK_TRUE = @DYNAMIC_MODULES_WORK_TRUE@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GDK_IMLIB = @GDK_IMLIB@
+GDK_SUPPORT_LIBS = @GDK_SUPPORT_LIBS@
+GIFLIBS = @GIFLIBS@
+GMODULE_FLAGS = @GMODULE_FLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_CONFIG = @GTK_CONFIG@
+GTK_LIBS = @GTK_LIBS@
+GX_LIBS = @GX_LIBS@
+HAVE_GIF_FALSE = @HAVE_GIF_FALSE@
+HAVE_GIF_TRUE = @HAVE_GIF_TRUE@
+HAVE_JPEG_FALSE = @HAVE_JPEG_FALSE@
+HAVE_JPEG_TRUE = @HAVE_JPEG_TRUE@
+HAVE_LIBPNG = @HAVE_LIBPNG@
+HAVE_PNG_FALSE = @HAVE_PNG_FALSE@
+HAVE_PNG_TRUE = @HAVE_PNG_TRUE@
+HAVE_TIFF_FALSE = @HAVE_TIFF_FALSE@
+HAVE_TIFF_TRUE = @HAVE_TIFF_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JPEGLIBS = @JPEGLIBS@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNGLIBS = @PNGLIBS@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SUPPORT_LIBS = @SUPPORT_LIBS@
+TIFFLIBS = @TIFFLIBS@
+VERSION = @VERSION@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+EXTRA_DIST = bg.gif \
+ border_diag.gif \
+ border_eg1.gif \
+ border_eg2.gif \
+ border_eg3.gif \
+ curve1.gif \
+ curve2.gif \
+ imlib.gif \
+ index.html
+
+subdir = doc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+DIST_SOURCES =
+DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/Makefile
+Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkinstalldirs) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+ uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/debian/imlib/imlib-1.9.15/doc/bg.gif b/debian/imlib/imlib-1.9.15/doc/bg.gif
new file mode 100644
index 00000000..44780392
--- /dev/null
+++ b/debian/imlib/imlib-1.9.15/doc/bg.gif
Binary files differ
diff --git a/debian/imlib/imlib-1.9.15/doc/border_diag.gif b/debian/imlib/imlib-1.9.15/doc/border_diag.gif
new file mode 100644
index 00000000..b011aecc
--- /dev/null
+++ b/debian/imlib/imlib-1.9.15/doc/border_diag.gif
Binary files differ
diff --git a/debian/imlib/imlib-1.9.15/doc/border_eg1.gif b/debian/imlib/imlib-1.9.15/doc/border_eg1.gif
new file mode 100644
index 00000000..1c02012d
--- /dev/null
+++ b/debian/imlib/imlib-1.9.15/doc/border_eg1.gif
Binary files differ
diff --git a/debian/imlib/imlib-1.9.15/doc/border_eg2.gif b/debian/imlib/imlib-1.9.15/doc/border_eg2.gif
new file mode 100644
index 00000000..011e1e47
--- /dev/null
+++ b/debian/imlib/imlib-1.9.15/doc/border_eg2.gif
Binary files differ
diff --git a/debian/imlib/imlib-1.9.15/doc/border_eg3.gif b/debian/imlib/imlib-1.9.15/doc/border_eg3.gif
new file mode 100644
index 00000000..49620d35
--- /dev/null
+++ b/debian/imlib/imlib-1.9.15/doc/border_eg3.gif
Binary files differ
diff --git a/debian/imlib/imlib-1.9.15/doc/curve1.gif b/debian/imlib/imlib-1.9.15/doc/curve1.gif
new file mode 100644
index 00000000..11868751
--- /dev/null
+++ b/debian/imlib/imlib-1.9.15/doc/curve1.gif
Binary files differ
diff --git a/debian/imlib/imlib-1.9.15/doc/curve2.gif b/debian/imlib/imlib-1.9.15/doc/curve2.gif
new file mode 100644
index 00000000..8bcd4f48
--- /dev/null
+++ b/debian/imlib/imlib-1.9.15/doc/curve2.gif
Binary files differ
diff --git a/debian/imlib/imlib-1.9.15/doc/imlib.gif b/debian/imlib/imlib-1.9.15/doc/imlib.gif
new file mode 100644
index 00000000..1b0d0846
--- /dev/null
+++ b/debian/imlib/imlib-1.9.15/doc/imlib.gif
Binary files differ
diff --git a/debian/imlib/imlib-1.9.15/doc/index.html b/debian/imlib/imlib-1.9.15/doc/index.html
new file mode 100644
index 00000000..f2182fe0
--- /dev/null
+++ b/debian/imlib/imlib-1.9.15/doc/index.html
@@ -0,0 +1,1547 @@
+<html>
+<head><title>
+Imlib Programmers Guide
+</title></head>
+<body
+background=bg.gif
+bgcolor=#c0c0b0
+text=#000000
+link=#0000aa
+vlink=#000088
+alink=#ffff00
+>
+<font face=helvetica size=3>
+<center><img src=imlib.gif alt="Imlib"></center>
+<center><b><font color=#ffffff size=6>The Imlib Programmers Guide</font></b></center>
+<p>
+<b>What is Imlib?</b><br>
+Imlib is a general Image loading and rendering library designed to make the
+task of loading images, and obtaining X-Windows drawables a simple task, as
+well as a quick one. It also aims to provide simple manipulation routines
+that might be desired for common operations.
+<p>
+<b>Why use Imlib?</b><br>
+Imlib is display depth independent. It will load images and work in 24 bit
+internally, dithering, re-mapping or whatever is needed to generate X
+drawables ready for use on the display by programs. It can also handle
+rescaling images to different sizes very quickly, is configurable to be
+"kind" to the colormap on 8-bit displays, generate transparencies, load more
+than one image format (in fact Imlib will load any image format), and handle
+intelligent caching for naive programs.
+<p>
+<b>So what are its features?</b><br>
+<ul>
+<li>
+If compiled fully, Imlib can, without the help of any other applications,
+load PPM, PGM, TIFF, PNG, XPM, JPEG and EIM format images and preserve their
+transparency characteristics. If Imlib does not natively (native and foreign
+formats will be discussed later), Imlib can call upon a set of tools on the
+system to convert the image into a format Imlib can understand - thus
+widening its range of formats to any format that another utility supports.
+Currently Imlib supports both Imagemagick and the PBMPLUS utilities to do
+this. This loading is slower, but it means that Imlib does not refuse to
+load an image just because it does not know its format.
+<li>
+Imlib has image caches that allow the programmer to write naive code.
+Images are loaded and cached. If an image is in the cache, it will not be
+loaded again, but merely referenced from the cache. This can make naive
+programs work surprisingly fast.
+<li>
+Imlib can rescale an image to any size (limit 32767 x 32767 pixels). This
+means small icons can be expanded in size via Imlib, or large images reduced
+to small thumbnails with a single function call.
+<li>
+Imlib has the ability to do gamma, brightness, contrast or arbitrary curve
+mapping of images to improve their visibility, or to modify their appearance.
+This allows for gamma correction, white-point correction and other advanced
+features all in software, without any need for this in hardware. It also
+allows the use of greyscale image templates to have their R, G and B
+channels modified via mapping tables to be colorized. This can allow for
+interfaces to use greyscale templates and let the user modify the color
+mapping for a color scheme.
+<li>
+Imlib can do basic Image modifications (flip and rotate by 90 degrees),
+which may be desired.
+<li>
+Imlib is highly optimized to give best results wherever possible at high
+speeds. It has many options to hike up its rendering speed depending on what
+your X Server and hardware setup can handle.
+<li>
+Imlib handles many display depths. It will work on monochrome, 2, 3, 4 ,5 ,6
+7, and 8 bit pseudocolor and static color displays. It also works in 15 bit,
+16 bit (555 and 565) displays, and 24 bit displays. If the display is
+pseudocolor, Imlib will remap the image to a palette. Imlib has a config
+file - a system and a user one - the user one taking preference over the
+system config. In this The user, or system administrator defines a palette
+file for Imlib to use. This file is a list of red , green and blue values to
+be used as a color set for Imlib to map to in pseudocolor. This list can be
+as large, or as small as desired (from 2 to 256 entries). By default Imlib
+comes with a table of about 40 entries, specifically chosen to contain
+colors commonly used in images and displays, rather than the more simplistic
+colorcube approach. This file can be edited, with entries taken
+out or added as desired. Imlib by default will dither using this colorset,
+if in 8 bit or less. It does not allocate a private colormap, but merely
+takes what colors it can get and compensates for this. Dithering can be
+turned off if it is not desired, or if extra speed is needed. Imlib will
+also seamlessly handle 15, 16 and 24 bits (with an optional High Quality
+mode for 15 and 16 bpp where Imlib will even dither in these modes to make
+smooth gradients look perfectly smooth). The end result is that images look
+as best they can, and also preserve colormaps, in all bit depths.
+<li>
+When re-rendering an image at different sizes, Imlib has an advanced pixmap
+cache that will re-use cached pixmaps if already rendered at that size,
+speeding up rendering for native programs by saving the extra rendering into a
+pixmap.
+<il>
+Imlib has support for the MIT-SHM extension via shared images to speed up
+rendering. It also has support for the MIT-SHM shared pixmap extension, but
+is unable to practically use this due to some major design flaws in the
+shared pixmap extension. The support is there waiting for the day
+when this is fixed.
+<li>
+Imlib has both Xlib and GDK versions that can be installed simultaneously,
+share the same config file, and so can be used in both the Xlib low level
+environment and the GDK level environment.
+</ul>
+<p>
+<b>How do I start programming using Imlib?</b><br>
+I suppose the best way to help you start using Imlib, is a small sample
+program. Here are two - one using GDK, another using Xlib. (I will point out
+that Xlib is more powerful than GDK - unlike GDK, an Xlib program can run on
+multiple displays, and Imlib supports this - you just have to initialize
+Imlib per display you connect to).
+<p>
+The following program is a very simple image viewer. It accepts an image
+file as an option, then displays this image in a window. Control-C will quit
+the program. You can resize the window and the image will be resized with
+it. There are two versions - one for Xlib + Imlib, the other for GDK + GDK
+Imlib.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#cccccc><font face=helvetica size=3>
+<b>This program is written for Xlib.</b><br>
+To compile:<br>
+cc test.c -o test -I/usr/X11R6/include -I/usr/local/include -L/usr/X11R6/lib
+-L/usr/local/lib -lX11 -lXext -ljpeg -lpng -ltiff -lz -lgif -lm -lImlib
+</font></td></tr><tr><td bgcolor=#ffffff>
+<pre>
+#include &lt;X11/Xlib.h&gt;
+#include &lt;X11/Xutil.h&gt;
+#include &lt;X11/extensions/shape.h&gt;
+#include &lt;Imlib.h&gt;
+
+int main(int argc, char **argv)
+ {
+ Display *disp;
+ ImlibData *id;
+ XSetWindowAttributes attr;
+ Window win;
+ ImlibImage *im;
+ Pixmap p,m;
+ int w,h;
+
+/* Be nice and tell the user if they don't, to provide a file as an arg */
+ if (argc&lt;=1)
+ {
+ printf("Usage:\n %s image_file\n",argv[0]);
+ exit(1);
+ }
+/* Connect to the default Xserver */
+ disp=XOpenDisplay(NULL);
+/* Immediately afterwards Intitialise Imlib */
+ id=Imlib_init(disp);
+
+/* Load the image specified as the first argument */
+ im=Imlib_load_image(id,argv[1]);
+/* Suck the image's original width and height out of the Image structure */
+ w=im->rgb_width;h=im->rgb_height;
+/* Create a Window to display in */
+ win=XCreateWindow(disp,DefaultRootWindow(disp),0,0,w,h,0,id->x.depth,
+ InputOutput,id->x.visual,0,&attr);
+ XSelectInput(disp,win,StructureNotifyMask);
+/* Render the original 24-bit Image data into a pixmap of size w * h */
+ Imlib_render(id,im,w,h);
+/* Extract the Image and mask pixmaps from the Image */
+ p=Imlib_move_image(id,im);
+/* The mask will be 0 if the image has no transparency */
+ m=Imlib_move_mask(id,im);
+/* Put the Image pixmap in the background of the window */
+ XSetWindowBackgroundPixmap(disp,win,p);
+/* If there was a mask to the image, set the Image's mask to it */
+ if (m) XShapeCombineMask(disp,win,ShapeBounding,0,0,m,ShapeSet);
+/* Actually display the window */
+ XMapWindow(disp,win);
+/* Synchronise with the Xserver */
+ XSync(disp,False);
+/* Event loop to handle resizes */
+ for(;;)
+ {
+ XEvent ev;
+
+/* Sit and wait for an event to happen */
+ XNextEvent(disp,&ev);
+ if (ev.type==ConfigureNotify)
+ {
+ w=ev.xconfigure.width;h=ev.xconfigure.height;
+/* Re-render the Image to the new size */
+ Imlib_render(id,im,w,h);
+/* Free the previous pixmap used for the window - note ONLY the pixmap is */
+/* freed - the mask is marked automatically to be freed along with the */
+/* pixmap. There is no need to free it as well - in fact it is advised you do */
+/* not. You must use the Imlib free function because of Imlib's caching. Do */
+/* not use any other free functions. You can use this function for Pixmaps */
+/* not created by Imlib - and it will just go free them as expected. */
+ Imlib_free_pixmap(id,p);
+ p=Imlib_move_image(id,im);
+/* The mask will be 0 if the image has no transparency */
+ m=Imlib_move_mask(id,im);
+/* Put the Image pixmap in the background of the window */
+ XSetWindowBackgroundPixmap(disp,win,p);
+/* If there was a mask to the image, set the Image's mask to it */
+ if (m) XShapeCombineMask(disp,win,ShapeBounding,0,0,m,ShapeSet);
+/* Clear the window to update the background change */
+ XClearWindow(disp,win);
+/* Synchronise with the Xserver */
+ XSync(disp,False);
+ }
+ }
+}
+</pre>
+</td></tr></table></center>
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#cccccc><font face=helvetica size=3>
+<b>This program is written for GDK.</b><br>
+To compile:<br>
+cc test.c -o test -I/usr/X11R6/include -I/usr/local/include -L/usr/X11R6/lib
+-L/usr/local/lib -lX11 -lXext -ljpeg -lpng -ltiff -lz -lgif -lglib -lgdk -lm
+-lgdk_imlib
+</font></td></tr><tr><td bgcolor=#ffffff>
+<pre>
+#include &lt;gdk_imlib.h&gt;
+#include &lt;gdk/gdk.h&gt;
+
+int main(int argc, char **argv)
+ {
+ GdkWindowAttr attr;
+ GdkWindow *win;
+ GdkPixmap *p,*m;
+ GdkImlibImage *im;
+ gint w,h;
+
+/* Be nice and tell the user if they don't, to provide a file as an arg */
+ if (argc&lt;=1)
+ {
+ printf("Usage:\n %s image_file\n",argv[0]);
+ exit(1);
+ }
+/* Inititalise GDK */
+ gdk_init(&argc,&argv);
+/* Immediately after initialising GDK, Initialise Imlib */
+ gdk_imlib_init();
+
+/* Get gdk to use imlib's visual and colormap */
+ gtk_widget_push_visual(gdk_imlib_get_visual());
+ gtk_widget_push_colormap(gdk_imlib_get_colormap());
+
+/* Load the image specified as the first argument */
+ im=gdk_imlib_load_image(argv[1]);
+/* Suck[B the image's original width and height out of the Image structure */
+ w=im->rgb_width;h=im->rgb_height;
+/* Set up attributes for GDK to create a Window */
+ attr.window_type=GDK_WINDOW_TOPLEVEL;
+ attr.wclass=GDK_INPUT_OUTPUT;
+ attr.event_mask=GDK_STRUCTURE_MASK;
+ attr.width=w;
+ attr.height=h;
+/* Create a Window to display in */
+ win=gdk_window_new(NULL,&attr,0);
+
+/* Render the original 24-bit Image data into a pixmap of size w * h */
+ gdk_imlib_render(im,w,h);
+/* Extract the Image and mask pixmaps from the Image */
+ p=gdk_imlib_move_image(im);
+/* The mask will be NULL if the image has no transparency */
+ m=gdk_imlib_move_mask(im);
+/* Put the Image pixmap in the background of the window */
+ gdk_window_set_back_pixmap(win,p,0);
+/* If there was a mask to the image, set the Image's mask to it */
+ if (m) gdk_window_shape_combine_mask(win,m,0,0);
+/* Actually display the window */
+ gdk_window_show(win);
+/* Flush the GDK buffer */
+ gdk_flush();
+/* Event loop to handle resizes */
+ for(;;)
+ {
+ GdkEvent *ev;
+
+/* Sit and wait for an event to happen */
+ gdk_events_pending();
+/* Drag the event out of the Event queue */
+ ev=gdk_event_get();
+/* If the event is a resize event */
+ if ((ev)&&(ev->type==GDK_CONFIGURE))
+ {
+ w=ev->configure.width;h=ev->configure.height;
+ gdk_event_free(ev);
+/* Re-render the Image to the new size */
+ gdk_imlib_render(im,w,h);
+/* Free the previous pixmap used for the window - note ONLY the pixmap is */
+/* freed - the mask is marked automatically to be freed along with the */
+/* pixmap. There is no need to free it as well - in fact it is advised you do */
+/* not. You must use the Imlib free function because of Imlib's caching. Do */
+/* not use any other free functions. You can use this function for Pixmaps */
+/* not created by Imlib - and it will just go free them as expected. */
+ gdk_imlib_free_pixmap(p);
+/* Extract the pixmap out of the Image */
+ p=gdk_imlib_move_image(im);
+/* The mask will be NULL if the image has no transparency */
+ m=gdk_imlib_move_mask(im);
+/* Set the new pixmap background */
+ gdk_window_set_back_pixmap(win,p,0);
+/* If there was a mask to the image, set the Image's mask to it */
+ if (m) gdk_window_shape_combine_mask(win,m,0,0);
+/* Clear the window to update the background change */
+ gdk_window_clear(win);
+/* Flush GDK's buffer */
+ gdk_flush();
+ }
+ }
+ }
+</pre>
+</td></tr></table></center>
+<p>
+We could now optimize these programs (which are longer than they need to be
+just as an exercise) to use Imlib a bit more. Note the Differences.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#cccccc><font face=helvetica size=3>
+<b>This program is written for Xlib.</b><br>
+To compile:<br>
+cc test.c -o test -I/usr/X11R6/include -I/usr/local/include -L/usr/X11R6/lib
+-L/usr/local/lib -lX11 -lXext -ljpeg -lpng -ltiff -lz -lgif -lm -lImlib
+</font></td></tr><tr><td bgcolor=#ffffff>
+<pre>
+#include &lt;X11/Xlib.h&gt;
+#include &lt;X11/Xutil.h&gt;
+#include &lt;X11/extensions/shape.h&gt;
+#include &lt;Imlib.h&gt;
+
+int main(int argc, char **argv)
+ {
+ Display *disp;
+ ImlibData *id;
+ XSetWindowAttributes attr;
+ Window win;
+ ImlibImage *im;
+ Pixmap p,m;
+ int w,h;
+
+/* Be nice and tell the user if they don't, to provide a file as an arg */
+ if (argc&lt;=1)
+ {
+ printf("Usage:\n %s image_file\n",argv[0]);
+ exit(1);
+ }
+/* Connect to the default Xserver */
+ disp=XOpenDisplay(NULL);
+/* Immediately afterwards Intitialise Imlib */
+ id=Imlib_init(disp);
+
+/* Load the image specified as the first argument */
+ im=Imlib_load_image(id,argv[1]);
+/* Suck the image's original width and height out of the Image structure */
+ w=im->rgb_width;h=im->rgb_height;
+/* Create a Window to display in */
+ win=XCreateWindow(disp,DefaultRootWindow(disp),0,0,w,h,0,id->x.depth,
+ InputOutput,id->x.visual,0,&attr);
+ XSelectInput(disp,win,StructureNotifyMask);
+/* Put the Image in the window, at the window's size and apply a shape mask */
+/* if applicable, or remove one if not */
+ Imlib_apply_image(id,im,win);
+/* Actually display the window */
+ XMapWindow(disp,win);
+/* Synchronise with the Xserver */
+ XSync(disp,False);
+/* Event loop to handle resizes */
+ for(;;)
+ {
+ XEvent ev;
+
+/* Sit and wait for an event to happen */
+ XNextEvent(disp,&ev);
+ if (ev.type==ConfigureNotify)
+ {
+/* Put the Image in the window, at the window's size and apply a shape mask */
+/* if applicable, or remove one if not */
+ Imlib_apply_image(id,im,win);
+/* Synchronise with the Xserver */
+ XSync(disp,False);
+ }
+ }
+}
+</pre>
+</td></tr></table></center>
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#cccccc><font face=helvetica size=3>
+<b>This program is written for GDK.</b><br>
+To compile:<br>
+cc test.c -o test -I/usr/X11R6/include -I/usr/local/include -L/usr/X11R6/lib
+-L/usr/local/lib -lX11 -lXext -ljpeg -lpng -ltiff -lz -lgif -lglib -lgdk -lm
+-lgdk_imlib
+</font></td></tr><tr><td bgcolor=#ffffff>
+<pre>
+#include &lt;gdk_imlib.h&gt;
+#include &lt;gdk/gdk.h&gt;
+
+int main(int argc, char **argv)
+ {
+ GdkWindowAttr attr;
+ GdkWindow *win;
+ GdkPixmap *p,*m;
+ GdkImlibImage *im;
+ gint w,h;
+
+/* Be nice and tell the user if they don't, to provide a file as an arg */
+ if (argc&lt;=1)
+ {
+ printf("Usage:\n %s image_file\n",argv[0]);
+ exit(1);
+ }
+/* Inititalise GDK */
+ gdk_init(&argc,&argv);
+/* Immediately after initialising GDK, Initialise Imlib */
+ gdk_imlib_init();
+
+/* Get gdk to use imlib's visual and colormap */
+ gtk_widget_push_visual(gdk_imlib_get_visual());
+ gtk_widget_push_colormap(gdk_imlib_get_colormap());
+
+/* Load the image specified as the first argument */
+ im=gdk_imlib_load_image(argv[1]);
+/* Suck the image's original width and height out of the Image structure */
+ w=im->rgb_width;h=im->rgb_height;
+/* Set up attributes for GDK to create a Window */
+ attr.window_type=GDK_WINDOW_TOPLEVEL;
+ attr.wclass=GDK_INPUT_OUTPUT;
+ attr.event_mask=GDK_STRUCTURE_MASK;
+ attr.width=w;
+ attr.height=h;
+/* Create a Window to display in */
+ win=gdk_window_new(NULL,&attr,0);
+
+/* Put the Image in the window, at the window's size and apply a shape mask */
+/* if applicable, or remove one if not */
+ gdk_imlib_apply_image(im,win);
+/* Actually display the window */
+ gdk_window_show(win);
+/* Flush the GDK buffer */
+ gdk_flush();
+/* Event loop to handle resizes */
+ for(;;)
+ {
+ GdkEvent *ev;
+
+/* Sit and wait for an event to happen */
+ gdk_events_pending();
+/* Drag the event out of the Event queue */
+ ev=gdk_event_get();
+/* If the event is a resize event */
+ if ((ev)&&(ev->type==GDK_CONFIGURE))
+ {
+ gdk_event_free(ev);
+/* Put the Image in the window, at the window's size and apply a shape mask */
+/* if applicable, or remove one if not */
+ gdk_imlib_apply_image(im,win);
+/* Flush GDK's buffer */
+ gdk_flush();
+ }
+ }
+ }
+</pre>
+</td></tr></table></center>
+<blockquote>
+<b>As a note for future code snippets:</b><br>
+All data types beginning with <b>Imlib</b> are Xlib Imlib data types, those
+beginning with <b>Gdk</b> are GDK Imlib data types. All functions beginning
+with <b>Imlib_</b> are Xlib Imlib functions and all functions beginning with
+<b>gdk_</b> are GDK Imlib function calls. All calls perform the same
+functions and accept similar parameters - the differences are GDK and Xlib
+primitives, and the Xlib Imlib has an extra ImlibData parameter at the start
+of each function call. Examples of sibling data types and functions calls
+will be given together. Chose the appropriate one for your situation.
+</blockquote>
+<p>
+You will notice we saved a fair few commands - that I have found my code
+littered with all over the place, by using a function in Imlib that does
+this for you. It shows that you can have full control over your programs, if
+you desire, or let Imlib do it for you.
+<p>
+<b>Imlib's concept of an image</b><br>
+Imlib has a certain concept of what an image is. It is designed to be fast,
+fairly general and powerful. For Imlib an image is:
+<ul>
+<li>
+An image is a large chunk of 24-bit pixel data in RGBRGBRGB format.
+<li>
+There is a second chunk of alpha channel data that matches the RGB chunk
+pixel for pixel, but currently is unused, provided for future expansion.
+<li>
+An image contains an optional RGB value that tags all pixels with that value
+as being transparent. This is specifically designed around X's on or off
+transparency and clip mask operations.
+<li>
+Images have a set of border pixels - if not set, the borders are all set to
+0 pixels. The borders are a special set of pixels that are scaled slightly
+differently from the rest of the image when rendered to a pixmap.
+<li>
+Images have attached map-tables that can either be explicitly set, or are
+generated from the image's Gamma, Brightness and Contrast settings (and the
+same settings per Red, Green and Blue channel). These settings and
+map-tables are inherited upon loading from the system settings (currently
+all normalized - will be added to the configuration file and init soon).
+</ul>
+<p>
+The data in the 24-bit representation of an image is a large block of
+unsigned char bytes. The image has a pointer to this data which is in the
+order from top-left pixel to bottom right, scanline by scanline. Each pixel
+is an RGB triplet, with the bytes in the order Red Green Blue, so the array
+looks something like RGBRGBRGBRGBRGBRGB...
+<p>
+If our image is:
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+ImlibImage *im;
+GdkImlibImage *im;
+</pre></td></tr></table></center>
+<p>
+The pointer to the RGB data and the alpha data would be:
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+im->rgb_data; /* pointer to unsigned char RGB data */
+im->alpha_data; /* pointer to unsigned char Alpha data */
+</pre></td></tr></table></center>
+<p>
+The alpha data is currently unused and should be ignored - the pointer to it
+should be kept NULL.
+<p>
+The shape color is an RGB value for the pixel color that is to be considered
+transparent. This defines how Imlib renders the image and if it generates a
+mask pixmap on rendering. Certain image formats (GIF, TIFF, PNG, EIM and XPM)
+contain transparency information. This is inherited by Imlib, so
+there is no need to set the shape color. If it is not set, a program can set a
+shape color, or if it is not desired, it can be removed by setting the RGB
+values for the Shape Color to R,G,B -1,-1,-1.
+<p>
+The way to retrieve the shape color, examine it and set it is as follows. It
+is assumes images have been loaded, Imlib initialised etc. already:
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+ImlibData *id;
+ImlibImage *im;
+ImlibColor color;
+int r,g,b;
+
+Imlib_get_image_shape(id,im,&color);
+r=color.r;
+g=color.g;
+b=color.b;
+color.r=100;
+color.g=50;
+color.b=255;
+Imlib_set_image_shape(id,im,&color);
+
+
+GdkImlibImage *im;
+GdkImlibColor color;
+int r,g,b;
+
+gdk_imlib_get_image_shape(im,&color);
+r=color.r;
+g=color.g;
+b=color.b;
+color.r=100;
+color.g=50;
+color.b=255;
+gdk_imlib_set_image_shape(im,&color);
+</pre></td></tr></table></center>
+<p>
+The Border attribute is where the programmer or user gets to choose border
+scaling attributes. The border values define margins around the image that
+are not to be scaled in that direction (ie the top and bottom borders do not
+get scaled vertically but retain their pixel sizes). The best way to explain
+is with an example.
+<p>
+<center><table border=1>
+<tr>
+<td align=center><img src=border_eg1.gif width=128 alt="Unscaled Image"></td>
+<td><font face= helvetica size=3>
+Notice how this is the original image, with a hilighted bevel of 3 pixels on
+each side. This is the original and so, we want these borders to to remain
+3 pixels wide when the image is scaled to a larger size. The original is
+32x32 pixels.
+</font></td>
+</tr><tr>
+<td align=center><img src=border_eg2.gif width=320 alt="Scaled Image"></td>
+<td><font face= helvetica size=3>
+Here is an example of the image scaled to 80x40 pixels, when the borders are
+set to 0 pixels - notice how the bevels get scaled too, giving quite an
+un-aesthetic look? This is how a vanilla scaling algorithm would work.
+</font></td>
+</tr><tr>
+<td align=center><img src=border_eg3.gif width=320 alt="Scaled Image"></td>
+<td><font face= helvetica size=3>
+Now take a look at this third example scaled to the same size, but it has
+the border attributes set to 3 pixels for top, bottom, left and right
+borders. This time the image looks correct.
+</font></td>
+</tr><tr>
+<td align=center><img src=border_diag.gif alt="Diagram"></td>
+<td><font face= helvetica size=3>
+Note with this diagram that the borders map out an inner and outer boxes with
+corner pieces, effectively dividing the Image into 9 segments. The borders
+need not be of the same width - as shown here, they can each be of a
+different size, allowing for shadows, and other effects that may exist in
+the image.
+</font></td></tr></table></center>
+<p>
+The image map-tables are a set of 3, 256 value lookup tables of unsigned char
+values. These are calculated form the image's brightness, gamma, and
+contrast settings for the image as a whole and each red, green and blue
+channel. You can set and get these values as follows:
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+ImlibData *id;
+ImlibImage *im;
+ImlibColorModifier mod;
+double gamma,brightness,contrast;
+
+Imlib_get_image_modifier(id,im,&mod);
+gamma=(double)mod.gamma/256;
+brightness=(double)mod.brightness/256;
+contrast=(dobule)mod.contrast/256;
+Imlib_set_image_modifier(id,im,&mod);
+
+
+GdkImlibImage *im;
+GdkImlibColorModifier mod;
+double gamma,brightness,contrast;
+
+gdk_imlib_get_image_modifier(im,&mod);
+gamma=(double)mod.gamma/256;
+brightness=(double)mod.brightness/256;
+contrast=(double)mod.contrast/256;
+gdk_imlib_set_image_modifier(im,&mod);
+</pre></td></tr></table></center>
+<p>
+Note that the contrast, brightness and gamma values are in fact int's. A
+value of 1.0 (unmodified verbatim data) is in fact 256, so to use a value of
+0.5 for any of these, you would have to use a value of 128 etc.
+<p>
+When you set the modifiers, the map-tables (the curves) are re-calculated
+for that image. You have to re-render the image to gain a pixmap with these
+settings in effect.
+<p>
+There are also identical modifier settings for the red, green and blue
+channels, so these can be used for white point adjustment and other functions.
+<p>
+<img src=curve1.gif alt="Curve" align=left>
+It is also possible to gain direct access to these map-table curves and set
+the values in them manually for finer control. There are 3 tables - one for
+red, one for green and one for blue. The functions Imlib_set_image_red_curve,
+Imlib_set_image_green_curve, Imlib_set_image_blue_curve,
+Imlib_get_image_red_curve, Imlib_get_image_green_curve,
+Imlib_get_image_blue_curve, gdk_imlib_set_image_red_curve,
+gdk_imlib_set_image_green_curve, gdk_imlib_set_image_blue_curve,
+gdk_imlib_get_image_red_curve, gdk_imlib_get_image_green_curve, and
+gdk_imlib_get_image_blue_curve will set and get these. You pass the pointer
+to an array of 256 unsigned char's as the last parameter in each of these
+functions to have Imlib fill that table's contents or use that table's
+contents.
+<p>
+By default the map-table is linear if the global gamma, brightness and
+contrast settings are all normal (ie at 256). This would produce a mapping
+table such as the one here on the left. There is a table per channel
+describing this mapping. If you want you could set the table per red, green
+and blue channel to perhaps something like the graph below, that would then
+give a more interesting mapping. The tables for each channel can be different,
+and so could be used for re-coloring images in interesting ways.
+<img src=curve2.gif alt="Curve" align=right>
+<p>
+It is also possible to then use these mappings to in fact modify the original
+24-bit data for the image - making the changes permanent, and thus not
+needing and of the modifiers. To do this you would call the
+Imlib_apply_modifiers_to_rgb or gdk_imlib_apply_modifiers_to_rgb functions.
+<p>
+If you need advanced manipulation of the 24-bit data (eg blurring, other
+convolutions etc.) you may do this to your heart's content. Just remember -
+before you render any pixmaps to call Imlib_changed_image or
+gdk_imlib_changed_image which will prevent Imlib's caching form not updating
+the pixmaps. This marks all pixmaps rendered off that image as being "dirty"
+and so they will never be referenced again by Imlib's caching. Once they are
+all freed and their reference counts are zero, they will be freed from memory.
+<p>
+Below is a list of All Imlib functions - the Xlib version fist, then the GDK
+version listed second. GDK Imlib functions do not use the ImlibData pointer
+at the start, and so this parameter, being common to ALL Xlib Imlib
+functions will not be mentioned, but it will be assumed you realise that it
+is required.
+<hr>
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+ImlibData *Imlib_init(Display *disp);
+void gdk_imlib_init();
+</td></tr></table></center>
+<p>
+This function inititalised Imlib. It must be called early in the program
+BEFORE any other Imlib functions are called. You must call it AFTER you call
+XOpenDisplay or gdk_init. The Xlib version needs to have the display
+variable passed to it. The Xlib version is capable of running on multiple
+displays - you just init Imlib per display variable.
+<p>
+This function causes Imlib to investigate properties of your XServer - ie,
+is the shared memory extension available? - if so, use it. The depth(s) of
+the visual(s) and choosing the best visual, initializing the caches to be
+empty, load a default palette (if in 8bpp) and set up a dither matrix etc.
+the default palette file is defined in the system or users imrc file as
+PaletteFile which is simply a flat file of line delimited colors, each color
+being space separated hexadecimal values for red, green and blue. See the
+sample palette file provided with Imlib. You can also force Imlib's shared
+memory use off in the system or user's imrc files with the Mit-Shm option
+- shared pixmaps are available if this is turned on, but it is
+currently advised to turn shared pixmaps off due to Xserver design flaws. Some
+operating systems define maximum chunk sizes for shared memory blocks, and so
+Imlib can be told not to create images of greater than a certain size in
+bytes with the Shm_Max_Size option in the imrc file. Image and pixmap caches
+can be turned on or off and set to their sizes here as well.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+ImlibData *Imlib_init_with_params(Display *disp, ImlibInitParams *p);
+void gdk_imlib_init_params(GdkImlibInitParams *p);
+</td></tr></table></center>
+<p>
+This function inititalised Imlib, BUT allows the programmer to specify
+startup parameters that override the users or system imrc file. Use these
+options with cauthion, as it is assumed you know what you are doing.
+<p>
+The structure containing the parameters to giv Imlib is:
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+typedef struct _ImlibInitParams
+{
+ int flags;
+ int visualid;
+ char *palettefile;
+ char sharedmem;
+ char sharedpixmaps;
+ char paletteoverride;
+ char remap;
+ char fastrender;
+ char hiquality;
+ char dither;
+ int imagecachesize;
+ int pixmapcachesize;
+} ImlibInitParams;
+
+#define PARAMS_VISUALID 1<<0
+#define PARAMS_PALETTEFILE 1<<1
+#define PARAMS_SHAREDMEM 1<<2
+#define PARAMS_SHAREDPIXMAPS 1<<3
+#define PARAMS_PALETTEOVERRIDE 1<<4
+#define PARAMS_REMAP 1<<5
+#define PARAMS_FASTRENDER 1<<6
+#define PARAMS_HIQUALITY 1<<7
+#define PARAMS_DITHER 1<<8
+#define PARAMS_IMAGECACHESIZE 1<<9
+#define PARAMS_PIXMAPCACHESIZE 1<<10
+</td></tr></table></center>
+<p>
+with a simliar one for gdk (same members), and same defines for the flags.
+<p>
+You set the bits in the flags member with the appropriate defines
+(PARAMS_VISUALID | PARAMS_PALETTEFILE | PARAMS_SHAREDMEM etc.) which flag
+whihc members of the structure are actually relevant and should be used by
+Imlib in overriding the user/system defaults. If the flag bit is set, then
+that structure member is used. the members are as follows:
+<p>
+<b>visualid</b>: contains an int with the visualid to be used by Imlib.<br>
+<br>
+<b>palettefile</b>: string containing the file for the palette file.<br>
+<br>
+<b>sharedmem</b>: is 1 if you want shared memory used, otherwise 0.<br>
+<br>
+<b>sharedpixmaps</b>: is 1 if you want shared pixmaps, otherwise 0.<br>
+<br>
+<b>paletteoverride</b>: 1 if palette remapping is to be forced on, otherwise 0.<br>
+<br>
+<b>remap</b>: 1 for fast remapping 0 for slower more accurate remapping.<br>
+<br>
+<b>fastrender</b>: 1 for fast rendering, 0 for slightly slower rendering.<br>
+<br>
+<b>hiquality</b>: 1 to turn dithering on in 15/16bpp, 0 otherwise.<br>
+<br>
+<b>dither</b>: 1 to turn dithering on in 8bpp or less, otherwise 0.<br>
+<br>
+<b>imagecachesize</b>: the size of the image cache to be used in bytes.<br>
+<br>
+<b>pixmapcachesize</b>: the size of the pixmap cache to be used in bits.<br>
+<br>
+<p>
+Remember the member is ignored if the flags does not contain the bit set for
+that member - if the bit is set, then that member is used.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+int Imlib_get_render_type(ImlibData *id);
+gint gdk_imlib_get_render_type();
+</td></tr></table></center>
+<p>
+This function returns Imlib's current rendering mode. It will return one of:
+<ul>
+RT_PLAIN_PALETTE<br>
+RT_PLAIN_PALETTE_FAST<br>
+RT_DITHER_PALETTE<br>
+RT_DITHER_PALETTE_FAST<br>
+RT_PLAIN_TRUECOL<br>
+RT_DITHER_TRUECOL<br>
+</ul>
+These modes determine how images will appear when rendered as pixmaps. The
+first 4 modes are for 8-bit displays only (though they can be used for
+higher bit displays after the loading of a palette - Imlib won't load a
+palette in higher display depths to save time). If you wish to use these lower
+modes in higher bit depths, you will need to call Imlib_load_colors or
+gdk_imlib_load_colors on a palette file. You can replace the default palette
+any time by first calling Imlib_free_colors or gdk_imlib_free_colors. The
+first 2 modes do not dither the images, and thus are faster. The fast
+versions used a quick 32x32x32 colorcube lookup to obtain a best color match -
+the other versions use a slightly more accurate color matching function, but
+are slower. Dithering gives much better results, but is slower. Dithering
+and Fast remapping are turned on or of in the users or system imrc file. See
+this file and its comments for details. You can ALSO override Imlib using
+truecolor renderers, and force it to use paletted dithered images in higher
+bit depths by turning these render types on, or turning PaletteOverride on in
+the system or user's imrc file.
+<p>
+RT_PLAIN_TRUECOL is used for all higher bit depths (Imlib won't allow this
+mode to be set if the depth is less than or equal to 8 bit). This s a fast
+renderer that provides high quality. RT_DITHER_TRUECOL is an even higher
+quality renderer that only has effect in 15 and 16 bit depths. It dithers in
+these modes to provide the highest quality images. This option is turned on
+by the HighQuality option in the user's or system imrc file.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_set_render_type(ImlibData *id, int rend_type);
+void gdk_imlib_set_render_type(gint rend_type);
+</td></tr></table></center>
+<p>
+This function sets the render type to rend_type which should be one of the
+above listed render types. This is optional and Imlib will default to
+settings provided by the user, system and Xserver. This is primarily here, in
+conjunction with Imlib_get_render_type or gdk_imlib_get_render_type to allow
+fine tweaking by applications of Imlib's rendering performance.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+int Imlib_load_colors(ImlibData *id, char *file);
+gint gdk_imlib_load_colors(char *file);
+</td></tr></table></center>
+<p>
+This function loads the named palette file (described in Imlib_init). It is
+advised to call Imlib_free_colors or gdk_imlib_free_colors first before
+calling this. There may be strange effects when changing palettes "on the
+fly" in 8-bit color. All pixmaps should be re-rendered to inherit this new
+palette.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+ImlibImage *Imlib_load_image(ImlibData *id, char *file);
+GdkImlibImage *gdk_imlib_load_image(char *file);
+</td></tr></table></center>
+<p>
+This function loads the named file and returns a pointer to an image
+structure. Imlib will first check to see if the file has magic numbers
+defining it as a file Imlib can natively read - and then attempt to read it.
+If Imlib doesn't recognise the magic numbers, or certain native loaders
+have not been compiled in, it will fall back to asking Imagemagick's convert
+utility to convert the image into a PPM format image for Imlib to read in.
+If this doesn't work, Imlib will call on the NETPBM utilities to convert the
+image to a PPM for Imlib to read. If this fails, Imlib gives up and returns
+NULL. Imlib does not create any temporary files in this process.
+<p>
+Imlib can, if all native loaders are compiled in, read JPEG, GIF, PPM, PGM,
+XPM, PNG, TIFF and EIM image formats. GIF, PNG, XPM, TIFF and EIM images all
+retain their transparency information when being loaded.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+int Imlib_best_color_match(ImlibData *id, int *r, int *g, int *b);
+gint gdk_imlib_best_color_match(gint *r, gint *g, gint *b);
+</td></tr></table></center>
+<p>
+If the render type is a truecolor one, Imlib returns a pixel value that is
+the closest match to the requested RGB value (RGB each being in the range of
+0-255). This will normally be very close. If using a palette render type,
+Imlib returns the closest match to the allocated palette and the rgb members
+are set to the actual RGB value of the color returned, The function always
+returns the pixel value of this color.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+int Imlib_render(ImlibData *id, ImlibImage *image, int width, int height);
+gint gdk_imlib_render(GdkImlibImage *image, gint width, gint height);
+</td></tr></table></center>
+<p>
+This will render the image pointed to by image into a pixmap of the defined
+width and height. If the image contains transparency, a mask will also be
+rendered. These can be extracted form the image using the functions below.
+If any pixmaps were already existant in the image, these are destroyed upon
+re-rendering the image. If Imlib was unable for some reason to render the
+Image to that pixmap, it will return 0, otherwise it will return 1.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+Pixmap Imlib_copy_image(ImlibData *id, ImlibImage *image);
+GdkPixmap *gdk_imlib_copy_image(GdkImlibImage *image);
+</td></tr></table></center>
+<p>
+This routine returns a copy of the image pixmap. You should use this routine
+if you wish to modify the pixmap itself afterwards by doing any drawing on
+it. Do NOT use the move functions for pixmap that will be modified later.
+You can make multiple copies of the pixmap by calling this function
+repeatedly. If no pixmap was rendered it will return 0 or NULL.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+Pixmap Imlib_copy_mask(ImlibData *id, ImlibImage *image);
+GdkBitmap *gdk_imlib_copy_mask(GdkImlibImage *image);
+</td></tr></table></center>
+<p>
+This is the Imlib_copy_image or gdk_imlib_copy_image functions, but it returns
+the mask for the image. If there is no transparency, or no mask was rendered,
+it returns 0, or NULL.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+Pixmap Imlib_move_image(ImlibData *id, ImlibImage *image);
+GdkPixmap *gdk_imlib_move_image(GdkImlibImage *image);
+</td></tr></table></center>
+<p>
+This returns the rendered pixmap from the image structure, and removes the
+image pixmap (setting it to 0 or NULL) inside the image structure. If you do
+not need to modify the pixmap - ie just use it, this is the function you
+should call. It is faster than Imlib_copy_image or gdk_imlib_copy_image.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+Pixmap Imlib_move_mask(ImlibData *id, ImlibImage *image);
+GdkBitmap *gdk_imlib_move_mask(GdkImlibImage *image);
+</td></tr></table></center>
+<p>
+This is the same as Imlib_move_image or gdk_imlib_move_image but returns the
+mask for the rendered Image.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_destroy_image(ImlibData *id, ImlibImage *image);
+void gdk_imlib_destroy_image(GdkImlibImage *image);
+</td></tr></table></center>
+<p>
+This destroys the Image structure, making it invalid. It reduces the
+reference count on that image and if at zero, it enters the cache. Once the
+cache fills and this image gets to the oldest part of the cache, it will be
+freed when the cache exceeds its boundaries.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_kill_image(ImlibData *id, ImlibImage *image);
+void gdk_imlib_kill_image(GdkImlibImage *image);
+</td></tr></table></center>
+<p>
+This does the same as Imlib_destroy_image or gdk_imlib_destroy_image but
+forces it to be freed immediately once its reference count hits zero - ie it
+does not hang around in the cache.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_free_colors(ImlibData *id);
+void gdk_imlib_free_colors();
+</td></tr></table></center>
+<p>
+This frees the current colormap used by Imlib and all the colors in it,
+setting the color count to zero. It is not a good idea to go rendering
+anything in an 8-bit display if the colors are freed.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_free_pixmap(ImlibData *id, Pixmap pixmap);
+void gdk_imlib_free_pixmap(GdkPixmap *pixmap);
+</td></tr></table></center>
+<p>
+This frees the pixmap pointed to - reducing its reference count by 1. If the
+count is zero it enters the cache and once the cache is filled and the
+pixmap is too old, it is freed. You must use this function for ALL pixmaps
+generated by Imlib. You may use it on Pixmaps not generated by Imlib and it
+will free them as normal. This function ALSO frees (or reduces the reference
+count) on the associated mask pixmap for that image pixmap, if there is a
+mask, so you do not need to free the mask separately.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_get_image_border(ImlibData *id, ImlibImage *image, ImlibBorder *border);
+void gdk_imlib_get_image_border(GdkImlibImage *image, GdkImlibBorder *border);
+</td></tr></table></center>
+<p>
+This function returns the image's border attributes in the border structure.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_set_image_border(ImlibData *id, ImlibImage *image, ImlibBorder *border);
+void gdk_imlib_set_image_border(GdkImlibImage *image, GdkImlibBorder *border);
+</td></tr></table></center>
+<p>
+This function sets the image's border attributes to those in the border
+structure.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_get_image_shape(ImlibData *id, ImlibImage *image, ImlibColor *color);
+void gdk_imlib_get_image_shape(GdkImlibImage *image, GdkImlibColor *color);
+</td></tr></table></center>
+<p>
+This function returns the color of the transparent color in an image - if
+there is no transparent color the RGB members are all set to -1, otherwise
+they are set to the RGB value of this color.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_set_image_shape(ImlibData *id, ImlibImage *image, ImlibColor *color);
+void gdk_imlib_set_image_shape(GdkImlibImage *image, GdkImlibColor *color);
+</td></tr></table></center>
+<p>
+This function sets the transparent color to the RGB values in the color
+structure. If any of these are -1, transparency for that image is turned off.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+int Imlib_save_image_to_eim(ImlibData *id, ImlibImage *image, char *file);
+gint gdk_imlib_save_image_to_eim(GdkImlibImage *image, char *file);
+</td></tr></table></center>
+<p>
+This Function saves the image into an EIM format image. EIM image format is
+currently under construction. Please come back later.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+int Imlib_add_image_to_eim(ImlibData *id, ImlibImage *image, char *file);
+gint gdk_imlib_add_image_to_eim(GdkImlibImage *image, char *file);
+</td></tr></table></center>
+<p>
+This Function adds the image into an EIM file that currently exists. EIM
+image format is currently under construction. Please come back later.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+int Imlib_save_image_to_ppm(ImlibData *id, ImlibImage *image, char *file);
+gint gdk_imlib_save_image_to_ppm(GdkImlibImage *image, char *file);
+</td></tr></table></center>
+<p>
+This function saves the current image as a binary format PPM file. If it is
+successful, it returns 1, otherwise it returns 0.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+int Imlib_load_file_to_pixmap(ImlibData *id, char *filename, Pixmap *pmap, Pixmap *mask);
+gint gdk_imlib_load_file_to_pixmap(char *filename, GdkPixmap **pmap, GdkBitmap **mask);
+</td></tr></table></center>
+<p>
+This is a macro function that does the following. It loads the named image
+file, and sets the pmap and mask variables to the image pixmap and mask
+pixmaps that are rendered at the image's original size. It returns 1 if
+successful and 0 if the load and render do not succeed. It frees the image
+after loading. The pixmaps should be freed by Imlib_free_pixmap or
+gdk_imlib_free_pixmap. This is a nigh identical replacement for
+XpmReadFileToPixmap or gdk_pixmap_create_from_xpm.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_set_image_modifier(ImlibData *id, ImlibImage *im, ImlibColorModifier *mod);
+void gdk_imlib_set_image_modifier(GdkImlibImage *im, GdkImlibColorModifier *mod);
+</td></tr></table></center>
+<p>
+This function sets the image's brightness, contrast and gamma settings to
+those defined in the mod structure. You need to re-render the image to make
+this have any effect.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_set_image_red_modifier(ImlibData *id, ImlibImage *im, ImlibColorModifier *mod);
+void gdk_imlib_set_image_red_modifier(GdkImlibImage *im, GdkImlibColorModifier *mod);
+</td></tr></table></center>
+<p>
+This function sets the image's red channel brightness, contrast and gamma
+settings to those defined in the mod structure. You need to re-render the
+image to make this have any effect.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_set_image_green_modifier(ImlibData *id, ImlibImage *im, ImlibColorModifier *mod);
+void gdk_imlib_set_image_green_modifier(GdkImlibImage *im, GdkImlibColorModifier *mod);
+</td></tr></table></center>
+<p>
+This function sets the image's green channel brightness, contrast and gamma
+settings to those defined in the mod structure. You need to re-render the
+image to make this have any effect.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_set_image_blue_modifier(ImlibData *id, ImlibImage *im, ImlibColorModifier *mod);
+void gdk_imlib_set_image_blue_modifier(GdkImlibImage *im, GdkImlibColorModifier *mod);
+</td></tr></table></center>
+<p>
+This function sets the image's blue channel brightness, contrast and gamma
+settings to those defined in the mod structure. You need to re-render the
+image to make this have any effect.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_get_image_modifier(ImlibData *id, ImlibImage *im, ImlibColorModifier *mod);
+void gdk_imlib_get_image_modifier(GdkImlibImage *im, GdkImlibColorModifier *mod);
+</td></tr></table></center>
+<p>
+This function returns the image's current modifier settings in the mod
+structure.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_get_image_red_modifier(ImlibData *id, ImlibImage *im, ImlibColorModifier *mod);
+void gdk_imlib_get_image_red_modifier(GdkImlibImage *im, GdkImlibColorModifier *mod);
+</td></tr></table></center>
+<p>
+This function returns the image's red channel modifier settings in the mod
+structure.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_get_image_green_modifier(ImlibData *id, ImlibImage *im, ImlibColorModifier *mod);
+void gdk_imlib_get_image_green_modifier(GdkImlibImage *im, GdkImlibColorModifier *mod);
+</td></tr></table></center>
+<p>
+This function returns the image's green channel modifier settings in the mod
+structure.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_get_image_blue_modifier(ImlibData *id, ImlibImage *im, ImlibColorModifier *mod);
+void gdk_imlib_get_image_blue_modifier(GdkImlibImage *im, GdkImlibColorModifier *mod);
+</td></tr></table></center>
+<p>
+This function returns the image's blue channel modifier settings in the mod
+structure.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_set_image_red_curve(ImlibData *id, ImlibImage *im, unsigned char *mod);
+void gdk_imlib_set_image_red_curve(GdkImlibImage *im, unsigned char *mod);
+</td></tr></table></center>
+<p>
+This function sets the mapping table curve for the red channel to the
+contents of the array pointer to by mod, which is a 256 element array of
+unsigned char values that map newvalue=mod[value]. This overrides the
+current modifier table generated by any gamma, brightness or contrast
+settings.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_set_image_green_curve(ImlibData *id, ImlibImage *im, unsigned char *mod);
+void gdk_imlib_set_image_green_curve(GdkImlibImage *im, unsigned char *mod);
+</td></tr></table></center>
+<p>
+This function sets the mapping table curve for the green channel to the
+contents of the array pointer to by mod, which is a 256 element array of
+unsigned char values that map newvalue=mod[value]. This overrides the
+current modifier table generated by any gamma, brightness or contrast
+settings.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_set_image_blue_curve(ImlibData *id, ImlibImage *im, unsigned char *mod);
+void gdk_imlib_set_image_blue_curve(GdkImlibImage *im, unsigned char *mod);
+</td></tr></table></center>
+<p>
+This function sets the mapping table curve for the blue channel to the
+contents of the array pointer to by mod, which is a 256 element array of
+unsigned char values that map newvalue=mod[value]. This overrides the
+current modifier table generated by any gamma, brightness or contrast
+settings.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_get_image_red_curve(ImlibData *id, ImlibImage *im, unsigned char *mod);
+void gdk_imlib_set_image_red_curve(GdkImlibImage *im, unsigned char *mod);
+</td></tr></table></center>
+<p>
+This function returns the current red channel mapping table curve by copying
+its contents into the 256 element array of unsigned char's pointed to by mod.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_get_image_green_curve(ImlibData *id, ImlibImage *im, unsigned char *mod);
+void gdk_imlib_get_image_green_curve(GdkImlibImage *im, unsigned char *mod);
+</td></tr></table></center>
+<p>
+This function returns the current green channel mapping table curve by copying
+its contents into the 256 element array of unsigned char's pointed to by mod.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_get_image_blue_curve(ImlibData *id, ImlibImage *im, unsigned char *mod);
+void gdk_imlib_get_image_blue_curve(GdkImlibImage *im, unsigned char *mod);
+</td></tr></table></center>
+<p>
+This function returns the current blue channel mapping table curve by copying
+its contents into the 256 element array of unsigned char's pointed to by mod.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_apply_modifiers_to_rgb(ImlibData *id, ImlibImage *im);
+void gdk_imlib_apply_modifiers_to_rgb(GdkImlibImage *im);
+</td></tr></table></center>
+<p>
+This function takes all the current RGB mapping tables and modifies the
+original 24-bit RGB data to match. This dirties all cached pixmaps of that
+image, and you will need to re-render the image for it to take any effect.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_changed_image(ImlibData *id, ImlibImage *im);
+void gdk_imlib_changed_image(GdkImlibImage *im);
+</td></tr></table></center>
+<p>
+If you go and modify the image's RGB data yourself via your own routines,
+once finished and before rendering any more pixmaps, you should call this
+function to inform Imlib that the contents of the image have changed.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_apply_image(ImlibData *id, ImlibImage *im, Window p);
+void gdk_imlib_apply_image(GdkImlibImage *im, GdkWindow *p);
+</td></tr></table></center>
+<p>
+This function takes an image, renders it at the size of the window specified
+as p, sets the window's background pixmap to be this rendered pixmap, and
+sets the window's shape mask to the the mask for the image if it has any
+transparency. It frees both pixmaps after use.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_paste_image(ImlibData *id, ImlibImage *im, Window p, int x, int y, int w, int h);
+void gdk_imlib_paste_image(GdkImlibImage *im, GdkWindow *p, gint x, gint y, gint w, gint h);
+</td></tr></table></center>
+<p>
+This pastes a pixmap of the image at the x,y co-ordinates in the drawable p
+(which can be either a window or a pixmap), and uses the shape mask to
+determine which pixels are actually drawn. It is effectively like pasting
+the image at that size at that location. Both the pixmap and the mask are
+freed afterwards.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_paste_image_border(ImlibData *id, ImlibImage *im, Window p, int x, int y, int w, int h);
+void gdk_imlib_paste_image_border(GdkImlibImage *im, GdkWindow *p, gint x, gint y, gint w, gint h);
+</td></tr></table></center>
+<p>
+This function works just like Imlib_paste_image or gdk_imlib_paste_image,
+but only pastes the borders of the image. This is handy if the image is
+being used to define bevel borders on a button for maximum efficiency.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_flip_image_horizontal(ImlibData *id, ImlibImage *im);
+void gdk_imlib_flip_image_horizontal(GdkImlibImage *im);
+</td></tr></table></center>
+<p>
+This flips the RGB data in an image horizontally. You need to re-render the
+image for it to take effect.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_flip_image_vertical(ImlibData *id, ImlibImage *im);
+void gdk_imlib_flip_image_vertical(GdkImlibImage *im);
+</td></tr></table></center>
+<p>
+This flips the RGB data in an image vertically. You need to re-render the
+image for it to take effect.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_rotate_image(ImlibData *id, ImlibImage *im, int d);
+void gdk_imlib_rotate_image(GdkImlibImage *im, gint d);
+</td></tr></table></center>
+<p>
+This function currently is a bit of a misnomer. It does not use the d
+parameter - it merely mirrors the image about a diagonal line going from the
+top-left to the bottom right at 45 degrees. It effectively rotates the image,
+combined with flips horizontally and vertically this can be used to give the
+image any orientation in steps of 90 degrees. This function needs some work
+(it must use the d parameter to work out which way to rotate and how much - 1
+rotates clockwise, -1 counter-clockwise by 90 degrees, 2 or -2 180 degrees etc.)
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+ImlibImage *Imlib_create_image_from_data(ImlibData *id, unsigned char *data, unsigned char *alpha, int w, int h);
+GdkImlibImage *gdk_imlib_create_image_from_data(unsigned char *data, unsigned char *alpha, gint w, gint h);
+</td></tr></table></center>
+<p>
+This function take a pointer to 24-bit RGB data (in the format RGBRGBRGB)
+and creates an image of size w x h out of it that can then be used by
+Imlib's routines for rendering. The pointer to the alpha data is currently
+unused and is there for future use. If successful it returns a pointer to
+the image, or NULL of unsuccessful. The data pointed to is copied into the
+image. This means you may free or destroy this original data or do with it
+as you see fit without affecting Imlib's image.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+ImlibImage *Imlib_clone_image(ImlibData *id, ImlibImage *im);
+GdkImlibImage *gdk_imlib_clone_image(GdkImlibImage *im);
+</td></tr></table></center>
+<p>
+This function makes a duplicate copy of the image pointed to. If
+unsuccessful it returns NULL, otherwise it returns a pointer to the new image.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+ImlibImage *Imlib_clone_scaled_image(ImlibData *id, ImlibImage *im, int w, int h);
+GdkImlibImage *gdk_imlib_clone_scaled_image(GdkImlibImage *im, int w, int h);
+</td></tr></table></center>
+<p>
+This Function creates a duplicate image scaled to the size w x h of the
+image pointed to - the 24-bit data is what is scaled. If successful it
+returns a pointer to the new image or NULL if not.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+int Imlib_get_fallback(ImlibData *id);
+gint gdk_imlib_get_fallback();
+</td></tr></table></center>
+<p>
+This function gets the status of ImageMagick and NETPBM fallback mechanisms.
+1 means they are active, 0 means they are not.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void Imlib_set_fallback(ImlibData *id, int fallback);
+void gdk_imlib_set_fallback(gint fallback);
+</td></tr></table></center>
+<p>
+This function sets the state of the ImageMagick and NETPBM fallback
+mechanisms. 1 makes them active, 0 deactivates them.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+Visual *Imlib_get_visual(ImlibData *id);
+GdkVisual *gdk_imlib_get_visual();
+</td></tr></table></center>
+<p>
+This function returns the Visual that Imlib has decided to use (accoridng to
+imrc and XServer capabilities).
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+Colormap Imlib_get_colormap(ImlibData *id);
+GdkColormap *gdk_imlib_get_colormap();
+</td></tr></table></center>
+<p>
+This function returns the Colormap that Imlib has chosen to use for its
+visual.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+char *Imlib_get_sysconfig(ImlibData *id);
+gchar *gdk_imlib_get_sysconfig();
+</td></tr></table></center>
+<p>
+This function returns a pointer to a copy of the path to the system imrc
+file. When finished you should free this string.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+ImlibImage *Imlib_create_image_from_xpm_data(ImlibData *id, char **data);
+GdkImlibImage *gdk_imlib_create_image_from_xpm_data(char **data);
+</td></tr></table></center>
+<p>
+This function creates an Imlib image out of an inlined XPM image
+(ie. #include "file.xpm"). data is the pointer to the XPM data.
+<p>
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+gint gdk_imlib_data_to_pixmap(char **data, GdkPixmap **pmap, GdkBitmap **mask);
+int Imlib_data_to_pixmap(ImlibData *id, char **data, Pixmap *pmap, Pixmap *mask);
+</td></tr></table></center>
+<p>
+This function creates a pixmap (and optionally a mask) out of the data
+pointed to by data. This data is in the form of an XPM file that has been
+included into the source (eg #include "file.xpm"). If the XPM data has no
+transparency the mask is set to 0 or NULL. The pmap is set to the pixmap
+created. If the operation fails 0 is returned, otherwise 1 is returned.
+<p>
+<hr>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void gdk_imlib_crop_image(GdkImlibImage *im, gint x, gint y, gint w, gint h);
+void Imlib_crop_image(ImlibData *id, ImlibImage *im, int x, int y, int w, int h);
+</td></tr></table></center>
+<p>
+When called, this function will crop out the section of the 24-bit original
+image specified by the rectangle with its top-left corner at (x,y) and with
+width w and height h in pixels. These pixels are pixels in the original
+24-bit data held in the image structure, not a scaled down or up rendered
+version.
+<p>
+<hr>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+GdkImlibImage *gdk_imlib_crop_and_clone_image(GdkImlibImage *im, gint x, gint y, gint w, gint h);
+ImlibImage *Imlib_crop_and_clone_image(ImlibData *id, ImlibImage *im, int x, int y, int w, int h);
+</td></tr></table></center>
+<p>
+When called, this function will crop out the section of the 24-bit original
+image specified by the rectangle with its top-left corner at (x,y) and with
+width w and height h in pixels. These pixels are pixels in the original
+24-bit data held in the image structure, not a scaled down or up rendered
+version. Instead of modifying the original, it makes a copy of the Image and
+returns that. NULL is returned if the crop fails.
+<p>
+<hr>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+void gdk_imlib_best_color_get(GdkColor *c);
+</td></tr></table></center>
+<p>
+This is a gdk_imlib only API call, as much of GTK and GDK pass GdkColor
+structs around, and so Imlbi will fill the pixel value of the GdkColro and
+set the red, green and blue members to a member form Imlib's palette (unless
+it is in 15bpp or higher and palette remapping sin't forced), thus
+conserving colors wherever possible. In truecolor and higher it will give
+exact matches.
+<p>
+<hr>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+gint gdk_imlib_save_image(GdkImlibImage *im, char *file, GdkImlibSaveInfo *info);
+int Imlib_save_image(ImlibData *id, ImlibImage *im, char *file, ImlibSaveInfo *info);
+</td></tr></table></center>
+<p>
+This function is for those who want brain-dead saving in a single function.
+It will save the image pointed to as the file passed. The extension is used
+to determine filetype to save as, so saving as image.jpg will save as a jpeg,
+or saving as file.png will save as a png file etc. The info pointer can be
+NULL, in which case the image will be saved with certain settings if the
+format supports it. for example a jpeg image will always be saved at 80%
+quality unless you provide a pointer to this structre and set the quality
+member to a value from 0 to 256, 256 being 100% quality, 0 being 0% quality.
+Only jpeg images use this member. The other members of the info structure are
+used for postscript saving, so if you plan to output as a postscript, file
+set the members in the structure. The scaling member is a value, with 1024
+meaning "scale the image to maximum size on paper", 512 meaning "half the paper
+size" and 0 meaning zero size. you can use larger values, but the image will
+be clipped to the border of your paper. The color member is either 0 or 1 -
+1 meaning save as color, 0 meaning save as grayscale. the x and
+yjustification members specify a justification in the x and y directions (on
+paper relative to the bottom-left of the page) - 1024 meaning right or top
+justify, 0 meaning left or bottom justify. Using values inbetween (like
+512,512) will give center justification or many variations inbetween.
+<p>
+The page_size member can be one of PAGE_SIZE_EXECUTIVE, PAGE_SIZE_LETTER,
+PAGE_SIZE_LEGAL, PAGE_SIZE_A4, PAGE_SIZE_A3, PAGE_SIZE_A5, or
+PAGE_SIZE_FOLIO. This specifies the page size for the postscript output.
+<p>
+<hr>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+GdkImlibImage *gdk_imlib_create_image_from_drawable(GdkWindow *gwin, GdkBitmap *gmask, int x, int y, int width, int height);
+ImlibImage *Imlib_create_image_from_drawable(ImlibData *id, Drawable win, Pixmap mask, int x, int y, int width, int height);
+</td></tr></table></center>
+<p>
+These functions create an Imlib Image out of an X drawable. The Drawable
+(win or gwin) is either a pixmap or a window. The mask is a mask pixmap
+(optional for creating the mask for the image - currently unused - reserved
+for future use). X, y, width and height describe a rectangle inside the
+drawable (x, and y being relative to the drawable's top-left corner). This
+function, if successful will return a pointer to an image (NOTE to advanced
+programmers - this function internally performs server grabs - it means if
+you had a grab before this function you will no longer have it afterwards.
+This is necessary to avoid race conditions that could kill your client).
+<p>
+<hr>
+<p>
+Here are some data types that you may be interested in (note I have only
+listed the structure members that you should view or play with. It is not
+advisable to play with any structure members, but inspecting them is fine).
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+typedef struct _ImlibBorder
+{
+ int left,right;
+ int top,bottom;
+} ImlibBorder;
+
+typedef struct _GdkImlibBorder
+{
+ gint left,right;
+ gint top,bottom;
+} GdkImlibBorder;
+</td></tr></table></center>
+<p>
+This is the structure containing the border pixel settings in pixels from
+their respective sides. Normally all images have borders of 0,0,0,0.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+typedef struct _ImlibColor
+{
+ int r,g,b;
+} ImlibColor;
+
+typedef struct _GdkImlibColor
+{
+ gint r,g,b;
+} GdkImlibColor;
+</td></tr></table></center>
+<p>
+The r,g and b members are ints in the range 0 - 255. If any value is -1, and
+this is used to set or get that shape color, the shape color is either off,
+or will be turned off.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+typedef struct _ImlibColorModifier
+{
+ int gamma;
+ int brightness;
+ int contrast;
+} ImlibColorModifier;
+
+typedef struct _GdkImlibColorModifier
+{
+ gint gamma;
+ gint brightness;
+ gint contrast;
+} GdkImlibColorModifier;
+</td></tr></table></center>
+<p>
+The members of this structure are fairly self-evident. They are integers,
+with 256 being taken as a value of 1.0. Multiply your gamma, brightness and
+contrast values by 256 to get a value to put in these structures.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+typedef struct _ImlibImage
+{
+ int rgb_width,rgb_height;
+ unsigned char *rgb_data;
+ unsigned char *alpha_data;
+ char *filename;
+} ImlibImage;
+
+typedef struct _GdkImlibImage
+{
+ gint rgb_width,rgb_height;
+ unsigned char *rgb_data;
+ unsigned char *alpha_data;
+ gchar *filename;
+} GdkImlibImage;
+</td></tr></table></center>
+<p>
+These are the image data structures. You may read all these data members,
+and you may edit the data that rgb_data and alpha_data point to. Remember
+that if you modify this data to call Imlib_apply_modifiers_to_rgb or
+gdk_imlib_apply_modifiers_to_rgb to dirty the pixmaps in the cache. You may
+not free this data or change the pointer. Currently the alpha_data member is
+unused and will remain NULL. Setting it to anything else may produce
+unexpected results.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+typedef struct _ImlibSaveInfo
+{
+ int quality;
+ int scaling;
+ int xjustification;
+ int yjustification;
+ int page_size;
+ char color;
+} ImlibSaveInfo;
+
+typedef struct _GdkImlibSaveInfo
+{
+ int quality;
+ int scaling;
+ int xjustification;
+ int yjustification;
+ int page_size;
+ char color;
+} GdkImlibSaveInfo;
+</td></tr></table></center>
+<p>
+These are the ImlibSaveInfo data structs - they may be expanded in future.
+Their use is described above in the imlib_save_image function.
+<p>
+<center><table width=100% border=1><tr><td bgcolor=#ffffff><pre>
+typedef struct _ImlibData
+{
+ struct _xdata
+ {
+ Display *disp;
+ int screen;
+ Window root;
+ Visual *visual;
+ int depth;
+ } x;
+} ImlibData;
+</td></tr></table></center>
+<p>
+This data structure is not visible in the GDK version of Imlib. It is
+expected for the Xlib version, that all applications that will place pixmaps
+in their windows, create those windows with the depth and visual in Imlib's
+ImlibData - Imlib hunts and chooses the best quality visual on the Xserver
+for its rendering. If you do not use this visual and depth the results are
+implementation dependent - ie, may vary between Xservers.
+</font>
+</body>
+</html>