C# 获取旋转图像上的单击坐标

C# 获取旋转图像上的单击坐标,c#,image,win2d,C#,Image,Win2d,我对矩阵数学没有什么好的概念,所以我发现的其他问题让我很困惑,我想知道如何使用Win2D提供的项目来解决这个问题 我正在创建一个像素艺术编辑器。为了简单起见,我有一个图像,2x2像素。在编辑器中,此图像将根据用户交互进行缩放和旋转,以便用户可以对其进行编辑。为了使它围绕中心旋转,我还应用了一个平移。以下是我的代码,用于将2x2图像转换为旋转的缩放图像,并在屏幕上渲染: Matrix3x2 rotateMatrix = Matrix3x2.CreateRotation((float)(Rotati

我对矩阵数学没有什么好的概念,所以我发现的其他问题让我很困惑,我想知道如何使用Win2D提供的项目来解决这个问题

我正在创建一个像素艺术编辑器。为了简单起见,我有一个图像,2x2像素。在编辑器中,此图像将根据用户交互进行缩放和旋转,以便用户可以对其进行编辑。为了使它围绕中心旋转,我还应用了一个平移。以下是我的代码,用于将2x2图像转换为旋转的缩放图像,并在屏幕上渲染:

Matrix3x2 rotateMatrix = Matrix3x2.CreateRotation((float)(Rotation * Math.PI / 180));
Matrix3x2 scaleMatrix = Matrix3x2.CreateScale(Scale);
Matrix3x2 translationMatrix = Matrix3x2.CreateTranslation(-(float)layer.Height / 2, -(float)layer.Width / 2);
Matrix3x2 transformation = translationMatrix * rotateMatrix * scaleMatrix;
这将正确地在屏幕上绘制我的图像。为了允许用户在编辑器周围平移,还有两个额外的翻译发生在渲染图像上,
OffsetX
OffsetY
,如下所示:

ICanvasImage image = new Transform2DEffect
{
    Source = source,
    TransformMatrix = transformation,
    InterpolationMode = CanvasImageInterpolation.NearestNeighbor
};
ctx.DrawImage(image, new Vector2(OffsetX, OffsetY));
因此,旋转的缩放图像绘制在中心
(OffsetX,OffsetY)
。一切正常


现在我需要将屏幕空间的点击转换为图像空间的点击。例如,如果用户单击(300,400)处的画布,并且图像旋转、缩放和平移的方式使(0,1)处的像素在视觉上位于光标下方,则我需要能够将(300,400)转换为(0,1)。

使用变换矩阵上的
Invert
方法获得逆变换。然后将其应用于单击的坐标减号(OffsetX,OffsetY)。@RogerN是一个矩阵noob,我如何将坐标“应用”到矩阵?newVector=Vector2。变换(oldVector,matrix)@RogerN太棒了!请写一个答案,以便我可以接受:)