如何在不实际显示窗口的情况下创建/保存 JavaFX 饼图的图像?
JavaFX 的 **javafx.scene.chart** 包提供了创建各种图表(例如:折线图、面积图、条形图、饼图、气泡图、散点图等)的类。
要创建这些图表中的任何一个,您需要:
实例化相应的类。
设置所需的属性。
创建一个布局/组对象来容纳图表。
将布局/组对象添加到场景。
通过调用 **show()** 方法显示场景。
这将在 JavaFX 窗口上显示所需的图表。
在不显示窗口的情况下保存图像
**Scene** 类的 **snapshot()** 方法会拍摄当前场景的快照,并将其作为 **WritableImage** 对象返回。
使用 **SwingFXUtils** 类的 **FromFXImage()** 方法,您可以从获得的 **WritableImage** 获取 **BufferedImage**,并将其写入本地所需的 **文件**,如下所示:
ImageIO.write(SwingFXUtils.fromFXImage(image, null), "PNG", file);
示例
import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.embed.swing.SwingFXUtils; import javafx.scene.Group; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.scene.chart.PieChart; import javafx.scene.image.WritableImage; public class ChartsExample extends Application { public void start(Stage stage) throws IOException { //Preparing ObservbleList object ObservableList<PieChart.Data>pieChartData = FXCollections.observableArrayList( new PieChart.Data("Iphone 5S", 13), new PieChart.Data("Samsung Grand", 25), new PieChart.Data("MOTO G", 10), new PieChart.Data("Nokia Lumia", 22)); //Creating a Pie chart PieChart pieChart = new PieChart(pieChartData); pieChart.setTitle("Mobile Sales"); pieChart.setClockwise(true); pieChart.setLabelLineLength(50); pieChart.setLabelsVisible(true); pieChart.setStartAngle(180); //Creating a Group object Scene scene = new Scene(new Group(), 595, 400); stage.setTitle("Charts Example"); ((Group) scene.getRoot()).getChildren().add(pieChart); //Saving the scene as image WritableImage image = scene.snapshot(null); File file = new File("D:\JavaFX\tempPieChart.png"); ImageIO.write(SwingFXUtils.fromFXImage(image, null), "PNG", file); System.out.println("Image Saved"); } public static void main(String args[]){ launch(args); } }
输出
如果您观察输出路径,您可以找到如下所示的保存图像:
广告