Leon Atherton Leon is a developer at IDRsolutions and product manager for BuildVu. He oversees the BuildVu product strategy and roadmap in addition to spending lots of time writing code.

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.



Are you a Java Developer working with PDF files?

Free: The Java Developer's Guide to PDF
Convert PDF to HTML in Java
Convert PDF Forms to HTML5 in Java
Convert PDF Documents to an image in Java
Work with PDF Documents in Java
Leon Atherton Leon is a developer at IDRsolutions and product manager for BuildVu. He oversees the BuildVu product strategy and roadmap in addition to spending lots of time writing code.

What is JPEG2000?

Alicia
54 sec read

What is PSD?

chika
52 sec read

What is PNG?

Mark Stephens
36 sec read

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();

Comments are closed.