2011-01-31 86 views
3

我想在我的GUI上使用帶自定義大小的圖標的java JLabel。像這樣:自定義JLabel圖標

http://i.stack.imgur.com/XVglU.png

我用這個代碼來改變原來的圖標尺寸:

ImageIcon imageIcon = (ImageIcon) jLabel1.getIcon();// new ImageIcon("Play-Hot-icon.png"); 

    ImageIcon thumbnailIcon = new ImageIcon(getScaledImage(imageIcon.getImage(), 25 , 25)); 
    jLabel1.setIcon(thumbnailIcon); 

,這裏是調整大小的圖像

private Image getScaledImage(Image srcImg, int w, int h){ 

    BufferedImage resizedImg = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); 
    Graphics2D g2 = resizedImg.createGraphics(); 

    g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); 

    g2.drawImage(srcImg, 0, 0, w, h, null); 

    g2.dispose(); 
    return resizedImg; 
}  

但調整圖像和使用後的代碼這段代碼的結果就是這個! :

enter image description here

我怎麼能期望我的JLabel的圖像?

問候, 薩賈德

+3

是否有原因不使用[Image.getScaledInstance](http://download.oracle.com/javase/1.4.2/docs/api/java/awt/Image.html#getScaledInstance(int,%20int ,%20int))來縮放圖像? – 2011-01-31 02:30:37

回答

4

的問題是,當你創建縮放後的圖像,您可以使用BufferedImage.TYPE_INT_RGB爲您的新形象,透明度得到呈現爲黑色,只是TYPE_INT_RGB

爲了保持透明度,您需要將其替換爲BufferedImage.TYPE_INT_ARGB,因爲您需要alpha組件。

然而,在imageIcon的圖像調用Image.getScaledInstance將返回縮放圖像,已與alpha分量,你可以通過它呈現提示與縮放圖像的質量打,做本質上是相同的getScaledImage功能,但沒有什麼麻煩。