1

我想重新调整 ImageIcon 的大小以适合我的 jLabel。使用这篇文章的答案自动将 ImageIcon 缩放到我正在使用的标签大小

public jfrmHome() {
    initComponents();
    this.setLocationRelativeTo(null);
    ImageIcon iconimage;
    iconimage = new ImageIcon(getClass().getResource("/org/me/musiconweb/resources/Music-icon.png"));
    BufferedImage bi = new BufferedImage(iconimage.getIconWidth(), iconimage.getIconHeight(), BufferedImage.TYPE_INT_RGB);
    Graphics g = bi.createGraphics();
    iconimage.paintIcon(null, g, 0,0);
    g.dispose();
    BufferedImage resizedimage=resize(bi,jlblPicture.getWidth(), jlblPicture.getHeight());
    ImageIcon resizedicon=new ImageIcon(resizedimage);
    jlblPicture.setIcon(resizedicon);
}

这会重新调整图像的大小,但我有一个小问题。图像的背景变为黑色而不是原来的白色

这个

原始图像

转向

错误图像

请问我做错了什么?

4

3 回答 3

3

该图像具有透明度。所以BufferedImage.TYPE_INT_RGB改为BufferedImage.TYPE_INT_ARGB

在白色 BG 上的 SO 上并不明显,但试试这个 SSCCE 会变得更清楚..

import java.net.URL;
import javax.swing.*;

class ShowImage {

    public static void main(String[] args) throws Exception {
        final URL url = new URL("http://i.stack.imgur.com/1yeUy.png");
        Runnable r = new Runnable() {
            @Override
            public void run() {
                JLabel l = new JLabel(new ImageIcon(url));

                JOptionPane.showMessageDialog(null, l);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency
        SwingUtilities.invokeLater(r);
    }
}

在此处输入图像描述

于 2013-10-05T16:18:16.657 回答
0

您的图像具有透明背景。因此,当在新创建的不透明图像上绘制时,它显示为黑色。利用

g.setColor(Color.WHITE);
g.fillRect(0, 0, jlblPicture.getWidth(), jlblPicture.getHeight());

如果你想要一个白色的背景。对于透明背景,请改为在 TYPE_INT_ARGB 图像上绘制。

于 2013-10-05T16:12:16.723 回答
0

试试这些代码

ImageIcon icon1 = new 
ImageIcon(getClass().getResource("\\image\\"+f1.getName()));  
BufferedImage bi = new 
BufferedImage(icon1.getIconWidth(),icon1.getIconHeight()
,   BufferedImage.TYPE_INT_RGB);
Graphics g = bi.createGraphics();
icon1.paintIcon(null, g, 0,0);
g.dispose();`
        //image resizing code...............>
ImageIcon resizedicon=new ImageIcon(bi.getScaledInstance(imglbl.getWidth(), 
imglbl.getHeight(),1 ));
imglbl.setBackground(new java.awt.Color(255, 255, 255));
imglbl.setIcon(resizedicon);
于 2017-06-25T18:59:19.127 回答