Domingo 22 de Diciembre de 2024, 16:13
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
CLR: .Net / Mono / Boo / Otros CLR
»
C#
(Moderador:
ProfesorX
) »
Iluminacion De Los Objetos En El Panel
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Iluminacion De Los Objetos En El Panel (Leído 1456 veces)
Julio34
Miembro activo
Mensajes: 25
Iluminacion De Los Objetos En El Panel
«
en:
Jueves 13 de Julio de 2006, 11:25 »
0
BUenas,
Tengo que hacer un programa que haga lo siguiente: Cuando se señala una imagen concreta, el resto del panel se oscurece, viendose la imagen señalada resaltada respecto al resto de objetos.
Debido a que tengo que trabajar sobre un panel, la propiedad opacity que tienen los formularios no sirve, ahora estoy probando insertando una imagen negra encima de todo el panel excepto en el objeto y jugando con la classe ColorMatrix, pero no acaba de ser correcto del todo parece ser por culpa de los textboxes i cosillas asi.
Alguien por aquí se ha enfrentado alguna vez con este tipo de situación?
Gracias de antemano!!!!
Tweet
Julio34
Miembro activo
Mensajes: 25
Re: Iluminacion De Los Objetos En El Panel
«
Respuesta #1 en:
Martes 25 de Julio de 2006, 12:39 »
0
Buenas, resolvi este problema hace un tiempo. El truco es hacer una captura de pantalla y despues pintarle encima varias imagenes negras con la opacidad reducida. De esta manera se puede resaltar cualquier zona del formulario especificando coordenadas. Aun asi no estoy muy seguro si esta solucion es la mas eficiente o si se podria mejorar. Por ahora pongo el codigo, lo que hago a grandes rasgos es combinar la clase Colormatrix con las clases de USER32 de windows
IntPtr dc1 = USER32.GetWindowDC(this.Handle);
Graphics g1 = Graphics.FromHdc(dc1);
Bitmap original = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, g1);
float[][] ptsArray ={ new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0, 0, 1, 0, 0},
new float[] {0, 0, 0, opacity, 0},
new float[] {0, 0, 0, 0, 1}};
ColorMatrix clrMatrix = new ColorMatrix( ptsArray );
ImageAttributes imgAttributes = new ImageAttributes();
imgAttributes.SetColorMatrix( clrMatrix,
ColorMatrixFlag.Default, ColorAdjustType.Bitmap );
Image negre = Image.FromFile("C:\\Documents and Settings\\jarnalot\\Mis documentos\\Mis imágenes\\backie.bmp");
g1.DrawImage(negre, new Rectangle(0,0,this.Width-(this.Width - CoorX),this.Height-(this.Height-CoorY)), 0, 0, this.Width-(this.Width - CoorX), this.Height,GraphicsUnit.Pixel, imgAttributes);
g1.DrawImage(negre, new Rectangle(0,CoorY,this.Width-(this.Width - CoorX),PosY), 0, 0, CoorX, CoorY,GraphicsUnit.Pixel, imgAttributes);
g1.DrawImage(negre, new Rectangle(0,CoorY + PosY,this.Width-(this.Width - CoorX),this.Height-(CoorY+PosY)), 0, 0, CoorX, CoorY,GraphicsUnit.Pixel, imgAttributes);
g1.DrawImage(negre, new Rectangle(CoorX,0,this.Width,this.Height-(this.Height-CoorY)), 0, 0, CoorX, CoorY,GraphicsUnit.Pixel, imgAttributes);
g1.DrawImage(negre, new Rectangle(CoorX+PosX,CoorY,this.Width,PosY), 0, 0, CoorX, CoorY,GraphicsUnit.Pixel, imgAttributes);
g1.DrawImage(negre, new Rectangle(CoorX,CoorY + PosY,this.Width,this.Height-(CoorY+PosY)), 0, 0, CoorX, CoorY,GraphicsUnit.Pixel, imgAttributes);
Si alguien cree que se puede hacer mejor que me lo diga porfa!!
saludos
JuanK
Miembro de ORO
Mensajes: 5393
Nacionalidad:
Re: Iluminacion De Los Objetos En El Panel
«
Respuesta #2 en:
Miércoles 26 de Julio de 2006, 05:41 »
0
Me parece una buena solución , gracias por compartirla.
Me pregunto si no sera un poco lenta?
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io
Julio34
Miembro activo
Mensajes: 25
Re: Iluminacion De Los Objetos En El Panel
«
Respuesta #3 en:
Jueves 3 de Agosto de 2006, 09:10 »
0
Hola,
Efectivamente esta solución era demasiado lenta y, en consecuencia, inviable.
Al final conseguí hacerlo de manera correcta, hay que trabajar con capturas de pantalla unicamente.
El codigo es el siguiente, saludos!
Código: Text
public void Oscurecer(int amplada, int llargada, int CoorX, int CoorY, float brightness)
{
//PASO 1
//Hacemos una captura de pantalla inicial para poder trabajar con ella
IntPtr pCapturaPantalla = DLLs.GetWindowDC(ctrl.Handle);
graficoCapturaPantalla = Graphics.FromHdc(pCapturaPantalla);
//Creamos un bitmap para poder pegar la captura de imagen
bRecipientePant = new Bitmap(ctrl.Width, ctrl.Height);
Graphics graficoRecipientePant = Graphics.FromImage(bRecipientePant);
pCapturaPantalla = graficoCapturaPantalla.GetHdc();
IntPtr pRecipientePant = graficoRecipientePant.GetHdc();
//Pegamos la captura de pantalla en el bitmap
DLLs.BitBlt(pRecipientePant, 0, 0, ctrl.Width, ctrl.Height, pCapturaPantalla, 0, 0, 13369376);
graficoCapturaPantalla.ReleaseHdc(pCapturaPantalla);
graficoRecipientePant.ReleaseHdc(pRecipientePant);
//PASO 2
//Creamos un nuevo Bitmap de tamaño reducido para copiar
//solo un fragmento de la captura de pantalla inicial
Bitmap bFragmento = new Bitmap(amplada,llargada);
Graphics graficoFragmento = Graphics.FromImage(bFragmento);
IntPtr pFragmento = graficoFragmento.GetHdc();
//Pegamos el fragmento especificado de la captura de pantalla inicial en el bitmap
DLLs.BitBlt(pFragmento, 0, 0, amplada, llargada, pCapturaPantalla, CoorX, CoorY, 13369376);
graficoFragmento.ReleaseHdc(pFragmento);
//PASO 3
//Oscurecemos el bitmap que contiene la captura de pantalla inicial
float[][] ptsArray ={ new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0}, new float[] {0, 0, 1, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {brightness, brightness, brightness, 1, 1}};
ColorMatrix clrMatrix = new ColorMatrix( ptsArray );
ImageAttributes imgAttributes = new ImageAttributes();
imgAttributes.SetColorMatrix( clrMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap );
graficoCapturaPantalla.DrawImage(bRecipientePant, new Rectangle(0, 0, ctrl.Width, ctrl.Height), 0, 0, ctrl.Width, ctrl.Height,GraphicsUnit.Pixel, imgAttributes);
//PASO 4
//Pegamos el fragmento en la captura de pantalla inicial, la cual ya esta oscurecida
DLLs.BitBlt(pCapturaPantalla, CoorX, CoorY, amplada, llargada, pFragmento, 0, 0, 13369376);
}
JuanK
Miembro de ORO
Mensajes: 5393
Nacionalidad:
Re: Iluminacion De Los Objetos En El Panel
«
Respuesta #4 en:
Jueves 3 de Agosto de 2006, 21:00 »
0
Muy bien, eso era lo que esperaba!!!
Gracias por compartirlo!!
Buen trabajo!!!
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
CLR: .Net / Mono / Boo / Otros CLR
»
C#
(Moderador:
ProfesorX
) »
Iluminacion De Los Objetos En El Panel