-1

我在音乐播放器中工作,我希望当前歌曲的专辑封面在圆形图片盒中旋转,只是一个 vynil 转盘。

我已经有了圆形图片框,我尝试让它旋转,但它旋转得很粗,看起来不平滑。所以我不知道我是否使用了错误的参数,或者我的代码是否有问题。

此处使用的代码: Rotating image around center C#

希望你能帮忙。提前致谢。

4

2 回答 2

1

WinForms 图形 API 非常有限,这就是整个平台已经过时的原因。WPF 更有能力进行图形演示,因为它背后有硬件加速和 DirectX。我的观点是,如果您正在创建有趣的解决方案,请至少使用 WPF。如果您的目标是纯粹的商业,那么 WinForms 就绰绰有余了。

于 2017-04-02T20:18:45.223 回答
1

这对我来说真的很流畅,PictureBox 大小为 150x150,图像大小为 200x200:

旋转黑胶唱片

public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    private int Angle;
    private Image Art; // you may need to resample larger images to a smaller image dynamically!
    private int AngleStep = 20;
    private System.Drawing.Drawing2D.GraphicsPath Vinyl = new System.Drawing.Drawing2D.GraphicsPath();

    private void Form1_Load(object sender, EventArgs e)
    {
        timer1.Interval = 50;
        Art = Properties.Resources.AlbumArt2; // image as embedded resource (or from somewhere else)

        // larger circle with the center cut out: (like a vinyl record)
        Vinyl.AddEllipse(pictureBox1.ClientRectangle);
        Rectangle rc = new Rectangle(pictureBox1.Width / 2, pictureBox1.Height / 2, 1, 1);
        rc.Inflate(10, 10);
        Vinyl.AddEllipse(rc);

        pictureBox1.Paint += PictureBox1_Paint;
    }

    private void PictureBox1_Paint(object sender, PaintEventArgs e)
    {
        Graphics G = e.Graphics;
        G.SetClip(Vinyl);
        G.TranslateTransform(pictureBox1.Width / 2, pictureBox1.Height / 2); // move to the center
        G.RotateTransform(Angle); // rotate to the current angle
        G.DrawImage(Art, new Point(-(Art.Width / 2), -(Art.Height / 2))); // draw the image centered
    }

    private void button1_Click(object sender, EventArgs e)
    {
        timer1.Enabled = !timer1.Enabled;
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        Angle = Angle + AngleStep;
        if (Angle >= 360)
        {
            Angle = Angle - 360;
        }
        pictureBox1.Refresh();
    }

}

玩它,看看它是否适合你。您肯定需要从那些较大的图像中制作动态的较小图像。如果您想要性能图形和动画,请按照 DigheadsFerke 的建议移至 WPF。

于 2017-04-03T02:56:47.837 回答