Bufferedimage resize

后端 未结 7 1067
深忆病人
深忆病人 2020-11-29 03:50

I am trying to resized a bufferedimage. I am able to store it and show up on a jframe no problems but I can\'t seem to resize it. Any tips on how I can change this to make i

相关标签:
7条回答
  • 2020-11-29 04:41

    This is a shortened version of what is actually happening in imgscalr, if you just want to use the "balanced" smoothing:

    /**
     * Takes a BufferedImage and resizes it according to the provided targetSize
     *
     * @param src the source BufferedImage
     * @param targetSize maximum height (if portrait) or width (if landscape)
     * @return a resized version of the provided BufferedImage
     */
    private BufferedImage resize(BufferedImage src, int targetSize) {
        if (targetSize <= 0) {
            return src; //this can't be resized
        }
        int targetWidth = targetSize;
        int targetHeight = targetSize;
        float ratio = ((float) src.getHeight() / (float) src.getWidth());
        if (ratio <= 1) { //square or landscape-oriented image
            targetHeight = (int) Math.ceil((float) targetWidth * ratio);
        } else { //portrait image
            targetWidth = Math.round((float) targetHeight / ratio);
        }
        BufferedImage bi = new BufferedImage(targetWidth, targetHeight, src.getTransparency() == Transparency.OPAQUE ? BufferedImage.TYPE_INT_RGB : BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d = bi.createGraphics();
        g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); //produces a balanced resizing (fast and decent quality)
        g2d.drawImage(src, 0, 0, targetWidth, targetHeight, null);
        g2d.dispose();
        return bi;
    }
    
    0 讨论(0)
提交回复
热议问题