有没有办法通过定义的矢量(从 DXF/DWG 或 SVG 文件获取的点集)剪切/裁剪某些图像(BMP/JPG 等)?
目前,我从 SVG 文件中获取矢量点并像这样绘制它们:
var svgDoc = SvgDocument.Open(@"C:\Users\Desktop\Style 4.svg");
PointF[] pointsVector = svgDoc.Path.PathPoints;
// Draw closed curve to screen.
e.Graphics.DrawClosedCurve(greenPen, pointsVector);
我需要用一些图像填充这个向量。实际上,我需要将图像的中心放在该向量区域的中心。
如果您想按照标题和屏幕截图的建议裁剪形状,那么您可以按照以下步骤操作。
首先,为曲线创建一个
GraphicsPath
,并将其设置为图形的剪切区域,用于将原始图像绘制到相同大小的新图像上。
其次,
GraphicsPath.GetBounds
方法返回原始图像上形状(源矩形)的边界矩形。使用它的大小创建结果图像并从中创建一个 Graphics
对象来绘制曲线图像。
internal static Bitmap CropCurve(Image srcImage, PointF[] points)
{
using (var curveImage = new Bitmap(srcImage.Width, srcImage.Height))
using (var gp = new GraphicsPath())
{
using (var g = Graphics.FromImage(curveImage))
{
gp.AddClosedCurve(points);
gp.Flatten();
g.SetClip(gp);
g.DrawImage(srcImage, Point.Empty);
}
Rectangle srcRect = Rectangle.Round(gp.GetBounds());
var resultImage = new Bitmap(srcRect.Width, srcRect.Height);
using (var g = Graphics.FromImage(resultImage))
g.DrawImage(curveImage, 0, 0, srcRect, GraphicsUnit.Pixel);
return resultImage;
}
}