GetOffset Method

Summary
Gets the current coordinates of the image.
Syntax
C#
C++/CLI
public Point2D GetOffset() 
            public: 
Point2D GetOffset();  

Return Value

Point2D object which represents the current coordinates of the image.

Remarks
  • The points are relative to the center of the cell and the center of the image. This means that it will return {0, 0} if the image position is centered on the screen.
  • If the cell has multiple frames, the retrieved offset value will be the offset value of the selected sub-cell.
  • To change the offset using the mouse button, use the AddAction method to add the action to the Medical Viewer Cell. Then use the SetAction method to associate the offset action with a mouse button.
Example
C#
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 MedicalViewerWindowLevelAndOffsetForm : Form 
{ 
   private MedicalViewer _medicalViewer; 
   private MedicalViewerSeriesManager _seriesManager; 
 
   private int width; 
   private int center; 
   private double offsetX; 
   private double offsetY; 
 
 
   void MedicalViewerLocalizer_SizeChanged(object sender, EventArgs e) 
   { 
      _medicalViewer.Size = new Size(this.ClientRectangle.Right, this.ClientRectangle.Bottom); 
   } 
 
   public MedicalViewerWindowLevelAndOffsetForm(MedicalViewerSeriesManager output) 
   { 
      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; 
 
      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.FramesRequested += new EventHandler<MedicalViewerRequestedFramesInformationEventArgs>(cell_FramesRequested); 
      FormClosing += new FormClosingEventHandler(MedicalViewerLocalizer_FormClosing); 
      cell.EnableLowMemoryUsage(2, count, imageInformation); 
      cell.FitImageToCell = false; 
 
      // add some actions that will be used to change the properties of the images inside the control. 
      cell.AddAction(MedicalViewerActionType.WindowLevel); 
      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.Offset, MedicalViewerMouseButtons.Right, MedicalViewerActionFlags.Active); 
 
      cell.ReferenceLine.Enabled = true; 
      cell.ReferenceLine.Color = Color.Yellow; 
      cell.ShowCellBoundaries = true; 
      cell.CellMouseClick += new EventHandler<MedicalViewerCellMouseEventArgs>(cell_ResetCellMouseClick); 
 
      _medicalViewer.Cells.Add(cell); 
      // 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.ScaleType = MedicalViewerScaleType.Dynamic; 
 
      cell.ActiveSubCell = cell.PageCount / 2; 
 
      width = cell.GetWindowLevelWidth(cell.ActiveSubCell); 
      center = cell.GetWindowLevelCenter(cell.ActiveSubCell); 
      Point2D point = cell.GetOffset(cell.ActiveSubCell); 
      offsetX = point.X; 
      offsetY = point.Y; 
 
 
      Controls.Add(_medicalViewer); 
      _medicalViewer.Dock = DockStyle.Fill; 
      DicomEngine.Shutdown(); 
   } 
 
   void MedicalViewerLocalizer_FormClosing(object sender, FormClosingEventArgs e) 
   { 
   } 
 
   void cell_FramesRequested(object sender, MedicalViewerRequestedFramesInformationEventArgs e) 
   { 
      MedicalViewerMultiCell cell = (MedicalViewerMultiCell)(sender); 
      RasterCodecs _codecs = new RasterCodecs(); 
      int i; 
      RasterImage image; 
      string fileName; 
 
      if (e.RequestedFramesIndexes.Length > 0) 
      { 
         fileName = (string)(_seriesManager.Stacks[0].Items[e.RequestedFramesIndexes[0]].Data); 
         image = _codecs.Load(fileName); 
      } 
      else 
         return; 
 
      for (i = 1; i < e.RequestedFramesIndexes.Length; i++) 
      { 
         fileName = (string)(_seriesManager.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; } 
   } 
   void cell_ResetCellMouseClick(object sender, MedicalViewerCellMouseEventArgs e) 
   { 
      if (e.Button == MouseButtons.Middle) 
      { 
         MedicalViewerMultiCell cell = ((MedicalViewerMultiCell)sender); 
         cell.SetWindowLevel(cell.ActiveSubCell, width, center); 
         cell.SetOffset(cell.ActiveSubCell, offsetX, offsetY); 
      } 
   } 
 
} 
MedicalViewerWindowLevelAndOffsetForm GetMedicalViewerWindowLevelAndOffsetForm() 
{ 
   MessageBox.Show("Left click to window level. \n right click to offset \n middle click to reset"); 
   MedicalViewerSeriesManagerFrom form = new MedicalViewerSeriesManagerFrom(); 
   MedicalViewerSeriesManager output = form.LoadJamesHead(); 
 
   return new MedicalViewerWindowLevelAndOffsetForm(output); 
} 
 
// 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 MedicalViewerWindowLevelAndOffsetExample() 
{ 
   MedicalViewerWindowLevelAndOffsetForm myForm = GetMedicalViewerWindowLevelAndOffsetForm(); 
   MedicalViewer medicalViewer = myForm.Viewer; 
 
   myForm.ShowDialog(); 
} 
Requirements

Target Platforms

Help Version 23.0.2024.2.29
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2024 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.MedicalViewer Assembly
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.