LEADTOOLS (Leadtools assembly) Send comments on this topic. | Back to Introduction - All Topics | Help Version 17.0.3.29
Clone() Method
See Also 
Leadtools Namespace > RasterImage Class > Clone Method : Clone() Method



Creates an exact copy of the current page of this RasterImage. Supported in Silverlight, Windows Phone 7

Syntax

Visual Basic (Declaration) 
Overloads Public Function Clone() As RasterImage
Visual Basic (Usage)Copy Code
Dim instance As RasterImage
Dim value As RasterImage
 
value = instance.Clone()
C# 
public RasterImage Clone()
C++/CLI 
public:
RasterImage^ Clone(); 

Return Value

The RasterImage this method creates.

Example

This example loads a multi-page image and clones it in 3 different ways.

Visual BasicCopy Code
Public Sub CloneExample()
      Dim codecs As RasterCodecs = New RasterCodecs()

      Dim srcFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "eye.gif")

      ' Load the multi-page image
      Dim srcImage As RasterImage = codecs.Load(srcFileName)
      Console.WriteLine("Pages in source image: {0}", srcImage.PageCount)

      ' Use the Clone method to clone this image
      ' Notice, this method only clones the current active page only
      Dim destImage1 As RasterImage = srcImage.Clone()
      Console.WriteLine("Pages in image created with Clone: {0}", destImage1.PageCount)
      Debug.Assert(destImage1.PageCount = 1)

      ' Use the Clone rectangle method to clone this image
      ' Notice, this method also clones the current active page only
      Dim rc As LeadRect = New LeadRect(0, 0, srcImage.Width \ 2, srcImage.Height \ 2)
      Console.WriteLine("Cloning with a rectangle = {0}", rc.ToString())
      Dim destImage2 As RasterImage = srcImage.Clone(rc)
      Console.WriteLine("Pages in image created with Clone(LeadRect): {0}", destImage2.PageCount)
      Console.WriteLine("Image created with Clone(LeadRect) size = {0} by {1}", destImage2.Width, destImage2.Height)
      Debug.Assert(destImage2.PageCount = 1)
      Debug.Assert(destImage2.Width = srcImage.Width \ 2)
      Debug.Assert(destImage2.Height = srcImage.Height \ 2)

      ' Use the CloneAll method, this should create a copy
      ' of all the pages
      Dim destImage3 As RasterImage = srcImage.CloneAll()
      Console.WriteLine("Pages in image created with CloneAll: {0}", destImage3.PageCount)
      Debug.Assert(destImage3.PageCount = srcImage.PageCount)

      ' Use the CloneCommand, this allows you to have a progress
      ' bar as well as control the memory flags, here
      ' we will create a destination image using disk memory.
      Dim cloneCmd As CloneCommand = New CloneCommand()
      AddHandler cloneCmd.Progress, AddressOf cloneCmd_Progress
      cloneCmd.CreateFlags = RasterMemoryFlags.Disk
      cloneCmd.Run(srcImage)
      RemoveHandler cloneCmd.Progress, AddressOf cloneCmd_Progress

      Dim destImage4 As RasterImage = cloneCmd.DestinationImage
      Console.WriteLine("Pages in image created with CloneCommand: {0}", destImage4.PageCount)
      Console.WriteLine("Disk memory model of image created with CloneCommand: {0}", destImage4.IsDiskMemory)
      Debug.Assert(destImage4.PageCount = 1)
      Debug.Assert(destImage4.IsDiskMemory)

      ' Clean up
      destImage4.Dispose()
      destImage3.Dispose()
      destImage2.Dispose()
      destImage1.Dispose()
      srcImage.Dispose()
      codecs.Dispose()
   End Sub

   Private Sub cloneCmd_Progress(ByVal sender As Object, ByVal e As RasterCommandProgressEventArgs)
      If e.Percent = 0 Then
         Console.WriteLine("Clone progress started")
      End If
      If e.Percent = 100 Then
         Console.WriteLine("Clone progress ended")
      End If
   End Sub

Public NotInheritable Class LEAD_VARS
   Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
