Immagini dinamiche con Deep Zoom e Silverlight

L'implementazione di Deep Zoom in Silverlight rappresenta indubbiamente un modo interessante di visualizzazione delle immagini, sia di medie che di grandi risoluzioni. Infatti, anche con immagini di grandezza tradizionale per il web, con Deep Zoom possiamo aggiungere un alto livello di interattività per l'utente e realizzare interessanti effetti.

Come abbiamo introdotto nell'articolo http://www.silverlightitalia.com/articoli/silverlight/Deepzoom-Silverlight-2.0.aspx, Deep Zoom si basa sul principio di elaborazione in tempo reale di una serie di tessere che compongono l'immagine originale. Per avere prestazioni adeguate all'uso, i progettisti del plug-in richiedono che tali tessere siano pre-elaborate attraverso il tool Deep Zoom Composer, con il quale possiamo realizzare la nostra composizione delle immagini, che il programma esporterà per noi seguendo l'articolata struttura richiesta dalla tecnologia.

L'esigenza di pre-elaborare le immagini con un tool esterno può essere un vincolo in quei progetti in cui diamo all'utente la possibilità di pubblicare le proprie immagini: per tale esigenza possiamo generare dinamicamente le varie tessere attraverso la libreria DeepZoomTools.dll, distribuita insieme al Composer, liberamente utilizzabile in produzione.
L'assembly si trova nella cartella di installazione del tool e, benché non sia documentata, una volta referenziata in una applicazione web, il suo utilizzo è molto semplice:

VB.NET
Dim _pathList As New List(Of String)() 
'directory dove sono presenti le immagini 
Dim _dir As New DirectoryInfo(HttpContext.Current.Server.MapPath("Images")) 
Try 
  'immagini PNG presenti nella directory 
  Dim _files As FileInfo() = _dir.GetFiles("*.png") 
  'collezione di path completi delle immagini 
  For Each _file In _files 
    _pathList.Add(String.Format("{0}/{1}", _dir.FullName, _file.Name)) 
  Next 
Catch 
End Try 
Dim _collCreator As New Microsoft.DeepZoomTools.CollectionCreator() 
'creazione della piramide delle immagini specificate nella lista e 
'del file XML relativo 
_collCreator.Create(_pathList, Path.Combine(_dir.FullName, "Images"))

C#
List<string> _pathList = new List<string>(); 
//directory dove sono presenti le immagini 
DirectoryInfo _dir = new DirectoryInfo(HttpContext.Current.Server.MapPath("Images")); 
try 
{ 
  //immagini PNG presenti nella directory 
  FileInfo[] _files = _dir.GetFiles("*.png"); 
 
  //collezione di path completi delle immagini 
  foreach (var _file in _files) 
  { 
    _pathList.Add(string.Format("{0}/{1}", _dir.FullName, _file.Name)); 
  } 
} 
catch { } 
Microsoft.DeepZoomTools.CollectionCreator _collCreator = new Microsoft.DeepZoomTools.CollectionCreator(); 
//creazione della piramide delle immagini specificate nella lista e 
//del file XML relativo 
_collCreator.Create(_pathList, Path.Combine(_dir.FullName, "Images"));

Nello snippet precedente recuperiamo le immagini PNG di una cartella del sito web, costruiamo il percorso e lo passiamo come parametro al metodo Create dell'oggetto CollectionCreator.
Potremmo far eseguire il codice all'interno di un HttpHandler o anche in una semplice pagina ASP.NET, da richiamare al momento della necessità di creare le gerarchie delle immagini.

Deep Zoom per Silverlight è stato trattato nel capitolo 12 del libro "Silverlight 3.0 - Guida Completa"
di Daniele Bochicchio, Cristian Civera, Alessio Leoncini e Marco Leoncini.
http://books.aspitalia.com/Silverlight-3.0/

E' possibile leggere un'anteprima del capitolo 10 all'indirizzo:
http://www.silverlightitalia.com/articoli/silverlight/effetti-speciali-immagini-silverlight-3.0.aspx

IL CONTENUTO
IN PRIMO PIANO
MEDIA
IN EVIDENZA
MISC