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



srcFileName
A System.String containing the name of the file being compacted. All the pages will be read from this file.
destFileName
A System.String containing the name of the file in which all the pages will be written.
pages
Value that represents the number of pages to copy. Use 0 to copy all the pages. If pages is > 0, only pages will be copied to destFileName.
srcFileName
A System.String containing the name of the file being compacted. All the pages will be read from this file.
destFileName
A System.String containing the name of the file in which all the pages will be written.
pages
Value that represents the number of pages to copy. Use 0 to copy all the pages. If pages is > 0, only pages will be copied to destFileName.
Compacts TIFF files with default options.

Syntax

Visual Basic (Declaration) 
Overloads Public Sub CompactFile( _
   ByVal srcFileName As String, _
   ByVal destFileName As String, _
   ByVal pages As Integer _
) 
Visual Basic (Usage)Copy Code
Dim instance As RasterCodecs
Dim srcFileName As String
Dim destFileName As String
Dim pages As Integer
 
instance.CompactFile(srcFileName, destFileName, pages)
C# 
public void CompactFile( 
   string srcFileName,
   string destFileName,
   int pages
)
C++/CLI 
public:
void CompactFile( 
   String^ srcFileName,
   String^ destFileName,
   int pages
) 

Parameters

srcFileName
A System.String containing the name of the file being compacted. All the pages will be read from this file.
destFileName
A System.String containing the name of the file in which all the pages will be written.
pages
Value that represents the number of pages to copy. Use 0 to copy all the pages. If pages is > 0, only pages will be copied to destFileName.

Example

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

      Dim srcFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "CompactFile1_Src.tif")
      Dim destFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "CompactFile1_Dest.tif")

      ' Create a RasterImage with 4 pages containing text showing the page number
      Dim image As RasterImage = Nothing
      Const pageCount As Integer = 4

      Using f As New System.Drawing.Font("Arial", 36, System.Drawing.FontStyle.Bold)
         Using btmp As New System.Drawing.Bitmap(320, 200)
            Using sf As New System.Drawing.StringFormat()
               Dim rc As New System.Drawing.Rectangle(0, 0, btmp.Width, btmp.Height)
               sf.Alignment = System.Drawing.StringAlignment.Center
               sf.LineAlignment = System.Drawing.StringAlignment.Center

               For i As Integer = 1 To pageCount
                  ' Create a GDI+ bitmap with the text
                  Dim text As String = "Page " + i.ToString()

                  Using g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(btmp)
                     g.FillRectangle(System.Drawing.Brushes.White, rc)
                     g.DrawString(text, f, System.Drawing.Brushes.Black, rc, sf)
                  End Using

                  Dim tempImage As RasterImage = RasterImageConverter.ConvertFromImage(btmp, ConvertFromImageOptions.None)

                  If image Is Nothing Then
                     image = tempImage
                  Else
                     image.AddPage(tempImage)
                  End If
               Next
            End Using
         End Using
      End Using

      ' Save all the pages to the file
      ' The file should have 4 pages now: 1, 2, 3, 4
      codecs.Save(image, srcFileName, RasterImageFormat.Tif, 1, 1, pageCount, 1, CodecsSavePageMode.Overwrite)
      image.Dispose()

      ' All the pages in the source TIFF file. This will create the destination file
      codecs.CompactFile(srcFileName, destFileName, 0)

      ' Compact the source file again and append all the pages to the existing destination file
      Dim pagesToAdd As Integer = 0 ' 0 means all pages
      Dim srcStartPage As Integer = 1
      Dim destStartPage As Integer = 5 ' insert at the end

      codecs.CompactFile(srcFileName, destFileName, pagesToAdd, srcStartPage, False, 0, destStartPage, False, 0, CodecsSavePageMode.Insert, False, False)

      ' Clean up
      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
