java 图片旋转

2014年8月,想自己试试把《机械迷城》里的所有简单小游戏抠出来,锻炼下自己类的设计,特别也想写篇博客纪念下:

第一个,是很常见的按钮旋转,点击鼠标图片能实现旋转,并能返回得到一个值,由这个值再控制其他物件。

这一次只先做了一个旋转图片,并未返回值(这个实现也很简单)。

思路:1、创建一个画板,在画板中画一个图像,使用方法
g.drawImage(pointer.getImage(),100,20,null);//pointer是ImageIcon</span>
2、然后,能使图片任意旋转:
AffineTransform at = new AffineTransform(); //仿射变化 类
at.rotate(Math.toRadians(i), image.getWidth(null)/2, image.getHeight(null)/2);//AffineTransform中的旋转方法,当然还有水平移动的方法。(把数学里函数变化方法对集结了。)
3、读取图片:
Image image=ImageIO.read(new File("pointer.png"));//查询ImageIO类
<span style="font-size:18px;">4.建立BufferedImage:
BufferedImage bufferImage=new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB);//BufferedImage只是准备一块地方来装图片
5.利用Graphics2D:
Graphics2D g2=bufferImage.createGraphics();
g2.setTransform(at);
g2.drawImage(image,null,null);
Graphics2D 能链接bufferedImage和AffineTransform at
以上,是图片旋转的方法。感谢:http://blog.csdn.net/lj_6891zz/article/details/3859350博主写的帖子受益匪浅
然后跟博主感觉一样,不知道是因为太久没弄java还是本来就比较笨,反正弄了好久。唉,感慨啊。
话说大三还没找到实习了。
当然,这里面还有一个点击鼠标,实现线程的东东,因为没用到新的知识,很快也就写出来了。完毕。
还有用到的pointer.png也贴上来:


import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;

public class Icon extends JFrame{
	public static void main(String[] args){
		new Icon();
	}
	public Icon(){
		Pointer p=new Pointer();
		
		add(p);
		
		setSize(500,500);
		setVisible(true);
	}
}
class Pointer extends JPanel{
	int i=0;
	int dgree=0;
	ImageIcon pointer;
	public Pointer(){
		addMouseListener(new MouseAdapter(){

			public void mouseClicked(MouseEvent arg0) {
				
				class Rotate implements Runnable{

					public void run() {
						dgree+=72;
						System.out.println("dgree"+dgree);
						while(i<dgree){
							try {
								i++;
								Thread.sleep(10);
								repaint();
								System.out.println("i   "+i);
								if(i==360&&dgree==360){
									i=0;dgree=0;}
								
							} catch (InterruptedException e) {
								e.printStackTrace();
							}
						}
					}
				}
				Thread t=new Thread(new Rotate());
				t.start();
				
				
			}
		});
		System.out.println(dgree);
	}
	
	public void paint(Graphics g){
		try {
			Image image=ImageIO.read(new File("pointer.png"));
			
			AffineTransform at = new AffineTransform(); 
			at.rotate(Math.toRadians(i), image.getWidth(null)/2, image.getHeight(null)/2);
			BufferedImage bufferImage=new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB);
			Graphics2D g2=bufferImage.createGraphics();
			g2.setTransform(at);
			g2.drawImage(image,null,null);
			pointer=new ImageIcon(bufferImage);
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		g.drawImage(pointer.getImage(),100,20,null);
	}
	
	
	
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值