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 ステートメントによって決定されます。
画像を元の座標に戻そうとすると、右側の画像から、ソースの四角形がターゲットの四角形と同じサイズまたは形状ではないため、画像が歪んで縮小されていることがわかります。
ジオメトリのスキルが高ければ、新しい四角形の境界を確実に計算して、キャンバスの正しい位置に適用できます。しかし悲しいかな、私にとっては高校数学から何年も経ちました。1回限りの計算では、それを理解できると確信していますが、ソース画像の形状が変わる可能性がある場合はそうではありません.