public void CompactFileExample()
   {
      RasterCodecs codecs = new RasterCodecs();

      string srcFileName =Path.Combine(LEAD_VARS.ImagesDir, "CompactFile1_Src.tif");
      string destFileName = Path.Combine(LEAD_VARS.ImagesDir, "CompactFile1_Dest.tif");

      // Create a RasterImage with 4 pages containing text showing the page number
      RasterImage image = null;
      const int pageCount = 4;

      using(System.Drawing.Font f = new System.Drawing.Font("Arial", 36, System.Drawing.FontStyle.Bold))
      using(System.Drawing.Bitmap btmp = new System.Drawing.Bitmap(320, 200))
      using(System.Drawing.StringFormat sf = new System.Drawing.StringFormat())
      {
         System.Drawing.Rectangle rc = new System.Drawing.Rectangle(0, 0, btmp.Width, btmp.Height);
         sf.Alignment = System.Drawing.StringAlignment.Center;
         sf.LineAlignment = System.Drawing.StringAlignment.Center;

         for(int i = 1; i <= pageCount; i++)
         {
            // Create a GDI+ bitmap with the text
            string text = "Page " + i;

            using(System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(btmp))
            {
               g.FillRectangle(System.Drawing.Brushes.White, rc);
               g.DrawString(text, f, System.Drawing.Brushes.Black, rc, sf);
            }

            RasterImage tempImage = Leadtools.Drawing.RasterImageConverter.ConvertFromImage(btmp, Leadtools.Drawing.ConvertFromImageOptions.None);

            if(image == null)
               image = tempImage;
            else
               image.AddPage(tempImage);
         }
      }

      // Save all the pages to the file
      // The file should have 4 pages now: 1, 2, 3, 4
      codecs.Save(image, srcFileName, RasterImageFormat.Tif, 1, 1, pageCount, 1, CodecsSavePageMode.Overwrite);
      image.Dispose();

      // All the pages in the source TIFF file. This will create the destination file
      codecs.CompactFile(srcFileName, destFileName, 0);

      // Compact the source file again and append all the pages to the existing destination file
      int pagesToAdd = 0;  // 0 means all pages
      int srcStartPage = 1;
      int destStartPage = 5;  // insert at the end

      codecs.CompactFile(
         srcFileName,
         destFileName,
         pagesToAdd,
         srcStartPage,
         false,
         0,
         destStartPage,
         false,
         0,
         CodecsSavePageMode.Insert,
         false,
         false);

      // Clean up
      codecs.Dispose();
   }

static class LEAD_VARS
{
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
SilverlightCSharpCopy Code
public void CompactFileExample(Stream dstStream, int width, int height, int pageCount)
{
   // Create a RasterImage with number of pages containing text showing the page number
   RasterImage image = null;
   // The white background canvas
   Canvas canvas = new Canvas();
   canvas.Width = width;
   canvas.Height = height;
   canvas.Background = new SolidColorBrush(Color.FromArgb(255, 255, 255, 255));

   // The black text block
   TextBlock textBlock = new TextBlock();
   textBlock.FontFamily = new FontFamily("Arial");
   textBlock.FontSize = 36;
   textBlock.Foreground = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
   canvas.Children.Add(textBlock);

   for (int i = 1; i <= pageCount; i++)
   {
      // The text we want on the page
      string text = "Page " + i;
      textBlock.Text = text;

      // Center the text
      double left = (canvas.Width - textBlock.ActualWidth) / 2;
      double top = (canvas.Height - textBlock.ActualHeight) / 2;
      textBlock.SetValue(Canvas.LeftProperty, left);
      textBlock.SetValue(Canvas.TopProperty, top);

      // Create a Writeable bitmap with the text
      WriteableBitmap wb = new WriteableBitmap(320, 200);

      wb.Render(canvas, null);
      wb.Invalidate();

      // Convert it to a RasterImage
      RasterImage pageImage = RasterImageConverter.ConvertFromSource(wb, ConvertFromSourceOptions.None);

      // Add it as a page to our main raster image
      if (image == null)
         image = pageImage;
      else
         image.AddPage(pageImage);
   }

   RasterCodecs codecs = new RasterCodecs();
   // Save all the pages to the file 
   // The file should have 4 pages now: 1, 2, 3, 4 
   codecs.Save(image, dstStream, RasterImageFormat.Tif, 1, 1, pageCount, 1, CodecsSavePageMode.Overwrite);
   image.Dispose();

   MemoryStream memoryStream = new MemoryStream((int)dstStream.Length);
   // All the pages in the source TIFF file. This will create the destination file 
   codecs.CompactFile(dstStream, memoryStream, 0);

   // Compact the source file again and append all the pages to the existing destination file 
   int pagesToAdd = 0;  // 0 means all pages 
   int srcStartPage = 1;
   int destStartPage = 5;  // insert at the end 

   codecs.CompactFile(
      dstStream,
      memoryStream,
      pagesToAdd,
      srcStartPage,
      false,
      0,
      destStartPage,
      false,
      0,
      CodecsSavePageMode.Insert,
      false,
      false); 
}
SilverlightVBCopy Code
Public Sub CompactFileExample(ByVal dstStream As Stream, ByVal width As Integer, ByVal height As Integer, ByVal pageCount As Integer)
   ' Create a RasterImage with number of pages containing text showing the page number
   Dim image As RasterImage = Nothing
   ' The white background canvas
   Dim canvas As Canvas = New Canvas()
   canvas.Width = width
   canvas.Height = height
   canvas.Background = New SolidColorBrush(Color.FromArgb(255, 255, 255, 255))

   ' The black text block
   Dim textBlock As TextBlock = New TextBlock()
   textBlock.FontFamily = New FontFamily("Arial")
   textBlock.FontSize = 36
   textBlock.Foreground = New SolidColorBrush(Color.FromArgb(255, 0, 0, 0))
   canvas.Children.Add(textBlock)

   Dim i As Integer = 1
   Do While i <= pageCount
      ' The text we want on the page
      Dim text As String = "Page " & i
      textBlock.Text = text

      ' Center the text
      Dim left As Double = (canvas.Width - textBlock.ActualWidth) / 2
      Dim top As Double = (canvas.Height - textBlock.ActualHeight) / 2
      textBlock.SetValue(Canvas.LeftProperty, left)
      textBlock.SetValue(Canvas.TopProperty, top)

      ' Create a Writeable bitmap with the text
      Dim wb As WriteableBitmap = New WriteableBitmap(320, 200)

      wb.Render(canvas, Nothing)
      wb.Invalidate()

      ' Convert it to a RasterImage
      Dim pageImage As RasterImage = RasterImageConverter.ConvertFromSource(wb, ConvertFromSourceOptions.None)

      ' Add it as a page to our main raster image
      If image Is Nothing Then
         image = pageImage
      Else
         image.AddPage(pageImage)
      End If
      i += 1
   Loop

   Dim codecs As RasterCodecs = New RasterCodecs()
   ' Save all the pages to the file 
   ' The file should have 4 pages now: 1, 2, 3, 4 
   codecs.Save(image, dstStream, RasterImageFormat.Tif, 1, 1, pageCount, 1, CodecsSavePageMode.Overwrite)
   image.Dispose()

   Dim memoryStream As MemoryStream = New MemoryStream(CInt(dstStream.Length))
   ' All the pages in the source TIFF file. This will create the destination file 
   codecs.CompactFile(dstStream, memoryStream, 0)

   ' Compact the source file again and append all the pages to the existing destination file 
   Dim pagesToAdd As Integer = 0 ' 0 means all pages
   Dim srcStartPage As Integer = 1
   Dim destStartPage As Integer = 5 ' insert at the end

   codecs.CompactFile(dstStream, memoryStream, pagesToAdd, srcStartPage, False, 0, destStartPage, False, 0, CodecsSavePageMode.Insert, False, False)
End Sub

Remarks

This method can also be used to copy or extract one or more pages from a TIFF file and copy them without recompression to another TIFF file. Whenever you save an image containing a region as a TIFF file format, the region is also saved. Note, however, that the ability to save a region inside a TIFF file must be unlocked. This requires a Document Imaging or Medical Imaging toolkit.

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