Class DisplacementMap


  • public class DisplacementMap
    extends Effect
    An effect that shifts each pixel by a distance specified by the first two bands of of the specified FloatMap. For each pixel in the output, the corresponding data from the mapData is retrieved, scaled and offset by the scale and offset attributes, scaled again by the size of the source input image and used as an offset from the destination pixel to retrieve the pixel data from the source input.

    dst[x, y] = src[(x, y) + (offset + scale * map[x, y]) * (srcw, srch)]

    A value of (0.0, 0.0) would specify no offset for the pixel data whereas a value of (0.5, 0.5) would specify an offset of half of the source image size.

    Note that the mapping is the offset from a destination pixel to the source pixel location from which it is sampled which means that filling the map with all values of 0.5 would displace the image by half of its size towards the upper left since each destination pixel would contain the data that comes from the source pixel below and to the right of it.

    Also note that this effect does not adjust the coordinates of input events or any methods that measure containment on a Node. The results of mouse picking and the containment methods are undefined when a Node has a DisplacementMap effect in place.

    Example:

     int width = 220;
     int height = 100;
    
     FloatMap floatMap = new FloatMap();
     floatMap.setWidth(width);
     floatMap.setHeight(height);
    
     for (int i = 0; i < width; i++) {
         double v = (Math.sin(i / 20.0 * Math.PI) - 0.5) / 40.0;
         for (int j = 0; j < height; j++) {
             floatMap.setSamples(i, j, 0.0f, (float) v);
         }
     }
    
     DisplacementMap displacementMap = new DisplacementMap();
     displacementMap.setMapData(floatMap);
    
     Text text = new Text();
     text.setX(40.0);
     text.setY(80.0);
     text.setText("Wavy Text");
     text.setFill(Color.web("0x3b596d"));
     text.setFont(Font.font(null, FontWeight.BOLD, 50));
     text.setEffect(displacementMap);

    The code above produces the following:

    The visual effect of
 DisplacementMap on text

    Since:
    JavaFX 2.0
    • Property Detail

      • input

        public final ObjectProperty<Effect> inputProperty
        The input for this Effect. If set to null, or left unspecified, a graphical image of the Node to which the Effect is attached will be used as the input.
        Default value:
        null
        See Also:
        getInput(), setInput(Effect)
      • scaleX

        public final DoubleProperty scaleXProperty
        The scale factor by which all x coordinate offset values in the FloatMap are multiplied.
               Min: n/a
               Max: n/a
           Default: 1.0
          Identity: 1.0
         
        Default value:
        1.0
        See Also:
        getScaleX(), setScaleX(double)
      • scaleY

        public final DoubleProperty scaleYProperty
        The scale factor by which all y coordinate offset values in the FloatMap are multiplied.
               Min: n/a
               Max: n/a
           Default: 1.0
          Identity: 1.0
         
        Default value:
        1.0
        See Also:
        getScaleY(), setScaleY(double)
      • offsetX

        public final DoubleProperty offsetXProperty
        The offset by which all x coordinate offset values in the FloatMap are displaced after they are scaled.
               Min: n/a
               Max: n/a
           Default: 0.0
          Identity: 0.0
         
        Default value:
        0.0
        See Also:
        getOffsetX(), setOffsetX(double)
      • offsetY

        public final DoubleProperty offsetYProperty
        The offset by which all y coordinate offset values in the FloatMap are displaced after they are scaled.
               Min: n/a
               Max: n/a
           Default: 0.0
          Identity: 0.0
         
        Default value:
        0.0
        See Also:
        getOffsetY(), setOffsetY(double)
      • wrap

        public final BooleanProperty wrapProperty
        Defines whether values taken from outside the edges of the map "wrap around" or not.
               Min:  n/a
               Max:  n/a
           Default: false
          Identity:  n/a
         
        Default value:
        false
        See Also:
        isWrap(), setWrap(boolean)
    • Constructor Detail

      • DisplacementMap

        public DisplacementMap()
        Creates a new instance of DisplacementMap with default parameters.
      • DisplacementMap

        public DisplacementMap​(FloatMap mapData)
        Creates a new instance of DisplacementMap with the specified mapData.
        Parameters:
        mapData - the map data for this displacement map effect
        Since:
        JavaFX 2.1
      • DisplacementMap

        public DisplacementMap​(FloatMap mapData,
                               double offsetX,
                               double offsetY,
                               double scaleX,
                               double scaleY)
        Creates a new instance of DisplacementMap with the specified mapData, offsetX, offsetY, scaleX, and scaleY.
        Parameters:
        mapData - the map data for this displacement map effect
        offsetX - the offset by which all x coordinate offset values in the FloatMap are displaced after they are scaled
        offsetY - the offset by which all y coordinate offset values in the FloatMap are displaced after they are scaled
        scaleX - the scale factor by which all x coordinate offset values in the FloatMap are multiplied
        scaleY - the scale factor by which all y coordinate offset values in the FloatMap are multiplied
        Since:
        JavaFX 2.1
    • Method Detail

      • setInput

        public final void setInput​(Effect value)
        Sets the value of the property input.
        Property description:
        The input for this Effect. If set to null, or left unspecified, a graphical image of the Node to which the Effect is attached will be used as the input.
        Default value:
        null
      • getInput

        public final Effect getInput()
        Gets the value of the property input.
        Property description:
        The input for this Effect. If set to null, or left unspecified, a graphical image of the Node to which the Effect is attached will be used as the input.
        Default value:
        null
      • inputProperty

        public final ObjectProperty<Effect> inputProperty()
        The input for this Effect. If set to null, or left unspecified, a graphical image of the Node to which the Effect is attached will be used as the input.
        Default value:
        null
        See Also:
        getInput(), setInput(Effect)
      • setMapData

        public final void setMapData​(FloatMap value)
        Sets the value of the property mapData.
        Property description:
        The map data for this Effect.
        Default value:
        an empty map
      • getMapData

        public final FloatMap getMapData()
        Gets the value of the property mapData.
        Property description:
        The map data for this Effect.
        Default value:
        an empty map
      • setScaleX

        public final void setScaleX​(double value)
        Sets the value of the property scaleX.
        Property description:
        The scale factor by which all x coordinate offset values in the FloatMap are multiplied.
               Min: n/a
               Max: n/a
           Default: 1.0
          Identity: 1.0
         
        Default value:
        1.0
      • getScaleX

        public final double getScaleX()
        Gets the value of the property scaleX.
        Property description:
        The scale factor by which all x coordinate offset values in the FloatMap are multiplied.
               Min: n/a
               Max: n/a
           Default: 1.0
          Identity: 1.0
         
        Default value:
        1.0
      • scaleXProperty

        public final DoubleProperty scaleXProperty()
        The scale factor by which all x coordinate offset values in the FloatMap are multiplied.
               Min: n/a
               Max: n/a
           Default: 1.0
          Identity: 1.0
         
        Default value:
        1.0
        See Also:
        getScaleX(), setScaleX(double)
      • setScaleY

        public final void setScaleY​(double value)
        Sets the value of the property scaleY.
        Property description:
        The scale factor by which all y coordinate offset values in the FloatMap are multiplied.
               Min: n/a
               Max: n/a
           Default: 1.0
          Identity: 1.0
         
        Default value:
        1.0
      • getScaleY

        public final double getScaleY()
        Gets the value of the property scaleY.
        Property description:
        The scale factor by which all y coordinate offset values in the FloatMap are multiplied.
               Min: n/a
               Max: n/a
           Default: 1.0
          Identity: 1.0
         
        Default value:
        1.0
      • scaleYProperty

        public final DoubleProperty scaleYProperty()
        The scale factor by which all y coordinate offset values in the FloatMap are multiplied.
               Min: n/a
               Max: n/a
           Default: 1.0
          Identity: 1.0
         
        Default value:
        1.0
        See Also:
        getScaleY(), setScaleY(double)
      • setOffsetX

        public final void setOffsetX​(double value)
        Sets the value of the property offsetX.
        Property description:
        The offset by which all x coordinate offset values in the FloatMap are displaced after they are scaled.
               Min: n/a
               Max: n/a
           Default: 0.0
          Identity: 0.0
         
        Default value:
        0.0
      • getOffsetX

        public final double getOffsetX()
        Gets the value of the property offsetX.
        Property description:
        The offset by which all x coordinate offset values in the FloatMap are displaced after they are scaled.
               Min: n/a
               Max: n/a
           Default: 0.0
          Identity: 0.0
         
        Default value:
        0.0
      • offsetXProperty

        public final DoubleProperty offsetXProperty()
        The offset by which all x coordinate offset values in the FloatMap are displaced after they are scaled.
               Min: n/a
               Max: n/a
           Default: 0.0
          Identity: 0.0
         
        Default value:
        0.0
        See Also:
        getOffsetX(), setOffsetX(double)
      • setOffsetY

        public final void setOffsetY​(double value)
        Sets the value of the property offsetY.
        Property description:
        The offset by which all y coordinate offset values in the FloatMap are displaced after they are scaled.
               Min: n/a
               Max: n/a
           Default: 0.0
          Identity: 0.0
         
        Default value:
        0.0
      • getOffsetY

        public final double getOffsetY()
        Gets the value of the property offsetY.
        Property description:
        The offset by which all y coordinate offset values in the FloatMap are displaced after they are scaled.
               Min: n/a
               Max: n/a
           Default: 0.0
          Identity: 0.0
         
        Default value:
        0.0
      • offsetYProperty

        public final DoubleProperty offsetYProperty()
        The offset by which all y coordinate offset values in the FloatMap are displaced after they are scaled.
               Min: n/a
               Max: n/a
           Default: 0.0
          Identity: 0.0
         
        Default value:
        0.0
        See Also:
        getOffsetY(), setOffsetY(double)
      • setWrap

        public final void setWrap​(boolean value)
        Sets the value of the property wrap.
        Property description:
        Defines whether values taken from outside the edges of the map "wrap around" or not.
               Min:  n/a
               Max:  n/a
           Default: false
          Identity:  n/a
         
        Default value:
        false
      • isWrap

        public final boolean isWrap()
        Gets the value of the property wrap.
        Property description:
        Defines whether values taken from outside the edges of the map "wrap around" or not.
               Min:  n/a
               Max:  n/a
           Default: false
          Identity:  n/a
         
        Default value:
        false
      • wrapProperty

        public final BooleanProperty wrapProperty()
        Defines whether values taken from outside the edges of the map "wrap around" or not.
               Min:  n/a
               Max:  n/a
           Default: false
          Identity:  n/a
         
        Default value:
        false
        See Also:
        isWrap(), setWrap(boolean)