Чтобы масштабировать изображение, вам нужно создать новое изображение и нарисовать его. Один из способов - использовать метод filter()
для AffineTransferOp
, как предложено here. Это позволяет выбрать метод интерполяции.
private static BufferedImage scale1(BufferedImage before, double scale) {
int w = before.getWidth();
int h = before.getHeight();
// Create a new image of the proper size
int w2 = (int) (w * scale);
int h2 = (int) (h * scale);
BufferedImage after = new BufferedImage(w2, h2, BufferedImage.TYPE_INT_ARGB);
AffineTransform scaleInstance = AffineTransform.getScaleInstance(scale, scale);
AffineTransformOp scaleOp
= new AffineTransformOp(scaleInstance, AffineTransformOp.TYPE_BILINEAR);
scaleOp.filter(before, after);
return after;
}
Другой способ - просто нарисовать исходное изображение в новом изображении, используя операцию масштабирования для масштабирования. Этот метод очень похож, но он также иллюстрирует, как вы можете нарисовать все, что захотите, в конечном изображении. (Я положил в пустой строке, где два метода начинают отличаться.)
private static BufferedImage scale2(BufferedImage before, double scale) {
int w = before.getWidth();
int h = before.getHeight();
// Create a new image of the proper size
int w2 = (int) (w * scale);
int h2 = (int) (h * scale);
BufferedImage after = new BufferedImage(w2, h2, BufferedImage.TYPE_INT_ARGB);
AffineTransform scaleInstance = AffineTransform.getScaleInstance(scale, scale);
AffineTransformOp scaleOp
= new AffineTransformOp(scaleInstance, AffineTransformOp.TYPE_BILINEAR);
Graphics2D g2 = (Graphics2D) after.getGraphics();
// Here, you may draw anything you want into the new image, but we're
// drawing a scaled version of the original image.
g2.drawImage(before, scaleOp, 0, 0);
g2.dispose();
return after;
}
свободно обучающая: http://www.glyphic.com/transform/applet/1intro.html –
На это письмо, то Самый популярный ответ - неправильный ответ. Он масштабирует изображение вверх, но возвращает изображение того же размера с отсутствием 3/4 изображения. Это ответ, заданный trashgod. Он близок, но у него небольшая ошибка. – MiguelMunoz