←Select platform

RequestedImageUpdated Event

Summary

Occurs when a new image requested for display in the Leadtools.MedicalViewer.MedicalViewer is loaded and initialized.

Syntax

C#
VB
C++
public event EventHandler<RequestedImageUpdatedEventArgs> RequestedImageUpdated
Public Event RequestedImageUpdated As EventHandler(Of RequestedImageUpdatedEventArgs)
public: 
event EventHandler<RequestedImageUpdatedEventArgs^>^ RequestedImageUpdated 

Event Data

The event handler receives an argument of type RequestedImageUpdatedEventArgs containing data related to this event. The following RequestedImageUpdatedEventArgs properties provide information specific to this event.

PropertyDescription
Cell Gets the cell into which the image is inserted.
InstanceInformation Gets or sets the DICOM instance information about the image
SubCellIndex Gets the sub cell index for the requested image.
Remarks

This event is raised each time after the Leadtools.MedicalViewer.MedicalViewer control requests an image for display and the image has been sent to the control.

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