LEADTOOLS Medical (Leadtools.MedicalViewer assembly) Send comments on this topic. | Back to Introduction - All Topics | Help Version 17.0.3.31
MedicalViewerSeriesLocalizer Class
See Also  Members  
Leadtools.MedicalViewer Namespace : MedicalViewerSeriesLocalizer Class



the MedicalViewerSeriesLocalizer represents the localizer image.

Object Model

MedicalViewerSeriesLocalizer ClassMedicalViewerImageData Class

Syntax

Visual Basic (Declaration) 
Public Class MedicalViewerSeriesLocalizer 
Visual Basic (Usage)Copy Code
Dim instance As MedicalViewerSeriesLocalizer
C# 
public class MedicalViewerSeriesLocalizer 
C++/CLI 
public ref class MedicalViewerSeriesLocalizer 

Example

Visual BasicCopy Code
Private Class MedicalViewerLocalizer : Inherits Form
   Private _medicalViewer As MedicalViewer
   Private _seriesManager As MedicalViewerSeriesManager
   Private Sub MedicalViewerLocalizer_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)
      DicomEngine.Startup()
      Dim _codecs As RasterCodecs = New RasterCodecs()

      AddHandler SizeChanged, AddressOf MedicalViewerLocalizer_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

      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.FramesRequested, AddressOf cell_FramesRequested
      AddHandler FormClosing, AddressOf MedicalViewerLocalizer_FormClosing
      cell.EnableLowMemoryUsage(2, count, imageInformation)

      _medicalViewer.Cells.Add(cell)


      ' add some action 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 click and drag the mouse button, the associated action will be activated.
      cell.SetAction(MedicalViewerActionType.WindowLevel, MedicalViewerMouseButtons.Left, MedicalViewerActionFlags.Active Or MedicalViewerActionFlags.RealTime)
      cell.SetAction(MedicalViewerActionType.Alpha, MedicalViewerMouseButtons.Middle, MedicalViewerActionFlags.Active Or MedicalViewerActionFlags.RealTime)
      cell.SetAction(MedicalViewerActionType.Offset, MedicalViewerMouseButtons.Right, MedicalViewerActionFlags.Active Or MedicalViewerActionFlags.RealTime)

      cell.ReferenceLine.Enabled = True
      cell.ReferenceLine.Color = Color.Yellow
      cell.ShowCellBoundaries = True

      ' adjust some properties to 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)

      cell.PixelSpacing = output.Stacks(0).PixelSpacing
      cell.ImageOrientation = output.Stacks(0).Items(0).ImageOrientationArray

      index = 0
      Do While index < count
         cell.SetImagePosition(index, output.Stacks(0).Items(index).ImagePosition, (index = count - 1))
         index += 1
      Loop

      cell.FrameOfReferenceUID = output.Stacks(0).Items(0).FrameOfReferenceUID

      cell = New MedicalViewerMultiCell()
      Dim ds As DicomDataSet = New DicomDataSet()
      ds.Load("\\pc202\readwritefolder\DICOM Dataset\DICOM Volume datasets" & "\Miller James-CT Head full Study\0023\20345460", DicomDataSetLoadFlags.None)
      Dim patientElement As DicomElement = Nothing

      patientElement = ds.FindFirstElement(Nothing, DicomTag.ImagePositionPatient, True)

      Dim doubleArray As Double() = ds.GetDoubleValue(patientElement, 0, 3)

      cell.SetImagePosition(0, Point3D.FromDoubleArray(doubleArray), True)

      patientElement = ds.FindFirstElement(Nothing, DicomTag.FrameOfReferenceUID, True)

      Dim referenceUID As String = ds.GetConvertValue(patientElement)

      cell.FrameOfReferenceUID = referenceUID

      patientElement = ds.FindFirstElement(Nothing, DicomTag.ImageOrientationPatient, True)

      doubleArray = ds.GetDoubleValue(patientElement, 0, 6)

      cell.ImageOrientation = New Single() {CSng(doubleArray(0)), CSng(doubleArray(1)), CSng(doubleArray(2)), CSng(doubleArray(3)), CSng(doubleArray(4)), CSng(doubleArray(5))}

      patientElement = ds.FindFirstElement(Nothing, DicomTag.PixelSpacing, True)

      doubleArray = ds.GetDoubleValue(patientElement, 0, 2)
      cell.PixelSpacing = New Point2D(CSng(doubleArray(0)), CSng(doubleArray(1)))

      cell.ReferenceLine.Enabled = True
      cell.ReferenceLine.Color = Color.LightBlue
      cell.ShowCellBoundaries = True
      cell.Image = ds.GetImage(Nothing, 0, 0, RasterByteOrder.Gray, DicomGetImageFlags.AutoApplyVoiLut Or DicomGetImageFlags.AutoApplyModalityLut Or DicomGetImageFlags.AllowRangeExpansion)
      _medicalViewer.Cells.Add(cell)
      Controls.Add(_medicalViewer)
      _medicalViewer.Dock = DockStyle.Fill
      DicomEngine.Shutdown()
   End Sub

   Private Sub MedicalViewerLocalizer_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)
   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 GetMedicalViewerLocalizerControl() As MedicalViewerLocalizer
   Dim form As MedicalViewerSeriesManagerFrom = New MedicalViewerSeriesManagerFrom()
   Dim output As MedicalViewerSeriesManager = form.LoadJamesHead()

   Return New MedicalViewerLocalizer(output)
