繁体   English   中英

如何在 c# 中用多边形裁剪图像

[英]how to crop image with polygon in c#

我正在制作一个标签工具。

目标:通过在图片上绘制多边形,将多边形内部的图像导出到外部。

例子![例子 提炼在此处输入图像描述

这是我在我的程序中画的。

我的程序多边形

但我不知道如何提取这个区域。 我想知道如何提取这个区域。 我已将上图的顶点保存在 object 中。 但我不知道如何通过这些顶点从图像中提取数据

=========================================

所以我找到了这个。 https://www.codeproject.com/Articles/703519/Cropping-Particular-Region-In-Image-Using-Csharp

但这行不通

无法将 Bitmap 转换为 IplImage

出于同样的原因,它不起作用。 在帖子中,我打算使用opencvsharp 4.x,但是我现在正在修复的程序是.netframework 3.5,所以它不支持opencvsharp 4.x。 我应该怎么办?

==============================

我参考答案做了一个 function ,但它不起作用......我想知道为什么。

 void CropImage(Bitmap bitmap, Point[] points)
 {
            Rectangle rect = CalculateMinBox(points, bitmap);
            TextureBrush textureBrush = new TextureBrush(bitmap);
            Bitmap bmp1 = new Bitmap(rect.Width, rect.Height);

            Graphics g = Graphics.FromImage(bmp1);
            
            g.FillPolygon(textureBrush, points);

            Bitmap myBitmap = new Bitmap(rect.Width, rect.Height, g);
            pictureBox1.Image = myBitmap;

            string ima_path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

            bmp1.Save(ima_path + "\\Image.png", ImageFormat.Png);
          
}

您将创建一个新的 bitmap,至少与多边形的边界框一样大。 从这个新的 bitmap 创建一个图形object。 然后您可以将多边形绘制到这个 bitmap,使用原始图像作为纹理画笔 请注意,您可能需要应用变换矩阵将完整图像坐标转换为裁剪后的图像坐标。

请注意,您似乎有放射图像。 这些通常是 16 位图像,因此需要将它们转换为 8 位 mono 或 24 位 RGB 才能使用。 如果您可以访问源代码,这应该已经在绘图代码中完成。 或者你可以自己做

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM