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
[email protected]
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel