我查看了this question,但它似乎没有回答我的问题。我有一个图像文件,可能是任何分辨率。我需要以特定分辨率将该图像加载到BufferedImage
对象中(例如,对于此示例,800x800)。我知道Image类可以使用getScaledInstance()
将图像缩放到新的大小,但我无法弄清楚如何将其恢复为BufferedImage
。有没有一种简单的方法可以将缓冲图像缩放到特定大小?
注意我不想按特定因素缩放图像,我想拍摄图片并制作特定尺寸。
答案 0 :(得分: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;
}
答案 1 :(得分: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();
答案 2 :(得分:1)