Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.MedicalViewer
Private Class MedicalViewerForm : Inherits Form
Private _medicalViewer As MedicalViewer
Public label As Label
Private Sub MedicalViewerForm_SizeChanged(ByVal sender As Object, ByVal e As EventArgs)
_medicalViewer.Size = New Size(Me.ClientRectangle.Right, Me.ClientRectangle.Bottom)
End Sub
Public Sub New()
Dim _codecs As RasterCodecs = New RasterCodecs()
Dim _image As RasterImage
AddHandler SizeChanged, AddressOf MedicalViewerForm_SizeChanged
' Create the medical viewer and adjust the size and the location.
_medicalViewer = New MedicalViewer(1, 2)
_medicalViewer.Location = New Point(0, 0)
_medicalViewer.Size = New Size(Me.ClientRectangle.Right, Me.ClientRectangle.Bottom - 10)
' Load an image and then add it to the control.
'_image = _codecs.Load(LeadtoolsExamples.Common.ImagesPath.Path + "xa.dcm");
Dim cell As MedicalViewerMultiCell = New MedicalViewerMultiCell(Nothing, True, 1, 1)
_medicalViewer.Cells.Add(cell)
' add some actions that will be used to change the properties of the images inside the control.
cell.AddAction(MedicalViewerActionType.WindowLevel)
cell.AddAction(MedicalViewerActionType.Alpha)
cell.AddAction(MedicalViewerActionType.Offset)
' assign the added actions to a mouse button, meaning that when the user clicks and drags the mouse button, the associated action will be activated.
cell.SetAction(MedicalViewerActionType.WindowLevel, MedicalViewerMouseButtons.Left, MedicalViewerActionFlags.Active)
cell.SetAction(MedicalViewerActionType.Alpha, MedicalViewerMouseButtons.Middle, MedicalViewerActionFlags.Active)
cell.SetAction(MedicalViewerActionType.Offset, MedicalViewerMouseButtons.Right, MedicalViewerActionFlags.Active)
cell.Rows = 1
cell.Columns = 1
cell.FitImageToCell = True
' adjust some properties of the cell and add some tags.
_medicalViewer.Cells(0).SetTag(2, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.UserData, "EX. ID 230-36-5448")
_medicalViewer.Cells(0).SetTag(4, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Frame)
_medicalViewer.Cells(0).SetTag(6, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Scale)
_medicalViewer.Cells(0).SetTag(2, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.WindowLevelData)
_medicalViewer.Cells(0).SetTag(1, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.FieldOfView)
' Load another image and then add it to the control.
_image = _codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "mr.dcm"))
_medicalViewer.Cells.Add(New MedicalViewerMultiCell(_image, True, 2, 2))
' add some actions that will be used to change the properties of the images inside the control.
_medicalViewer.Cells(1).AddAction(MedicalViewerActionType.WindowLevel)
_medicalViewer.Cells(1).AddAction(MedicalViewerActionType.Alpha)
_medicalViewer.Cells(1).AddAction(MedicalViewerActionType.Offset)
_medicalViewer.Cells(1).AddAction(MedicalViewerActionType.RectangleRegion)
' assign the added actions to a mouse button, meaning that when the user clicks and drags the mouse button, the associated action will be activated.
_medicalViewer.Cells(1).SetAction(MedicalViewerActionType.RectangleRegion, MedicalViewerMouseButtons.Left, MedicalViewerActionFlags.Active)
_medicalViewer.Cells(1).SetAction(MedicalViewerActionType.Alpha, MedicalViewerMouseButtons.Middle, MedicalViewerActionFlags.Active)
_medicalViewer.Cells(1).SetAction(MedicalViewerActionType.Offset, MedicalViewerMouseButtons.Right, MedicalViewerActionFlags.Active)
' adjust some properties of the cell and add some tags.
_medicalViewer.Cells(1).SetTag(2, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.UserData, "EX. ID 230-36-5448")
_medicalViewer.Cells(1).SetTag(4, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Frame)
_medicalViewer.Cells(1).SetTag(6, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Scale)
_medicalViewer.Cells(1).SetTag(2, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.WindowLevelData)
_medicalViewer.Cells(1).SetTag(1, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.FieldOfView)
label = New Label()
label.Location = New Point(0, Me.ClientRectangle.Bottom - 10)
label.Size = New Size(Me.ClientRectangle.Right, 10)
label.Text = "Here the statistical information will appear"
Controls.Add(_medicalViewer)
_medicalViewer.Dock = DockStyle.Fill
End Sub
Public ReadOnly Property Viewer() As MedicalViewer
Get
Return _medicalViewer
End Get
End Property
End Class
Private Function GetMedicalControl() As MedicalViewerForm
Return New MedicalViewerForm()
End Function
' This example shows how to use the low memory usage feature to display a medical image with multiple pages. it will also invert all the bitmap to show the invert function works even if the bitmap is not loaded yet.
<TestMethod()> _
Public Sub MedicalViewerLowMemoryUsageExample()
Dim myForm As MedicalViewerForm = GetMedicalControl()
Dim medicalViewer As MedicalViewer = myForm.Viewer
Dim cell As MedicalViewerMultiCell = CType(medicalViewer.Cells(0), MedicalViewerMultiCell)
Dim codecs As RasterCodecs = New RasterCodecs()
Dim i As Integer = 0
Dim count As Integer
Dim info As CodecsImageInfo
Dim fileName As String = Path.Combine(LEAD_VARS.ImagesDir, "xa.dcm")
info = codecs.GetInformation(fileName, True)
count = info.TotalPages
Dim a As MedicalViewerImageInformation() = New MedicalViewerImageInformation(count - 1) {}
i = 0
Do While i < count
info = codecs.GetInformation(fileName, True, i + 1)
a(i) = New MedicalViewerImageInformation()
a(i).ImageHeight = info.Height
a(i).ImageWidth = info.Width
a(i).XResolution = info.XResolution
a(i).YResolution = info.YResolution
i += 1
Loop
AddHandler cell.ActiveSubCellChanged, AddressOf medicalViewer_ActiveSubCellChanged1
AddHandler cell.FramesRequested, AddressOf medicalViewer_FramesRequested
cell.EnableLowMemoryUsage(2, count, a)
myForm.ShowDialog()
End Sub
Private Sub medicalViewer_ActiveSubCellChanged1(ByVal sender As Object, ByVal e As MedicalViewerActiveSubCellChangedEventArgs)
Dim imageInformation As String = ""
Dim cell As MedicalViewerMultiCell = CType(sender, MedicalViewerMultiCell)
If cell.VirtualImage(e.SubCellIndex).ImageExist Then
imageInformation = "Image bit per pixel = " & cell.VirtualImage(e.SubCellIndex).Image.BitsPerPixel.ToString()
End If
CType(cell.ParentViewer.Parent, MedicalViewerForm).label.Text = imageInformation & " HasRegion = " & cell.VirtualImage(e.SubCellIndex).HasRegion
End Sub
Private Sub medicalViewer_FramesRequested(ByVal sender As Object, ByVal e As MedicalViewerRequestedFramesInformationEventArgs)
Dim cell As MedicalViewerMultiCell = CType(sender, MedicalViewerMultiCell)
Dim fileName As String = Path.Combine(LEAD_VARS.ImagesDir, "xa.dcm")
Dim _codecs As RasterCodecs = New RasterCodecs()
Dim i As Integer
Dim b As RasterImage
If e.RequestedFramesIndexes.Length > 0 Then
b = _codecs.Load(fileName, 0, CodecsLoadByteOrder.BgrOrGray, e.RequestedFramesIndexes(0) + 1, e.RequestedFramesIndexes(0) + 1)
Else
Return
End If
i = 1
Do While i < e.RequestedFramesIndexes.Length
b.AddPage(_codecs.Load(fileName, 0, CodecsLoadByteOrder.BgrOrGray, e.RequestedFramesIndexes(i) + 1, e.RequestedFramesIndexes(i) + 1))
i += 1
Loop
cell.SetRequestedImage(b, e.RequestedFramesIndexes, MedicalViewerSetImageOptions.Insert)
End Sub
Public NotInheritable Class LEAD_VARS
Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
using Leadtools;
using Leadtools.Codecs;
using Leadtools.MedicalViewer;
class MedicalViewerForm : Form
{
private MedicalViewer _medicalViewer;
public Label label;
void MedicalViewerForm_SizeChanged(object sender, EventArgs e)
{
_medicalViewer.Size = new Size(this.ClientRectangle.Right, this.ClientRectangle.Bottom);
}
public MedicalViewerForm()
{
RasterCodecs _codecs = new RasterCodecs();
RasterImage _image;
this.SizeChanged += new EventHandler(MedicalViewerForm_SizeChanged);
// Create the medical viewer and adjust the size and the location.
_medicalViewer = new MedicalViewer(1, 2);
_medicalViewer.Location = new Point(0, 0);
_medicalViewer.Size = new Size(this.ClientRectangle.Right, this.ClientRectangle.Bottom - 10);
// Load an image and then add it to the control.
//_image = _codecs.Load(LeadtoolsExamples.Common.ImagesPath.Path + "xa.dcm");
MedicalViewerMultiCell cell = new MedicalViewerMultiCell(null, true, 1, 1);
_medicalViewer.Cells.Add(cell);
// add some actions that will be used to change the properties of the images inside the control.
cell.AddAction(MedicalViewerActionType.WindowLevel);
cell.AddAction(MedicalViewerActionType.Alpha);
cell.AddAction(MedicalViewerActionType.Offset);
// assign the added actions to a mouse button, meaning that when the user clicks and drags the mouse button, the associated action will be activated.
cell.SetAction(MedicalViewerActionType.WindowLevel, MedicalViewerMouseButtons.Left, MedicalViewerActionFlags.Active);
cell.SetAction(MedicalViewerActionType.Alpha, MedicalViewerMouseButtons.Middle, MedicalViewerActionFlags.Active);
cell.SetAction(MedicalViewerActionType.Offset, MedicalViewerMouseButtons.Right, MedicalViewerActionFlags.Active);
cell.Rows = 1;
cell.Columns = 1;
cell.FitImageToCell = true;
// adjust some properties of the cell and add some tags.
_medicalViewer.Cells[0].SetTag(2, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.UserData, "EX. ID 230-36-5448");
_medicalViewer.Cells[0].SetTag(4, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Frame);
_medicalViewer.Cells[0].SetTag(6, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Scale);
_medicalViewer.Cells[0].SetTag(2, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.WindowLevelData);
_medicalViewer.Cells[0].SetTag(1, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.FieldOfView);
// Load another image and then add it to the control.
_image = _codecs.Load(Path.Combine(LEAD_VARS.ImagesDir,"mr.dcm"));
_medicalViewer.Cells.Add(new MedicalViewerMultiCell(_image, true, 2, 2));
// add some actions that will be used to change the properties of the images inside the control.
_medicalViewer.Cells[1].AddAction(MedicalViewerActionType.WindowLevel);
_medicalViewer.Cells[1].AddAction(MedicalViewerActionType.Alpha);
_medicalViewer.Cells[1].AddAction(MedicalViewerActionType.Offset);
_medicalViewer.Cells[1].AddAction(MedicalViewerActionType.RectangleRegion);
// assign the added actions to a mouse button, meaning that when the user clicks and drags the mouse button, the associated action will be activated.
_medicalViewer.Cells[1].SetAction(MedicalViewerActionType.RectangleRegion, MedicalViewerMouseButtons.Left, MedicalViewerActionFlags.Active);
_medicalViewer.Cells[1].SetAction(MedicalViewerActionType.Alpha, MedicalViewerMouseButtons.Middle, MedicalViewerActionFlags.Active);
_medicalViewer.Cells[1].SetAction(MedicalViewerActionType.Offset, MedicalViewerMouseButtons.Right, MedicalViewerActionFlags.Active);
// adjust some properties of the cell and add some tags.
_medicalViewer.Cells[1].SetTag(2, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.UserData, "EX. ID 230-36-5448");
_medicalViewer.Cells[1].SetTag(4, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Frame);
_medicalViewer.Cells[1].SetTag(6, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Scale);
_medicalViewer.Cells[1].SetTag(2, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.WindowLevelData);
_medicalViewer.Cells[1].SetTag(1, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.FieldOfView);
label = new Label();
label.Location = new Point(0, this.ClientRectangle.Bottom - 10);
label.Size = new Size(this.ClientRectangle.Right, 10);
label.Text = "Here the statistical information will appear";
Controls.Add(_medicalViewer);
_medicalViewer.Dock = DockStyle.Fill;
}
public MedicalViewer Viewer
{
get { return _medicalViewer; }
}
}
MedicalViewerForm GetMedicalControl()
{
return new MedicalViewerForm();
}
// This example shows how to use the low memory usage feature to display a medical image with multiple pages. it will also invert all the bitmap to show the invert function works even if the bitmap is not loaded yet.
[TestMethod]
public void MedicalViewerLowMemoryUsageExample()
{
MedicalViewerForm myForm = GetMedicalControl();
MedicalViewer medicalViewer = myForm.Viewer;
MedicalViewerMultiCell cell = (MedicalViewerMultiCell)(medicalViewer.Cells[0]);
RasterCodecs codecs = new RasterCodecs();
int i = 0;
int count;
CodecsImageInfo info;
string fileName = Path.Combine(LEAD_VARS.ImagesDir,"xa.dcm");
info = codecs.GetInformation(fileName, true);
count = info.TotalPages;
MedicalViewerImageInformation[] a = new MedicalViewerImageInformation[count];
for (i = 0; i < count; i++)
{
info = codecs.GetInformation(fileName, true, i + 1);
a[i] = new MedicalViewerImageInformation();
a[i].ImageHeight = info.Height;
a[i].ImageWidth = info.Width;
a[i].XResolution = info.XResolution;
a[i].YResolution = info.YResolution;
}
cell.ActiveSubCellChanged += new EventHandler<MedicalViewerActiveSubCellChangedEventArgs>(medicalViewer_ActiveSubCellChanged1);
cell.FramesRequested += new EventHandler<MedicalViewerRequestedFramesInformationEventArgs>(medicalViewer_FramesRequested);
cell.EnableLowMemoryUsage(2, count, a);
myForm.ShowDialog();
}
void medicalViewer_ActiveSubCellChanged1(object sender, MedicalViewerActiveSubCellChangedEventArgs e)
{
string imageInformation = "";
MedicalViewerMultiCell cell = (MedicalViewerMultiCell)sender;
if (cell.VirtualImage[e.SubCellIndex].ImageExist)
{
imageInformation = "Image bit per pixel = " + cell.VirtualImage[e.SubCellIndex].Image.BitsPerPixel.ToString();
}
((MedicalViewerForm)(cell.ParentViewer.Parent)).label.Text = imageInformation + " HasRegion = " + cell.VirtualImage[e.SubCellIndex].HasRegion;
}
void medicalViewer_FramesRequested(object sender, MedicalViewerRequestedFramesInformationEventArgs e)
{
MedicalViewerMultiCell cell = (MedicalViewerMultiCell)(sender);
string fileName =Path.Combine(LEAD_VARS.ImagesDir,"xa.dcm");
RasterCodecs _codecs = new RasterCodecs();
int i;
RasterImage b;
if (e.RequestedFramesIndexes.Length > 0)
{
b = _codecs.Load(fileName, 0, CodecsLoadByteOrder.BgrOrGray, e.RequestedFramesIndexes[0] + 1, e.RequestedFramesIndexes[0] + 1);
}
else
return;
for (i = 1; i < e.RequestedFramesIndexes.Length; i++)
{
b.AddPage(_codecs.Load(fileName, 0, CodecsLoadByteOrder.BgrOrGray, e.RequestedFramesIndexes[i] + 1, e.RequestedFramesIndexes[i] + 1));
}
cell.SetRequestedImage(b, e.RequestedFramesIndexes, MedicalViewerSetImageOptions.Insert);
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}