Si conclude questo mese il lungo corso di elaborazione delle immagini iniziato ben sette mesi fa. Sperando che le conoscenze messe a disposizione da Carli siano state utili ci concediamo con questa rubrica in attesa di dare inizio ad una nuova ancora più attuale e di frontiera...

Siamo cosi' giunti all'ultima puntata del corso relativo alle immagini in Java. Durante questi mesi abbiamo visto quelli che sono i procedimenti di caricamento, di gestione e di elaborazione delle immagini attraverso gli strumenti offerti dal package java.awt.image. Abbiamo visto, nelle precedenti puntate, come si leggono ed interpretano file di immagini in formato diverso da quelli canonici (JPG e GIF), e come si costruiscono filtri per le immagini. In questa puntata conclusiva del corso vedremo un aspetto di Java, sempre legato alle immagini, che ha suscitato moltissimo interesse tra gli appartenenti alle mailing list e newsgroup di Java. Ci si chiedeva, infatti, se era possibile o no visualizzare delle immagini trasparenti. Molti hanno chiesto informazioni al riguardo e per tutti la risposta era sempre la stessa: le immagini trasparenti (formato Gif39) non si possono visualizzare. Nella puntata di questo mese vedremo come, con il JDK1.1 a partire dalla beta3, la visualizzazione di immagini trasparenti sia diventata cosa possibile attraverso quelli che si chiamano Lightweight Component cioè componenti leggeri. L'insieme di questi strumenti è riunito nel nome di Lightweight User Interface Framework.

Perché in precedenza non era possibile? Durante il nostro corso abbiamo visto come si può visualizzare una immagine. E' sufficiente ottenere un contesto grafico, attraverso il metodo getGraphics() oppure automaticamente come parametro della paint(), ed utilizzare il metodo drawImage(). Abbiamo visto due versioni di questo metodo a seconda si volessero specificare o meno le dimensioni dell'immagine. Ma il contesto grafico deve essere relativo ad un componente quale un Panel oppure, solitamente, un Canvas. Per quest'ultimo bisogna, inoltre, ricordarsi di specificarne le dimensioni. Essi richiamano quelli che sono i peer nell'ambiente di sviluppo window ovvero i componenti nativi dell'ambiente in cui si opera. Questi componenti si dicono heavyweight (pesanti) in quanto possono essere difficili da gestire a livello di sistema operativo, sono opachi per cui impediscono l'utilizzo di componenti trasparenti e sono considerevolmente differenti tra piattaforme per cui il mantenimento di una certa coerenza diventa difficile.

I componenti LightWeight

La soluzione è quindi data dai componenti lightweight. Essi hanno le seguenti caratteristiche: Esse permettono la gestione di aree trasparenti Sono componenti leggeri a tal punto da non richiedere implementazioni native o classi peer. Sono completamente realizzate in java per cui non si ha la necessità di nessun codice nativo per la loro gestione e si ha piena consistenza tra le varie piattaforme.

A questo punto abbiamo detto tante parole ma in definitiva come si crea un componente leggero?

Semplice! Se prima la nostra classe estendeva le classi Canvas o Panel ora estenderanno le classi Component o Container. La grossa novità è dovuta, infatti, alla possibilità di estendere direttamente queste due classi (con il JDK1.02 non era possibile). Un componente leggero si utilizzerà poi allo stesso modo degli altri. Si potrà inserire in un Layout, oppure in un Contanier "pesante", si potranno fare tutte le cose che si facevano prima. I vantaggi sono quindi notevoli ed ottenuti con piccolissimi sforzi.

Immagini trasparenti

Una delle caratteristiche principali dei LightWeight Component è la capacità di gestire le immagini trasparenti cioè quelle in formato gif39. Per ottenere questo basterà semplicemente estendere Component invece che Canvas. Il lettore puo' verificare la differenza nel funzionamento nel caso in cui si estenda un Panel e nel caso in cui si estenda un Component. Si ottiene, infatti, la trasparenza voluta.

Conclusioni

Con questa puntata consideriamo sospeso il corso sulla gestione delle immagini in Java. La sospensione non è dovuta alla pigrizia di chi scrive ma al fatto che con la versione 1.2 del JDK sarà introdotto un nuovo package (java.2d) che aggiungerà nuove potenzialità relativamente alla gestione delle immagini in Java. In seguito avremo anche il package java.3d. Staremo a vedere!