Provides methods to optimize one image or a directory of images in one of the supported formats.
            
            
            
 Syntax
Syntax
| Visual Basic (Declaration) |  | 
|---|
| Public Class ImageOptimizer  | 
| C# |  | 
|---|
| public class ImageOptimizer  | 
| Managed Extensions for C++ |  | 
|---|
| public __gc class ImageOptimizer  | 
| C++/CLI |  | 
|---|
| public ref class ImageOptimizer  | 
 Example
Example
This example will optimize a Png image file and then save it to a separate folder
             | Visual Basic |  Copy Code | 
|---|
| Public Sub TestPngImageOptimizer()
 RasterCodecs.Startup()
 Dim Codecs As RasterCodecs = New RasterCodecs()
 
 
 Dim inputFileName As String = "C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\Image1.png"
 Dim outputFolder As String = "C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\OptimizedImages"
 
 
 Dim optimizer As ImageOptimizer = New ImageOptimizer()
 
 
 Dim options As ImageOptimizerOptions = ImageOptimizerOptions.Default
 
 
 options.Distance = 20
 options.Percent = 15
 options.PngQualityFactor = 4
 
 Dim bufferPtr As IntPtr
 Dim bufferSize As Integer = 0
 LoadFileIntoPointer(inputFileName, bufferPtr, bufferSize)
 
 If (IntPtr.Zero <> bufferPtr AndAlso bufferSize > 0) Then
 Dim optBuffer As RasterNativeBuffer = optimizer.OptimizeBuffer(Codecs, bufferPtr, bufferSize, options, Nothing)
 
 
 Marshal.FreeHGlobal(bufferPtr)
 
 
 
 If (Not Directory.Exists(outputFolder)) Then
 Directory.CreateDirectory(outputFolder)
 End If
 
 
 Dim outputFileName As String = Path.Combine(outputFolder, Path.GetFileName(inputFileName))
 
 
 Using fs As FileStream = File.Create(outputFileName)
 
 Dim optArray(optBuffer.Length) As Byte
 
 Marshal.Copy(optBuffer.Data, optArray, 0, optArray.Length)
 fs.Write(optArray, 0, optArray.Length)
 End Using
 
 
 Marshal.FreeHGlobal(optBuffer.Data)
 
 
 Dim orgSize As Long = New FileInfo(inputFileName).Length
 Dim optSize As Long = New FileInfo(outputFileName).Length
 Dim percentage As Integer = CType(CType(optSize * 100.0 / orgSize, Double), Integer)
 
 Dim message As String = String.Format( _
 "Original image size: {0} KB{1}Optimized image size: {2} KB{1}Percentage: {3}%", _
 orgSize / 1024, Environment.NewLine, optSize / 1024, _
 100 - percentage)
 Console.WriteLine(message)
 End If
 
 
 RasterCodecs.Shutdown()
 End Sub
 
 
 Private Sub LoadFileIntoPointer(ByVal fileName As String, ByRef ptr As IntPtr, ByRef size As Integer)
 Using fs As FileStream = File.OpenRead(fileName)
 
 size = CType(fs.Length, Integer)
 ptr = Marshal.AllocHGlobal(size)
 
 
 Const bufferSize As Integer = 32 * 1024
 Dim buffer(bufferSize) As Byte
 
 Dim bytesToRead As Integer
 
 Dim bytesLeft As Integer = CType(fs.Length, Integer)
 Dim tempPtr As IntPtr = ptr
 Do
 
 bytesToRead = Math.Min(bufferSize, bytesLeft)
 If (bytesToRead > 0) Then
 fs.Read(buffer, 0, bytesToRead)
 
 
 Marshal.Copy(buffer, 0, tempPtr, bytesToRead)
 
 
 tempPtr = New IntPtr(tempPtr.ToInt64() + bytesToRead)
 
 bytesLeft -= bytesToRead
 End If
 Loop While (bytesToRead > 0)
 End Using
 End Sub
 | 
