不幸的是,getScaledInstance() 的性能非常差,如果不是有问题的话。
另一种方法是创建新的 BufferedImage,并在新版本上绘制原始图像的缩放版本。
BufferedImage resized = new BufferedImage(newWidth, newHeight, original.getType());
Graphics2D g = resized.createGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(original, 0, 0, newWidth, newHeight, 0, 0, original.getWidth(),
original.getHeight(), null);
g.dispose();
newWidth,newHeight 表示新的 BufferedImage 大小,并且必须正确计算。在因子缩放的情况下:
int newWidth = new Double(original.getWidth() * widthFactor).intValue();
int newHeight = new Double(original.getHeight() * heightFactor).intValue();
编辑:找到说明性能问题的文章:Image.getScaledInstance()的危险