2 votos

¿Cómo escribir un archivo tif en java a partir de otro archivo tif utilizando GeoTIFF?

Estoy buscando leer un archivo tiff y luego procesar sus píxeles y escribirlo de nuevo como un archivo tiff. Es posible, si es así, por favor proporcione alguna muestra de 5-10 líneas.

ParameterValue<OverviewPolicy> policy = AbstractGridFormat.OVERVIEW_POLICY
        .createValue();
policy.setValue(OverviewPolicy.IGNORE);

// this will basically read 4 tiles worth of data at once from the disk...
ParameterValue<String> gridsize = AbstractGridFormat.SUGGESTED_TILE_SIZE.createValue();
//gridsize.setValue(512 * 4 + "," + 512);

// Setting read type: use JAI ImageRead (true) or ImageReaders read methods (false)
ParameterValue<Boolean> useJaiRead = AbstractGridFormat.USE_JAI_IMAGEREAD.createValue();
useJaiRead.setValue(true);

//reader.read(new GeneralParameterValue[] { policy, gridsize, useJaiRead });
GridCoverage2D image
        = new GeoTiffReader(f).read(new GeneralParameterValue[]{policy, gridsize, useJaiRead});
Rectangle2D bounds2D = image.getEnvelope2D().getBounds2D();
bounds2D.getCenterX();
// calculate zoom level for the image
GridGeometry2D geometry = image.getGridGeometry();

BufferedImage img = ImageIO.read(f);

Aquí tengo una imagen en búfer que procesaré para algunas funciones.

Me gustaría volver a escribir este tiff como un nuevo archivo y lo procesaré más.

2voto

Adam Ernst Puntos 6939

Básicamente se necesita un GridCoverageFactory para crear una nueva GridCoverage y una GridCoverageWriter para escribirlo en el disco:

File in = new File(inFile);
AbstractGridFormat format = GridFormatFinder.findFormat(in);

AbstractGridCoverage2DReader reader = format.getReader(in);

GridCoverage2D cov = null;
try {
  cov = reader.read(null);
} catch (IOException giveUp) {
  throw new RuntimeException(giveUp);
}
reader.dispose();
RenderedImage rImage = cov.getRenderedImage();
RenderedImage outImage = ScaleRaster.scale(rImage, 0.5f);
File out = new File(outFile);
GridCoverageWriter writer = format.getWriter(out);
GridCoverageFactory factory = new GridCoverageFactory();
GridCoverage outCov =  factory.create("name", outImage, cov.getEnvelope());
writer.write(outCov , null);
writer.dispose();

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X