Pacoideas - Trabajar con imágenes PNG con transparencia

Hola.

imagen

En aplicaciones de determinados entornos empresariales es necesario trabajar con la gestión de imágenes, ya sea como mapas de bits o vectoriales.

Cuando en un formulario hay que superponer imágenes para mostrar despieces o tampones superpuestos es necesario que éstas dispongan del canal de transparencia en la información del color.

Si necesitamos guardar nuestras imágenes en la base de datos Velneo, únicamente disponemos del campo Objeto Dibujo para almacenar imágenes jpeg. En este tipo de campo se pierde la información del canal alfa o transparencia.

Por lo tanto necesitamos un mecanismo que nos permita almacenar las imágenes con transparencia en formato PNG para poder superponerlas en el formulario.

imagen

En Velneo no disponemos de un control que nos permita visualizar una imagen creada de forma dinámica. El objeto del API VImageWidget (control del formulario para dibujos estáticos) sería el candidato perfecto.

La idea consiste en solucionar esta limitación aplicando estas dos acciones:

  • Almacenar las imágenes en el campo Objeto Binario que no altera el archivo original, preservando todas sus características.
  • Usar el control Botón para mostrar las imágenes en el formulario después de obtener un objeto VImage del API.

El código javascript del API es muy sencillo:

// Script que muestra la imagen del campo Binario en un Botón del formulario
importClass("VImage")
// Obtiene la referencia al control Botón
var oDib = theRoot.dataView().control("CMD_CUA_DIB")
// Crea una nueva imagen
var oImagen = new VImage()
// Obtenemos un ByteArray desde el campo Binario
var oBinario = theRegisterIn.fieldToByteArray("IMAGEN_BIN") 
// Cargamos la imagen PNG desde el ByteArray y lo asignamos al Icono del Botón
if (oImagen.loadFromData(oBinario, "PNG")) {
    oDib.setIcon(oImagen)
}

Por último asignamos el siguiente CSS al Botón del formulario para que se muestre correctamente la imagen:

QPushButton {
  background-color: transparent;
  padding: 0px;
  qproperty-iconSize: 200px;
}

Ahora solo nos queda superponer los Botones con las imágenes en un Layout y voilà.

imagen

Saludos
Paco Satué

2 Me gusta

Si, se ve maravilloso además de necesario.
El código javascript es muy sencillo y el idea conjunta para hacer funcionar todo es fantástica además de gratuita (copy-paste al reservorio).

Qué no hará javascript.

Lo que me joroba es encontrar tanta flaqueza en el sistema nativo y que cuando nos añaden cosas nuevas y buenas como nativas (P.ej. todas esas funciones de la versión 29: getCurrentObjectId, getMainObjectId etc) parecen en el fondo atajos o funciones javascript camufladas, cosa mía que imagino al ver que no incorporan la refactorización.
Entre todas las cosas buenas de Velneo, la refactorización está entre mis primeras favoritas y el uso de javascript o QML rompe con la refactorización por motivos evidentes.

Todo será cosa de acostumbrarse y aceptar a javascript y QML como complementos que fortalecen Velneo en lugar verlo como vías de escape para sus limitaciones.

Muchísimas gracias por esta idea tan buena. :vulcan_salute:t5:

Gracias por el aporte. Lo probé y funciona excelente.