[comp.graphics] Fuzzy BitMap routines, GIF, PCX, Sun, Amiga

mlm@nl.cs.cmu.edu (Michael L. Mauldin) (02/19/89)

In article <634@rpi.edu>, mcintyre@turing.cs.rpi.edu (David McIntyre) writes:
> 
> I am about to start programming conversion utilities between:
> GIF, TIFF, Sun Rasterfile, Pbm
> 
> Before I start doing this, has someone already produced public domain
> sources for these tasks?  

Yes (well, mostly).  The alpha test release of the FBM package is now
avilable by anonymous FTP (see the end of the message).

************************************************************************
*   Announcing the "Fuzzy BitMap" (or FBM) image manipulation library  *
************************************************************************

The FBM library is now available in Alpha test form to interested
parties.  This package allows manipulation and conversion of a variety
of color and black-and-white image formats.

Philosophy

    Each program can read any of the understood formats, and
    can write any of the understood formats that make sense for
    the image data.

    Programs are designed around specific image operations (sizing,
    scaling, retoning, halftoning, quantizing, etc.), rather than
    simply converting from one format to another.  For example,
    converting a 4bit color GIF file to a 1bit Sun rasterfile
    takes the following operations:
    
        read GIF format
        map color values to greyscale
        adjust aspect ratio (1.2 --> 1.0)
        scale image up to be visible (320x200 --> 640x480 or 1152x864)
        optionally sharpen the image (edge enhancement)
        optionally clean up "snow" in image (flip isolated pixels)
        halftone (Blue noise, Floyd-Steinberg, Jarvis, Threshhold)
        write Sun rasterfile format.

    So there equivalent pipeline of fbm routines would be:
    
    clr2gray < foo.gif | fbnorm | fbext [ args ] | fbhalf [args] > foo.1bit
    
    That way you have maximum control over the resulting image size
    and quality.

Inputs the following file formats

  o Sun rasterfiles (1, 8, or 24 bits, color or greyscale)
  o GIF files (1 to 8 bits, color or greyscale)
  o PCX files
  o PBM rasters
  o Face files (CMU format for 1bit files by Bennet Yee)
  o FBM files (my own format)

    (automatically determines input format, and uncompresses
     files compressed using 'compress')

Outputs the following formats

  o Sun rasterfiles
  o FBM files

  o PBM            (1bit files only)
  o Face format    (1bit files only)

With input converter for

  o raw images (like Amiga Digi-View files)

With output converters for

  o PostScript         (1bit or 8bit greyscale files only)
  o Diablo graphics    (1bit files only)

Operations

  o Extract rectangle (optionally resizing and changing aspect ratio)

  o Change density and contrast (color and greyscale)

  o Rotate  90, 180, or 270 degrees

  o Quantize 24 bit RGB images to 8..256 colors
        Modified Heckbert median cut

  o Halftone greyscale using
        Ulichney's Blue Noise dithering
        Floyd-Steinberg dithering
        Jarvis's Constrained averaging
        Threshholding

  o Edge Sharpening by Digitial Laplacian (color or greyscale)

  o Convert color to greyscale (or compute "grey" colormap
        so greyscale images can be viewed on frame buffers)

  o Compute histograms of greyscale images
    
  o Sample 1bit images to convert to greyscale

Status

    Alpha test release.  "Use at your own risk, bug fixes not
    guaranteed, be happy with minimal documentation."

    Freely available for use, redistribution, incorporation into
    other code.  Just don't make a profit off it or take my name
    off of it.

    Written in C for BSD and Mach Unix Systems.
    Tested on Vaxes, Sun Workstations, and IBM RTs.
    
    Self contained.  Does not require Sun include files or library
    routines to manipulate Sun rasters.

Availability

    Anonymous FTP

    Host:        nl.cs.cmu.edu (128.2.222.56)
    User:        anonymous
    Password:    name@site
    Directory:    /usr/mlm/ftp/
    Filename:    fbm08.tar.Z

    Will be posted to UseNet when the code is stable and
    the documentation is complete and accurate.

Acknowledgements

    GIF read support written by David Koblas.
    Edge detection and pixel cleaning by Gary Sherwin and Michael Mauldin

Rumours

    Future support is rumoured for Amiga IFF files and NeXT TIFF
    files.  MacPaint files may be supported when I can find a
    good spec for the format.

    Also it may someday be able to write all of the formats that
    it can read.

    All that is needed to incorporate a new format is to write a routine
    that reads the given image into memory and one that writes it out
    again.  I will incorporate other code on a "whenever I'm not working
    on my thesis" basis.

--
Michael L. Mauldin (Fuzzy)		School of Computer Science
ARPA: Michael.Mauldin@NL.CS.CMU.EDU	Carnegie Mellon University
Phone: (412) 268-3065			Pittsburgh, PA  15213-3890
--