• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

creating an image from an modified component

 
Greenhorn
Posts: 14
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
i apologise if this is in the wrong place but i am a beginer in java and that is part of the problem!!
I have been asked to produce an GUI that will let the user open annotate and then save an image from and to file.
currently i am using a jlabel as a canvas to open the image using a draw image method like so

Graphics2D g1 = (Graphics2D) jLabel1.getGraphics();
g1.drawImage(scaledBI, 0, 0, scaledWidth, scaledHeight, null);
g1.dispose();

i am then letting users add shapes to this using a simalar method. First jLabel.getGraphics to get an graphics2d variable and then this is used for drawing lines etc. to demostrate here is an exampe from the code

Graphics2D g = (Graphics2D) jLabel1.getGraphics();
g.drawRect(a,b,c,d);
g.dispose();

all this has been fine but saving the changed contents of the jLabel has caused problems. here is the code as is

scaledHeight=500 ;
scaledWidth= 500;
int imageType = BufferedImage.TYPE_INT_RGB;

BufferedImage image = new BufferedImage(scaledWidth, scaledHeight, imageType);
Graphics2D g2d = image.createGraphics();
g2d.setComposite(AlphaComposite.Src);
jLabel1.paint( g2d );
g2d.dispose();

this image when saved to file and opened externally has been giving me a mostly black page with the original text that is on the jLabel on starting the application.

how do i go about creating an image file that contains the context of an component???
 
Bartender
Posts: 4121
IntelliJ IDE Spring Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
The problem is that you're assuming that the Graphics2D reference saves it's state... it doesn't. Graphics2D (and Graphics) is just a way for components to get at the graphics context *at the moment* to paint to the screen. All *permanent* changes must go in the component's paint() method (or methods called from paint()) or must be painted to an image (such as BufferedImage). Components and images *use* Graphics2D to do this, but Graphics2D isn't where these changes get saved - it's the image or the component itself. So, when you grab the Graphics2D reference from the label and draw to it - you draw on it *right then*, but any changes to the label will draw the default label - the changes you made to the label through Graphics2D will disappear - try minimizing and restoring the frame your label's on to see. When you make the call to paint(), the label goes into it's paint() method and paints itself according to that - the temporary changes made through Graphics2D get lost.

My suggestion would be to use the label purely to display the images - don't use it to paint shapes or save the image. Use one BufferedImage for the "background" image, and use another BufferedImage with alpha set painted on top of this for drawing your shapes ("foreground" image). When you save, create another BufferedImage temporarily and first paint the background image, then paint the foreground image on top, then save the new BufferedImage.
 
Nathan Pruett
Bartender
Posts: 4121
IntelliJ IDE Spring Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Closing duplicate - here is the other post.
 
I am not a spy. Definitely. Definitely not a spy. Not me. No way. But this tiny ad ...
a bit of art, as a gift, the permaculture playing cards
https://gardener-gift.com
reply
    Bookmark Topic Watch Topic
  • New Topic