Products | Support | Email a link to this topic. | Send comments on this topic. | Back to Introduction - All Topics | Help Version 19.0.4.28
|
public virtual void Close()
'Declaration Public Overridable Sub Close()
'Usage Dim instance As MedicalViewerLoaderBase instance.Close()
public: virtual void Close();
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"; }