2012-07-10 25 views
14

Al tener dos PictureBox controls superpuestos, estoy tratando de hacer que las áreas transparentes del cuadro de imagen dejen los controles debajo (en el orden z) siendo visibles.¿Es posible tener dos controles PictureBox superpuestos con imágenes transparentes?

Incluso después de trying what Microsoft suggests, no puedo obtener el resultado deseado.

Esto es lo que tengo actualmente:

enter image description here

Y esto es lo que quiero:

enter image description here

Así que mi pregunta es:

Cualquier forma de lograr mi resultado deseado con dos PictureBox controles (o de otra manera) que se superponen entre sí y dejan que las áreas transparentes brillen a través?

Actualización:

En realidad, yo lo resolvió mediante el uso de this answer a la pregunta del SO "Transparent images with C# WinForms".

+0

lo que es la extensión de las imágenes? – sikas

+0

@sikas El escudo es un archivo PNG con canal alfa. ¿Por qué debería ser esto importante? –

+1

WinForms no es compatible con esto de forma predeterminada. Debes hacer algunos hacks de dibujo muy interesantes para que funcione. WPF, sin embargo, hace esto sin ningún problema. –

Respuesta

2

Hasta donde yo sé, la transparencia de un control depende de su control principal (como se indica en el enlace que ha proporcionado), lo que significa que para tener el efecto que está buscando, debe tener uno cuadro de imagen anidado en otro cuadro de imagen que es imposible dado que un cuadro de imagen no es un contenedor.

Sin embargo, puede utilizar un control de contenedor personalizado en lugar de un cuadro de imagen para la imagen principal. El control más básico sería un panel. Simplemente configure la imagen de fondo del control y coloque el segundo cuadro de imagen en él.

Otra solución sería usar un solo cuadro de imagen y administrar el renderizado manualmente.

Esta es, de lejos, la mejor solución ya que la transparencia pseudo-simulada del otro método es bastante ineficiente.

16

probar este

private void Form1_Load(object sender, EventArgs e) 
{ 
    // Transparent background... 
    pictureBoxOverlay.BackColor = Color.Transparent; 

    // Change parent for overlay PictureBox... 
    pictureBoxOverlay.Parent = pictureBoxMain; 

// Change overlay PictureBox position in new parent... 
// pictureBoxOverlay.Location = new Point(0, 0); 
} 

Resultado

enter image description here

llink

+0

Gracias, esto funciona a menos que el cuadro de imagen de superposición esté recortado por el cuadro de imagen. Necesito que solo se superpongan parcialmente. –

Cuestiones relacionadas