Cómo: Dibujar con pinceles opacos y semitransparentes
Actualización: noviembre 2007
Cuando se rellena una forma, se debe pasar un objeto Brush a uno de los métodos de relleno de la clase Graphics. El único parámetro del constructor SolidBrush es un objeto Color. Para rellenar una forma opaca, establezca el componente alfa del color en 255. Para rellenar una forma semitransparente, establezca el componente alfa en cualquier valor de 1 a 254.
Cuando se rellena una forma semitransparente, el color de la forma se mezcla con los colores del fondo. El componente alfa especifica cómo se mezclan los colores de la forma y del fondo. Los valores alfa cercanos a 0 dan más importancia a los colores de fondo y los cercanos a 255 dan más importancia al color de la forma.
Ejemplo
En el ejemplo siguiente se dibuja un mapa de bits y, después, se rellenan tres elipses superpuestas al mapa de bits. La primera elipse usa un componente alfa de 255, por lo que es opaca. La segunda y tercera elipse usan un componente alfa de 128, por lo que son semitransparentes; la imagen de fondo se puede ver a través de las elipses. La llamada que establece la propiedad CompositingQuality hace que la mezcla de la tercera elipse se realice junto con la corrección gamma.
En la siguiente ilustración se muestra el resultado del código siguiente.
Dim bitmap As New Bitmap("Texture1.jpg")
e.Graphics.DrawImage(bitmap, 50, 50, bitmap.Width, bitmap.Height)
Dim opaqueBrush As New SolidBrush(Color.FromArgb(255, 0, 0, 255))
Dim semiTransBrush As New SolidBrush(Color.FromArgb(128, 0, 0, 255))
e.Graphics.FillEllipse(opaqueBrush, 35, 45, 45, 30)
e.Graphics.FillEllipse(semiTransBrush, 86, 45, 45, 30)
e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected
e.Graphics.FillEllipse(semiTransBrush, 40, 90, 86, 30)
Bitmap bitmap = new Bitmap("Texture1.jpg");
e.Graphics.DrawImage(bitmap, 50, 50, bitmap.Width, bitmap.Height);
SolidBrush opaqueBrush = new SolidBrush(Color.FromArgb(255, 0, 0, 255));
SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(128, 0, 0, 255));
e.Graphics.FillEllipse(opaqueBrush, 35, 45, 45, 30);
e.Graphics.FillEllipse(semiTransBrush, 86, 45, 45, 30);
e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected;
e.Graphics.FillEllipse(semiTransBrush, 40, 90, 86, 30);
Compilar el código
El ejemplo anterior está diseñado para formularios Windows Forms y requiere PaintEventArgse, que es un parámetro de PaintEventHandler.
Vea también
Tareas
Cómo: Proporcionar un fondo transparente a un control
Cómo: Dibujar líneas opacas y semitransparentes
Cómo: Crear formularios Windows Forms transparentes