public static void FillRegion(
RasterImage image,
IntPtr hdc,
RasterRegionXForm xform,
RasterColor color
)
image
The source image.
hdc
Windows device context handle 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.
color
The color value to be XORed with colors within a region to determine the new colors for displaying the region. The color corresponding to a particular part of the region is determined as follows: Region Color Displayed = (color of pixel in region) XOR (crRgnColor)
This method is particularly useful when displaying regions with black and white images. All black pixels in a region are displayed with color specified by color. and all white pixels are displayed ~( color). For example, suppose that color is light green (BGR 0x80FF40). All black pixels in the region are displayed as color. All white pixels in the region are displayed as 0xFFFFFF XOR 0x80FF40 = 0x7F00BF, which is purple.
For more information refer to RasterImage and GDI/GDI+.
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";
}