LEADTOOLS Medical (Leadtools.Medical.Workstation.Loader assembly) Send comments on this topic. | Back to Introduction - All Topics | Help Version 17.0.3.29
LoadSeries Method
See Also 
Leadtools.Medical.Workstation.Loader Namespace > MedicalViewerLoaderBase Class : LoadSeries Method



studyInstanceUID
A System.String representing the Study Instance UID.
seriesInstanceUID
A System.String representing the Series Instance UID.
studyInstanceUID
A System.String representing the Study Instance UID.
seriesInstanceUID
A System.String representing the Series Instance UID.
Loads a series of images and information about them into a Leadtools.MedicalViewer.MedicalViewerMultiCell controls.

Syntax

Visual Basic (Declaration) 
Public Function LoadSeries( _
   ByVal studyInstanceUID As String, _
   ByVal seriesInstanceUID As String _
) As Boolean
Visual Basic (Usage)Copy Code
Dim instance As MedicalViewerLoaderBase
Dim studyInstanceUID As String
Dim seriesInstanceUID As String
Dim value As Boolean
 
value = instance.LoadSeries(studyInstanceUID, seriesInstanceUID)
C# 
public bool LoadSeries( 
   string studyInstanceUID,
   string seriesInstanceUID
)
C++/CLI 
public:
bool LoadSeries( 
   String^ studyInstanceUID,
   String^ seriesInstanceUID
) 

Parameters

studyInstanceUID
A System.String representing the Study Instance UID.
seriesInstanceUID
A System.String representing the Series Instance UID.

Return Value

True if the series is loaded; otherwise it is false.

Example

Visual BasicCopy Code
Private viewer As New MedicalViewer()

      Public Sub LoadSeries()
         Leadtools.Examples.Support.Unlock()

         Dim clientInfo As New AeInfo()

         clientInfo.Address = Dns.GetHostName()
         clientInfo.Port = 1000
         clientInfo.AETitle = "TEST_CLIENT"

         Dim serverInfo As New DicomScp()
         serverInfo.AETitle = "LEAD_SERVER"
         serverInfo.Port = 104
         serverInfo.PeerAddress = GetLocalServerAddress()
         serverInfo.Timeout = 30

         Dim queryClient As New PacsQueryClient(clientInfo, serverInfo)

         Dim queryResult() As DicomDataSet = queryClient.FindSeries(New FindQuery())

         If queryResult.Length > 0 Then
            Dim retrieveClient As New PacsRetrieveClient(clientInfo, serverInfo)


            'make sure you have configured the workstation database correctly for the PacsRetrieveClient to store the images.
            retrieveClient.StoreRetrievedImages = True 'we want to store the images locally so we can view them later.

            Dim loader As New MedicalViewerLoader(retrieveClient)

            loader.ViewerControl = viewer
            loader.Layout.Auto = True
            loader.LazyLoading = True 'this will cause to load the images for displayed sub-cells only
            loader.ViewerPreLoadedImages = 1 'this will allow to load 1 image after and before the displayed sub-cell for fast scrolling.

            AddHandler loader.ProgressState, AddressOf loader_ProgressState
            AddHandler loader.RequestedImageUpdated, AddressOf loader_RequestedImageUpdated

            Dim studyInstanceUID As String = queryResult(0).GetValue(Of String)(DicomTag.StudyInstanceUID, String.Empty)
            Dim seriesInstanceUID As String = queryResult(0).GetValue(Of String)(DicomTag.SeriesInstanceUID, String.Empty)

            If loader.LoadSeries(studyInstanceUID, seriesInstanceUID) Then
               Console.WriteLine("Number of viewer cells: {0}", viewer.Cells.Count)
               Console.WriteLine("Number of loader created cells: {0}", loader.SeriesCells.Length)

               For Each cell As MedicalViewerMultiCell In loader.FindSeriesCells(seriesInstanceUID)
                  Dim sopInstanceUID As String = loader.FindDisplayedCellInstanceInformation(cell, 0).SOPInstanceUID

                  Console.WriteLine("Cell #{0} has first image with SOPInstanceUID={1}", viewer.Cells.IndexOf(cell), sopInstanceUID)


                  Dim ds As DicomDataSet = loader.GetDicom(sopInstanceUID)
                  Dim imageElement As DicomElement = ds.FindFirstElement(Nothing, DicomTag.PixelData, True)

                  If Nothing IsNot imageElement AndAlso imageElement.Length > 0 Then
                     Using codec As New RasterCodecs()
                        Using image As RasterImage = ds.GetImage(imageElement, 0, 24, RasterByteOrder.Gray, DicomGetImageFlags.AutoApplyModalityLut Or DicomGetImageFlags.AutoApplyVoiLut)
                           codec.Save(image, Path.Combine(LEAD_VARS.ImagesDir, sopInstanceUID), RasterImageFormat.Jpeg, image.BitsPerPixel)

                           Console.WriteLine("Image with SOPInstanceUID={0} saved to {1}", sopInstanceUID, Path.Combine(LEAD_VARS.ImagesDir, sopInstanceUID))
                        End Using
                     End Using
                  End If

                  Dim imagesPath() As String = loader.GetSeriesImages(cell)

                  Console.WriteLine("Cell #{0} is loaded from {1} file(s):", viewer.Cells.IndexOf(cell), imagesPath.Length)

                  For Each imagePath As String In imagesPath
                     Console.WriteLine(imagesPath)
                  Next imagePath
               Next cell
            End If

            loader.Close()
         End If
      End Sub

      Private Sub loader_RequestedImageUpdated(ByVal sender As Object, ByVal e As RequestedImageUpdatedEventArgs)
         Console.WriteLine("Image streamer for cell {0}, sub-cell {1}", viewer.Cells.IndexOf(e.Cell), e.SubCellIndex)
      End Sub

      Private Sub loader_ProgressState(ByVal sender As Object, ByVal e As ProgressEventArgs)
         Console.WriteLine(e.Message)
      End Sub

      Public Function GetLocalServerAddress() As IPAddress
         Dim addresses() As IPAddress

         'you can use any IP address which a DICOM server is listning to.
         addresses = Dns.GetHostAddresses(Dns.GetHostName())

         For Each address As IPAddress In addresses
            If address.AddressFamily = System.Net.Sockets.AddressFamily.InterNetwork Then
               Return address
            End If
         Next address

         Throw New InvalidOperationException("No IP Address V4 found for this machine.")
      End Function

