我尝试使用 SkiaSharp
将照片旋转到 90 度,代码如下:
public SKBitmap Rotate()
{
var bitmap = SKBitmap.Decode("test.jpg");
using (var surface = new SKCanvas(bitmap))
{
surface.RotateDegrees(90, bitmap.Width / 2, bitmap.Height / 2);
surface.DrawBitmap(bitmap.Copy(), 0, 0);
}
return bitmap;
}
但是当我将位图保存到 JPEG
文件时,图像的顶部和底部都有边距。
原图:/image/7eY2o.jpg 。 旋转图像:/image/IWZTr.jpg .
我做错了什么?
最佳答案
您可能想做这样的事情:
public static SKBitmap Rotate()
{
using (var bitmap = SKBitmap.Decode("test.jpg"))
{
var rotated = new SKBitmap(bitmap.Height, bitmap.Width);
using (var surface = new SKCanvas(rotated))
{
surface.Translate(rotated.Width, 0);
surface.RotateDegrees(90);
surface.DrawBitmap(bitmap, 0, 0);
}
return rotated;
}
}
造成这种情况的原因(或者您的原因没有按预期工作)是您正在自行旋转位图。您基本上已经拍摄了一张图像,然后制作了一个副本并将其绘制到第一张图像上。因此,您仍然拥有下图中的边距。
我所做的是创建一个新的位图,然后将解码后的位图绘制到其上。
第二个“问题”是您正在旋转图像,但没有更改 Canvas 尺寸。如果位图为 50x100,然后旋转 90 度,则位图现在为 100x50。由于创建位图后实际上无法更改其尺寸,因此必须创建一个新位图。您可以在输出图像中看到这一点,因为它实际上被剪掉了一点。
希望这有帮助。
关于c# - 使用 SkiaSharp 旋转照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45077047/