3

我想在我的 GUI 上使用带有自定义大小的图标的 java 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;
}    

但是在调整图像大小并使用此代码后,结果就是这样!:

在此处输入图像描述

我怎样才能在我的 JLabel 上获得想要的图像?

问候,萨贾德

4

1 回答 1

4

问题是,当您创建缩放图像时,您将BufferedImage.TYPE_INT_RGB用于新图像,并且透明度被渲染为黑色,仅TYPE_INT_RGB.

为了保持透明度,您需要将其替换为BufferedImage.TYPE_INT_ARGB,因为您需要一个 alpha 组件。

但是,在的图像上调用Image.getScaledInstanceimageIcon将返回一个缩放图像,该图像已经具有 alpha 分量,并且您可以将渲染提示传递给它以使用缩放图像的质量,与您的函数基本相同getScaledImage,但更少的麻烦。

于 2011-01-31T02:45:22.083 回答