public string SynchronizationID { get; set; } Public Property SynchronizationID As String
A value that indicates the ID that is used to synchronize multiple cells together.
The cells must be added to the same MedicalViewer if the user want to synchronize them together. To add the cells to the Medical Viewer, use the collection Cells. To enable this feature, please do the following:
using Leadtools;using Leadtools.Dicom;using Leadtools.Medical3D;using Leadtools.Codecs;using Leadtools.MedicalViewer;using Leadtools.ImageProcessing;using Leadtools.ImageProcessing.Core;using Leadtools.ImageProcessing.Color;using Leadtools.Annotations.Engine;using Leadtools.Annotations.Designers;class MedicalViewerSyncrhonizationForm : Form{private MedicalViewer _medicalViewer;private MedicalViewerSeriesManager _seriesManager;private MedicalViewerSeriesManager _seriesManager512;void MedicalViewerLocalizer_SizeChanged(object sender, EventArgs e){_medicalViewer.Size = new Size(this.ClientRectangle.Right, this.ClientRectangle.Bottom);}public MedicalViewerSyncrhonizationForm(MedicalViewerSeriesManager output, MedicalViewerSeriesManager output512){DicomEngine.Startup();RasterCodecs _codecs = new RasterCodecs();this.SizeChanged += new EventHandler(MedicalViewerLocalizer_SizeChanged);// Create the medical viewer and adjust the size and the location._medicalViewer = new MedicalViewer(1, 2);_medicalViewer.Location = new Point(0, 0);_medicalViewer.Size = new Size(this.ClientRectangle.Right, this.ClientRectangle.Bottom);_seriesManager = output;_seriesManager512 = output512;MedicalViewerMultiCell cell = new MedicalViewerMultiCell(null, true, 1, 1);int index;int count = output.Stacks[0].Items.Count;CodecsImageInfo codecsInformation;MedicalViewerImageInformation[] imageInformation = new MedicalViewerImageInformation[count];for (index = 0; index < count; index++){codecsInformation = _codecs.GetInformation((string)(output.Stacks[0].Items[index].Data), true);imageInformation[index] = new MedicalViewerImageInformation();imageInformation[index].ImageHeight = codecsInformation.Width;imageInformation[index].ImageWidth = codecsInformation.Width;imageInformation[index].XResolution = codecsInformation.XResolution;imageInformation[index].YResolution = codecsInformation.YResolution;}cell.Tag = 0;cell.FramesRequested += new EventHandler<MedicalViewerRequestedFramesInformationEventArgs>(cell_FramesRequested);FormClosing += new FormClosingEventHandler(MedicalViewerLocalizer_FormClosing);cell.EnableLowMemoryUsage(2, count, imageInformation);_medicalViewer.Cells.Add(cell);// add some actions that will be used to change the properties of the images inside the control.cell.AddAction(MedicalViewerActionType.WindowLevel);cell.AddAction(MedicalViewerActionType.Alpha);cell.AddAction(MedicalViewerActionType.Offset);// assign the added actions to a mouse button, meaning that when the user clicks and drags the mouse button, the associated action will be activated.cell.SetAction(MedicalViewerActionType.WindowLevel, MedicalViewerMouseButtons.Left, MedicalViewerActionFlags.Active);cell.SetAction(MedicalViewerActionType.Alpha, MedicalViewerMouseButtons.Middle, MedicalViewerActionFlags.Active);cell.SetAction(MedicalViewerActionType.Offset, MedicalViewerMouseButtons.Right, MedicalViewerActionFlags.Active);cell.ReferenceLine.Enabled = true;cell.ReferenceLine.Color = Color.Yellow;cell.ShowCellBoundaries = true;// adjust some properties of the cell and add some tags._medicalViewer.Cells[0].SetTag(2, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.UserData, "EX. ID 230-36-5448");_medicalViewer.Cells[0].SetTag(4, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Frame);_medicalViewer.Cells[0].SetTag(6, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Scale);_medicalViewer.Cells[0].SetTag(2, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.WindowLevelData);_medicalViewer.Cells[0].SetTag(1, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.FieldOfView);cell.PixelSpacing = output.Stacks[0].PixelSpacing;for (index = 0; index < count; index++){cell.SetImagePosition(index, output.Stacks[0].Items[index].ImagePosition, (index == count - 1));}cell.ImageOrientation = output.Stacks[0].Items[0].ImageOrientationArray;cell.FrameOfReferenceUID = output.Stacks[0].Items[0].FrameOfReferenceUID;cell.SynchronizationID = "Test";// this tag to identify the cell.// Load the second cell with 512 framecell = new MedicalViewerMultiCell(null, true, 1, 1);count = output512.Stacks[0].Items.Count;imageInformation = new MedicalViewerImageInformation[count];for (index = 0; index < count; index++){codecsInformation = _codecs.GetInformation((string)(output512.Stacks[0].Items[index].Data), true);imageInformation[index] = new MedicalViewerImageInformation();imageInformation[index].ImageHeight = codecsInformation.Width;imageInformation[index].ImageWidth = codecsInformation.Width;imageInformation[index].XResolution = codecsInformation.XResolution;imageInformation[index].YResolution = codecsInformation.YResolution;}cell.Tag = 1;cell.FramesRequested += new EventHandler<MedicalViewerRequestedFramesInformationEventArgs>(cell_FramesRequested);FormClosing += new FormClosingEventHandler(MedicalViewerLocalizer_FormClosing);cell.EnableLowMemoryUsage(2, count, imageInformation);_medicalViewer.Cells.Add(cell);// add some actions that will be used to change the properties of the images inside the control.cell.AddAction(MedicalViewerActionType.WindowLevel);cell.AddAction(MedicalViewerActionType.Alpha);cell.AddAction(MedicalViewerActionType.Offset);// assign the added actions to a mouse button, meaning that when the user clicks and drags the mouse button, the associated action will be activated.cell.SetAction(MedicalViewerActionType.WindowLevel, MedicalViewerMouseButtons.Left, MedicalViewerActionFlags.Active);cell.SetAction(MedicalViewerActionType.Alpha, MedicalViewerMouseButtons.Middle, MedicalViewerActionFlags.Active);cell.SetAction(MedicalViewerActionType.Offset, MedicalViewerMouseButtons.Right, MedicalViewerActionFlags.Active);cell.ReferenceLine.Enabled = true;cell.ReferenceLine.Color = Color.Yellow;cell.ShowCellBoundaries = true;// adjust some properties of the cell and add some tags._medicalViewer.Cells[1].SetTag(2, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.UserData, "EX. ID 230-36-5448");_medicalViewer.Cells[1].SetTag(4, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Frame);_medicalViewer.Cells[1].SetTag(6, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Scale);_medicalViewer.Cells[1].SetTag(2, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.WindowLevelData);_medicalViewer.Cells[1].SetTag(1, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.FieldOfView);cell.PixelSpacing = output512.Stacks[0].PixelSpacing;for (index = 0; index < count; index++){cell.SetImagePosition(index, output512.Stacks[0].Items[index].ImagePosition, (index == count - 1));}cell.ImageOrientation = output512.Stacks[0].Items[0].ImageOrientationArray;cell.FrameOfReferenceUID = output512.Stacks[0].Items[0].FrameOfReferenceUID;cell.SynchronizationID = "Test";Controls.Add(_medicalViewer);_medicalViewer.Dock = DockStyle.Fill;_medicalViewer.SynchronizationType = MedicalViewerSynchronizationType.Automatic;DicomEngine.Shutdown();}void MedicalViewerLocalizer_FormClosing(object sender, FormClosingEventArgs e){}void cell_FramesRequested(object sender, MedicalViewerRequestedFramesInformationEventArgs e){MedicalViewerMultiCell cell = (MedicalViewerMultiCell)(sender);MedicalViewerSeriesManager output = (int)cell.Tag == 0 ? _seriesManager : _seriesManager512;RasterCodecs _codecs = new RasterCodecs();int i;RasterImage image;string fileName;if (e.RequestedFramesIndexes.Length > 0){fileName = (string)(output.Stacks[0].Items[e.RequestedFramesIndexes[0]].Data);image = _codecs.Load(fileName);}elsereturn;for (i = 1; i < e.RequestedFramesIndexes.Length; i++){fileName = (string)(output.Stacks[0].Items[e.RequestedFramesIndexes[i]].Data);image.AddPage(_codecs.Load(fileName));}cell.SetRequestedImage(image, e.RequestedFramesIndexes, MedicalViewerSetImageOptions.Insert);}public MedicalViewer Viewer{get { return _medicalViewer; }}}MedicalViewerSyncrhonizationForm GetMedicalViewerSyncrhonizationForm(){MedicalViewerSeriesManagerFrom form = new MedicalViewerSeriesManagerFrom();MedicalViewerSeriesManager output = form.LoadJamesHead();MedicalViewerSeriesManager output512 = form.LoadJamesHead512();return new MedicalViewerSyncrhonizationForm(output, output512);}// This example changes the default window level value by decrease the width by 100. Then resets the images based on the new value.public void MedicalViewerSynchronizationExample(){MedicalViewerSyncrhonizationForm myForm = GetMedicalViewerSyncrhonizationForm();MedicalViewer medicalViewer = myForm.Viewer;myForm.ShowDialog();}
Imports LeadtoolsImports Leadtools.DicomImports Leadtools.Medical3DImports Leadtools.CodecsImports Leadtools.MedicalViewerImports Leadtools.Annotations.EngineImports Leadtools.Annotations.DesignersImports Leadtools.ImageProcessing.CorePrivate Class MedicalViewerSyncrhonizationForm : Inherits FormPrivate _medicalViewer As MedicalViewerPrivate _seriesManager As MedicalViewerSeriesManagerPrivate _seriesManager512 As MedicalViewerSeriesManagerPrivate Sub MedicalViewer_SizeChanged(ByVal sender As Object, ByVal e As EventArgs)_medicalViewer.Size = New Size(Me.ClientRectangle.Right, Me.ClientRectangle.Bottom)End SubPublic Sub New(ByVal output As MedicalViewerSeriesManager, ByVal output512 As MedicalViewerSeriesManager)DicomEngine.Startup()Dim _codecs As RasterCodecs = New RasterCodecs()AddHandler SizeChanged, AddressOf MedicalViewer_SizeChanged' Create the medical viewer and adjust the size and the location._medicalViewer = New MedicalViewer(1, 2)_medicalViewer.Location = New Point(0, 0)_medicalViewer.Size = New Size(Me.ClientRectangle.Right, Me.ClientRectangle.Bottom)_seriesManager = output_seriesManager512 = output512Dim cell As MedicalViewerMultiCell = New MedicalViewerMultiCell(Nothing, True, 1, 1)Dim index As IntegerDim count As Integer = output.Stacks(0).Items.CountDim codecsInformation As CodecsImageInfoDim imageInformation As MedicalViewerImageInformation() = New MedicalViewerImageInformation(count - 1) {}index = 0Do While index < countcodecsInformation = _codecs.GetInformation(CStr(output.Stacks(0).Items(index).Data), True)imageInformation(index) = New MedicalViewerImageInformation()imageInformation(index).ImageHeight = codecsInformation.WidthimageInformation(index).ImageWidth = codecsInformation.WidthimageInformation(index).XResolution = codecsInformation.XResolutionimageInformation(index).YResolution = codecsInformation.YResolutionindex += 1Loopcell.Tag = 0AddHandler cell.FramesRequested, AddressOf cell_FramesRequestedAddHandler FormClosing, AddressOf MedicalViewerLocalizer_FormClosingcell.EnableLowMemoryUsage(2, count, imageInformation)_medicalViewer.Cells.Add(cell)' add some actions that will be used to change the properties of the images inside the control.cell.AddAction(MedicalViewerActionType.WindowLevel)cell.AddAction(MedicalViewerActionType.Alpha)cell.AddAction(MedicalViewerActionType.Offset)' assign the added actions to a mouse button, meaning that when the user clicks and drags the mouse button, the associated action will be activated.cell.SetAction(MedicalViewerActionType.WindowLevel, MedicalViewerMouseButtons.Left, MedicalViewerActionFlags.Active)cell.SetAction(MedicalViewerActionType.Alpha, MedicalViewerMouseButtons.Middle, MedicalViewerActionFlags.Active)cell.SetAction(MedicalViewerActionType.Offset, MedicalViewerMouseButtons.Right, MedicalViewerActionFlags.Active)cell.ReferenceLine.Enabled = Truecell.ReferenceLine.Color = Color.Yellowcell.ShowCellBoundaries = True' adjust some properties of the cell and add some tags._medicalViewer.Cells(0).SetTag(2, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.UserData, "EX. ID 230-36-5448")_medicalViewer.Cells(0).SetTag(4, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Frame)_medicalViewer.Cells(0).SetTag(6, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Scale)_medicalViewer.Cells(0).SetTag(2, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.WindowLevelData)_medicalViewer.Cells(0).SetTag(1, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.FieldOfView)cell.PixelSpacing = output.Stacks(0).PixelSpacingindex = 0Do While index < countcell.SetImagePosition(index, output.Stacks(0).Items(index).ImagePosition, (index = count - 1))index += 1Loopcell.ImageOrientation = output.Stacks(0).Items(0).ImageOrientationArraycell.FrameOfReferenceUID = output.Stacks(0).Items(0).FrameOfReferenceUIDcell.SynchronizationID = "Test"' this tag to identify the cell.' Load the second cell with 512 framecell = New MedicalViewerMultiCell(Nothing, True, 1, 1)count = output512.Stacks(0).Items.CountimageInformation = New MedicalViewerImageInformation(count - 1) {}index = 0Do While index < countcodecsInformation = _codecs.GetInformation(CStr(output512.Stacks(0).Items(index).Data), True)imageInformation(index) = New MedicalViewerImageInformation()imageInformation(index).ImageHeight = codecsInformation.WidthimageInformation(index).ImageWidth = codecsInformation.WidthimageInformation(index).XResolution = codecsInformation.XResolutionimageInformation(index).YResolution = codecsInformation.YResolutionindex += 1Loopcell.Tag = 1AddHandler cell.FramesRequested, AddressOf cell_FramesRequestedAddHandler FormClosing, AddressOf MedicalViewerLocalizer_FormClosingcell.EnableLowMemoryUsage(2, count, imageInformation)_medicalViewer.Cells.Add(cell)' add some actions that will be used to change the properties of the images inside the control.cell.AddAction(MedicalViewerActionType.WindowLevel)cell.AddAction(MedicalViewerActionType.Alpha)cell.AddAction(MedicalViewerActionType.Offset)' assign the added actions to a mouse button, meaning that when the user clicks and drags the mouse button, the associated action will be activated.cell.SetAction(MedicalViewerActionType.WindowLevel, MedicalViewerMouseButtons.Left, MedicalViewerActionFlags.Active)cell.SetAction(MedicalViewerActionType.Alpha, MedicalViewerMouseButtons.Middle, MedicalViewerActionFlags.Active)cell.SetAction(MedicalViewerActionType.Offset, MedicalViewerMouseButtons.Right, MedicalViewerActionFlags.Active)cell.ReferenceLine.Enabled = Truecell.ReferenceLine.Color = Color.Yellowcell.ShowCellBoundaries = True' adjust some properties of the cell and add some tags._medicalViewer.Cells(1).SetTag(2, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.UserData, "EX. ID 230-36-5448")_medicalViewer.Cells(1).SetTag(4, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Frame)_medicalViewer.Cells(1).SetTag(6, MedicalViewerTagAlignment.TopLeft, MedicalViewerTagType.Scale)_medicalViewer.Cells(1).SetTag(2, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.WindowLevelData)_medicalViewer.Cells(1).SetTag(1, MedicalViewerTagAlignment.BottomLeft, MedicalViewerTagType.FieldOfView)cell.PixelSpacing = output512.Stacks(0).PixelSpacingindex = 0Do While index < countcell.SetImagePosition(index, output512.Stacks(0).Items(index).ImagePosition, (index = count - 1))index += 1Loopcell.ImageOrientation = output512.Stacks(0).Items(0).ImageOrientationArraycell.FrameOfReferenceUID = output512.Stacks(0).Items(0).FrameOfReferenceUIDcell.SynchronizationID = "Test"Controls.Add(_medicalViewer)_medicalViewer.Dock = DockStyle.Fill_medicalViewer.SynchronizationType = MedicalViewerSynchronizationType.AutomaticDicomEngine.Shutdown()End SubPrivate Sub MedicalViewerLocalizer_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)End SubPrivate Sub cell_FramesRequested(ByVal sender As Object, ByVal e As MedicalViewerRequestedFramesInformationEventArgs)Dim cell As MedicalViewerMultiCell = CType(sender, MedicalViewerMultiCell)Dim output As MedicalViewerSeriesManagerIf CInt(cell.Tag) = 0 Thenoutput = _seriesManagerElseoutput = _seriesManager512End IfDim _codecs As RasterCodecs = New RasterCodecs()Dim i As IntegerDim image As RasterImageDim fileName As StringIf e.RequestedFramesIndexes.Length > 0 ThenfileName = CStr(output.Stacks(0).Items(e.RequestedFramesIndexes(0)).Data)image = _codecs.Load(fileName)ElseReturnEnd Ifi = 1Do While i < e.RequestedFramesIndexes.LengthfileName = CStr(output.Stacks(0).Items(e.RequestedFramesIndexes(i)).Data)image.AddPage(_codecs.Load(fileName))i += 1Loopcell.SetRequestedImage(image, e.RequestedFramesIndexes, MedicalViewerSetImageOptions.Insert)End SubPublic ReadOnly Property Viewer() As MedicalViewerGetReturn _medicalViewerEnd GetEnd PropertyEnd ClassPrivate Function GetMedicalViewerSyncrhonizationForm() As MedicalViewerSyncrhonizationFormDim form As MedicalViewerSeriesManagerFrom = New MedicalViewerSeriesManagerFrom()Dim output As MedicalViewerSeriesManager = form.LoadJamesHead()Dim output512 As MedicalViewerSeriesManager = form.LoadJamesHead512()Return New MedicalViewerSyncrhonizationForm(output, output512)End Function' This example changes the default window level value by decrease the width by 100. Then resets the images based on the new value.<TestMethod()> _Public Sub MedicalViewerSynchronizationExample()Dim myForm As MedicalViewerSyncrhonizationForm = GetMedicalViewerSyncrhonizationForm()Dim medicalViewer As MedicalViewer = myForm.ViewermyForm.ShowDialog()End Sub
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document
