在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) –