【问题标题】:Loading Buffered Image to JLabel in JScrollPane将缓冲图像加载到 JScrollPane 中的 JLabel
【发布时间】:2017-03-08 09:41:37
【问题描述】:

我是一名 Java 初学者,试图将 .PNG 8356 x 5092 像素加载到 JFrame 720 x 600 中。

我可以加载图像,但它被缩放到左上角,想要使.PNG 适合 JFrame,然后能够通过鼠标单击跨越并通过鼠标滚动进行缩放。

我一直在寻找答案大约 2 周,但无济于事。 只是想向正确的方向好推...

干杯

编辑

好的,我可以通过以下方式加载图像并按比例缩放:

public Image ScaledImage(Image img, 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(img, 0, 0, w, h, null);
    g2.dispose();

    return resizedImg;

}

并将其传递给 JLabel,例如:

BufferedImage Map = ImageIO.read(new File(.PNG-LOCATION));
     ImageIcon icon = new ImageIcon(ScaledImage(Map, 720, 600));
            JLabel Label = new JLabel();
            Label.setIcon(icon);

现在只需要缩放方面的帮助或指导,点击拖动

感谢您的帮助

【问题讨论】:

标签: java bufferedimage mouselistener mousewheel zooming


【解决方案1】:

这是调整大小的示例:

static BufferedImage createResizedCopy(Image originalImage, 
            int scaledWidth, int scaledHeight, 
            boolean preserveAlpha)
    {
        System.out.println("resizing...");
        int imageType = preserveAlpha ? BufferedImage.TYPE_INT_RGB : BufferedImage.TYPE_INT_ARGB;
        BufferedImage scaledBI = new BufferedImage(scaledWidth, scaledHeight, imageType);
        Graphics2D g = scaledBI.createGraphics();
        if (preserveAlpha) {
            g.setComposite(AlphaComposite.Src);
        }
        g.drawImage(originalImage, 0, 0, scaledWidth, scaledHeight, null); 
        g.dispose();
        return scaledBI;
    }

使用上面的代码: img2 = createResizedCopy(img, 720 , 600, true); 其中img 是您的原始图像,img2 是调整后的图像。

要加载img,请使用:img = ImageIO.read(new File("yourImagepath"));

在框架中显示它:

img2 = createResizedCopy(img, 720 , 600, true);
ImageIcon icon=new ImageIcon(img2);
JFrame frame=new JFrame();
frame.setLayout(new FlowLayout());
frame.setSize(720,600);
JLabel lbl=new JLabel();
lbl.setIcon(icon);
frame.add(lbl);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

更多细节可以在这里找到: resizing image in java

【讨论】:

    猜你喜欢
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 2014-03-18
    • 2013-08-18
    • 1970-01-01
    相关资源
    最近更新 更多