In This Topic
Programming / TIFF / Extracting pages from a multipage TIFF file using a memory stream

Extracting pages from a multipage TIFF file using a memory stream

In This Topic

This handy code snippet can be useful when you need to extract more pages from your multi-page source TIFF file to a multi-page destination TIFF file. This example uses a memory stream to extract required pages. It shows you how to handle properly with multi-page TIFF files.

Copy Code
'We assume that GdPicture has been correctly installed and unlocked.
Dim oGdPictureImaging As GdPictureImaging = New GdPictureImaging()
'Variable to hold the source image handle (source file).
Dim sourceImageId As Integer = 0
'Variable to hold the destination image handle (destination file).
Dim destImageId As Integer = 0
'Variable to hold the imageID for the extracted page.
Dim imageId As Integer = 0
'The source file path and the destination file path.
Dim source As String = "source.tif", destination As String = "destination.tif"
'Loading the source image file.
sourceImageId = oGdPictureImaging.CreateGdPictureImageFromFile(source)
If oGdPictureImaging.GetStat() = GdPictureStatus.OK Then
    Dim isMultiPage As Boolean = oGdPictureImaging.TiffIsMultiPage(sourceImageId)
    Dim status As GdPictureStatus = oGdPictureImaging.GetStat()
    If (status = GdPictureStatus.OK) AndAlso isMultiPage Then
        Dim pagesCount As Integer = oGdPictureImaging.TiffGetPageCount(sourceImageId)
        'Setting the page numbers you want to extract.
        Dim pages As Integer() = {1, 3, 5}
        'Ensuring that the multi-page tiff source file includes the required pages.
        If pagesCount >= 5 Then
            Dim firstPage As Boolean = True
            For Each page As Integer In pages
                'Temporary stream for the extracted page.
                Dim pStream As Stream = New MemoryStream()
                status = oGdPictureImaging.TiffExtractPage(sourceImageId, page, pStream)
                If status = GdPictureStatus.OK Then
                    imageId = oGdPictureImaging.CreateGdPictureImageFromStream(pStream)
                    status = oGdPictureImaging.GetStat()
                    If status = GdPictureStatus.OK Then
                        If firstPage Then
                            'If it is the first image, then create a new multipage tiff file.
                            destImageId = imageId
                            status = oGdPictureImaging.TiffSaveAsMultiPageFile(destImageId, destination, TiffCompression.TiffCompressionAUTO)
                            If status <> GdPictureStatus.OK Then Exit For
                            firstPage = False
                        Else
                            'If it is the second image or more, add it to the previously created multipage tiff file.
                            status = oGdPictureImaging.TiffAddToMultiPageFile(destImageId, imageId)
                            If status <> GdPictureStatus.OK Then Exit For
                            'Releasing the current image to minimize the memory usage.
                            oGdPictureImaging.ReleaseGdPictureImage(imageId)
                        End If
                    Else
                        Exit For
                    End If
                Else
                    Exit For
                End If
                pStream.Dispose()
            Next
            If status = GdPictureStatus.OK Then
                MessageBox.Show("Done!", "Multipage TIFF Example", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("Error: " + status.ToString(), "Multipage TIFF Example", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        Else
            MessageBox.Show("Not enough pages to extract.", "Multipage TIFF Example", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If
    Else
        MessageBox.Show("Either the source file is not a multi-page tiff file or some other error occurred. Error: " + status.ToString(), "Multipage TIFF Example", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End If
Else
    MessageBox.Show("The source file can't be loaded. Error: " + oGdPictureImaging.GetStat().ToString(), "Multipage TIFF Example", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
'Releasing resources.
oGdPictureImaging.TiffCloseMultiPageFile(destImageId)
oGdPictureImaging.ReleaseGdPictureImage(destImageId)
oGdPictureImaging.ReleaseGdPictureImage(sourceImageId)
oGdPictureImaging.Dispose()
Copy Code
//We assume that GdPicture has been correctly installed and unlocked.
GdPictureImaging oGdPictureImaging = new GdPictureImaging();
//Variable to hold the source image handle (source file).
int sourceImageId = 0;
//Variable to hold the destination image handle (destination file).
int destImageId = 0;
//Variable to hold the imageID for the extracted page.
int imageId = 0;
//The source file path and the destination file path.
string source = "source.tif", destination = "destination.tif";
//Loading the source image file.
sourceImageId = oGdPictureImaging.CreateGdPictureImageFromFile(source);
if (oGdPictureImaging.GetStat() == GdPictureStatus.OK)
{
    bool isMultiPage = oGdPictureImaging.TiffIsMultiPage(sourceImageId);
    GdPictureStatus status = oGdPictureImaging.GetStat();
    if ((status == GdPictureStatus.OK) && isMultiPage)
    {
        int pagesCount = oGdPictureImaging.TiffGetPageCount(sourceImageId);
        //Setting the page numbers you want to extract.
        int[] pages = { 1, 3, 5};
        //Ensuring that the multi-page tiff source file includes the required pages.
        if (pagesCount>=5)
        {
            bool firstPage = true;
            foreach (int page in pages)
            {
                //Temporary stream for the extracted page.
                Stream pStream = new MemoryStream();
                status = oGdPictureImaging.TiffExtractPage(sourceImageId, page, pStream);                           
                if (status == GdPictureStatus.OK)
                {
                    imageId = oGdPictureImaging.CreateGdPictureImageFromStream(pStream);
                    status = oGdPictureImaging.GetStat();
                    if (status == GdPictureStatus.OK)
                    {
                        if (firstPage)
                        {
                            //If it is the first image, then create a new multipage tiff file.
                            destImageId = imageId;
                            status = oGdPictureImaging.TiffSaveAsMultiPageFile(destImageId, destination, TiffCompression.TiffCompressionAUTO);
                            if (status != GdPictureStatus.OK) break;
                            firstPage = false;
                        }
                        else
                        {
                            //If it is the second image or more, add it to the previously created multipage tiff file.
                            status = oGdPictureImaging.TiffAddToMultiPageFile(destImageId, imageId);
                            if (status != GdPictureStatus.OK) break;
                            //Releasing the current image to minimize the memory usage.
                            oGdPictureImaging.ReleaseGdPictureImage(imageId);
                        }
                    }
                    else break;
                }
                else break;
                pStream.Dispose();
            }
            if (status == GdPictureStatus.OK)
                MessageBox.Show("Done!", "Multipage TIFF Example", MessageBoxButtons.OK, MessageBoxIcon.Information);
            else
                MessageBox.Show("Error: " + status.ToString(), "Multipage TIFF Example", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        else
            MessageBox.Show("Not enough pages to extract.", "Multipage TIFF Example", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    else
        MessageBox.Show("Either the source file is not a multi-page tiff file or some other error occurred. Error: " + status.ToString(), "Multipage TIFF Example", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
    MessageBox.Show("The source file can't be loaded. Error: " + oGdPictureImaging.GetStat().ToString(), "Multipage TIFF Example", MessageBoxButtons.OK, MessageBoxIcon.Error);
//Releasing resources.
oGdPictureImaging.TiffCloseMultiPageFile(destImageId);
oGdPictureImaging.ReleaseGdPictureImage(destImageId);
oGdPictureImaging.ReleaseGdPictureImage(sourceImageId);
oGdPictureImaging.Dispose();