仿射变换图像测试!!!!

程序运行图:

  

  import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.*;
import javax.swing.*;

public class TransformTest
{  public static void main(String[] args)
   {  JFrame frame = new TransformTestFrame();
      frame.show();
   }
}

class TransformTestFrame extends JFrame
   implements ActionListener
{  public TransformTestFrame()
   {  setTitle("TransformTest");
      setSize(400, 400);
      addWindowListener(new WindowAdapter()
         {  public void windowClosing(WindowEvent e)
            {  System.exit(0);
            }
         } );

      Container contentPane = getContentPane();
      canvas = new TransformPanel();
      contentPane.add(canvas, "Center");

      JPanel buttonPanel = new JPanel();
      ButtonGroup group = new ButtonGroup();

      rotateButton = new JRadioButton("Rotate", true);
      buttonPanel.add(rotateButton);
      group.add(rotateButton);
      rotateButton.addActionListener(this);

      translateButton = new JRadioButton("Translate", false);
      buttonPanel.add(translateButton);
      group.add(translateButton);
      translateButton.addActionListener(this);

      scaleButton = new JRadioButton("Scale", false);
      buttonPanel.add(scaleButton);
      group.add(scaleButton);
      scaleButton.addActionListener(this);

      shearButton = new JRadioButton("Shear", false);
      buttonPanel.add(shearButton);
      group.add(shearButton);
      shearButton.addActionListener(this);

      contentPane.add(buttonPanel, "North");
   }

   public void actionPerformed(ActionEvent event)
   {  Object source = event.getSource();
      if (source == rotateButton) canvas.setRotate();
      else if (source == translateButton) canvas.setTranslate();
      else if (source == scaleButton) canvas.setScale();
      else if (source == shearButton) canvas.setShear();
   }

   private TransformPanel canvas;
   private JRadioButton rotateButton;
   private JRadioButton translateButton;
   private JRadioButton scaleButton;
   private JRadioButton shearButton;
}

class TransformPanel extends JPanel
{  public TransformPanel()
   {  img=new ImageIcon("antialiased.png").getImage();
      t = new AffineTransform();
      setRotate();
   }

   public void paintComponent(Graphics g)
   {  super.paintComponent(g);
      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);//在新坐标系中画图像
   }

   public void setRotate()
   {  t.setToRotation(Math.toRadians(60));//旋转
      repaint();
   }

   public void setTranslate()
   {  t.setToTranslation(60, 15);//平移
      repaint();
   }

   public void setScale()
   {  t.setToScale(-1, 1);//翻转图像
      repaint();
   }

   public void setShear()
   {  t.setToShear(-0.2, 2);//剪切
      repaint();
   }
    
   private Image img;
   private AffineTransform t;

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值