LEADTOOLS Image File Support (Leadtools.Codecs assembly) Send comments on this topic. | Back to Introduction - All Topics | Help Version 17.0.3.29
StartRedirecting Method
See Also 
Leadtools.Codecs Namespace > RasterCodecs Class : StartRedirecting Method



Starts file I/O redirection.

Syntax

Visual Basic (Declaration) 
Public Sub StartRedirecting() 
Visual Basic (Usage)Copy Code
Dim instance As RasterCodecs
 
instance.StartRedirecting()
C# 
public void StartRedirecting()
C++/CLI 
public:
void StartRedirecting(); 

Example

This example demonstrates overriding the default IO routines.

Visual BasicCopy Code
' Redirect Read event example
   Private myStream As FileStream
   ' Redirect Open event example
   Private Sub Codecs_Open(ByVal sender As Object, ByVal e As CodecsRedirectOpenEventArgs)
      myStream = New FileStream(e.FileName, e.Mode)
      e.Success = True
   End Sub

   ' Redirect Seek event example
   Private Sub Codecs_Seek(ByVal sender As Object, ByVal e As CodecsRedirectSeekEventArgs)
      myStream.Seek(e.Offset, e.Origin)
   End Sub

   ' Redirect Read event example
   Private Sub Codecs_Read(ByVal sender As Object, ByVal e As CodecsRedirectReadEventArgs)
      Dim byteBuffer As Byte() = New Byte(e.Count - 1) {}
      myStream.Read(byteBuffer, 0, e.Count)
      Marshal.Copy(byteBuffer, 0, e.Buffer, e.Count)
      e.Read = e.Count
      Console.WriteLine("The number of bytes that read request should copy to the buffer is : {0}", e.Count)
      Console.WriteLine("The actual number of bytes that this read request has copied to Buffer is : {0}", e.Read)
   End Sub

   ' Redirect Write event example
   Private Sub Codecs_Write(ByVal sender As Object, ByVal e As CodecsRedirectWriteEventArgs)
      Dim byteBuffer As Byte() = New Byte(e.Count - 1) {}
      Marshal.Copy(e.Buffer, byteBuffer, 0, e.Count)
      e.Written = e.Count
      myStream.Write(byteBuffer, 0, e.Count)

      Console.WriteLine("The number of bytes that write request should copy from the buffer is : {0}", e.Count)
      Console.WriteLine("The actual number of bytes that this write request has copied from Buffer is : {0}", e.Written)
   End Sub

   ' Redirect Close event example
   Private Sub Codecs_Close(ByVal sender As Object, ByVal e As CodecsRedirectCloseEventArgs)
      myStream.Close()
   End Sub


   Public Sub StartRedirectingExample()
      Dim codecs As RasterCodecs = New RasterCodecs()

      AddHandler codecs.RedirectOpen, AddressOf Codecs_Open
      AddHandler codecs.RedirectSeek, AddressOf Codecs_Seek
      AddHandler codecs.RedirectRead, AddressOf Codecs_Read
      AddHandler codecs.RedirectWrite, AddressOf Codecs_Write
      AddHandler codecs.RedirectClose, AddressOf Codecs_Close

      Dim srcFilename As String = Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp")

      codecs.StartRedirecting()
      Dim image As RasterImage = codecs.Load(srcFilename)
      myStream.Close()
      codecs.Save(image, Path.Combine(LEAD_VARS.ImagesDir, "Image1_redirect.jpg"), RasterImageFormat.Jpeg, image.BitsPerPixel)
      codecs.StopRedirecting()

      ' Clean up
      myStream.Dispose()
      image.Dispose()
      codecs.Dispose()
   End Sub

Public NotInheritable Class LEAD_VARS
   Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
C#Copy Code
// Redirect Read event example
   FileStream myStream;
   // Redirect Open event example
   private void Codecs_Open(object sender, CodecsRedirectOpenEventArgs e)
   {
      myStream = new FileStream(e.FileName, e.Mode);
      e.Success = true;
   }

   // Redirect Seek event example
   private void Codecs_Seek(object sender, CodecsRedirectSeekEventArgs e)
   {
      myStream.Seek(e.Offset, e.Origin);
   }

   // Redirect Read event example
   private void Codecs_Read(object sender, CodecsRedirectReadEventArgs e)
   {
      byte[] byteBuffer = new byte[e.Count];
      myStream.Read(byteBuffer, 0, e.Count);
      Marshal.Copy(byteBuffer, 0, e.Buffer, e.Count);
      e.Read = e.Count;
      Console.WriteLine("The number of bytes that read request should copy to the buffer is : {0}", e.Count);
      Console.WriteLine("The actual number of bytes that this read request has copied to Buffer is : {0}", e.Read);
   }

   // Redirect Write event example
   private void Codecs_Write(object sender, CodecsRedirectWriteEventArgs e)
   {
      byte[] byteBuffer = new byte[e.Count];
      Marshal.Copy(e.Buffer, byteBuffer, 0, e.Count);
      e.Written = e.Count;
      myStream.Write(byteBuffer, 0, e.Count);

      Console.WriteLine("The number of bytes that write request should copy from the buffer is : {0}", e.Count);
      Console.WriteLine("The actual number of bytes that this write request has copied from Buffer is : {0}", e.Written);
   }

   // Redirect Close event example
   private void Codecs_Close(object sender, CodecsRedirectCloseEventArgs e)
   {
      myStream.Close();
   }


   public void StartRedirectingExample()
   {
      RasterCodecs codecs = new RasterCodecs();

      codecs.RedirectOpen += new EventHandler<CodecsRedirectOpenEventArgs>(Codecs_Open);
      codecs.RedirectSeek += new EventHandler<CodecsRedirectSeekEventArgs>(Codecs_Seek);
      codecs.RedirectRead += new EventHandler<CodecsRedirectReadEventArgs>(Codecs_Read);
      codecs.RedirectWrite += new EventHandler<CodecsRedirectWriteEventArgs>(Codecs_Write);
      codecs.RedirectClose += new EventHandler<CodecsRedirectCloseEventArgs>(Codecs_Close);

      string srcFilename = Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp");

      codecs.StartRedirecting();
      RasterImage image = codecs.Load(srcFilename);
      myStream.Close();
      codecs.Save(image, Path.Combine(LEAD_VARS.ImagesDir,"Image1_redirect.jpg"), RasterImageFormat.Jpeg, image.BitsPerPixel);
      codecs.StopRedirecting();

      // Clean up
      myStream.Dispose();
      image.Dispose();
      codecs.Dispose();
   }

static class LEAD_VARS
{
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
SilverlightCSharpCopy Code
SilverlightVBCopy Code

Remarks

LEADTOOLS I/O redirection allows you to replace the default input/output methods for opening, reading, writing, seeking, and closing files.

For example, you can redirect all the library I/O methods to your own I/O methods to load/save images from your own streams.

Once you call StartRedirecting, all subsequent file I/O operation will fire the following events:

Event Operation
RedirectOpen When the toolkit is trying to open a file
RedirectRead When the toolkit is trying to reading from a file
RedirectWrite When the toolkit is trying to writing to a file
RedirectSeek When the toolkit is trying to seeking into a file
RedirectClose When the toolkit is trying to closing a file

Call StopRedirecting to reset the I/O methods back to the defaults.

Requirements

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

See Also