## com.bbn.openmap.omGraphics
Class OMScalingRaster

    java.lang.Object
      com.bbn.openmap.omGraphics.geom.BasicGeometry
          com.bbn.openmap.omGraphics.OMGraphic
              com.bbn.openmap.omGraphics.OMRasterObject
                  com.bbn.openmap.omGraphics.OMRaster
                      com.bbn.openmap.omGraphics.OMScalingRaster

All Implemented Interfaces:
  java.lang.Cloneable, java.awt.image.ImageObserver, OMGeometry, OMGraphicConstants, java.io.Serializable

Direct Known Subclasses:
  ImageTile, OMScalingIcon

public class OMScalingRaster
extends OMRaster
implements java.io.Serializable

This is an extension to OMRaster that automatically scales itelf to match the current projection. It is only lat/lon based, and takes the coordinates of the upper left and lower right corners of the image. It does straight scaling - it does not force the image projection to match the map projection! So, your mileage may vary - you have to understand the projection of the image, and know how it fits the projection type of the map. Of course, at larger scales, it might not matter so much. This class was inspired by, and created from parts of the ImageLayer submission from Adrian Lumsden@sss, on 25-Jan-2002. Used the scaling and trimming code from that submission. That code was also developed with assistance from Steve McDonald at SiliconSpaceships.com.

See Also:
  `OMRaster`, `OMRasterObject`, Serialized Form

Nested Class Summary

Nested classes inherited from class com.bbn.openmap.omGraphics.OMRasterObject
`OMRasterObject.TrimScaleFilter`

Field Summary
`protected java.awt.Rectangle` `clipRect` The rectangle in screen co-ordinates that the scaled image projects to after clipping.
`protected float` `lat2` The latitude of the lower right corner for the image, in decimal degrees.
`protected float` `lon2` The longitude of the lower right corner for the image, in decimal degrees.
`protected java.awt.image.BufferedImage` `sourceImage` This the original version of the image, which we keep around for rescaling later.

Fields inherited from class com.bbn.openmap.omGraphics.OMRaster
`colors, transparent`

Fields inherited from class com.bbn.openmap.omGraphics.OMRasterObject
`bitmap, bits, colorModel, COLORMODEL_DIRECT, COLORMODEL_IMAGEICON, COLORMODEL_INDEXED, DEBUG, FAST_SCALING, filteredHeight, filteredWidth, height, imageFilter, lat, lon, needToReposition, pixels, point1, point2, rotationAngle, SMOOTH_SCALING, width, x, y`

Fields inherited from class com.bbn.openmap.omGraphics.OMGraphic
`declutterType, displayPaint, edgeMatchesFill, fillPaint, hasLabel, linePaint, matted, mattingPaint, renderType, selected, selectPaint, showEditablePalette, stroke, textureMask`

Fields inherited from class com.bbn.openmap.omGraphics.geom.BasicGeometry
`APP_OBJECT_KEY, appObject, ATT_MAP_KEY, lineType, needToRegenerate, shape, visible`

Fields inherited from interface java.awt.image.ImageObserver
`ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH`

Fields inherited from interface com.bbn.openmap.omGraphics.OMGraphicConstants

`ADD_GRAPHIC_MASK, BASIC_STROKE, CHANGE_APPEARANCE, clear, DECIMAL_DEGREES, DECLUTTERTYPE_LINE, DECLUTTERTYPE_MOVE, DECLUTTERTYPE_NONE, DECLUTTERTYPE_SPACE, DEFAULT_ROTATIONANGLE, DELETE_GRAPHIC_MASK, DESELECT_GRAPHIC_MASK, DESELECTALL_GRAPHIC_MASK, GRAPHICTYPE_ARC, GRAPHICTYPE_BITMAP, GRAPHICTYPE_CIRCLE, GRAPHICTYPE_ELLIPSE, GRAPHICTYPE_GRAPHIC, GRAPHICTYPE_GRID, GRAPHICTYPE_LINE, GRAPHICTYPE_POINT, GRAPHICTYPE_POLY, GRAPHICTYPE_RASTER, GRAPHICTYPE_RECTANGLE, GRAPHICTYPE_TEXT, INFOLINE, LABEL, LINETYPE_GREATCIRCLE, LINETYPE_RHUMB, LINETYPE_STRAIGHT, LINETYPE_UNKNOWN, LOWER_GRAPHIC_MASK, LOWER_TO_BOTTOM_GRAPHIC_MASK, RADIANS, RAISE_GRAPHIC_MASK, RAISE_TO_TOP_GRAPHIC_MASK, REMOVABLE, RENDERTYPE_LATLON, RENDERTYPE_OFFSET, RENDERTYPE_UNKNOWN, RENDERTYPE_XY, SELECT_GRAPHIC_MASK, SORT_GRAPHICS_MASK, TOOLTIP, UPDATE_GRAPHIC_MASK`

