giovedì 2 ottobre 2014

Visualizzatore di immagini

Oggi presentiamo un semplice visualizzatore di immagini:
Il codice si può scaricare da qui: http://tinyurl.com/pobav9c

Il programma è costituito da una lista delle cartelle per navigare nel proprio computer sulla desta, una lista di anteprime delle immagini sulla sinistra; al centro, cliccando su una delle anteprime, abbiamo l'immagine che ci interessa visualizzata in grande.
Notiamo nel codice l'uso del templateImage:

set the width of the templateImage to 100
set the height of the templateImage to 100
set the border of the templateImage to true
set the threeD of the templateImage to false
set the borderwidth of the templateImage to 1
set the locklocation of the templateImage to true

Livecode usa e mette a disposizione dei template, cioè un oggetto di riferimento da cui prenderà tutte le proprietà ogni nuovo oggetto creato di quel tipo. Se dobbiamo creare cento immagini, non c'è bisogno di indicare larghezza, altezza, posizione per ogni immagine, basta impostare il templateImage. Al template potete assegnare qualsiasi proprietà che assegnereste all'oggetto reale.
Notate anche che potete utilizzare anche delle proprietà personalizzate (custom properties), nel nostro caso border, che il template ovviamente non aveva.
Livecode mette a disposizione i seguenti template:
  • templateAudioClip
  • templateButton
  • templateCard
  • templateEPS
  • templateField
  • templateGraphic
  • templateGroup
  • templateImage
  • templatePlayer
  • templateScrollbar
  • templateStack
  • templateVideoClip
Un altro modo per avere oggetti identici e creare un oggetto che ci piace e usare il comando clone. Se usate il comando clone con una card, copierete anche tutto quello che contiene la card: utilissimo!
Altra chicca è il sistema per non esagerare con la memoria necessaria al programma. Il riquadro a sinistra contiene le anteprime di tutte le immagini nella cartella corrente: se la cartella contiene tante immagini e tutte enormi, potremmo sprecare un sacco di memoria caricandole alla dimensione massima.
Quando carichiamo un'immagine, viene caricata con le sue dimensioni reali; se poi la ridimensioniamo impostando solo altezza e larghezza (width, heigth), Livecode continuerà a tenere in memoria l'immagine piena e mostrerà sullo schermo la versione ridotta. In questo modo se riallargate l'immagine, potete tornare alle dimensioni di partenza.
Se invece non ci interessa mantenere l'immagine di partenza, per risparmiare memoria possiamo usare la proprietà imageData. Ecco un esempio pratico:
Attenzione che imageData contiene informazioni in formato binario, quindi devono avere la stessa dimensione (altezza e larghezza) le immagini quando portate imageData da un'immagine ad un'altra, altrimenti succede un pasticcio.
Nel programma, infatti, abbiamo il seguente codice:

lock screen
create image in group "thumbnailView"
put the id of the last image of group "thumbnailView" into tID
create invisible image "Foo"   
set the filename of image "Foo" to tFile
set the imageData of image ID tID to the imageData of image "Foo"
delete image "Foo"
unlock screen

C'è chi usa la proprietà text invece di imageData, nel caso delle immagini rappresentano gli stessi dati, ma text in formato testo e imageData in formato binario.

Altra chicca del programma è che invece di creare un ciclo lungo per fare tutte le anteprime delle immagini, fa un'anteprima alla volta, richiamando la funzione delle anteprime ogni 25 millisecondi; in questo modo l'utente può interagire col programma mentre il programma è preso a fare le anteprime (multitasking).

if pImageList is not empty then
   send "processImage pImageList" to me in 25 millisecs
end if


P.S. Il programma originale creava dei file di anteprima per ogni immagine, in modo da non dover ricalcolare l'anteprima ogni volta che ci si spostava di cartella; ma riempiva di file l'harddisk e l'ho modificato. Trovate questa funzione commentata nel programma.