Problema
Una pregunta bastante común en los foros es tener dentro de un formulario un Panel o PictureBox, y que sea trasparente a la imagen de fondo establecida en el formulario.
Dentro de los colores de Fondo que podemos establecer dentro de uno de estos controles existe “Transparent”. Pero este color no es la solución, porque no va a coger el valor de la imagen, sino que va a coger el color de fondo del formulario.
Posible Solución, que no es la mejor.
Recogeremos la imagen de fondo, y capturaremos los pixeles para establecerlos al contenedor que queremos hacer transparente.
1: void HacerTransparente(Bitmap original,Control control)
2: {
3:
4: Bitmap copiaPanel = new Bitmap(panel1.Width, panel1.Height);
5: for (int x = 0; x < panel1.Width; x++)
6: {
7: for (int y = 0; y < panel1.Height; y++)
8: {
9: copiaPanel.SetPixel(x, y, original.GetPixel(x + panel1.Location.X, y + panel1.Location.Y));
10: }
11: }
12: control.BackgroundImage = copiaPanel;
13: }
Espero que os resulte de utilidad.
Saludos!
Hola Javier!
Hace tiempo que no programo en Windows Forms, pero estuve bastante tiempo programando y creo que de alguna cosa me acuerdo.
Lo que comentas del soporte de transparencia de los controles es porque el compositor GDI tiene deshabilitado el soporte de transparencia de manera predeterminada, pero se puede habilitar de una manera sencilla, porque si tienes que copiar los pixeles a mano de una imagen el proceso te va a llevar mucho tiempo:
public class TransparentPictureBox : PictureBox
{
public TransparentPictureBox()
{
SetStyle(ControlStyles.SupportsTransparentBackColor | ControlStyles.UserPaint, true);
UpdateStyles();
}
}
Simplemente heredando de la clase PictureBox y luego estableciendo el estilo a ControlStyles.SupportsTransparentsBackColor ya lo tenemos, un PictureBox que soporta color de transparencia.
Es el mismo caso si quieres que los controles se dibujen con double buffer para evitar el molesto glich de cuando se actualizan.
Saludos. Luis.
Hola @Luis,
UOUO gran respuesta sinceramente no me habia planteado eso.
Si no te importa, lo indicare en el foro 🙂
PD: Muchas gracias por leer el post y aportar esa gran idea!
De nada 🙂 Como ya dije anteriormente he estado trabajando muucho con Windows Forms y me he pegado bastante.
Hola, la verdad me suela muy util, pero no entendi mucho, hasta ya me hice bolas, podrian por favor no fuera mucha molestia subir la demo para libre descarga, y asi entender mejor!
gracias!