Javafx 简明教程
JavaFX - DisplacementMap
正如你可能已经知道的那样,图像由无限数量的像素组成。位移映射效果通过一定的距离平移输入图像的像素,并产生具有这些像素的不同位置的输出图像。
要在 JavaFX 节点上应用此效果,你需要使用 DisplacementMap 类。要平移输入图像上的像素,距离由 FloatMap 的前两个频段指定。FloatMap 是包含浮点数据的缓冲区,在这种情况下,即距离。
此类具有以下属性 -
-
input - 指定输入数据,即图像。
-
mapData - 为此位移贴图效果指定贴图数据。这指定如何映射像素。
-
offsetX - 指定缩放后 FloatMap 中所有 x 坐标偏移值的偏移量
-
offsetY - 指定缩放后 FloatMap 中所有 y 坐标偏移值的偏移量
-
scaleX - 指定 FloatMap 中所有 x 坐标偏移值相乘的比例因子
-
scaleY - 指定 FloatMap 中所有 y 坐标偏移值相乘的比例因子
-
wrap - 定义从地图边缘获取的值是否“环绕”等。
Example
在此示例中,我们尝试使用 DisplacementMap 类将位移贴图效果应用于文本。将此代码保存在文件名为 DisplacementMapExample.java 的文件中。
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.Effect;
import javafx.scene.effect.DisplacementMap;
import javafx.scene.effect.FloatMap;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
public class DisplacementMapExample extends Application {
@Override
public void start(Stage stage) {
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("Displacement Map");
text.setFill(Color.web("0x3b596d"));
text.setFont(Font.font(null, FontWeight.BOLD, 50));
text.setEffect(displacementMap);
//Creating a Group object
Group root = new Group(text);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("DisplacementMap Effect");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
使用以下命令,从命令提示符编译并执行已保存的 java 文件。
javac --module-path %PATH_TO_FX% --add-modules javafx.controls DisplacementMapExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls DisplacementMapExample