23 de noviembre de 2006

Utilizar el canal Alpha en imágenes Visual FoxPro

Artículo original: Using the Alpha Channel in Visual Foxpro Images
http://weblogs.foxite.com/bernardbout/2006/09/10/using-the-alpha-channel-in-visual-foxpro-images/
Autor: Bernard Bout
Traducido por: Ana María Bisbé York


Utilizar el canal Alpha en imágenes PNG puede provocar efectos muy interesantes y agradables.
Estuve trabajando en algunos seudo formularios empleando máscaras de canal Alfa de imágenes PNG así que decidí intentar.

Actualizado el 12/09/2006 (vea debajo)

Creé las imágenes en Paint Shop Pro; pero cualquier aplicación para tratamiento de imágenes como Photoshop, etc puede crear máscaras que lo hagan. Al cargar un objeto imagen VFP, estas imágenes muestran muchos efectos interesantes, así que decidí invertir algún tiempo extra explorando este aspecto y las pantallas siguientes muestran el resultado que alcancé. El Titlebar.png es utilizado por la barra de título, mainform.png es utilizada para el área principal del formulario. Agregué Vistabuttons.bmp y coloqué sobre el un botón de comando invisible, para las acciones. Todo esto está colocado en un contenedor transparente en un objeto imagen VFP y los otros como etiquetas, cuadros de texto, etc están colocados encima. Pueden ser instanciados utilizando ADDOBJECT() sobre el formulario. Las imágenes pueden ser guardadas haciendo clic en el botón secundario del ratón y SavePictureAs (Guardar imagen como)

Titlebar.png


Mainform.png


VistaButtons.bmp



Los "formularios" son clases con todos los objetos insertados en un contenedor transparente. Una vez que está logrado, cada "formulario" puede ser instanciado como cualquier otra clase.

He dicho "formulario" porque no son formularios reales y no tienen los métodos y eventos normales de un formulario. Son solamente contenedores que tienen apariencia de formularios y pueden ser instanciados como formularios de nivel superior SDI. Pueden ser empleados para entrada de datos o incluso como cajas estilo MessageBox.

He aquí un formulario con objetos diferentes. El "formulario" en realidad puede ser movido como cualquier otro formulario. Puede ver fácilmente el ejemplo de transparencia que se ha obtenido, con el fondo que se ve a través del título y los bordes; pero no a través del área central. A la derecha hay objetos normales VFP colocados en el SDI, sólo para mostrar la diferencia. Vea que el fondo es visible a través de la barra de título y los bordes.



La siguiente imagen muestra el formulario que sido movido para cubrir parcialmente los objetos que hay a la derecha. El texto de estos objetos se ve claramente a través de la barra de título del "formulario".



La imagen final muestra el efecto de transparencia alcanzado, mientras se mantienen el formulario principal y los objetos opacos.



Lograr estos efectos toma cerca de 10 minutos. Menos, ahora que ya se cómo crear las máscaras y el efecto que se puede alcanzar. Con un poco más de código se puede convertir en una apariencia muy moderna Vista Aero Glass de una ventana con un humilde XP OS.

Ahora le toca a mi amigo Cesar Ch. solucionar este tema al vuelo empleando GDI+ ...

Ain't Fox cool?

Actualización - 12 de Septiembre de 2006

Cesar amablemente ha brindado el código para generar imágenes PNG al vuelo. Puede verlo aquí: http://weblogs.foxite.com/vfpimaging/archive/2006/09/12/2445.aspx

Esta línea de código puede ser cambiada a cualquier tamaño que desee. El tamaño aquí es 300 de ancho por 270 de alto
loBitmap = .Bitmap.New(300,270)
El área opaca central se puede cambiar de color:
* Dibujar un rectángulo amarillo
loGfx.FillRectangle(.SolidBrush.New(.Color.FromRGB(254,254,228)), 10,9,278,249)

Recuerde cambiar los dos últimos valores para lograr su nuevo tamaño - ,278,249)

Todo lo que nos queda ahora de Cesar es mostrarnos cómo hacer en PNG transparente. Pienso que se puede hacer en esta línea, cambiando el número 3 con el RGB
* Hace que toda la imagen sea transparente
loGfx.Clear(.Color.FromARGB(0,0,0,0)) 
pero esto se lo dejo a él.

El último truco es hacer image.BorderStyle = 1 - Fixed Single. Esto nos va a brindar el límite opaco del "formulario". Lo hemos hecho. Gracias Cesar. Eres el Mr. GDI+

No hay comentarios. :

Publicar un comentario