【问题标题】:Resizing image to fit in JLabel调整图像大小以适应 JLabel
【发布时间】:2014-05-05 23:02:45
【问题描述】:

我正在尝试从目录加载图像并将其作为图标放在JLabel 中。但是当图像尺寸很大时,它并不完全适合标签。我尝试调整图像大小以适合标签,但它不起作用。我可以知道我哪里出错了吗?

JFileChooser choose=new JFileChooser();
choose.showOpenDialog(null);
File f=choose.getSelectedFile();
String filename=f.getAbsolutePath();
path.setText(filename);

ImageIcon icon=new ImageIcon(filename);
Image img=icon.getImage();
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null),   BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.createGraphics();
g.drawImage(img,500, 500, null);
ImageIcon newIcon = new ImageIcon(bi);
image_label.setIcon(newIcon);

【问题讨论】:

  • 啊,不要。严重地。而是尝试定义“最大”允许大小并缩小任何太大的图像。对于exampleexample
  • “我哪里出错了?” - 首先,您创建一个BufferedImage,其大小与您刚刚加载的图像相同,然后绘制图像画布内 500x500...除非图像大于 500x500,否则图像将被渲染出视野...
  • @MadProgrammer 我尝试过您提供的 2 个示例,我想承认我是处理图像的新手,因此我无法理解发生了什么。我的 jLabel 的大小是 500x500,因此我将图像缩放到 500x500,我加载的图像肯定比这大,
  • 你没有缩放它,drawImage(Image, int, int, ImageObserver) 在指定的 x/y 位置绘制图像,它没有缩放它...
  • @MadProgrammer BufferedImage img=null;尝试 { img=ImageIO.read(f); BufferedImage dimg = (BufferedImage) img.getScaledInstance(500,500,Image.SCALE_SMOOTH); ImageIcon imageIcon = new ImageIcon(dimg); image_label.setIcon(imageIcon);这段代码怎么样?

标签: java image swing jlabel imageicon


【解决方案1】:
BufferedImage img = ImageIO.read(...);
Image scaled = img.getScaledInstance(500, 500, Image.SCALE_SMOOTH);
ImageIcon icon = new ImageIcon(scaled);

请注意,这会将图像缩放为正方形。看看Java: maintaining aspect ratio of JPanel background image,它讨论了在缩放时保持图像的纵横比。

另外,您应该阅读The Perils of Image.getScaledInstance() 并查看使用分而治之缩放算法的Scale the ImageIcon automatically to label size 和演示一步缩放问题的Quality of Image after resize very low -- Java...

【讨论】:

    猜你喜欢
    • 2013-10-12
    • 2020-11-30
    • 2021-07-20
    • 1970-01-01
    • 2012-09-15
    • 2012-10-06
    • 2011-02-03
    • 2020-06-03
    相关资源
    最近更新 更多