java - 在 JavaFX 中打开、编辑和保存 file.pgm 上的图像 Canvas

标签 java javafx

此绘图区用 Canvas 绘制图像

        Canvas canvas= new Canvas();
        canvas.setHeight(500);
        canvas.setWidth(700);

GraphicsContext gc = canvas.getGraphicsContext2D();
        gc.setFill(Color.BLACK);
        gc.fillRect(0, 0, canvas.getWidth(), canvas.getHeight());
        gc.setFill(Color.WHITE);
        gc.fillRect(1, 1, canvas.getWidth() - 2, canvas.getHeight() - 2);

我用这种方法将绘图 Canvas 导出到 imagem.pgn 或快照及其正确

public void snapshotCanvasImageToPNG(Stage primaryStage) {

        FileChooser fileChooser = new FileChooser();

        FileChooser.ExtensionFilter extFilter
                = new FileChooser.ExtensionFilter("png files (*.png)", "*.png");
        fileChooser.getExtensionFilters().add(extFilter);

        File file = fileChooser.showSaveDialog(primaryStage);

        if (file != null) {
            try {
                WritableImage writableImage = new WritableImage((int) canvas.getWidth(), (int) canvas.getHeight());
                canvas.snapshot(null, writableImage);
                RenderedImage renderedImage = SwingFXUtils.fromFXImage(writableImage, null);
                ImageIO.write(renderedImage, "png", file);
            } catch (IOException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

我对使用这些方法打开编辑并将 Canvas 绘图保存到 file.pgm 有很多疑问 我做了这个但是完成起来很复杂

public void openFilePGM(Stage primaryStage) {

    FileChooser fileChooser = new FileChooser();

    FileChooser.ExtensionFilter extFilter
            = new FileChooser.ExtensionFilter("PGM files (*.pgm)", "*.pgm");
    fileChooser.getExtensionFilters().add(extFilter);


    File file = fileChooser.showOpenDialog(primaryStage);

    if (file != null) {
    //doubt here
    }
}

public void saveFilePGM(Stage primaryStage) {

    FileChooser fileChooser = new FileChooser();

    FileChooser.ExtensionFilter extFilter
            = new FileChooser.ExtensionFilter("PGM files (*.pgm)", "*.pgm");
    fileChooser.getExtensionFilters().add(extFilter);

    File file = fileChooser.showSaveDialog(primaryStage);

    if (file != null) {
       //doubt here
    }  
}

最佳答案

在 JavaFX 中使用 PGM 图像的唯一方法是通过 ImageJ 或 Java Advanced Imaging@VGR所述或其他第三方插件。

请查看this plugin包含此类 IO 函数的代码。

您可能还想看看 this answer它可以向您展示可以使用 JavaFX 轻松处理的格式。

关于java - 在 JavaFX 中打开、编辑和保存 file.pgm 上的图像 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24314668/

相关文章:

Java 反射性能

java - 使用 fragment 更改 Honeycomb 上的布局

java - Openjdk openJ9 vs 使用ZKOSS的热点反射差异

arraylist - Javafx - 使用数组列表填充表格 View 而不添加新列

JavaFx - TextField.setText() 抛出 nullpointerException

javafx - Tornadofx - 如何在每个实例上将参数传递给 Fragment

java - 将 Java 类导入 Groovy 模板(Play 框架 1.x)

java - 使用Java组合nn标签形成名词短语

java - 如何在新的 fxml javaFX0 上重定向用户

java - JavaFX View 初始化时的空指针