如何从 WinForm pictureBox 中的图像裁剪多边形区域?
How to crop a polygonal area from an image in a WinForm pictureBox?
如何使用多边形裁剪图像的一部分?比如我有6个坐标,我想剪掉这部分图像。
你可以把Points
的List
变成多边形,然后变成GraphicsPath
,再变成Region
,在Graphics.Clip(Region)
之后你可以Graphics.DrawImage
完成了..:[=21=]
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
位置,包括原点左侧和顶部的负区域..
另请注意,对于 'real' 裁剪,您的一些(至少 4 个)点应该达到目标 Bitmap
的边界! - 或者你可以使用 GraphicsPath
来获取它的边界框:
RectangleF rect = gp.GetBounds();
Bitmap bmp1 = new Bitmap((int)Math.Round(rect.Width, 0),
(int)Math.Round(rect.Height,0));
..
如何使用多边形裁剪图像的一部分?比如我有6个坐标,我想剪掉这部分图像。
你可以把Points
的List
变成多边形,然后变成GraphicsPath
,再变成Region
,在Graphics.Clip(Region)
之后你可以Graphics.DrawImage
完成了..:[=21=]
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
位置,包括原点左侧和顶部的负区域..
另请注意,对于 'real' 裁剪,您的一些(至少 4 个)点应该达到目标 Bitmap
的边界! - 或者你可以使用 GraphicsPath
来获取它的边界框:
RectangleF rect = gp.GetBounds();
Bitmap bmp1 = new Bitmap((int)Math.Round(rect.Width, 0),
(int)Math.Round(rect.Height,0));
..