C#Copy Code
public void CloneExample()
   {
      RasterCodecs codecs = new RasterCodecs();

      string srcFileName = Path.Combine(LEAD_VARS.ImagesDir, "eye.gif");

      // Load the multi-page image
      RasterImage srcImage = codecs.Load(srcFileName);
      Console.WriteLine("Pages in source image: {0}", srcImage.PageCount);

      // Use the Clone method to clone this image
      // Notice, this method only clones the current active page only
      RasterImage destImage1 = srcImage.Clone();
      Console.WriteLine("Pages in image created with Clone: {0}", destImage1.PageCount);
      Debug.Assert(destImage1.PageCount == 1);

      // Use the Clone rectangle method to clone this image
      // Notice, this method also clones the current active page only
      LeadRect rc = new LeadRect(0, 0, srcImage.Width / 2, srcImage.Height / 2);
      Console.WriteLine("Cloning with a rectangle = {0}", rc.ToString());
      RasterImage destImage2 = srcImage.Clone(rc);
      Console.WriteLine("Pages in image created with Clone(LeadRect): {0}", destImage2.PageCount);
      Console.WriteLine("Image created with Clone(LeadRect) size = {0} by {1}", destImage2.Width, destImage2.Height);
      Debug.Assert(destImage2.PageCount == 1);
      Debug.Assert(destImage2.Width == srcImage.Width / 2);
      Debug.Assert(destImage2.Height == srcImage.Height / 2);

      // Use the CloneAll method, this should create a copy
      // of all the pages
      RasterImage destImage3 = srcImage.CloneAll();
      Console.WriteLine("Pages in image created with CloneAll: {0}", destImage3.PageCount);
      Debug.Assert(destImage3.PageCount == srcImage.PageCount);

      // Use the CloneCommand, this allows you to have a progress
      // bar as well as control the memory flags, here
      // we will create a destination image using disk memory.
      CloneCommand cloneCmd = new CloneCommand();
      cloneCmd.Progress += new EventHandler<RasterCommandProgressEventArgs>(cloneCmd_Progress);
      cloneCmd.CreateFlags = RasterMemoryFlags.Disk;
      cloneCmd.Run(srcImage);
      cloneCmd.Progress -= new EventHandler<RasterCommandProgressEventArgs>(cloneCmd_Progress);

      RasterImage destImage4 = cloneCmd.DestinationImage;
      Console.WriteLine("Pages in image created with CloneCommand: {0}", destImage4.PageCount);
      Console.WriteLine("Disk memory model of image created with CloneCommand: {0}", destImage4.IsDiskMemory);
      Debug.Assert(destImage4.PageCount == 1);
      Debug.Assert(destImage4.IsDiskMemory);

      // Clean up
      destImage4.Dispose();
      destImage3.Dispose();
      destImage2.Dispose();
      destImage1.Dispose();
      srcImage.Dispose();
      codecs.Dispose();
   }

   void cloneCmd_Progress(object sender, RasterCommandProgressEventArgs e)
   {
      if(e.Percent == 0)
         Console.WriteLine("Clone progress started");
      if(e.Percent == 100)
         Console.WriteLine("Clone progress ended");
   }

static class LEAD_VARS
{
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
SilverlightCSharpCopy Code
public void CloneExample(RasterImage image)
{
   RasterImage srcImage = image; // should be a multi-page image (eye.gif)
   Debug.WriteLine("Pages in source image: {0}", srcImage.PageCount);

   // Use the Clone method to clone this image
   // Notice, this method only clones the current active page only
   RasterImage destImage1 = srcImage.Clone();
   Debug.WriteLine("Pages in image created with Clone: {0}", destImage1.PageCount);
   Debug.Assert(destImage1.PageCount == 1);

   // Use the Clone rectangle method to clone this image
   // Notice, this method also clones the current active page only
   LeadRect rc = new LeadRect(0, 0, srcImage.Width / 2, srcImage.Height / 2);
   Debug.WriteLine("Cloning with a rectangle = {0}", rc.ToString());
   RasterImage destImage2 = srcImage.Clone(rc);
   Debug.WriteLine("Pages in image created with Clone(Rectangle): {0}", destImage2.PageCount);
   Debug.WriteLine("Image created with Clone(Rectangle) size = {0} by {1}", destImage2.Width, destImage2.Height);
   Debug.Assert(destImage2.PageCount == 1);
   Debug.Assert(destImage2.Width == srcImage.Width / 2);
   Debug.Assert(destImage2.Height == srcImage.Height / 2);

   // Use the CloneAll method, this should create a copy
   // of all the pages
   RasterImage destImage3 = srcImage.CloneAll();
   Debug.WriteLine("Pages in image created with CloneAll: {0}", destImage3.PageCount);
   Debug.Assert(destImage3.PageCount == srcImage.PageCount);

   // Use the CloneCommand, this allows you to have a progress
   // bar as well as control the memory flags, here
   // we will create a destination image using conventional memory.
   CloneCommand cloneCmd = new CloneCommand();
   cloneCmd.Progress += new EventHandler<RasterCommandProgressEventArgs>(cloneCmd_Progress);
   cloneCmd.CreateFlags = RasterMemoryFlags.Conventional;
   cloneCmd.Run(srcImage);
   cloneCmd.Progress -= new EventHandler<RasterCommandProgressEventArgs>(cloneCmd_Progress);

   RasterImage destImage4 = cloneCmd.DestinationImage;
   Debug.WriteLine("Pages in image created with CloneCommand: {0}", destImage4.PageCount);
   Debug.WriteLine("Disk memory model of image created with CloneCommand: {0}", destImage4.IsDiskMemory);
   Debug.Assert(destImage4.PageCount == 1);
   Debug.Assert(destImage4.IsConventionalMemory);

   // Clean up
   destImage4.Dispose();
   destImage3.Dispose();
   destImage2.Dispose();
   destImage1.Dispose();
   srcImage.Dispose();
}

void cloneCmd_Progress(object sender, RasterCommandProgressEventArgs e)
{
   if (e.Percent == 0)
      Debug.WriteLine("Clone progress started");
   if (e.Percent == 100)
      Debug.WriteLine("Clone progress ended");
}
SilverlightVBCopy Code
Public Sub CloneExample(ByVal image As RasterImage)
   Dim srcImage As RasterImage = image ' should be a multi-page image (eye.gif)
   Debug.WriteLine("Pages in source image: {0}", srcImage.PageCount)

