# Class RenderableImageOp

java.lang.Object
java.awt.image.renderable.RenderableImageOp

All Implemented Interfaces:
  `RenderableImage`

public class RenderableImageOp extends Object implements RenderableImage
This class handles the renderable aspects of an operation with help from its associated instance of a ContextualRenderedImageFactory.

- ## Field Summary

  ### Fields declared in interface RenderableImage

  `HINTS_OBSERVED`
  Modifier and Type
  Field
  Description
  `static final String`
  `HINTS_OBSERVED`
  String constant that can be used to identify a property on a RenderedImage obtained via the createRendering or createScaledRendering methods.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `RenderableImageOp(ContextualRenderedImageFactory CRIF, ParameterBlock paramBlock)`
  Constructs a `RenderableImageOp` given a ContextualRenderedImageFactory object, and a ParameterBlock containing RenderableImage sources and other parameters.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `RenderedImage`
  `createDefaultRendering()`
  Gets a RenderedImage instance of this image with a default width and height in pixels.
  `RenderedImage`
  `createRendering(RenderContext renderContext)`
  Creates a RenderedImage which represents this RenderableImageOp (including its Renderable sources) rendered according to the given RenderContext.
  `RenderedImage`
  `createScaledRendering(int w, int h, RenderingHints hints)`
  Creates a RenderedImage instance of this image with width w, and height h in pixels.
  `float`
  `getHeight()`
  Gets the height in user coordinate space.
  `float`
  `getMinX()`
  Gets the minimum X coordinate of the rendering-independent image data.
  `float`
  `getMinY()`
  Gets the minimum Y coordinate of the rendering-independent image data.
  `ParameterBlock`
  `getParameterBlock()`
  Returns a reference to the current parameter block.
  `Object`
  `getProperty(String name)`
  Gets a property from the property set of this image.
  `String[]`
  `getPropertyNames()`
  Return a list of names recognized by getProperty.
  `Vector<RenderableImage>`
  `getSources()`
  Returns a vector of RenderableImages that are the sources of image data for this RenderableImage.
  `float`
  `getWidth()`
  Gets the width in user coordinate space.
  `boolean`
  `isDynamic()`
  Returns true if successive renderings (that is, calls to createRendering() or createScaledRendering()) with the same arguments may produce different results.
  `ParameterBlock`
  `setParameterBlock(ParameterBlock paramBlock)`
  Change the current ParameterBlock of the operation, allowing editing of image rendering chains.

  ### 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

  - ### RenderableImageOp

    public RenderableImageOp(ContextualRenderedImageFactory CRIF, ParameterBlock paramBlock)
    Constructs a `RenderableImageOp` given a ContextualRenderedImageFactory object, and a ParameterBlock containing RenderableImage sources and other parameters. Any RenderedImage sources referenced by the ParameterBlock will be ignored.
    Parameters:
      `CRIF` - a ContextualRenderedImageFactory object
      `paramBlock` - a ParameterBlock containing this operation's source images and other parameters necessary for the operation to run.

