LEAD Home page Support Contact Downloads

 

Inside this month's Newsletter:
WELCOME!
Events: Microsoft TechEd Developers Conference
Featured Product: .NET version of Medical Image Viewer Control
Code Tip: Medical Image Viewer Web Demo
Opportunities for Success Stories
Special - 10% off any new LEADTOOLS SDK or Addon

LEADTOOLS Survey - Register to Win FREE Software


Welcome to LEAD's Developer Newsletter!


Welcome! We hope you enjoy this edition of LEADTOOLS resource. In each issue, we will feature new and upgraded products, share useful development tips and announce upcoming events. In addition, we will make you aware of any product specials that may be in effect.


Events: Microsoft TechEd Developers Conference

Visit LEAD at TechEd, Booth #1424 on June 3 - 6, 2008

Stop by our booth to learn more about our new and upcoming features. Live demos will be shown, and technical support will be on hand for any questions. For more information, contact sales@LEADTOOLS.com.

Here are some of the new features and updates we will be discussing at TechEd:

  • Forms Recognition and processing.
  • PDF/A support.
  • WPF viewers, annotations and WIC Codecs.
  • Animated GIF and MNG in .NET.
  • Updated DICOM IOD to 2008 specification.
  • Medical Viewer Framework with WFC components.
  • JPIP client/server toolkit.
Featured Product: .NET version of Medical Image Viewer Control

The LEADTOOLS Medical Image Viewer greatly reduces the complexity of displaying medical studies in various layouts by handling the synchronization of scrolling, window leveling, zooming and panning of images in various display cells. In addition, it includes many high-level GUI tools such as annotations, region of interest, cine, stacking, overlay text and rulers. Using the LEADTOOLS Medical Image Viewer, .NET developers can quickly add high-end medical image display capabilities found in diagnostic workstations to their applications.

Key Features:

  • Built-in image manipulation tools
    • Window level (brightness and contrast).
    • Zooming or scaling.
    • Panning or moving.
    • Image rotation.
    • Paging through stack of images using mouse.
    • Tools can be applies to one image or all image cells.
  • Annotation tools
    • Rectangle, ellipse, arrow, text, highlight.
    • Protractor and ruler for taking measurements.
    • Ruler calibration.
    • Annotation Events.
    • Created event.
    • Clicked event.
    • Support for changing properties such as foreground and background colors of the text object.
    • Support to rotate, flip and reverse the annotation container.
    • Load and save the annotation objects that are drawn.
  • Region of interest tools
    • Region Types:
      • Rectangle
      • Ellipse
      • Freehand
      • Polygon
      • Magic wand or water shed
      • Color range
    • Region shrink-wrap tool to quick and accurately identify an object from very rough outline around an object in the image.
    • Region nudge tool to make minor region adjustments.
    • Load and save region information that is drawn on the control.
    • Region change event to notify when region is created, removed or changed.
    • Get or set region handle from an image cell.
  • Cine/animation tools
    • Control speed of cine playback.
    • Loop, swipe, shuffle play modes.
  • Programmatically adjust all the settings related to each one of these tools such as:
    • Mouse button to associate with a tool.
    • Keyboard button to associate with a tool.
    • Cursor to use when a tool is activated.
    • Apply the tool to a single image or to all images in a series.
    • Apply the tool to a single series or to all series managed by the control.
    • Apply the tool programmatically or through user interaction.
    • Includes a function to easily convert mouse coordinates to bitmap coordinates.
    • Events for mouse actions.
  • Display color and grayscale (up to 16-bit signed ) images.
  • Adjust screen layouts. Each series can have a specific layout option such as stack, cine, row X column and each cell can be of different sizes.
  • User configurable overlay text and color, typically used for showing patient, study, image information on top of the image.
  • Built-in overlays such as window center and window width values, field of view, scale on the side and at the bottom of each image.
  • Built-in interpolated rendering.
  • Supports mouse events for up to five mouse buttons.
  • Pre and post rendering notifications.
  • For low memory systems, supports smart cell paging to load only the images that are visible.
  • Freeze a sub-cell state.
  • Print individual cell or series layout with and without overlay text, regions or annotations.

Key Benefits:

  • Quickly develop applications that require high-end viewing functionality.
  • No additional cost to LEADTOOLS V15 Medical Imaging Suite customers.
  • Your application benefits from features being added to the Medical Image Viewer.

Example Uses:

  • High-end medical diagnostic workstations.
  • Medical review and quality assurance stations.
  • Image capture modality stations.
  • DICOM viewers.
  • Light-weight viewers distributed on a CD with patient images.
  • Teleradiology (i.e. Web-based DICOM viewers).

Back to Top

LEADTOOLS Code Tip: Medical Image Viewer

The Medical Image Viewer Control provides support for viewing one or more images and for real time manipulation of these images. This control allows the user to create a real world project by writing only a few lines of code. The control can be used for image enhancement, analyzing and comparing, and fully supports single and multi-framed medical images. Furthermore, this control is equipped with the tools to provide the user with the capability to create and customize his own control.

using System;
using System.IO;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Text;
using System.Threading;

