Dear Experts, I have, probably, a naive for an expert question regarding printing Java3d screens. However I hava some difficulties in 2 elementary examples which I draw from Java3d print demo examples. Bellow I present a piece of code that exhibits the following problems: 1) the size of Buffered image is completely different than Screen3D Object presumably drawn on my terminal. 2) After I got Buffered image, I manage successfully send it to a printer. However, If I use straighforward transformation into a FileOutputStream, all colors are completely mismatched.
Any suggesting would be greatly appreaciated. Here is the code: public class MyClass { // a piece of code creating a scene and staff ....... GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas3D = new Canvas3D( config ); Universe3D universe = new SimpleUniverse( canvas ); OffScreenCanvas3D offScreenCanvas3D = new OffScreenCanvas3D(config, true); _universe.getViewer().getView().addCanvas3D(_offScreenCanvas3D); ........ ......... // here is a printing exercise public void myPrint() { Point loc = canvas3D.getLocationOnScreen(); _offScreenCanvas3D.setOffScreenLocation(loc); Dimension dim = canvas3D.getSize(); Screen3D sOn = canvas3D.getScreen3D(); Screen3D sOff = offScreenCanvas3D.getScreen3D(); // Here is the first problem, this method calls // do not assign the right size for the screen of offscreen canvas3d sOff.setSize(dim); sOff.setPhysicalScreenWidth(sOn.getPhysicalScreenWidth()); sOff.setPhysicalScreenHeight(sOn.getPhysicalScreenHeight()); BufferedImage bImage = _offScreenCanvas3D.doRender(dim.width, dim.height); // send this buffered image to printer // this works OK (new ImagePrinter(bImage)).print(); // However, this simple code messes all colors of an image String path = "c:\Temp\image.jpg"; FileOutputStream out = new FileOutputStream(path); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(bImage); out.close(); } // To complete this example, here are some helper classes public class OffScreenCanvas3D extends Canvas3D { public OffScreenCanvas3D(GraphicsConfiguration graphicsConfiguration, boolean offScreen) { super(graphicsConfiguration, offScreen); } public BufferedImage doRender(int width, int height) { BufferedImage bImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); ImageComponent2D buffer = new ImageComponent2D(ImageComponent.FORMAT_RGBA, bImage); setOffScreenBuffer(buffer); renderOffScreenBuffer(); waitForOffScreenRendering(); bImage = getOffScreenBuffer().getImage(); return bImage; } public void postSwap() { // No-op since we always wait for off-screen rendering to complete } } public class ImagePrinter implements Printable, ImageObserver { BufferedImage bImage; public ImagePrinter(BufferedImage bImage) { this.bImage = bImage; } public void print() { PrinterJob printJob = PrinterJob.getPrinterJob(); PageFormat pageFormat = printJob.defaultPage(); pageFormat.setOrientation(PageFormat.LANDSCAPE); pageFormat = printJob.validatePage(pageFormat); printJob.setPrintable(this, pageFormat); if (printJob.printDialog()) { try { printJob.print(); } catch (PrinterException ex) { ex.printStackTrace(); } } } public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) { return false; } public int print(Graphics g, PageFormat pf, int pi) throws PrinterException { if (pi >= 1) { return Printable.NO_SUCH_PAGE; } Graphics2D g2d = (Graphics2D)g; //g2d.translate(pf.getImageableX(), pf.getImageableY()); AffineTransform t2d = new AffineTransform(); t2d.translate(pf.getImageableX(), pf.getImageableY()); double xscale = pf.getImageableWidth() / (double)bImage.getWidth(); double yscale = pf.getImageableHeight() / (double)bImage.getHeight(); double scale = Math.min(xscale, yscale); t2d.scale(scale, scale); try { g2d.drawImage(bImage,t2d, this); } catch (Exception ex) { ex.printStackTrace(); return Printable.NO_SUCH_PAGE; } return Printable.PAGE_EXISTS; } } Once again, appreaciate greatly any help, Boris =========================================================================== To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff JAVA3D-INTEREST". For general help, send email to [EMAIL PROTECTED] and include in the body of the message "help".