Imports Leadtools
         Imports Leadtools.Codecs
         Imports Leadtools.Dicom
         Imports Leadtools.MedicalViewer
         Imports Leadtools.Dicom.Scu.Common
         Imports Leadtools.ImageProcessing
         Imports Leadtools.Dicom.AddIn.Common
         Imports Leadtools.Dicom.Scu
         Imports Leadtools.Medical.Workstation.Client
         Imports Leadtools.Medical.Workstation.Client.Pacs
         Imports Leadtools.Medical.Workstation.Loader
         Private viewer As New MedicalViewer()
         Public Sub LoadSeries()
#If LEADTOOLS_V175_OR_LATER Then
                Leadtools.Examples.Support.SetLicense()
#Else
         Leadtools.Examples.Support.Unlock()
#End If ''' #if LEADTOOLS_V175_OR_LATER
            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
             
   
     
            using Leadtools ;
         using Leadtools.Codecs ;
         using Leadtools.Dicom ;
         using Leadtools.MedicalViewer ;
         using Leadtools.Dicom.Scu.Common ;
         using Leadtools.ImageProcessing ;
         using Leadtools.Dicom.AddIn.Common;
         using Leadtools.Dicom.Scu;
         using Leadtools.Medical.Workstation.Client ;
         using Leadtools.Medical.Workstation.Client.Pacs ;
         using Leadtools.Medical.Workstation.Loader ;
         MedicalViewer viewer = new MedicalViewer();
         public void LoadSeries ( ) 
         {
#if LEADTOOLS_V175_OR_LATER
            Leadtools.Examples.Support.SetLicense();
#else
            Leadtools.Examples.Support.Unlock();
#endif // #if LEADTOOLS_V175_OR_LATER
            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";
         }