←Select platform

MedicalViewerLoaderBase Class

Summary

Loads an image series and information about it and initializes a Leadtools.MedicalViewer.MedicalViewer control.

Syntax

C#
VB
C++
public abstract class MedicalViewerLoaderBase
Public MustInherit Class MedicalViewerLoaderBase
public ref class MedicalViewerLoaderBase abstract

Remarks

When streaming images the MedicalViewerLoaderBase will use the low-memory usage feature of the Leadtools.MedicalViewer.MedicalViewer control. This allows images for cells that are not visible to be unloaded from memory and then re-loaded when they are once again visible.

Example

C#
VB
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() 
         <TestMethod()> _ 
         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(); 
         [TestMethod] 
         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"; 
         } 

Requirements

Target Platforms

Products | Support | Contact Us | Copyright Notices
© 1991-2017 LEAD Technologies, Inc. All Rights Reserved.
Leadtools.Medical.Workstation.Loader Assembly
Click or drag to resize