【问题标题】:Rescale BufferedImage java重新缩放 BufferedImage java
【发布时间】:2014-05-28 16:50:41
【问题描述】:

您好,我正在寻找一种方法来重新缩放我的图像并仍然显示整个图像,因此它不会被切成两半或类似的东西。我也不允许使用任何类型的库。我用paintcomponent绘制图像。

有什么方法可以正确地做到这一点吗?

这个我已经试过了:

BufferedImage image = null;

            try {
                image = ImageIO.read(new File($question.getMediaFile().getPath())); /* Get the image */

                Image scaled = image.getScaledInstance(350, 350, Image.SCALE_SMOOTH);

                g.drawImage(scaled, w-350, 200, null);
            } catch (IOException e) {
                e.printStackTrace();
            }

这会调整我的图像大小,但不会显示整个图像,我想将其重新缩放为 300*300 或 350*350 大小或类似大小的图像。

谢谢!

【问题讨论】:

  • 您确定要在其上绘制图像的组件足够大以显示它吗?

标签: java image resize bufferedimage paintcomponent


【解决方案1】:

使用getScaledInstance() 方法对我来说效果很好。这是我正在测试的代码:

public class Resize {
    public static void main(String[] args) throws Exception {
        final Image logo = ImageIO.read(new URL("http://cdn.sstatic.net/stackexchange/img/logos/so/so-logo.png"));
        final Dimension dim = new Dimension(logo.getWidth(null), logo.getHeight(null));
        final JFrame frame = new JFrame();
        frame.add(new JPanel() {
            @Override
            public void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.drawImage(logo.getScaledInstance(dim.width, dim.height, 0), 0, 0, this);
            }
        });
        final JSlider xSlider = new JSlider(JSlider.HORIZONTAL, 1, dim.width*3, dim.width);
        final JSlider ySlider = new JSlider(JSlider.VERTICAL, 1, dim.height*3, dim.height);

        ChangeListener cl = new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                dim.width = xSlider.getValue();
                dim.height = ySlider.getValue();
                frame.repaint();
            }
        };
        xSlider.addChangeListener(cl);
        ySlider.addChangeListener(cl);

        frame.add(xSlider, "South");
        frame.add(ySlider, "East");

        frame.setExtendedState(Frame.MAXIMIZED_BOTH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.show();        
    }
}

【讨论】:

  • 所以这应该有效吗? :图像图像=空; image = ImageIO.read(new File($question.getMediaFile().getPath())); g.drawImage(image.getScaledInstance(350, 350, 0),0, 0, this);
猜你喜欢
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 2016-05-04
相关资源
最近更新 更多