Навигация при просмотре очень больших изображений в .NET

Категория: Imaging.NET

13 мая 2020

В этой статье рассказывается как использовать класс Vintasoft.Imaging.UI.VisualTools.ImageMapTool из VintaSoft Imaging .NET SDK для навигации по большим и очень большим изображениям.

В качестве примера возьмем JPEG2000 изображение размером 4067 мегапикселей (35878х113378 пикселей).
Вот как выглядит изображение в масштабе 1% в VintaSoft Imaging Demo:
Очень большое JPEG2000 изображение в масштабе 1% в VintaSoft Imaging Demo

Вот как выглядит изображение в масштабе 10% в VintaSoft Imaging Demo:
Очень большое JPEG2000 изображение в масштабе 10% в VintaSoft Imaging Demo

При просмотре очень большого изображения часто сложно определить, какую часть изображения Вы рассматриваете в данный момент и куда нужно двигаться, чтобы посмотреть требуемую часть изображения.
В общем случае для решения этой проблемы можно уменьшить масштаб изображения, чтобы стало понятно где Вы находитесь, переместиться в нужную точку изображения и увеличить изображение до нужного масштаба. Но данное решение может потребовать большого количества вычислительных ресурсов, потому что требуется отобразить очень большое изображение в разных масштабах.
Использование карты изображения с помощью класса Vintasoft.Imaging.UI.VisualTools.ImageMapTool является удобным и эффективным решением проблемы.

В VintaSoft Imaging Demo включить карту изображения в просмотрщике изображения можно с помощью меню "View -> Image Map Settings...".
Вот как выглядят настройки карты изображения:
Стандартные настройки карты изображения в VintaSoft Imaging Demo


В реальности карта изображения является маленьким просмотрщиком изображения, который расположен над главным просмотрщиком изображения и показывает изображение из главного просмотрщика изображения, но с другим масштабом. Вот настройки карты изображения с масштабом 1/25 к масштабу главного просмотрщика изображения:
Настройки карты изображения с масштабом 1/25 к масштабу главного просмотрщика изображения


Класс Vintasoft.Imaging.UI.VisualTools.ImageMapTool:

Свойство Vintasoft.Imaging.UI.ImageViewer.ViewerBufferSize позволяет задать размер, в мегапикселях, кешируемой области изображения вокруг видимой области в просмотрщике изображений. Вот настройки просмотрщика изображений с размером кешированной области изображения вокруг видимой области равной 6 магапикселов:
Размер кешированной области вокруг видимой области изображения в просмотрщике изображений


Кроме того, для очень очень больших изображений можно использовать несколько карт изображения на главном просмотрщике изображения, причем каждая карта со своим масштабом. Для использования нескольких карт изображения необходимо использовать класс Vintasoft.Imaging.UI.VisualTools.CompositeVisualTool, который позволяет объединить несколько визуальных инструментов.
Вот C# код, который позволяет создать две карты изображения в просмотрщике изображений:
// создать первый визуальный инструмент карту изображения
Vintasoft.Imaging.UI.VisualTools.ImageMapTool imageMap1 = new Vintasoft.Imaging.UI.VisualTools.ImageMapTool();
// указать, что карта изображения должна быть включена
imageMap1.Enabled = true;
// указать, что визуальный инструмент карта изображения должен показывать изображение в режиме BestFit
imageMap1.Zoom = 0;
// указать, что карта изображения должна иметь размер 200x200 пикселей
imageMap1.Size = new System.Drawing.Size(200, 200);
// указать, что карта изображения должна быть отображена в левом-верхнем углу просмотрщика изображений
imageMap1.Anchor = Vintasoft.Imaging.UI.AnchorType.Left | Vintasoft.Imaging.UI.AnchorType.Top;
// указать, что бордюр карты изображения должен иметь красный цвет
imageMap1.CanvasPen = new System.Drawing.Pen(System.Drawing.Color.Red);
// указать, что бордюр области, которая видна в просмотрщике изображений, на карте изображения должен иметь салатовый цвет
imageMap1.VisibleRectPen = new System.Drawing.Pen(System.Drawing.Color.Lime);

// создать второй визуальный инструмент карту изображения
Vintasoft.Imaging.UI.VisualTools.ImageMapTool imageMap2 = new Vintasoft.Imaging.UI.VisualTools.ImageMapTool();
// указать, что карта изображения должна быть включена
imageMap2.Enabled = true;
// указать, что визуальный инструмент карта изображения должен показывать изображение с масштабом 1/25 к масштабу в просмотрщике изображений
imageMap2.Zoom = 1 / 25f;
// указать, что карта изображения должна иметь размер 200x200 пикселей
imageMap1.Size = new System.Drawing.Size(200, 200);
// указать, что карта изображения должна быть отображена в левом-нижнем углу просмотрщика изображений
imageMap2.Anchor = Vintasoft.Imaging.UI.AnchorType.Left | Vintasoft.Imaging.UI.AnchorType.Bottom;
// указать, что бордюр карты изображения должен иметь красный цвет
imageMap2.CanvasPen = new System.Drawing.Pen(System.Drawing.Color.Red);
// указать, что бордюр области, которая видна в просмотрщике изображений, на карте изображения должен иметь салатовый цвет
imageMap2.VisibleRectPen = new System.Drawing.Pen(System.Drawing.Color.Lime);

// создать композитный визуальный инструмент, который позволяет использовать вместе первую и вторую карты изображения
Vintasoft.Imaging.UI.VisualTools.CompositeVisualTool compositeVisualTool = new Vintasoft.Imaging.UI.VisualTools.CompositeVisualTool(imageMap1, imageMap2);

// установить композитный визуальный инструмент как текущий визуальный инструмент в просмотрщике изображений
imageViewer1.VisualTool = compositeVisualTool;

Вот просмотрщик изображений с двумя картами изображения:
Просмотрщик изображений с двумя картами изображения