- ## Method Details

  - ### getSources

    public Vector<RenderableImage> getSources()
    Returns a vector of RenderableImages that are the sources of image data for this RenderableImage. Note that this method may return an empty vector, to indicate that the image has no sources, or null, to indicate that no information is available.
    Specified by:
      `getSources` in interface `RenderableImage`
    Returns:
      a (possibly empty) Vector of RenderableImages, or null.

  - ### getProperty

    public Object getProperty(String name)
    Gets a property from the property set of this image. If the property name is not recognized, java.awt.Image.UndefinedProperty will be returned.
    Specified by:
      `getProperty` in interface `RenderableImage`
    Parameters:
      `name` - the name of the property to get, as a String.
    Returns:
      a reference to the property Object, or the value java.awt.Image.UndefinedProperty.

  - ### getPropertyNames

    public String[] getPropertyNames()
    Return a list of names recognized by getProperty.
    Specified by:
      `getPropertyNames` in interface `RenderableImage`
    Returns:
      a list of property names.

  - ### isDynamic

    public boolean isDynamic()
    Returns true if successive renderings (that is, calls to createRendering() or createScaledRendering()) with the same arguments may produce different results. This method may be used to determine whether an existing rendering may be cached and reused. The CRIF's isDynamic method will be called.
    Specified by:
      `isDynamic` in interface `RenderableImage`
    Returns:
      `true` if successive renderings with the same arguments might produce different results; `false` otherwise.

  - ### getWidth

    public float getWidth()
    Gets the width in user coordinate space. By convention, the usual width of a RenderableImage is equal to the image's aspect ratio (width divided by height).
    Specified by:
      `getWidth` in interface `RenderableImage`
    Returns:
      the width of the image in user coordinates.

  - ### getHeight

    public float getHeight()
    Gets the height in user coordinate space. By convention, the usual height of a RenderedImage is equal to 1.0F.
    Specified by:
      `getHeight` in interface `RenderableImage`
    Returns:
      the height of the image in user coordinates.

  - ### getMinX

    public float getMinX()
    Gets the minimum X coordinate of the rendering-independent image data.
    Specified by:
      `getMinX` in interface `RenderableImage`
    Returns:
      the minimum X coordinate of the rendering-independent image data.

  - ### getMinY

    public float getMinY()
    Gets the minimum Y coordinate of the rendering-independent image data.
    Specified by:
      `getMinY` in interface `RenderableImage`
    Returns:
      the minimum Y coordinate of the rendering-independent image data.

  - ### setParameterBlock

    public ParameterBlock setParameterBlock(ParameterBlock paramBlock)
    Change the current ParameterBlock of the operation, allowing editing of image rendering chains. The effects of such a change will be visible when a new rendering is created from this RenderableImageOp or any dependent RenderableImageOp.
    Parameters:
      `paramBlock` - the new ParameterBlock.
    Returns:
      the old ParameterBlock.
    See Also:
      - `getParameterBlock()`

  - ### getParameterBlock

    public ParameterBlock getParameterBlock()
    Returns a reference to the current parameter block.
    Returns:
      the `ParameterBlock` of this `RenderableImageOp`.
    See Also:
      - `setParameterBlock(ParameterBlock)`

  - ### createScaledRendering

    public RenderedImage createScaledRendering(int w, int h, RenderingHints hints)
    Creates a RenderedImage instance of this image with width w, and height h in pixels. The RenderContext is built automatically with an appropriate usr2dev transform and an area of interest of the full image. All the rendering hints come from hints passed in.

    If w == 0, it will be taken to equal Math.round(h*(getWidth()/getHeight())). Similarly, if h == 0, it will be taken to equal Math.round(w*(getHeight()/getWidth())). One of w or h must be non-zero or else an IllegalArgumentException will be thrown.

    The created RenderedImage may have a property identified by the String HINTS_OBSERVED to indicate which RenderingHints were used to create the image. In addition any RenderedImages that are obtained via the getSources() method on the created RenderedImage may have such a property.

    Specified by:
      `createScaledRendering` in interface `RenderableImage`
    Parameters:
      `w` - the width of rendered image in pixels, or 0.
      `h` - the height of rendered image in pixels, or 0.
      `hints` - a RenderingHints object containing hints.
    Returns:
      a RenderedImage containing the rendered data.

  - ### createDefaultRendering

    public RenderedImage createDefaultRendering()
    Gets a RenderedImage instance of this image with a default width and height in pixels. The RenderContext is built automatically with an appropriate usr2dev transform and an area of interest of the full image. All the rendering hints come from hints passed in. Implementors of this interface must be sure that there is a defined default width and height.
    Specified by:
      `createDefaultRendering` in interface `RenderableImage`
    Returns:
      a RenderedImage containing the rendered data.

  - ### createRendering

    public RenderedImage createRendering(RenderContext renderContext)
    Creates a RenderedImage which represents this RenderableImageOp (including its Renderable sources) rendered according to the given RenderContext.

    This method supports chaining of either Renderable or RenderedImage operations. If sources in the ParameterBlock used to construct the RenderableImageOp are RenderableImages, then a three step process is followed:

    1. mapRenderContext() is called on the associated CRIF for each RenderableImage source;
    2. createRendering() is called on each of the RenderableImage sources using the backwards-mapped RenderContexts obtained in step 1, resulting in a rendering of each source;
    3. ContextualRenderedImageFactory.create() is called with a new ParameterBlock containing the parameters of the RenderableImageOp and the RenderedImages that were created by the createRendering() calls.

    If the elements of the source Vector of the ParameterBlock used to construct the RenderableImageOp are instances of RenderedImage, then the CRIF.create() method is called immediately using the original ParameterBlock. This provides a basis case for the recursion.

    The created RenderedImage may have a property identified by the String HINTS_OBSERVED to indicate which RenderingHints (from the RenderContext) were used to create the image. In addition any RenderedImages that are obtained via the getSources() method on the created RenderedImage may have such a property.

    Specified by:
      `createRendering` in interface `RenderableImage`
    Parameters:
      `renderContext` - The RenderContext to use to perform the rendering.
    Returns:
      a RenderedImage containing the desired output image.