Package nom.tam.image

Class 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.
    • 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 void fillFileData​(java.lang.Object output, long 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[] newDims, int[] corners, int[] lengths)
      Fill the subset.
      java.lang.Object getCompleteImage()
      Read the entire image into a multidimensional array.
      protected abstract java.lang.Object getMemoryImage()
      See if we can get the image data from memory.
      static long getOffset​(int[] dims, int[] pos)  
      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
    • 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:
        true if the current array was changed
      • fillFileData

        protected void fillFileData​(java.lang.Object output,
                                    long 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 - 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.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.
        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.IOException
        Read the entire image into a multidimensional array.
        Specified by:
        getCompleteImage in interface ImageTiler
        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.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.
        Specified by:
        getTile in interface ImageTiler
        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.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.
        Specified by:
        getTile in interface ImageTiler
        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