End Function

' This examples changes the default window level value by decrease the width by 100. Then resets the images based on the new value.

Public Sub MedicalViewerLocalizerExample()
   Dim myForm As MedicalViewerLocalizer = GetMedicalViewerLocalizerControl()
   Dim medicalViewer As MedicalViewer = myForm.Viewer

   myForm.ShowDialog()
End Sub
C#Copy Code
class MedicalViewerLocalizer : Form
{
   private MedicalViewer _medicalViewer;
   private MedicalViewerSeriesManager _seriesManager;
   void MedicalViewerLocalizer_SizeChanged(object sender, EventArgs e)
   {
      _medicalViewer.Size = new Size(this.ClientRectangle.Right, this.ClientRectangle.Bottom);
   }

   public MedicalViewerLocalizer(MedicalViewerSeriesManager output)
   {
      DicomEngine.Startup();
      RasterCodecs _codecs = new RasterCodecs();

      this.SizeChanged += new EventHandler(MedicalViewerLocalizer_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;

      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.FramesRequested += new EventHandler<MedicalViewerRequestedFramesInformationEventArgs>(cell_FramesRequested);
      FormClosing += new FormClosingEventHandler(MedicalViewerLocalizer_FormClosing);
      cell.EnableLowMemoryUsage(2, count, imageInformation);

      _medicalViewer.Cells.Add(cell);

      // add some action 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 click and drag the mouse button, the associated action will be activated.
      cell.SetAction(MedicalViewerActionType.WindowLevel, MedicalViewerMouseButtons.Left, MedicalViewerActionFlags.Active | MedicalViewerActionFlags.RealTime);
      cell.SetAction(MedicalViewerActionType.Alpha, MedicalViewerMouseButtons.Middle, MedicalViewerActionFlags.Active | MedicalViewerActionFlags.RealTime);
      cell.SetAction(MedicalViewerActionType.Offset, MedicalViewerMouseButtons.Right, MedicalViewerActionFlags.Active | MedicalViewerActionFlags.RealTime);

      cell.ReferenceLine.Enabled = true;
      cell.ReferenceLine.Color = Color.Yellow;
      cell.ShowCellBoundaries = true;

      // adjust some properties to 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);

      cell.PixelSpacing = output.Stacks[0].PixelSpacing;

      for (index = 0; index < count; index++)
      {
         cell.SetImagePosition(index, output.Stacks[0].Items[index].ImagePosition, (index == count - 1));
      }
      cell.ImageOrientation = output.Stacks[0].Items[0].ImageOrientationArray;
      cell.FrameOfReferenceUID = output.Stacks[0].Items[0].FrameOfReferenceUID;

      cell = new MedicalViewerMultiCell();
      DicomDataSet ds = new DicomDataSet();
      ds.Load(@"\\pc202\readwritefolder\DICOM Dataset\DICOM Volume datasets" + "\\Miller James-CT Head full Study\\0023\\20345460", DicomDataSetLoadFlags.None);
      DicomElement patientElement = null;

      patientElement = ds.FindFirstElement(null,
                                           DicomTag.ImagePositionPatient,
                                           true);

      double[] doubleArray = ds.GetDoubleValue(patientElement, 0, 3);

      cell.SetImagePosition(0, Point3D.FromDoubleArray(doubleArray), true);

      patientElement = ds.FindFirstElement(null,
                                          DicomTag.FrameOfReferenceUID,
                                          true);

      string referenceUID = ds.GetConvertValue(patientElement);

      cell.FrameOfReferenceUID = referenceUID;

      patientElement = ds.FindFirstElement(null,
                                          DicomTag.ImageOrientationPatient,
                                          true);

      doubleArray = ds.GetDoubleValue(patientElement, 0, 6);

      cell.ImageOrientation = new float[] {(float)doubleArray[0], (float)doubleArray[1], (float)doubleArray[2], (float)doubleArray[3], (float)doubleArray[4], (float)doubleArray[5]};

      patientElement = ds.FindFirstElement(null,
                                           DicomTag.PixelSpacing,
                                           true);

      doubleArray = ds.GetDoubleValue(patientElement, 0, 2);
      cell.PixelSpacing = new Point2D((float)doubleArray[0], (float)doubleArray[1]);

      cell.ReferenceLine.Enabled = true;
      cell.ReferenceLine.Color = Color.LightBlue;
      cell.ShowCellBoundaries = true;
      cell.Image = ds.GetImage(null, 0, 0, RasterByteOrder.Gray, DicomGetImageFlags.AutoApplyVoiLut | DicomGetImageFlags.AutoApplyModalityLut | DicomGetImageFlags.AllowRangeExpansion);
      _medicalViewer.Cells.Add(cell);
      Controls.Add(_medicalViewer);
      _medicalViewer.Dock = DockStyle.Fill;
      DicomEngine.Shutdown();
   }

   void MedicalViewerLocalizer_FormClosing(object sender, FormClosingEventArgs e)
   {
   }

   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; }
   }
}

MedicalViewerLocalizer GetMedicalViewerLocalizerControl()
{
   MedicalViewerSeriesManagerFrom form = new MedicalViewerSeriesManagerFrom();
   MedicalViewerSeriesManager output = form.LoadJamesHead();

   return new MedicalViewerLocalizer(output);
}

// This examples changes the default window level value by decrease the width by 100. Then resets the images based on the new value.

public void MedicalViewerLocalizerExample()
{
   MedicalViewerLocalizer myForm = GetMedicalViewerLocalizerControl();
   MedicalViewer medicalViewer = myForm.Viewer;

   myForm.ShowDialog();
}

Remarks

  • The localizer image is a slice extracted from the 3D object with angle different than the angle of the slices that created the 3D object.
  • The localizer image is used for better 3D diagnosis.

Inheritance Hierarchy

System.Object
   Leadtools.MedicalViewer.MedicalViewerSeriesLocalizer

Requirements

Target Platforms: Microsoft .NET Framework 2.0, Windows 2000, Windows XP, Windows Server 2003 family, Windows Server 2008 family, Windows Vista, Windows 7

See Also

Leadtools.MedicalViewer requires a Medical Imaging license and unlock key. For more information, refer to: Imaging Pro/Document/Medical Features