Example usage for javax.imageio IIOException IIOException

List of usage examples for javax.imageio IIOException IIOException

Introduction

In this page you can find the example usage for javax.imageio IIOException IIOException.

Prototype

public IIOException(String message, Throwable cause) 

Source Link

Document

Constructs an IIOException with a given message String and a Throwable that was its underlying cause.

Usage

From source file:nitf.imageio.NITFReader.java

public synchronized void readHeader() throws IOException {
    if (reader != null)
        return;/*w  w w .j  a va2  s.c  o m*/

    if (handle == null) {
        throw new IllegalStateException("No input handle");
    }

    try {
        reader = new Reader();
        record = reader.read(handle);
    } catch (NITFException e) {
        log.error(ExceptionUtils.getStackTrace(e));
        throw new IIOException("NITF Exception", e);
    }
}

From source file:nitf.imageio.NITFReader.java

private synchronized nitf.ImageReader getImageReader(int imageIndex) throws IOException {
    checkIndex(imageIndex);//from  w w  w  .ja  va  2 s  . co  m

    Integer key = new Integer(imageIndex);
    try {
        if (!imageReaderMap.containsKey(key))
            imageReaderMap.put(key, reader.getNewImageReader(imageIndex));
        return imageReaderMap.get(key);
    } catch (NITFException e) {
        log.error(ExceptionUtils.getStackTrace(e));
        throw new IIOException("NITF Exception", e);
    }
}

From source file:nitf.imageio.NITFReader.java

@Override
public int getNumImages(boolean allowSearch) throws IOException {
    readHeader();//from   w w  w. j  av  a  2 s .c  o  m
    try {
        return record.getHeader().getNumImages().getIntData();
    } catch (NITFException e) {
        log.error(ExceptionUtils.getStackTrace(e));
        throw new IIOException("NITF Exception", e);
    }
}

From source file:nitf.imageio.NITFReader.java

@Override
public int getWidth(int imageIndex) throws IOException {
    checkIndex(imageIndex);/*w  w  w .  j a v  a 2 s  .  c  o  m*/
    try {
        return record.getImages()[imageIndex].getSubheader().getNumCols().getIntData();
    } catch (NITFException e) {
        log.error(ExceptionUtils.getStackTrace(e));
        throw new IIOException("NITF Exception", e);
    }
}

From source file:nitf.imageio.NITFReader.java

@Override
public int getHeight(int imageIndex) throws IOException {
    checkIndex(imageIndex);/*from  ww w. j av  a 2s . c o  m*/
    try {
        return record.getImages()[imageIndex].getSubheader().getNumRows().getIntData();
    } catch (NITFException e) {
        log.error(ExceptionUtils.getStackTrace(e));
        throw new IIOException("NITF Exception", e);
    }
}

From source file:nitf.imageio.NITFReader.java

/**
 * Reads image data as bytes for the given region, and writes it to the
 * given writable raster/*from   w  ww . j a  v  a  2s.c o m*/
 * 
 * @param sourceRegion
 * @param sourceXSubsampling
 * @param sourceYSubsampling
 * @param bandOffsets
 * @param destinationOffset
 * @param imRas
 * @return Raster
 * @throws IOException
 */
