如何对 BufferedImage 进行缩放?

7
我查看了这个问题,但它似乎并没有真正回答我的问题。 我有一个图像文件,可能具有任何分辨率。 我需要将该图像加载到特定分辨率的BufferedImage对象中(例如,对于此示例为800x800)。我知道Image类可以使用getScaledInstance()将图像缩放到新大小,但我无法弄清楚如何将其转换回BufferedImage。 有没有一种简单的方法将缓冲图像缩放到特定大小? 注意:我不想按特定因素缩放图像,我想将图像制作成特定大小。

我不想按特定因子缩放图像,我想将图像调整为特定大小。这可以很容易地完成:factor = originalSize\newSize; - GETah
3个回答

9
这样行吗?:
 /**
 * Resizes an image using a Graphics2D object backed by a BufferedImage.
 * @param srcImg - source image to scale
 * @param w - desired width
 * @param h - desired height
 * @return - the new resized image
 */
private BufferedImage getScaledImage(Image srcImg, int w, int h){
    BufferedImage resizedImg = new BufferedImage(w, h, BufferedImage.TRANSLUCENT);
    Graphics2D g2 = resizedImg.createGraphics();
    g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g2.drawImage(srcImg, 0, 0, w, h, null);
    g2.dispose();
    return resizedImg;
}

4
您可以创建一个新的BufferedImage,大小和您想要的尺寸一样,然后对原始图像进行缩放绘制到新的图像中:
BufferedImage resizedImage = new BufferedImage(new_width, new_height, BufferedImage.TYPE_INT_ARGB); 
Graphics2D g = resizedImage.createGraphics();
g.drawImage(image, 0, 0, new_width, new_height, null);
g.dispose();

1

1
虽然这理论上回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。 - Kalle Richter
感谢 @KarlRichter 的输入。我一定会尽快更新答案。 - codeDEXTER

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接