Cet article décrit comment utiliser la classe
ImageMapTool du
VintaSoft Imaging .NET SDK pour visualiser des images de grande et très grande taille.
Prenons comme exemple une image JPEG2000 de 4 067 mégapixels (35 878 × 113 378 pixels).
Voici une capture d'écran d'une image JPEG2000 avec un zoom de 1% dans
VintaSoft Imaging Demo:
Voici une capture d'écran d'une image JPEG2000 avec un zoom de 10% dans
VintaSoft Imaging Demo:
Lors de l'affichage d'une très grande image, il est souvent difficile de déterminer la partie de l'image sur laquelle on se trouve et comment se déplacer pour atteindre l'emplacement souhaité. Ce problème peut généralement être résolu en réduisant la taille de l'image, puis… L'agrandissement de la zone souhaitée est possible. Cependant, si le décodage de l'image est gourmand en ressources, le temps d'exécution peut devenir inacceptable. L'utilisation d'une carte d'image via la classe
ImageMapTool constitue une solution simple et élégante à ce problème.
Dans la
VintaSoft Imaging Demo, la carte d'image peut être activée via le menu "View -> Image Map Settings...". La capture d'écran ci-dessous illustre ces paramètres dans la
VintaSoft Imaging Demo:
En réalité, la carte d'images est une petite visionneuse d'images située au-dessus de la visionneuse principale. Elle affiche la même image, mais avec un mode de mise à l'échelle différent. La capture d'écran ci-dessous montre les paramètres de la carte d'image avec un facteur d'échelle de 1/25 par rapport au facteur de zoom actuel de la visionneuse d'images principale:
ImageMapTool classe:
- permet de naviguer vers la partie souhaitée de l'image par un clic de souris
- permet d'afficher l'image entière ou de la redimensionner par rapport à l'échelle actuelle de l'image principale
- permet d'afficher le rectangle contenant la zone visible de l'image
- permet d'afficher le rectangle contenant la zone mise en cache de l'image
- toute instance de la classe ImageMapTool utilise le même cache et le même moteur de rendu que la visionneuse d'images principale, ce qui garantit des performances optimales.
La propriété
ImageViewer.ViewerBufferSize permet de spécifier la taille, en mégapixels, du rectangle de la zone entièrement mise en cache autour de la zone visible (rectangle jaune) dans la visionneuse d'images. La capture d'écran ci-dessous illustre les paramètres de la visionneuse d'images avec une zone mise en cache de 6 mégapixels autour de la zone visible:
De plus, pour les images de très grande taille, il est possible d'utiliser simultanément plusieurs éléments
ImageMapTool dans la visionneuse d'images, chacun avec une échelle relative différente. Ceci est possible grâce à la classe
CompositeVisualTool, qui permet de combiner les fonctionnalités de plusieurs outils visuels.
Voici un code C# qui montre comment créer 2 cartes d'image dans la visionneuse d'images:
// 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;
La capture d'écran ci-dessous montre la visionneuse d'images avec 2 cartes d'image: