2011-01-31 62 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功能,但没有什么麻烦。