【问题标题】:System.Drawing.GraphicsSystem.Drawing.Graphics
【发布时间】:2011-03-14 11:57:37
【问题描述】:

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

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

代码:

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

这很好用,但我们怎样才能让我们的中心旋转椭圆......

这怎么可能请任何朋友建议...... 谢谢……。

【问题讨论】:

  • 向我们展示您目前拥有的代码。
  • 图形 g = this.GetGraphics(); g.RotateTransform((float)degreeArg); //旋转对象的度数 g.DrawEllipse(Pens.Red, 300, 300, 100, 200);这很好用,但我们怎样才能让我们的中心旋转椭圆......
  • 您应该编辑您的问题以包含代码,而不是将其作为评论发布。这次已经为你完成了。
  • 谢谢,下次我会记住您的评论.....

标签: c# winforms graphics


【解决方案1】:

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);

【讨论】:

  • 现在我找到了解决方案,解决方案是 //center of the rotation PointF center = new PointF(...); //以度为单位的角度 float angle = 45.0f; //使用旋转矩阵 using (Matrix rotate = new Matrix()) { //用于恢复 g.Transform 之前的状态 GraphicsContainer container = g.BeginContainer(); //创建旋转矩阵 rotate.RotateAt(angle, center); //将它添加到 g.Transform g.Transform = rotate; //画你想要的... //恢复 g.Transform 状态 g.EndContainer(container); }
  • @pritesh,我有向后翻译转换的顺序 - 请参阅我的编辑
【解决方案2】:
//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);
}

【讨论】:

    猜你喜欢
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2016-09-01
    相关资源
    最近更新 更多