我正在尝试旋转图像,但无法得到预期的结果。 我想旋转图像为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
}
我得代码生成得图像:
我不知道您的代码是做什么的,但这段代码应该能完成这个任务
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
希望这有帮助