| C# |  Copy Code | 
|---|
| public void TestPngImageOptimizer( ) {
 // Initialize the RasterCodecs class
 RasterCodecs.Startup();
 RasterCodecs codecs = new RasterCodecs();
 
 // The input and output location
 string inputFileName = @"C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\Image1.png";
 string outputFolder = @"C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\OptimizedImages";
 
 // Initialize a new Optimizer object
 ImageOptimizer optimizer = new ImageOptimizer();
 
 // Optimization Options
 ImageOptimizerOptions options = ImageOptimizerOptions.Default;
 
 // Set custom optimization options
 options.Distance = 20;
 options.Percent = 15;
 options.PngQualityFactor = 4;
 
 IntPtr bufferPtr;
 int bufferSize = 0;
 LoadFileIntoPointer(inputFileName, out bufferPtr, out bufferSize);
 
 if(IntPtr.Zero != bufferPtr && bufferSize > 0)
 {
 RasterNativeBuffer optBuffer = optimizer.OptimizeBuffer(codecs, bufferPtr, bufferSize, options, null);
 
 // Free orgBuffer.PointerBuffer, since it won't be needed anymore.
 Marshal.FreeHGlobal(bufferPtr);
 
 // Save this image into the output folder
 // Make sure the output folder exists
 if(!Directory.Exists(outputFolder))
 Directory.CreateDirectory(outputFolder);
 
 // Get the name of the output file from the input file
 string outputFileName = Path.Combine(outputFolder, Path.GetFileName(inputFileName));
 
 // Save the optimized buffer to the output file
 using(FileStream fs = File.Create(outputFileName))
 {
 byte[] optArray = new byte[optBuffer.Length];
 
 Marshal.Copy(optBuffer.Data, optArray, 0, optArray.Length);
 fs.Write(optArray, 0, optArray.Length);
 }
 
 // Free optBuffer.PointerBuffer, since it won't be needed anymore.
 Marshal.FreeHGlobal(optBuffer.Data);
 
 // Compare the original image size with the optimized size.
 long orgSize = new FileInfo(inputFileName).Length;
 long optSize = new FileInfo(outputFileName).Length;
 int percentage = (int)((double)optSize * 100.0 / orgSize);
 
 string message = string.Format(
 "Original image size: {0} KB{1}Optimized image size: {2} KB{1}Percentage: {3}%",
 orgSize / 1024, Environment.NewLine, optSize / 1024,
 100 - percentage);
 MessageBox.Show(message);
 }
 
 //shutdown the RasterCodecs class.
 RasterCodecs.Shutdown();
 }
 
 // This method opens an image file and loads it into IntPtr.
 private void LoadFileIntoPointer(string fileName, out IntPtr ptr, out int size)
 {
 using(FileStream fs = File.OpenRead(fileName))
 {
 // Allocate memory to load the file
 size = (int)fs.Length;
 ptr = Marshal.AllocHGlobal(size);
 
 // Load in 32K chunks
 const int bufferSize = 32 * 1024;
 byte[] buffer = new byte[bufferSize];
 
 int bytesToRead;
 int bytesLeft = (int)fs.Length;
 IntPtr tempPtr = ptr;   // where we are
 do
 {
 // read a chunk
 bytesToRead = Math.Min(bufferSize, bytesLeft);
 if(bytesToRead > 0)
 {
 fs.Read(buffer, 0, bytesToRead);
 
 // copy into our buffer
 Marshal.Copy(buffer, 0, tempPtr, bytesToRead);
 
 // move the temp pointer
 tempPtr = new IntPtr(tempPtr.ToInt64() + bytesToRead);
 
 bytesLeft -= bytesToRead;
 }
 }
 while(bytesToRead > 0);
 }
 }
 | 
Remarks
             Inheritance Hierarchy
Inheritance Hierarchy
             Requirements
Requirements
Target Platforms: Microsoft .NET Framework 2.0, Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family
 See Also
See Also