gpt4 book ai didi

C# RotateTransform - 问题改变中心

转载 作者:太空宇宙 更新时间:2023-11-03 21:13:25 25 4
gpt4 key购买 nike

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

我到处搜索,只发现了这个 CenterX 属性。 CenterX msdn

无论如何,我似乎没有用 Visual Studio 找到这个属性,所以我想我做错了。

我当前的代码如下所示:

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

这部分工作正常,但使用了错误的中心点来旋转。我试过用

e.Graphics.RotateTransform.CenterX = ... ;

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

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

最佳答案

很简单:
1.翻译到中心
2.旋转
3. 翻译回去

float centerX = 760;
float centerY = 480;
e.Graphics.TranslateTransform(-centerX, -centerY);
e.Graphics.RotateTransform(angle);
e.Graphics.TranslateTransform(centerX, centerY);

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


附言您可以为方便起见创建一个扩展方法:

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

关于C# RotateTransform - 问题改变中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36103705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com