gimp/plug-ins/ifscompose
Manish Singh 5d01581069 Fix a bunch of warnings from Sparse:
2004-11-13  Manish Singh  <yosh@gimp.org>

        Fix a bunch of warnings from Sparse:

        * app/actions/dockable-commands.c
        * app/actions/layers-actions.c
        * app/actions/view-commands.c
        * app/base/pixel-surround.c
        * app/config/gimpconfig-utils.c
        * app/config/gimpscanner.c
        * app/core/gimpbrushgenerated.c
        * app/core/gimpcontainer.c
        * app/core/gimpimage.c
        * app/dialogs/palette-import-dialog.c
        * app/file/gimprecentlist.c
        * app/plug-in/plug-in-params.c
        * app/text/gimptext-compat.c
        * app/text/gimptext-parasite.c
        * app/vectors/gimpbezierstroke.c
        * app/vectors/gimpstroke.c
        * app/widgets/gimpcellrendereraccel.c
        * app/widgets/gimpselectiondata.c
        * app/xcf/xcf.c
        * libgimp/gimp.c
        * libgimpthumb/gimpthumb-utils.c
        * libgimpthumb/gimpthumbnail.c
        * modules/cdisplay_proof.c
        * plug-ins/Lighting/lighting_ui.c
        * plug-ins/common/csource.c
        * plug-ins/common/glasstile.c
        * plug-ins/common/nova.c
        * plug-ins/common/pcx.c
        * plug-ins/common/pnm.c
        * plug-ins/common/randomize.c
        * plug-ins/common/screenshot.c
        * plug-ins/common/sel_gauss.c
        * plug-ins/common/spheredesigner.c
        * plug-ins/common/wind.c
        * plug-ins/gfig/gfig-dialog.c
        * plug-ins/gfig/gfig-dobject.c
        * plug-ins/gimpressionist/gimpressionist.c
        * plug-ins/ifscompose/ifscompose.c
        * plug-ins/print/gimp_main_window.c
        * plug-ins/print/print.c: Cleanup integer vs. pointer confusion.

        * app/base/temp-buf.c
        * app/dialogs/about-dialog.c
        * plug-ins/common/bumpmap.c
        * plug-ins/common/jigsaw.c
        * plug-ins/gfig/gfig-dobject.c: Cosmetic cleanups.

        * app/config/gimpconfig-deserialize.c
        * app/config/gimpconfig-path.c
        * app/config/gimpconfigwriter.c
        * app/core/gimpgradient.c
        * app/tools/gimpdrawtool.c
        * plug-ins/common/nlfilt.c
        * plug-ins/common/unsharp.c
        * plug-ins/common/zealouscrop.c: Define inline functions before they
        are used.

        * app/core/gimpdrawable-blend.c: PixelRegion definition was changed
        some time ago, but the initialization here didn't change. Fix it.

        * app/plug-in/plug-in-rc.c (plug_in_extra_deserialize): No need to
        assign token twice in a row.

        * libgimpbase/gimpdatafiles.c (gimp_datafiles_read_directories): No
        need to initialize file_data, since the code fills out all the fields.

        * plug-ins/common/CML_explorer.c
        * plug-ins/common/vpropagate.c: Declare function pointers fully.

        * plug-ins/common/grid.c (pix_composite): G_INLINE_FUNC isn't needed,
        we assume we can use the "inline" keyword always.

        * plug-ins/common/psd_save.c
        * plug-ins/common/vinvert.c
        * plug-ins/gfig/gfig-arc.c
        * plug-ins/gfig/gfig-bezier.c
        * plug-ins/gfig/gfig-circle.c
        * plug-ins/gfig/gfig-dialog.c
        * plug-ins/gfig/gfig-dobject.c
        * plug-ins/gfig/gfig-ellipse.c
        * plug-ins/gfig/gfig-line.c
        * plug-ins/gfig/gfig-poly.c
        * plug-ins/gfig/gfig-spiral.c
        * plug-ins/gfig/gfig-star.c
        * plug-ins/gfig/gfig.c
        * plug-ins/gimpressionist/orientmap.c
        * plug-ins/gimpressionist/placement.c
        * plug-ins/gimpressionist/sizemap.c
        * plug-ins/imagemap/imap_grid.c
        * plug-ins/imagemap/imap_main.c
        * plug-ins/imagemap/imap_preferences.c
        * plug-ins/imagemap/imap_settings.c
        * plug-ins/maze/maze.c
        * plug-ins/sel2path/curve.c
        * plug-ins/sel2path/fit.c
        * plug-ins/sel2path/pxl-outline.c
        * plug-ins/sel2path/spline.c
        * plug-ins/xjt/xjt.c: Functions with no args should be declared
        with (void).

        * plug-ins/common/retinex.c (MSRCR): Initialize max_preview to quiet
        the compiler.
