如何通过自定义矢量剪切/裁剪图像

问题描述 投票:0回答:1

有没有办法通过定义的矢量(从 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);

我需要用一些图像填充这个向量。实际上,我需要将图像的中心放在该向量区域的中心。

enter image description here

c# image vector crop
1个回答
0
投票

如果您想按照标题和屏幕截图的建议裁剪形状,那么您可以按照以下步骤操作。

首先,为曲线创建一个

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;
    }            
}

SO79197992

© www.soinside.com 2019 - 2024. All rights reserved.