更改每个形状的颜色阴影

zZurf:

我有以下图像,我需要将每个形状的颜色更改为绿色,但是每个形状可以具有不同的绿色阴影。我不确定该怎么做。我有一个想法,如何通过更改像素颜色而不是图像的一部分来处理整个图像。

我对javafx非常陌生,因此请记住这一点。

图片

塞缪尔·菲利普(Samuel Philipp):

最简单的方法是自己生成图像并分别添加每个矩形。在这种情况下,您可以分别为每个矩形设置颜色:

public class MyApp extends Application {
    @Override
    public void start(Stage primaryStage) {
        Group root = new Group();
        Scene scene = new Scene(root, 430, 230, Color.WHITE);

        List<Rectangle> rectangles = new ArrayList<>();

        int width = 100;
        int height = 50;
        int pad = 6;

        // first row
        rectangles.add(createRect(pad, pad, width, height, Color.GREEN));
        rectangles.add(createRect(pad + (width + pad), pad, width, height, Color.GREEN.brighter()));
        rectangles.add(createRect(pad + (width + pad) * 2, pad, width, height, Color.GREEN.darker()));
        rectangles.add(createRect(pad + (width + pad) * 3, pad, width, height, Color.GREEN));

        // second row
        rectangles.add(createRect(pad + (width + pad) * 0.5, pad + (height + pad), width, height, Color.GREEN.brighter()));
        rectangles.add(createRect(pad + (width + pad) * 1.5, pad + (height + pad), width, height, Color.GREEN));
        rectangles.add(createRect(pad + (width + pad) * 2.5, pad + (height + pad), width, height, Color.GREEN.darker()));

        // third row
        rectangles.add(createRect(pad + (width + pad), pad + (height + pad) * 2, width, height, Color.GREEN.darker()));
        rectangles.add(createRect(pad + (width + pad) * 2, pad + (height + pad) * 2, width, height, Color.GREEN));

        // last row
        rectangles.add(createRect(pad + (width + pad) * 1.5, pad + (height + pad) * 3, width, height, Color.GREEN.brighter()));

        root.getChildren().addAll(rectangles);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private Rectangle createRect(double x, double y, double width, double height, Color color) {
        Rectangle rectangle = new Rectangle(x, y, width, height);
        rectangle.setStroke(Color.BLACK);
        rectangle.setFill(color);
        return rectangle;
    }
}

结果如下:

图像结果

在我的示例中,我只使用了三种不同的绿色阴影,但是您可以自行设置每个矩形的颜色,并创建渐变或任何您喜欢的颜色。只需更换Color.GREENnew Color(0.0f, 0.7f, 0.0f, 1f)调整参数满足您的需求。

希望能有所帮助。

编辑:

如果要将生成的节点用作图像,可以使用该Node.snapshot方法来创建图像:

WritableImage snapshot = root.snapshot(new SnapshotParameters(), null);

如果要用图像替换原始矩形,可以使用以下命令:

root.getChildren().clear();
ImageView imageView = new ImageView(snapshot);
imageView.setX(pad);
imageView.setY(pad);
root.getChildren().add(imageView);

要将图像保存为文件,可以使用:

ImageIO.write(SwingFXUtils.fromFXImage(snapshot, null), "PNG", new File("/path/to/image.png"));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章