缩放实例无法正常工作

时间:2017-06-09 16:57:50

标签: java swing awt scale

方法' insertPhoto'将用于添加将用户照片图像插入特定标签的功能。 在我决定寻求帮助之前,我一直在阅读并试图找到为什么这不会起作用。

方法说明: 方法insertPhoto有三个作为参数传递的JLabel,其中一个是insertImage缩略图,另一个是deleteImage,最后一个是具有绝对路径的实际照片。 它的格式是jpg,我想把它缩放到200x200px,所以它适合我的窗口。 我使用ImageIO.read来获取bufferedImage,因此我确信它已完全加载。 我用于缩放的算法是SCALE_SMOOTH。

我的问题是,如何使其工作,是图像尚未完全加载的问题,还是我应该使用其他技术,例如重新绘制以根据我的需要进行缩放。

以下是方法:

public void insertPhoto(JLabel l_insert, JLabel l_delete, JLabel l_photo) {

    JFileChooser jfc = new JFileChooser();
    jfc.setFileFilter(new FileNameExtensionFilter("JPG files", "jpg"));
    int window = jfc.showOpenDialog(null);

    if (window == jfc.APPROVE_OPTION) {

        l_insert.setIcon(null);
        l_delete.setIcon(null);
        String filePath = jfc.getSelectedFile().getAbsolutePath();

        try {


            Image photo = ImageIO.read(new File(filePath)); 


            photo.getScaledInstance(200, 200, Image.SCALE_SMOOTH);
            ImageIcon im = new ImageIcon(photo);


            l_photo.setIcon(im);

        } catch (Exception e) {

            JOptionPane.showMessageDialog(null, e);
        }
    }
}

1 个答案:

答案 0 :(得分:3)

您永远不会将缩放操作的结果分配给任何内容:

photo.getScaledInstance(200, 200, Image.SCALE_SMOOTH);
// ^^^
// Ignoring the return value.
ImageIcon im = new ImageIcon(photo);

应该是例如:

photo = photo.getScaledInstance(200, 200, Image.SCALE_SMOOTH);
ImageIcon im = new ImageIcon(photo);