org.geotools.image.io
Class TextRecordImageReader

java.lang.Object
  extended byjavax.imageio.ImageReader
      extended byorg.geotools.image.io.SimpleImageReader
          extended byorg.geotools.image.io.TextImageReader
              extended byorg.geotools.image.io.TextRecordImageReader

public class TextRecordImageReader
extends TextImageReader

Image decoder for text files storing pixel values as records. Such text files use one line (record) by pixel. Each line contains at least 3 columns (in arbitrary order):

For example, some Sea Level Anomaly (SLA) files contains rows of longitude (degrees), latitude (degrees), SLA (cm), East/West current (cm/s) and North/South current (cm/s), as below:
 45.1250 -29.8750    -7.28     10.3483     -0.3164
 45.1250 -29.6250    -4.97     11.8847      3.6192
 45.1250 -29.3750    -2.91      3.7900      3.0858
 45.1250 -29.1250    -3.48     -5.1833     -5.0759
 45.1250 -28.8750    -4.36     -1.8129    -16.3689
 45.1250 -28.6250    -3.91      7.5577    -24.6801
 
(...etc...)
From this decoder point of view, the two first columns (longitude and latitude) are pixel's logical coordinate (x,y), while the three last columns are three image's bands. The whole file contains only one image (unless SimpleImageReader.getNumImages(boolean) has been overridden). All (x,y) coordinates belong to pixel's center. This decoder will automatically translate (x,y) coordinates from logical space to pixel space. The getTransform(int) method provides a convenient AffineTransform for performing coordinate transformations between pixel and logical spaces.

By default, assume that x and y coordinates appear in column #0 and 1 respectively. It also assumes that numeric values are encoded using current defaults Charset and Locale, and that there is no pad value. The easiest way to change the default setting is to create a TextRecordImageReader.Spi subclass. There is no need to subclass , unless you want more control on the decoding process.

Since:
2.1
Version:
$Id: TextRecordImageReader.java 17672 2006-01-19 00:25:55Z desruisseaux $
Author:
Martin Desruisseaux

Nested Class Summary
static class TextRecordImageReader.Spi
          Service provider interface (SPI) for TextRecordImageReaders.
 
Field Summary
 
Fields inherited from class javax.imageio.ImageReader
availableLocales, ignoreMetadata, input, locale, minIndex, originatingProvider, progressListeners, seekForwardOnly, updateListeners, warningListeners, warningLocales
 
Constructor Summary
TextRecordImageReader(javax.imageio.spi.ImageReaderSpi provider)
          Construit un d?codeur d'images de type DataBuffer.TYPE_FLOAT.
TextRecordImageReader(javax.imageio.spi.ImageReaderSpi provider, int rawImageType)
          Construit un d?codeur d'images.
 
Method Summary
 int getColumnX(int imageIndex)
          Retourne le num?ro de colonne des x, compt? ? partir de 0.
 int getColumnY(int imageIndex)
          Retourne le num?ro de colonne des y, compt? ? partir de 0.
 javax.media.jai.util.Range getExpectedRange(int imageIndex, int band)
          Retourne la valeur minimale et maximale m?moris?e dans une bande de l'image.
 int getHeight(int imageIndex)
          Returns the height in pixels of the given image within the input source.
 java.awt.geom.Rectangle2D getLogicalBounds(int imageIndex)
          Returns the smallest bounding box containing the full image in user coordinates.
 int getNumBands(int imageIndex)
          Returns the number of bands available for the specified image.
 java.awt.geom.AffineTransform getTransform(int imageIndex)
          Returns an AffineTransform for transforming pixel coordinates to logical coordinates.
 int getWidth(int imageIndex)
          Returns the width in pixels of the given image within the input source.
protected  double[] parseLine(java.lang.String line, double[] values)
          Convertit une ligne en valeurs num?riques.
 java.awt.image.BufferedImage read(int imageIndex, javax.imageio.ImageReadParam param)
          Reads the image indexed by and returns it as a complete buffered image.
 void reset()
          Replace le d?codeur dans son ?tat initial.
 void setInput(java.lang.Object input, boolean seekForwardOnly, boolean ignoreMetadata)
          Sp?cifie le flot ? utiliser en entr?.
 
Methods inherited from class org.geotools.image.io.TextImageReader
getCharset, getLineFormat, getPadValue, getPositionString, getRawDataType, getReader
 
Methods inherited from class org.geotools.image.io.SimpleImageReader
getImageMetadata, getImageTypes, getNumImages, getRawImageType, getStreamMetadata
 
