在JScrollPane中将缓冲图像加载到JLabel

时间:2017-03-08 09:41:37

标签: java bufferedimage mouselistener mousewheel image-zoom

我是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);

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

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

以下是调整大小的示例:

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