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

Cli*_*erM 14 c# gdi brush winforms

我创建了ac#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);
Run Code Online (Sandbox Code Playgroud)

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

Dre*_*kes 23

WPF不同,GDI +/WinForms没有RadialGradientBrush.但是你可以用a来达到同样的效果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);
    }
}
Run Code Online (Sandbox Code Playgroud)

PathGradientBrush有很多特性进行实验,以确保你得到你所追求的效果.

  • 但是,有一个巨大的差异.WF的`PathGradientBrush`不会在路径外绘制.WPF的`RadialGradientBrush`可以.因此,根据您的要求,到目前为止可能无法达到相同的效果. (3认同)

Hen*_*man 12

看看这个Codeproject文章,然后在Path渐变.

  • 谢谢,我会去看看 (2认同)