using Leadtools;
using Leadtools.Dicom;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;
using Leadtools.MedicalViewer;
using Leadtools.ImageProcessing.Color;

namespace MedicalViewerDemo
{
   /// <summary>
   /// Summary description for MedicalViewer.
   /// The Medical Viewer Control Provides support for viewing 
   /// one or more images and for the real time manipulation.
   /// This control allows the user to create a decent project 
   /// by writing only few lines.
   /// This control has a great usage on the medical field,
   /// since it's very useful for image enhancement, analyzing and 
   /// comparing, and fully support for the medical images and 
   /// multi-pages images. 
   /// Further more, the control equipped with the tools to provide 
   /// the user with the capability to create and customize his own 
   /// control.
   /// </summary>
   public class MedicalViewerForm : Form
   {
      private MedicalViewer _medicalViewer;
      private RasterImage _xaImage;
      private RasterImage _mrImage;
      private RasterCodecs _codecs;

      private void AddMouseActions()
      {
         try
         {
            // Add the most common actions to the viewer.
            _medicalViewer.AddAction(MedicalViewerActionType.WindowLevel);
            _medicalViewer.AddAction(MedicalViewerActionType.Scale);
            _medicalViewer.AddAction(MedicalViewerActionType.Offset);
            _medicalViewer.AddAction(MedicalViewerActionType.Stack);

            // Assign each of the added action to a different mouse button.
            _medicalViewer.SetAction(MedicalViewerActionType.WindowLevel, 
               MedicalViewerMouseButtons.Left, MedicalViewerActionFlags.Active 
               | MedicalViewerActionFlags.RealTime);
            _medicalViewer.SetAction(MedicalViewerActionType.Offset, 
               MedicalViewerMouseButtons.Right, MedicalViewerActionFlags.Active 
               | MedicalViewerActionFlags.RealTime);
            _medicalViewer.SetAction(MedicalViewerActionType.Scale, 
               MedicalViewerMouseButtons.Middle, 
               MedicalViewerActionFlags.Active 
               | MedicalViewerActionFlags.RealTime);
            _medicalViewer.SetAction(MedicalViewerActionType.Stack, 
               MedicalViewerMouseButtons.Wheel, MedicalViewerActionFlags.Active 
               | MedicalViewerActionFlags.RealTime);
         }
         catch (Exception exception)
         {
            System.Diagnostics.Debug.Assert(false);
            throw exception;
         }
      }

      private void AddXA()
      {
         try
         {
            if (_xaImage != null)
            {
               // Add a new cell to the medical viewer.
               _medicalViewer.Cells.Add(new MedicalViewerCell(_xaImage, true, 1, 1));

               // Add some tags to the medical viewer first cell (XA) tags
               // Top left 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);

               // Bottom left tags
               _medicalViewer.Cells[0].SetTag(2, MedicalViewerTagAlignment.BottomLeft, 
                  MedicalViewerTagType.WindowLevelData);
               _medicalViewer.Cells[0].SetTag(1, MedicalViewerTagAlignment.BottomLeft, 
                  MedicalViewerTagType.FieldOfView);
               _medicalViewer.Cells[0].SetTag(0, MedicalViewerTagAlignment.BottomLeft, 
                  MedicalViewerTagType.RulerUnit);

               // Top right tags
               _medicalViewer.Cells[0].SetTag(1, MedicalViewerTagAlignment.TopRight, 
                  MedicalViewerTagType.UserData, "Good, Guy");
               _medicalViewer.Cells[0].SetTag(2, MedicalViewerTagAlignment.TopRight, 
                  MedicalViewerTagType.UserData, "PID 125-98-445");
               _medicalViewer.Cells[0].SetTag(3, MedicalViewerTagAlignment.TopRight, 
                  MedicalViewerTagType.UserData, "DOB 08/02/1929");
               _medicalViewer.Cells[0].SetTag(5, MedicalViewerTagAlignment.TopRight, 
                  MedicalViewerTagType.UserData, "03/16/1999");
            }
         }
         catch (Exception exception)
         {
            System.Diagnostics.Debug.Assert(false);
            throw exception;
         }
      }

