Win a copy of Cross-Platform Desktop Applications: Using Node, Electron, and NW.js this week in the JavaScript forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic

Resize ImageIcon  RSS feed

 
Gregg Bolinger
Ranch Hand
Posts: 15304
6
Chrome IntelliJ IDE Mac OS X
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Does anyone know if there is a way to resize an ImageIcon when placing it on a Button so that I don't have to physically rezize the image file?? I am writing an Application, not an applet, so the getImage method won't work.
Thanks for any help!!
 
Daniel Searson
Ranch Hand
Posts: 83
  • Likes 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Ok, here's one way of doing it.
You load your image straight into the ImageIcon using the constructor that takes a file name as an argument like:
ImageIcon icon = new ImageIcon("whatever.jpg");
Make sure the reference you create is an ImageIcon reference. Then use getImage() to grab the image from the ImageIcon:
Image img = icon.getImage();
Now create a buffered image the same size as the image:
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Then blit the icon image to the buffered image, and resize it as you do so:
Graphics g = bi.createGraphics();
g.drawImage(img, 0, 0, WIDTH, HEIGHT, null);
(The code above may be incorrect - check the docs)
Now recreate the IconImage with the new buffered image:
IconImage newIcon = new IconImage(bi);
Hope that helps.
- Daniel
 
Gregg Bolinger
Ranch Hand
Posts: 15304
6
Chrome IntelliJ IDE Mac OS X
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Oh man. You are a saint. Thank you so much!!!
The code was correct by the way too.
 
Gregg Bolinger
Ranch Hand
Posts: 15304
6
Chrome IntelliJ IDE Mac OS X
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I have another problem now. I resized the image, and set it to the new ImageIcon, but I have to actually position the image on the button.

the 140, 199 is positioning the Image on the button. If I set it to 0, 0, the image is off the button somewhere and can't be seen.
Does that make since? I just don't know why it doesn't center the image with the ImageIcon like normally.
 
Gregg Bolinger
Ranch Hand
Posts: 15304
6
Chrome IntelliJ IDE Mac OS X
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I found a better way to do this:

 
Darryl Burke
Bartender
Posts: 5167
11
Java Netbeans IDE Opera
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Lavric Daniel,
Your post was moved to a new topic.
Split from "Resize ImageIcon"
 
qaman walala
Greenhorn
Posts: 2
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
 
David Lavallee
Greenhorn
Posts: 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Daniel Searson wrote:Ok, here's one way of doing it.
You load your image straight into the ImageIcon using the constructor that takes a file name as an argument like:
ImageIcon icon = new ImageIcon("whatever.jpg");
Make sure the reference you create is an ImageIcon reference. Then use getImage() to grab the image from the ImageIcon:
Image img = icon.getImage();
Now create a buffered image the same size as the image:
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Then blit the icon image to the buffered image, and resize it as you do so:
Graphics g = bi.createGraphics();
g.drawImage(img, 0, 0, WIDTH, HEIGHT, null);
(The code above may be incorrect - check the docs)
Now recreate the IconImage with the new buffered image:
IconImage newIcon = new IconImage(bi);
Hope that helps.
- Daniel



I like this option. All of the posts I have read elsewhere recommend using the BufferedImage/Graphics.drawImage approach.

In this situation, it looks like you do actually need a resized image. In the project I am working on, I have been using a modified JLabel to use a resized icon. You may not need the whole IconLabel class, but it does implement the resize technique mentioned above. For added bonus (and for satisfying my OCD), I have pieced together some logic that also scales the image to within a certain size, maintaining its aspect ratio (i.e., I used http://stackoverflow.com/questions/10245220/java-image-resize-maintain-aspect-ratio). That way, you can pre-determine how big of a space you want your image to take without compromising its aspect ratio. The getScaledDimension is taken from that URL, and it does a better job of explaining how it resizes an image and maintains its aspect ratio.

In this JLabel-extending class, the real tricks are to override getPreferredSize and the paintComponent methods, where I do the image resizing.

 
Rob Camick
Ranch Hand
Posts: 2787
12
  • Likes 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
You can also use the Stretch Icon which will scale to fix the entire space or scale to keep the aspect ratio.
 
It is sorta covered in the JavaRanch Style Guide.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!