[Date Prev][Date Next][Index][Thread]
[SGT Mail Archive]
[SGT Main Page]
Re: Creating bitmaps of SGT plots
- To: "'sgt@noaa.gov'" <sgt@noaa.gov>
- Subject: Re: Creating bitmaps of SGT plots
- From: Bob Simons <Bob.Simons@noaa.gov>
- Date: Thu, 16 Feb 2006 08:39:39 -0800
- In-reply-to: <001901c632cf$e5ae9200$0200a8c0@JONSMACHINE>
- Organization: NOAA/ERD
- References: <001901c632cf$e5ae9200$0200a8c0@JONSMACHINE>
- Reply-To: Bob Simons <Bob.Simons@noaa.gov>
- User-Agent: Mozilla Thunderbird 1.0 (Windows/20041206)
*************************************************
Message from the sgt mail list.
*************************************************
Thank you for your email.
Jon Blower wrote:
> Hi Bob,
>
> ... Actually, having
> looked at it again I still don't fully understand what you've done. It
> looks like you're overriding the getBounds() method of sgt.Pane. How does
> this help with drawing off-screen?
I don't remember. Hopefully, it will be clear when you see what code was
there before. But I suspect it is part of the way to decouple from the
JComponent (or whatever it was) of the applet, have getBounds reflect
the size of the JPane (which is a stand in for the image), and thus make
the transformations from "graph coordinates" or "physical coordinates"
to "device coordinates" (in our case, the image) work correctly.
Also, according to Javadoc the Pane
> class is deprecated in favour of JPane, which is what you suggest using.
> Should the changes be made to JPane as well?
Sorry, my notes were mistaken. Please make the changes to JPane. I don't
use Pane.
>
> Also, the JPane Javadoc (which I didn't read until now, oops) says, "By
> default, the JPane will draw on the screen, but it is designed to allow
> drawing in an offscreen buffer that can be printed (for applications)." So
> is there a need for making the changes you suggest or should it just work
> anyway?
I think you need to make the changes I suggested so that you can call
jPane.draw(graphics2D) with the graphics2D from your image. That is the
ultimate goal: that is what makes sgt draw directly to the image. When I
made the changes, I worked backwards from jPane.draw(graphics2D) and
made changes to make that work. The changes are just to make that work
and decouple from all that applet stuff.
>
> Thanks for all your help with this. Sorry about all the questions, I'm new
> to SGT (and haven't done much with Java graphics either!)
Good luck.
>
> Jon
>
> --------------------------------------------------------------
> Dr Jon Blower Tel: +44 118 378 5213 (direct line)
> Technical Director Tel: +44 118 378 8741 (ESSC)
> Reading e-Science Centre Fax: +44 118 378 6413
> ESSC Email: jdb@mail.nerc-essc.ac.uk
> University of Reading
> 3 Earley Gate
> Reading RG6 6AL, UK
> --------------------------------------------------------------
>
>
>>-----Original Message-----
>>From: Bob Simons [mailto:Bob.Simons@noaa.gov]
>>Sent: 16 February 2006 00:52
>>To: Jon Blower
>>Subject: Re: Creating bitmaps of SGT plots
>>
>>
>>
>>Jon Blower wrote:
>>
>>>*************************************************
>>>Message from the sgt mail list.
>>>*************************************************
>>>
>>>Hi Bob,
>>>
>>>
>>>
>>>>You misunderstood my original suggestion (see the bottom of this email).
>>>>When you call jPane.draw(graphics2D) with the graphics2D object from
>>>>your BufferedImage, SGT is drawing directly to the BufferedImage. There
>>>>is no middleman (a JComponent).
>>>
>>>
...
>>Good luck with SGT.
>>
>>
>>>Thanks, Jon
>>>
>>>
>>>
>>>
>>>>-----Original Message-----
>>>>From: Bob Simons [mailto:Bob.Simons@noaa.gov]
>>>>Sent: 14 February 2006 16:45
>>>>To: 'sgt@noaa.gov'
>>>>Subject: Re: Creating bitmaps of SGT plots
>>>>
>>>>*************************************************
>>>>Message from the sgt mail list.
>>>>*************************************************
>>>>
>>>>
>>>>
>>>>Jon Blower wrote:
>>>>
>>>>
>>>>>*************************************************
>>>>>Message from the sgt mail list.
>>>>>*************************************************
>>>>>
>>>>>Thanks again Bob,
>>>>>
>>>>>The tip about "headless" looks very useful, I'll try that out! I'm
>>
>>sure
>>
>>>>>that's the simplest way of achieving what I want, thanks.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>You could, if you wanted, write your own class which extends
>>
>>Graphics2D
>>
>>>>>>and performs all of the operations by manipulating an array of ints
>>>>>>(each representing a pixel) which can later be converted to an Image.
>>>>>>But that would be a stunningly huge job -- years of work to do it
>>
>>right.
>>
>>>>>
>>>>>I didn't quite mean that - rather I meant that, at some point, SGT must
>>>
>>>be
>>>
>>>
>>>>>using Graphics2D to paint stuff onto a Component (or JComponent).
>>>
>>>Surely it
>>>
>>>
>>>>>would be possible simply to get it to paint onto the graphics context
>>
>>of
>>
>>>an
>>>
>>>
>>>>>Image instead? With the method you gave me (which is quick and neat to
>>>>>implement) SGT is painting onto a Component, then your method copies
>>
>>the
>>
>>>>>graphics onto an Image. I just thought we could cut out the middle man
>>>
>>>and
>>>
>>>
>>>>>paint directly to an Image. I wasn't thinking of constructing a bitmap
>>>>>completely from scratch by manipulating a set of ints.
>>>>
>>>>You misunderstood my original suggestion (see the bottom of this email).
>>>>When you call jPane.draw(graphics2D) with the graphics2D object from
>>>>your BufferedImage, SGT is drawing directly to the BufferedImage. There
>>>>is no middleman (a JComponent).
>>>>
>>>>
>>>>
>>>>>Regards, Jon
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>-----Original Message-----
>>>>>>From: Bob Simons [mailto:Bob.Simons@noaa.gov]
>>>>>>Sent: 14 February 2006 16:26
>>>>>>To: Jon Blower
>>>>>>Subject: Re: Creating bitmaps of SGT plots
>>>>>>
>>>>>>
>>>>>>
>>>>>>Jon Blower wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>>*************************************************
>>>>>>>Message from the sgt mail list.
>>>>>>>*************************************************
>>>>>>>
>>>>>>>Thanks Bob, that's helpful. It's pretty similar to the way I'd
>>
>>hacked
>>
>>>>>>>together. Unfortunately it still suffers from the disadvantage that
>>>>>
>>>>>there
>>>>>
>>>>>
>>>>>
>>>>>>>needs to be an X server running even for "invisible" drawing of the
>>>>>>>components. This is tricky in my particular setup.
>>>>>>>
>>>>>>>I was wondering if someone could point me in the direction of the
>>
>>bits
>>
>>>>>of
>>>>>
>>>>>
>>>>>
>>>>>>>code that do the actual construction of the bitmap picture that is
>>>>>
>>>>>painted
>>>>>
>>>>>
>>>>>
>>>>>>>on to the components in question? Then I could just adapt these bits
>>>
>>>of
>>>
>>>
>>>>>>>code to paint directly onto an Image. I'm most interested in
>>
>>plotting
>>
>>>>>2-D
>>>>>
>>>>>
>>>>>
>>>>>>>grids of data (i.e. SGTGrids).
>>>>>>
>>>>>>All SGT calls to draw things ultimately resolve down to the standard
>>>>>>methods of the Java Graphics and Graphics2D classes. Even painting
>>>>>>directly to an Image relies on getting the Graphics/Graphics2D object
>>>>>
>>>>>>from the Image and then calling those methods. Actually, that is what
>>>>>
>>>>>
>>>>>>SGT does when you pass it the Graphics2D object from an Image.
>>>>>>
>>>>>>You could, if you wanted, write your own class which extends
>>
>>Graphics2D
>>
>>>>>>and performs all of the operations by manipulating an array of ints
>>>>>>(each representing a pixel) which can later be converted to an Image.
>>>>>>But that would be a stunningly huge job -- years of work to do it
>>
>>right.
>>
>>>>>>Getting "headless" to work certainly must be an easier task.
>>>>>>
>>>>>>I don't think you need to run an X11 server. Instead, you need to run
>>>>>>your program "headless". For me to get this to work on a Linux
>>
>>computer
>>
>>>>>>running Apache and Tomcat (which serves my JSP program), I had to put
>>>>>>"export JAVA_OPTS=-Djava.awt.headless=true" in
>>>>>><TomcatRoot>/bin/startup.sh . Other seemingly reasonable things
>>
>>(e.g.,
>>
>>>>>>putting
>>>>>> System.setProperty("java.awt.headless", "true");
>>>>>>in the constructor for my main class) don't work because of the nature
>>>>>>of how Tomcat works. See the java.exe documentation for "headless"
>>>>>>information. It took me a long time to figure this out.
>>>>>>
>>>>>>Also, I vaguely remember that some things related to "headless" on
>>>>>>Linux/Unix changed with Java 1.4 or 1.5. See the change logs as
>>>>>>java.sun.com or Google to find that info. I certainly recommend 1.5
>>
>>for
>>
>>>>>>lots of reasons.
>>>>>>
>>>>>>It is unfortunate that Java makes these "headless" operations
>>
>>difficult.
>>
>>>>>>Good luck.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>>Thanks,
>>>>>>>Jon
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>-----Original Message-----
>>>>>>>>From: Bob Simons [mailto:Bob.Simons@noaa.gov]
>>>>>>>>Sent: 13 February 2006 16:21
>>>>>>>>To: sgt@noaa.gov
>>>>>>>>Subject: Re: Creating bitmaps of SGT plots
>>>>>>>>
>>>>>>>>*************************************************
>>>>>>>>Message from the sgt mail list.
>>>>>>>>*************************************************
>>>>>>>>
>>>>>>>>I have modified SGT to work as part of a server program and generate
>>>>>>>>BufferedImages. I hacked the SGT code a little to make this
>>
>>possible.
>>
>>>>>>>>Here are my notes. I am sorry they are a little terse. I hope they
>>
>>are
>>
>>>>>>>>helpful.
>>>>>>>>
>>>>>>>>To allow using the system in a non-GUI way:
>>>>>>>> In sgt.Layer.computeScale, I changed
>>>>>>>> Rectangle bnds = getBounds();
>>>>>>>> to
>>>>>>>> Rectangle bnds = pbnds;
>>>>>>>>In sgt.Pane, I added
>>>>>>>> class field:
>>>>>>>> Rectangle bounds;
>>>>>>>> to constructor:
>>>>>>>> bounds = new Rectangle(0,0, size.width, size.height);
>>>>>>>> new method:
>>>>>>>> public Rectangle getBounds() {
>>>>>>>> return bounds;
>>>>>>>> }
>>>>>>>>In sgt.dm.Collection:
>>>>>>>> change variable "enum" to "en" to allow use with Java 1.5
>>>>>>>>Note about SGT coordinates (at different levels):
>>>>>>>> Graph - uses "user" coordinates (e.g., lat and lon)
>>>>>>>> Layer - uses "physical" coordinates (doubles, 0,0 at lower left)
>>>>>>>> JPane - uses "device" coordinates (ints, 0,0 at upper left)
>>>>>>>>To actually use SGT to draw on a Java Image object,
>>>>>>>> 1) make a BufferedImage
>>>>>>>> Get its graphic2D object.
>>>>>>>> 2) set up SGT
>>>>>>>> * Create a JPane object
>>>>>>>> * For each thing plotted:
>>>>>>>> Create a Graph, placed on a Layer, added to the JPane
>>>>>>>> 3) call jPane.draw(graphics2D) to actually draw
>>>>>>>> the graphs you have set up to the buffered image
>>>>>>>>
>>>>>>>>
>>>>>>>>Jon Blower wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>*************************************************
>>>>>>>>>Message from the sgt mail list.
>>>>>>>>>*************************************************
>>>>>>>>>
>>>>>>>>>Dear all,
>>>>>>>>>
>>>>>>>>>I've been trying to use SGT to create graphics on the fly for a web
>>>>>>>>>application. I don't want to use a Java applet: I want to create a
>>>>>>>
>>>>>>>bitmap
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>>picture (jpg, gif or png) on the server, then serve this to the
>>>
>>>client
>>>
>>>
>>>>>>>in a
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>>web page. I note that a very similar thread has been started on
>>
>>this
>>
>>>>>>>>>mailing list by Leonard Scardino, but there have been no replies.
>>>>>>>>>
>>>>>>>>>I have discovered a rather clunky way of achieving this, which
>>>
>>>involves
>>>
>>>
>>>>>>>>>creating the relevant SGT component (e.g. a JPlotLayout) and
>>
>>grabbing
>>
>>>>>>>its
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>>graphics using ScreenImage.createImage(JComponent com, String
>>>
>>>filename)
>>>
>>>
>>>>>>>>>(http://www.discoverteenergy.com/files/ScreenImage.java). This
>>>
>>>works,
>>>
>>>
>>>>>>>but
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>>it has the disadvantage that the graphics are generated in an X
>>>
>>>server
>>>
>>>
>>>>>>>>>off-screen, then grabbed. This means that I need to run an X
>>
>>server
>>
>>>on
>>>
>>>
>>>>>>>my
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>>web server, which is not ideal for various local reasons.
>>>>>>>>>
>>>>>>>>>It must be possible to draw the graphics in the graphics context of
>>
>>a
>>
>>>>>>>>>BufferedImage object instead of on a Swing or AWT component. Can
>>>
>>>this
>>>
>>>
>>>>>>>be
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>>done? I'd be happy to hack away at the SGT code if necessary but
>>
>>I'd
>>
>>>>>>>like
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>>some pointers on where to start in the code.
>>>>>>>>>
>>>>>>>>>Thanks in advance for any help,
>>>>>>>>>Jon
>>>>>>>>>
>>>>>>>>>--------------------------------------------------------------
>>>>>>>>>Dr Jon Blower Tel: +44 118 378 5213 (direct line)
>>>>>>>>>Technical Director Tel: +44 118 378 8741 (ESSC)
>>>>>>>>>Reading e-Science Centre Fax: +44 118 378 6413
>>>>>>>>>ESSC Email: jdb@mail.nerc-essc.ac.uk
>>>>>>>>>University of Reading
>>>>>>>>>3 Earley Gate
>>>>>>>>>Reading RG6 6AL, UK
>>>>>>>>>--------------------------------------------------------------
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>*************************************************
>>>>>>>>>To remove yourself from this mailing list,
>>>>>>>>>send mail to <epic-majordomo@noaa.gov> with
>>>>>>>>>"unsubscribe sgt" in the message body.
>>>>>>>>>==========
>>>>>>>>
>>>>>>>>
>>>>>>>>Sincerely,
>>>>>>>>
>>>>>>>>Bob Simons
>>>>>>>>Satellite Data Product Manager
>>>>>>>>Environmental Research Division
>>>>>>>>NOAA Southwest Fisheries Science Center
>>>>>>>>1352 Lighthouse Ave
>>>>>>>>Pacific Grove, CA 93950-2079
>>>>>>>>(831)658-3205
>>>>>>>>bob.simons@noaa.gov
>>>>>>>><>< <>< <>< <>< <>< <>< <>< <>< <><
>>>>>>>>
>>>>>>>>*************************************************
>>>>>>>>To remove yourself from this mailing list,
>>>>>>>>send mail to <epic-majordomo@noaa.gov> with
>>>>>>>>"unsubscribe sgt" in the message body.
>>>>>>>>==========
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>*************************************************
>>>>>>>To remove yourself from this mailing list,
>>>>>>>send mail to <epic-majordomo@noaa.gov> with
>>>>>>>"unsubscribe sgt" in the message body.
>>>>>>>==========
>>>>>>
>>>>>>--
>>>>>>Sincerely,
>>>>>>
>>>>>>Bob Simons
>>>>>>Satellite Data Product Manager
>>>>>>Environmental Research Division
>>>>>>NOAA Southwest Fisheries Science Center
>>>>>>1352 Lighthouse Ave
>>>>>>Pacific Grove, CA 93950-2079
>>>>>>(831)658-3205
>>>>>>bob.simons@noaa.gov
>>>>>><>< <>< <>< <>< <>< <>< <>< <>< <><
>>>>>
>>>>>
>>>>>
>>>>>*************************************************
>>>>>To remove yourself from this mailing list,
>>>>>send mail to <epic-majordomo@noaa.gov> with
>>>>>"unsubscribe sgt" in the message body.
>>>>>==========
>>>>
>>>>--
>>>>Sincerely,
>>>>
>>>>Bob Simons
>>>>Satellite Data Product Manager
>>>>Environmental Research Division
>>>>NOAA Southwest Fisheries Science Center
>>>>1352 Lighthouse Ave
>>>>Pacific Grove, CA 93950-2079
>>>>(831)658-3205
>>>>bob.simons@noaa.gov
>>>><>< <>< <>< <>< <>< <>< <>< <>< <><
>>>>
>>>>*************************************************
>>>>To remove yourself from this mailing list,
>>>>send mail to <epic-majordomo@noaa.gov> with
>>>>"unsubscribe sgt" in the message body.
>>>>==========
>>>
>>>
>>>
>>>*************************************************
>>>To remove yourself from this mailing list,
>>>send mail to <epic-majordomo@noaa.gov> with
>>>"unsubscribe sgt" in the message body.
>>>==========
>>>
>>
>>--
>>Sincerely,
>>
>>Bob Simons
>>Satellite Data Product Manager
>>Environmental Research Division
>>NOAA Southwest Fisheries Science Center
>>1352 Lighthouse Ave
>>Pacific Grove, CA 93950-2079
>>(831)658-3205
>>bob.simons@noaa.gov
>><>< <>< <>< <>< <>< <>< <>< <>< <><
>
>
Sincerely,
Bob Simons
Satellite Data Product Manager
Environmental Research Division
NOAA Southwest Fisheries Science Center
1352 Lighthouse Ave
Pacific Grove, CA 93950-2079
(831)658-3205
bob.simons@noaa.gov
<>< <>< <>< <>< <>< <>< <>< <>< <><
*************************************************
To remove yourself from this mailing list,
send mail to <epic-majordomo@noaa.gov> with
"unsubscribe sgt" in the message body.
==========
Privacy Notice,
External Links Disclaimer.