2004-11-14 02:50:33 +00:00
..
.cvsignore The .cvsignores should have .libs too 1998-01-09 09:53:59 +00:00
Makefile.am modernized, made a lot of things m4 macros, and made versioning a lot more 2004-01-22 03:51:46 +00:00
README.ifscompose updated link to the tutorial (pointed out by Alan Horkan) and added 2004-11-13 11:47:20 +00:00
ifscompose.c Fix a bunch of warnings from Sparse: 2004-11-14 02:50:33 +00:00
ifscompose.h plug-ins/ifscompose/ifscompose.[ch] use Pango to draw text. 2003-07-01 16:07:13 +00:00
ifscompose_storage.c updated link to the tutorial (pointed out by Alan Horkan) and added 2004-11-13 11:47:20 +00:00
ifscompose_utils.c use G_SQRT2; some coding style cleanups. 2004-06-19 11:06:57 +00:00

README.ifscompose

IfsCompose
----------

IfsCompose is a plug-in for the GIMP that allows
the creation of Iterated Function System fractals by direct
manipulation onscreen of the component transforms.


IFS Fractals
------------

You may be familiar with IFS's from the screen
hack 'Flame'. They are also the basis of fractal image compression.

For a brief introduction to IFS's see Foley and van Dam, et
al,. _Computer Graphics, Principles and Practice_, 2nd Ed., 
(Addison Wesley, 1990).

The standard references in the field are Michael Barnsley's books (though
I haven't looked at them yet):

M. Barnsley, _Fractals Everywhere_, Academic Press Inc., 1988.
M. Barnsley and L. Hurd, _Fractal Image Compression_, Jones and
Bartlett.

Briefly, you take a point and repeatedly apply one of a set of
transformations to it, choosing randomly between them, and plot the
point at each step. An interesting result (the Collage Theorem) says
that if you can find a set of transformations that break up an image
into smaller copies of itself, then the resulting fractal exactly
reproduces the original image.  For example, here is a classic image
of a leaf and the same image with the four component transforms
colored distinctively.

But the best way to appreciate this may to install this program and
try it out. I've extended the basic concept as found in
Foley and van Dam to include transformations in color space as
well as in real space.

Installation
------------
The included Makefile should work with minor modifications on most
systems if you have installed Gimp normally. Put the resulting binary
in ~/.gimp/plug-ins or the system-wide plug-ins directory.

The included files gtkaspectframe.c/.h implement a modified frame
widget that guarantees that the aspect ratio of the child widget
remains constant when the parent is resized. It's sort of specialized,
but if you think it would be useful for other purposes, let me know
and I'll lobby for its inclusion in the standard gtk.

Use
---
The interface is somewhat complex and it may take you a little while
to get the hang of it. (There are 19 parameters for each
transformation in your fractal, after all). The best way to learn is
probably to start by making small changes, and seeing what they
do. Click on the transformations (represented by polygons) in the
design window to manipulate them interactively.

Button-1: rotate/scale
Button-2: distort
Button-3: move

If you hold down shift while clicking, you can select multiple polygons
to apply the transformation to.

Try not to click too near the center of a polygon, as this will
amplify your actions.

Note that if you render onto an image with an alpha channel, the
background will be transparent (very useful for compositing several
fractals), otherwise the background will be the current background.

There are tutorials and some example images at:

 http://www.gtk.org/~otaylor/IfsCompose/ifs_tutorial/tutorial.html
 http://tigert.gimp.org/gimp/ifs-compose/


Have fun!

Owen Taylor