Navigieren beim Betrachten extra großer Bilder in .NET

Blogkategorie: Bildgebung.NET

13.05.2020

Dieser Artikel beschreibt die Verwendung der ImageMapTool-Klasse aus dem VintaSoft Imaging .NET SDK zum Anzeigen großer und extra großer Bilder.

Nehmen wir als Beispiel ein JPEG2000-Bild mit einer Bildgröße von 4067 Megapixeln (35878 × 113378 Pixel).
Hier ist der Screenshot von JPEG2000-Bild mit 1% Zoom in VintaSoft Imaging Demo:
Very large JPEG2000 image with 1% zoom in VintaSoft Imaging Demo

Hier ist der Screenshot des JPEG2000-Bildes mit 10% Zoom in VintaSoft Imaging Demo:
Very large JPEG2000 image with 10% zoom in VintaSoft Imaging Demo

Beim Betrachten sehr großer Bilder ist es oft schwierig zu erkennen, in welchem Bildausschnitt man sich gerade befindet und wohin man navigieren muss, um die gewünschte Position zu erreichen. Normalerweise lässt sich dieses Problem beheben, indem man das Bild verkleinert und anschließend den gewünschten Bereich vergrößert. Ist die Bilddekodierung jedoch ressourcenintensiv, kann dies unakzeptabel lange dauern. Die Verwendung einer Image-Map mithilfe der Klasse ImageMapTool ist eine komfortable und elegante Lösung für dieses Problem.

In der VintaSoft Imaging Demo kann die Image-Map über den Menüpunkt "Ansicht -> Image-Map-Einstellungen..." aktiviert werden. Der folgende Screenshot zeigt die Image-Map-Einstellungen in VintaSoft Imaging Demo:
Default image map settings in VintaSoft Imaging Demo


Die Image Map ist ein kleiner Bildbetrachter, der sich über dem Hauptbildbetrachter befindet und dasselbe Bild in einem anderen Skalierungsmodus anzeigt. Der folgende Screenshot zeigt die Einstellungen der Bildkarte mit einem Skalierungsfaktor von 1/25 relativ zum aktuellen Zoomfaktor des Hauptbildbetrachters:
Image map settings with custom scale factor in VintaSoft Imaging Demo


ImageMapTool-Klasse:

Die Eigenschaft ImageViewer.ViewerBufferSize ermöglicht es, die Größe des vollständig zwischengespeicherten Bereichs um den sichtbaren Bereich (gelbes Rechteck) im Bildbetrachter in Megapixeln festzulegen. Der folgende Screenshot zeigt die Einstellungen des Bildbetrachters mit einer Größe von 6 Megapixeln für den zwischengespeicherten Bereich um den sichtbaren Bereich:
Image viewer settings with custom size of cached area around visible area in image viewer



Außerdem Bei sehr großen Bildern ist es möglich, mehrere ImageMapTool-Elemente gleichzeitig im Bildbetrachter zu verwenden, jedes mit unterschiedlicher relativer Skalierung. Dies ist dank der CompositeVisualTool-Klasse möglich, die die Funktionalität mehrerer visueller Werkzeuge kombiniert.
Hier ist C#-Code, der zeigt, wie 2 Bildkarten im Bildbetrachter erstellt werden:
// 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;

Der folgende Screenshot zeigt den Bildbetrachter mit 2 Bildkarten:
Image viewer with 2 image maps in VintaSoft Imaging Demo