Javase中要显示一个图片,但是图片尺寸太大了,如何让图片能完全显示在规定区域内

2024-12-14 08:01:48
推荐回答(1个)
回答1:

我之前有个源码丢失了,反编译后是这样子的。

大致就是先通过 Java Advanced Image IO (JAI, 在 Oracle 上下载) 把图片读取到内存,然后缩放后设置成 ImageIcon 显示到一个 Panel 上。直接让 Swing 自己读取图片时好像不会自动缩放的。

FileInputStream input = new FileInputStream(path);
BufferedImage image = ImageIO.read(input);
image = scale(image, width, max);
 ProductFrame.this.setIcon(new ImageIcon(image));
 
 private BufferedImage scale(BufferedImage image, int from, int to)
    {
        if(from > to)
        {
            double scale = (double)to / (double)from;
            ParameterBlock pb = new ParameterBlock();
            pb.addSource(image);
            pb.add(scale);
            pb.add(scale);
            pb.add(0.0D);
            pb.add(0.0D);
            RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
            RenderedOp resizedImage = JAI.create("SubsampleAverage", image, Double.valueOf(scale), Double.valueOf(scale), qualityHints);
            return resizedImage.getAsBufferedImage();
        } else
        {
            return image;
        }
    }