Methods inherited from class javax.imageio.ImageReader
abort, abortRequested, addIIOReadProgressListener, addIIOReadUpdateListener, addIIOReadWarningListener, canReadRaster, checkReadParamBandSettings, clearAbortRequest, computeRegions, dispose, getAspectRatio, getAvailableLocales, getDefaultReadParam, getDestination, getFormatName, getImageMetadata, getInput, getLocale, getMinIndex, getNumThumbnails, getOriginatingProvider, getSourceRegion, getStreamMetadata, getThumbnailHeight, getThumbnailWidth, getTileGridXOffset, getTileGridYOffset, getTileHeight, getTileWidth, hasThumbnails, isIgnoringMetadata, isImageTiled, isRandomAccessEasy, isSeekForwardOnly, processImageComplete, processImageProgress, processImageStarted, processImageUpdate, processPassComplete, processPassStarted, processReadAborted, processSequenceComplete, processSequenceStarted, processThumbnailComplete, processThumbnailPassComplete, processThumbnailPassStarted, processThumbnailProgress, processThumbnailStarted, processThumbnailUpdate, processWarningOccurred, processWarningOccurred, read, readAll, readAll, readAsRenderedImage, readerSupportsThumbnails, readRaster, readThumbnail, readTile, readTileRaster, removeAllIIOReadProgressListeners, removeAllIIOReadUpdateListeners, removeAllIIOReadWarningListeners, removeIIOReadProgressListener, removeIIOReadUpdateListener, removeIIOReadWarningListener, setInput, setInput, setLocale
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TextRecordImageReader

public TextRecordImageReader(javax.imageio.spi.ImageReaderSpi provider)
Construit un d?codeur d'images de type DataBuffer.TYPE_FLOAT.

Parameters:
provider - Le fournisseur qui a construit ce d?codeur.

TextRecordImageReader

public TextRecordImageReader(javax.imageio.spi.ImageReaderSpi provider,
                             int rawImageType)
Construit un d?codeur d'images.

Parameters:
provider - Le fournisseur qui a construit ce d?codeur.
rawImageType - Type par d?faut des images. Ce type devrait ?tre une des constantes de DataBuffer, notamment DataBuffer.TYPE_INT ou DataBuffer.TYPE_FLOAT. Le type DataBuffer.TYPE_DOUBLE est accept? mais d?conseill?, ?tant donn? que l'impl?mentation actuelle ne lira les donn?es qu'avec la pr?cision des types .
Method Detail

getColumnX

public int getColumnX(int imageIndex)
               throws java.io.IOException
Retourne le num?ro de colonne des x, compt? ? partir de 0. L'impl?mentation par d?faut retourne le num?ro de colonne qui avait ?t? sp?cifi? dans l'objet TextRecordImageReader.Spi qui a cr?? ce d?codeur. Les classes d?riv?es peuvent red?finir cette m?thode pour d?terminer cette valeur d'une fa?on plus ?labor?e.

Parameters:
imageIndex - Index de l'image ? lire.
Throws:
java.io.IOException - si l'op?ration n?cessitait une lecture du fichier (par exemple des informations inscrites dans un en-t?te) et que cette lecture a ?chou?e.

getColumnY

public int getColumnY(int imageIndex)
               throws java.io.IOException
Retourne le num?ro de colonne des y, compt? ? partir de 0. L'impl?mentation par d?faut retourne le num?ro de colonne qui avait ?t? sp?cifi? dans l'objet TextRecordImageReader.Spi qui a cr?? ce d?codeur. Les classes d?riv?es peuvent red?finir cette m?thode pour d?terminer cette valeur d'une fa?on plus ?labor?e.

Parameters:
imageIndex - Index de l'image ? lire.
Throws:
java.io.IOException - si l'op?ration n?cessitait une lecture du fichier (par exemple des informations inscrites dans un en-t?te) et que cette lecture a ?chou?e.

setInput

public void setInput(java.lang.Object input,
                     boolean seekForwardOnly,
                     boolean ignoreMetadata)
Sp?cifie le flot ? utiliser en entr?. Ce flot peut ?tre un objet des objets suivants (en ordre de pr?f?rence): File, URL ou BufferedReader. Les flots de type Reader, InputStream et ImageInputStream sont aussi accept?s, mais moins conseill?s.

Overrides:
setInput in class TextImageReader

getNumBands

public int getNumBands(int imageIndex)
                throws java.io.IOException
Returns the number of bands available for the specified image.

Overrides:
getNumBands in class SimpleImageReader
Parameters:
imageIndex - The image index.
Throws:
java.io.IOException - if an error occurs reading the information from the input source.

getWidth

public int getWidth(int imageIndex)
             throws java.io.IOException
Returns the width in pixels of the given image within the input source.