Public NotInheritable Class LEAD_VARS
   Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
C#Copy Code
MedicalViewer viewer = new MedicalViewer();

      public void LoadSeries ( ) 
      {
         Leadtools.Examples.Support.Unlock ( ) ;

         AeInfo clientInfo = new AeInfo ( ) ;

         clientInfo.Address = Dns.GetHostName () ;
         clientInfo.Port = 1000 ;
         clientInfo.AETitle = "TEST_CLIENT" ;

         DicomScp serverInfo = new DicomScp ( ) ;
         serverInfo.AETitle = "LEAD_SERVER" ;
         serverInfo.Port = 104 ;
         serverInfo.PeerAddress = GetLocalServerAddress ()  ;
         serverInfo.Timeout = 30 ;

         PacsQueryClient queryClient = new PacsQueryClient ( clientInfo, serverInfo ) ;

         DicomDataSet[] queryResult =  queryClient.FindSeries ( new FindQuery ( ) ) ;

         if ( queryResult.Length > 0 ) 
         {
            PacsRetrieveClient retrieveClient = new PacsRetrieveClient(clientInfo, serverInfo);


            //make sure you have configured the workstation database correctly for the PacsRetrieveClient to store the images.
            retrieveClient.StoreRetrievedImages = true ; //we want to store the images locally so we can view them later.

            MedicalViewerLoader loader = new MedicalViewerLoader(retrieveClient );

            loader.ViewerControl = viewer ;
            loader.Layout.Auto = true ;
            loader.LazyLoading = true ; //this will cause to load the images for displayed sub-cells only
            loader.ViewerPreLoadedImages = 1; //this will allow to load 1 image after and before the displayed sub-cell for fast scrolling.

            loader.ProgressState += new ProgressEventHandler(loader_ProgressState);
            loader.RequestedImageUpdated += new EventHandler<RequestedImageUpdatedEventArgs>(loader_RequestedImageUpdated);

            string studyInstanceUID = queryResult [ 0 ].GetValue <string> ( DicomTag.StudyInstanceUID, string.Empty) ;
            string seriesInstanceUID = queryResult[ 0 ].GetValue <string> ( DicomTag.SeriesInstanceUID, string.Empty )  ;

            if ( loader.LoadSeries ( studyInstanceUID, seriesInstanceUID )  )
            {
               Console.WriteLine ( "Number of viewer cells: {0}",  viewer.Cells.Count ) ;
               Console.WriteLine ( "Number of loader created cells: {0}",  loader.SeriesCells.Length ) ;

               foreach ( MedicalViewerMultiCell cell in loader.FindSeriesCells ( seriesInstanceUID ) ) 
               {
                  string sopInstanceUID = loader.FindDisplayedCellInstanceInformation ( cell, 0 ).SOPInstanceUID ;

                  Console.WriteLine ( "Cell #{0} has first image with SOPInstanceUID={1}", viewer.Cells.IndexOf ( cell ), sopInstanceUID ) ;


                  DicomDataSet ds = loader.GetDicom ( sopInstanceUID ) ;
                  DicomElement imageElement = ds.FindFirstElement ( null, DicomTag.PixelData, true ) ;

                  if ( null != imageElement && imageElement.Length > 0 )
                  {
                     using ( RasterCodecs codec = new RasterCodecs ( ) )
                     {
                        using ( RasterImage image = ds.GetImage ( imageElement, 0, 24, RasterByteOrder.Gray, DicomGetImageFlags.AutoApplyModalityLut | DicomGetImageFlags.AutoApplyVoiLut ) )
                        {
                           codec.Save(image,Path.Combine(LEAD_VARS.ImagesDir,sopInstanceUID), RasterImageFormat.Jpeg, image.BitsPerPixel);

                           Console.WriteLine("Image with SOPInstanceUID={0} saved to {1}", sopInstanceUID,Path.Combine(LEAD_VARS.ImagesDir, sopInstanceUID));
                        }
                     }
                  }

                  string [] imagesPath = loader.GetSeriesImages ( cell ) ;

                  Console.WriteLine ( "Cell #{0} is loaded from {1} file(s):", viewer.Cells.IndexOf ( cell ), imagesPath.Length  ) ;

                  foreach ( string imagePath in imagesPath ) 
                  {
                     Console.WriteLine ( imagesPath ) ;
                  }
               }
            }

            loader.Close ( ) ;
         }
      }

      void loader_RequestedImageUpdated(object sender, RequestedImageUpdatedEventArgs e)
      {
         Console.WriteLine ( "Image streamer for cell {0}, sub-cell {1}", viewer.Cells.IndexOf ( e.Cell ), e.SubCellIndex )  ;
      }

      void loader_ProgressState(object sender, ProgressEventArgs e)
      {
         Console.WriteLine ( e.Message ) ;
      }

      public IPAddress GetLocalServerAddress ()  
      {
         IPAddress [ ] addresses ;

         //you can use any IP address which a DICOM server is listning to.
         addresses = Dns.GetHostAddresses ( Dns.GetHostName ( ) ) ;

         foreach ( IPAddress address in addresses ) 
         {
            if ( address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork ) 
            {
               return address ;
            }
         }

         throw new InvalidOperationException ( "No IP Address V4 found for this machine." ) ;
      }

