JavaFX制作水墨大写意画板程序

来源:互联网 发布:外汇手机模拟软件 编辑:程序博客网 时间:2024/04/27 17:47

中国水墨有灵动随机变幻的特性风格


水墨大写意笔法如锥画沙、如屋漏痕,如何模拟,请看冰豆小李的超简易方法:


package waterinkmaster;import javafx.application.Application;import javafx.event.EventHandler;import javafx.scene.Scene;import javafx.scene.canvas.Canvas;import javafx.scene.canvas.GraphicsContext;import javafx.scene.input.KeyEvent;import javafx.scene.input.MouseEvent;import javafx.scene.layout.StackPane;import javafx.scene.paint.Color;import javafx.stage.Stage;public class WaterInkMaster extends Application {    private static final int WIDTH = 1000;    private static final int HEIGHT = 500;    private int brushSize = 30;    private Color color = Color.BLACK;    @Override    public void start(Stage primaryStage) {        Canvas canvas = new Canvas(WIDTH, HEIGHT);        GraphicsContext gc = canvas.getGraphicsContext2D();        //在canvas上拖动鼠标时绘制图形        canvas.setOnMouseDragged(new EventHandler<MouseEvent>() {            @Override            public void handle(MouseEvent me) {                double px = me.getX() - brushSize / 2;                double py = me.getY() - brushSize / 2;                double pw = Math.random() * brushSize;                double ph = Math.random() * brushSize;                gc.save();                gc.setFill(color);                gc.fillOval(px, py, pw, ph);                gc.restore();            }        });        StackPane root = new StackPane();        root.getChildren().add(canvas);        Scene scene = new Scene(root, WIDTH, HEIGHT);        //按住A键和F键分别缩小和增大画笔尺寸        scene.setOnKeyTyped(new EventHandler<KeyEvent>() {            @Override            public void handle(KeyEvent ke) {                System.out.println(ke.getCharacter());                switch (ke.getCharacter()) {                    case "F":                        brushSize++;                        break;                    case "f":                        brushSize++;                        break;                    case "A":                        if (brushSize > 0) {                            brushSize--;                        }                        ;                        break;                    case "a":                        if (brushSize > 0) {                            brushSize--;                        }                        ;                        break;                    case "1":                        color = Color.rgb(0, 0, 0, 1);                        break;                    case "2":                        color = Color.rgb(50, 50, 50, 1);                        break;                    case "3":                        color = Color.rgb(100, 100, 100, 0.9);                        break;                    case "4":                        color = Color.rgb(150, 150, 150, 0.8);                        break;                    case "5":                        color = Color.rgb(200, 200, 200, 0.75);                        break;                    case "6":                        color = Color.rgb(250, 250, 250, 0.5);                        break;                }            }        });        primaryStage.setTitle("水墨画师");        primaryStage.setScene(scene);        primaryStage.show();    }    public static void main(String[] args) {        launch(args);    }}

肆意纵横吧!


0 0