Unidata - To provide the data services, tools, and cyberinfrastructure leadership that advance Earth system science, enhance educational opportunities, and broaden participation. Unidata
         
  advanced  
 

VisAD Servlet

Hi everyone,

sorry for the delay on this. I have used VisAD in conjunction with servlets
but priorities changed inthe project, and I let the servlets be for a while.

The point  is, I was generating images from a display - not a VisAD display,
but a JPanel which included a display and a few other panels - and it worked
sort of all right. I then tried to scale the whole thing down to a simple
(understandable) servlet and cannot reproduce what I did on other computer.

The relevant piece of code is this:

    ServletOutputStream servOutStream = response.getOutputStream();

    // set the content type so the browser will be able to interpret
correctly
    response.setContentType( JPG_CONTENT_TYPE );

//Debug info
System.out.println("1");

    // this is the image
   // but won't work...
    //BufferedImage bufImage = (BufferedImage)display.getImage(true);

// then I tried this, copied from other code

    java.awt.Component gp = (java.awt.Component) display.getComponent();

// check the sizes -> don't match!
System.out.println(gp.getWidth()+" "+jframe.getSize().width);

    Image image = (Image)  gp.createImage(300,300);//gp.getWidth ()
,gp.getHeight());
    Graphics g = image.getGraphics();
    gp.paint(g);

    // do some painting to test -> it works!
    g.setColor(Color.green);
    g.fillRect(0,0,120,120);

    BufferedImage bufImage = (BufferedImage)image;

System.out.println("2");

    // make a jpg out of it
    JPEGEncodeParam jepar = JPEGCodec.getDefaultJPEGEncodeParam(bufImage);
    jepar.setQuality( 1.0f, true);
    JPEGImageEncoder jpege = JPEGCodec.createJPEGEncoder(servOutStream) ;
    jpege.encode(bufImage, jepar);
System.out.println("3");

    // and send it to the browser
    servOutStream.flush();
    servOutStream.close();
System.out.println("4");

Unfortunately display.getImage(true); doesn't work. Creating the image by
use of pure force doesn't work here, either. I cannot tell what's the
matter, but have heard in Java 1.4 there isn't such a problem (of having to
create off-line frame and etc...).

Sorry, this isn't much help... I got an example servlet ready to send, but
the most important part - creating the display - won't work.

Util.captureImage() only works when the display is visible.

Cheers,

Ugo


 
 
  Contact Us     Site Map     Search     Terms and Conditions     Privacy Policy     Participation Policy
 
National Science Foundation (NSF) UCAR Community Programs   Unidata is a member of the UCAR Community Programs, is managed by the University Corporation for Atmospheric Research, and is sponsored by the National Science Foundation.
P.O. Box 3000     Boulder, CO 80307-3000 USA     Tel: 303-497-8643     Fax: 303-497-8690