Questo articolo descrive come utilizzare la
classe ImageMapTool da
VintaSoft Imaging .NET SDK per visualizzare immagini di grandi e grandissime dimensioni.
Utilizziamo come esempio un'immagine JPEG2000 con dimensioni pari a 4067 megapixel (35878х113378 pixel).
Ecco lo screenshot dell'immagine JPEG2000 con zoom dell'1% in
VintaSoft Imaging Demo:
Ecco lo screenshot dell'immagine JPEG2000 con zoom del 10% nella
VintaSoft Imaging Demo:
Quando si visualizza un'immagine molto grande, è spesso difficile capire in quale parte dell'immagine ci si trova in quel momento e dove spostarsi per raggiungere la posizione desiderata. Generalmente questo inconveniente può essere risolto riducendo le dimensioni dell'immagine e poi ingrandendo l'area desiderata. Tuttavia, nei casi in cui la decodifica dell'immagine richieda un elevato impiego di risorse, può richiedere tempi di elaborazione inaccettabili. L'utilizzo di una mappa immagine tramite la classe
ImageMapTool è un modo comodo ed elegante per risolvere il problema.
Nella
VintaSoft Imaging Demo, la mappa immagine può essere abilitata tramite la voce di menu "Visualizza -> Impostazioni mappa immagine...". Lo screenshot qui sotto mostra le impostazioni della mappa immagine in
VintaSoft Imaging Demo:
In realtà, la mappa immagine è un piccolo visualizzatore di immagini, posizionato sopra il visualizzatore principale, che mostra la stessa immagine, ma con una diversa modalità di ridimensionamento. Lo screenshot seguente mostra le impostazioni della mappa immagine con un fattore di scala di 1/25 rispetto al fattore di zoom corrente del visualizzatore principale:
ImageMapTool class:
- consente di navigare alla parte desiderata dell'immagine tramite clic del mouse
- consente di visualizzare l'intera immagine o di ridimensionarla relativamente alla scala corrente dell'immagine principale
- consente di vedere il rettangolo con l'area visibile dell'immagine
- consente di vedere il rettangolo con l'area memorizzata nella cache dell'immagine
- qualsiasi istanza della classe ImageMapTool utilizza la stessa cache e lo stesso renderer del visualizzatore di immagini principale, il che garantisce le massime prestazioni
La proprietà
ImageViewer.ViewerBufferSize consente di specificare la dimensione, in megapixel, del rettangolo dell'area completamente memorizzata nella cache attorno all'area visibile (rettangolo giallo) nel visualizzatore di immagini. Lo screenshot qui sotto mostra le impostazioni del visualizzatore di immagini con una dimensione di 6 megapixel dell'area memorizzata nella cache attorno all'area visibile nel visualizzatore di immagini:
Oltre a ciò, per immagini molto molto grandi è possibile utilizzare diversi elementi
ImageMapTool nel visualizzatore di immagini contemporaneamente, ciascuna con una scala relativa diversa. Ciò è possibile grazie alla
classe CompositeVisualTool, che permette di combinare le funzionalità di diversi strumenti visivi.
Ecco il codice C# che mostra come creare 2 mappe immagine sul visualizzatore di immagini:
// create the first image map tool
Vintasoft.Imaging.UI.VisualTools.ImageMapTool imageMap1 = new Vintasoft.Imaging.UI.VisualTools.ImageMapTool();
// specify that image map must be enabled
imageMap1.Enabled = true;
// specify that image map tool must show image in best fit mode
imageMap1.Zoom = 0;
// specify that image map must have size 200x200 pixels
imageMap1.Size = new System.Drawing.Size(200, 200);
// specify that image map must be shown at the left-top corner of image viewer
imageMap1.Anchor = Vintasoft.Imaging.UI.AnchorType.Left | Vintasoft.Imaging.UI.AnchorType.Top;
// specify that image map tool border must have red color
imageMap1.CanvasPen = new System.Drawing.Pen(System.Drawing.Color.Red);
// specify that the border of image's visible region in image map must have lime color
imageMap1.VisibleRectPen = new System.Drawing.Pen(System.Drawing.Color.Lime);
// create the second image map tool
Vintasoft.Imaging.UI.VisualTools.ImageMapTool imageMap2 = new Vintasoft.Imaging.UI.VisualTools.ImageMapTool();
// specify that image map must be enabled
imageMap2.Enabled = true;
// specify that image map tool must show image in 1/25 scale from image viewer zoom
imageMap2.Zoom = 1 / 25f;
// specify that image map must have size 200x200 pixels
imageMap1.Size = new System.Drawing.Size(200, 200);
// specify that image map must be shown at the left-bottom corner of image viewer
imageMap2.Anchor = Vintasoft.Imaging.UI.AnchorType.Left | Vintasoft.Imaging.UI.AnchorType.Bottom;
// specify that image map tool border must have red color
imageMap2.CanvasPen = new System.Drawing.Pen(System.Drawing.Color.Red);
// specify that the border of image's visible region in image map must have lime color
imageMap2.VisibleRectPen = new System.Drawing.Pen(System.Drawing.Color.Lime);
// create composite visual tool that combines first and second image map tools
Vintasoft.Imaging.UI.VisualTools.CompositeVisualTool compositeVisualTool = new Vintasoft.Imaging.UI.VisualTools.CompositeVisualTool(imageMap1, imageMap2);
// set composite visual tool as current visual tool of image viewer
imageViewer1.VisualTool = compositeVisualTool;
Lo screenshot seguente mostra il visualizzatore di immagini con 2 mappe immagine: