如何在 C# 中使用多边形裁剪图像
how to crop image with polygon in c#
我正在制作一个标签工具。
目标:通过在图片上画一个多边形,把多边形里面的图片导出到外面。
例子
提炼
这是我在程序里画的
但是我不知道如何提取这个区域。我想知道如何提取这个区域。
我已经将上图的顶点保存在一个对象中。但是我不知道如何通过这些顶点从图像中提取数据
========================================
所以我找到了这个。
https://www.codeproject.com/Articles/703519/Cropping-Particular-Region-In-Image-Using-Csharp
但是没用
Can't convert Bitmap to IplImage
出于同样的原因,它不起作用。
在post中,我打算使用opencvsharp4.x,但是我现在修复的程序是.netframework 3.5,所以不支持opencvsharp4.x。
我该怎么办?
==============================
我做了一个参考答案的函数,但是它不起作用...
我想知道为什么。
void CropImage(Bitmap bitmap, Point[] points)
{
Rectangle rect = PaddingImage(points, bitmap);
TextureBrush textureBrush = new TextureBrush(bitmap);
Bitmap bmp1 = new Bitmap(rect.Width, rect.Height);
using (Graphics g = Graphics.FromImage(bmp1))
{
g.FillPolygon(textureBrush, points);
}
string ima_path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
bmp1.Save(ima_path + "\Image.png", ImageFormat.Png);
}
提取图片
原创
如果使用小多边形,则根本没有输出。
您会注意到两张图片略有不同。
在我看来,切割和提取中心点的部分是不同的。不知道我想的对不对
您将创建一个新的位图,至少与多边形的边界框一样大。 Create a graphics object from this new bitmap. You can then draw the polygon to this bitmap, using the original image as a texture brush. Note that you might need to apply transform 从完整图像坐标转换为裁剪图像坐标的矩阵。
请注意,您似乎有放射影像。这些通常是 16 位图像,因此在使用之前需要将它们转换为 8 位单声道或 24 位 RGB。如果您有权访问源代码,这应该已经在绘图代码中完成。或者 you can do it yourself.
我正在制作一个标签工具。
目标:通过在图片上画一个多边形,把多边形里面的图片导出到外面。
例子
这是我在程序里画的
但是我不知道如何提取这个区域。我想知道如何提取这个区域。 我已经将上图的顶点保存在一个对象中。但是我不知道如何通过这些顶点从图像中提取数据
========================================
所以我找到了这个。 https://www.codeproject.com/Articles/703519/Cropping-Particular-Region-In-Image-Using-Csharp
但是没用
Can't convert Bitmap to IplImage
出于同样的原因,它不起作用。 在post中,我打算使用opencvsharp4.x,但是我现在修复的程序是.netframework 3.5,所以不支持opencvsharp4.x。 我该怎么办?
==============================
我做了一个参考答案的函数,但是它不起作用... 我想知道为什么。
void CropImage(Bitmap bitmap, Point[] points)
{
Rectangle rect = PaddingImage(points, bitmap);
TextureBrush textureBrush = new TextureBrush(bitmap);
Bitmap bmp1 = new Bitmap(rect.Width, rect.Height);
using (Graphics g = Graphics.FromImage(bmp1))
{
g.FillPolygon(textureBrush, points);
}
string ima_path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
bmp1.Save(ima_path + "\Image.png", ImageFormat.Png);
}
提取图片
原创
如果使用小多边形,则根本没有输出。
您会注意到两张图片略有不同。
在我看来,切割和提取中心点的部分是不同的。不知道我想的对不对
您将创建一个新的位图,至少与多边形的边界框一样大。 Create a graphics object from this new bitmap. You can then draw the polygon to this bitmap, using the original image as a texture brush. Note that you might need to apply transform 从完整图像坐标转换为裁剪图像坐标的矩阵。
请注意,您似乎有放射影像。这些通常是 16 位图像,因此在使用之前需要将它们转换为 8 位单声道或 24 位 RGB。如果您有权访问源代码,这应该已经在绘图代码中完成。或者 you can do it yourself.