BufferedImage 设置缩放
时间: 2023-10-24 07:28:34 浏览: 44
要对 BufferedImage 进行缩放,你可以使用 `Graphics2D` 和 `AffineTransform` 来实现。下面是一个示例代码:
```java
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.awt.geom.AffineTransform;
public class ImageScaler {
public static BufferedImage scaleImage(BufferedImage originalImage, int targetWidth, int targetHeight) {
int type = (originalImage.getTransparency() == Transparency.OPAQUE) ?
BufferedImage.TYPE_INT_RGB : BufferedImage.TYPE_INT_ARGB;
BufferedImage scaledImage = new BufferedImage(targetWidth, targetHeight, type);
Graphics2D graphics2D = scaledImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(originalImage, 0, 0, targetWidth, targetHeight, null);
graphics2D.dispose();
return scaledImage;
}
public static void main(String[] args) {
BufferedImage originalImage = // 读取原始图片到 BufferedImage
int targetWidth = 200;
int targetHeight = 200;
BufferedImage scaledImage = scaleImage(originalImage, targetWidth, targetHeight);
// 在这里可以使用 scaledImage 进行进一步处理或显示
}
}
```
在上面的示例中,`scaleImage` 方法接受一个原始的 `BufferedImage`,以及目标的宽度和高度。它首先创建一个目标大小的新图片,然后使用 `Graphics2D` 对象进行绘制。
`setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR)` 用于指定绘制时的插值方法,这里使用双线性插值以获得更平滑的缩放效果。
最后,返回缩放后的 `BufferedImage`。你可以根据需要进一步处理或显示缩放后的图像。