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