C# 如何从WinForm pictureBox中的图像裁剪多边形区域?
如何裁剪带有多边形的图像的一部分?例如,我有6个坐标,我想剪切图像的这一部分C# 如何从WinForm pictureBox中的图像裁剪多边形区域?,c#,image,winforms,crop,C#,Image,Winforms,Crop,如何裁剪带有多边形的图像的一部分?例如,我有6个坐标,我想剪切图像的这一部分 您可以将点的列表制作成多边形,然后制作成图形,然后制作成区域和图形之后。剪辑(区域)您可以制作图形。DrawImage并完成 using System.Drawing.Drawing2D; GraphicsPath gp = new GraphicsPath(); // a Graphicspath gp.AddPolygon(points.ToArray()); // with one Polyg
您可以将
点的列表
制作成多边形,然后制作成图形,然后制作成区域
和图形之后。剪辑(区域)
您可以制作图形。DrawImage
并完成
using System.Drawing.Drawing2D;
GraphicsPath gp = new GraphicsPath(); // a Graphicspath
gp.AddPolygon(points.ToArray()); // with one Polygon
Bitmap bmp1 = new Bitmap(555,555); // ..some new Bitmap
// and some old one..:
using (Bitmap bmp0 = (Bitmap)Bitmap.FromFile("D:\\test_xxx.png"))
using (Graphics G = Graphics.FromImage(bmp1))
{
G.Clip = new Region(gp); // restrict drawing region
G.DrawImage(bmp0, 0, 0); // draw clipped
pictureBox1.Image = bmp1; // show maybe in a PictureBox
}
gp.Dispose();
请注意,您可以在任何位置自由选择DrawImage
位置,包括原点左侧和顶部的负片区域
还要注意,对于“真实”裁剪,一些(至少4个)点应该命中目标位图的边框或者可以使用GraphicsPath
获取其边界框:
RectangleF rect = gp.GetBounds();
Bitmap bmp1 = new Bitmap((int)Math.Round(rect.Width, 0),
(int)Math.Round(rect.Height,0));
..
但矩形只有4条边。这不是一个问题吗?边界框不是用来裁剪的,而是用来确定目标位图大小的最小目标矩形。对于裁剪,需要使用graphicspath&clip。使用graphicspath的边界是一种方便的方法,而不是分析所有这些点。一开始不起作用-必须将剪辑坐标弄乱,使其以零为基础