Я думаю, проблема в том, что вы устанавливаете угол своего изображения вот так Missle_ROT.TransformMatrix = Matrix3x2.CreateRotation((float)radians);
.
Система координат такая:
Поэтому, когда вы использовали метод Matrix3x2.CreateRotation (Single) чтобы повернуть изображение, оно вращается с центральной точкой по умолчанию, которая также является левой верхней точкой этого изображения. В качестве решения вы можете использовать Matrix3x2.CreateRotation Method (Single, Vector2), чтобы указать центр вращения, и для вашего сценария этот центр должен быть центром вашего изображения. Вы можете пройти такой тест:
var image = await CanvasBitmap.LoadAsync(sender, "Assets/solidimg.png");
var transform = new Transform2DEffect() { Source = image };
//draw image's left-top point (0,0) of the image
args.DrawingSession.DrawCircle(new Vector2(200, 200), 10, Colors.Black);
//draw image with no trasform effect
transform.TransformMatrix = Matrix3x2.CreateRotation(0);
args.DrawingSession.DrawImage(transform, 200, 200);
//draw image with trasform effect and center on the (0,0) point
transform.TransformMatrix = Matrix3x2.CreateRotation((float)(20 * Math.PI) / 180);
args.DrawingSession.DrawImage(transform, 200, 200);
//draw image's center point of the image
args.DrawingSession.DrawCircle(new Vector2((float)(200 + image.Size.Width / 2), (float)(200 + image.Size.Height / 2)), 10, Colors.Red);
//draw image with trasform effect and center on the image's center
transform.TransformMatrix = Matrix3x2.CreateRotation((float)(20 * Math.PI) / 180, new Vector2((float)image.Size.Width / 2, (float)image.Size.Height / 2));
args.DrawingSession.DrawImage(transform, 200, 200);
И для вашего последнего кода для рисования изображения args.DrawingSession.DrawImage(Missle_ROT, Convert.ToSingle(pointX), Convert.ToSingle(pointY));
он по-прежнему рисует изображение из точки (0,0), вы также должны вычислить центральную точку изображения до «pointX» и «pointY» следующим образом:
args.DrawingSession.DrawImage(Missle_ROT, Convert.ToSingle(pointX- (float)image.Size.Width / 2), Convert.ToSingle(pointY- (float)image.Size.Height / 2));
person
Grace Feng
schedule
19.07.2016