繁体   English   中英

Windows窗体中的旋转控件

[英]Spin Control in Windows Form

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

我想要的是在计时器中旋转图片框(以获得效果),以​​便使图像“上下颠倒”看起来更像是它们已更改了位置,基本上,这只是像旋转时代一样旋转图片框它是轴。

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

如果从两极上方看,它像磁盘或齿轮一样旋转,您可以在此处找到代码。 这样的好处是您可以使用任何图像并旋转它。

如果从侧面看,面对赤道,您将很难使用位图,但是仅使用两种颜色,效果仍然不错。

这是“球形”旋转旋转的示例:

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

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移动到末尾。 您将要使用其他角度或缩放角度!

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM