←Select platform

RasterRegionXForm Class

Summary
Provides data for translating between region coordinates and external representations of those coordinates.
Syntax
C#
Objective-C
C++/CLI
Java
Python
public class RasterRegionXForm 
@interface LTRasterRegionXForm : NSObject 
public class RasterRegionXForm 
public ref class RasterRegionXForm  
class RasterRegionXForm: 
Remarks

All region methods accept a null reference. In that case, no transformation occurs. The scalar fields default to 1, the offsets default to 0, and the view perspective defaults to the image view perspective.

Several of the LEADTOOLS methods for creating and working with an image region use coordinates from an external representation of the region, such as a shape drawn in a device context. To compensate for possible differences in view perspective, scaling, and display offsets, these LEADTOOLS methods require that you provide translation information in an RasterRegionXForm object.

In most cases, the external representation of an image region is scaled and positioned relative to the display coordinates of a LEADTOOLS painting method. Therefore, the following table describes the fields to set in the RasterRegionXForm object, based on the parameters of the display methods.

When assigning an external representation to an image, every point (Xa, Ya) in the an external representation is transformed (by RasterRegionXForm) to point (Xc, Yc) in the image region as follows:

  1. Add offsets: Xb = Xa + XForm.XOffset Yb = Ya + XForm.YOffset

  2. Multiply by scalars: Xc = (Xb * XForm.XScalarNumerator) / XForm.XScalarDenominator Yc = (Yb * XForm.YScalarNumerator) / XForm.YScalarDenominator

  3. Compensate for view perspective (updating Xc and Yc in place): PointToImage(XForm.ViewPerspective, Xc, Yc)

When retrieving an external representation from an image, every point (Xa, Ya) in the image region is transformed (by RasterRegionXForm) to point (Xc, Yc) in the external region as follows:

  1. Compensate for view perspective (updating Xa and Ya in place): PointFromImage(XForm.ViewPerspective, Xa, Ya)

  2. Multiply by scalars: Xb = (Xa * XForm.XScalarNumerator) / XForm.XScalarDenominator Yb = (Ya * XForm.YScalarNumerator) / XForm.YScalarDenominator

  3. Add offsets: Xc = Xb + XForm.XOffset Yc = Yb + XForm.YOffset

For more information, refer to Translating Coordinates for a Region..

Example
C#
Java
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.ImageProcessing; 
 
 
public void RasterRegionTransformExample() 
{ 
   string srcFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp"); 
   string destFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1_TransformRegion.bmp"); 
   using (RasterCodecs codecs = new RasterCodecs()) 
   { 
      // Load the source image 
      using (RasterImage image = codecs.Load(srcFileName, 0, CodecsLoadByteOrder.BgrOrGray, 1, 1)) 
      { 
         // Add a large elliptical region  
         image.AddEllipseToRegion(null, new LeadRect(0, 0, image.ImageWidth, image.ImageHeight), RasterRegionCombineMode.Set); 
 
         // Fill the image with yellow 
         FillCommand cmd = new FillCommand(RasterColor.FromKnownColor(RasterKnownColor.Yellow)); 
         cmd.Run(image); 
 
         // Get the region 
         using (RasterRegion region = image.GetRegion(null)) 
         { 
            // Transform this region by making it twice as small 
            LeadRect bounds = region.GetBounds(); 
 
            RasterRegionXForm xform = RasterRegionXForm.Default; 
 
            xform.XScalarNumerator = 1; 
            xform.XScalarDenominator = 2; 
            xform.YScalarNumerator = 1; 
            xform.YScalarDenominator = 2; 
 
            xform.XOffset = bounds.Width / 2; 
            xform.YOffset = bounds.Height / 2; 
 
            region.Transform(xform); 
 
            // Re-set this region into the image 
            image.SetRegion(null, region, RasterRegionCombineMode.Set); 
         } 
 
         // Now fill with red and save 
         cmd = new FillCommand(RasterColor.FromKnownColor(RasterKnownColor.Red)); 
         cmd.Run(image); 
 
         codecs.Save(image, destFileName, RasterImageFormat.Bmp, 24); 
      } 
   } 
} 
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images"; 
} 
 
import static org.junit.Assert.assertTrue; 
 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
 
import org.junit.*; 
import org.junit.runner.JUnitCore; 
import org.junit.runner.Result; 
import org.junit.runner.notification.Failure; 
 
import leadtools.*; 
import leadtools.codecs.*; 
import leadtools.imageprocessing.FillCommand; 
 
 
public void rasterRegionTransformExample() { 
   final String LEAD_VARS_IMAGES_DIR = "C:\\LEADTOOLS23\\Resources\\Images"; 
   String srcFileName = combine(LEAD_VARS_IMAGES_DIR, "Image1.cmp"); 
   String destFileName = combine(LEAD_VARS_IMAGES_DIR, "Image1_TransformRegion.bmp"); 
   RasterCodecs codecs = new RasterCodecs(); 
 
   // Load the source image 
   RasterImage image = codecs.load(srcFileName, 0, CodecsLoadByteOrder.BGR_OR_GRAY, 1, 1); 
 
   // Add a large elliptical region 
   image.addEllipseToRegion(null, new LeadRect(0, 0, image.getImageWidth(), image.getImageHeight()), 
         RasterRegionCombineMode.SET); 
 
   // Fill the image with yellow 
   FillCommand cmd = new FillCommand(RasterColor.fromKnownColor(RasterKnownColor.YELLOW)); 
   cmd.run(image); 
 
   // Get the region 
   RasterRegion region = image.getRegion(null); 
 
   // Transform this region by making it twice as small 
   LeadRect bounds = region.getBounds(); 
   RasterRegionXForm xform = RasterRegionXForm.Default(); 
   xform.setXScalarNumerator(1); 
   xform.setXScalarDenominator(2); 
   xform.setYScalarNumerator(1); 
   xform.setYScalarDenominator(2); 
   xform.setXOffset(bounds.getWidth() / 2); 
   xform.setYOffset(bounds.getHeight() / 2); 
   region.transform(xform); 
 
   // Re-set this region into the image 
   image.setRegion(null, region, RasterRegionCombineMode.SET); 
 
   // Now fill with red and save 
   cmd = new FillCommand(RasterColor.fromKnownColor(RasterKnownColor.RED)); 
   cmd.run(image); 
 
   codecs.save(image, destFileName, RasterImageFormat.BMP, 24); 
 
   assertTrue("Image unsuccessfully saved", (new File(destFileName)).exists()); 
   System.out.println("Command run and image saved to " + destFileName); 
} 
Requirements

Target Platforms

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

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