/** * Creates a new mask with the given name and image type and adds it to this product and returns it. * The new mask's samples are computed from the given image type. * * @param maskName the new mask's name * @param imageType the image data type used to compute the mask samples * * @return the new mask which has just been added * * @since BEAM 4.10 */ public Mask addMask(String maskName, Mask.ImageType imageType) { final Mask mask = new Mask(maskName, sceneRasterWidth, sceneRasterHeight, imageType); getMaskGroup().add(mask); return mask; }
public static Mask create(String name, String description, int width, int height, String expression, Color color, double transparency) { final Mask mask = new Mask(name, width, height, BandMathsType.INSTANCE); if (description != null) { mask.setDescription(description); } mask.setImageColor(color); mask.setImageTransparency(transparency); BandMathsType.setExpression(mask, expression); return mask; }
@Override public final Mask createObjectFromXml(Element element, Product product) { final String name = getChildAttributeValue(element, TAG_NAME, ATTRIB_VALUE); final int width = product.getSceneRasterWidth(); final int height = product.getSceneRasterHeight(); final Mask mask = new Mask(name, width, height, createImageType()); mask.setDescription(getChildAttributeValue(element, TAG_DESCRIPTION, ATTRIB_VALUE)); mask.setImageTransparency(Double.parseDouble(getChildAttributeValue(element, TAG_TRANSPARENCY, ATTRIB_VALUE))); final int r = Integer.parseInt(getChildAttributeValue(element, TAG_COLOR, ATTRIB_RED)); final int g = Integer.parseInt(getChildAttributeValue(element, TAG_COLOR, ATTRIB_GREEN)); final int b = Integer.parseInt(getChildAttributeValue(element, TAG_COLOR, ATTRIB_BLUE)); final int a = Integer.parseInt(getChildAttributeValue(element, TAG_COLOR, ATTRIB_ALPHA)); mask.setImageColor(new Color(r, g, b, a)); configureMask(mask, element); return mask; }
@Test public void canPersistIntendedMaskType() { final Mask mask = new Mask("M", 10, 10, Mask.BandMathsType.INSTANCE); assertTrue(persistableSpi.canPersist(mask)); assertTrue(DimapPersistence.getPersistable(mask) instanceof BandMathsMaskPersistable); }
@Test public void cannotPersistOtherMaskType() { final Mask mask = new Mask("M", 10, 10, new Mask.ImageType("Other") { @Override public MultiLevelImage createImage(Mask mask) { return null; } }); assertFalse(persistableSpi.canPersist(mask)); assertFalse(DimapPersistence.getPersistable(mask) instanceof BandMathsMaskPersistable); }
/** * Creates a new mask based on the geometries contained in a vector data node, * adds it to this product and returns it. * * @param maskName the new mask's name * @param vectorDataNode the vector data node * @param description the mask's description * @param color the display color * @param transparency the display transparency * * @return the new mask which has just been added * * @since BEAM 4.10 */ public Mask addMask(String maskName, VectorDataNode vectorDataNode, String description, Color color, double transparency) { final Mask mask = new Mask(maskName, getSceneRasterWidth(), getSceneRasterHeight(), Mask.VectorDataType.INSTANCE); Mask.VectorDataType.setVectorData(mask, vectorDataNode); mask.setDescription(description); mask.setImageColor(color); mask.setImageTransparency(transparency); getMaskGroup().add(mask); return mask; }
@Test public void testCanPersist() { final Mask mask = new Mask("b", 2, 2, Mask.RangeType.INSTANCE); assertTrue(_persistableSpi.canPersist(mask)); assertFalse(_persistableSpi.canPersist(new ArrayList())); assertFalse(_persistableSpi.canPersist(new Object())); assertFalse(_persistableSpi.canPersist(new Band("b", ProductData.TYPE_INT8, 2, 2))); }
@Test public void testXmlCreationWithoutMaskDescription() { final Mask mask = new Mask("name", 10, 10, new TestImageType()); mask.setDescription(null); final DimapPersistable persistable = new TestMaskPersistable(); final Element element = persistable.createXmlFromObject(mask); final Element description = element.getChild(TAG_DESCRIPTION); assertNotNull(description); assertTrue(description.getAttribute(ATTRIB_VALUE).getValue().isEmpty()); }
protected Mask createNewMask(Mask.ImageType type) { final Product product = maskForm.getProduct(); final ProductNodeGroup<Mask> productNodeGroup = product.getMaskGroup(); String maskName = getNewMaskName(productNodeGroup); final Mask mask = new Mask(maskName, product.getSceneRasterWidth(), product.getSceneRasterHeight(), type); final VisatApp visatApp = VisatApp.getApp(); if(visatApp != null) { final PropertyMap preferences = visatApp.getPreferences(); mask.setImageColor(preferences.getPropertyColor("mask.color", Mask.ImageType.DEFAULT_COLOR)); mask.setImageTransparency(preferences.getPropertyDouble("mask.transparency", Mask.ImageType.DEFAULT_TRANSPARENCY)); } return mask; }
maskName = variableName.substring(0, variableName.lastIndexOf(SUFFIX_MASK)); final Mask mask = new Mask(maskName, p.getSceneRasterWidth(), p.getSceneRasterHeight(), Mask.BandMathsType.INSTANCE); mask.setDescription(variable.getDescription());
private void copyMasks(Product sourceProduct, boolean rename, String pattern) { ProductNodeGroup<Mask> maskGroup = sourceProduct.getMaskGroup(); final Mask[] masks = maskGroup.toArray(new Mask[maskGroup.getNodeCount()]); for (Mask mask : masks) { Mask.ImageType imageType = mask.getImageType(); final Mask newmask = new Mask(mask.getName(), targetProduct.getSceneRasterWidth(), targetProduct.getSceneRasterHeight(), imageType); newmask.setDescription(mask.getDescription()); for (Property property : mask.getImageConfig().getProperties()) { newmask.getImageConfig().setValue(property.getDescriptor().getName(), property.getValue()); } if (rename) { newmask.setName(pattern.replace(SOURCE_NAME_REFERENCE, mask.getName())); for (final Band targetBand : targetProduct.getBands()) { RasterDataNode srcRDN = sourceRasterMap.get(targetBand); if (srcRDN != null) { newmask.updateExpression( BandArithmetic.createExternalName(srcRDN.getName()), BandArithmetic.createExternalName(targetBand.getName())); } } } targetProduct.getMaskGroup().add(newmask); } }
@Test public void createXmlFromObject() { final Mask mask = new Mask("myRange", 10, 10, Mask.RangeType.INSTANCE); mask.setDescription("Carefully defined range"); mask.setImageColor(new Color(0, 255, 0, 128)); mask.setImageTransparency(0.78); final RangeTypeMaskPersistable maskPersistable = new RangeTypeMaskPersistable(); final Element element = maskPersistable.createXmlFromObject(mask); assertNotNull(element); assertEquals(TAG_MASK, element.getName()); assertEquals(Mask.RangeType.TYPE_NAME, getAttributeString(element, ATTRIB_TYPE)); final Element name = element.getChild(TAG_NAME); assertEquals("myRange", getAttributeString(name, ATTRIB_VALUE)); final Element description = element.getChild(TAG_DESCRIPTION); assertEquals("Carefully defined range", getAttributeString(description, ATTRIB_VALUE)); final Element color = element.getChild(TAG_COLOR); assertEquals(0, getAttributeInt(color, ATTRIB_RED)); assertEquals(255, getAttributeInt(color, ATTRIB_GREEN)); assertEquals(0, getAttributeInt(color, ATTRIB_BLUE)); assertEquals(128, getAttributeInt(color, ATTRIB_ALPHA)); final Element transparency = element.getChild(TAG_TRANSPARENCY); assertEquals(0.78, getAttributeDouble(transparency, ATTRIB_VALUE), 0.0); }
@Override public Mask transferMask(Mask mask, Product product) { if (canTransferMask(mask, product)) { final String originalMaskName = mask.getName(); final String maskName = getAvailableMaskName(originalMaskName, product.getMaskGroup()); final int w = product.getSceneRasterWidth(); final int h = product.getSceneRasterHeight(); final Mask newMask = new Mask(maskName, w, h, this); newMask.setDescription(mask.getDescription()); setImageStyle(newMask.getImageConfig(), mask.getImageColor(), mask.getImageTransparency()); setRasterName(newMask, getRasterName(mask)); setMinimum(newMask, getMinimum(mask)); setMaximum(newMask, getMaximum(mask)); product.getMaskGroup().add(newMask); return newMask; } return null; }
@Test public void createXmlFromObject() { final Mask mask = new Mask("myRange", 10, 10, Mask.RangeType.INSTANCE); mask.setDescription("Carefully defined range"); mask.setImageColor(new Color(0, 255, 0, 128));
@Test public void testRenameBand() { Product product = new Product("t", "d", 1, 1); Band band = product.addBand("b", ProductData.TYPE_INT8); Mask mask = new Mask("m", 1, 1, Mask.BandMathsType.INSTANCE); Mask.BandMathsType.setExpression(mask, "b == 2"); product.getMaskGroup().add(mask); String expression = Mask.BandMathsType.getExpression(mask); assertEquals("b == 2", expression); band.setName("c"); expression = Mask.BandMathsType.getExpression(mask); assertEquals("c == 2", expression); }
@Test public void testMask() { Mask.ImageType imageType = new BufferedImageType(); Mask mask = new Mask("WATER", 256, 128, imageType); assertEquals("WATER", mask.getName()); assertEquals(256, mask.getRasterWidth()); assertEquals(128, mask.getRasterHeight()); assertSame(imageType, mask.getImageType()); PropertyContainer imageConfig = mask.getImageConfig(); assertNotNull(imageConfig); assertEquals(Color.RED, mask.getImageConfig().getValue("color")); assertEquals(0.5, (double)mask.getImageConfig().getValue("transparency"), 1.0e-6); MultiLevelImage image = mask.getSourceImage(); assertNotNull(image); assertSame(image, mask.getGeophysicalImage()); assertSame(null, mask.getValidMaskImage()); }