Parameters:
imageIndex - the index of the image to be queried.
Returns:
Image width.
Throws:
java.io.IOException - If an error occurs reading the width information from the input source.

getHeight

public int getHeight(int imageIndex)
              throws java.io.IOException
Returns the height in pixels of the given image within the input source.

Parameters:
imageIndex - the index of the image to be queried.
Returns:
Image height.
Throws:
java.io.IOException - If an error occurs reading the height information from the input source.

getLogicalBounds

public java.awt.geom.Rectangle2D getLogicalBounds(int imageIndex)
                                           throws java.io.IOException
Returns the smallest bounding box containing the full image in user coordinates. The default implementation search for minimum and maximum values in x and y columns (as returned by {link #getColumnX} and {link #getColumnY}) and returns a rectangle containing (xmin-dx/2, ymin-dy/2)) and (xmax+dx/2, ymax+dy/2)) points, where dx and dy are grid cell width and height (i.e. the smallest interval between x and y values).

Parameters:
imageIndex - the index of the image to be queried.
Returns:
Image bounds in user coordinates.
Throws:
java.io.IOException - If an error occurs reading the width information from the input source.

getTransform

public java.awt.geom.AffineTransform getTransform(int imageIndex)
                                           throws java.io.IOException
Returns an AffineTransform for transforming pixel coordinates to logical coordinates. Pixel coordinates are usually integer values with (0,0) at the image's upper-left corner, while logical coordinates are floating point values at the pixel's upper-left corner. The later is consistent with Java Advanced Imaging convention. In order to get logical values at the pixel center, a translation must be apply once as below:
 AffineTransform tr = getTransform(imageIndex);
 tr.translate(0.5, 0.5);
 
The default implementation compute the affine transform from getLogicalBounds(int).

Parameters:
imageIndex - The 0-based image index.
Returns:
A transform mapping pixel coordinates to logical coordinates.
Throws:
java.io.IOException - if an I/O operation failed.

getExpectedRange

public javax.media.jai.util.Range getExpectedRange(int imageIndex,
                                                   int band)
                                            throws java.io.IOException
Retourne la valeur minimale et maximale m?moris?e dans une bande de l'image.

Specified by:
getExpectedRange in class SimpleImageReader
Parameters:
imageIndex - Index de l'image dont on veut conna?tre la plage de valeurs.
band - Bande pour laquelle on veut la valeur minimale. Les num?ros de bandes commencent ? 0 et sont ind?pendents des valeurs qui peuvent avoir ?t? sp?cifi?es ? IIOParam.setSourceBands(int[]).
Returns:
Plage de valeurs trouv?e dans l'image et la bande sp?cifi?e.
Throws:
java.io.IOException - si l'op?ration a ?chou?e ? cause d'une erreur d'entr?s/sorties.

parseLine

protected double[] parseLine(java.lang.String line,
                             double[] values)
                      throws java.text.ParseException
Convertit une ligne en valeurs num?riques. Cette m?thode est appel?e automatiquement lors de la lecture de chaque ligne, avec en argument la ligne lue () et le buffer dans lequel placer les valeurs num?riques (). L'impl?mentation par d?faut d?code la ligne en exigeant qu'il y ait autant de nombres que la longueur du tableau . Elle remplace ensuite les occurences de par Double.NaN dans toutes les colonnes sauf celles des coordonn?es x et y.

Parameters:
line - Ligne ? d?coder.
values - Derni?res valeurs ? avoir ?t? lues, ou si cette ligne est la premi?re ? ?tre d?cod?e. Ce buffer peut ?tre r?utilis? en ?crasant les anciennes valeurs par les nouvelles valeurs de la ligne .
Returns:
Les valeurs lues, ou si la fin de l'image a ?t? atteinte. Le tableau retourn? sera habituellement le m?me que , mais pas obligatoirement. Par convention, un tableau de longueur 0 signifie que la ligne ne contient aucune donn?e et doit ?tre ignor?e.
Throws:
java.text.ParseException - si une erreur est survenue lors du d?codage de la ligne.

read

public java.awt.image.BufferedImage read(int imageIndex,
                                         javax.imageio.ImageReadParam param)
                                  throws java.io.IOException
Reads the image indexed by and returns it as a complete buffered image.

Parameters:
imageIndex - the index of the image to be retrieved.
param - Parameters used to control the reading process, or .
Returns:
the desired portion of the image.
Throws:
java.io.IOException - if an error occurs during reading.

reset

public void reset()
Replace le d?codeur dans son ?tat initial.

Overrides:
reset in class TextImageReader


Copyright © GeoTools. All Rights Reserved.