Navigazione durante la visualizzazione di immagini di grandi dimensioni in .NET

Categoria blog: Imaging.NET

13.05.2020

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:
Immagine JPEG2000 molto grande con zoom dell'1% in VintaSoft Imaging Demo

Ecco lo screenshot dell'immagine JPEG2000 con zoom del 10% nella VintaSoft Imaging Demo:
Immagine JPEG2000 molto grande con zoom del 10% in '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:
Impostazioni predefinite 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:
Impostazioni della mappa immagine con fattore di scala personalizzato in VintaSoft Imaging Demo


ImageMapTool class:

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:
Impostazioni del visualizzatore di immagini con dimensioni personalizzate 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:
Visualizzatore di immagini con 2 mappe immagine in VintaSoft Imaging Demo