Wednesday, January 8, 2014

Menyimpan gambar di canvas ke file di javaFX

Berikut ini saya berikan contoh bagaimana menyimpan hasil penggambaran free-form kita dalam javaFx canvas ke dalam file.
package fjr.test.testIO;
   import java.io.File;

import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.*;
import javafx.scene.image.*;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.stage.*;

import javax.imageio.ImageIO;

import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.scene.paint.Color;


public class PrintCanvas extends Application {

 GraphicsContext gc; 
 Canvas canvas; 
 double canvaswidth  = 300 , canvasheight = 350 ; 
 
    @Override
    public void start(Stage primaryStage) {
        Group root = new Group();
        Scene scene = new Scene(root, 400, 450);
        canvas = new Canvas(canvaswidth, canvasheight);
        canvas.setTranslateX(10);
        canvas.setTranslateY(50);
        gc = canvas.getGraphicsContext2D();
        gc.setLineWidth(23);
        gc.setFill(Color.GREEN);
        gc.setStroke(Color.BLUE);
        gc.setLineWidth(6);
        
        gc.strokeRect(0, 0, canvaswidth, canvasheight);
                
        gc.setStroke(Color.BLACK);
        
        final WritableImage wim = new WritableImage((int)canvaswidth, (int)canvasheight);
        root.getChildren().add(canvas); 
        primaryStage.setScene(scene);
        primaryStage.show();
        
        final  Button simpan = new Button();
        simpan.setTranslateX(10);
        simpan.setTranslateY(10);
        simpan.setPrefSize(100, 30);
        simpan.setText("SIMPAN");
  simpan.setOnAction(new EventHandler() {
   @Override
   public void handle(ActionEvent arg0) {
    canvas.snapshot(null, wim);
    File file = new File("E:/CanvasImage.png");
    try {
     ImageIO.write(SwingFXUtils.fromFXImage(wim, null), "png",
       file);
     System.out.println("File sudah disimpan"); 
    } catch (Exception s) {
    }
   }
  });

  root.getChildren().add(new HBox(){{
   getChildren().add(simpan);
  }}); 
  

  canvas.addEventHandler(MouseEvent.MOUSE_DRAGGED, new EventHandler() {
            @Override
            public void handle(MouseEvent e) {
             gc.lineTo(e.getX(), e.getY());
             gc.stroke(); 
            }
        });
  
  canvas.addEventHandler(MouseEvent.MOUSE_PRESSED, new EventHandler() {
            @Override
            public void handle(MouseEvent e) {
             gc.beginPath();
             gc.moveTo(e.getX(), e.getY());
             gc.stroke();
            }
        });

    }

    public static void main(String[] args) {
        launch(args);
    }

}
Hasilnya adalah


No comments: