Revision: 6498 http://sourceforge.net/p/jump-pilot/code/6498 Author: edso Date: 2020-09-20 14:48:50 +0000 (Sun, 20 Sep 2020) Log Message: ----------- just reformatting mixed tab/spaces indention to spaces only/tabwidth 2 spaces
Modified Paths: -------------- core/trunk/src/org/openjump/core/rasterimage/TiffUtils.java Modified: core/trunk/src/org/openjump/core/rasterimage/TiffUtils.java =================================================================== --- core/trunk/src/org/openjump/core/rasterimage/TiffUtils.java 2020-09-20 12:56:33 UTC (rev 6497) +++ core/trunk/src/org/openjump/core/rasterimage/TiffUtils.java 2020-09-20 14:48:50 UTC (rev 6498) @@ -39,355 +39,338 @@ * @author AdL */ public class TiffUtils { - - public static ImageAndMetadata readImage( - File tiffFile, Envelope viewportEnvelope, Resolution requestedRes, Overviews overviews, Stats stats) - throws NoninvertibleTransformException, IOException, FileNotFoundException, TiffTags.TiffReadingException, Exception { - - // Try to read geotiff tags - TiffTags.TiffMetadata tiffMetadata = TiffTags.readMetadata(tiffFile); - int originalImageWidth = tiffMetadata.getColsCount(); - int originalImageHeight = tiffMetadata.getRowsCount(); - Resolution cellSize = tiffMetadata.getResolution(); - Double noData = tiffMetadata.getNoData(); - - // Now try with tfw - if(cellSize == null) { - WorldFileHandler worldFileHandler = new WorldFileHandler(tiffFile.getAbsolutePath(), true); - Envelope envelope = worldFileHandler.readWorldFile(originalImageWidth, originalImageHeight); - cellSize = new Resolution( - envelope.getWidth() / originalImageWidth, - envelope.getHeight() / originalImageHeight); - } - - Envelope wholeImageEnvelope = RasterImageIO.getGeoReferencing(tiffFile.getAbsolutePath(), true, new Point (originalImageWidth, originalImageHeight)); - - if(requestedRes == null) { - requestedRes = cellSize; - } - - int overviewLevel = overviews.pickOverviewLevel(requestedRes); - if(stats == null) { - // Statistics on all pixels - stats = calculateStats(tiffFile, noData, tiffFile); - } - - if(overviews.getOverviewsCount() == 1) { - - // No overviews, decimation (subsampling) + public static ImageAndMetadata readImage(File tiffFile, Envelope viewportEnvelope, Resolution requestedRes, + Overviews overviews, Stats stats) throws NoninvertibleTransformException, IOException, FileNotFoundException, + TiffTags.TiffReadingException, Exception { - float xScale = (float) (cellSize.getX() / requestedRes.getX()); - float yScale = (float) (cellSize.getY() / requestedRes.getY()); - xScale = Math.min(xScale, 1); - yScale = Math.min(yScale, 1); - - RenderedOp renderedOp = readSubsampled(tiffFile, xScale, yScale); - - // For better looking results, but slower: - // rop = JAI.create("SubsampleAverage", pb); + // Try to read geotiff tags + TiffTags.TiffMetadata tiffMetadata = TiffTags.readMetadata(tiffFile); + int originalImageWidth = tiffMetadata.getColsCount(); + int originalImageHeight = tiffMetadata.getRowsCount(); + Resolution cellSize = tiffMetadata.getResolution(); + Double noData = tiffMetadata.getNoData(); - Resolution subsetResolution = new Resolution( - wholeImageEnvelope.getWidth() / renderedOp.getWidth(), - wholeImageEnvelope.getHeight() / renderedOp.getHeight()); - - Rectangle imageSubset = RasterImageIO.getDrawingRectangle( - renderedOp.getWidth(), - renderedOp.getHeight(), - wholeImageEnvelope, - viewportEnvelope, - subsetResolution); - - BufferedImage bufferedImage; - Envelope imagePartEnvelope; - int actualImageWidth; - int actualImageHeight; - if(imageSubset == null) { - bufferedImage = null; - imagePartEnvelope = null; - actualImageWidth = 0; - actualImageHeight = 0; - } else { - bufferedImage = renderedOp.getAsBufferedImage(imageSubset, null); - imagePartEnvelope = TiffUtils.getImageSubsetEnvelope(wholeImageEnvelope, imageSubset, subsetResolution); - actualImageWidth = bufferedImage.getWidth(); - actualImageHeight = bufferedImage.getHeight(); - } - - Metadata metadata = new Metadata( - wholeImageEnvelope, imagePartEnvelope, - new Point(originalImageWidth, originalImageHeight), - new Point(actualImageWidth, actualImageHeight), - (cellSize.getX() + cellSize.getY()) / 2, - (subsetResolution.getX() + subsetResolution.getY()) / 2, - noData, stats); - return new ImageAndMetadata(bufferedImage, metadata); + // Now try with tfw + if (cellSize == null) { + WorldFileHandler worldFileHandler = new WorldFileHandler(tiffFile.getAbsolutePath(), true); + Envelope envelope = worldFileHandler.readWorldFile(originalImageWidth, originalImageHeight); + cellSize = new Resolution(envelope.getWidth() / originalImageWidth, envelope.getHeight() / originalImageHeight); + } - } else { - - // Read from internal overviews - ImageAndMetadata imageAndMetadata = readImage(tiffFile, overviewLevel, 0, - new Point(originalImageWidth, originalImageHeight), - cellSize, wholeImageEnvelope, viewportEnvelope, noData, stats); + Envelope wholeImageEnvelope = RasterImageIO.getGeoReferencing(tiffFile.getAbsolutePath(), true, + new Point(originalImageWidth, originalImageHeight)); - // Read from external overviews - if(imageAndMetadata == null) { - File ovrFile = new File(tiffFile.getParent(), tiffFile.getName() + ".ovr"); - imageAndMetadata = readImage(ovrFile, overviewLevel, overviews.getInternalOverviewsCount(), - new Point(originalImageWidth, originalImageHeight), - cellSize, wholeImageEnvelope, viewportEnvelope, noData, stats); - } - return imageAndMetadata; - - } - + if (requestedRes == null) { + requestedRes = cellSize; } - - private static ImageAndMetadata readImage(File tiffFile, int overviewIndex, int indexStart, - Point originalSize, Resolution originalCellSize, - Envelope wholeImageEnvelope, Envelope viewportEnvelope, double noDataValue, Stats stats) - throws IOException, NoninvertibleTransformException { - - ImageInputStream imageInputStream = ImageIO.createImageInputStream(tiffFile); - Iterator<ImageReader> iterator = ImageIO.getImageReaders(imageInputStream); - if(iterator != null && iterator.hasNext()) { - - ImageReader imageReader = iterator.next(); - imageReader.setInput(imageInputStream); - for(int i=0; i<imageReader.getNumImages(true); i++) { - if(i + indexStart == overviewIndex) { - - Resolution subsetResolution = new Resolution( - wholeImageEnvelope.getWidth() / imageReader.getWidth(i), - wholeImageEnvelope.getHeight() / imageReader.getHeight(i)); - - Rectangle imageSubset = RasterImageIO.getDrawingRectangle( - imageReader.getWidth(i), - imageReader.getHeight(i), - wholeImageEnvelope, - viewportEnvelope, - subsetResolution); - - BufferedImage bufferedImage; - Envelope imagePartEnvelope; - int imageWidth; - int imageHeight; - if(imageSubset == null) { - bufferedImage = null; - imagePartEnvelope = null; - imageWidth = 0; - imageHeight = 0; - } else { - ImageReadParam imageReadParam = new ImageReadParam(); - imageReadParam.setSourceRegion(imageSubset); - bufferedImage = imageReader.read(i, imageReadParam); - imagePartEnvelope = TiffUtils.getImageSubsetEnvelope(wholeImageEnvelope, imageSubset, subsetResolution); - imageWidth = bufferedImage.getWidth(); - imageHeight = bufferedImage.getHeight(); - } + int overviewLevel = overviews.pickOverviewLevel(requestedRes); + if (stats == null) { + // Statistics on all pixels + stats = calculateStats(tiffFile, noData, tiffFile); + } + + if (overviews.getOverviewsCount() == 1) { + + // No overviews, decimation (subsampling) + + float xScale = (float) (cellSize.getX() / requestedRes.getX()); + float yScale = (float) (cellSize.getY() / requestedRes.getY()); + xScale = Math.min(xScale, 1); + yScale = Math.min(yScale, 1); + + RenderedOp renderedOp = readSubsampled(tiffFile, xScale, yScale); + + // For better looking results, but slower: + // rop = JAI.create("SubsampleAverage", pb); + + Resolution subsetResolution = new Resolution(wholeImageEnvelope.getWidth() / renderedOp.getWidth(), + wholeImageEnvelope.getHeight() / renderedOp.getHeight()); + + Rectangle imageSubset = RasterImageIO.getDrawingRectangle(renderedOp.getWidth(), renderedOp.getHeight(), + wholeImageEnvelope, viewportEnvelope, subsetResolution); + + BufferedImage bufferedImage; + Envelope imagePartEnvelope; + int actualImageWidth; + int actualImageHeight; + if (imageSubset == null) { + bufferedImage = null; + imagePartEnvelope = null; + actualImageWidth = 0; + actualImageHeight = 0; + } else { + bufferedImage = renderedOp.getAsBufferedImage(imageSubset, null); + imagePartEnvelope = TiffUtils.getImageSubsetEnvelope(wholeImageEnvelope, imageSubset, subsetResolution); + actualImageWidth = bufferedImage.getWidth(); + actualImageHeight = bufferedImage.getHeight(); + } + + Metadata metadata = new Metadata(wholeImageEnvelope, imagePartEnvelope, + new Point(originalImageWidth, originalImageHeight), new Point(actualImageWidth, actualImageHeight), + (cellSize.getX() + cellSize.getY()) / 2, (subsetResolution.getX() + subsetResolution.getY()) / 2, noData, + stats); + return new ImageAndMetadata(bufferedImage, metadata); + + } else { + + // Read from internal overviews + ImageAndMetadata imageAndMetadata = readImage(tiffFile, overviewLevel, 0, + new Point(originalImageWidth, originalImageHeight), cellSize, wholeImageEnvelope, viewportEnvelope, noData, + stats); + + // Read from external overviews + if (imageAndMetadata == null) { + File ovrFile = new File(tiffFile.getParent(), tiffFile.getName() + ".ovr"); + imageAndMetadata = readImage(ovrFile, overviewLevel, overviews.getInternalOverviewsCount(), + new Point(originalImageWidth, originalImageHeight), cellSize, wholeImageEnvelope, viewportEnvelope, noData, + stats); + } + return imageAndMetadata; + + } + + } + + private static ImageAndMetadata readImage(File tiffFile, int overviewIndex, int indexStart, Point originalSize, + Resolution originalCellSize, Envelope wholeImageEnvelope, Envelope viewportEnvelope, double noDataValue, + Stats stats) throws IOException, NoninvertibleTransformException { + + ImageInputStream imageInputStream = ImageIO.createImageInputStream(tiffFile); + Iterator<ImageReader> iterator = ImageIO.getImageReaders(imageInputStream); + + if (iterator != null && iterator.hasNext()) { + + ImageReader imageReader = iterator.next(); + imageReader.setInput(imageInputStream); + for (int i = 0; i < imageReader.getNumImages(true); i++) { + if (i + indexStart == overviewIndex) { + + Resolution subsetResolution = new Resolution(wholeImageEnvelope.getWidth() / imageReader.getWidth(i), + wholeImageEnvelope.getHeight() / imageReader.getHeight(i)); + + Rectangle imageSubset = RasterImageIO.getDrawingRectangle(imageReader.getWidth(i), imageReader.getHeight(i), + wholeImageEnvelope, viewportEnvelope, subsetResolution); + + BufferedImage bufferedImage; + Envelope imagePartEnvelope; + int imageWidth; + int imageHeight; + if (imageSubset == null) { + bufferedImage = null; + imagePartEnvelope = null; + imageWidth = 0; + imageHeight = 0; + } else { + ImageReadParam imageReadParam = new ImageReadParam(); + imageReadParam.setSourceRegion(imageSubset); + bufferedImage = imageReader.read(i, imageReadParam); + imagePartEnvelope = TiffUtils.getImageSubsetEnvelope(wholeImageEnvelope, imageSubset, subsetResolution); + imageWidth = bufferedImage.getWidth(); + imageHeight = bufferedImage.getHeight(); + } + // double originalCellSize = subsetResolution.getX(); // int cellsCount = imageReader.getWidth(i) * imageReader.getHeight(i); // int sampleSize = 10000; // double lowResCellSize = Math.sqrt(Math.max(1, cellsCount/(double)sampleSize)) * originalCellSize; - + // if(stats == null) { // BufferedImage statsBufferedImage = imageReader.read(imageReader.getNumImages(true) - 1, null); // stats = calculateStats(statsBufferedImage, noDataValue); // } - Metadata metadata = new Metadata( - wholeImageEnvelope, - imagePartEnvelope, - originalSize, - new Point(imageWidth, imageHeight), - (originalCellSize.getX() + originalCellSize.getY()) / 2, - (subsetResolution.getX() + subsetResolution.getY()) / 2, - noDataValue, stats); - - return new ImageAndMetadata(bufferedImage, metadata); - - } - } - + Metadata metadata = new Metadata(wholeImageEnvelope, imagePartEnvelope, originalSize, + new Point(imageWidth, imageHeight), (originalCellSize.getX() + originalCellSize.getY()) / 2, + (subsetResolution.getX() + subsetResolution.getY()) / 2, noDataValue, stats); + + return new ImageAndMetadata(bufferedImage, metadata); + } - - return null; - + } + } - - private static Stats calculateStats(File tiffFile, double noDataValue, File imageFile) - throws ParserConfigurationException, TransformerException, ImageReadException, IOException, SAXException { - - Stats stats = null; - - // Look for internal stats tag - try{ - TiffImageParser parser = new TiffImageParser(); - TiffImageMetadata metadata = (TiffImageMetadata) parser.getMetadata(tiffFile); - List<TiffField> tiffFields = metadata.getAllFields(); - for(TiffField tiffField : tiffFields) { - if(tiffField.getTag() == TiffTags.TIFFTAG_GDAL_METADATA) { - GDALInternalMetadata gdalParser = new GDALInternalMetadata(); - stats = gdalParser.readStatistics(tiffField.getStringValue()); - break; - } - } - } catch(Exception ex) { - stats = null; + + return null; + + } + + private static Stats calculateStats(File tiffFile, double noDataValue, File imageFile) + throws ParserConfigurationException, TransformerException, ImageReadException, IOException, SAXException { + + Stats stats = null; + + // Look for internal stats tag + try { + TiffImageParser parser = new TiffImageParser(); + TiffImageMetadata metadata = (TiffImageMetadata) parser.getMetadata(tiffFile); + List<TiffField> tiffFields = metadata.getAllFields(); + for (TiffField tiffField : tiffFields) { + if (tiffField.getTag() == TiffTags.TIFFTAG_GDAL_METADATA) { + GDALInternalMetadata gdalParser = new GDALInternalMetadata(); + stats = gdalParser.readStatistics(tiffField.getStringValue()); + break; } - - if(stats != null) { - return stats; - } - - // Look for aux.xml file - File auxXmlFile = new File(imageFile.getParent(), imageFile.getName() + ".aux.xml"); - if(auxXmlFile.exists()) { - GDALPamDataset gdalPamDataset = new GDALPamDataset(); - try { - stats = gdalPamDataset.readStatistics(auxXmlFile); - return stats; - } catch(Exception ex) { - Logger.error("Failed to read statistics.", ex); - return createStatsXml(tiffFile, noDataValue, auxXmlFile); - } - } + } + } catch (Exception ex) { + stats = null; + } + + if (stats != null) { + return stats; + } + + // Look for aux.xml file + File auxXmlFile = new File(imageFile.getParent(), imageFile.getName() + ".aux.xml"); + if (auxXmlFile.exists()) { + GDALPamDataset gdalPamDataset = new GDALPamDataset(); + try { + stats = gdalPamDataset.readStatistics(auxXmlFile); + return stats; + } catch (Exception ex) { + Logger.error("Failed to read statistics.", ex); return createStatsXml(tiffFile, noDataValue, auxXmlFile); - + } } - - private static Stats createStatsXml(File tiffFile, double noDataValue, File auxXmlFile) - throws ParserConfigurationException, TransformerException, TransformerConfigurationException, SAXException, IOException { - - BufferedImage bufferedImage = readSubsampled(tiffFile, 1, 1).getAsBufferedImage(); - int bandCount = bufferedImage.getRaster().getNumBands(); - - double minValue[] = new double[bandCount]; - double maxValue[] = new double[bandCount]; - double sum[] = new double[bandCount]; - double sumSquare[] = new double[bandCount]; - long cellsCount[] = new long[bandCount]; - - for(int b=0; b<bandCount; b++) { - minValue[b] = Double.MAX_VALUE; - maxValue[b] = -Double.MAX_VALUE; - } - - for(int r=0; r<bufferedImage.getHeight(); r++) { - Raster raster = bufferedImage.getData(new Rectangle(0, r, bufferedImage.getWidth(), 1)); - for(int c=0; c<bufferedImage.getWidth(); c++) { + return createStatsXml(tiffFile, noDataValue, auxXmlFile); - for(int b=0; b<bandCount; b++) { - - double value = raster.getSampleDouble(c, r, b); - if(value != noDataValue && (float)value != (float)noDataValue && - !Double.isNaN(value) && !Double.isInfinite(value)) { - if(value < minValue[b]) minValue[b] = value; - if(value > maxValue[b]) maxValue[b] = value; - cellsCount[b]++; - sum[b] += value; - sumSquare[b] += value * value; - } + } - } - - } - } + private static Stats createStatsXml(File tiffFile, double noDataValue, File auxXmlFile) + throws ParserConfigurationException, TransformerException, TransformerConfigurationException, SAXException, + IOException { - Stats stats = new Stats(bandCount); - for(int b=0; b<bandCount; b++) { - double meanValue = sum[b] / cellsCount[b]; - double stdDevValue = Math.sqrt(sumSquare[b] / cellsCount[b] - meanValue * meanValue); - stats.setStatsForBand(b, minValue[b], maxValue[b], meanValue, stdDevValue); + BufferedImage bufferedImage = readSubsampled(tiffFile, 1, 1).getAsBufferedImage(); + int bandCount = bufferedImage.getRaster().getNumBands(); + + double minValue[] = new double[bandCount]; + double maxValue[] = new double[bandCount]; + double sum[] = new double[bandCount]; + double sumSquare[] = new double[bandCount]; + long cellsCount[] = new long[bandCount]; + + for (int b = 0; b < bandCount; b++) { + minValue[b] = Double.MAX_VALUE; + maxValue[b] = -Double.MAX_VALUE; + } + + for (int r = 0; r < bufferedImage.getHeight(); r++) { + Raster raster = bufferedImage.getData(new Rectangle(0, r, bufferedImage.getWidth(), 1)); + for (int c = 0; c < bufferedImage.getWidth(); c++) { + + for (int b = 0; b < bandCount; b++) { + + double value = raster.getSampleDouble(c, r, b); + if (value != noDataValue && (float) value != (float) noDataValue && !Double.isNaN(value) + && !Double.isInfinite(value)) { + if (value < minValue[b]) + minValue[b] = value; + if (value > maxValue[b]) + maxValue[b] = value; + cellsCount[b]++; + sum[b] += value; + sumSquare[b] += value * value; + } + } - - // Write aux.xml - GDALPamDataset gdalPamDataset = new GDALPamDataset(); - gdalPamDataset.writeStatistics(auxXmlFile, stats); - return stats; - + } } - - private static Envelope getImageSubsetEnvelope(Envelope wholeImageEnvelope, Rectangle imageSubset, Resolution subsetResolution) { - - double ulX = Math.max(wholeImageEnvelope.getMinX(), wholeImageEnvelope.getMinX() + imageSubset.getX() * subsetResolution.getX()); - double ulY = Math.min(wholeImageEnvelope.getMaxY(), wholeImageEnvelope.getMaxY() - imageSubset.getY() * subsetResolution.getY()); - double lrX = Math.min(wholeImageEnvelope.getMaxX(), wholeImageEnvelope.getMinX() + imageSubset.getX() * subsetResolution.getX() + imageSubset.getWidth() * subsetResolution.getX()); - double lrY = Math.max(wholeImageEnvelope.getMinY(), wholeImageEnvelope.getMaxY() - imageSubset.getY() * subsetResolution.getY() - imageSubset.getHeight() * subsetResolution.getY()); - Coordinate ulCoord = new Coordinate(ulX, ulY); - Coordinate lrCoord = new Coordinate(lrX, lrY); - Envelope imagePartEnvelope = new Envelope(ulCoord, lrCoord); - - return imagePartEnvelope; - + Stats stats = new Stats(bandCount); + for (int b = 0; b < bandCount; b++) { + double meanValue = sum[b] / cellsCount[b]; + double stdDevValue = Math.sqrt(sumSquare[b] / cellsCount[b] - meanValue * meanValue); + stats.setStatsForBand(b, minValue[b], maxValue[b], meanValue, stdDevValue); } - - /* public static RenderedOp readSubsampled(File tiffFile, float xScale, float yScale) { - System.setProperty("com.sun.media.jai.disableMediaLib", "true"); - RenderedOp renderedOp = JAI.create("fileload", tiffFile.getAbsolutePath()); - ParameterBlock parameterBlock = new ParameterBlock(); - parameterBlock.addSource(renderedOp); - parameterBlock.add(xScale); - parameterBlock.add(yScale); - return JAI.create("scale", parameterBlock); - - }*/ - - //[Giuseppe Aruta 2020-07-09] whenever it is possible - // we use JAI Image I/O - - public static RenderedOp readSubsampled(File tiffFile, float xScale, float yScale) { - RenderedOp renderedOp = getRenderedOp(tiffFile); - ParameterBlock parameterBlock = new ParameterBlock(); - parameterBlock.addSource(renderedOp); - parameterBlock.add(xScale); - parameterBlock.add(yScale); - renderedOp = JAI.create("scale", parameterBlock); - return JAI.create("scale", parameterBlock); - + + // Write aux.xml + GDALPamDataset gdalPamDataset = new GDALPamDataset(); + gdalPamDataset.writeStatistics(auxXmlFile, stats); + + return stats; + + } + + private static Envelope getImageSubsetEnvelope(Envelope wholeImageEnvelope, Rectangle imageSubset, + Resolution subsetResolution) { + + double ulX = Math.max(wholeImageEnvelope.getMinX(), + wholeImageEnvelope.getMinX() + imageSubset.getX() * subsetResolution.getX()); + double ulY = Math.min(wholeImageEnvelope.getMaxY(), + wholeImageEnvelope.getMaxY() - imageSubset.getY() * subsetResolution.getY()); + double lrX = Math.min(wholeImageEnvelope.getMaxX(), wholeImageEnvelope.getMinX() + + imageSubset.getX() * subsetResolution.getX() + imageSubset.getWidth() * subsetResolution.getX()); + double lrY = Math.max(wholeImageEnvelope.getMinY(), wholeImageEnvelope.getMaxY() + - imageSubset.getY() * subsetResolution.getY() - imageSubset.getHeight() * subsetResolution.getY()); + Coordinate ulCoord = new Coordinate(ulX, ulY); + Coordinate lrCoord = new Coordinate(lrX, lrY); + + Envelope imagePartEnvelope = new Envelope(ulCoord, lrCoord); + + return imagePartEnvelope; + + } + + /* + * public static RenderedOp readSubsampled(File tiffFile, float xScale, float + * yScale) { System.setProperty("com.sun.media.jai.disableMediaLib", "true"); + * RenderedOp renderedOp = JAI.create("fileload", tiffFile.getAbsolutePath()); + * ParameterBlock parameterBlock = new ParameterBlock(); + * parameterBlock.addSource(renderedOp); parameterBlock.add(xScale); + * parameterBlock.add(yScale); return JAI.create("scale", parameterBlock); + * + * } + */ + + // [Giuseppe Aruta 2020-07-09] whenever it is possible + // we use JAI Image I/O + + public static RenderedOp readSubsampled(File tiffFile, float xScale, float yScale) { + RenderedOp renderedOp = getRenderedOp(tiffFile); + ParameterBlock parameterBlock = new ParameterBlock(); + parameterBlock.addSource(renderedOp); + parameterBlock.add(xScale); + parameterBlock.add(yScale); + renderedOp = JAI.create("scale", parameterBlock); + return JAI.create("scale", parameterBlock); + + } + + public static Double readCellValue(File tiffFile, int col, int row, int band) { + + Rectangle rectangle = new Rectangle(col, row, 1, 1); + return getRenderedOp(tiffFile).getData(rectangle).getSampleDouble(col, row, band); + } + + public static RenderedOp getRenderedOp(File tiffFile) { + // Since JAI error messages are rerouted to OJ log + // I suppress the error message for absence of mediaLib accelerator + System.setProperty("com.sun.media.jai.disableMediaLib", "true"); + RenderedOp renderedOp = null; + try { + // First try with JAI Image I/O "ImageRead" + GeoReferencedRaster geoRaster = new GeoReferencedRaster(tiffFile.toURI().toString(), + new com.github.jaiimageio.impl.plugins.tiff.TIFFImageReaderSpi()); + renderedOp = geoRaster.getImage(); + } catch (Exception e) { + // Then with JAI "FileLoad" + // System.setProperty("com.sun.media.jai.disableMediaLib", "true"); + + // <GeoRaster.class> rerouted JAI error messages to OJ log here + JAI.getDefaultInstance().setImagingListener(new ImagingListener() { + @Override + public boolean errorOccurred(String msg, Throwable thrown, Object where, boolean isRetryable) + throws RuntimeException { + Logger.error(thrown); + return false; + } + }); + renderedOp = JAI.create("fileload", tiffFile.toURI().toString()); } - - - public static Double readCellValue(File tiffFile, int col, int row, - int band) { - - Rectangle rectangle = new Rectangle(col, row, 1, 1); - return getRenderedOp(tiffFile).getData(rectangle) - .getSampleDouble(col, row, band); - } - - - public static RenderedOp getRenderedOp(File tiffFile) { - //Since JAI error messages are rerouted to OJ log - //I suppress the error message for absence of mediaLib accelerator - System.setProperty("com.sun.media.jai.disableMediaLib", "true"); - RenderedOp renderedOp = null; - try { - //First try with JAI Image I/O "ImageRead" - GeoReferencedRaster geoRaster = new GeoReferencedRaster(tiffFile.toURI().toString(), new com.github.jaiimageio.impl.plugins.tiff.TIFFImageReaderSpi()); - renderedOp = geoRaster.getImage(); - } - catch (Exception e) { - //Then with JAI "FileLoad" - //System.setProperty("com.sun.media.jai.disableMediaLib", "true"); - - // <GeoRaster.class> rerouted JAI error messages to OJ log here - JAI.getDefaultInstance().setImagingListener(new ImagingListener() { - @Override - public boolean errorOccurred(String msg, Throwable thrown, Object where, - boolean isRetryable) throws RuntimeException { - Logger.error(thrown); - return false; - } - }); - renderedOp = JAI.create("fileload", - tiffFile.toURI().toString()); - } - return renderedOp; - } - + return renderedOp; + } + } _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel