首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# RotateTransform -更改中心的问题

C# RotateTransform -更改中心的问题
EN

Stack Overflow用户
提问于 2016-03-19 23:42:50
回答 1查看 1.5K关注 0票数 1

在我的C#程序中,我使用RotateTransform方法旋转我想要绘制的图片。这已经起作用了,但我找不到如何改变图片旋转的中心点。默认情况下,它是我的图片框的左下角,不幸的是,我需要在(760,480)像素上围绕另一个点旋转。

我到处都找过了,只找到了这个CenterX属性。CenterX msdn

无论如何,我似乎没有在Visual Studio中找到这个属性,所以我想我这样做是错误的。

我当前的代码如下所示:

代码语言:javascript
复制
*e.Graphics.RotateTransform(angle);
e.Graphics.DrawLine(Pens.Black, physicObj.lineStartingPoint, physicObj.lineEndingPoint);
e.Graphics.FillEllipse(new SolidBrush(Color.Red), new Rectangle(physicObj.leftCornerCircle, physicObj.circleSize));
e.Graphics.FillRectangle(new SolidBrush(Color.Blue), new Rectangle(physicObj.leftCornerRectangle, physicObj.rectangleSize));*

此零件工作正常,但使用了错误的中心点进行旋转。我试着用

代码语言:javascript
复制
e.Graphics.RotateTransform.CenterX = ... ;

但是在e.Graphics.RotateTransform中似乎没有可访问的CenterX。Visual Studio在RotateTransform下面显示一条红线,说明它是一个方法,这在给定的上下文中是无效的。我不知道设置这个属性的方法,也没有找到任何这样做的编码示例,根据微软提供的信息(在链接中),我认为这是一种方法。

希望有人能解释一下我需要做些什么来改变这个中心点。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-03-20 03:00:29

这很简单:

转换到center

  • rotate

  • translate back

代码语言:javascript
复制
float centerX = 760;
float centerY = 480;
e.Graphics.TranslateTransform(-centerX, -centerY);
e.Graphics.RotateTransform(angle);
e.Graphics.TranslateTransform(centerX, centerY);

本质上,您创建3个矩阵并将它们相乘以获得结果-单个变换矩阵,这是2D和3D变换的基础。

另外,为了方便起见,您可以创建一个扩展方法:

代码语言:javascript
复制
public static class GraphicsExtensions
{
  public static void TranslateTransform(this Graphics g, float x, float y, float angle)
  {
    g.TranslateTransform(-x, -y);
    g.RotateTransform(angle);
    g.TranslateTransform(x, y);
  }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36103705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档