nom.tam.image
Class ImageTiler

java.lang.Object
  extended by nom.tam.image.ImageTiler
Direct Known Subclasses:
ImageData.ImageDataTiler

public class ImageTiler
extends java.lang.Object

This class provides a subset of an N-dimensional image. Modified May 2, 2000 by T. McGlynn to permit tiles that go off the edge of the image.


Constructor Summary
ImageTiler(RandomAccess f, long fileOffset, int[] dims, java.lang.Class base)
          Create a tiler.
 
Method Summary
protected  void fillFileData(java.lang.Object output, int delta, int outputOffset, int segment)
          File a tile segment from a file.
protected  void fillMemData(java.lang.Object data, int[] posits, int length, java.lang.Object output, int outputOffset, int dim)
          Fill a single segment from memory.
protected  void fillTile(java.lang.Object data, java.lang.Object o, int[] dims, int[] corners, int[] lengths)
          Fill the subset.
 java.lang.Object getCompleteImage()
          Read the entire image into a multidimensional array.
 java.lang.Object getMemoryImage()
          See if we can get the image data from memory.
static int getOffset(int[] dims, int[] pos)
          Get the offset of a given position.
 java.lang.Object getTile(int[] corners, int[] lengths)
          Get a subset of the image.
 void getTile(java.lang.Object outArray, int[] corners, int[] lengths)
          Get a tile, filling in a prespecified array.
protected static boolean incrementPosition(int[] start, int[] current, int[] lengths)
          Increment the offset within the position array.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ImageTiler

public ImageTiler(RandomAccess f,
                  long fileOffset,
                  int[] dims,
                  java.lang.Class base)
Create a tiler.

Parameters:
f - The random access device from which image data may be read. This may be null if the tile information is available from memory.
fileOffset - The file offset within the RandomAccess device at which the data begins.
dims - The actual dimensions of the image.
base - The base class (should be a primitive type) of the image.
Method Detail

getMemoryImage

public java.lang.Object getMemoryImage()
See if we can get the image data from memory. This may be overriden by other classes, notably in nom.tam.fits.ImageData.


getTile

public java.lang.Object getTile(int[] corners,
                                int[] lengths)
                         throws java.io.IOException
Get a subset of the image. An image tile is returned as a one-dimensional array although the image will normally be multi-dimensional.

Parameters:
The - starting corner (using 0 as the start) for the image.
The - length requested in each dimension.
Throws:
java.io.IOException

getTile

public void getTile(java.lang.Object outArray,
                    int[] corners,
                    int[] lengths)
             throws java.io.IOException
Get a tile, filling in a prespecified array. This version does not check that the user hase entered a valid set of corner and length arrays. ensure that out matches the length implied by the lengths array.

Parameters:
outArray - The output tile array. A one-dimensional array. Data not within the valid limits of the image will be left unchanged. The length of this array should be the product of lengths.
corners - The corners of the tile.
lengths - The dimensions of the tile.
Throws:
java.io.IOException

fillTile

protected void fillTile(java.lang.Object data,
                        java.lang.Object o,
                        int[] dims,
                        int[] corners,
                        int[] lengths)
                 throws java.io.IOException
Fill the subset.

Parameters:
data - The memory-resident data image. This may be null if the image is to be read from a file. This should be a multi-dimensional primitive array.
o - The tile to be filled. This is a simple primitive array.
dims - The dimensions of the full image.
corners - The indices of the corner of the image.
lengths - The dimensions of the subset.
Throws:
java.io.IOException

fillMemData

protected void fillMemData(java.lang.Object data,
                           int[] posits,
                           int length,
                           java.lang.Object output,
                           int outputOffset,
                           int dim)
Fill a single segment from memory. This routine is called recursively to handle multi-dimensional arrays. E.g., if data is three-dimensional, this will recurse two levels until we get a call with a single dimensional datum. At that point the appropriate data will be copied into the output.

Parameters:
data - The in-memory image data.
posits - The current position for which data is requested.
length - The size of the segments.
output - The output tile.
outputOffset - The current offset into the output tile.
dim - The current dimension being

fillFileData

protected void fillFileData(java.lang.Object output,
                            int delta,
                            int outputOffset,
                            int segment)
                     throws java.io.IOException
File a tile segment from a file.

Parameters:
output - The output tile.
delta - The offset from the beginning of the image in bytes.
outputOffset - The index into the output array.
segment - The number of elements to be read for this segment.
Throws:
java.io.IOException

incrementPosition

protected static boolean incrementPosition(int[] start,
                                           int[] current,
                                           int[] lengths)
Increment the offset within the position array. Note that we never look at the last index since we copy data a block at a time and not byte by byte.

Parameters:
start - The starting corner values.
current - The current offsets.
lengths - The desired dimensions of the subset.

getOffset

public static final int getOffset(int[] dims,
                                  int[] pos)
Get the offset of a given position.

Parameters:
dims - The dimensions of the array.
pos - The index requested.

getCompleteImage

public java.lang.Object getCompleteImage()
                                  throws java.io.IOException
Read the entire image into a multidimensional array.

Throws:
java.io.IOException