Ответ 1
Взгляните на эту статью Codeproject, а затем на градиент пути.
Я создал приложение windows С# и написал 75% кода. Программа позволяет пользователю создавать блок-схему и затенять фигуры в соответствии с их статусом. Я хотел, чтобы они стали 3d-кнопками, такими как с веб-сайта Webdesign.org
Вместо того, чтобы создавать PNG для каждой кнопки, я хотел создать их на С# с помощью кистей или другой техники, например:
// 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?
Взгляните на эту статью Codeproject, а затем на градиент пути.
В отличие от 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
имеет множество свойств для экспериментов, чтобы гарантировать, что вы получите эффект, который вам нужен.