Package nom.tam.image
Class StandardImageTiler
- java.lang.Object
-
- nom.tam.image.StandardImageTiler
-
- All Implemented Interfaces:
ImageTiler
- Direct Known Subclasses:
ImageData.ImageDataTiler
public abstract class StandardImageTiler extends java.lang.Object implements ImageTiler
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.
-
-
Field Summary
Fields Modifier and Type Field Description private java.lang.Class<?>baseprivate int[]dimsprivate longfileOffsetprivate RandomAccessrandomAccessFile
-
Constructor Summary
Constructors Constructor Description StandardImageTiler(RandomAccess f, long fileOffset, int[] dims, java.lang.Class<?> base)Create a tiler.
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected voidfillFileData(java.lang.Object output, long delta, int outputOffset, int segment)File a tile segment from a file.protected voidfillMemData(java.lang.Object data, int[] posits, int length, java.lang.Object output, int outputOffset, int dim)Fill a single segment from memory.protected voidfillTile(java.lang.Object data, java.lang.Object o, int[] newDims, int[] corners, int[] lengths)Fill the subset.java.lang.ObjectgetCompleteImage()Read the entire image into a multidimensional array.protected abstract java.lang.ObjectgetMemoryImage()See if we can get the image data from memory.static longgetOffset(int[] dims, int[] pos)java.lang.ObjectgetTile(int[] corners, int[] lengths)Get a subset of the image.voidgetTile(java.lang.Object outArray, int[] corners, int[] lengths)Get a tile, filling in a prespecified array.protected static booleanincrementPosition(int[] start, int[] current, int[] lengths)Increment the offset within the position array.
-
-
-
Field Detail
-
randomAccessFile
private final RandomAccess randomAccessFile
-
fileOffset
private final long fileOffset
-
dims
private final int[] dims
-
base
private final java.lang.Class<?> base
-
-
Constructor Detail
-
StandardImageTiler
public StandardImageTiler(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
-
getOffset
public static long getOffset(int[] dims, int[] pos)- Parameters:
dims- The dimensions of the array.pos- The index requested.- Returns:
- the offset of a given position.
-
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.- Returns:
trueif the current array was changed
-
fillFileData
protected void fillFileData(java.lang.Object output, long delta, int outputOffset, int segment) throws java.io.IOExceptionFile 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- if the underlying stream failed
-
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
-
fillTile
protected void fillTile(java.lang.Object data, java.lang.Object o, int[] newDims, int[] corners, int[] lengths) throws java.io.IOExceptionFill 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.newDims- 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- if the underlying stream failed
-
getCompleteImage
public java.lang.Object getCompleteImage() throws java.io.IOExceptionRead the entire image into a multidimensional array.- Specified by:
getCompleteImagein interfaceImageTiler- Throws:
java.io.IOException- if the underlying stream failed
-
getMemoryImage
protected abstract java.lang.Object getMemoryImage()
See if we can get the image data from memory. This may be overridden by other classes, notably in nom.tam.fits.ImageData.- Returns:
- the image data
-
getTile
public java.lang.Object getTile(int[] corners, int[] lengths) throws java.io.IOExceptionGet a subset of the image. An image tile is returned as a one-dimensional array although the image will normally be multi-dimensional.- Specified by:
getTilein interfaceImageTiler- Parameters:
corners- The starting corner (using 0 as the start) for the image.lengths- The length requested in each dimension.- Throws:
java.io.IOException- if the underlying stream failed
-
getTile
public void getTile(java.lang.Object outArray, int[] corners, int[] lengths) throws java.io.IOExceptionGet 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.- Specified by:
getTilein interfaceImageTiler- 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- if the underlying stream failed
-
-