Optional delegate method for additional processing.
Imports Leadtools
Imports Leadtools.Dicom
Imports Leadtools.Medical3D
Imports Leadtools.Codecs
Imports Leadtools.MedicalViewer
Imports Leadtools.Annotations
Imports Leadtools.ImageProcessing.Core
Private Class MedicalViewerCutLineForm : Inherits Form
Private _medicalViewer As MedicalViewer
Private _seriesManager As MedicalViewerSeriesManager
Private Sub MedicalViewerCutLineForm_SizeChanged(ByVal sender As Object, ByVal e As EventArgs)
_medicalViewer.Size = New Size(Me.ClientRectangle.Right, Me.ClientRectangle.Bottom)
End Sub
Public Sub New(ByVal output As MedicalViewerSeriesManager)
Dim _codecs As RasterCodecs = New RasterCodecs()
AddHandler SizeChanged, AddressOf MedicalViewerCutLineForm_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)
_seriesManager = output
Dim cell As MedicalViewerMultiCell = New MedicalViewerMultiCell(Nothing, True, 1, 1)
Dim index As Integer
Dim count As Integer = output.Stacks(0).Items.Count
Dim codecsInformation As CodecsImageInfo
' Get the image information for each frame and send them to the low memory usage function.
Dim imageInformation As MedicalViewerImageInformation() = New MedicalViewerImageInformation(count - 1) {}
index = 0
Do While index < count
codecsInformation = _codecs.GetInformation(CStr(output.Stacks(0).Items(index).Data), True)
imageInformation(index) = New MedicalViewerImageInformation()
imageInformation(index).ImageHeight = codecsInformation.Width
imageInformation(index).ImageWidth = codecsInformation.Width
imageInformation(index).XResolution = codecsInformation.XResolution
imageInformation(index).YResolution = codecsInformation.YResolution
index += 1
Loop
AddHandler cell.Data3DRequested, AddressOf cell_Data3DRequested
AddHandler cell.Data3DFrameRequested, AddressOf cell_Data3DFrameRequested
AddHandler cell.FramesRequested, AddressOf cell_FramesRequested
AddHandler FormClosing, AddressOf MedicalViewerCutLineForm_FormClosing
cell.EnableLowMemoryUsage(2, count, imageInformation)
_medicalViewer.Cells.Add(cell)
cell.PixelSpacing = output.Stacks(0).PixelSpacing
index = 0
Do While index < count
cell.SetImagePosition(index, output.Stacks(0).Items(index).ImagePosition, (index = count - 1))
index += 1
Loop
' 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)
' 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)
' Set the image DICOM data
cell.PixelSpacing = output.Stacks(0).PixelSpacing
' Create some cells that will hold the derivative images resulted from the cut-planes.
Dim singleDerivativeCell As MedicalViewerCell = New MedicalViewerCell()
Dim firstDerivativeCell As MedicalViewerCell = New MedicalViewerCell()
Dim secondDerivativeCell As MedicalViewerCell = New MedicalViewerCell()
AddHandler cell.DerivativeGenerated, AddressOf cell_DerivativeGenerated
' create a single cut-plane and double cut-plane.
cell.ReferenceLine.CutLines.Add(New MedicalViewerPlaneCutLine(singleDerivativeCell))
cell.ReferenceLine.DoubleCutLines.Add(New MedicalViewerDoublePlaneCutLine(firstDerivativeCell, secondDerivativeCell))
_medicalViewer.Cells.Add(singleDerivativeCell)
_medicalViewer.Cells.Add(firstDerivativeCell)
_medicalViewer.Cells.Add(secondDerivativeCell)
Controls.Add(_medicalViewer)
_medicalViewer.Dock = DockStyle.Fill
End Sub
Private Sub MedicalViewerCutLineForm_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)
End Sub
Private Sub cell_Data3DRequested(ByVal sender As Object, ByVal e As MedicalViewerData3DRequestedEventArgs)
e.Succeed = Medical3DEngine.Provide3DInformation(e)
End Sub
Private Sub cell_Data3DFrameRequested(ByVal sender As Object, ByVal e As MedicalViewer3DFrameRequestedEventArgs)
Dim _codecs As RasterCodecs = New RasterCodecs()
e.Image = _codecs.Load(CStr(_seriesManager.Stacks(0).Items(e.ImageIndex).Data))
_codecs.Dispose()
End Sub
Private Sub cell_DerivativeGenerated(ByVal sender As Object, ByVal e As MedicalViewerDerivativeGeneratedEventArgs)
e.DerivativeCell.ShowCellBoundaries = True
e.DerivativeCell.ReferenceLine.Enabled = True
End Sub
Private Sub cell_FramesRequested(ByVal sender As Object, ByVal e As MedicalViewerRequestedFramesInformationEventArgs)
Dim cell As MedicalViewerMultiCell = CType(sender, MedicalViewerMultiCell)
Dim _codecs As RasterCodecs = New RasterCodecs()
Dim i As Integer
Dim image As RasterImage
Dim fileName As String
If e.RequestedFramesIndexes.Length > 0 Then
fileName = CStr(_seriesManager.Stacks(0).Items(e.RequestedFramesIndexes(0)).Data)
image = _codecs.Load(fileName)
Else
Return
End If
i = 1
Do While i < e.RequestedFramesIndexes.Length
fileName = CStr(_seriesManager.Stacks(0).Items(e.RequestedFramesIndexes(i)).Data)
image.AddPage(_codecs.Load(fileName))
i += 1
Loop
cell.SetRequestedImage(image, e.RequestedFramesIndexes, MedicalViewerSetImageOptions.Insert)
End Sub
Public ReadOnly Property Viewer() As MedicalViewer
Get
Return _medicalViewer
End Get
End Property
End Class
Private Function GetMedicalViewerCutLineControl() As MedicalViewerCutLineForm
Dim form As MedicalViewerSeriesManagerFrom = New MedicalViewerSeriesManagerFrom()
Dim output As MedicalViewerSeriesManager = form.LoadJamesHead()
Return New MedicalViewerCutLineForm(output)
End Function
' This example changes the default window level value by decrease the width by 100. Then resets the images based on the new value.
Public Sub MedicalViewerCutLineExample()
Dim myForm As MedicalViewerCutLineForm = GetMedicalViewerCutLineControl()
Dim medicalViewer As MedicalViewer = myForm.Viewer
myForm.ShowDialog()
End Sub
using Leadtools;
using Leadtools.Dicom;
using Leadtools.Medical3D;
using Leadtools.Codecs;
using Leadtools.MedicalViewer;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
using Leadtools.ImageProcessing.Color;
using Leadtools.Annotations;
class MedicalViewerCutLineForm : Form
{
private MedicalViewer _medicalViewer;
private MedicalViewerSeriesManager _seriesManager;
void MedicalViewerCutLineForm_SizeChanged(object sender, EventArgs e)
{
_medicalViewer.Size = new Size(this.ClientRectangle.Right, this.ClientRectangle.Bottom);
}
public MedicalViewerCutLineForm(MedicalViewerSeriesManager output)
{
RasterCodecs _codecs = new RasterCodecs();
this.SizeChanged += new EventHandler(MedicalViewerCutLineForm_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);
_seriesManager = output;
MedicalViewerMultiCell cell = new MedicalViewerMultiCell(null, true, 1, 1);
int index;
int count = output.Stacks[0].Items.Count;
CodecsImageInfo codecsInformation;
// Get the image information for each frame and send them to the low memory usage function.
MedicalViewerImageInformation[] imageInformation = new MedicalViewerImageInformation[count];
for (index = 0; index < count; index++)
{
codecsInformation = _codecs.GetInformation((string)(output.Stacks[0].Items[index].Data), true);
imageInformation[index] = new MedicalViewerImageInformation();
imageInformation[index].ImageHeight = codecsInformation.Width;
imageInformation[index].ImageWidth = codecsInformation.Width;
imageInformation[index].XResolution = codecsInformation.XResolution;
imageInformation[index].YResolution = codecsInformation.YResolution;
}
cell.Data3DRequested += new EventHandler<MedicalViewerData3DRequestedEventArgs>(cell_Data3DRequested);
cell.Data3DFrameRequested += new EventHandler<MedicalViewer3DFrameRequestedEventArgs>(cell_Data3DFrameRequested);
cell.FramesRequested +=new EventHandler<MedicalViewerRequestedFramesInformationEventArgs>(cell_FramesRequested);
FormClosing += new FormClosingEventHandler(MedicalViewerCutLineForm_FormClosing);
cell.EnableLowMemoryUsage(2, count, imageInformation);
_medicalViewer.Cells.Add(cell);
cell.PixelSpacing = output.Stacks[0].PixelSpacing;
for (index = 0; index < count; index++)
{
cell.SetImagePosition(index, output.Stacks[0].Items[index].ImagePosition, (index == count - 1));
}
// 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);
// 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);
// Set the image DICOM data
cell.PixelSpacing = output.Stacks[0].PixelSpacing;
// Create some cells that will hold the derivative images resulted from the cut-planes.
MedicalViewerCell singleDerivativeCell = new MedicalViewerCell();
MedicalViewerCell firstDerivativeCell = new MedicalViewerCell();
MedicalViewerCell secondDerivativeCell = new MedicalViewerCell();
cell.DerivativeGenerated +=new EventHandler<MedicalViewerDerivativeGeneratedEventArgs>(cell_DerivativeGenerated);
// create a single cut-plane and double cut-plane.
cell.ReferenceLine.CutLines.Add(new MedicalViewerPlaneCutLine(singleDerivativeCell));
cell.ReferenceLine.DoubleCutLines.Add(new MedicalViewerDoublePlaneCutLine(firstDerivativeCell, secondDerivativeCell));
_medicalViewer.Cells.Add(singleDerivativeCell);
_medicalViewer.Cells.Add(firstDerivativeCell);
_medicalViewer.Cells.Add(secondDerivativeCell);
Controls.Add(_medicalViewer);
_medicalViewer.Dock = DockStyle.Fill;
}
void MedicalViewerCutLineForm_FormClosing(object sender, FormClosingEventArgs e)
{
}
void cell_Data3DRequested(object sender, MedicalViewerData3DRequestedEventArgs e)
{
e.Succeed = Medical3DEngine.Provide3DInformation(e);
}
void cell_Data3DFrameRequested(object sender, MedicalViewer3DFrameRequestedEventArgs e)
{
RasterCodecs _codecs = new RasterCodecs();
e.Image = _codecs.Load((string)(_seriesManager.Stacks[0].Items[e.ImageIndex].Data));
_codecs.Dispose();
}
void cell_DerivativeGenerated(object sender, MedicalViewerDerivativeGeneratedEventArgs e)
{
e.DerivativeCell.ShowCellBoundaries = true;
e.DerivativeCell.ReferenceLine.Enabled = true;
}
void cell_FramesRequested(object sender, MedicalViewerRequestedFramesInformationEventArgs e)
{
MedicalViewerMultiCell cell = (MedicalViewerMultiCell)(sender);
RasterCodecs _codecs = new RasterCodecs();
int i;
RasterImage image;
string fileName;
if (e.RequestedFramesIndexes.Length > 0)
{
fileName = (string)(_seriesManager.Stacks[0].Items[e.RequestedFramesIndexes[0]].Data);
image = _codecs.Load(fileName);
}
else
return;
for (i = 1; i < e.RequestedFramesIndexes.Length; i++)
{
fileName = (string)(_seriesManager.Stacks[0].Items[e.RequestedFramesIndexes[i]].Data);
image.AddPage(_codecs.Load(fileName));
}
cell.SetRequestedImage(image, e.RequestedFramesIndexes, MedicalViewerSetImageOptions.Insert);
}
public MedicalViewer Viewer
{
get { return _medicalViewer; }
}
}
MedicalViewerCutLineForm GetMedicalViewerCutLineControl()
{
MedicalViewerSeriesManagerFrom form = new MedicalViewerSeriesManagerFrom();
MedicalViewerSeriesManager output = form.LoadJamesHead();
return new MedicalViewerCutLineForm(output);
}
// This example changes the default window level value by decrease the width by 100. Then resets the images based on the new value.
public void MedicalViewerCutLineExample()
{
MedicalViewerCutLineForm myForm = GetMedicalViewerCutLineControl();
MedicalViewer medicalViewer = myForm.Viewer;
myForm.ShowDialog();
}
Imports Leadtools
Imports Leadtools.Dicom
Imports Leadtools.Medical3D
Imports Leadtools.Codecs
Imports Leadtools.MedicalViewer
Imports Leadtools.Annotations
Imports Leadtools.ImageProcessing.Core
Private Class MedicalViewerCutLineForm : Inherits Form
Private _medicalViewer As MedicalViewer
Private _seriesManager As MedicalViewerSeriesManager
Private Sub MedicalViewerCutLineForm_SizeChanged(ByVal sender As Object, ByVal e As EventArgs)
_medicalViewer.Size = New Size(Me.ClientRectangle.Right, Me.ClientRectangle.Bottom)
End Sub
Public Sub New(ByVal output As MedicalViewerSeriesManager)
Dim _codecs As RasterCodecs = New RasterCodecs()
AddHandler SizeChanged, AddressOf MedicalViewerCutLineForm_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)
_seriesManager = output
Dim cell As MedicalViewerMultiCell = New MedicalViewerMultiCell(Nothing, True, 1, 1)
Dim index As Integer
Dim count As Integer = output.Stacks(0).Items.Count
Dim codecsInformation As CodecsImageInfo
' Get the image information for each frame and send them to the low memory usage function.
Dim imageInformation As MedicalViewerImageInformation() = New MedicalViewerImageInformation(count - 1) {}
index = 0
Do While index < count
codecsInformation = _codecs.GetInformation(CStr(output.Stacks(0).Items(index).Data), True)
imageInformation(index) = New MedicalViewerImageInformation()
imageInformation(index).ImageHeight = codecsInformation.Width
imageInformation(index).ImageWidth = codecsInformation.Width
imageInformation(index).XResolution = codecsInformation.XResolution
imageInformation(index).YResolution = codecsInformation.YResolution
index += 1
Loop
AddHandler cell.Data3DRequested, AddressOf cell_Data3DRequested
AddHandler cell.Data3DFrameRequested, AddressOf cell_Data3DFrameRequested
AddHandler cell.FramesRequested, AddressOf cell_FramesRequested
AddHandler FormClosing, AddressOf MedicalViewerCutLineForm_FormClosing
cell.EnableLowMemoryUsage(2, count, imageInformation)
_medicalViewer.Cells.Add(cell)
cell.PixelSpacing = output.Stacks(0).PixelSpacing
index = 0
Do While index < count
cell.SetImagePosition(index, output.Stacks(0).Items(index).ImagePosition, (index = count - 1))
index += 1
Loop
' 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)
' 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)
' Set the image DICOM data
cell.PixelSpacing = output.Stacks(0).PixelSpacing
' Create some cells that will hold the derivative images resulted from the cut-planes.
Dim singleDerivativeCell As MedicalViewerCell = New MedicalViewerCell()
Dim firstDerivativeCell As MedicalViewerCell = New MedicalViewerCell()
Dim secondDerivativeCell As MedicalViewerCell = New MedicalViewerCell()
AddHandler cell.DerivativeGenerated, AddressOf cell_DerivativeGenerated
' create a single cut-plane and double cut-plane.
cell.ReferenceLine.CutLines.Add(New MedicalViewerPlaneCutLine(singleDerivativeCell))
cell.ReferenceLine.DoubleCutLines.Add(New MedicalViewerDoublePlaneCutLine(firstDerivativeCell, secondDerivativeCell))
_medicalViewer.Cells.Add(singleDerivativeCell)
_medicalViewer.Cells.Add(firstDerivativeCell)
_medicalViewer.Cells.Add(secondDerivativeCell)
Controls.Add(_medicalViewer)
_medicalViewer.Dock = DockStyle.Fill
End Sub
Private Sub MedicalViewerCutLineForm_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)
End Sub
Private Sub cell_Data3DRequested(ByVal sender As Object, ByVal e As MedicalViewerData3DRequestedEventArgs)
e.Succeed = Medical3DEngine.Provide3DInformation(e)
End Sub
Private Sub cell_Data3DFrameRequested(ByVal sender As Object, ByVal e As MedicalViewer3DFrameRequestedEventArgs)
Dim _codecs As RasterCodecs = New RasterCodecs()
e.Image = _codecs.Load(CStr(_seriesManager.Stacks(0).Items(e.ImageIndex).Data))
_codecs.Dispose()
End Sub
Private Sub cell_DerivativeGenerated(ByVal sender As Object, ByVal e As MedicalViewerDerivativeGeneratedEventArgs)
e.DerivativeCell.ShowCellBoundaries = True
e.DerivativeCell.ReferenceLine.Enabled = True
End Sub
Private Sub cell_FramesRequested(ByVal sender As Object, ByVal e As MedicalViewerRequestedFramesInformationEventArgs)
Dim cell As MedicalViewerMultiCell = CType(sender, MedicalViewerMultiCell)
Dim _codecs As RasterCodecs = New RasterCodecs()
Dim i As Integer
Dim image As RasterImage
Dim fileName As String
If e.RequestedFramesIndexes.Length > 0 Then
fileName = CStr(_seriesManager.Stacks(0).Items(e.RequestedFramesIndexes(0)).Data)
image = _codecs.Load(fileName)
Else
Return
End If
i = 1
Do While i < e.RequestedFramesIndexes.Length
fileName = CStr(_seriesManager.Stacks(0).Items(e.RequestedFramesIndexes(i)).Data)
image.AddPage(_codecs.Load(fileName))
i += 1
Loop
cell.SetRequestedImage(image, e.RequestedFramesIndexes, MedicalViewerSetImageOptions.Insert)
End Sub
Public ReadOnly Property Viewer() As MedicalViewer
Get
Return _medicalViewer
End Get
End Property
End Class
Private Function GetMedicalViewerCutLineControl() As MedicalViewerCutLineForm
Dim form As MedicalViewerSeriesManagerFrom = New MedicalViewerSeriesManagerFrom()
Dim output As MedicalViewerSeriesManager = form.LoadJamesHead()
Return New MedicalViewerCutLineForm(output)
End Function
' This example changes the default window level value by decrease the width by 100. Then resets the images based on the new value.
Public Sub MedicalViewerCutLineExample()
Dim myForm As MedicalViewerCutLineForm = GetMedicalViewerCutLineControl()
Dim medicalViewer As MedicalViewer = myForm.Viewer
myForm.ShowDialog()
End Sub
using Leadtools;
using Leadtools.Dicom;
using Leadtools.Medical3D;
using Leadtools.Codecs;
using Leadtools.MedicalViewer;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
using Leadtools.ImageProcessing.Color;
using Leadtools.Annotations;
class MedicalViewerCutLineForm : Form
{
private MedicalViewer _medicalViewer;
private MedicalViewerSeriesManager _seriesManager;
void MedicalViewerCutLineForm_SizeChanged(object sender, EventArgs e)
{
_medicalViewer.Size = new Size(this.ClientRectangle.Right, this.ClientRectangle.Bottom);
}
public MedicalViewerCutLineForm(MedicalViewerSeriesManager output)
{
RasterCodecs _codecs = new RasterCodecs();
this.SizeChanged += new EventHandler(MedicalViewerCutLineForm_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);
_seriesManager = output;
MedicalViewerMultiCell cell = new MedicalViewerMultiCell(null, true, 1, 1);
int index;
int count = output.Stacks[0].Items.Count;
CodecsImageInfo codecsInformation;
// Get the image information for each frame and send them to the low memory usage function.
MedicalViewerImageInformation[] imageInformation = new MedicalViewerImageInformation[count];
for (index = 0; index < count; index++)
{
codecsInformation = _codecs.GetInformation((string)(output.Stacks[0].Items[index].Data), true);
imageInformation[index] = new MedicalViewerImageInformation();
imageInformation[index].ImageHeight = codecsInformation.Width;
imageInformation[index].ImageWidth = codecsInformation.Width;
imageInformation[index].XResolution = codecsInformation.XResolution;
imageInformation[index].YResolution = codecsInformation.YResolution;
}
cell.Data3DRequested += new EventHandler<MedicalViewerData3DRequestedEventArgs>(cell_Data3DRequested);
cell.Data3DFrameRequested += new EventHandler<MedicalViewer3DFrameRequestedEventArgs>(cell_Data3DFrameRequested);
cell.FramesRequested +=new EventHandler<MedicalViewerRequestedFramesInformationEventArgs>(cell_FramesRequested);
FormClosing += new FormClosingEventHandler(MedicalViewerCutLineForm_FormClosing);
cell.EnableLowMemoryUsage(2, count, imageInformation);
_medicalViewer.Cells.Add(cell);
cell.PixelSpacing = output.Stacks[0].PixelSpacing;
for (index = 0; index < count; index++)
{
cell.SetImagePosition(index, output.Stacks[0].Items[index].ImagePosition, (index == count - 1));
}
// 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);
// 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);
// Set the image DICOM data
cell.PixelSpacing = output.Stacks[0].PixelSpacing;
// Create some cells that will hold the derivative images resulted from the cut-planes.
MedicalViewerCell singleDerivativeCell = new MedicalViewerCell();
MedicalViewerCell firstDerivativeCell = new MedicalViewerCell();
MedicalViewerCell secondDerivativeCell = new MedicalViewerCell();
cell.DerivativeGenerated +=new EventHandler<MedicalViewerDerivativeGeneratedEventArgs>(cell_DerivativeGenerated);
// create a single cut-plane and double cut-plane.
cell.ReferenceLine.CutLines.Add(new MedicalViewerPlaneCutLine(singleDerivativeCell));
cell.ReferenceLine.DoubleCutLines.Add(new MedicalViewerDoublePlaneCutLine(firstDerivativeCell, secondDerivativeCell));
_medicalViewer.Cells.Add(singleDerivativeCell);
_medicalViewer.Cells.Add(firstDerivativeCell);
_medicalViewer.Cells.Add(secondDerivativeCell);
Controls.Add(_medicalViewer);
_medicalViewer.Dock = DockStyle.Fill;
}
void MedicalViewerCutLineForm_FormClosing(object sender, FormClosingEventArgs e)
{
}
void cell_Data3DRequested(object sender, MedicalViewerData3DRequestedEventArgs e)
{
e.Succeed = Medical3DEngine.Provide3DInformation(e);
}
void cell_Data3DFrameRequested(object sender, MedicalViewer3DFrameRequestedEventArgs e)
{
RasterCodecs _codecs = new RasterCodecs();
e.Image = _codecs.Load((string)(_seriesManager.Stacks[0].Items[e.ImageIndex].Data));
_codecs.Dispose();
}
void cell_DerivativeGenerated(object sender, MedicalViewerDerivativeGeneratedEventArgs e)
{
e.DerivativeCell.ShowCellBoundaries = true;
e.DerivativeCell.ReferenceLine.Enabled = true;
}
void cell_FramesRequested(object sender, MedicalViewerRequestedFramesInformationEventArgs e)
{
MedicalViewerMultiCell cell = (MedicalViewerMultiCell)(sender);
RasterCodecs _codecs = new RasterCodecs();
int i;
RasterImage image;
string fileName;
if (e.RequestedFramesIndexes.Length > 0)
{
fileName = (string)(_seriesManager.Stacks[0].Items[e.RequestedFramesIndexes[0]].Data);
image = _codecs.Load(fileName);
}
else
return;
for (i = 1; i < e.RequestedFramesIndexes.Length; i++)
{
fileName = (string)(_seriesManager.Stacks[0].Items[e.RequestedFramesIndexes[i]].Data);
image.AddPage(_codecs.Load(fileName));
}
cell.SetRequestedImage(image, e.RequestedFramesIndexes, MedicalViewerSetImageOptions.Insert);
}
public MedicalViewer Viewer
{
get { return _medicalViewer; }
}
}
MedicalViewerCutLineForm GetMedicalViewerCutLineControl()
{
MedicalViewerSeriesManagerFrom form = new MedicalViewerSeriesManagerFrom();
MedicalViewerSeriesManager output = form.LoadJamesHead();
return new MedicalViewerCutLineForm(output);
}
// This example changes the default window level value by decrease the width by 100. Then resets the images based on the new value.
public void MedicalViewerCutLineExample()
{
MedicalViewerCutLineForm myForm = GetMedicalViewerCutLineControl();
MedicalViewer medicalViewer = myForm.Viewer;
myForm.ShowDialog();
}
using Leadtools;
using Leadtools.Dicom;
using Leadtools.Medical3D;
using Leadtools.Codecs;
using Leadtools.MedicalViewer;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
using Leadtools.ImageProcessing.Color;
using Leadtools.Annotations;
class MedicalViewerCutLineForm : Form
{
private MedicalViewer _medicalViewer;
private MedicalViewerSeriesManager _seriesManager;
void MedicalViewerCutLineForm_SizeChanged(object sender, EventArgs e)
{
_medicalViewer.Size = new Size(this.ClientRectangle.Right, this.ClientRectangle.Bottom);
}
public MedicalViewerCutLineForm(MedicalViewerSeriesManager output)
{
RasterCodecs _codecs = new RasterCodecs();
this.SizeChanged += new EventHandler(MedicalViewerCutLineForm_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);
_seriesManager = output;
MedicalViewerMultiCell cell = new MedicalViewerMultiCell(null, true, 1, 1);
int index;
int count = output.Stacks[0].Items.Count;
CodecsImageInfo codecsInformation;
// Get the image information for each frame and send them to the low memory usage function.
MedicalViewerImageInformation[] imageInformation = new MedicalViewerImageInformation[count];
for (index = 0; index < count; index++)
{
codecsInformation = _codecs.GetInformation((string)(output.Stacks[0].Items[index].Data), true);
imageInformation[index] = new MedicalViewerImageInformation();
imageInformation[index].ImageHeight = codecsInformation.Width;
imageInformation[index].ImageWidth = codecsInformation.Width;
imageInformation[index].XResolution = codecsInformation.XResolution;
imageInformation[index].YResolution = codecsInformation.YResolution;
}
cell.Data3DRequested += new EventHandler<MedicalViewerData3DRequestedEventArgs>(cell_Data3DRequested);
cell.Data3DFrameRequested += new EventHandler<MedicalViewer3DFrameRequestedEventArgs>(cell_Data3DFrameRequested);
cell.FramesRequested +=new EventHandler<MedicalViewerRequestedFramesInformationEventArgs>(cell_FramesRequested);
FormClosing += new FormClosingEventHandler(MedicalViewerCutLineForm_FormClosing);
cell.EnableLowMemoryUsage(2, count, imageInformation);
_medicalViewer.Cells.Add(cell);
cell.PixelSpacing = output.Stacks[0].PixelSpacing;
for (index = 0; index < count; index++)
{
cell.SetImagePosition(index, output.Stacks[0].Items[index].ImagePosition, (index == count - 1));
}
// 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);
// 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);
// Set the image DICOM data
cell.PixelSpacing = output.Stacks[0].PixelSpacing;
// Create some cells that will hold the derivative images resulted from the cut-planes.
MedicalViewerCell singleDerivativeCell = new MedicalViewerCell();
MedicalViewerCell firstDerivativeCell = new MedicalViewerCell();
MedicalViewerCell secondDerivativeCell = new MedicalViewerCell();
cell.DerivativeGenerated +=new EventHandler<MedicalViewerDerivativeGeneratedEventArgs>(cell_DerivativeGenerated);
// create a single cut-plane and double cut-plane.
cell.ReferenceLine.CutLines.Add(new MedicalViewerPlaneCutLine(singleDerivativeCell));
cell.ReferenceLine.DoubleCutLines.Add(new MedicalViewerDoublePlaneCutLine(firstDerivativeCell, secondDerivativeCell));
_medicalViewer.Cells.Add(singleDerivativeCell);
_medicalViewer.Cells.Add(firstDerivativeCell);
_medicalViewer.Cells.Add(secondDerivativeCell);
Controls.Add(_medicalViewer);
_medicalViewer.Dock = DockStyle.Fill;
}
void MedicalViewerCutLineForm_FormClosing(object sender, FormClosingEventArgs e)
{
}
void cell_Data3DRequested(object sender, MedicalViewerData3DRequestedEventArgs e)
{
e.Succeed = Medical3DEngine.Provide3DInformation(e);
}
void cell_Data3DFrameRequested(object sender, MedicalViewer3DFrameRequestedEventArgs e)
{
RasterCodecs _codecs = new RasterCodecs();
e.Image = _codecs.Load((string)(_seriesManager.Stacks[0].Items[e.ImageIndex].Data));
_codecs.Dispose();
}
void cell_DerivativeGenerated(object sender, MedicalViewerDerivativeGeneratedEventArgs e)
{
e.DerivativeCell.ShowCellBoundaries = true;
e.DerivativeCell.ReferenceLine.Enabled = true;
}
void cell_FramesRequested(object sender, MedicalViewerRequestedFramesInformationEventArgs e)
{
MedicalViewerMultiCell cell = (MedicalViewerMultiCell)(sender);
RasterCodecs _codecs = new RasterCodecs();
int i;
RasterImage image;
string fileName;
if (e.RequestedFramesIndexes.Length > 0)
{
fileName = (string)(_seriesManager.Stacks[0].Items[e.RequestedFramesIndexes[0]].Data);
image = _codecs.Load(fileName);
}
else
return;
for (i = 1; i < e.RequestedFramesIndexes.Length; i++)
{
fileName = (string)(_seriesManager.Stacks[0].Items[e.RequestedFramesIndexes[i]].Data);
image.AddPage(_codecs.Load(fileName));
}
cell.SetRequestedImage(image, e.RequestedFramesIndexes, MedicalViewerSetImageOptions.Insert);
}
public MedicalViewer Viewer
{
get { return _medicalViewer; }
}
}
MedicalViewerCutLineForm GetMedicalViewerCutLineControl()
{
MedicalViewerSeriesManagerFrom form = new MedicalViewerSeriesManagerFrom();
MedicalViewerSeriesManager output = form.LoadJamesHead();
return new MedicalViewerCutLineForm(output);
}
// This example changes the default window level value by decrease the width by 100. Then resets the images based on the new value.
public void MedicalViewerCutLineExample()
{
MedicalViewerCutLineForm myForm = GetMedicalViewerCutLineControl();
MedicalViewer medicalViewer = myForm.Viewer;
myForm.ShowDialog();
}