public class DisplacementMap extends Effect
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:
Type | Property and Description |
---|---|
<any> |
input
The input for this
Effect . |
<any> |
mapData
The map data for this
Effect . |
DoubleProperty |
offsetX
The offset by which all x coordinate offset values in the
FloatMap are displaced after they are scaled. |
DoubleProperty |
offsetY
The offset by which all y coordinate offset values in the
FloatMap are displaced after they are scaled. |
DoubleProperty |
scaleX
The scale factor by which all x coordinate offset values in the
FloatMap are multiplied. |
DoubleProperty |
scaleY
The scale factor by which all y coordinate offset values in the
FloatMap are multiplied. |
BooleanProperty |
wrap
Defines whether values taken from outside the edges of the map
"wrap around" or not.
|
Modifier and Type | Class and Description |
---|---|
private class |
DisplacementMap.MapDataChangeListener |
Effect.EffectInputChangeListener, Effect.EffectInputProperty
Modifier and Type | Field and Description |
---|---|
private FloatMap |
defaultMap |
private <any> |
input
The input for this
Effect . |
private <any> |
mapData
The map data for this
Effect . |
private DisplacementMap.MapDataChangeListener |
mapDataChangeListener |
private DoubleProperty |
offsetX
The offset by which all x coordinate offset values in the
FloatMap are displaced after they are scaled. |
private DoubleProperty |
offsetY
The offset by which all y coordinate offset values in the
FloatMap are displaced after they are scaled. |
private DoubleProperty |
scaleX
The scale factor by which all x coordinate offset values in the
FloatMap are multiplied. |
private DoubleProperty |
scaleY
The scale factor by which all y coordinate offset values in the
FloatMap are multiplied. |
private BooleanProperty |
wrap
Defines whether values taken from outside the edges of the map
"wrap around" or not.
|
Constructor and Description |
---|
DisplacementMap()
Creates a new instance of DisplacementMap with default parameters.
|
DisplacementMap(FloatMap mapData)
Creates a new instance of DisplacementMap with the specified mapData.
|
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.
|
Modifier and Type | Method and Description |
---|---|
(package private) boolean |
checkChainContains(Effect e) |
(package private) Effect |
copy() |
(package private) com.sun.scenario.effect.DisplacementMap |
createPeer() |
(package private) BaseBounds |
getBounds(BaseBounds bounds,
BaseTransform tx,
Node node,
BoundsAccessor boundsAccessor)
Returns bounds of given node with applied effect.
|
Effect |
getInput()
Gets the value of the property input.
|
FloatMap |
getMapData()
Gets the value of the property mapData.
|
double |
getOffsetX()
Gets the value of the property offsetX.
|
double |
getOffsetY()
Gets the value of the property offsetY.
|
double |
getScaleX()
Gets the value of the property scaleX.
|
double |
getScaleY()
Gets the value of the property scaleY.
|
<any> |
inputProperty()
The input for this
Effect . |
boolean |
isWrap()
Gets the value of the property wrap.
|
<any> |
mapDataProperty()
The map data for this
Effect . |
DoubleProperty |
offsetXProperty()
The offset by which all x coordinate offset values in the
FloatMap are displaced after they are scaled. |
DoubleProperty |
offsetYProperty()
The offset by which all y coordinate offset values in the
FloatMap are displaced after they are scaled. |
DoubleProperty |
scaleXProperty()
The scale factor by which all x coordinate offset values in the
FloatMap are multiplied. |
DoubleProperty |
scaleYProperty()
The scale factor by which all y coordinate offset values in the
FloatMap are multiplied. |
void |
setInput(Effect value)
Sets the value of the property input.
|
void |
setMapData(FloatMap value)
Sets the value of the property mapData.
|
void |
setOffsetX(double value)
Sets the value of the property offsetX.
|
void |
setOffsetY(double value)
Sets the value of the property offsetY.
|
void |
setScaleX(double value)
Sets the value of the property scaleX.
|
void |
setScaleY(double value)
Sets the value of the property scaleY.
|
void |
setWrap(boolean value)
Sets the value of the property wrap.
|
(package private) void |
update() |
BooleanProperty |
wrapProperty()
Defines whether values taken from outside the edges of the map
"wrap around" or not.
|
containsCycles, effectBoundsChanged, getInputBounds, getKernelSize, getPeer, getShadowBounds, markDirty, sync, transformBounds
public final <any> inputProperty
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.getInput()
,
setInput(Effect)
public final <any> mapDataProperty
Effect
.getMapData()
,
setMapData(FloatMap)
public final DoubleProperty scaleXProperty
FloatMap
are multiplied.
Min: n/a Max: n/a Default: 1.0 Identity: 1.0
getScaleX()
,
setScaleX(double)
public final DoubleProperty scaleYProperty
FloatMap
are multiplied.
Min: n/a Max: n/a Default: 1.0 Identity: 1.0
getScaleY()
,
setScaleY(double)
public final DoubleProperty offsetXProperty
FloatMap
are displaced after they are scaled.
Min: n/a Max: n/a Default: 0.0 Identity: 0.0
getOffsetX()
,
setOffsetX(double)
public final DoubleProperty offsetYProperty
FloatMap
are displaced after they are scaled.
Min: n/a Max: n/a Default: 0.0 Identity: 0.0
getOffsetY()
,
setOffsetY(double)
public final BooleanProperty wrapProperty
Min: n/a Max: n/a Default: false Identity: n/a
isWrap()
,
setWrap(boolean)
private <any> input
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.private final FloatMap defaultMap
private <any> mapData
Effect
.private final DisplacementMap.MapDataChangeListener mapDataChangeListener
private DoubleProperty scaleX
FloatMap
are multiplied.
Min: n/a Max: n/a Default: 1.0 Identity: 1.0
private DoubleProperty scaleY
FloatMap
are multiplied.
Min: n/a Max: n/a Default: 1.0 Identity: 1.0
private DoubleProperty offsetX
FloatMap
are displaced after they are scaled.
Min: n/a Max: n/a Default: 0.0 Identity: 0.0
private DoubleProperty offsetY
FloatMap
are displaced after they are scaled.
Min: n/a Max: n/a Default: 0.0 Identity: 0.0
private BooleanProperty wrap
Min: n/a Max: n/a Default: false Identity: n/a
public DisplacementMap()
public DisplacementMap(FloatMap mapData)
mapData
- the map data for this displacement map effectpublic DisplacementMap(FloatMap mapData, double offsetX, double offsetY, double scaleX, double scaleY)
mapData
- the map data for this displacement map effectoffsetX
- the offset by which all x coordinate offset values in the
FloatMap
are displaced after they are scaledoffsetY
- the offset by which all y coordinate offset values in the
FloatMap
are displaced after they are scaledscaleX
- the scale factor by which all x coordinate offset values in the
FloatMap
are multipliedscaleY
- the scale factor by which all y coordinate offset values in the
FloatMap
are multipliedcom.sun.scenario.effect.DisplacementMap createPeer()
createPeer
in class Effect
public final void setInput(Effect value)
public final Effect getInput()
public final <any> inputProperty()
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.getInput()
,
setInput(Effect)
boolean checkChainContains(Effect e)
checkChainContains
in class Effect
public final void setMapData(FloatMap value)
public final FloatMap getMapData()
public final <any> mapDataProperty()
Effect
.getMapData()
,
setMapData(FloatMap)
public final void setScaleX(double value)
public final double getScaleX()
public final DoubleProperty scaleXProperty()
FloatMap
are multiplied.
Min: n/a Max: n/a Default: 1.0 Identity: 1.0
getScaleX()
,
setScaleX(double)
public final void setScaleY(double value)
public final double getScaleY()
public final DoubleProperty scaleYProperty()
FloatMap
are multiplied.
Min: n/a Max: n/a Default: 1.0 Identity: 1.0
getScaleY()
,
setScaleY(double)
public final void setOffsetX(double value)
public final double getOffsetX()
public final DoubleProperty offsetXProperty()
FloatMap
are displaced after they are scaled.
Min: n/a Max: n/a Default: 0.0 Identity: 0.0
getOffsetX()
,
setOffsetX(double)
public final void setOffsetY(double value)
public final double getOffsetY()
public final DoubleProperty offsetYProperty()
FloatMap
are displaced after they are scaled.
Min: n/a Max: n/a Default: 0.0 Identity: 0.0
getOffsetY()
,
setOffsetY(double)
public final void setWrap(boolean value)
public final boolean isWrap()
public final BooleanProperty wrapProperty()
Min: n/a Max: n/a Default: false Identity: n/a
isWrap()
,
setWrap(boolean)
BaseBounds getBounds(BaseBounds bounds, BaseTransform tx, Node node, BoundsAccessor boundsAccessor)
Effect