Leadtools.WinForms Namespace > RasterImageViewer Class : CenterAtPoint Method |
If the value of CenterZoomAtPointScaleFactor was anything other than the default value of 1, then this method will zooms in (if the value is greater than 1) or zooms out (if the value is less than 0) the image as well around the same center point.
Imports Leadtools.WinForms Imports Leadtools Imports Leadtools.Codecs Imports Leadtools.ImageProcessing.Color Imports Leadtools.Drawing Sub ZoomAndCenter(ByVal viewer As RasterImageViewer, ByVal scaleFactor As Double) ' Minimum and maximum scale factors allowed (change if you have to) Const minimumScaleFactor As Double = 0.05 Const maximumScaleFactor As Double = 11 ' Normalize the scale factor based on min and max scaleFactor = Math.Max(minimumScaleFactor, Math.Min(maximumScaleFactor, scaleFactor)) ' Check if we need to change the scale factor for the viewer If (viewer.ScaleFactor <> scaleFactor) Then ' Get the current center in logical units ' We will use this point later to re-center the viewer ' Get what you see in physical coordinates Dim rc As Rectangle = Rectangle.Intersect(viewer.PhysicalViewRectangle, viewer.ClientRectangle) ' Get the center of what you see in physical coordinates Dim center As New PointF(rc.Left + rc.Width \ 2, rc.Top + rc.Height \ 2) Dim t As New Transformer(viewer.Transform) ' Get the center of what you see in logical coordinates center = t.PointToLogical(center) ' Set the new scale factor viewer.ScaleFactor = scaleFactor ' Bring the original center into the view center t = New Transformer(viewer.Transform) ' Get the center of what you saw before the zoom in physical coordinates center = t.PointToPhysical(center) ' Bring the old center into the center of the view viewer.CenterAtPoint(Point.Round(center)) End If End Sub
using Leadtools.WinForms; using Leadtools; using Leadtools.Codecs; using Leadtools.ImageProcessing.Color; using Leadtools.Drawing; void ZoomAndCenter(RasterImageViewer viewer, double scaleFactor) { // Minimum and maximum scale factors allowed (change if you have to) const double minimumScaleFactor = 0.05; const double maximumScaleFactor = 11; // Normalize the scale factor based on min and max scaleFactor = Math.Max(minimumScaleFactor, Math.Min(maximumScaleFactor, scaleFactor)); // Check if we need to change the scale factor for the viewer if(viewer.ScaleFactor != scaleFactor) { // Get the current center in logical units // We will use this point later to re-center the viewer // Get what you see in physical coordinates Rectangle rc = Rectangle.Intersect(viewer.PhysicalViewRectangle, viewer.ClientRectangle); // Get the center of what you see in physical coordinates PointF center = new PointF(rc.Left + rc.Width / 2, rc.Top + rc.Height / 2); Transformer t = new Transformer(viewer.Transform); // Get the center of what you see in logical coordinates center = t.PointToLogical(center); // Set the new scale factor viewer.ScaleFactor = scaleFactor; // Bring the original center into the view center t = new Transformer(viewer.Transform); // Get the center of what you saw before the zoom in physical coordinates center = t.PointToPhysical(center); // Bring the old center into the center of the view viewer.CenterAtPoint(Point.Round(center)); } }