winForm 图片实现自动旋转,两个图片透明重叠

核心代码如下
public Bitmap picRotate(Bitmap bmp, int angle)
{  
    //转载请保留http://www.luofenming.com/show.aspx?id=ART2019112900001
    Bitmap reBmp = new Bitmap(bmp.Width, bmp.Height);
    Graphics g = Graphics.FromImage(reBmp);
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;//选择模式
    g.TranslateTransform((float)bmp.Width / 2, (float)bmp.Height / 2); //参数为旋转中心
    g.RotateTransform(angle);//设置旋转角度
    g.TranslateTransform(-(float)bmp.Width / 2, -(float)bmp.Height / 2);
    g.DrawImage(bmp, new Point(0, 0));
    return reBmp;//返回旋转后的图片
}

public void Transform()
{
    Bitmap bmp = new Bitmap(Resources.动效2);
    pictureBox1.BackgroundImage = bmp;
    Bitmap bmp1 = new Bitmap(Resources.动效4);//bmp即为我们的原型图片
    pictureBox2.BackgroundImage = bmp1;//将图片作为picturebox背景,方便展示
    this.BeginInvoke((EventHandler)(delegate
    {
        pictureBox2.Parent = pictureBox1;//在box1上显示Box2
    }));
    int angle = 0;
    int angle1 = 360;
    while (true)
    {
        this.BeginInvoke((EventHandler)(delegate
        {
            pictureBox1.BackgroundImage = picRotate(bmp, angle);//将旋转后的图片设置为picturebox1背景
        }));
        angle += 15;//每次增加5度
        if (angle >= 360)
        {
            angle = 0;
        }
        this.BeginInvoke((EventHandler)(delegate
        {
            pictureBox2.BackgroundImage = picRotate(bmp1, angle1);//将旋转后的图片设置为picturebox2背景
        }));
        angle1 -= 15;//每次减5度
        if (angle1 <= 0)
        {
            angle1 = 360;
        }
        Thread.Sleep(50);
    }
}
/// <summary>
/// 调用
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
    Thread th = new Thread(Transform);
    th.IsBackground = true;
    th.Start();
}
实例源码下载地址:https://pan.baidu.com/s/1Wfzd3BgvgzgERMRqWhWQew 提取码:ivuv
效果如下

评论