提问者:小点点

如何旋转图像


我正在尝试旋转图像,但无法得到预期的结果。 我想旋转图像为90度。 在执行我的代码后,我得到了意想不到的结果。 下面是我的代码:

public async Task Rotate(string path, Rect rect, float degrees)
    {
        int h = (int)Math.Sqrt(rect.Width * rect.Width + rect.Height * rect.Height);

        CanvasDevice device = CanvasDevice.GetSharedDevice();
        CanvasRenderTarget webCardImage = null;
        CanvasBitmap bitmap = null;
        var logicalDpi = DisplayInformation.GetForCurrentView().LogicalDpi;
        Vector2 endpoint = new Vector2((float)rect.Width / 2, (float)rect.Height / 2);

        try
        {
            webCardImage = new CanvasRenderTarget(device, h, h, logicalDpi);
            using (var ds = webCardImage.CreateDrawingSession())
            {
                ds.Clear(Colors.Transparent);

                using (FileStream imageStream = new FileStream(path, FileMode.Open))
                {
                    IRandomAccessStream fileStream = imageStream.AsRandomAccessStream();
                    bitmap = await CanvasBitmap.LoadAsync(device, fileStream);
                }

                ICanvasImage image = new Transform2DEffect
                {
                    Source = bitmap,
                    TransformMatrix = Matrix3x2.CreateRotation(degrees, endpoint),
                };
                var sourceRect = image.GetBounds(ds);
                ds.DrawImage(image, new Rect(rect.X, rect.Y, rect.Width, rect.Height), sourceRect, 1, CanvasImageInterpolation.HighQualityCubic);

            }
        }
        catch (Exception ex)
        {

        }

        //Convert to Image
    }

我得代码生成得图像:


共1个答案

匿名用户

我不知道您的代码是做什么的,但这段代码应该能完成这个任务

BitmapImage bmpImage = new BitmapImage();
bmpImage.BeginInit();
bmpImage.UriSource = new Uri(@"C:\Images\Dock.jpg", UriKind.RelativeOrAbsolute);
bmpImage.EndInit();
TransformedBitmap transformBmp = new TransformedBitmap();
transformBmp.BeginInit();
transformBmp.Source = bmpImage;
RotateTransform transform = new RotateTransform(90);
transformBmp.Transform = transform;
transformBmp.EndInit();

这是针对WPF应用程序的,对于Windows窗体应用程序,您可以在这里看到:https://docs.microsoft.com/it-it/dotnet/api/system.drawing.image.rotateflip?view=NetFramework-4.5

希望这有帮助