sobre DrawImage en un panel

02/08/2005 - 00:44 por Javier | Informe spam
Hola a todos, es cuento lo que intento hacer... lo que trato de hacer es un
efecto de una imagen que aparezca en diagonal sobre un formulario y que
aparezca con el texto Anulado... esta imagen la pongo en un panel con el
metodo drawImage, hay ese punto no hay problema, el problema esta en que, en
ese panel tengo textbox, y labels, y lo que pretendo es que la imagen que
estoy dibujando se quede por encima de esos controles, y ahora no se porque
se me queda por debajo de estos... alguien sabe como podria solucionarse? he
probado tambien con un pictureBox pero al ser una imagen diagonal, y no
puedo poner transparencias para que se vean los textbox y los labels que se
quedan detras no me sirve

//este es el codigo con el que dibujo la imagen
System.Drawing.Graphics gr = this.pGeneral.CreateGraphics();
Bitmap bmp = new Bitmap(Utils.fileUtils.DirectorioAplicacion() +
@"\imagenes\anulado.gif"); //el gif tiene transparencias
Point xy = new Point(250,50);
gr.DrawImage((Image)bmp,xy);
gr.Save();
gr.Flush();
this.pGeneral.Update();


Atentamente...
 

Leer las respuestas

#1 Tristan
02/08/2005 - 10:20 | Informe spam
Que la imagen quede debajo es lógico. La imagen se pinta sobre una ventana,
la ventana de la que obtienes el Graphics. En tu caso la ventana de pGeneral.
Nunca afecta al resto de ventanas.

Lo que yo haría es utilizar la propiedad Region de cualquier tipo de
control, para mediante un GraphicsPath, definir el área visible del control.
El resto será transparente. Por ejemplo, o mucho me equivoco o este ejemplo
hará exactamente lo que buscas:

Control anulado = new Control();
anulado.Size = new Size(400, 400);
anulado.BackColor = Color.Red;
GraphicsPath contorno = new GraphicsPath();
Matrix rotacion = new Matrix();
contorno.AddString("Anulado", FontFamily.GenericSansSerif,
(int) FontStyle.Regular, 70, new Point(0, 0),
StringFormat.GenericDefault);
rotacion.Translate(0, 200);
rotacion.Rotate(-45);
contorno.Transform(rotacion);
anulado.Region = new Region(contorno);
this.Controls.Add(anulado);
anulado.BringToFront();


El ejemplo muestra anulado en rojo. Se debe a que el control tiene fondo
rojo, y de él tan solo es visible una región formada por el texto anulado,
rotado.

Juan Carlos Badiola Saiz
MVP - C#

Preguntas similares