public static void FrameRegion(
RasterImage image,
Graphics graphics,
RasterRegionXForm xform,
int frameIndex
)
image
The source image.
graphics
System.Drawing.Graphics object where the image is displayed and where the frame is to appear.
xform
Leadtools.RasterRegionXForm object that LEADTOOLS uses to translate between display coordinates and image coordinates.
frameIndex
Zero-index of the frame to display. Possible values are from 0 to MaxRegionFrameIndex. You can animate the region frame by cycling between these values.
If the region includes non-contiguous shapes, each shape is outlined. The outline, itself, is inside the region.
Before calling this method, create a Leadtools.RasterRegionXForm object and set its values, which LEADTOOLS uses to translate between device context coordinates and image coordinates.
This method is designed to produce an animated frame, which you can implement by calling the method with a timer event that cycles through the possible frame types.
For more information refer to RasterImage and GDI/GDI+, Creating a Region and Working with the Existing Region.
Frame Add Function - Before
Frame Add Function - After
View additional platform support for this Frame Add function.
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Drawing;
using Leadtools.ImageProcessing;
public void FrameRegionExample()
{
FrameRegionForm f = new FrameRegionForm();
f.ShowDialog();
}
class FrameRegionForm : Form
{
private int frameIndex;
private RasterImage image;
private System.Windows.Forms.Timer timer;
private bool fillRegion;
public FrameRegionForm()
{
// Load the image
using (RasterCodecs codecs = new RasterCodecs())
{
string srcFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp");
image = codecs.Load(srcFileName);
}
// Add a region to the image
LeadRect rc = new LeadRect(image.Width / 3, image.Height / 3, image.Width / 3, image.Height / 3);
RasterRegionXForm xform = new RasterRegionXForm();
xform.ViewPerspective = RasterViewPerspective.TopLeft;
image.AddEllipseToRegion(xform, rc, RasterRegionCombineMode.Set);
// initialize the frame index
frameIndex = 0;
fillRegion = true;
Text = "Double click to enable/disable filling the region";
// Create the timer
timer = new System.Windows.Forms.Timer();
timer.Interval = 100;
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
protected override void Dispose(bool disposing)
{
// Clean up
if (disposing)
{
if (timer != null)
{
timer.Dispose();
}
if (image != null)
{
image.Dispose();
}
}
base.Dispose(disposing);
}
protected override void OnDoubleClick(EventArgs e)
{
fillRegion = !fillRegion;
Invalidate();
base.OnDoubleClick(e);
}
private RasterRegionXForm GetXForm(LeadRect destRect)
{
// Calculate xform when the image is painted into 'destRect'
RasterRegionXForm xform = new RasterRegionXForm();
xform.ViewPerspective = RasterViewPerspective.TopLeft;
xform.XOffset = destRect.Left;
xform.YOffset = destRect.Top;
xform.XScalarDenominator = image.Width;
xform.XScalarNumerator = destRect.Width;
xform.YScalarDenominator = image.Height;
xform.YScalarNumerator = destRect.Height;
return xform;
}
protected override void OnPaint(PaintEventArgs e)
{
// Draw the image fit and center on this form
LeadRect destRect = LeadRect.FromLTRB(ClientRectangle.Left, ClientRectangle.Top, ClientRectangle.Right, ClientRectangle.Bottom);
destRect = RasterImage.CalculatePaintModeRectangle(
image.ImageWidth,
image.ImageHeight,
destRect,
RasterPaintSizeMode.Fit,
RasterPaintAlignMode.Center,
RasterPaintAlignMode.Center);
LeadRect clipRect = LeadRect.FromLTRB(e.ClipRectangle.Left, e.ClipRectangle.Top, e.ClipRectangle.Right, e.ClipRectangle.Bottom);
RasterImagePainter.Paint(image, e.Graphics, LeadRect.Empty, LeadRect.Empty, destRect, clipRect, RasterPaintProperties.Default);
if (fillRegion)
{
RasterRegionXForm xform = GetXForm(destRect);
RasterImagePainter.FillRegion(image, e.Graphics, xform, new RasterColor(255, 0, 255));
}
base.OnPaint(e);
}
private void timer_Tick(object sender, EventArgs e)
{
// Frame the image region
LeadRect destRect = LeadRect.FromLTRB(ClientRectangle.Left, ClientRectangle.Top, ClientRectangle.Right, ClientRectangle.Bottom);
destRect = RasterImage.CalculatePaintModeRectangle(
image.ImageWidth,
image.ImageHeight,
destRect,
RasterPaintSizeMode.Fit,
RasterPaintAlignMode.Center,
RasterPaintAlignMode.Center);
RasterRegionXForm xform = GetXForm(destRect);
using (Graphics g = CreateGraphics())
{
RasterImagePainter.FrameRegion(image, g, xform, frameIndex);
}
// advance to next frame
frameIndex++;
if (frameIndex > RasterImagePainter.MaxRegionFrameIndex)
{
frameIndex = 0;
}
}
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images";
}