# Class AbstractMultiResolutionImage

java.lang.Object
java.awt.Image
java.awt.image.AbstractMultiResolutionImage

All Implemented Interfaces:
  `MultiResolutionImage`

Direct Known Subclasses:
  `BaseMultiResolutionImage`

public abstract class AbstractMultiResolutionImage extends Image implements MultiResolutionImage
This class provides default implementations of several `Image` methods for classes that want to implement the `MultiResolutionImage` interface. For example,

    public class CustomMultiResolutionImage extends AbstractMultiResolutionImage {

        final Image[] resolutionVariants;

        public CustomMultiResolutionImage(Image... resolutionVariants) {
             this.resolutionVariants = resolutionVariants;
        }

        public Image getResolutionVariant(
                double destImageWidth, double destImageHeight) {
            // return a resolution variant based on the given destination image size
        }

        public List<Image> getResolutionVariants() {
            return Collections.unmodifiableList(Arrays.asList(resolutionVariants));
        }

        protected Image getBaseImage() {
            return resolutionVariants[0];
        }
    }

Since:
  9
See Also:
  - `Image`
  - `MultiResolutionImage`

- ## Field Summary

  ### Fields declared in class Image

  `accelerationPriority, SCALE_AREA_AVERAGING, SCALE_DEFAULT, SCALE_FAST, SCALE_REPLICATE, SCALE_SMOOTH, UndefinedProperty`
  Modifier and Type
  Field
  Description
  `protected float`
  `accelerationPriority`
  Priority for accelerating this image.
  `static final int`
  `SCALE_AREA_AVERAGING`
  Use the Area Averaging image scaling algorithm.
  `static final int`
  `SCALE_DEFAULT`
  Use the default image-scaling algorithm.
  `static final int`
  `SCALE_FAST`
  Choose an image-scaling algorithm that gives higher priority to scaling speed than smoothness of the scaled image.
  `static final int`
  `SCALE_REPLICATE`
  Use the image scaling algorithm embodied in the `ReplicateScaleFilter` class.
  `static final int`
  `SCALE_SMOOTH`
  Choose an image-scaling algorithm that gives higher priority to image smoothness than scaling speed.
  `static final Object`
  `UndefinedProperty`
  The `UndefinedProperty` object should be returned whenever a property which was not defined for a particular image is fetched.

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `AbstractMultiResolutionImage()`
  Constructor for subclasses to call.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected abstract Image`
  `getBaseImage()`
  Return the base image representing the best version of the image for rendering at the default width and height.
  `Graphics`
  `getGraphics()`
  As per the contract of the base `Image#getGraphics()` method, this implementation will always throw `UnsupportedOperationException` since only off-screen images can return a `Graphics` object.
  `int`
  `getHeight(ImageObserver observer)`
  This method simply delegates to the same method on the base image and it is equivalent to: `getBaseImage().getHeight(observer)`.
  `Object`
  `getProperty(String name, ImageObserver observer)`
  This method simply delegates to the same method on the base image and it is equivalent to: `getBaseImage().getProperty(name, observer)`.
  `ImageProducer`
  `getSource()`
  This method simply delegates to the same method on the base image and it is equivalent to: `getBaseImage().getSource()`.
  `int`
  `getWidth(ImageObserver observer)`
  This method simply delegates to the same method on the base image and it is equivalent to: `getBaseImage().getWidth(observer)`.

  ### Methods declared in class Image

  `flush, getAccelerationPriority, getCapabilities, getScaledInstance, setAccelerationPriority`
  Modifier and Type
  Method
  Description
  `void`
  `flush()`
  Flushes all reconstructable resources being used by this Image object.
  `float`
  `getAccelerationPriority()`
  Returns the current value of the acceleration priority hint.
  `ImageCapabilities`
  `getCapabilities(GraphicsConfiguration gc)`
  Returns an ImageCapabilities object which can be inquired as to the capabilities of this Image on the specified GraphicsConfiguration.
  `Image`
  `getScaledInstance(int width, int height, int hints)`
  Creates a scaled version of this image.
  `void`
  `setAccelerationPriority(float priority)`
  Sets a hint for this image about how important acceleration is.

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

  ### Methods declared in interface MultiResolutionImage

  `getResolutionVariant, getResolutionVariants`
  Modifier and Type
  Method
  Description
  `Image`
  `getResolutionVariant(double destImageWidth, double destImageHeight)`
  Gets a specific image that is the best variant to represent this logical image at the indicated size.
  `List<Image>`
  `getResolutionVariants()`
  Gets a readable list of all resolution variants.

- ## Constructor Details

  - ### AbstractMultiResolutionImage

    protected AbstractMultiResolutionImage()
    Constructor for subclasses to call.

- ## Method Details

  - ### getWidth

    public int getWidth(ImageObserver observer)
    This method simply delegates to the same method on the base image and it is equivalent to: `getBaseImage().getWidth(observer)`.
    Specified by:
      `getWidth` in class `Image`
    Parameters:
      `observer` - an object waiting for the image to be loaded.
    Returns:
      the width of the base image, or -1 if the width is not yet known
    Since:
      9
    See Also:
      - `getBaseImage()`

  - ### getHeight

    public int getHeight(ImageObserver observer)
    This method simply delegates to the same method on the base image and it is equivalent to: `getBaseImage().getHeight(observer)`.
    Specified by:
      `getHeight` in class `Image`
    Parameters:
      `observer` - an object waiting for the image to be loaded.
    Returns:
      the height of the base image, or -1 if the height is not yet known
    Since:
      9
    See Also:
      - `getBaseImage()`

  - ### getSource

    public ImageProducer getSource()
    This method simply delegates to the same method on the base image and it is equivalent to: `getBaseImage().getSource()`.
    Specified by:
      `getSource` in class `Image`
    Returns:
      the image producer that produces the pixels for the base image
    Since:
      9
    See Also:
      - `getBaseImage()`

  - ### getGraphics

    public Graphics getGraphics()
    As per the contract of the base `Image#getGraphics()` method, this implementation will always throw `UnsupportedOperationException` since only off-screen images can return a `Graphics` object.
    Specified by:
      `getGraphics` in class `Image`
    Returns:
      throws `UnsupportedOperationException`
    Throws:
      `UnsupportedOperationException` - this method is not supported
    See Also:
      - `Graphics`
      - `Component.createImage(int, int)`

  - ### getProperty

    public Object getProperty(String name, ImageObserver observer)
    This method simply delegates to the same method on the base image and it is equivalent to: `getBaseImage().getProperty(name, observer)`.
    Specified by:
      `getProperty` in class `Image`
    Parameters:
      `name` - a property name.
      `observer` - an object waiting for this image to be loaded.
    Returns:
      the value of the named property in the base image
    Since:
      9
    See Also:
      - `getBaseImage()`

  - ### getBaseImage

    protected abstract Image getBaseImage()
    Return the base image representing the best version of the image for rendering at the default width and height.
    Returns:
      the base image of the set of multi-resolution images
    Since:
      9