You can use the "Resample" operation to do most kind of GridCoverage2D Transformations (resample an original down to a smaller size, or resample it in a different CoordinateReferenceSystem).
Image Transformation to a Different CRS
Here is an example provided by Simone to transform from "EPSG:4326" to "EPSG:32632":
// get a reader for the image final WorldImageReader wiReader = new WorldImageReader(new File( "D:\\data\\ikonos_rgb\\ikonos_rgb.tif")); // get the coverage GridCoverage2D coverage = (GridCoverage2D) wiReader.read(null); // now that we have the input image let's try to mess it up writing onto // a new bufferedimage with a strange color model final BufferedImage bi = new BufferedImage(coverage.getGridGeometry() .getGridRange().getLength(0), coverage.getGridGeometry() .getGridRange().getLength(1), BufferedImage.TYPE_INT_BGR); ((Graphics2D) bi.getGraphics()).drawRenderedImage( coverage.getRenderedImage(), AffineTransform.getTranslateInstance(0, 0) ); coverage = FactoryFinder.getGridCoverageFactory(null).create( "I_need_a_long_vacation", bi, coverage.getEnvelope()); // resample the created coverage coverage = (GridCoverage2D) Operations.DEFAULT.resample( coverage, CRS.decode("EPSG:32633") ); final RenderedImage resampled =coverage.getRenderedImage(); // Painting some other BufferedImages PNG or JPEGS on the Canvas of // by using // the bi.getGraphics().drawImage(Image,..) Method ((Graphics2D) bi.getGraphics()).drawRenderedImage( resampled, AffineTransform.getTranslateInstance(0, 0) ); // write it down ImageIO.write(bi, "tiff", new File("d:\\data\\b.tif"));
Here is a example origionally provided by Martin to transforms from "EPSG:4326" to "EPSG:32632":
CoordinateReference sourceCRS = CRS.decode("EPSG:4326"); CoordinateReference targetCRS = CRS.decode("EPSG:32632"); RenderedImage image = ... Envelope envelope = ... envelope.setCoordinateReferenceSystem(sourceCRS); GridCoverage2D coverage = coverageFactory.create("My coverage", image, envelope); coverage = Operations.DEFAULT.resample(coverage, targetCRS);