c # эффект кисти с радиальным градиентом в GDI и winforms - PullRequest
16 голосов
/ 19 августа 2010

Я создал приложение ac # windows и написал 75% кода.Программа позволяет пользователю создавать блок-схемы и будет затенять формы блок-схем в соответствии с их статусом.Я хотел, чтобы они стали трехмерными кнопками, такими как Gel Button с веб-сайта 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?

Ответы [ 2 ]

23 голосов
/ 29 ноября 2012

В отличие от 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 есть множество свойств, с которыми можно поэкспериментировать, чтобы убедиться, что вы получите нужный эффект.

11 голосов
/ 19 августа 2010

Взгляните на эту статью Codeproject , а затем на градиент пути.

...