我正在寻找一种使用 Win2D 围绕其中心点旋转矩形图像(或任何图像)的方法。
此片段来自 Win2D 画布的 OnDraw 方法:
var redBitMap = _images[1];
var yellowBitMap = _images[2];
var rect = new Rect(topLeft.X, topLeft.Y, _width, _height);
_drawingSession.DrawImage(redBitMap, rect);
ICanvasImage image = new Transform2DEffect
{
Source = yellowBitMap,
TransformMatrix = Matrix3x2.CreateRotation((float)(60 * Math.PI / 180)),
};
var sourceRect = image.GetBounds(_drawingSession);
_drawingSession.DrawImage(image, rect), sourceRect, 1, CanvasImageInterpolation.HighQualityCubic);
这种方法使我的图像旋转了 60 度,但图像最终被绘制在错误的坐标处,倾斜并且比预期的图像小。
有趣的是,如果我将矩形的大小更改为正方形(使高度与宽度相同),则图像不再倾斜。
因此,黄色矩形代表我想要(在中心)旋转 60 度的图像。固定在左上角的红色矩形是我旋转它时发生的事情。大蓝色框是由 image.GetBounds 语句确定的新矩形。
当我尝试将图像绘制回原始坐标时,您可以从右侧图像中看到它导致图像倾斜和缩小,因为源矩形不再与目标矩形具有相同的大小或形状。
如果我的几何技能更好,我肯定可以计算出新矩形的边界并将它们应用到画布上的正确位置。但唉,对我来说,距离高中数学已经太多年了。在一次性计算中,我确信我可以弄清楚 - 但不是在源图像的形状可能发生变化时。