图片的旋转、翻转、放大和缩小
实际上是重写paint(Graphics g)方法
drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)
放缩图片只需要改变几个int类型的参数即可
类Graphics2D的方法rotate(double theta, double x, double y)可以用来旋转图片
第一个参数:旋转的角度,以弧度值为单位
第二、三个参数:分别为旋转原点的X和Y坐标
import java.awt.*;
import javax.swing.*;
public class RotatePicture extends JLabel implements Runnable{
static Image img = new ImageIcon("D:/Backup/我的文档/水寒剑.jpg").getImage ();
static double[] rad = {0,Math.PI/2,Math.PI,-Math.PI/2};
double theta = 0;
public void paintComponent(Graphics g){
Graphics2D g2d = (Graphics2D)g;
g2d.rotate(theta,250,250);
g2d.drawImage(img,100,100,300,300,null);
}
public void run(){
for(int i=0;;i++){
try{
Thread.sleep (10);
}catch(InterruptedException ie){}
//可以通过正负号来改变旋转方向
rotate(Math.toRadians(i));//角度转换为弧度值
}
}
public void rotate(double d){
theta = d;
repaint();
}
public static void main(String[] args){
JFrame jf = new JFrame();
jf.setSize (500,530);
RotatePicture rp = new RotatePicture();
RotatePicture rp1 = new RotatePicture();
MyPicture mp = new MyPicture(img,jf);
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.add("任意角度旋转", rp);
tabbedPane.add("90度翻转", rp1);
tabbedPane.add("放大和缩小", mp);
jf.add(tabbedPane);
jf.setTitle ("图片的旋转、翻转、放大和缩小");
jf.setLocationRelativeTo (null);
jf.setVisible(true);
jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
Thread t1 = new Thread(rp);
t1.start ();
Thread t2 = new Thread(mp);
t2.start ();
for(int i=0;i<4;i++){
try{
Thread.sleep (1000);
}catch(InterruptedException ie){}
rp1.rotate(rad[i]);
if(i==3)i=-1;
}
}
}
class MyPicture extends Canvas implements Runnable{
Image img ;
int w;
int h;
int width;
int height;
int rate;
boolean flag;
public MyPicture(Image image,Container c){
img = image;
w = 50;
h = 50;
width = c.getWidth();
height = c.getHeight()-50;
rate = 10;
flag = false;
System.out.println(width+","+height);
}
public void run(){
while(true){
if(w<=0||h<=0)
flag = true;
if(w>=width||h>=height)
flag = false;
try{
Thread.sleep (100);
}catch(InterruptedException ie){
ie.printStackTrace ();
}
if(flag){
w+=10;
h+=10;
}
if(!flag){
w-=10;
h-=10;
}
repaint();
}
}
public void paint(Graphics g){
//设置图片左上角坐标
int x = (width-w)/2;
int y = (height-h)/2;
g.drawImage(img, x, y, w, h,null);
}
}