Gauge Needle Pivot Point

时间:2014-07-13 10:21:38

标签: c# winforms

我的数学技能不好。我在互联网上搜索过,无法解决这个问题。

我很难设法确定一个速度表型针头。

仪表是半圈或180度。针是png图像,宽10像素,高164像素。

仪表宽378像素,高226像素。

因为我试图旋转一个高大的矩形,所以必须重新计算针位置。

Point pivotPoint = new Point(gauge.Width / 2, gauge.Height); 
double degrees = -45; // example where to point the needle

有人可以给我一些实际的C#代码,这些代码可以使针头png正确定位吗?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

以下是一些代码,它将旋转的针图像绘制到带有仪表图像的PictureBox上。

我从一个从0到180的轨迹栏中获取角度。

The Needle直立倒立:

  • 角度弥补了我们开始时的90°偏移。
  • 针的旋转点应该是其原点。

PictureBox.SizeMode设置为自动调整大小。

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    using (Bitmap needle =  new Bitmap("D:\\needle3.png" )  )
    {
        int angle = trBar_angle.Value;
        label1.Text = angle.ToString("###0°");

        // this is the offset after the translation
        Point targetPoint = new Point(-needle.Width / 2, needle.Width / 2);

        // shortcuts for the sizes
        Size nSize = needle.Size;
        Size pSize = pictureBox1.ClientSize;

        // this is the translation of the graphic to meet the rotation point
        int transX = pSize.Width / 2;
        int transY = pSize.Height - nSize.Width / 2;

        //set the rotation point and rotate
        e.Graphics.TranslateTransform( transX, transY );
        e.Graphics.RotateTransform(angle + 90); 

        // draw on the rotated graphics
        e.Graphics.DrawImage(needle, targetPoint);

        //reset everything
        e.Graphics.RotateTransform( -angle - 90); 
        e.Graphics.TranslateTransform( -transX, -transY );

    }

}

我的针: enter image description here 结果: enter image description here

我希望你有一个比我制作的更好的规格; - )