Leon Atherton Leon is a developer at IDRsolutions and product manager for BuildVu. He is responsible for managing the BuildVu product strategy and roadmap, and also spends a lot of his time writing code to build new features, improve functionality, fix bugs, and improve the testing for BuildVu.

How to convert from BufferedImage to JavaFX 2.2 Image

49 sec read

Until recently, if you wanted to load a BufferedImage in JavaFX you were out of luck – the only way to do it was to write out the BufferedImage to disk and then read it back in as a JavaFX Image.

But, in August when JavaFX 2.2 was released, the update included a class called WritableImage which extends Image. Along with PixelWriter and PixelReader classes, this gives us greater control over images in JavaFX.

Using the PixelWriter and the getRGB method of BufferedImage, we are now able to read a BufferedImage into a WritableImage. As WritableImage extends Image, we can now use this however we would an Image!

Here’s how:

        BufferedImage bf = null;
        try {
            bf = ImageIO.read(new File("C:/location/of/image.png"));
        } catch (IOException ex) {
            System.out.println("Image failed to load.");
        }
 
        WritableImage wr = null;
        if (bf != null) {
            wr = new WritableImage(bf.getWidth(), bf.getHeight());
            PixelWriter pw = wr.getPixelWriter();
            for (int x = 0; x < bf.getWidth(); x++) {
                for (int y = 0; y < bf.getHeight(); y++) {
                    pw.setArgb(x, y, bf.getRGB(x, y));
                }
            }
        }
 
        ImageView imView = new ImageView(wr);

Alternatively, you could use the toFXImage method from SwingFXUtils, but where’s the fun in that?

This article was inspired by converting the PageFlow mode in out Java PDF Viewer from Java3D to JavaFX. I have written several articles on converting our Java3D usage into JavaFX and you can read the other articles here.

IDRsolutions develop a Java PDF Viewer and SDK, an Adobe forms to HTML5 forms converter, a PDF to HTML5 converter and a Java ImageIO replacement. On the blog our team post anything interesting they learn about.

Leon Atherton Leon is a developer at IDRsolutions and product manager for BuildVu. He is responsible for managing the BuildVu product strategy and roadmap, and also spends a lot of his time writing code to build new features, improve functionality, fix bugs, and improve the testing for BuildVu.

One Reply to “How to convert from BufferedImage to JavaFX 2.2 Image”

  1. I have a problem I want to send a webcam image for sokets in javafx and I do not know how I put the code to see if you can help me

    Server:

    @Override
    public void run() {

    try {
    ss = new ServerSocket(puerto);
    System.out.println(“Escuchando…”);

    //Cam cam;
    while(true) {
    s = ss.accept();
    System.out.println(“Conectado”);

    final float FACTOR = 4f;

    BufferedImage bf = ImageIO.read(s.getInputStream());
    //ImageIO.write(bufferedImage,”png”, new FileOutputStream(“/home/leyer/image.png”));
    System.out.println(“Image received!”);

    WritableImage wr = null;
    if (bf != null) {
    wr = new WritableImage(bf.getWidth(), bf.getHeight());
    PixelWriter pw = wr.getPixelWriter();
    for (int x = 0; x < bf.getWidth(); x++) {
    for (int y = 0; y < bf.getHeight(); y++) {
    pw.setArgb(x, y, bf.getRGB(x, y));
    }
    }
    }

    scanner.setGraphic(new ImageView(wr));

    s.close();
    }

    } catch (Exception e) {
    e.printStackTrace();
    }

    }

    Cliente:

    Thread hiloWebcam = new Thread() {
    @Override
    public void run() {
    // inicializamos webcam
    Webcam webcam = Webcam.getDefault();
    webcam.setViewSize(WebcamResolution.VGA.getSize());

    WebcamPanel panel = new WebcamPanel(webcam);
    panel.setFPSDisplayed(true);
    panel.setDisplayDebugInfo(true);
    panel.setImageSizeDisplayed(true);
    panel.setMirrored(true);
    // la insertamos al panel
    swingNode.setContent(panel);

    try {

    while (true)
    {
    s = new Socket(ip, puerto);
    ImageIO.write(webcam.getImage(), "png", s.getOutputStream());
    s.getOutputStream().flush();
    }

    } catch (IOException e) {
    e.printStackTrace();
    }

    }
    };
    hiloWebcam.setDaemon(true);
    hiloWebcam.start();

Leave a Reply

Your email address will not be published. Required fields are marked *