com.twelvemonkeys.image
Class DiffusionDither

java.lang.Object
  extended by 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:

 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 Summary
protected  IndexColorModel indexColorModel
           
 
Constructor Summary
DiffusionDither()
          Creates a DiffusionDither, with no fixed IndexColorModel.
DiffusionDither(IndexColorModel pICM)
          Creates a DiffusionDither, using the given IndexColorModel for dithering into.
 
Method Summary
 BufferedImage createCompatibleDestImage(BufferedImage pSource, ColorModel pDestCM)
          Creates a compatible BufferedImage to dither into.
 WritableRaster createCompatibleDestRaster(Raster pSrc)
          Creates a compatible Raster to dither into.
 WritableRaster createCompatibleDestRaster(Raster pSrc, IndexColorModel pIndexColorModel)
          Creates a compatible Raster to dither into.
 BufferedImage filter(BufferedImage pSource, BufferedImage pDest)
          Performs a single-input/single-output dither operation, applying basic Floyd-Steinberg error-diffusion to the image.
 WritableRaster filter(Raster pSource, WritableRaster pDest)
          Performs a single-input/single-output dither operation, applying basic Floyd-Steinberg error-diffusion to the image.
 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.
 Rectangle2D getBounds2D(BufferedImage pSrc)
          Returns the bounding box of the filtered destination image.
 Rectangle2D getBounds2D(Raster pSrc)
          Returns the bounding box of the filtered destination Raster.
 Point2D getPoint2D(Point2D pSrcPt, Point2D pDstPt)
          Returns the location of the destination point given a point in the source.
 RenderingHints getRenderingHints()
          Returns the rendering mHints for this op.
 void setAlternateScans(boolean pUse)
          Sets the scan mode.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

indexColorModel

protected final IndexColorModel indexColorModel
Constructor Detail

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 Detail

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.


Copyright © 2015. All Rights Reserved.