Esempio n. 1
0
  public BufferedImage getRenderedImage(Dimension d, boolean withBackground) {
    if (offscreenCanvas == null) {
      offscreenCanvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration(), true);
    }
    offscreenCanvas.setSize(getSize());
    offscreenCanvas.getScreen3D().setSize(getScreen3D().getSize());
    offscreenCanvas.getScreen3D().setPhysicalScreenWidth(getScreen3D().getPhysicalScreenWidth());
    offscreenCanvas.getScreen3D().setPhysicalScreenHeight(getScreen3D().getPhysicalScreenHeight());
    BufferedImage bufImage = new BufferedImage(d.width, d.height, BufferedImage.TYPE_INT_ARGB);
    ImageComponent2D imgComp = new ImageComponent2D(ImageComponent2D.FORMAT_RGBA, bufImage);
    BufferedImage transparentImage =
        new BufferedImage(d.width, d.height, BufferedImage.TYPE_INT_ARGB);
    ImageComponent2D transparentComp =
        new ImageComponent2D(ImageComponent2D.FORMAT_RGBA, transparentImage);

    Color3f tempColor = new Color3f();
    background.getColor(tempColor);
    if (!withBackground) {
      background.setImage(transparentComp);
    }

    view.addCanvas3D(offscreenCanvas);
    offscreenCanvas.setOffScreenBuffer(imgComp);
    offscreenCanvas.renderOffScreenBuffer();
    offscreenCanvas.waitForOffScreenRendering();

    if (!withBackground) {
      background.setImage(null);
    }

    bufImage = offscreenCanvas.getOffScreenBuffer().getImage();
    // To release the reference of buffer inside Java 3D.
    offscreenCanvas.setOffScreenBuffer(null);
    view.removeCanvas3D(offscreenCanvas);

    return bufImage;
  }