改变每个形状的颜色深浅
Change shade of color of each shape
我有下图,我需要将每个形状的颜色更改为绿色,但每个形状都可以有不同的绿色阴影。我不确定该怎么做。我知道如何通过更改像素颜色来处理整个图像,但不是图像的一部分。
我是 javafx 的新手,所以请记住这一点。
实现这一点的最简单方法是自己生成图像并单独添加每个矩形。在这种情况下,您可以独立设置每个矩形的颜色:
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.GREEN
替换为 new 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"));
我有下图,我需要将每个形状的颜色更改为绿色,但每个形状都可以有不同的绿色阴影。我不确定该怎么做。我知道如何通过更改像素颜色来处理整个图像,但不是图像的一部分。
我是 javafx 的新手,所以请记住这一点。
实现这一点的最简单方法是自己生成图像并单独添加每个矩形。在这种情况下,您可以独立设置每个矩形的颜色:
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.GREEN
替换为 new 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"));