方法' 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);
}
}
}
答案 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);