java 怎么让一个图形绕一个点旋转360度 100

刚刚学Java,在学translate和rotate,但是不会让一个圆绕一圈... 刚刚学Java,在学translate和rotate,但是不会让一个圆绕一圈 展开
 我来答
沉稳又淡泊丶小猫v
2018-01-30 · TA获得超过3564个赞
知道小有建树答主
回答量:1367
采纳率:80%
帮助的人:125万
展开全部
  1. import java.awt.Canvas;
  2. import java.awt.Graphics;
  3. import java.awt.Graphics2D;
  4. import java.awt.RenderingHints;
  5. import java.awt.image.BufferedImage;
  6.  
  7. /**
  8.  * @author ZhengYesheng
  9.  */
  10. public class RotateImageCanvas extends Canvas implements Runnable
  11. {
  12.     private static final long serialVersionUID = -1997487731464495923L;
  13.  
  14.     BufferedImage img;
  15.     BufferedImage rotatedImg;
  16.  
  17.     int degress = 0;
  18.  
  19.     public RotateImageCanvas(BufferedImage img)
  20.     {
  21.         super();
  22.         this.img = img;
  23.         new Thread(this).start();
  24.     }
  25.  
  26.     @Override
  27.     public void run()
  28.     {
  29.         while (true)
  30.         {
  31.             //A,与B的代码配合决定旋转的速度
  32.             degress += 1;
  33.             degress %= 360;
  34.             repaint();
  35.             try
  36.             {
  37.                 if (degress == 0)
  38.                 {
  39.                     //绕一周后等待的时间在这里设置
  40.                     Thread.sleep(3 * 1000);
  41.                 }
  42.                 else
  43.                 {
  44.                     //考虑到视觉平滑,这里不应大约40。
  45.                     Thread.sleep(30);
  46.                 }
  47.             }
  48.             catch (InterruptedException e)
  49.             {
  50.                 // TODO Auto-generated catch block
  51.                 e.printStackTrace();
  52.             }
  53.         }
  54.     }
  55.  
  56.     @Override
  57.     public void paint(Graphics graphics)
  58.     {
  59.         super.paint(graphics);
  60.         //获取旋转指定角度后的图片。为了避免累计误差,这里是用原始图像旋转的
  61.         rotatedImg = rotateImage(img, degress);
  62.         //绘制旋转后的图片
  63.         graphics.drawImage(rotatedImg, 0, 0, this);
  64.     }
  65.  
  66.     /**
  67.      * 旋转图片为指定角度。
  68.      * 注意:1、这个方法实现了图像的基于中点的旋转,要想绕指定点,需要配合Matrix类
  69.      *          2、为避免图像被裁切,结果图片的尺寸也需要动态计算
  70.      *          3、现在旋转后有黑色背景,如果不需要这个效果,需要设置结果图片的Alpha模式
  71.      * 
  72.      * @param bufferedimage
  73.      *            目标图像
  74.      * @param degree
  75.      *            旋转角度
  76.      * @return
  77.      */
  78.     private BufferedImage rotateImage(BufferedImage bufferedimage, int degree)
  79.     {
  80.         int w = bufferedimage.getWidth();
  81.         int h = bufferedimage.getHeight();
  82.         int type = bufferedimage.getColorModel().getTransparency();
  83.         BufferedImage img;
  84.         Graphics2D graphics2d;
  85.         (graphics2d = (img = new BufferedImage(w, h, type)).createGraphics())
  86.                 .setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
  87.         graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2);
  88.         graphics2d.drawImage(bufferedimage, 0, 0, null);
  89.         graphics2d.dispose();
  90.         return img;
  91.     }
  92. }
栗佑AT
2018-01-30
知道答主
回答量:5
采纳率:0%
帮助的人:4405
展开全部
import java.awt.Canvas;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.image.BufferedImage; /** * @author yzw */public class RotateImageCanvas extends Canvas implements Runnable{ private static final long serialVersionUID = -1997487731464495923L; BufferedImage img; BufferedImage rotatedImg; int degress = 0; public RotateImageCanvas(BufferedImage img) { super(); this.img = img; new Thread(this).start(); } @Override public void run() { while (true) { //A,与B的代码配合决定旋转的速度 degress += 1; degress %= 360; repaint(); try { if (degress == 0) { //绕一周后等待的时间在这里设置 Thread.sleep(3 * 1000); } else { //考虑到视觉平滑,这里不应大约40。 Thread.sleep(30); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Override public void paint(Graphics graphics) { super.paint(graphics); //获取旋转指定角度后的图片。为了避免累计误差,这里是用原始图像旋转的 rotatedImg = rotateImage(img, degress); //绘制旋转后的图片 graphics.drawImage(rotatedImg, 0, 0, this); } /** * 旋转图片为指定角度。 * 注意:1、这个方法实现了图像的基于中点的旋转,要想绕指定点,需要配合Matrix类 * 2、为避免图像被裁切,结果图片的尺寸也需要动态计算 * 3、现在旋转后有黑色背景,如果不需要这个效果,需要设置结果图片的Alpha模式 * * @param bufferedimage * 目标图像 * @param degree * 旋转角度 * @return */ private BufferedImage rotateImage(BufferedImage bufferedimage, int degree) { int w = bufferedimage.getWidth(); int h = bufferedimage.getHeight(); int type = bufferedimage.getColorModel().getTransparency(); BufferedImage img; Graphics2D graphics2d; (graphics2d = (img = new BufferedImage(w, h, type)).createGraphics()) .setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2); graphics2d.drawImage(bufferedimage, 0, 0, null); graphics2d.dispose(); return img; }}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式