【问题标题】:Spin Control in Windows FormWindows 窗体中的旋转控件
【发布时间】:2015-11-11 21:30:06
【问题描述】:

我有一个图片框,里面有一张图片。该图像包含两个面对面的椭圆(黑色和蓝色)。

我想要的是在计时器中旋转图片框(为了效果),这样“倒置”的图像看起来更像是他们已经改变了位置,基本上它只是像地球一样旋转图片框正在围绕它的轴移动。

【问题讨论】:

  • 翻转它很容易(非动画,只是交换 Y 坐标),沿 Z 轴旋转(就像您将手指放在屏幕上并围绕它旋转)很容易,但是要做您所问的需要 3-D 转换(围绕 Y 轴旋转)并且不支持任何内置。 WPF 可以做到,您可以在 WinForms 应用程序中使用 WPF 控件而不是图片框...
  • 我知道,但我希望它以带有图片框的 Windows 形式出现...我使用参数方程在计时器内围绕半径移动图片框,但基本上我想要的是像旋转它一样那个。
  • 在 Z-axys 中旋转,有代码示例吗?
  • 我建议你尝试一下,并意识到它不是旋转,它更像是在一个圆圈中移动盒子,它不会旋转图像。

标签: c# rotation controls


【解决方案1】:

地球有多种旋转方式,具体取决于您如何看待它。

如果您从两极上方看它,它会像圆盘或齿轮一样旋转,您可以找到它的代码here。这样做的好处是您可以使用任何图像并对其进行旋转。

如果你从侧面看它,面对赤道你不能轻易使用位图,但只使用两种颜色仍然会很好看..

这是一个“地球状”旋转的示例:

float angle = 0f;
float aSpeed = 4f;                      // <-- set your speed
Brush brush1 = Brushes.CadetBlue;       // and your..
Brush brush2 = Brushes.DarkSlateBlue;   // ..colors

private void timer1_Tick(object sender, EventArgs e)
{
    angle += aSpeed;
    if (angle + aSpeed > 360)
    {
        angle -= 360f;
        Brush temp = brush1;
        brush1 = brush2;
        brush2 = temp;
    }
    pictureBox1.Invalidate();
}

private void pictureBox1_Click(object sender, EventArgs e)
{
    timer1.Enabled = !timer1.Enabled;
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
    Rectangle r = pictureBox1.ClientRectangle;
    Rectangle r2 = r;   // see below..
    r.Inflate(-20, -20);     // a little smaller than the panel or pBox

    if (angle < 180)
    {
        e.Graphics.FillEllipse(brush1, r);
        e.Graphics.FillPie(brush2, r, 270, 180);
        r.Inflate(-(int)(r.Width * angle / 360f), 0);
        e.Graphics.FillEllipse(brush2, r);
    }
    else
    {
        e.Graphics.FillEllipse(brush2, r);
        e.Graphics.FillPie(brush1, r, 90, 180);
        r.Inflate(-(int)(r.Width * angle / 360f), 0);
        e.Graphics.FillEllipse(brush1, r);
    }
}

}

这是由三个DrawXXX 调用创建的:一个颜色的圆、一个椭圆和一个圆弧,设置为显示相同的第二个颜色的半圆。

注意:为了使角速度均匀,您可能需要使用一点 Math.Sin 和/或角度表..

如果您从任何其他角度看它,并且如果您需要以 3D 显示旋转位图,您将无法轻松绘制它,但需要求助于显示框架。..

但是您可以将链接中的磁盘旋转与上面的代码结合起来,会得到相当复杂的旋转,看起来很像 3D 球体。只需在绘图前添加代码即可。

float bw2 = r2.Width / 2f;    
float bh2 = r2.Height / 2f;  
e.Graphics.TranslateTransform(bw2, bh2);
e.Graphics.RotateTransform(angle / 3);
e.Graphics.TranslateTransform(-bw2, -bh2);

..使用上面的绘图代替DrawImage 线并将ResetTransform 移动到末尾。您将需要使用不同的或按比例缩放的角度!

【讨论】:

  • 我明白,但我不想旋转图片框中的图像,我希望控件顺时针旋转 360 度。
  • 这是不可能的。 Winforms 控件不能旋转。只有内容/画在上面的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
相关资源
最近更新 更多