Class AreaAveragingScaleFilter

All Implemented Interfaces:
ImageConsumer, Cloneable

public class AreaAveragingScaleFilter extends ReplicateScaleFilter
An ImageFilter class for scaling images using a simple area averaging algorithm that produces smoother results than the nearest neighbor algorithm.

This class extends the basic ImageFilter Class to scale an existing image and provide a source for a new image containing the resampled image. The pixels in the source image are blended to produce pixels for an image of the specified size. The blending process is analogous to scaling up the source image to a multiple of the destination size using pixel replication and then scaling it back down to the destination size by simply averaging all the pixels in the supersized image that fall within a given pixel of the destination image. If the data from the source is not delivered in TopDownLeftRight order then the filter will back off to a simple pixel replication behavior and utilize the requestTopDownLeftRightResend() method to refilter the pixels in a better way at the end.

It is meant to be used in conjunction with a FilteredImageSource object to produce scaled versions of existing images. Due to implementation dependencies, there may be differences in pixel values of an image filtered on different platforms.

See Also:
  • Field Summary

    Fields declared in class ReplicateScaleFilter

    destHeight, destWidth, outpixbuf, srccols, srcHeight, srcrows, srcWidth
    Modifier and Type
    Field
    Description
    protected int
    The target height to scale the image.
    protected int
    The target width to scale the image.
    protected Object
    A byte array initialized with a size of ReplicateScaleFilter.destWidth and used to deliver a row of pixel data to the ImageConsumer.
    protected int[]
    An int array containing information about a column of pixels.
    protected int
    The height of the source image.
    protected int[]
    An int array containing information about a row of pixels.
    protected int
    The width of the source image.

    Fields declared in class ImageFilter

    consumer
    Modifier and Type
    Field
    Description
    protected ImageConsumer
    The consumer of the particular image data stream for which this instance of the ImageFilter is filtering data.

    Fields declared in interface ImageConsumer

    COMPLETESCANLINES, IMAGEABORTED, IMAGEERROR, RANDOMPIXELORDER, SINGLEFRAME, SINGLEFRAMEDONE, SINGLEPASS, STATICIMAGEDONE, TOPDOWNLEFTRIGHT
    Modifier and Type
    Field
    Description
    static final int
    The pixels will be delivered in (multiples of) complete scanlines at a time.
    static final int
    The image creation process was deliberately aborted.
    static final int
    An error was encountered while producing the image.
    static final int
    The pixels will be delivered in a random order.
    static final int
    The image contain a single static image.
    static final int
    One frame of the image is complete but there are more frames to be delivered.
    static final int
    The pixels will be delivered in a single pass.
    static final int
    The image is complete and there are no more pixels or frames to be delivered.
    static final int
    The pixels will be delivered in top-down, left-to-right order.
  • Constructor Summary

    Constructors
    Constructor
    Description
    AreaAveragingScaleFilter(int width, int height)
    Constructs an AreaAveragingScaleFilter that scales the pixels from its source Image as specified by the width and height parameters.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    setHints(int hints)
    Detect if the data is being delivered with the necessary hints to allow the averaging algorithm to do its work.
    void
    setPixels(int x, int y, int w, int h, ColorModel model, byte[] pixels, int off, int scansize)
    Combine the components for the delivered byte pixels into the accumulation arrays and send on any averaged data for rows of pixels that are complete.
    void
    setPixels(int x, int y, int w, int h, ColorModel model, int[] pixels, int off, int scansize)
    Combine the components for the delivered int pixels into the accumulation arrays and send on any averaged data for rows of pixels that are complete.

    Methods declared in class ReplicateScaleFilter

    setDimensions, setProperties
    Modifier and Type
    Method
    Description
    void
    setDimensions(int w, int h)
    Override the dimensions of the source image and pass the dimensions of the new scaled size to the ImageConsumer.
    void
    Passes along the properties from the source object after adding a property indicating the scale applied.

    Methods declared in class ImageFilter

    clone, getFilterInstance, imageComplete, resendTopDownLeftRight, setColorModel
    Modifier and Type
    Method
    Description
    Clones this object.
    Returns a unique instance of an ImageFilter object which will actually perform the filtering for the specified ImageConsumer.
    void
    imageComplete(int status)
    Filters the information provided in the imageComplete method of the ImageConsumer interface.
    void
    Responds to a request for a TopDownLeftRight (TDLR) ordered resend of the pixel data from an ImageConsumer.
    void
    Filter the information provided in the setColorModel method of the ImageConsumer interface.

    Methods declared in class Object

    equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    Modifier and Type
    Method
    Description
    boolean
    Indicates whether some other object is "equal to" this one.
    protected void
    Deprecated, for removal: This API element is subject to removal in a future version.
    Finalization is deprecated and subject to removal in a future release.
    final Class<?>
    Returns the runtime class of this Object.
    int
    Returns a hash code value for this object.
    final void
    Wakes up a single thread that is waiting on this object's monitor.
    final void
    Wakes up all threads that are waiting on this object's monitor.
    Returns a string representation of the object.
    final void
    Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
    final void
    wait(long timeoutMillis)
    Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
    final void
    wait(long timeoutMillis, int nanos)
    Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  • Constructor Details

    • AreaAveragingScaleFilter

      public AreaAveragingScaleFilter(int width, int height)
      Constructs an AreaAveragingScaleFilter that scales the pixels from its source Image as specified by the width and height parameters.
      Parameters:
      width - the target width to scale the image
      height - the target height to scale the image
      Throws:
      IllegalArgumentException - if width equals zero or height equals zero
  • Method Details

    • setHints

      public void setHints(int hints)
      Detect if the data is being delivered with the necessary hints to allow the averaging algorithm to do its work.

      Note: This method is intended to be called by the ImageProducer of the Image whose pixels are being filtered. Developers using this class to filter pixels from an image should avoid calling this method directly since that operation could interfere with the filtering operation.

      Specified by:
      setHints in interface ImageConsumer
      Overrides:
      setHints in class ImageFilter
      Parameters:
      hints - a set of hints that the ImageConsumer uses to process the pixels
      See Also:
    • setPixels

      public void setPixels(int x, int y, int w, int h, ColorModel model, byte[] pixels, int off, int scansize)
      Combine the components for the delivered byte pixels into the accumulation arrays and send on any averaged data for rows of pixels that are complete. If the correct hints were not specified in the setHints call then relay the work to our superclass which is capable of scaling pixels regardless of the delivery hints.

      Note: This method is intended to be called by the ImageProducer of the Image whose pixels are being filtered. Developers using this class to filter pixels from an image should avoid calling this method directly since that operation could interfere with the filtering operation.

      Specified by:
      setPixels in interface ImageConsumer
      Overrides:
      setPixels in class ReplicateScaleFilter
      Parameters:
      x - the X coordinate of the upper-left corner of the area of pixels to be set
      y - the Y coordinate of the upper-left corner of the area of pixels to be set
      w - the width of the area of pixels
      h - the height of the area of pixels
      model - the specified ColorModel
      pixels - the array of pixels
      off - the offset into the pixels array
      scansize - the distance from one row of pixels to the next in the pixels array
      See Also:
    • setPixels

      public void setPixels(int x, int y, int w, int h, ColorModel model, int[] pixels, int off, int scansize)
      Combine the components for the delivered int pixels into the accumulation arrays and send on any averaged data for rows of pixels that are complete. If the correct hints were not specified in the setHints call then relay the work to our superclass which is capable of scaling pixels regardless of the delivery hints.

      Note: This method is intended to be called by the ImageProducer of the Image whose pixels are being filtered. Developers using this class to filter pixels from an image should avoid calling this method directly since that operation could interfere with the filtering operation.

      Specified by:
      setPixels in interface ImageConsumer
      Overrides:
      setPixels in class ReplicateScaleFilter
      Parameters:
      x - the X coordinate of the upper-left corner of the area of pixels to be set
      y - the Y coordinate of the upper-left corner of the area of pixels to be set
      w - the width of the area of pixels
      h - the height of the area of pixels
      model - the specified ColorModel
      pixels - the array of pixels
      off - the offset into the pixels array
      scansize - the distance from one row of pixels to the next in the pixels array
      See Also: