C# 使用六个Labors.ImageSharp在C中剪切和移动图片#

C# 使用六个Labors.ImageSharp在C中剪切和移动图片#,c#,image-processing,.net-core,imagesharp,C#,Image Processing,.net Core,Imagesharp,我正在使用以编程方式裁剪C#.NET Core 3.1中的图像。您可以在下面找到一个工作代码段 public static void ResizeImage(Image<Rgba32> input, Size dimensions) { var options = new ResizeOptions { Size = dimensions, Mode = ResizeMode.Crop }; input.Mutate(x =&

我正在使用以编程方式裁剪C#.NET Core 3.1中的图像。您可以在下面找到一个工作代码段

public static void ResizeImage(Image<Rgba32> input, Size dimensions)
{
    var options = new ResizeOptions
    {
      Size = dimensions,
      Mode = ResizeMode.Crop
    };

    input.Mutate(x => x.Resize(options));
}
publicstaticvoid ResizeImage(图像输入,大小)
{
var options=新的调整大小选项
{
尺寸=尺寸,
模式=ResizeMode.Crop
};
input.Mutate(x=>x.Resize(选项));
}
它工作得非常好,但是我想允许用户根据一对给定的坐标裁剪图像。也就是说,裁剪将从这些坐标开始,而不是从原点(0,0)开始。是否可以使用此工具执行此操作

到目前为止,我只能从图像角开始裁剪。我希望能够从任何位置开始裁剪。例如,对于下图:

用户希望通过在x轴和y轴上移动裁剪来裁剪图片的中心部分。最终结果将是:


请注意,在给定的示例中,我已经切掉了图像的各个角落。是否可以使用Imagesharp执行此操作

使用
Rectangle.FromLTRB

using (var inputStream = File.OpenRead(Path.Combine(inPath, "john-doe.png")))
using (var image = Image.Load<Rgba32>(inputStream))
{
    // Generate some rough coordinates from the source.
    // We'll take 25% off each edge.
    var size = image.Size();
    var l = size.Width / 4;
    var t = size.Height / 4;
    var r = 3 * (size.Width / 4);
    var b = 3 * (size.Height / 4);

    image.Mutate(x => x.Crop(Rectangle.FromLTRB(l, t, r, b)));

    image.Save(Path.Combine(outPath, "john-doe-cropped.png"));
}
使用(var inputStream=File.OpenRead(Path.Combine(inPath,“john doe.png”))
使用(var image=image.Load(inputStream))
{
//从源代码生成一些粗略的坐标。
//我们将每边减价25%。
var size=image.size();
var l=尺寸、宽度/4;
var t=尺寸、高度/4;
var r=3*(尺寸宽度/4);
变量b=3*(尺寸高度/4);
Mutate(x=>x.Crop(矩形.FromLTRB(l,t,r,b));
image.Save(Path.Combine(outPath,“johndoe crapped.png”);
}
尽管为我指明了正确的方向,而且在我们之前的简短对话中,解决问题的是以下代码:

private static void ResizeImage(Image<Rgba32> input, int width, int height, int x, int y)
    {
        input.Mutate(img => img.Crop(Rectangle.FromLTRB(x, y, width+x, height+y)));
    }
private static void ResizeImage(图像输入,整数宽度,整数高度,整数x,整数y)
{
input.Mutate(img=>img.Crop(Rectangle.FromLTRB(x,y,width+x,height+y));
}

在这段代码中,我在
x
y
轴上移动原始图像,并按给定的
宽度
高度

剪切图像。您发布了与我的答案相同的关键代码,并将自己标记为答案。糟糕的形式。@JamesSouth你的答案是从给定坐标裁剪图像吗?是的。关键是这一条<代码>图像.Mutate(x=>x.Crop(矩形.FromLTRB(l,t,r,b))是的,但是你不认为应该在批准的答案中突出显示
l
r
之间的相关性,以及
t
b
之间的相关性吗?我不知道API,发现这一点并不明显。实际上我不理解你在回答中所做的转换,提供的代码是一个完整的示例。参数
l
t
r
b
相互关联,它们与方法的参数名称匹配。内联变量只是演示如何计算这些变量的百分比。我知道API,因为我写了API。