如何在C#中画半透明的圆?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C#中画半透明的圆?相关的知识,希望对你有一定的参考价值。

如题,感谢!

参考技术A 给你代码你看一下效果:
//在Winform窗体上放一个按钮,以下为按钮单击事件代码
private void button1_Click(object sender, EventArgs e)

System.Drawing.Graphics g = this.CreateGraphics();
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

System.Drawing.Color Mycolor = System.Drawing.Color.FromArgb(128, Color.Yellow);//说明:1-(128/255)=1-0.5=0.5 透明度为0.5,即50%
System.Drawing.SolidBrush sb1 = new System.Drawing.SolidBrush(Mycolor);

g.FillRectangle(Brushes.Tomato, 0, 50,250 ,50); //给窗体填上颜色以增强比较效果
g.FillEllipse(sb1, 20, 20, 100, 100); //半透明效果
g.FillEllipse(Brushes.Yellow, 120, 20, 100, 100); //实色效果

sb1.Dispose();

本回答被提问者采纳
参考技术B 用PEN对象

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

【中文标题】如何在c#中用多边形裁剪图像【英文标题】:how to crop image with polygon in c# 【发布时间】:2022-01-12 06:18:19 【问题描述】:

我正在制作标签工具。

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

示例 提炼

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

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

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

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

但它不起作用

Can't convert Bitmap to IplImage

出于同样的原因,它不起作用。 在帖子中,我打算使用opencvsharp 4.x,但是我现在正在修复的程序是.netframework 3.5,所以它不支持opencvsharp 4.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);
        

提取图像

原创

如果使用小多边形,则根本没有输出。

您会注意到两张图片略有不同。

在我看来,中心点被切割和提取的部分是不同的。不知道我的想法对不对。


【问题讨论】:

我希望你的答案是here。 @Llama 这不是方形切割吗?确定最小矩形的函数已被使用。 See this comment。没有多边形位图这样的东西,所以您需要将它绘制到方形画布上,对吧?但这并不意味着剪裁形状不是多边形。 @Llama 很抱歉,我无法提供准确的信息。我编辑了帖子 我认为您需要详细说明您想要像素的确切格式。我假设您想要在Bitmap 上裁剪区域,但从您的编辑看来并非如此。当你想要一些超出正常范围的东西时,你需要详细解释你想要什么。 【参考方案1】:

您将创建一个新位图,至少与多边形的边界框一样大。 Create a graphics 这个新位图中的对象。然后你可以draw the polygon 到这个位图,使用原始图像作为a texture brush。请注意,您可能需要应用 transform 矩阵才能将完整图像坐标转换为裁剪后的图像坐标。

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

【讨论】:

以上是关于如何在C#中画半透明的圆?的主要内容,如果未能解决你的问题,请参考以下文章

C# Windows 窗体半透明

ps怎么做中间透明的边框

如何让图片以半透明的效果显示在所有程序或窗口的最上层?

如何在透明窗口中绘制透明 DirectX 内容?

为啥黑色半透明 UIToolbar 的顶部与黑色半透明 UISearchBar 不同,如何使它们看起来相同?

如何在图像上制作半透明颜色?