Mapas de bits (image)

A la hora de manejar representaciones visuales estáticas (en MetaCard o Revolution), en principio, se puede recurrir al uso de imágenes en su sentido más tradicional dentro del ámbito de los computadores: como un conjunto de puntos o mapa de bits.

Es posible llevar a nuestra aplicación diferentes contenidos en formato de mapa de bit sin más que crear un contenedor de tipo "image" y asignarle un fichero desde su caja de propiedades o, por supuesto, desde el código utilizando la propiedad fileName, que puede consultarse y modificarse como cualquier otra propiedad de un objeto con la orden set:

set the filename of image "nombreDelObjeto" to "rutaHastaLaImagen"

Existen otras alternativas para crear contenidos de este tipo como son: volcar (con put) una imagen desde un fichero (o URL) sobre este contenedor

put ... into image ...
y la captura de una zona de la pantalla
import ...
Además es posible llevar a fichero los contenidos de uno de estos contenedores.

Figura 4-11. Aspecto y propiedades de un objeto tipo "image" (barra de desplazamiento).

Nota: En la la sección de nombre Tarjetas (card) hablaremos de cómo asignar una imagen de fondo de una pila, o mejor dicho, de una tarjeta.

Es pues muy sencillo implementar aplicaciones estilo álbum de fotos, protector de pantalla, catálogo de productos que se basan principalmente en mostrar contenidos visuales y hacerlos independientes de la cantidad de objectos que muestran a partir de una sencilla etapa de planificación incial.

Como poco, con una imagen se puede jugar a cargarla (import y con ayuda de la propiedad fileName) en pantalla, mostrala (visual effect) con un efecto e incluso generarlas (esto último com la ayuda de la orden export. El siguiente ejemplo (junto a la Figura 4-12) muestra cómo hacer una parte de todos estos propósitos.

Figura 4-12. Las operaciones típicas sobre un objeto de tipo "image".

Para realizar esta pequeña aplicación se han utilizado los siguientes conjuntos de códigos asociados al objeto indicado. Se ha pretendido con ello que sea posible la expermientación de lo expuesto. De hecho el código de la tarjeta estaá ahí únicamente con la idea de ilustrar cómo se puede inicializar el contenido de uno de esos objetos (un botón) para un caso similar.

#Botón despleglable
on mouseUp
  hide image 1
  --  wait 10
  do "show image 1 with visual effect" &&  the effective label of button 1
end mouseUp

#Objeto imagen
on mouseUp
  answer file "Tria una imatge"
  put "(1)" & it && "(2)" & the result
  if  not(the result is "Cancel")
  then
    set the fileName of me to it
  end if
end mouseUp

#La tarjeta
on openCard
  set the text of button 1 to "barn door close" & return & "barn door open" & return & "checkerboard"  \
      & return & "dissolve" & return & "iris close" & return & "iris open" \
      & return & "plain" & return & "push down" & return & "push left" \
      & return & "push right" & return & "push up" & return & "reveal down" \
      & return & "reveal left" & return & "reveal right" & return & "reveal up" \
      & return & "scroll down" & return & "scroll left" & return & "scroll right" \
      & return & "scroll up" & return & "venetian blinds" & return & "wipe down" \
      & return & "wipe left" & return & "wipe right" & return & "wipe up" \
      & return & "zoom close" & return & "zoom in" & return & "zoom open" \
      & return & "zoom out"
end openCard
          

Se deja a la imaginación del lector crear una de estas aplicaciones que muestre una imagen y por lo menos un texto asociado, de forma que la cantidad de estos elementos no dependa del número de tarjetas de la pila, sino de parámetros propios de configuración de la aplicación. Como ejemplo de partida se plantea el siguiente código que toma de un directorio (el de trabajo por defecto) los nombres de los ficheros de imágenes que muestra y va mostrando de forma aleatoria uno de ellos. La primera parte debería realizarla la pila en el momento de inicializarse y la segunda parte (la que contiene el ejemplo) la realiza el propio objeto de tipo "image".

global llistatFitxers

on mouseUp
# En la pila::  put the files into llistatFitxers
 set the fileName of me to any line of llistatFitxers
 put the filename of me
end mouseUp
          

La última instrucción es únicamente para clarificar el hecho que se está produciendo en este ejemplo simplificado y en el que se han evitado las cuestiones de mejora para facilitar la lectura en el momento actual.

Nota: Como se puede observar, no se pierde generalidad en la aproximación indicada: la pila puede enviar el mensaje de "mouseUp" de forma periódica al objeto contendor de imágenes y este puede estar desabilitado para el que usuario no pueda generar estos mensajes; así como también la forma de recoger los nombres de archivos se puede cambiar para aceptar una serie de directorios que indique el usuario en una posible opción de configuración, ...

Para cerrar este apartado, cabe mencionar que es posible manejar una imagen en formato "GIF89a". Esto es, actuar sobre la cadencia en que se muestra la secuencia de imágenes que contiene un fichero de este formato. Para ello se utilizan, entre otras, las propiedades currentFrame, frameCount, constantMask, palindromeFrames y repeatCount.

Sugerencia: Para comprobar el funcionamiento de estas propiedades cree un control de tipo image para probar las misma como muestra el siguiente fragmento de código con una de ellas:

on mouseUp
  if the repeatCount of me is 0
  then
    set the repeatCount of me to -1
  else
    set the repeatCount of me to 0
  end if
end mouseUp
                   

Importante: Al respecto de las imágenes de tipo GIF, cito textualmente del MetaTalk Reference: [ Some multi-frame GIF images use a non-standard compression technique where the mask data is used to represent inter-frame differences. Setting this property to true will fix the display problems that occur when these images are used in MetaCard.]