通信软件基础B-重庆邮电大学-Java-图像处理中的算法问题(图像旋转)

实验任务四

图像处理中的算法问题(图像旋转)

1、 系统设计要求

将下列图像旋转90度
在这里插入图片描述

2、 设计思路与方案

1) 设计思路

  1. 首先将bmp图片文件读取并存储。
  2. 同时创建一个图片文件操作流,为旋转后的文件进行保存并输出。
  3. 调用Java中自带的画笔Graphics2D进行文件的旋转操作。
  4. 将旋转后的图片数据传入文件操作流,同时输出文件名为90.bmp的图片文件。
    2) 程序总体框图

在这里插入图片描述
3.完整代码(Java)

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;

public class RotateImage{
	public static void main(String[] args) {
		try {
			File raw = new File("1.bmp");
			
			
			BufferedImage bufferedImage = ImageIO.read(raw); //文件读取
			

			BufferedImage bufferedImage2 = rotateImage(bufferedImage, 90);//图片旋转90°,宽高不变
			File outputfile2  = new File("2.bmp");//输出文件名为2.bmp的图片文件

			ImageIO.write(bufferedImage2,"bmp",outputfile2);
			
			

			BufferedImage bufferedImage3 = rotateImage2(bufferedImage, 90);
			File outputfile3  = new File("90.bmp");

			ImageIO.write(bufferedImage3,"bmp",outputfile3);
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	
	/* 旋转图片为指定角度  图片宽高不变*/ 
	public static BufferedImage rotateImage(final BufferedImage bufferedimage, final int degree)
	{ 
		int w= bufferedimage.getWidth(); // 得到图片宽度。 
		int h= bufferedimage.getHeight();// 得到图片高度。 
		int type= bufferedimage.getColorModel().getTransparency();// 得到图片透明度。
		BufferedImage img;// 空的图片。 
		Graphics2D graphics2d;// 空的画笔。 
		graphics2d= (img= new BufferedImage(w, h, type)).createGraphics();
		graphics2d.setRenderingHint( RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
		graphics2d.rotate(Math.toRadians(degree), w/2, h/2);// 旋转,degree是整型,度数,比如垂直90度。   •rotate(double arc,double x, double y):图形以点(x,y)为轴点,旋转arc弧度。
		graphics2d.drawImage(bufferedimage, 0, 0, null);// 从bufferedimagecopy图片至img,0,0是img的坐标。 
		graphics2d.dispose(); 
		
		return img;// 返回复制好的图片,原图片依然没有变,没有旋转,下次还可以使用。 
	}
	
	
	/* 旋转图片为指定角度    同时旋转宽高 */ 
	public static BufferedImage rotateImage2(final BufferedImage bufferedimage, final int degree)
	{ 
		int w= bufferedimage.getWidth(); // 得到图片宽度。 
		int h= bufferedimage.getHeight();// 得到图片高度。 
		BufferedImage img;// 空的图片。 
		
		int x = (h / 2) - (bufferedimage.getWidth() / 2);// 确定原点坐标
        int y = (w / 2) - (bufferedimage.getHeight() / 2);
		AffineTransform at = new AffineTransform();
        at.rotate(Math.toRadians(degree), h / 2, w / 2);// 旋转图象
        at.translate(x, y);
        AffineTransformOp op = new AffineTransformOp(at,
                AffineTransformOp.TYPE_BICUBIC);
        img = new BufferedImage(h, w,bufferedimage.getType());
        img = op.filter(bufferedimage, img);
		
		return img;// 返回复制好的图片,原图片依然没有变,没有旋转,下次还可以使用。 
	}
 }
	

4.运行结果示例
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Daydreamer_777

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值