我有一个图像,我想从图像中剪出一个梯形。
我有 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 框架核心剪出一个梯形?
我想剪出一个梯形,但我只是想出了更好的形式来描述我想要的是多边形。
答案 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 并复制选定的像素,但这可能需要更多的工作。