FilteredImageSource (Java SE 26 & JDK 26)
Description: declaration: module: java.desktop, package: java.awt.image, class: FilteredImageSource
Keywords: java.awt.image.FilteredImageSource class

# Class FilteredImageSource

java.lang.Object
java.awt.image.FilteredImageSource

All Implemented Interfaces:
  `ImageProducer`

public class FilteredImageSource extends Object implements ImageProducer
This class is an implementation of the ImageProducer interface which takes an existing image and a filter object and uses them to produce image data for a new filtered version of the original image. Furthermore, `FilteredImageSource` is safe for use by multiple threads. Here is an example which filters an image by swapping the red and blue components:

         Image src = getImage("doc:///demo/images/duke/T1.gif");
         ImageFilter colorfilter = new RedBlueSwapFilter();
         Image img = createImage(new FilteredImageSource(src.getSource(),
                                                         colorfilter));

See Also:
  - `ImageProducer`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `FilteredImageSource(ImageProducer orig, ImageFilter imgf)`
  Constructs an ImageProducer object from an existing ImageProducer and a filter object.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addConsumer(ImageConsumer ic)`
  Adds the specified `ImageConsumer` to the list of consumers interested in data for the filtered image.
  `boolean`
  `isConsumer(ImageConsumer ic)`
  Determines whether an ImageConsumer is on the list of consumers currently interested in data for this image.
  `void`
  `removeConsumer(ImageConsumer ic)`
  Removes an ImageConsumer from the list of consumers interested in data for this image.
  `void`
  `requestTopDownLeftRightResend(ImageConsumer ic)`
  Requests that a given ImageConsumer have the image data delivered one more time in top-down, left-right order.
  `void`
  `startProduction(ImageConsumer ic)`
  Starts production of the filtered image.

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `boolean`
  `equals(Object obj)`
  Indicates whether some other object is "equal to" this one.
  `protected void`
  `finalize()`
  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<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `int`
  `hashCode()`
  Returns a hash code value for this object.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `String`
  `toString()`
  Returns a string representation of the object.
  `final void`
  `wait()`
  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

  - ### FilteredImageSource

    public FilteredImageSource(ImageProducer orig, ImageFilter imgf)
    Constructs an ImageProducer object from an existing ImageProducer and a filter object.
    Parameters:
      `orig` - the specified `ImageProducer`
      `imgf` - the specified `ImageFilter`
    See Also:
      - `ImageFilter`
      - `Component.createImage(ImageProducer)`

- ## Method Details

  - ### addConsumer

    public void addConsumer(ImageConsumer ic)
    Adds the specified `ImageConsumer` to the list of consumers interested in data for the filtered image. An instance of the original `ImageFilter` is created (using the filter's `getFilterInstance` method) to manipulate the image data for the specified `ImageConsumer`. The newly created filter instance is then passed to the `addConsumer` method of the original `ImageProducer`.

    This method is public as a side effect of this class implementing the `ImageProducer` interface. It should not be called from user code, and its behavior if called from user code is unspecified.

    Specified by:
      `addConsumer` in interface `ImageProducer`
    Parameters:
      `ic` - the consumer for the filtered image
    See Also:
      - `ImageConsumer`

  - ### isConsumer

    public boolean isConsumer(ImageConsumer ic)
    Determines whether an ImageConsumer is on the list of consumers currently interested in data for this image.

    This method is public as a side effect of this class implementing the `ImageProducer` interface. It should not be called from user code, and its behavior if called from user code is unspecified.

    Specified by:
      `isConsumer` in interface `ImageProducer`
    Parameters:
      `ic` - the specified `ImageConsumer`
    Returns:
      true if the ImageConsumer is on the list; false otherwise
    See Also:
      - `ImageConsumer`

  - ### removeConsumer

    public void removeConsumer(ImageConsumer ic)
    Removes an ImageConsumer from the list of consumers interested in data for this image.

    This method is public as a side effect of this class implementing the `ImageProducer` interface. It should not be called from user code, and its behavior if called from user code is unspecified.

    Specified by:
      `removeConsumer` in interface `ImageProducer`
    Parameters:
      `ic` - the specified `ImageConsumer`
    See Also:
      - `ImageConsumer`

  - ### startProduction

    public void startProduction(ImageConsumer ic)
    Starts production of the filtered image. If the specified `ImageConsumer` isn't already a consumer of the filtered image, an instance of the original `ImageFilter` is created (using the filter's `getFilterInstance` method) to manipulate the image data for the `ImageConsumer`. The filter instance for the `ImageConsumer` is then passed to the `startProduction` method of the original `ImageProducer`.

    This method is public as a side effect of this class implementing the `ImageProducer` interface. It should not be called from user code, and its behavior if called from user code is unspecified.

    Specified by:
      `startProduction` in interface `ImageProducer`
    Parameters:
      `ic` - the consumer for the filtered image
    See Also:
      - `ImageConsumer`

  - ### requestTopDownLeftRightResend

    public void requestTopDownLeftRightResend(ImageConsumer ic)
    Requests that a given ImageConsumer have the image data delivered one more time in top-down, left-right order. The request is handed to the ImageFilter for further processing, since the ability to preserve the pixel ordering depends on the filter.

    This method is public as a side effect of this class implementing the `ImageProducer` interface. It should not be called from user code, and its behavior if called from user code is unspecified.

    Specified by:
      `requestTopDownLeftRightResend` in interface `ImageProducer`
    Parameters:
      `ic` - the specified `ImageConsumer`
    See Also:
      - `ImageConsumer`