   ' Use the Clone method to clone this image
   ' Notice, this method only clones the current active page only
   Dim destImage1 As RasterImage = srcImage.Clone()
   Debug.WriteLine("Pages in image created with Clone: {0}", destImage1.PageCount)
   Debug.Assert(destImage1.PageCount = 1)

   ' Use the Clone rectangle method to clone this image
   ' Notice, this method also clones the current active page only
   Dim rc As LeadRect = New LeadRect(0, 0, srcImage.Width / 2, srcImage.Height / 2)
   Debug.WriteLine("Cloning with a rectangle = {0}", rc.ToString())
   Dim destImage2 As RasterImage = srcImage.Clone(rc)
   Debug.WriteLine("Pages in image created with Clone(Rectangle): {0}", destImage2.PageCount)
   Debug.WriteLine("Image created with Clone(Rectangle) size = {0} by {1}", destImage2.Width, destImage2.Height)
   Debug.Assert(destImage2.PageCount = 1)
   Debug.Assert(destImage2.Width = srcImage.Width / 2)
   Debug.Assert(destImage2.Height = srcImage.Height / 2)

   ' Use the CloneAll method, this should create a copy
   ' of all the pages
   Dim destImage3 As RasterImage = srcImage.CloneAll()
   Debug.WriteLine("Pages in image created with CloneAll: {0}", destImage3.PageCount)
   Debug.Assert(destImage3.PageCount = srcImage.PageCount)

   ' Use the CloneCommand, this allows you to have a progress
   ' bar as well as control the memory flags, here
   ' we will create a destination image using conventional memory.
   Dim cloneCmd As CloneCommand = New CloneCommand()
   AddHandler cloneCmd.Progress, AddressOf cloneCmd_Progress
   cloneCmd.CreateFlags = RasterMemoryFlags.Conventional
   cloneCmd.Run(srcImage)
   RemoveHandler cloneCmd.Progress, AddressOf cloneCmd_Progress

   Dim destImage4 As RasterImage = cloneCmd.DestinationImage
   Debug.WriteLine("Pages in image created with CloneCommand: {0}", destImage4.PageCount)
   Debug.WriteLine("Disk memory model of image created with CloneCommand: {0}", destImage4.IsDiskMemory)
   Debug.Assert(destImage4.PageCount = 1)
   Debug.Assert(destImage4.IsConventionalMemory)

   ' Clean up
   destImage4.Dispose()
   destImage3.Dispose()
   destImage2.Dispose()
   destImage1.Dispose()
   srcImage.Dispose()
End Sub

Private Sub cloneCmd_Progress(ByVal sender As Object, ByVal e As RasterCommandProgressEventArgs)
   If e.Percent = 0 Then
      Debug.WriteLine("Clone progress started")
   End If
   If e.Percent = 100 Then
      Debug.WriteLine("Clone progress ended")
   End If
End Sub

Remarks

You can also use the RasterImage Constructor(RasterImage) constructor to create an exact copy of an existing RasterImage.

To create a copy of an object while maintaining a progress status, refer to the Leadtools.ImageProcessing.CloneCommand.

This method copies only the current active page and no metadata information is copied. To create an exact copy of a RasterImage object use the CloneAll method.

To clone an image with support for a progress event, refer to Leadtools.ImageProcessing.CloneCommand.

Requirements

Target Platforms: Silverlight, Windows XP, Windows Server 2003 family, Windows Server 2008 family, Windows Vista, Windows 7, MAC OS/X (Intel Only), Windows Phone 7

See Also