JavaFX: как получить цвет и альфа-прозрачность пикселя? - PullRequest
0 голосов
/ 12 апреля 2020

Есть ли способ получить цвет пикселя / альфа-прозрачность пикселя JavaFX Parent или Scene?

Например, как я могу получить цвет пикселя StackPane в (x,y)?

В Java Swing существует метод , printAll, из которого пиксель можно извлечь из любого компонента.

Однако я не могу найти такой метод в JavaFX.

РЕДАКТИРОВАТЬ: @kleopatra попросила полный репродуктивный пример, вот что:

package helloworld;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloWorld extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}

Как получить цвет пикселя root скажем, в x,y?

1 Ответ

0 голосов
/ 12 апреля 2020

Вот функция, которая возвращает цвет пикселя в любой x,y координате node:

static Color getColor(int x, int y, Node node) {
    SnapshotParameters sp = new SnapshotParameters();
    sp.setTransform(new Translate(-x, -y));
    sp.setViewport(new Rectangle2D(0,0,1,1));
    sp.setFill(javafx.scene.paint.Color.TRANSPARENT);
    WritableImage image = node.snapshot(sp, null);
    return image.getPixelReader().getColor(0, 0);
}

. Она также будет работать, если Node будет заменен на Scene, так как оба классы разделяют метод snapshot.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...