private InterpretationType getInterpretationType() { switch (getDataType()) { case ProductData.TYPE_INT8: return ReinterpretDescriptor.INTERPRET_BYTE_SIGNED; case ProductData.TYPE_UINT32: return ReinterpretDescriptor.INTERPRET_INT_UNSIGNED; default: return ReinterpretDescriptor.AWT; } }
/** * Determines whether this raster data node contains integer samples. * * @return true if this raster data node contains integer samples. */ public boolean hasIntPixels() { return ProductData.isIntType(getDataType()); }
private static int computeSymbolType(RasterDataNode raster, Source source) { if (raster instanceof Mask) { return Term.TYPE_B; } int dataType = raster.getDataType(); boolean isFloatingPointType = ProductData.isFloatingPointType(dataType); boolean isScaled = raster.isScalingApplied(); switch (source) { case RAW: return isFloatingPointType ? Term.TYPE_D : Term.TYPE_I; case GEOPHYSICAL: return isScaled || isFloatingPointType ? Term.TYPE_D : Term.TYPE_I; } throw new IllegalArgumentException("Source not supported: " + source); }
public static ImageLayout createSingleBandedImageLayout(RasterDataNode rasterDataNode) { return createSingleBandedImageLayout(rasterDataNode, getDataBufferType(rasterDataNode.getDataType())); }
private int getReadBufferLineCount() { final int sizePerLine = getRasterWidth() * ProductData.getElemSize(getDataType()); int bufferLineCount = READ_BUFFER_MAX_SIZE / sizePerLine; if (bufferLineCount == 0) { bufferLineCount = 1; } return bufferLineCount; }
private static boolean mustReinterpretSourceImage(RasterDataNode raster, RenderedImage sourceImage) { return sourceImage.getSampleModel().getDataType() == DataBuffer.TYPE_BYTE && raster.getDataType() == ProductData.TYPE_INT8; }
/** * Tests whether the given parameters specify a compatible raster or not. * * @param rasterData the raster data * @param w the raster width * @param h the raster height * @return {@code true} if so */ public boolean isCompatibleRasterData(ProductData rasterData, int w, int h) { return rasterData != null && rasterData.getType() == getDataType() && rasterData.getNumElems() == w * h; }
/** * @return The geophysical source image. * @since BEAM 4.5 */ public MultiLevelImage getGeophysicalImage() { if (geophysicalImage == null) { synchronized (this) { if (geophysicalImage == null) { if (isScalingApplied() || getDataType() == ProductData.TYPE_INT8 || getDataType() == ProductData.TYPE_UINT32) { this.geophysicalImage = createGeophysicalImage(); } else { this.geophysicalImage = getSourceImage(); } } } } return geophysicalImage; }
@Override protected void computeRect(PlanarImage[] sourceImages, WritableRaster tile, Rectangle destRect) { ProductData productData; boolean directMode = tile.getDataBuffer().getSize() == destRect.width * destRect.height; if (directMode) { productData = ProductData.createInstance(rasterDataNode.getDataType(), ImageUtils.getPrimitiveArray(tile.getDataBuffer())); } else { productData = ProductData.createInstance(rasterDataNode.getDataType(), destRect.width * destRect.height); } try { computeProductData(productData, destRect); } catch (IOException e) { throw new RuntimeException(e); } if (!directMode) { tile.setDataElements(destRect.x, destRect.y, destRect.width, destRect.height, productData.getElems()); } }
private static long getImageFileSize(RasterDataNode band) { return (long) ProductData.getElemSize(band.getDataType()) * (long) band.getRasterWidth() * (long) band.getRasterHeight(); }
@Override public synchronized ProductData getDataBuffer() { if (dataBuffer == null) { dataBuffer = ProductData.createInstance(rasterDataNode.getDataType(), ImageUtils.getPrimitiveArray(raster.getDataBuffer())); } return dataBuffer; }
protected RasterDataNodeOpImage(RasterDataNode rasterDataNode, ResolutionLevel level) { super(ImageManager.getDataBufferType(rasterDataNode.getDataType()), rasterDataNode.getSceneRasterWidth(), rasterDataNode.getSceneRasterHeight(), getPreferredTileSize(rasterDataNode), null, level); this.rasterDataNode = rasterDataNode; }
private String createValidMaskExpressionForNoDataValue() { final String ref = BandArithmetic.createExternalName(getName()); final double noDataValue = getGeophysicalNoDataValue(); if (Double.isNaN(noDataValue)) { return "!nan(" + ref + ")"; } else if (Double.isInfinite(noDataValue)) { return "!inf(" + ref + ")"; } else { if (ProductData.isIntType(getDataType())) { double rawNoDataValue = getNoDataValue(); String rawSymbol = getName() + ".raw"; String extName = BandArithmetic.createExternalName(rawSymbol); return extName + " != " + rawNoDataValue; } else { return "fneq(" + ref + "," + noDataValue + ")"; } } }
private Band addBand(RasterDataNode raster, TimeCoding rasterTimeCoding, String bandName) { final Band band = new Band(bandName, raster.getDataType(), tsProduct.getSceneRasterWidth(), tsProduct.getSceneRasterHeight()); band.setSourceImage(raster.getSourceImage()); ProductUtils.copyRasterDataNodeProperties(raster, band); // todo copy also referenced band in valid pixel expression band.setValidPixelExpression(null); rasterTimeMap.put(band, rasterTimeCoding); tsProduct.addBand(band); return band; }
public static SampleConverter createConverter(RasterDataNode rasterDataNode) { boolean scaled = rasterDataNode.isScalingApplied(); boolean signedByte = rasterDataNode.getDataType() == ProductData.TYPE_INT8; if (!signedByte && !scaled) { return new IdentityConverter(rasterDataNode); } if (signedByte) { if (scaled) { return new ScaledSignedByteConverter(rasterDataNode); } else { return new UnscaledSignedByteConverter(rasterDataNode); } } return new DefaultScaledConverter(rasterDataNode); }
protected SampleConverter(RasterDataNode rasterDataNode) { this.rasterDataNode = rasterDataNode; rawValueRange = getValueRange(rasterDataNode.getDataType()); geoPhysicalValueRange = new Range(rasterDataNode.scale(rawValueRange.getMin()), rasterDataNode.scale(rawValueRange.getMax())); }
@Override public RenderedImage createImage(int level) { return VirtualBandOpImage.create(expression, associatedNode.getDataType(), associatedNode.isNoDataValueUsed() ? associatedNode.getGeophysicalNoDataValue() : null, associatedNode.getProduct(), ResolutionLevel.create(getModel(), level)); } };
/** * Returns the geophysical data type of this <code>RasterDataNode</code>. The value returned is always one of the * <code>ProductData.TYPE_XXX</code> constants. * * @return the geophysical data type * @see ProductData * @see #isScalingApplied() */ public int getGeophysicalDataType() { return ImageManager.getProductDataType( ReinterpretDescriptor.getTargetDataType(ImageManager.getDataBufferType(getDataType()), getScalingFactor(), getScalingOffset(), getScalingType(), getInterpretationType())); }
public static void defineRasterDataNodes(ProfileWriteContext ctx, RasterDataNode[] rasterDataNodes) throws IOException { final NFileWriteable ncFile = ctx.getNetcdfFileWriteable(); final String dimensions = ncFile.getDimensions(); for (RasterDataNode rasterDataNode : rasterDataNodes) { String variableName = ReaderUtils.getVariableName(rasterDataNode); int dataType; if (rasterDataNode.isLog10Scaled()) { dataType = rasterDataNode.getGeophysicalDataType(); } else { dataType = rasterDataNode.getDataType(); } DataType netcdfDataType = DataTypeUtils.getNetcdfDataType(dataType); java.awt.Dimension tileSize = ImageManager.getPreferredTileSize(rasterDataNode.getProduct()); final NVariable variable = ncFile.addVariable(variableName, netcdfDataType, tileSize, dimensions); writeCfBandAttributes(rasterDataNode, variable); } }
public DirectTile(RasterDataNode rasterDataNode, ProductData dataBuffer, Rectangle rectangle, boolean target) { Assert.notNull(rasterDataNode, "rasterDataNode"); this.rasterDataNode = rasterDataNode; this.dataBuffer = dataBuffer; this.minX = rectangle.x; this.minY = rectangle.y; this.maxX = rectangle.x + rectangle.width - 1; this.maxY = rectangle.y + rectangle.height - 1; this.width = rectangle.width; this.height = rectangle.height; this.target = target; this.scaled = rasterDataNode.isScalingApplied(); this.signedByte = rasterDataNode.getDataType() == ProductData.TYPE_INT8; this.dataBufferByte = (dataBuffer instanceof ProductData.Byte) ? ((ProductData.Byte) dataBuffer).getArray() : null; this.dataBufferShort = (dataBuffer instanceof ProductData.Short) ? ((ProductData.Short) dataBuffer).getArray() : null; this.dataBufferInt = (dataBuffer instanceof ProductData.Int) ? ((ProductData.Int) dataBuffer).getArray() : null; this.dataBufferFloat = (dataBuffer instanceof ProductData.Float) ? ((ProductData.Float) dataBuffer).getArray() : null; this.dataBufferDouble = (dataBuffer instanceof ProductData.Double) ? ((ProductData.Double) dataBuffer).getArray() : null; }