Hi,

I have used the same technique for saving the Canvas3D images in JPEG
and i dont have any problem. I have overridden the postSwap and saved
the Canvas3D contents based on a flag (writeJpeg) which is set from the
calling function. If you are getting blank images, set the writeJpeg
flag in the calling function and then call repaint method for the
Canvas3D and if necessary, delay the save to JPEG in the postSwap by
setting another counter for the number of times the Renderer calls the
Canvas3D methods.

Raghav

Kasparian, Raffi J. wrote:

>Hi Stam,
>
>I've had that same problem and now I don't. I don't understand why I did and
>I don't understand why I don't. There seems to be some *magic* involved.
>Serioiusly, though, maybe someone on this list knows what causes the
>problem. Anyway, below you will find my working solution.
>
>Raffi
>
>-----Original Message-----
>From: stam echad [mailto:[EMAIL PROTECTED]]
>Sent: Wednesday, September 25, 2002 6:25 AM
>To: [EMAIL PROTECTED]
>Subject: [JAVA3D] Screen Capturing resulting in Blank images
>
>
>Hi,
>
>I've tried to use the screen capturing functions as described in
>http://www.j3d.org/faq/capturing.html.
>Whenever I run my program and press the 'capture' button, the Canvas flashes
>grey for a few seconds and then a picture is saved as Jpg file. The problem
>is that the saved Jpg's are very often the blank grey flash instead of the
>contents of the Canvas3D I wanted to save. Has anyone encountered this
>problem and could anyone please provide me with some help in the matter?
>
>Thank You
>
>/*******************************************************************
>Copyright 2002. Science Applications International Corportion (SAIC)
>Raffi J. Kasparian
>1525 WILSON BOULEVARD
>SUITE 800
>ARLINGTON, VA 22209
>*******************************************************************/
>
>package orbiter;
>
>import com.sun.j3d.utils.image.*;
>import java.awt.*;
>import java.io.*;
>import javax.media.j3d.*;
>import javax.vecmath.*;
>import java.awt.image.BufferedImage;
>import com.sun.image.codec.jpeg.*;
>import java.util.*;
>
>public class CaptureCanvas3D extends Canvas3D{
>    private Timer timer = new Timer();
>
>    private Vector captureRequests = new Vector();
>
>    public CaptureCanvas3D( GraphicsConfiguration gc ){
>        super( gc );
>    }
>    public void captureOne( File file ){
>        ImageHandler request = createRequest( file );
>        synchronized( captureRequests ){
>            captureRequests.add( request );
>        }
>        getView().repaint();
>    }
>    public void postSwap(){
>        boolean pendingRequests = false;
>        synchronized( captureRequests ){
>            if( captureRequests.size() > 0 ){
>                pendingRequests = true;
>            }
>        }
>        if( pendingRequests ){
>            BufferedImage img = createBufferedImage();
>            handleRequests( img );
>        }
>    }
>    private void handleRequests( BufferedImage img ){
>        ImageHandler[] requests;
>        synchronized( captureRequests ){
>            requests = (ImageHandler[])captureRequests.toArray( new
>ImageHandler[captureRequests.size()] );
>            captureRequests.clear();
>        }
>        for( int i = 0; i < requests.length; ++i ){
>            requests[i].handleImage( img );
>        }
>    }
>    private ImageHandler createRequest( final File f ){//must be called from
>postSwap
>        ImageHandler request = new ImageHandler(){
>            public void handleImage( BufferedImage img ){
>                writeToFile( img, f );
>            }
>        };
>        return request;
>    }
>    private void writeToFile( BufferedImage image, File file ){
>        try{
>            FileOutputStream out = new FileOutputStream( file );
>            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder( out );
>            JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam( image
>);
>            param.setQuality( 1.0f, false );
>            encoder.setJPEGEncodeParam( param );
>            encoder.encode( image );
>            out.close();
>        }catch ( IOException e ){
>            e.printStackTrace();
>        }
>    }
>    private BufferedImage createBufferedImage(){
>        GraphicsContext3D  ctx = getGraphicsContext3D();
>        int w = getWidth();
>        int h = getHeight();
>        //BufferedImage bi = new BufferedImage( w, h,
>BufferedImage.TYPE_INT_RGB );
>        //BufferedImage bi = new BufferedImage( w, h,
>BufferedImage.TYPE_BYTE_INDEXED );
>        BufferedImage bi = new BufferedImage( w, h,
>BufferedImage.TYPE_BYTE_BINARY );
>        ImageComponent2D im = new ImageComponent2D(
>ImageComponent.FORMAT_R3_G3_B2, bi );
>        Raster ras = new Raster( new Point3f( -1.0f, -1.0f, -1.0f ),
>Raster.RASTER_COLOR, 0, 0, w, h, im, null );
>        ctx.readRaster( ras );
>        return ras.getImage().getImage();
>    }
>    interface ImageHandler{
>        public void handleImage( BufferedImage img );
>    }
>}
>
>
>
>
>
>_________________________________________________________________
>Chat with friends online, try MSN Messenger: http://messenger.msn.com
>
>===========================================================================
>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".
>
>===========================================================================
>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".
>
>

===========================================================================
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".

Reply via email to