com.jhlabs.image

Class QuantizeFilter

Implemented Interfaces:
BufferedImageOp, Cloneable

public class QuantizeFilter
extends WholeImageFilter

A filter which quantizes an image to a set number of colors - useful for producing images which are to be encoded using an index color model. The filter can perform Floyd-Steinberg error-diffusion dithering if required. At present, the quantization is done using an octtree algorithm but I eventually hope to add more quantization methods such as median cut. Note: at present, the filter produces an image which uses the RGB color model (because the application it was written for required it). I hope to extend it to produce an IndexColorModel by request.

Field Summary

protected static int[]
matrix
Floyd-Steinberg dithering matrix.

Fields inherited from class com.jhlabs.image.WholeImageFilter

originalSpace, transformedSpace

Method Summary

protected int[]
filterPixels(int width, int height, int[] inPixels, Rectangle transformedSpace)
Actually filter the pixels.
boolean
getDither()
Return the dithering setting
int
getNumColors()
Get the number of colors to quantize to.
boolean
getSerpentine()
Return the serpentine setting
void
quantize(int[] inPixels, int[] outPixels, int width, int height, int numColors, boolean dither, boolean serpentine)
void
setDither(boolean dither)
Set whether to use dithering or not.
void
setNumColors(int numColors)
Set the number of colors to quantize to.
void
setSerpentine(boolean serpentine)
Set whether to use a serpentine pattern for return or not.
String
toString()

Methods inherited from class com.jhlabs.image.WholeImageFilter

filter, filterPixels, transformSpace

Methods inherited from class com.jhlabs.image.AbstractBufferedImageOp

clone, createCompatibleDestImage, getBounds2D, getPoint2D, getRGB, getRenderingHints, setRGB

Field Details

matrix

protected static final int[] matrix
Floyd-Steinberg dithering matrix.

Method Details

filterPixels

protected int[] filterPixels(int width,
                             int height,
                             int[] inPixels,
                             Rectangle transformedSpace)
Actually filter the pixels.
Overrides:
filterPixels in interface WholeImageFilter
Parameters:
width - the image width
height - the image height
inPixels - the image pixels
transformedSpace - the output bounds
Returns:
the output pixels

getDither

public boolean getDither()
Return the dithering setting
Returns:
the current setting

getNumColors

public int getNumColors()
Get the number of colors to quantize to.
Returns:
the number of colors.

getSerpentine

public boolean getSerpentine()
Return the serpentine setting
Returns:
the current setting

quantize

public void quantize(int[] inPixels,
                     int[] outPixels,
                     int width,
                     int height,
                     int numColors,
                     boolean dither,
                     boolean serpentine)

setDither

public void setDither(boolean dither)
Set whether to use dithering or not. If not, the image is posterized.
Parameters:
dither - true to use dithering

setNumColors

public void setNumColors(int numColors)
Set the number of colors to quantize to.
Parameters:
numColors - the number of colors. The default is 256.

setSerpentine

public void setSerpentine(boolean serpentine)
Set whether to use a serpentine pattern for return or not. This can reduce 'avalanche' artifacts in the output.
Parameters:
serpentine - true to use serpentine pattern

toString

public String toString()