private BufferedImage resizedImage(BufferedImage oriImage) {
int type = oriImage.getType() == 0
? BufferedImage.TYPE_INT_ARGB : oriImage.getType();
BufferedImage scaledImage = new BufferedImage((int) scaleWidth,
(int) scaleHeight, type);
// Paint scaled version of image to new image
Graphics2D graphics2D = scaledImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(oriImage, 0, 0, (int) scaleWidth,
(int) scaleHeight, null);
// Clean up
graphics2D.dispose();
//Return scaled image
return scaledImage;
}
Aside note: Some of my co-workers asked me about AffineTransform.scale() when performing scaled functions. Well, there is nothing wrong in using AffineTransform.Here's an example:
AffineTransform xform = AffineTransform.getScaleInstance(2, 2); graphics2D.drawImage(img, xform, null);
But in a majority of cases, there is a better approach. Simply use the scaling variant of Graphics.drawImage()
graphics2D.drawImage(oriImage, 0, 0, oriImage.getWidth()*2,
oriImage.getHeight()*2, null);
No comments:
Post a Comment