Constructor Summary
`OMScalingRaster()` Constuct a blank OMRaster, to be filled in with set calls.
`OMScalingRaster(float ullat, float ullon, float lrlat, float lrlon, java.awt.Image ii)` Create an OMRaster, Lat/Lon placement with an Image.
`OMScalingRaster(float ullat, float ullon, float lrlat, float lrlon, javax.swing.ImageIcon ii)` Create an OMRaster, Lat/Lon placement with an ImageIcon.
`OMScalingRaster(float ullat, float ullon, float lrlat, float lrlon, int w, int h, byte[] bytes, java.awt.Color[] colorTable, int trans)` Lat/Lon placement with a indexed colormodel, which is using a colortable and a byte array to contruct the int[] pixels.
`OMScalingRaster(float ullat, float ullon, float lrlat, float lrlon, int w, int h, int[] pix)` Creates an OMRaster images, Lat/Lon placement with a direct colormodel image.

Method Summary
`boolean` `generate(Projection proj)` Prepare the graphics for rendering.
`java.awt.Rectangle` `getClippedRectangle()` Return the rectangle in screen co-ordinates that the scaled image has been clipped to.
`float` `getLRLat()` Get the southern latitude.
`float` `getLRLon()` Get the eastern longitude.
`float` `getULLat()` Get the upper latitude.
`float` `getULLon()` Get the western longitude.
`boolean` `isOnMap(Projection proj)`
`protected boolean` `position(Projection proj)` Since the image doesn't necessarily need to be regenerated when it is merely moved, raster objects have this function, called from generate() and when a placement attribute is changed.
`protected void` `rotate(java.awt.Graphics2D g)` Since the OMScalingRaster changes height and width depending on scale, we need to rotate the image over that point and factor in the scaled height and width of the image.
`protected void` `scaleTo(Projection thisProj)` Take the current projection and the sourceImage, and make the image that gets displayed fit the projection.
`void` `setImage(java.awt.Image image)` Creates a BufferedImage version of the image.
`void` `setLRLat(float value)` Change the southern latitude attribute.
`void` `setLRLon(float value)` Change the eastern longitude attribute.
`void` `setShape()` Set the rectangle, based on the location and size of the image after scaling.
`void` `setULLat(float value)` Change the upper latitude attribute.
`void` `setULLon(float value)` Change the western longitude attribute.
`protected boolean` `updateImageForProjection(Projection proj)` No op for this class, can be use to manage image use for subclasses.

Methods inherited from class com.bbn.openmap.omGraphics.OMRaster
`computePixels, getByte, getColors, getPixel, getTransparent, setBits, setByte, setColors, setColors, setImageIcon, setPixel, setTransparent`

Methods inherited from class com.bbn.openmap.omGraphics.OMRasterObject

`filterImage, getBits, getColorModel, getFilteredHeight, getFilteredWidth, getHeight, getImage, getImageFilter, getLat, getLon, getMapLocation, getNeedToReposition, getPixels, getRotationAngle, getWidth, getX, getY, hasLineTypeChoice, imageUpdate, render, scaleTo, setColorModel, setHeight, setImageFilter, setLat, setLon, setNeedToReposition, setPixels, setRotationAngle, setWidth, setX, setY, shouldRenderFill`

Methods inherited from class com.bbn.openmap.omGraphics.OMGraphic

`clone, deselect, distance, getDeclutterType, getDescription, getDescription, getDisplayColor, getDisplayPaint, getEdgeMatchesFill, getFillColor, getFillPaint, getHasLabel, getLineColor, getLinePaint, getMattingPaint, getRenderType, getSelectColor, getSelectPaint, getShowEditablePalette, getStroke, getTextureMask, initLabelingDuringGenerate, isClear, isMatted, isSelected, normalizeDistanceForLineWidth, regenerate, renderLabel, select, setDeclutterType, setEdgeMatchesFill, setFillColor, setFillPaint, setGraphicsColor, setGraphicsForEdge, setGraphicsForFill, setHasLabel, setLabelLocation, setLabelLocation, setLabelLocation, setLineColor, setLinePaint, setMatted, setMattingPaint, setRenderType, setSelectColor, setSelected, setSelectPaint, setShape, setShowEditablePalette, setStroke, setTextureMask, shouldRenderEdge`

