System.Drawing.Graphics

时间:2011-03-14 11:57:38

标签: c# winforms graphics

我有一个与给定中心旋转椭圆有关的问题, 假设我有一个椭圆,应该是用用户给出的点旋转椭圆,椭圆应该绕给定点旋转。 我试过了

g.RotateTransform(…)
g.TranslateTransform(…)

代码:

Graphics g = this.GetGraphics(); 
g.RotateTransform((float)degreeArg); //degree to rotate object 
g.DrawEllipse(Pens.Red, 300, 300, 100, 200);

这样可以正常工作,但我们怎样才能让我们的外心旋转椭圆....

怎么可能请任何好友建议...... 感谢......

2 个答案:

答案 0 :(得分:4)

RotateTransform始终围绕原点旋转。因此,您需要先将旋转中心转换为原点,然后旋转,然后将其转换回来。

这样的事情:

Graphics g = this.GetGraphics(); 
g.TranslateTransform(300,300);
g.RotateTransform((float)degreeArg); //degree to rotate object 
g.TranslateTransform(-300,-300);
g.DrawEllipse(Pens.Red, 300, 300, 100, 200);

答案 1 :(得分:3)

//center of the rotation
PointF center = new PointF(...);
//angle in degrees
float angle = 45.0f;
//use a rotation matrix
using (Matrix rotate = new Matrix())
{
    //used to restore g.Transform previous state
    GraphicsContainer container = g.BeginContainer();

    //create the rotation matrix
    rotate.RotateAt(angle, center);
    //add it to g.Transform
    g.Transform = rotate;

    //draw what you want
    ...

    //restore g.Transform state
    g.EndContainer(container);
}