Writing and Reading Multipage Files (Visual J++)

Take the following steps to create a multipage file, then load and display the images from the file. Only TIFF (MPT) and PCX (DCX) formats support multipage files.

1. Start Visual J++ 6.0.

2. On the Tools pull-down menu, use the Customize Toolbox option, choose the ActiveX Controls tab and add the LEAD Main ActiveX Control (16) to your project.

3. image\btnlead.gif Select the LEAD control; then add two controls to your main form. The size and position does not matter.

4. Add the following code to the main form's constructor right after the TODO Comment. In online help, you can use the Edit pull-down menu to copy the block of code. This code loads two bitmaps, saves them both into a single multipage TIFF file, loads them again from the TIFF file, and displays them side-by-side.

// TODO: Add any constructor code after initForm call

// Disable automatic repainting of the image.
LEAD1.setAutoRepaint( false );
LEAD2.setAutoRepaint( false );

// Turn off scroll bars to make sure we use the full client area.
LEAD1.setAutoScroll( false );
LEAD2.setAutoScroll( false );

// Position and size the main form so that it takes up most of the screen.
Rectangle r = SystemInformation.getWorkingArea();
setWidth( (int) ( r.width * 0.9f ) );
setHeight( (int) ( r.height* 0.8f ) );
setLeft( (int) ( ( r.width - getWidth() ) / 2 ) );
setTop( (int) ( ( r.height - getHeight() ) / 2 ) );

// set the mouse pointer to an hourglass.
setCursor( Cursor.WAIT );

// Load the bitmaps. These hard-coded path names may be different on your system.
LEAD1.Load( "c:\\lead\\images\\image1.cmp", (short) 0, (short) 0, (short) 1 );
LEAD2.Load( "c:\\lead\\images\\image2.cmp", (short) 0, (short) 0, (short) 1 );

// Save the bitmaps to a single multipage TIFF file
LEAD1.Save( "c:\\lead\\images\\combined.mpt", (short) LTOCXU.FileConstants.FILE_TIF, 
            (short) 24, (short) 0, (short) LTOCXU.SaveModifyConstants.SAVE_OVERWRITE );
LEAD2.Save( "c:\\lead\\images\\combined.mpt", (short) LTOCXU.FileConstants.FILE_TIF, 
            (short) 24, (short) 0, (short) LTOCXU.SaveModifyConstants.SAVE_APPEND );

// Get information about the images so that we can size the controls.
LEAD1.GetFileInfo( "c:\\lead\\images\\combined.mpt", (short) 1, 0 );
LEAD2.GetFileInfo( "c:\\lead\\images\\combined.mpt", (short) 2, 0 );

// Clear the bitmaps from memory
LEAD1.setBitmap( 0 );
LEAD2.setBitmap( 0 );

// Make the controls visible so that we can size and position them.
// They will not really appear until we load an image and paint it.
LEAD1.setVisible ( true );
LEAD2.setVisible( true );

// Set the variables used for preserving the aspect ratio.
int nHeightFactor1 = (int) LEAD1.getInfoHeight();
int nWidthFactor1 = (int)LEAD1.getInfoWidth();
int nHeightFactor2 = (int)LEAD2.getInfoHeight();
int nWidthFactor2 = (int)LEAD2.getInfoWidth();
int nHeightAllowed = (int) ( getSize().y * 0.8f );
int nWidthAllowed = (int) ( getSize().x * 0.45f );

// Center each LEAD control on half of the form, preserving the aspect ratio.
// Check to see if using the maximum width will make the image too tall.
// Set the dimensions based on the result.
if( ( ( nWidthAllowed * nHeightFactor1 ) / nWidthFactor1 ) < nHeightAllowed )
{
   LEAD1.setLeft( ( getSize().x / 4) - ( nWidthAllowed / 2 ) );
   LEAD1.setWidth( nWidthAllowed );
   LEAD1.setHeight( ( LEAD1.getWidth() * nHeightFactor1 ) / nWidthFactor1 );
   LEAD1.setTop( ( getSize().y - LEAD1.getHeight() ) / 2 );
}
else
{
   LEAD1.setTop( ( getSize().y - nHeightAllowed) / 2 );
   LEAD1.setHeight( nHeightAllowed );
   LEAD1.setWidth( ( LEAD1.getHeight() * nWidthFactor1) / nHeightFactor1 );
   LEAD1.setLeft( ( getSize().x / 4 ) - ( LEAD1.getWidth() / 2 ) );
}

if( ( ( nWidthAllowed * nHeightFactor2 ) / nWidthFactor2 ) < nHeightAllowed )
{
   LEAD2.setLeft( ( getSize().x * 3/4 ) - ( nWidthAllowed / 2 ) );
   LEAD2.setWidth( nWidthAllowed );
   LEAD2.setHeight( ( LEAD2.getWidth() * nHeightFactor2 ) / nWidthFactor2 );
   LEAD2.setTop( ( getSize().y - LEAD2.getHeight() ) / 2 );
}
else
{
   LEAD2.setTop( ( getSize().y - nHeightAllowed ) / 2 );
   LEAD2.setHeight( nHeightAllowed );
   LEAD2.setWidth( ( LEAD2.getHeight() * nWidthFactor2 ) / nHeightFactor2 );
   LEAD2.setLeft( ( getSize().x * 3/4 ) - ( LEAD2.getWidth() / 2 ) );
}

// Load the bitmaps from the multipage TIFF file
LEAD1.Load( "c:\\lead\\images\\combined.mpt", (short) 24, (short) 1, (short) 1 );
LEAD2.Load( "c:\\lead\\images\\combined.mpt", (short) 24, (short) 2, (short) 1 );

// Set the image display sizes to match the LEAD controls
int nImageWidth1 = (int) LEAD1.getScaleWidth();
int nImageHeight1 = (int) LEAD1.getScaleHeight();
LEAD1.SetDstRect( 0, 0, nImageWidth1, nImageHeight1 );
LEAD1.SetDstClipRect( 0, 0, nImageWidth1, nImageHeight1 );

// Set the image display sizes to match the LEAD controls
int nImageWidth2= (int) LEAD2.getScaleWidth();
int nImageHeight2= (int) LEAD2.getScaleHeight();
LEAD2.SetDstRect( 0, 0, nImageWidth2, nImageHeight2 );
LEAD2.SetDstClipRect( 0, 0, nImageWidth2, nImageHeight2 );

// Display the images
LEAD1.ForceRepaint();
LEAD2.ForceRepaint();

// Set the mouse pointer back to the default
setCursor( Cursor.DEFAULT );

5. Run your program to test it.