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...

Preguntas similare

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#
Respuesta Responder a este mensaje
#2 Javier
02/08/2005 - 13:19 | Informe spam
Gracias, eso era lo que iba buscando, ahora solo tengo que compaginarlo con
una imagen gracias!!!

Ademas, tu codigo funciona perfectamente.

"Tristan" escribió en el mensaje
news:
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#
Respuesta Responder a este mensaje
#3 Tristan
02/08/2005 - 14:34 | Informe spam
Si necesitas una imagen, prueba a establecerla como BackgroundImage del
control anulado.

Juan Carlos Badiola Saiz
MVP - C#
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida