Occurs when a Leadtools.MedicalViewer.MedicalViewerMultiCell is needed to display a series images and the value of ViewerControl is null (Nothing in VB)
public event EventHandler<MedicalViewerCellRequestedEventArgs> MedicalViewerCellRequested
Public Event MedicalViewerCellRequested As EventHandler(Of MedicalViewerCellRequestedEventArgs)
public:
event EventHandler<MedicalViewerCellRequestedEventArgs^>^ MedicalViewerCellRequested
The event handler receives an argument of type MedicalViewerCellRequestedEventArgs containing data related to this event. The following MedicalViewerCellRequestedEventArgs properties provide information specific to this event.
Property | Description |
---|---|
SeriesInstanceUID | Gets the Series Instance UID for the images to be loaded in the cell. |
StudyInstanceUID | Gets the Study Instance UID for the images to be loaded in the cell. |
ViewerCell | Gets or sets the cell that will load the series. |
The user must register to this event and provide a Leadtools.MedicalViewer.MedicalViewerMultiCell control if no value is set in the ViewerControl otherwise the LoadSeries(String,String) will fail and throw an exception.
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";
}
Products |
Support |
Feedback: MedicalViewerCellRequested Event - Leadtools.Medical.Workstation.Loader |
Introduction |
Help Version 19.0.2017.3.22
|
Raster .NET | C API | C++ Class Library | JavaScript HTML5
Document .NET | C API | C++ Class Library | JavaScript HTML5
Medical .NET | C API | C++ Class Library | JavaScript HTML5
Medical Web Viewer .NET
Your email has been sent to support! Someone should be in touch! If your matter is urgent please come back into chat.
Chat Hours:
Monday - Friday, 8:30am to 6pm ET
Thank you for your feedback!
Please fill out the form again to start a new chat.
All agents are currently offline.
Chat Hours:
Monday - Friday
8:30AM - 6PM EST
To contact us please fill out this form and we will contact you via email.