[英]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.