c# GDI和winforms中的径向渐变画笔效果

Posted

技术标签:

【中文标题】c# GDI和winforms中的径向渐变画笔效果【英文标题】:c# radial gradient brush effect in GDI and winforms 【发布时间】:2011-03-31 23:52:46 【问题描述】:

我创建了一个 c# windows 应用程序并编写了 75% 的代码。该程序允许用户创建流程图,并根据其状态对流程图形状进行着色。我希望它们变成 3d 按钮,例如来自网站 Webdesign.org 的

我不想为每个按钮创建一个 PNG,而是想在 C# 中使用画笔或其他技术创建它们,例如:

// Create solid brush.
SolidBrush blueBrush = new SolidBrush(Color.Blue);
// Create points that define polygon.
PointF point1 = new PointF(50.0F, 50.0F);
PointF point2 = new PointF(100.0F, 25.0F);
PointF point3 = new PointF(200.0F, 5.0F);
PointF point4 = new PointF(250.0F, 50.0F);
PointF point5 = new PointF(300.0F, 100.0F);
PointF point6 = new PointF(350.0F, 200.0F);
PointF point7 = new PointF(250.0F, 250.0F);
PointF[] curvePoints = point1, point2, point3, point4, point5, point6, point7;
// Define fill mode.
FillMode newFillMode = FillMode.Winding;
// Fill polygon to screen.
e.Graphics.FillPolygon(blueBrush, curvePoints, newFillMode);

我知道 WPF 有径向渐变,但我可以在 CGI 中做一些类似的事情吗?

【问题讨论】:

我假设您的意思是“GDI+”而不是“CGI”? 【参考方案1】:

与WPF 不同,GDI+/WinForms 没有RadialGradientBrush。但是,您可以使用PathGradientBrush 实现相同的效果。

这是一个例子:

Rectangle bounds = ...;
using (var ellipsePath = new GraphicsPath())

    ellipsePath.AddEllipse(bounds);
    using (var brush = new PathGradientBrush(ellipsePath))
    
        brush.CenterPoint = new PointF(bounds.Width/2f, bounds.Height/2f);
        brush.CenterColor = Color.White;
        brush.SurroundColors = new[]  Color.Red ;
        brush.FocusScales = new PointF(0, 0);

        e.Graphics.FillRectangle(brush, bounds);
    

PathGradientBrush 有很多属性可供试验,以确保获得所需的效果。

【讨论】:

虽然有很大的不同。 WF 的PathGradientBrush 不会在路径外绘制。 WPF 的RadialGradientBrush 可以。因此,根据您的要求,到目前为止可能无法达到相同的效果。【参考方案2】:

看看这个Codeproject article,然后看看路径渐变。

【讨论】:

谢谢,我会试试这个

以上是关于c# GDI和winforms中的径向渐变画笔效果的主要内容,如果未能解决你的问题,请参考以下文章

Android UIPaint Gradient 渐变渲染 ③ ( RadialGradient 环形渐变渲染 | 在给定中心和半径的情况下绘制径向渐变的着色器 | 水波纹效果 )

C# winform panel 画笔初始化问题

CSS中3D变换和gradient效果

C# WinForms - 任何人都知道 C# GDI 库不是 SLOW GDI+

带有图像的透明径向渐变? [复制]

C# winform GDI+ 五子棋 :基本界面和胜负判断