com.bbn.openmap.omGraphics
Class OMScalingRaster

java.lang.Object
  extended bycom.bbn.openmap.omGraphics.geom.BasicGeometry
      extended bycom.bbn.openmap.omGraphics.OMGraphic
          extended bycom.bbn.openmap.omGraphics.OMRasterObject
              extended bycom.bbn.openmap.omGraphics.OMRaster
                  extended bycom.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