protected void readRaster(int imageIndex, Rectangle sourceRegion, Rectangle destRegion, int sourceXSubsampling,
        int sourceYSubsampling, int[] bandOffsets, int pixelSize, Point destinationOffset, WritableRaster imRas)
        throws IOException {
    checkIndex(imageIndex);

    try {
        ImageSubheader subheader = record.getImages()[imageIndex].getSubheader();
        int numCols = subheader.getNumCols().getIntData();
        int numRows = subheader.getNumRows().getIntData();

        // try to optimize the read call by reading in the entire
        // image at once
        if ((destRegion.height * sourceYSubsampling) == numRows
                && (destRegion.width * sourceXSubsampling) == numCols) {
            readFullImage(imageIndex, destRegion, sourceXSubsampling, sourceYSubsampling, bandOffsets,
                    pixelSize, imRas);
            return;
        }
        // the general purpose case
        else {
            int colBytes = destRegion.width * pixelSize;

            int dstMinX = imRas.getMinX();
            int dstMaxX = dstMinX + imRas.getWidth() - 1;
            int dstMinY = imRas.getMinY();
            int dstMaxY = dstMinY + imRas.getHeight() - 1;
            // int swap = 0;

            int nBands = subheader.getBandCount();

            /*
             * NOTE: This is a "fix" that will be removed once the
             * underlying NITRO library gets patched. Currently, if you make
             * a request of a single band, it doesn't matter which band you
             * request - the data from the first band will be returned
             * regardless. This is obviously wrong. To thwart this, we will
             * read all bands, then scale down what we return to the user
             * based on their actual request.
             */
            int[] requestBands = new int[nBands];
            for (int i = 0; i < nBands; ++i)
                requestBands[i] = i;

            byte[][] rowBuf = new byte[requestBands.length][colBytes];

            // make a SubWindow from the params
            // TODO may want to read by blocks or rows to make faster and
            // more
            // memory efficient
            SubWindow window;
            window = new SubWindow();
            window.setNumBands(requestBands.length);
            window.setBandList(requestBands);
            window.setNumCols(destRegion.width);
            window.setNumRows(1);
            window.setStartCol(sourceRegion.x);
            window.setStartRow(sourceRegion.y);

            // the NITRO library can do the subsampling for us
            if (sourceYSubsampling != 1 || sourceXSubsampling != 1) {
                DownSampler downSampler = new PixelSkipDownSampler(sourceYSubsampling, sourceXSubsampling);
                window.setDownSampler(downSampler);
            }

            // String pixelJustification = record.getImages()[imageIndex]
            // .getSubheader().getPixelJustification().getStringData()
            // .trim();
            // swap = pixelJustification.equals("R") ? 1 : 0;

            List<ByteBuffer> bandBufs = new ArrayList<ByteBuffer>();
            for (int i = 0; i < requestBands.length; ++i) {
                ByteBuffer bandBuf = null;
                bandBuf = ByteBuffer.wrap(rowBuf[i]);
                // bandBuf.order(ByteOrder.nativeOrder());
                // bandBuf.order(swap == 0 ? ByteOrder.BIG_ENDIAN
                // : ByteOrder.LITTLE_ENDIAN);
                bandBufs.add(bandBuf);
            }

            nitf.ImageReader imageReader = getImageReader(imageIndex);
            for (int srcY = 0; srcY < sourceRegion.height; srcY++) {
                if (sourceYSubsampling != 1 && (srcY % sourceYSubsampling) != 0)
                    continue;

                window.setStartRow(sourceRegion.y + srcY);

                // Read the row
                try {
                    imageReader.read(window, rowBuf);
                } catch (NITFException e) {
                    throw new IIOException("Error reading line " + srcY, e);
                }

                // Determine where the row will go in the destination
                int dstY = destinationOffset.y + srcY / sourceYSubsampling;
                if (dstY < dstMinY) {
                    continue; // The row is above imRas
                }
                if (dstY > dstMaxY) {
                    break; // We're done with the image
                }

                // Copy each (subsampled) source pixel into imRas
                for (int srcX = 0, dstX = destinationOffset.x; srcX < colBytes; srcX += pixelSize, dstX++) {
                    if (dstX < dstMinX) {
                        continue;
                    }
                    if (dstX > dstMaxX) {
                        break;
                    }

                    for (int i = 0; i < bandOffsets.length; ++i) {
                        ByteBuffer bandBuf = bandBufs.get(bandOffsets[i]);

                        switch (pixelSize) {
                        case 1:
                            imRas.setSample(dstX, dstY, i, bandBuf.get(srcX));
                            break;
                        case 2:
                            imRas.setSample(dstX, dstY, i, bandBuf.getShort(srcX));
                            break;
                        case 4:
                            imRas.setSample(dstX, dstY, i, bandBuf.getFloat(srcX));
                            break;
                        case 8:
                            imRas.setSample(dstX, dstY, i, bandBuf.getDouble(srcX));
                            break;
                        }
                    }
                }
            }
        }
    } catch (NITFException e1) {
        throw new IOException(ExceptionUtils.getStackTrace(e1));
    }
}

From source file:org.geotools.imageio.netcdf.NetCDFImageReader.java

/**
 * Wraps a generic exception into a {@link IIOException}.
 *///w w w  .  j  av a2 s .  co m
protected IIOException netcdfFailure(final Exception e) throws IOException {
    return new IIOException(new StringBuilder("Can't read file ").append(dataset.getLocation()).toString(), e);
}