gpt4 book ai didi

c# - 使用 SkiaSharp 旋转照片

转载 作者:行者123 更新时间:2023-12-02 01:24:39 26 4
gpt4 key购买 nike

我尝试使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com