Leadtools.Codecs Namespace > RasterCodecs Class : StartRedirecting Method |
public void StartRedirecting()
'Declaration Public Sub StartRedirecting()
'Usage Dim instance As RasterCodecs instance.StartRedirecting()
public void StartRedirecting()
function Leadtools.Codecs.RasterCodecs.StartRedirecting()
public: void StartRedirecting();
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.
' 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
// 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"; }
Target Platforms: Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2