Class DiffusionDither

java.lang.Object
com.twelvemonkeys.image.DiffusionDither
All Implemented Interfaces:
BufferedImageOp, RasterOp

public class DiffusionDither extends Object implements BufferedImageOp, RasterOp
This BufferedImageOp/RasterOp implements basic Floyd-Steinberg error-diffusion algorithm for dithering.

The weights used are 7/16, 3/16, 5/16 and 1/16, distributed like this:

Floyd-Steinberg error-diffusion weights
 x7/16
3/165/161/16

See Computer Graphics (Foley et al.) for more information.

Version:
$Id: DiffusionDither.java#1 $
Author:
Harald Kuhr, last modified by $Author: haku $
  • Field Details

  • Constructor Details

    • DiffusionDither

      public DiffusionDither(IndexColorModel pICM)
      Creates a DiffusionDither, using the given IndexColorModel for dithering into.
      Parameters:
      pICM - an IndexColorModel.
    • DiffusionDither

      public DiffusionDither()
      Creates a DiffusionDither, with no fixed IndexColorModel. The color model will be generated for each filtering, unless the destination image already has an IndexColorModel.
  • Method Details

    • setAlternateScans

      public void setAlternateScans(boolean pUse)
      Sets the scan mode. If the parameter is true, error distribution for every even line will be left-to-right, while odd lines will be right-to-left. The default is true.
      Parameters:
      pUse - true if scan mode should be alternating left/right
    • createCompatibleDestImage

      public final BufferedImage createCompatibleDestImage(BufferedImage pSource, ColorModel pDestCM)
      Creates a compatible BufferedImage to dither into. Only IndexColorModel allowed.
      Specified by:
      createCompatibleDestImage in interface BufferedImageOp
      Returns:
      a compatible BufferedImage
      Throws:
      ImageFilterException - if pDestCM is not null or an instance of IndexColorModel.
    • createCompatibleDestRaster

      public final WritableRaster createCompatibleDestRaster(Raster pSrc)
      Creates a compatible Raster to dither into. Only IndexColorModel allowed.
      Specified by:
      createCompatibleDestRaster in interface RasterOp
      Parameters:
      pSrc - the source raster
      Returns:
      a WritableRaster
    • createCompatibleDestRaster

      public final WritableRaster createCompatibleDestRaster(Raster pSrc, IndexColorModel pIndexColorModel)
      Creates a compatible Raster to dither into.
      Parameters:
      pSrc - the source raster.
      pIndexColorModel - the index color model used to create a Raster.
      Returns:
      a WritableRaster
    • getBounds2D

      public final Rectangle2D getBounds2D(BufferedImage pSrc)
      Returns the bounding box of the filtered destination image. Since this is not a geometric operation, the bounding box does not change.
      Specified by:
      getBounds2D in interface BufferedImageOp
      Parameters:
      pSrc - the BufferedImage to be filtered
      Returns:
      the bounds of the filtered definition image.
    • getBounds2D

      public final Rectangle2D getBounds2D(Raster pSrc)
      Returns the bounding box of the filtered destination Raster. Since this is not a geometric operation, the bounding box does not change.
      Specified by:
      getBounds2D in interface RasterOp
      Parameters:
      pSrc - the Raster to be filtered
      Returns:
      the bounds of the filtered definition Raster.
    • getPoint2D

      public final Point2D getPoint2D(Point2D pSrcPt, Point2D pDstPt)
      Returns the location of the destination point given a point in the source. If dstPt is not null, it will be used to hold the return value. Since this is not a geometric operation, the srcPt will equal the dstPt.
      Specified by:
      getPoint2D in interface BufferedImageOp
      Specified by:
      getPoint2D in interface RasterOp
      Parameters:
      pSrcPt - a Point2D that represents a point in the source image
      pDstPt - a Point2Dthat represents the location in the destination
      Returns:
      the Point2D in the destination that corresponds to the specified point in the source.
    • getRenderingHints

      public final RenderingHints getRenderingHints()
      Returns the rendering mHints for this op.
      Specified by:
      getRenderingHints in interface BufferedImageOp
      Specified by:
      getRenderingHints in interface RasterOp
      Returns:
      the RenderingHints object associated with this op.
    • filter

      public final BufferedImage filter(BufferedImage pSource, BufferedImage pDest)
      Performs a single-input/single-output dither operation, applying basic Floyd-Steinberg error-diffusion to the image.
      Specified by:
      filter in interface BufferedImageOp
      Parameters:
      pSource - the source image
      pDest - the destination image
      Returns:
      the destination image, or a new image, if pDest was null.
    • filter

      public final WritableRaster filter(Raster pSource, WritableRaster pDest)
      Performs a single-input/single-output dither operation, applying basic Floyd-Steinberg error-diffusion to the image.
      Specified by:
      filter in interface RasterOp
      Parameters:
      pSource - the source raster, assumed to be in sRGB
      pDest - the destination raster, may be null
      Returns:
      the destination raster, or a new raster, if pDest was null.
    • filter

      public final WritableRaster filter(Raster pSource, WritableRaster pDest, IndexColorModel pColorModel)
      Performs a single-input/single-output dither operation, applying basic Floyd-Steinberg error-diffusion to the image.
      Parameters:
      pSource - the source raster, assumed to be in sRGB
      pDest - the destination raster, may be null
      pColorModel - the indexed color model to use
      Returns:
      the destination raster, or a new raster, if pDest was null.