2010-08-19 12 views
13

He creado una aplicación de Windows C# y escribí el 75% del código. El programa permite al usuario crear un diagrama de flujo y sombreará las formas del diagrama de flujo de acuerdo con su estado. Yo quería que se conviertan en 3d botones como Gel Button desde el sitio web Webdesign.orgC# efecto de pincel de degradado radial en GDI y winforms

En lugar de crear un archivo PNG para cada botón, que quería crear en C# usando cepillos u otra técnica, tales como:

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

Sé que WPF tiene gradientes radiales, pero ¿puedo hacer algo similar en CGI?

+1

Supongo que quiere decir "GDI +" y no "CGI"? – BrainSlugs83

Respuesta

20

A diferencia de WPF, GDI +/WinForms no tiene un RadialGradientBrush. Sin embargo, puede lograr el mismo efecto usando un PathGradientBrush.

He aquí un ejemplo:

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

El PathGradientBrush tiene un montón de propiedades para experimentar para asegurarse de obtener el efecto que está buscando.

+1

Sin embargo, hay una gran diferencia. El 'PathGradientBrush' de WF no pinta fuera de la ruta. El 'RadialGradientBrush' de WPF sí lo hace. Por lo tanto, dependiendo de sus requisitos, es posible que no logre el mismo efecto por el momento. –

+0

¡Te amo, hombre! – Yassir

Cuestiones relacionadas