Image Viewer for this mode.
public virtual ImageViewer ImageViewer { get; }
@property (nonatomic, strong, readonly, nullable) LTImageViewer *imageViewer;
public:
virtual property ImageViewer^ ImageViewer
{
ImageViewer^ get()
}
The image viewer for this mode.
This value is useful when deriving your own interactive mode classes. Refer to ImageViewerInteractiveMode for an example.
using Leadtools;
using Leadtools.Controls;
using Leadtools.Codecs;
using Leadtools.Drawing;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Color;
public ImageViewerForm _form = new ImageViewerForm();
public ImageViewer _imageViewer;
public void ImageViewerInteractiveModeExample()
{
// Get the Form's ImageViewer control
_imageViewer = _form.ImageViewer;
// Use vertical view layout
_imageViewer.ViewLayout = new ImageViewerVerticalViewLayout();
// Add 4 items to the viewer
using (var codecs = new RasterCodecs())
{
for (var page = 1; page <= 4; page++)
{
var item = new ImageViewerItem();
var fileName = Path.Combine(LEAD_VARS.ImagesDir, string.Format("ocr{0}.tif", page));
// Create a thumbnail from the image
using (var image = codecs.Load(fileName, page))
{
item.Image = image.CreateThumbnail(180, 180, 24, RasterViewPerspective.TopLeft, RasterSizeFlags.Resample);
}
item.Text = string.Format("Item {0}", page - 1);
_imageViewer.Items.Add(item);
}
}
// Create and add the ItemRotate interactive mode to the viewer
ItemRotateInteractiveMode itemRotate = new ItemRotateInteractiveMode { IsEnabled = true };
_imageViewer.InteractiveModes.BeginUpdate();
_imageViewer.InteractiveModes.Add(itemRotate);
_imageViewer.InteractiveModes.EndUpdate();
}
public class ItemRotateInteractiveMode : ImageViewerInteractiveMode
{
public ItemRotateInteractiveMode() : base()
{
this.AutoItemMode = ImageViewerAutoItemMode.AutoSet;
this.IdleCursor = Cursors.VSplit;
this.MouseButtons = MouseButtons.Left | MouseButtons.Right;
}
public override string Name
{
get { return "ItemRotate"; }
}
public override int Id
{
get { return ImageViewerInteractiveMode.UserModeId; }
}
public override void Start(ImageViewer imageViewer)
{
base.Start(imageViewer);
var service = base.InteractiveService;
// Rotate events on horizontal drag
service.DragStarted += new EventHandler<InteractiveDragStartedEventArgs>(service_DragStarted);
service.DragDelta += new EventHandler<InteractiveDragDeltaEventArgs>(service_DragDelta);
service.DragCompleted += new EventHandler<InteractiveDragCompletedEventArgs>(service_DragCompleted);
// Reset event on double tap
service.DoubleTap += new EventHandler<InteractiveEventArgs>(service_DoubleTap);
}
public override void Stop(ImageViewer imageViewer)
{
if (IsStarted)
{
var service = base.InteractiveService;
service.DragStarted -= new EventHandler<InteractiveDragStartedEventArgs>(service_DragStarted);
service.DragDelta -= new EventHandler<InteractiveDragDeltaEventArgs>(service_DragDelta);
service.DragCompleted -= new EventHandler<InteractiveDragCompletedEventArgs>(service_DragCompleted);
service.DoubleTap -= new EventHandler<InteractiveEventArgs>(service_DoubleTap);
base.Stop(imageViewer);
}
}
private void service_DragStarted(object sender, InteractiveDragStartedEventArgs e)
{
// Make sure pinch is not working, otherwise, ignore pan
if (!this.CanStartWork(e))
return;
// Make sure we are on an item
if (this.Item == null)
return;
Debug.WriteLine("Item Starting Rotation Angle: " + this.Item.RotateAngle);
e.IsHandled = true;
this.OnWorkStarted(EventArgs.Empty);
}
private void service_DragDelta(object sender, InteractiveDragDeltaEventArgs e)
{
if (!this.IsWorking)
return;
var item = this.Item;
if (item == null)
return;
// Find out what to do
if (e.Change.X == 0 && e.Change.Y == 0)
return;
// Rotate clockwise when dragging right and counter-clockwise when dragging left
if(e.Change.X > 0)
this.Item.RotateAngle += 2;
else if (e.Change.X < 0)
this.Item.RotateAngle -= 2;
e.IsHandled = true;
}
private void service_DragCompleted(object sender, InteractiveDragCompletedEventArgs e)
{
if (!this.IsWorking)
return;
Debug.WriteLine("Item Final Rotation Angle: " + this.Item.RotateAngle);
e.IsHandled = true;
OnWorkCompleted(EventArgs.Empty);
}
private void service_DoubleTap(object sender, InteractiveEventArgs e)
{
// Make sure we not working already
if (this.IsWorking || !this.CanStartWork(e))
return;
// Make sure we have an item
var item = this.Item;
if (item == null)
return;
e.IsHandled = true;
this.OnWorkStarted(EventArgs.Empty);
ResetPosition(this.ImageViewer, item);
this.OnWorkCompleted(EventArgs.Empty);
}
private void ResetPosition(ImageViewer imageViewer, ImageViewerItem item)
{
// Use the identity matrix to reset the transform of the item
item.Transform = LeadMatrix.Identity;
}
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images";
}
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
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.