// get a reader final MrSIDReader reader = new MrSIDReader(file); // // read once // GridCoverage2D gc = (GridCoverage2D) reader.read(null); // // read again with subsampling and crop // final int originalW = gc.getRenderedImage().getWidth(); final int originalH = gc.getRenderedImage().getHeight(); final Rectangle range = ((GridEnvelope2D)reader.getOriginalGridRange()); final GeneralEnvelope originalEnvelope = reader.getOriginalEnvelope(); final GeneralEnvelope reducedEnvelope = new GeneralEnvelope(new double[] { originalEnvelope.getLowerCorner().getOrdinate(0), originalEnvelope.getLowerCorner().getOrdinate(1)}, new double[] { originalEnvelope.getMedian().getOrdinate(0), originalEnvelope.getMedian().getOrdinate(1)}); reducedEnvelope.setCoordinateReferenceSystem(reader.getCrs()); final ParameterValue gg = (ParameterValue) ((AbstractGridFormat) reader .getFormat()).READ_GRIDGEOMETRY2D.createValue(); gg.setValue(new GridGeometry2D(new GridEnvelope2D(new Rectangle(0, 0, (int) (range.width / 2.0), (int) (range.height / 2.0))), reducedEnvelope)); gc = (GridCoverage2D) reader.read(new GeneralParameterValue[] { gg }); Assert.assertNotNull(gc); // NOTE: in some cases might be too restrictive Assert.assertTrue(reducedEnvelope.equals(gc.getEnvelope(), XAffineTransform .getScale(((AffineTransform) ((GridGeometry2D) gc .getGridGeometry()).getGridToCRS2D())) / 2, true)); // this should be fine since we give 1 pixel tolerance Assert.assertEquals(originalW / 2.0 , gc.getRenderedImage() .getWidth(), 1); Assert.assertEquals(originalH / 2.0 , gc.getRenderedImage() .getHeight(), 1); forceDataLoading(gc); // ///////////////////////////////////////////////////////////////////// // // Read ignoring overviews with subsampling and crop, using Jai, // multithreading and customized tilesize // // ///////////////////////////////////////////////////////////////////// final ParameterValue policy = (ParameterValue) ((AbstractGridFormat) reader .getFormat()).OVERVIEW_POLICY.createValue(); policy.setValue(OverviewPolicy.IGNORE); // // // // Enable multithreading read // // // final ParameterValue mt = (ParameterValue) ((BaseGDALGridFormat) reader .getFormat()).USE_MULTITHREADING.createValue(); mt.setValue(true); // // // // Customizing Tile Size // // // final ParameterValue tilesize = (ParameterValue) ((BaseGDALGridFormat) reader .getFormat()).SUGGESTED_TILE_SIZE.createValue(); tilesize.setValue("512,512"); // // // // Setting read type: use JAI ImageRead // // // final ParameterValue useJaiRead = (ParameterValue) ((BaseGDALGridFormat) reader .getFormat()).USE_JAI_IMAGEREAD.createValue(); useJaiRead.setValue(true); gc = (GridCoverage2D) reader.read(new GeneralParameterValue[] { gg, policy, mt, tilesize, useJaiRead });