2010-08-19 7 views
13

Stworzyłem aplikację windowsową C# i zapisałem 75% kodu. Program umożliwia użytkownikowi utworzenie schematu blokowego, a także przyciemni kształty wykresów przepływu zgodnie z ich stanem. Chciałem im stać 3d przyciski takie jak Gel Button ze strony internetowej Webdesign.orgC# efekt szczotki radialnej gradientu w GDI i WinFormach

Zamiast tworzyć PNG dla każdego przycisku, chciałem je tworzyć w C# za pomocą szczotek lub innej techniki, takie jak:

// 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); 

Wiem, że WPF ma gradienty radialne, ale czy mogę zrobić coś podobnego w CGI?

+1

Zakładam, że masz na myśli "GDI +", a nie "CGI"? – BrainSlugs83

Odpowiedz

20

W przeciwieństwie do WPF, GDI +/WinForms nie ma RadialGradientBrush. Jednak można osiągnąć ten sam efekt za pomocą PathGradientBrush.

Oto przykład:

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 ma wiele właściwości poeksperymentować z aby uzyskać efekt jesteś po.

+1

Istnieje jednak ogromna różnica. WF 'PathGradientBrush' nie maluje poza ścieżką. Robi to WPF 'RadialGradientBrush'. Tak więc, w zależności od Twoich wymagań, może nie osiągnąć tego samego efektu. –

+0

Kocham cię, człowieku! – Yassir