16. 3. 11. 剪切渐变合成及鼠标移动Translate and rotate all objects

 

import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Ellipse2D;
import java.awt.geom.RoundRectangle2D;

import javax.swing.JComponent;
import javax.swing.JFrame;


public class TranslateAndRotateObject extends JComponent{
	private Image image;
	private int theta;//角度 塞塔脑波 希蜡字母的第八字
	
	public TranslateAndRotateObject(){
		image = Toolkit.getDefaultToolkit().getImage("E:\\java\\Test\\icon\\44.png");//拿到图片
		theta = 0;//角度为0
		addMouseListener(new MouseAdapter(){
			public void mousePressed(MouseEvent e){//按下鼠标
				theta = (theta + 15) % 360;//每次加15度
				repaint();
			}
		});
	}
	
	public void paint(Graphics g){
		Graphics2D g2d = (Graphics2D)g;
		//设置渲染锯齿平滑  ON开
		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		//getSize()从JComponent而来,以 Dimension 对象的形式返回组件的大小。
		//Dimension 对象的 height 字段包含此组件的高度,
		//而 Dimension 对象的 width 字段则包含此组件的宽度。
		int cx = getSize().width/2;
		int cy = getSize().height/2;
		//====================================================================使图片能旋转
		g2d.translate(cx, cy);//平移至指定坐标
		//使用正角度 theta 进行旋转,可将正 x 轴上的点转向正 y 轴。
		g2d.rotate(theta * Math.PI/180);
		
		g2d.drawImage(image, -cx/2, -cy/2, this);
		//====================================================================画一个渐变椭圆
		Shape oldClip = g2d.getClip();//一个形状=g2d.获取当前剪贴区域。
		//以 float 精度定义椭圆    根据指定坐标构造和初始化 Ellipse2D。
		Shape e = new Ellipse2D.Float(-cx,-cy,cx*2,cy*2);
		g2d.clip(e);
		
		Shape c = new Ellipse2D.Float(-cx,-cy,cx*3/4,cy*2);
		g2d.setPaint(new GradientPaint(40,40,Color.blue,60,50,Color.white,true));
		g2d.fill(c);
		//=================================================================画一个黄色剪切椭圆
		g2d.setPaint(Color.yellow);
		g2d.fillOval(cx/4, 0, cx, cy);//指定椭圆的坐标与高宽度
		g2d.setClip(oldClip);
		//=================================================================画渐变的大字
		g2d.setFont(new Font("Times New Roman", Font.PLAIN, 60));
		g2d.setPaint(new GradientPaint(-cx,0,Color.red,cx,0,Color.black,false));
		g2d.drawString("Hellow g2d", -cx*3/4, cy/4);
		//=================================================================设置合成
		/**
		 * alpha:阿尔法 透明度 阿尔法系数   composite:合成品 合成 复合 
		 * AlphaComposite:实现一些基本的 alpha 合成规则,将源色与目标色组合,在图形和图像中实现混合和透明效果。
		 * getInstance():它具有指定的规则和用来乘源色 alpha 值的常量 alpha 值。(合成规则,alpha值)
		 * SRC_OVER:在目标色之上合成源色
		 */
		AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,(float).75);
		g2d.setComposite(ac);
		//=====================================================合成两个圆边方形
		//RoundRectangle2D.float(坐标x,y,宽高w,h,圆角狐宽高arcW,arcH)
		Shape r = new RoundRectangle2D.Float(0,-cy*3/4,cx*3/4,cy*3/4,20,20);
		//Stroke:描边、笔画、轻抚 ----setStoke()呈现过程中用于勾画 Shape 的 Stroke 对象
		g2d.setStroke(new BasicStroke(4));//构造一个具有指定线条宽度以及 cap 和 join 风格的默认值的实心 BasicStroke。
		g2d.setPaint(Color.magenta);//品红色的
		g2d.fill(r);
		g2d.setPaint(Color.green);//绿色套在品红色周围
		g2d.draw(r);
	}

	public static void main(String[] args) {
		JFrame f = new JFrame("TranslateandrotateallObjects");
		f.add(new TranslateAndRotateObject(),BorderLayout.CENTER);
		f.setSize(300,300);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
	}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值