All 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 Details

    • matrix

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

  • Method Details

    • setNumColors

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

      public int getNumColors()
      Get the number of colors to quantize to.
      Returns:
      the 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:
      the current 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:
      the current setting
    • quantize

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

      protected int[] filterPixels(int width, int height, int[] inPixels, Rectangle transformedSpace)
      Description copied from class: WholeImageFilter
      Actually filter the pixels.
      Specified by:
      filterPixels in class WholeImageFilter
      Parameters:
      width - the image width
      height - the image height
      inPixels - the image pixels
      transformedSpace - the output bounds
      Returns:
      the output pixels
    • toString

      public String toString()
      Overrides:
      toString in class Object