Alpha Blending en Compact Framework

Seguramente muchos de los que trabajais en Compact Framework habreis notado los problemas de no poder  usar Alpha Blending de forma manejada. De hecho son muchas las cuestiones que se preguntan acerca de este tema, mucha gente desea crearse controles estilo botón imagen y que este preserve las transparencias de un png. El caso es que siempre que pintemos un png, por ejemplo, en un Bitmap se pierden las transparencias y el efecto que queda es bastante feo, por ello se recurre a pintar sobre el color base del contenedor del control,si bien esto nos resulve el problema en ciertos casos no siempre nos será de utilidad. Imaginaros que deseais tener un botón imagen encima de un formulario o panel que tiene una imagen de fondo, no un color… ¿ Cuál es la solución ?


En Windows Mobile 5.0 disponemos de una llamada nativa en coredll que nos permite agregar el canal alpha a nuestras imágenes.


[DllImport(“coredll.dll”)]
extern public static Int32 AlphaBlend(IntPtr hdcDest, Int32 xDest, Int32 yDest, Int32 cxDest, Int32 cyDest, IntPtr hdcSrc, Int32 xSrc, Int32 ySrc, Int32 cxSrc, Int32 cySrc, BlendFunction blendFunction);


Para el que desee averiguar más acerca de AlphaBlend le recomiendo que se mire el post de Cris Lorton AlphaBlending with NETCF.


Ahora que sabemos como realizar Alpha Blending mediante una simple llamada P/Invoke surge una nueva incógnita. Si hacemos esto heredando de control realmente estamos haciendo canal Alpha sobre el Bitmap en Background del control pero no sobre la imagen de fondo del contenedor de esta  ¿ Como hacemos entonces ? Bastaría con pintar como imagen de fondo del control la superficie de la imagen de fondo del control contenedor y para esto no tenemos más que crear un Rectangle especificando las coordenadas y tamaño de la imagen que deseamos copiar pudiéndola obtener de las propiedades del control Location y Size.


 


 


Espero que os resulte de interés


 


Saludos


Unai Zorrilla Castro


 


 


 

4 comentarios sobre “Alpha Blending en Compact Framework”

  1. en vdd me parece muy buenos movimientos encontra de la antitransparencia del cf, sin embargo es algo que yo creo que muchos hemos pensado el hecho de lo ultimo que mensionas hacerca de como hacer un control trasparente y que tome el cuadro de la imagen y que se le asigne. pero sin hasta le momento no he podido lograrlo y no conosco a alguien o no he leido algo que diga que alguien ya lo hizo… te agradeceria que si esto ya lo lograstes pss que lo pases para la comunidad desarrolladora en pocketpc 😛 jejeje hasta pronto te dejo mi mail por si ahi algo jjeje gera_pappas@hotmail.com

  2. en vdd me parece muy buenos movimientos encontra de la antitransparencia del cf, sin embargo es algo que yo creo que muchos hemos pensado el hecho de lo ultimo que mensionas hacerca de como hacer un control trasparente y que tome el cuadro de la imagen y que se le asigne. pero sin hasta le momento no he podido lograrlo y no conosco a alguien o no he leido algo que diga que alguien ya lo hizo… te agradeceria que si esto ya lo lograstes pss que lo pases para la comunidad desarrolladora en pocketpc 😛 jejeje hasta pronto te dejo mi mail por si ahi algo jjeje gera_pappas@hotmail.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *