Se utilizzi una BufferedImage puoi utilizzare il metodo getScaledInstance() a cui fornisci la buffered image di partenza, le nuove dimensioni ( che ti calcoli in base alle dimensioni iniziali e quelle del pannello in cui vuoi mettere l'immagine e la graphicsConfiguration)... poi da questo crei l'immagine!

codice:
GraphicsConfiguration gc = getDefaultConfiguration();
BufferedImage image = toCompatibleImage(ImageIO.read(in), gc);
....
final BufferedImage resize = getScaledInstance(image, w, h, gc);
imgIcon = new ImageIcon(resize); 
img = imgIcon.getImage();
Spero di esserti stato utile.
ciao