/* * To change this template, choose Tools | Templates * and open the template in the editor. */package learning;/** * * @author Administrator */ import java.applet.*; import java.awt.*; import java.awt.geom.*; import javax.imageio.*; import java.io.*; public class ImageTest extends Applet{ private Image image; AffineTransform at = new AffineTransform(); public void init(){ //文件位置 String filename ="C:/Users/Administrator/Documents/NetBeansProjects/JavaApplication3/src/learning/car.png"; //文件读入 try{image =ImageIO.read(new File(filename));} catch (IOException e){e.printStackTrace();} } public void paint(Graphics g){ Graphics2D g2D = (Graphics2D) g; int width = image.getHeight(this); int height = image.getHeight(this); g2D.setColor(Color.BLACK);
g2D.fillRect(0,0,getSize().width,getSize().height); AffineTransform trans = new AffineTransform(); trans.setToIdentity(); //坐标变换 trans.translate(width/2,height/2); trans.scale(1,1); //旋转90度 trans.rotate(Math.toRadians(90)); trans.translate(-width/2,-height/2); g2D.drawImage(image ,trans ,this); }}
public void rotateJ2D(BufferedImage bufferedImage, int rad) { int width = bufferedImage.getWidth(); int height = bufferedImage.getHeight(); BufferedImage dstImage = null; AffineTransform affineTransform = new AffineTransform(); if (rad == 90) { affineTransform.translate(height, 0.0D); dstImage = new BufferedImage(height, width, bufferedImage.getType()); affineTransform.rotate(Math.toRadians(rad)); } else if (rad == 180) { affineTransform.translate(width, height); dstImage = new BufferedImage(width, height, bufferedImage.getType()); affineTransform.rotate(Math.toRadians(rad)); } else if (rad == 270) { affineTransform.translate(0.0D, width); dstImage = new BufferedImage(height, width, bufferedImage.getType()); affineTransform.rotate(Math.toRadians(rad)); } else if (rad == -90) { affineTransform.translate(0.0D, width); dstImage = new BufferedImage(height, width, bufferedImage.getType()); affineTransform.rotate(Math.toRadians(rad)); } else if (rad == -180) { affineTransform.translate(width, height); dstImage = new BufferedImage(width, height, bufferedImage.getType()); affineTransform.rotate(Math.toRadians(rad)); } else if (rad == -270) { affineTransform.translate(height, 0.0D); dstImage = new BufferedImage(height, width, bufferedImage.getType()); affineTransform.rotate(Math.toRadians(rad)); } AffineTransformOp affineTransformOp = new AffineTransformOp(affineTransform, 1); BufferedImage newImage = affineTransformOp.filter(bufferedImage, dstImage); this.bufedImgSrc = newImage; if (this.normalSize) { this.image = newImage.getScaledInstance(-1, this.defaultHeight, 16); this.labIcon.setIcon(new ImageIcon(this.image)); } else { this.image = newImage.getScaledInstance(-1, this.modifyHeight, 16); this.labIcon.setIcon(new ImageIcon(this.image)); } }
参考 http://blog.csdn.net/wangshu3000/archive/2007/05/05/1597235.aspx 变换Graphics的原点 进行旋转 Graphics2D g2 = (Graphics2D)g; g2.drawImage(img,0,0,null);//画原图 g2.translate(getWidth() / 2, getHeight() / 2);//平移坐标轴,将原点移到组件中心 g2.transform(t);//设置仿射变换 /* we don't use setTransform because we want to compose with the current translation */ g2.drawImage(img,-50,-50,null);//在新坐标系中画图像
import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Insets; import java.awt.MediaTracker; import java.awt.Toolkit; import java.awt.geom.AffineTransform; import java.awt.geom.Point2D; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.awt.image.BufferedImageOp;import javax.swing.JFrame;/** * 图像旋转45度 */ public class RotateImage45Degrees extends JFrame { private Image inputImage; private BufferedImage sourceBI; private BufferedImage destinationBI = null; private Insets frameInsets; private boolean sizeSet = false; public RotateImage45Degrees(String imageFile) { addNotify(); frameInsets = getInsets(); inputImage = Toolkit.getDefaultToolkit().getImage(imageFile); MediaTracker mt = new MediaTracker(this); mt.addImage(inputImage, 0); try { mt.waitForID(0); } catch (InterruptedException ie) { } sourceBI = new BufferedImage(inputImage.getWidth(null), inputImage .getHeight(null), BufferedImage.TYPE_INT_ARGB); Graphics2D g = (Graphics2D) sourceBI.getGraphics(); g.drawImage(inputImage, 0, 0, null); AffineTransform at = new AffineTransform(); // scale image at.scale(2.0, 2.0); // rotate 45 degrees around image center at.rotate(45.0 * Math.PI / 180.0, sourceBI.getWidth() / 2.0, sourceBI .getHeight() / 2.0); /* * translate to make sure the rotation doesn't cut off any image data */ AffineTransform translationTransform; translationTransform = findTranslation(at, sourceBI); at.preConcatenate(translationTransform); // instantiate and apply affine transformation filter BufferedImageOp bio; bio = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR); destinationBI = bio.filter(sourceBI, null); int frameInsetsHorizontal = frameInsets.right + frameInsets.left; int frameInsetsVertical = frameInsets.top + frameInsets.bottom; setSize(destinationBI.getWidth() + frameInsetsHorizontal, destinationBI .getHeight() + frameInsetsVertical); show(); } /* * find proper translations to keep rotated image correctly displayed */ private AffineTransform findTranslation(AffineTransform at, BufferedImage bi) { Point2D p2din, p2dout; p2din = new Point2D.Double(0.0, 0.0); p2dout = at.transform(p2din, null); double ytrans = p2dout.getY(); p2din = new Point2D.Double(0, bi.getHeight()); p2dout = at.transform(p2din, null); double xtrans = p2dout.getX(); AffineTransform tat = new AffineTransform(); tat.translate(-xtrans, -ytrans); return tat; } public void paint(Graphics g) { if (destinationBI != null) g.drawImage(destinationBI, frameInsets.left, frameInsets.top, this); } public static void main(String[] args) { new RotateImage45Degrees("D:/image/axe.jpg"); }}
http://blog.csdn.net/lj_6891zz/archive/2009/02/03/3859350.aspx
好你只有Graphics 2d 里才有 不熟悉
http://blog.csdn.net/lj_6891zz/archive/2009/02/03/3859350.aspx,
通过坐标进行操作
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/package learning;/**
*
* @author Administrator
*/
import java.applet.*;
import java.awt.*;
import java.awt.geom.*;
import javax.imageio.*;
import java.io.*;
public class ImageTest extends Applet{
private Image image;
AffineTransform at = new AffineTransform(); public void init(){
//文件位置
String filename ="C:/Users/Administrator/Documents/NetBeansProjects/JavaApplication3/src/learning/car.png";
//文件读入
try{image =ImageIO.read(new File(filename));}
catch (IOException e){e.printStackTrace();}
}
public void paint(Graphics g){
Graphics2D g2D = (Graphics2D) g; int width = image.getHeight(this); int height = image.getHeight(this); g2D.setColor(Color.BLACK);
g2D.fillRect(0,0,getSize().width,getSize().height); AffineTransform trans = new AffineTransform(); trans.setToIdentity(); //坐标变换
trans.translate(width/2,height/2); trans.scale(1,1); //旋转90度
trans.rotate(Math.toRadians(90)); trans.translate(-width/2,-height/2); g2D.drawImage(image ,trans ,this); }}
{
int width = bufferedImage.getWidth();
int height = bufferedImage.getHeight();
BufferedImage dstImage = null;
AffineTransform affineTransform = new AffineTransform();
if (rad == 90)
{
affineTransform.translate(height, 0.0D);
dstImage = new BufferedImage(height, width, bufferedImage.getType());
affineTransform.rotate(Math.toRadians(rad));
}
else if (rad == 180)
{
affineTransform.translate(width, height);
dstImage = new BufferedImage(width, height, bufferedImage.getType());
affineTransform.rotate(Math.toRadians(rad));
}
else if (rad == 270)
{
affineTransform.translate(0.0D, width);
dstImage = new BufferedImage(height, width, bufferedImage.getType());
affineTransform.rotate(Math.toRadians(rad));
}
else if (rad == -90)
{
affineTransform.translate(0.0D, width);
dstImage = new BufferedImage(height, width, bufferedImage.getType());
affineTransform.rotate(Math.toRadians(rad));
}
else if (rad == -180)
{
affineTransform.translate(width, height);
dstImage = new BufferedImage(width, height, bufferedImage.getType());
affineTransform.rotate(Math.toRadians(rad));
}
else if (rad == -270)
{
affineTransform.translate(height, 0.0D);
dstImage = new BufferedImage(height, width, bufferedImage.getType());
affineTransform.rotate(Math.toRadians(rad));
}
AffineTransformOp affineTransformOp = new AffineTransformOp(affineTransform,
1);
BufferedImage newImage = affineTransformOp.filter(bufferedImage, dstImage);
this.bufedImgSrc = newImage;
if (this.normalSize)
{
this.image = newImage.getScaledInstance(-1, this.defaultHeight, 16);
this.labIcon.setIcon(new ImageIcon(this.image));
}
else
{
this.image = newImage.getScaledInstance(-1, this.modifyHeight, 16);
this.labIcon.setIcon(new ImageIcon(this.image));
}
}
http://blog.csdn.net/wangshu3000/archive/2007/05/05/1597235.aspx
变换Graphics的原点 进行旋转
Graphics2D g2 = (Graphics2D)g;
g2.drawImage(img,0,0,null);//画原图
g2.translate(getWidth() / 2, getHeight() / 2);//平移坐标轴,将原点移到组件中心
g2.transform(t);//设置仿射变换
/* we don't use setTransform because we want
to compose with the current translation
*/
g2.drawImage(img,-50,-50,null);//在新坐标系中画图像
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Insets;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;import javax.swing.JFrame;/**
* 图像旋转45度
*/
public class RotateImage45Degrees extends JFrame {
private Image inputImage; private BufferedImage sourceBI; private BufferedImage destinationBI = null; private Insets frameInsets; private boolean sizeSet = false; public RotateImage45Degrees(String imageFile) {
addNotify();
frameInsets = getInsets();
inputImage = Toolkit.getDefaultToolkit().getImage(imageFile); MediaTracker mt = new MediaTracker(this);
mt.addImage(inputImage, 0);
try {
mt.waitForID(0);
} catch (InterruptedException ie) {
} sourceBI = new BufferedImage(inputImage.getWidth(null), inputImage
.getHeight(null), BufferedImage.TYPE_INT_ARGB); Graphics2D g = (Graphics2D) sourceBI.getGraphics();
g.drawImage(inputImage, 0, 0, null); AffineTransform at = new AffineTransform(); // scale image
at.scale(2.0, 2.0); // rotate 45 degrees around image center
at.rotate(45.0 * Math.PI / 180.0, sourceBI.getWidth() / 2.0, sourceBI
.getHeight() / 2.0); /*
* translate to make sure the rotation doesn't cut off any image data
*/
AffineTransform translationTransform;
translationTransform = findTranslation(at, sourceBI);
at.preConcatenate(translationTransform); // instantiate and apply affine transformation filter
BufferedImageOp bio;
bio = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR); destinationBI = bio.filter(sourceBI, null); int frameInsetsHorizontal = frameInsets.right + frameInsets.left;
int frameInsetsVertical = frameInsets.top + frameInsets.bottom;
setSize(destinationBI.getWidth() + frameInsetsHorizontal, destinationBI
.getHeight()
+ frameInsetsVertical);
show();
} /*
* find proper translations to keep rotated image correctly displayed
*/
private AffineTransform findTranslation(AffineTransform at, BufferedImage bi) {
Point2D p2din, p2dout; p2din = new Point2D.Double(0.0, 0.0);
p2dout = at.transform(p2din, null);
double ytrans = p2dout.getY(); p2din = new Point2D.Double(0, bi.getHeight());
p2dout = at.transform(p2din, null);
double xtrans = p2dout.getX(); AffineTransform tat = new AffineTransform();
tat.translate(-xtrans, -ytrans);
return tat;
} public void paint(Graphics g) {
if (destinationBI != null)
g.drawImage(destinationBI, frameInsets.left, frameInsets.top, this);
} public static void main(String[] args) {
new RotateImage45Degrees("D:/image/axe.jpg");
}}