none
picturebox 顺时针旋转动画 求助 RRS feed

  • 问题

  • 在winfrom 里如何能15度  15度 增加旋转起来呢?

    RotateFlip(RotateFlipType.RotateNoneFlipY) 只能按照一定的度数 旋转  还没办法定义旋转的中心轴

    求助更好的方法  页面有 picturebox1  和 timer1 但是不知道方法  

    2016年8月26日 3:25

答案

  • Hi ylzl

    思路就是利用timer的Tick去触发旋转事件,而旋转事件需要用到Graphics,贴段代码吧:

    关于Timer:

    Timer timer = new Timer();
    timer.Interval = 100; // 这是Timer触发的时间间隔,要调整成你需要的。单位毫秒。
    timer.Tick += Timer_Tick;
    timer.Start();

    关于 Timer 的 Tick:

    private void Timer_Tick(object sender, EventArgs e)
    {
        angle = (angle + 15) % 360; // 这里的angle是旋转的角度,根据需要自己调整
        RotateFormCenter(pictureBox1, angle);
    }

    关于Rotate方法:

    private void RotateFormCenter(PictureBox pb, float angle)
    {
        Image img = pb.Image;
        int newWidth = Math.Max(img.Height, img.Width);
        Bitmap bmp = new Bitmap(newWidth, newWidth);
        Graphics g = Graphics.FromImage(bmp);
        Matrix x = new Matrix();
        PointF point = new PointF(img.Width / 2f, img.Height / 2f); // 这里指定旋转中心点
        x.RotateAt(angle, point);
        g.Transform = x;
        g.DrawImage(img, 0, 0);
        g.Dispose();
        img = bmp;
        pb.Image = img;
    }


    希望我的答案能帮助更多的人。




    • 已编辑 shao.meng 2016年8月26日 8:49
    • 已建议为答案 shao.meng 2016年8月26日 8:50
    • 已标记为答案 ylzl 2016年8月26日 9:11
    2016年8月26日 8:48
  • 图片模糊是因为在转动过程中,黑色和白色会有融合。

    跳动的话,应该是每次跳动的角度过大,而过程中没有过渡,平滑之类的操作,所以感觉有跳动,可以尝试把角度减小。


    希望我的答案能帮助更多的人。

    • 已标记为答案 ylzl 2016年8月26日 12:12
    2016年8月26日 9:51

全部回复

  • 一点头绪都没 试了很多都不对 真的是新手 

    求代码 和 using

    2016年8月26日 3:49
  • Hi ylzl

    思路就是利用timer的Tick去触发旋转事件,而旋转事件需要用到Graphics,贴段代码吧:

    关于Timer:

    Timer timer = new Timer();
    timer.Interval = 100; // 这是Timer触发的时间间隔,要调整成你需要的。单位毫秒。
    timer.Tick += Timer_Tick;
    timer.Start();

    关于 Timer 的 Tick:

    private void Timer_Tick(object sender, EventArgs e)
    {
        angle = (angle + 15) % 360; // 这里的angle是旋转的角度,根据需要自己调整
        RotateFormCenter(pictureBox1, angle);
    }

    关于Rotate方法:

    private void RotateFormCenter(PictureBox pb, float angle)
    {
        Image img = pb.Image;
        int newWidth = Math.Max(img.Height, img.Width);
        Bitmap bmp = new Bitmap(newWidth, newWidth);
        Graphics g = Graphics.FromImage(bmp);
        Matrix x = new Matrix();
        PointF point = new PointF(img.Width / 2f, img.Height / 2f); // 这里指定旋转中心点
        x.RotateAt(angle, point);
        g.Transform = x;
        g.DrawImage(img, 0, 0);
        g.Dispose();
        img = bmp;
        pb.Image = img;
    }


    希望我的答案能帮助更多的人。




    • 已编辑 shao.meng 2016年8月26日 8:49
    • 已建议为答案 shao.meng 2016年8月26日 8:50
    • 已标记为答案 ylzl 2016年8月26日 9:11
    2016年8月26日 8:48
  • angle是自己定义的一个int全局变量。

    希望我的答案能帮助更多的人。


    • 已编辑 shao.meng 2016年8月26日 9:18 typo fix
    2016年8月26日 9:18
  • 嗯  发现了 我还以为是C#的功能需要 USING 呢  

    但是不知道逻辑哪里有问题 弹跳着转 晃动的厉害 颜色还逐渐模糊了

    2016年8月26日 9:35
  • 图片模糊是因为在转动过程中,黑色和白色会有融合。

    跳动的话,应该是每次跳动的角度过大,而过程中没有过渡,平滑之类的操作,所以感觉有跳动,可以尝试把角度减小。


    希望我的答案能帮助更多的人。

    • 已标记为答案 ylzl 2016年8月26日 12:12
    2016年8月26日 9:51