/** * Creates an offscreen buffer to be attached to the heavyweight * buffer. Buffer is created 'byreference' * * @param width the width of the buffer. * @param height the height of the buffer. */ private void createOffScreenBuffer(int width, int height) { computePhysicalDimensions(); // this.canvas.setDoubleBufferEnable( false ); java.awt.image.BufferedImage bImage = new java.awt.image.BufferedImage(width, height, java.awt.image.BufferedImage.TYPE_INT_ARGB); org.scijava.java3d.ImageComponent2D image = new org.scijava.java3d.ImageComponent2D(org.scijava.java3d.ImageComponent2D.FORMAT_RGBA8, bImage, true, false ); image.setCapability(image.ALLOW_IMAGE_READ); image.setCapability(image.ALLOW_IMAGE_WRITE); this.canvas.stopRenderer(); // offscreenrendering might occur even if the renderer is stopped. For that reason, i'm waiting for an hypothetical offscreen render to finish before setting offscreen rendering. // Otherwise, rendering will stop with an exception. this.canvas.waitForOffScreenRendering(); this.canvas.setOffScreenBuffer(image); this.canvas.startRenderer(); }
@Override ImageComponent2D createImageComponent(final byte[] pix, final int w, final int h) { final int[] bandOffset = { 0, 1, 2, 3 }; final DataBufferByte db = new DataBufferByte(pix, w * h * 4, 0); final WritableRaster raster = Raster.createInterleavedRaster(db, w, h, w * 4, 4, bandOffset, null); final BufferedImage bImage = new BufferedImage(rgbCM, raster, false, null); final ImageComponent2D bComp = new ImageComponent2D(ImageComponent.FORMAT_RGBA, w, h, true, true); bComp.setCapability(ImageComponent.ALLOW_IMAGE_WRITE); bComp.set(bImage); return bComp; } }
@Override ImageComponent2D createImageComponent(final byte[] pix, final int w, final int h) { final DataBufferByte db = new DataBufferByte(pix, w * h, 0); final SampleModel smod = greyCM.createCompatibleSampleModel(w, h); final WritableRaster raster = Raster.createWritableRaster(smod, db, null); final BufferedImage bImage = new BufferedImage(greyCM, raster, false, null); final ImageComponent2D bComp = new ImageComponent2D(ImageComponent.FORMAT_CHANNEL8, w, h, true, true); bComp.setCapability(ImageComponent.ALLOW_IMAGE_WRITE); bComp.set(bImage); return bComp; } }
buffer.setCapability(ImageComponent2D.ALLOW_IMAGE_READ); canvas3D.setOffScreenBuffer(buffer); canvas3D.renderOffScreenBuffer();
public Texture getTexture() { Texture2D tex = new Texture2D(Texture.BASE_LEVEL, TEX_MODE, w, h); bComp = new ImageComponent2D(COMP_TYPE, w, h, BY_REF, Y_UP); bComp.setCapability(ImageComponent.ALLOW_IMAGE_WRITE); bComp.set(bImage); tex.setImage(0, bComp); tex.setEnable(true); tex.setMinFilter(Texture.BASE_LEVEL_LINEAR); tex.setMagFilter(Texture.BASE_LEVEL_LINEAR); tex.setBoundaryModeS(Texture.CLAMP); tex.setBoundaryModeT(Texture.CLAMP); return tex; }
public Texture getTexture() { Texture2D tex = new Texture2D(Texture.BASE_LEVEL, TEX_MODE, w, h); bComp = new ImageComponent2D(COMP_TYPE, w, h, BY_REF, Y_UP); bComp.setCapability(ImageComponent.ALLOW_IMAGE_WRITE); bComp.set(createImage()); tex.setImage(0, bComp); tex.setEnable(true); tex.setMinFilter(Texture.BASE_LEVEL_LINEAR); tex.setMagFilter(Texture.BASE_LEVEL_LINEAR); tex.setBoundaryModeS(Texture.CLAMP); tex.setBoundaryModeT(Texture.CLAMP); return tex; }