Svyatoslav Nenashev Asked:2020-05-26 11:51:54 +0800 CST2020-05-26 11:51:54 +0800 CST 2020-05-26 11:51:54 +0800 CST JavaFx 在 ImageView 上的绘制及其陷阱 772 我在 imageView 中加载了一个图像,我已经看到了甚至可以在其上绘制的示例,但是是否可以将图像与更改一起保存?我已经搜索了互联网,但没有找到明确的答案。 java 1 个回答 Voted Best Answer Andrew Bystrov 2020-05-29T14:54:58+08:002020-05-29T14:54:58+08:00 是的,可以保存图像。下面是一个演示此行为的简单示例。 import javafx.application.Application; import javafx.embed.swing.SwingFXUtils; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.SnapshotParameters; import javafx.scene.control.Button; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.image.WritableImage; import javafx.scene.layout.BorderPane; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import javafx.stage.Stage; import javax.imageio.ImageIO; import java.awt.image.RenderedImage; import java.io.File; import java.io.IOException; public class TestApplication extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) { BorderPane pane = new BorderPane(); ImageView imageView = new ImageView(); Group group = new Group(); Image image = new Image("pathToImage"); imageView.setImage(image); Rectangle rectangle = new Rectangle(40, 40, 300, 300); rectangle.setFill(Color.RED); group.getChildren().add(imageView); group.getChildren().add(rectangle); pane.setCenter(group); Button button = new Button("Save image"); button.setOnAction(e -> { try { WritableImage snapshot = group.snapshot(new SnapshotParameters(), null); File file = new File("test.png"); RenderedImage renderedImage = SwingFXUtils.fromFXImage(snapshot, null); ImageIO.write(renderedImage, "png", file); } catch (IOException ex) { ex.printStackTrace(); } }); pane.setTop(button); Scene scene = new Scene(pane, 400, 400); stage.setScene(scene); stage.show(); } } 在这个例子中,没有画图的逻辑,只是说明我们在图片上叠加了一个红色的矩形,并将结果保存到文件中。主要逻辑是您需要创建一个Group,其中将ImageView包含所有其他绘制的组件(上例中的 Rectangle )。接下来,您为此Group创建WritableImage并将其保存到一个文件中。
是的,可以保存图像。下面是一个演示此行为的简单示例。
在这个例子中,没有画图的逻辑,只是说明我们在图片上叠加了一个红色的矩形,并将结果保存到文件中。主要逻辑是您需要创建一个
Group
,其中将ImageView
包含所有其他绘制的组件(上例中的 Rectangle )。接下来,您为此Group
创建WritableImage
并将其保存到一个文件中。