static class LEAD_VARS
{
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}

Remarks

The series of images will be displayed in Leadtools.MedicalViewer.MedicalViewerMultiCell controls with their overlay tag information.

If the MedicalViewerLoaderBase.ViewerControl is set before calling this method, A Leadtools.MedicalViewer.MedicalViewerMultiCell will be created and added to that MedicalViewer control which will raise the MedicalViewerLoaderBase.ViewerCellCreated event.

If the value of the MedicalViewerLoaderBase.ViewerControl is null (Nothing in Visual Basic) the MedicalViewerLoaderBase.MedicalViewerCellRequested event will be raised and the user is responsible to provide the Leadtools.MedicalViewer.MedicalViewerMultiCell control.

If the value of the MedicalViewerLoaderBase.ViewerControl is null (Nothing in Visual Basic) and the MedicalViewerLoaderBase.MedicalViewerCellRequested event is not handled this function will fail and will throw an exception.

A series will be sorted and might be separated among multiple cells depending on the DICOM information of the series. The images with the same Frame Of Reference, Echo Number and Image Orientation will be grouped together. This will insure proper display of the DICOM images in the Leadtools.MedicalViewer.MedicalViewerMultiCell

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.Medical.Workstation.Loader requires a Medical toolkit license and unlock key. For more information, refer to: Imaging Pro/Document/Medical Features