在System.Drawing
和System.Drawing.Drawing2D
中,我只能画出水平或垂直的形状。现在我想绘制自定义形状。在winform中绘制自定义椭圆C#
给定点A,B,C,D的坐标。我想画一个椭圆,就像图中的蓝色一样。
在System.Drawing
和System.Drawing.Drawing2D
中,我只能画出水平或垂直的形状。现在我想绘制自定义形状。在winform中绘制自定义椭圆C#
给定点A,B,C,D的坐标。我想画一个椭圆,就像图中的蓝色一样。
下面的例子是从MSDN采取:
private void RotateTransformAngle(PaintEventArgs e)
{
// Set world transform of graphics object to translate.
e.Graphics.TranslateTransform(100.0F, 0.0F);
// Then to rotate, prepending rotation matrix.
e.Graphics.RotateTransform(30.0F);
// Draw rotated, translated ellipse to screen.
e.Graphics.DrawEllipse(new Pen(Color.Blue, 3), 0, 0, 200, 80);
}
正确的解决方案涉及:
Graphics.TranslateTransform
向中心移动到原点计算中心Size
和使用Graphics.RotateTransform
旋转画布Graphics.DrawEllipse
Graphcis
对象这需要一点Math
但会产生真实的和精细的椭圆包围Rectangle
为了好玩,你也可能想玩一个便宜的,假的解决方案:我使用DrawClosedCurve
方法与张力。
为了测试我添加了一个TrackBar
设置了Maximum
的100
。的周围0.8f
80左右,即Tensions
价值创造相当不错的椭球:
private void panel1_Paint(object sender, PaintEventArgs e)
{
List<Point> points1 = new List<Point>()
{ new Point(300, 100), new Point(500, 300), new Point(400, 500), new Point(200, 300) };
List<Point> points2 = new List<Point>()
{ new Point(100, 100), new Point(500, 100), new Point(500, 400), new Point(100, 400) };
e.Graphics.DrawClosedCurve(Pens.Red, points1.ToArray(),
(float)(trackBar1.Value/100f), System.Drawing.Drawing2D.FillMode.Alternate);
e.Graphics.DrawClosedCurve(Pens.Blue, points2.ToArray(),
(float)(trackBar1.Value/100f), System.Drawing.Drawing2D.FillMode.Alternate);
}
所以,你将不得不做一点点,而基本的数学。然后你需要做一个TranslateTransform,RotateTransform,最后是DrawEllispse。之后可能是一个ResetTransform。 – TaW
阅读[RotateTransform](https://msdn.microsoft.com/en-us/library/a0z3f662(v = vs.110).aspx) –