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 环形渐变渲染 | 在给定中心和半径的情况下绘制径向渐变的着色器 | 水波纹效果 )