deadbeef.Tools
Class QuantizeFilter

java.lang.Object
  extended by deadbeef.Tools.QuantizeFilter

public class QuantizeFilter
extends java.lang.Object

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.

Author:
Jerry Huxtable - modified for BDSup2Sub by 0xdeadbeef (extended to alpha component)

Constructor Summary
QuantizeFilter()
           
 
Method Summary
 boolean getDither()
          Return the dithering setting
 int getNumColors()
          Get the number of colors to quantize to.
 boolean getSerpentine()
          Return the serpentine setting
 int[] quantize(int[] inPixels, byte[] outPixels, int width, int height, int numColors, boolean dither, boolean serpentine)
          Quantize picture
 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.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

QuantizeFilter

public QuantizeFilter()
Method Detail

setNumColors

public void setNumColors(int numColors)
Set the number of colors to quantize to.

Parameters:
numColors - Number of colors. The default is 256.

getNumColors

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

Returns:
Number of colors.

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

getDither

public boolean getDither()
Return the dithering setting

Returns:
Current dithering setting

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

getSerpentine

public boolean getSerpentine()
Return the serpentine setting

Returns:
Current serpentine setting

quantize

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

Parameters:
inPixels - Array of RGBA pixels to quantize
outPixels - Array with quantized palette entries
width - Width of image
height - Height of image
numColors - Number of colors used
dither - Use dithering?
serpentine - Use serpentine for dithering?
Returns:
Integer array containing palette information