求这样的一个Java程序,关于绘图技术的

希望能实现图片旋转... 希望能实现图片旋转 展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励20(财富值+成长值)
王添宝1987
推荐于2016-07-18 · TA获得超过141个赞
知道小有建树答主
回答量:182
采纳率:77%
帮助的人:66.6万
展开全部
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class RotateImage {

public static BufferedImage Rotate(Image src, int angel) {
int src_width = src.getWidth(null);
int src_height = src.getHeight(null);
Rectangle rect_des = CalcRotatedSize(new Rectangle(new Dimension(
src_width, src_height)), angel);

BufferedImage res = null;
//res = new BufferedImage(rect_des.width, rect_des.height,BufferedImage.TYPE_INT_RGB);
res = new BufferedImage(rect_des.width, rect_des.height,BufferedImage.TYPE_INT_ARGB);
//res = new BufferedImage(rect_des.width, rect_des.height,BufferedImage.TYPE_INT_BGR);
//res = new BufferedImage(rect_des.width, rect_des.height,BufferedImage.TYPE_INT_ARGB_PRE);
Graphics2D g2 = res.createGraphics();
g2.translate((rect_des.width - src_width) / 2, (rect_des.height - src_height) / 2);
g2.rotate(Math.toRadians(angel), src_width / 2, src_height / 2);

g2.drawImage(src, null, null);
return res;
}

public static Rectangle CalcRotatedSize(Rectangle src, int angel) {
if (angel >= 90) {
if(angel / 90 % 2 == 1){
int temp = src.height;
src.height = src.width;
src.width = temp;
}
angel = angel % 90;
}

double r = Math.sqrt(src.height * src.height + src.width * src.width) / 2;
double len = 2 * Math.sin(Math.toRadians(angel) / 2) * r;
double angel_alpha = (Math.PI - Math.toRadians(angel)) / 2;
double angel_dalta_width = Math.atan((double) src.height / src.width);
double angel_dalta_height = Math.atan((double) src.width / src.height);

int len_dalta_width = (int) (len * Math.cos(Math.PI - angel_alpha
- angel_dalta_width));
int len_dalta_height = (int) (len * Math.cos(Math.PI - angel_alpha
- angel_dalta_height));
int des_width = src.width + len_dalta_width * 2;
int des_height = src.height + len_dalta_height * 2;
return new Rectangle(new Dimension(des_width, des_height));
}

public static void main(String[] args) {
try {
BufferedImage src = ImageIO.read(new File("C:\\Users\\Administrator\\Desktop\\使用Mondrian查询的一个例子.png"));
BufferedImage des = RotateImage.Rotate(src, 30);
System.out.println(des);
System.out.println(ImageIO.write(des, "png", new File("C:\\Users\\Administrator\\Desktop\\使用Mondrian查询的一个例子_旋转30°.png")));
des = RotateImage.Rotate(src, 150);
System.out.println(des);
System.out.println(ImageIO.write(des, "png", new File("C:\\Users\\Administrator\\Desktop\\使用Mondrian查询的一个例子_旋转150°.png")));
des = RotateImage.Rotate(src, 270);
System.out.println(des);
System.out.println(ImageIO.write(des, "png", new File("C:\\Users\\Administrator\\Desktop\\使用Mondrian查询的一个例子_旋转270°.png")));
} catch (IOException e) {
e.printStackTrace();
}
}
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式