c# - ¿Cómo recortar un área poligonal de una imagen en un WinForm pictureBox?
Puede convertir la
List
de
Points
en un Polígono, luego en una
GraphicsPath
y luego en una
Region
y, después de
Graphics.Clip(Region)
, puede
Graphics.DrawImage
y listo.
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();
Tenga en cuenta que puede elegir
DrawImage
ubicación de
DrawImage
en cualquier lugar, incluso en el área negativa a la izquierda y la parte superior del origen.
También tenga en cuenta que para el recorte ''real'', algunos (al menos 4) de sus puntos deben alcanzar los bordes del
Bitmap
de
Bitmap
objetivo.
- O puede usar
GraphicsPath
para obtener su cuadro delimitador:
RectangleF rect = gp.GetBounds();
Bitmap bmp1 = new Bitmap((int)Math.Round(rect.Width, 0),
(int)Math.Round(rect.Height,0));
..