List of usage examples for javax.imageio IIOException IIOException
public IIOException(String message, Throwable cause)
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); }