java图片缩放

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;

public final class ImageUtil {

	// 图片缩放。
	public static BufferedImage reSize(BufferedImage srcBufImage, int width,
			int height) {
		BufferedImage bufImg = new BufferedImage(width,
				height, BufferedImage.TYPE_INT_RGB);
		// 计算图片缩放比例
		float widthBo = (float) width / (float) srcBufImage.getWidth();
		float heightBo = (float) height / (float) srcBufImage.getHeight();
		AffineTransform transform = new AffineTransform();   
		transform.setToScale(widthBo, heightBo);   
		
		// 根据原始图片生成处理后的图片。   
//		AffineTransformOp ato = new AffineTransformOp(transform, null);   
//		ato.filter(srcBufImage, bufImg);   
		Graphics2D g = (Graphics2D) bufImg.createGraphics();
		g.drawImage(srcBufImage, transform, null);
		g.dispose();
		return bufImg;
	}

}

根据要缩放的宽度和高度分别除以原图像的宽度和高度得到缩放比例。

创建BufferedImage,得到它的Graphics2D对象,然后调用Graphics2D的

public abstract boolean drawImage(Imageimg,
                                  AffineTransformxform,
                                  ImageObserverobs)
呈现一个图像,在绘制前进行从图像空间到用户空间的转换。从用户空间到设备空间的转换使用 Graphics2D 中当前的 Transform 完成。在应用 Graphics2D 上下文中的 transform 属性之前,指定的转换被应用到图像。应用的呈现属性包括 ClipTransformComposite 属性。注意,如果指定的转换不可逆,则不会完成呈现。
参数:
img - 要呈现的指定图像。如果 img 为 null,则此方法不执行任何动作。
xform - 从图像空间到用户空间的转换
obs - 转换了多个 Image 时要通知的 ImageObserver

将转换后的图像画到BufferedImage。

不知为何,

// AffineTransformOp ato = new AffineTransformOp(transform, null);

// ato.filter(srcBufImage, bufImg);

这样会报错:抛出ImagingOpException异常。

猜你喜欢

转载自luckystar2008.iteye.com/blog/1908676