В этом разделе
Визуальный инструмент
HighlightTool предоставляет возможность отображать несколько наборов прямоугольных объектов в
ImageViewer-е. Наборы определяются в системе координат изображения и могут отображаться разными цветами.
3 типа используются для подсветки объектов:
- IBoundedObject - интерфейс,который должен быть реализован любым объектом, который можно выделить в ImageViewer. В интерфейсе определен метод GetBoundingBox(), который возвращает ограничивающий прямоугольник объекта в системе координат изображения (пикселях).
- ColoredObjects<T> (T должен реализовать интерфейс IBoundedObject) - класс, определяющий коллекцию объектов, реализующих интерфейс IBoundedObject. Класс имеет свойства Brush и Pen, которые используются для рисования объектов.
-
HighlightTool<T>
(T должен реализовать интерфейс IBoundedObject) - визуальный инструмент, позволяющий отображать несколько коллекций объектов типа ColoredObjects<T> в ImageViewer-е. Визуальный инструмент позволяет отображать на изображении несколько прямоугольных групп объектов разными цветами.
Вот C#/VB.NET код, который демонстрирует, как отобразить на изображении 3 набора объектов красного, зеленого и синего цвета:
public void AddRectanglesOnImageInImageViewer(Vintasoft.Imaging.UI.ImageViewer viewer)
{
System.Random random = new System.Random();
// create a set of random red rectangles
Vintasoft.Imaging.UI.VisualTools.ColoredObjects<HightlightRectangle> redObjects =
new Vintasoft.Imaging.UI.VisualTools.ColoredObjects<HightlightRectangle>(
CreateRandomHightlightRectangles(random,
viewer.Image.Width, viewer.Image.Height, 16));
// set the brush for red rectangles
redObjects.Brush = new System.Drawing.SolidBrush(
System.Drawing.Color.FromArgb(128, 255, 0, 0));
// set the pen for red rectangles
redObjects.Pen = new System.Drawing.Pen(
System.Drawing.Color.FromArgb(64, 0, 0, 0));
// create a set of random green rectangles
Vintasoft.Imaging.UI.VisualTools.ColoredObjects<HightlightRectangle> greenObjects =
new Vintasoft.Imaging.UI.VisualTools.ColoredObjects<HightlightRectangle>(
CreateRandomHightlightRectangles(random,
viewer.Image.Width, viewer.Image.Height, 16));
// set the brush for green rectangles
greenObjects.Brush = new System.Drawing.SolidBrush(
System.Drawing.Color.FromArgb(128, 0, 255, 0));
// set the pen for green rectangles
greenObjects.Pen = new System.Drawing.Pen(
System.Drawing.Color.FromArgb(64, 0, 0, 0));
// create a set of random blue rectangles
Vintasoft.Imaging.UI.VisualTools.ColoredObjects<HightlightRectangle> blueObjects =
new Vintasoft.Imaging.UI.VisualTools.ColoredObjects<HightlightRectangle>(
CreateRandomHightlightRectangles(random,
viewer.Image.Width, viewer.Image.Height, 16));
// set the brush for blue rectangles
blueObjects.Brush = new System.Drawing.SolidBrush(
System.Drawing.Color.FromArgb(128, 0, 0, 255));
// set the pen for blue rectangles
blueObjects.Pen = new System.Drawing.Pen(
System.Drawing.Color.FromArgb(64, 0, 0, 0));
// create the visual tool for highlighting rectangles on image in image viewer
Vintasoft.Imaging.UI.VisualTools.HighlightTool<HightlightRectangle> highlightTool =
new Vintasoft.Imaging.UI.VisualTools.HighlightTool<HightlightRectangle>();
// add red rectangles to the visual tool
highlightTool.Items.Add(redObjects);
// add green rectangles to the visual tool
highlightTool.Items.Add(greenObjects);
// add blue rectangles to the visual tool
highlightTool.Items.Add(blueObjects);
// set the HighlightTool as the active visual tool in image viewer,
// i.e. show the rectangles on image in image viewer
viewer.VisualTool = highlightTool;
}
/// <summary>
/// Creates an array with random rectangles on image.
/// </summary>
private HightlightRectangle[] CreateRandomHightlightRectangles(
System.Random random,
int imageWidth,
int imageHeight,
int rectCount)
{
HightlightRectangle[] objects = new HightlightRectangle[rectCount];
for (int i = 0; i < rectCount; i++)
{
int x = random.Next(imageWidth);
int y = random.Next(imageHeight);
int width = random.Next(System.Math.Min(100, imageWidth - x));
int height = random.Next(System.Math.Min(100, imageHeight - y));
objects[i] = new HightlightRectangle(
new System.Drawing.Rectangle(x, y, width, height));
}
return objects;
}
/// <summary>
/// A rectangle that must be highlighted on image in image viewer.
/// </summary>
public class HightlightRectangle : Vintasoft.Imaging.IBoundedObject
{
System.Drawing.Rectangle _rect;
public HightlightRectangle(System.Drawing.Rectangle rect)
{
_rect = rect;
}
public System.Drawing.Rectangle GetBoundingBox()
{
return _rect;
}
}
Public Sub AddRectanglesOnImageInImageViewer(viewer As Vintasoft.Imaging.UI.ImageViewer)
Dim random As New System.Random()
' create a set of random red rectangles
Dim redObjects As New Vintasoft.Imaging.UI.VisualTools.ColoredObjects(Of HightlightRectangle)(CreateRandomHightlightRectangles(random, viewer.Image.Width, viewer.Image.Height, 16))
' set the brush for red rectangles
redObjects.Brush = New System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(128, 255, 0, 0))
' set the pen for red rectangles
redObjects.Pen = New System.Drawing.Pen(System.Drawing.Color.FromArgb(64, 0, 0, 0))
' create a set of random green rectangles
Dim greenObjects As New Vintasoft.Imaging.UI.VisualTools.ColoredObjects(Of HightlightRectangle)(CreateRandomHightlightRectangles(random, viewer.Image.Width, viewer.Image.Height, 16))
' set the brush for green rectangles
greenObjects.Brush = New System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(128, 0, 255, 0))
' set the pen for green rectangles
greenObjects.Pen = New System.Drawing.Pen(System.Drawing.Color.FromArgb(64, 0, 0, 0))
' create a set of random blue rectangles
Dim blueObjects As New Vintasoft.Imaging.UI.VisualTools.ColoredObjects(Of HightlightRectangle)(CreateRandomHightlightRectangles(random, viewer.Image.Width, viewer.Image.Height, 16))
' set the brush for blue rectangles
blueObjects.Brush = New System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(128, 0, 0, 255))
' set the pen for blue rectangles
blueObjects.Pen = New System.Drawing.Pen(System.Drawing.Color.FromArgb(64, 0, 0, 0))
' create the visual tool for highlighting rectangles on image in image viewer
Dim highlightTool As New Vintasoft.Imaging.UI.VisualTools.HighlightTool(Of HightlightRectangle)()
' add red rectangles to the visual tool
highlightTool.Items.Add(redObjects)
' add green rectangles to the visual tool
highlightTool.Items.Add(greenObjects)
' add blue rectangles to the visual tool
highlightTool.Items.Add(blueObjects)
' set the HighlightTool as the active visual tool in image viewer,
' i.e. show the rectangles on image in image viewer
viewer.VisualTool = highlightTool
End Sub
''' <summary>
''' Creates an array with random rectangles on image.
''' </summary>
Private Function CreateRandomHightlightRectangles(random As System.Random, imageWidth As Integer, imageHeight As Integer, rectCount As Integer) As HightlightRectangle()
Dim objects As HightlightRectangle() = New HightlightRectangle(rectCount - 1) {}
For i As Integer = 0 To rectCount - 1
Dim x As Integer = random.[Next](imageWidth)
Dim y As Integer = random.[Next](imageHeight)
Dim width As Integer = random.[Next](System.Math.Min(100, imageWidth - x))
Dim height As Integer = random.[Next](System.Math.Min(100, imageHeight - y))
objects(i) = New HightlightRectangle(New System.Drawing.Rectangle(x, y, width, height))
Next
Return objects
End Function
''' <summary>
''' A rectangle that must be highlighted on image in image viewer.
''' </summary>
Public Class HightlightRectangle
Implements Vintasoft.Imaging.IBoundedObject
Private _rect As System.Drawing.Rectangle
Public Sub New(rect As System.Drawing.Rectangle)
_rect = rect
End Sub
Public Function GetBoundingBox() As System.Drawing.Rectangle Implements Vintasoft.Imaging.IBoundedObject.GetBoundingBox
Return _rect
End Function
End Class
Примеры использования визуального инструмента в демо приложениях
Демо приложение "Image Processing Demo" содержит визуальный инструмент HighlightTool, который используется для выделения некоторых областей изображения после выполнения сегментации изображения.
Демо приложение "OCR Demo" содержит визуальный инструмент HighlighTool, который используется для выделения распознанных слов после выполнения распознавания текста.