C# 裁剪图像梯形/多边形

时间:2021-05-17 13:56:13

标签: c# image crop

我有一个图像,我想从图像中剪出一个梯形。

我有 8 个这样的不同坐标(8 个值形成一个具有 4 个点的多边形)

pointA(222,222)
pointB(666,234)
pointC(678,235)
pointD(210,220)

我只知道如何用 bitmap.Clone 像这样裁剪图像

var x = pointA.x;
var y = pointA.y;
var height = pointD.y - pointA.y;
var width = pointB.x - pointA.x;
Bitmap image = new Bitmap(imagepath);
var rect = new Rectangle(x, y, wight, height);
var newImage = image.Clone(rect, image.PixelFormat);

这将创建一个直矩形,我想剪掉的子部分的重要部分将消失。

那么,如何从控制台环境中使用 c# 和 .net 框架核心剪出一个梯形?

我想剪出一个梯形,但我只是想出了更好的形式来描述我想要的是多边形。

1 个答案:

答案 0 :(得分:1)

一种方法是使用 Graphics API。它有一个 FillPolygon 方法,它接受一个点列表和一个画笔。要使用源位图,您可以使用 TextureBrush。把它们放在一起,你会得到这样的结果:

    public Bitmap FillPolygon(Bitmap sourceBitmap, PointF[] polygonPoints)
    {
        var targetBitmap = new Bitmap(256, 256);
        using var g = Graphics.FromImage(targetBitmap);
        using var brush = new TextureBrush(sourceBitmap);
        g.FillPolygon(brush, polygonPoints);
        return targetBitmap;
    }

我认为这应该在 Windows 控制台上工作。在历史上,使用某些图形 API 而没有 Windows 会话时会出现一些问题,但我认为这不再是问题。

为了获得最大的兼容性,您始终可以自己对梯形进行三角测量和 rasterize 并复制选定的像素,但这可能需要更多的工作。