Methods inherited from class com.bbn.openmap.omGraphics.geom.BasicGeometry

`_distance, appendShapeEdge, appendShapeEdge, appendShapeEdge, appendShapeEdge, checkAttributeMap, checkAttributeMap, clearAttributes, contains, createAttributeMap, createBoxShape, createShape, createShape, describeShapeDetail, describeShapeDetail, distanceToEdge, draw, fill, getAppObject, getAppObject, getAttribute, getAttributeMap, getAttributes, getLineType, getNeedToRegenerate, getShape, isRenderable, isVisible, putAttribute, removeAttribute, replaceAppObjectWithAttributeMap, setAppObject, setAppObject, setAttributes, setLineType, setNeedToRegenerate, setVisible`

Methods inherited from class java.lang.Object
`equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Methods inherited from interface com.bbn.openmap.omGraphics.OMGeometry
`clearAttributes, contains, draw, fill, getAppObject, getAttribute, getAttributes, getLineType, getNeedToRegenerate, getShape, isRenderable, isVisible, putAttribute, removeAttribute, setAppObject, setAttributes, setLineType, setNeedToRegenerate, setVisible`

Field Detail

### lat2

    protected float lat2

  The latitude of the lower right corner for the image, in decimal degrees.

### lon2

    protected float lon2

  The longitude of the lower right corner for the image, in decimal degrees.

### sourceImage

    protected java.awt.image.BufferedImage sourceImage

  This the original version of the image, which we keep around for rescaling later.

### clipRect

    protected java.awt.Rectangle clipRect

  The rectangle in screen co-ordinates that the scaled image projects to after clipping.

Constructor Detail

### OMScalingRaster

    public OMScalingRaster()

  Constuct a blank OMRaster, to be filled in with set calls.

### OMScalingRaster

    public OMScalingRaster(float ullat,
                           float ullon,
                           float lrlat,
                           float lrlon,
                           int w,
                           int h,
                           int[] pix)

  Creates an OMRaster images, Lat/Lon placement with a direct colormodel image.

Parameters:
  `ullat` - latitude of the top of the image.
  `ullon` - longitude of the left side of the image.
  `lrlat` - latitude of the bottom of the image.
  `lrlon` - longitude of the right side of the image.
  `w` - width of the image, in pixels.
  `h` - height of the image, in pixels.
  `pix` - color values for the pixels.

### OMScalingRaster

    public OMScalingRaster(float ullat,
                           float ullon,
                           float lrlat,
                           float lrlon,
                           javax.swing.ImageIcon ii)

  Create an OMRaster, Lat/Lon placement with an ImageIcon.

Parameters:
  `ullat` - latitude of the top of the image.
  `ullon` - longitude of the left side of the image.
  `lrlat` - latitude of the bottom of the image.
  `lrlon` - longitude of the right side of the image.
  `ii` - ImageIcon used for the image.

### OMScalingRaster

    public OMScalingRaster(float ullat,
                           float ullon,
                           float lrlat,
                           float lrlon,
                           java.awt.Image ii)

  Create an OMRaster, Lat/Lon placement with an Image.

Parameters:
  `ullat` - latitude of the top of the image.
  `ullon` - longitude of the left side of the image.
  `lrlat` - latitude of the bottom of the image.
  `lrlon` - longitude of the right side of the image.
  `ii` - Image used for the image.

### OMScalingRaster

    public OMScalingRaster(float ullat,
                           float ullon,
                           float lrlat,
                           float lrlon,
                           int w,
                           int h,
                           byte[] bytes,
                           java.awt.Color[] colorTable,
                           int trans)

  Lat/Lon placement with a indexed colormodel, which is using a colortable and a byte array to contruct the int[] pixels.

Parameters:
  `ullat` - latitude of the top of the image.
  `ullon` - longitude of the left side of the image.
  `lrlat` - latitude of the bottom of the image.
  `lrlon` - longitude of the right side of the image.
  `w` - width of the image, in pixels.
  `h` - height of the image, in pixels.
  `bytes` - colortable index values for the pixels.
  `colorTable` - color array corresponding to bytes
  `trans` - transparency of image.

Method Detail

### setImage

    public void setImage(java.awt.Image image)

  Creates a BufferedImage version of the image. A new BufferedImage object is created, and the image is copied into it. You can get rid of the input image after calling this method. The OMRaster variables height, width and bitmap are set here to the values for the new BufferedImage.

  Overrides:
    `setImage` in class `OMRasterObject`
  Parameters:
    `image` - the input image.

### position

    protected boolean position(Projection proj)

  Since the image doesn't necessarily need to be regenerated when it is merely moved, raster objects have this function, called from generate() and when a placement attribute is changed.

  Overrides:
    `position` in class `OMRasterObject`
  Parameters:
    `proj` - projection of window.
  Returns:
    true if enough information is in the object for proper placement.

### generate

    public boolean generate(Projection proj)

  Prepare the graphics for rendering. For all image types, it positions the image relative to the projection. For direct and indexed colormodel images, it creates the ImageIcon used for drawing to the window (internal to object). For indexed colormodel images, it also calls computePixels, to resolve the colortable and the bytes to create the image pixels.

  Specified by:
    `generate` in interface `OMGeometry`
  Overrides:
    `generate` in class `OMRaster`
  Parameters:
    `proj` - Projection used to position the image on the window.
  Returns:
    true if the image is ready to paint.

### updateImageForProjection

    protected boolean updateImageForProjection(Projection proj)

  No op for this class, can be use to manage image use for subclasses. Called from within generate.

  Parameters:
    `proj` - current projection.
  Returns:
    false if the rest of generate() should be skipped.

### rotate

    protected void rotate(java.awt.Graphics2D g)

  Since the OMScalingRaster changes height and width depending on scale, we need to rotate the image over that point and factor in the scaled height and width of the image. Called from within OMRasterObject.render().

  Overrides:
    `rotate` in class `OMRasterObject`

### scaleTo

    protected void scaleTo(Projection thisProj)

  Take the current projection and the sourceImage, and make the image that gets displayed fit the projection. If the source image isn't over the map, then this OMGraphic is set to be invisible. If part of the image is on the map, only that part is used. The OMRaster bitmap variable is set with an image that is created from the source image, and the point1 variable is set to the point where the image should be placed. For instance, if the source image upper left corner is off the map to the NorthWest, then the OMRaster bitmap is set to a image, clipped from the source, that is entirely on the map. The OMRaster point1 is set to 0, 0, since that is where the clipped image should be placed.

  Parameters:
    `thisProj` - the projection that the image should be scaled to.

### getClippedRectangle

    public java.awt.Rectangle getClippedRectangle()

  Return the rectangle in screen co-ordinates that the scaled image has been clipped to. This may return a null rectangle (i.e. the image is out of the window). Otherwise the returned rectangle should always at least partially lie within the bounds of the window.

### setULLat

    public void setULLat(float value)

  Change the upper latitude attribute.

  Parameters:
    `value` - latitude in decimal degrees.

### getULLat

    public float getULLat()

  Get the upper latitude.

  Returns:
    the latitude in decimal degrees.

### setULLon

    public void setULLon(float value)

  Change the western longitude attribute.

  Parameters:
    `value` - the longitude in decimal degrees.

### getULLon

    public float getULLon()

  Get the western longitude.

  Returns:
    longitude in decimal degrees.

### setLRLat

    public void setLRLat(float value)

  Change the southern latitude attribute.

  Parameters:
    `value` - latitude in decimal degrees.

### getLRLat

    public float getLRLat()

  Get the southern latitude.

  Returns:
    the latitude in decimal degrees.

### setLRLon

    public void setLRLon(float value)

  Change the eastern longitude attribute.

  Parameters:
    `value` - the longitude in decimal degrees.

### getLRLon

    public float getLRLon()

  Get the eastern longitude.

  Returns:
    longitude in decimal degrees.

### setShape

    public void setShape()

  Set the rectangle, based on the location and size of the image after scaling.

  Overrides:
    `setShape` in class `OMRasterObject`

### isOnMap

    public boolean isOnMap(Projection proj)

Copyright (C) BBNT Solutions LLC; See http://openmap.bbn.com/ for details