簡體   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