      private void AddMR()
      {
         try
         {
            if (_mrImage != null)
            {
               // Add a new cell to the medical viewer.
               _medicalViewer.Cells.Add(new MedicalViewerCell(_mrImage, true));

               // add some tags to the medical viewer.
               // Top left tags
               _medicalViewer.Cells[1].SetTag(1, MedicalViewerTagAlignment.TopLeft, 
                  MedicalViewerTagType.UserData, "MRI");
               _medicalViewer.Cells[1].SetTag(2, MedicalViewerTagAlignment.TopLeft, 
                  MedicalViewerTagType.UserData, "EX. ID G-1194-24");
               _medicalViewer.Cells[1].SetTag(4, MedicalViewerTagAlignment.TopLeft, 
                  MedicalViewerTagType.Frame);
               _medicalViewer.Cells[1].SetTag(6, MedicalViewerTagAlignment.TopLeft, 
                  MedicalViewerTagType.Scale);

               // Bottom left tags
               _medicalViewer.Cells[1].SetTag(2, MedicalViewerTagAlignment.BottomLeft, 
                  MedicalViewerTagType.WindowLevelData);
               _medicalViewer.Cells[1].SetTag(1, MedicalViewerTagAlignment.BottomLeft, 
                  MedicalViewerTagType.FieldOfView);
               _medicalViewer.Cells[1].SetTag(0, MedicalViewerTagAlignment.BottomLeft, 
                  MedicalViewerTagType.UserData, "THK 10 mm");
               _medicalViewer.Cells[1].SetTag(3, MedicalViewerTagAlignment.BottomLeft, 
                  MedicalViewerTagType.UserData, "TR 1333.33");
               _medicalViewer.Cells[1].SetTag(4, MedicalViewerTagAlignment.BottomLeft, 
                  MedicalViewerTagType.UserData, "TE 11.98");
               _medicalViewer.Cells[1].SetTag(6, MedicalViewerTagAlignment.BottomLeft, 
                  MedicalViewerTagType.UserData, "Comm longaxis - Normal");

               // Top right tags
               _medicalViewer.Cells[1].SetTag(0, MedicalViewerTagAlignment.TopRight, 
                  MedicalViewerTagType.UserData, "Community Hospital");
               _medicalViewer.Cells[1].SetTag(1, MedicalViewerTagAlignment.TopRight, 
                  MedicalViewerTagType.UserData, "Nice, Fellow");
               _medicalViewer.Cells[1].SetTag(2, MedicalViewerTagAlignment.TopRight, 
                  MedicalViewerTagType.UserData, "PID 123-45-6789");
               _medicalViewer.Cells[1].SetTag(3, MedicalViewerTagAlignment.TopRight, 
                  MedicalViewerTagType.UserData, "DOB 05/13/1936");
               _medicalViewer.Cells[1].SetTag(4, MedicalViewerTagAlignment.TopRight, 
                  MedicalViewerTagType.UserData, "Sex M");
               _medicalViewer.Cells[1].SetTag(5, MedicalViewerTagAlignment.TopRight, 
                  MedicalViewerTagType.UserData, "06/26/1995");

               // change some properties of the medical viewer second cell.
               _medicalViewer.Cells[1].Rows = 2;
               _medicalViewer.Cells[1].Columns = 2;
            }
         }
         catch (Exception exception)
         {
            System.Diagnostics.Debug.Assert(false);
            throw exception;
         }
      }

      private void InitializeViewerControl()
      {
         try
         {
            //Add mouse actions to the viewer.
            AddMouseActions();
            // Add XA.dcm to the viewer.
            AddXA();
            // Add MR.dcm to the viewer.
            AddMR();
         }
         catch (Exception exception)
         {
            System.Diagnostics.Debug.Assert(false);
            throw exception;
         }

      }
      public MedicalViewerForm()
      {
         try
         {
            RasterSupport.Unlock(RasterSupportType.MedicalNet, "Your key here"); 
            RasterCodecs.Startup();
            _codecs = new RasterCodecs();

            _xaImage = _codecs.Load(
               @"C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\XA.dcm");
            _mrImage = _codecs.Load(
               @"C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\Mr.dcm");

            // 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);

            InitializeViewerControl();

            RasterCodecs.Shutdown();
            Controls.Add(_medicalViewer);
         }
         catch ( Exception exception )
         {
            System.Diagnostics.Debug.Assert ( false ) ;
            throw exception ;
         }
      }
   }
}

 

Opportunities for Success Stories

If you have used a LEADTOOLS product to develop an application and want to share your story, then let us know! If you're not a developer and just want to share your experience with one of our end-user utilites, we'd love to hear from you too! Not only will your story be posted on our website, but we will feature it in the newsletter.

Newsletter Special


Special
Get a 10% discount on the purchase of a new LEADTOOLS SDK and/or LEADTOOLS SDK Add-on.

Use the coupon code LTIssue19Newsletter during check-out, or give to the sales representative when calling.

Buy Now!

Offer expires June 28, 2008


Register to Win


Register to win free software!

Click here to complete a short online survey that
will enter you to win LEADTOOLS ePrint!

LEADTOOLS ePrint File Converter

LEADTOOLS ePrint File Conversion Software - Convert ANY file to and from over 150 document and image formats including searchable PDF, DOC, HTML, TXT , Multi-page TIFF, JPG, GIF, PNG and many more! ePrint makes file conversion to searchable PDF easier from any application.

Click on the boxshot to learn more about ePrint

Last Month's Winner:
Congratulations Cliff Thomas!

Back to Top

Contact LEAD
General Contact Information
LEAD Technologies, Inc.
1201 Greenwood Cliff
Suite 400
Charlotte, NC 28204 U.S.A.
800-637-4699
704-332-5532
704-372-8161 (fax)
Contact Sales
800-637-4699
704-332-5532
704-372-8116 (fax)
sales@leadtools.com

Contact Support
704-372-9681
704-372-8116 (fax)
support@leadtools.com

 

 

 

If you would like to remove yourself from the LEADTOOLS Newsletter Email List, click UNSUBSCRIBE