Writing and Reading Multipage Files (C++ Builder)
Take the following steps to create a multipage file, then load and display the images from the file. For a list of formats that support multipage file operations, see the iModify parameter of the Save method.
1. |
Start C++ Builder. |
2. |
In the File menu, choose New Application. |
3. |
On the Builder toolbar, click the LEADTOOLS tab. If you have used a LEAD VCL control before, the icon appears on the toolbar. Otherwise, refer to Installing VCL before continuing with this tutorial. |
4. |
Select the LEAD Main control on the VCL toolbar, and add two LEAD Main controls to your main form and name them Lead1 and Lead2. The size and position do not matter. |
5. |
Code the main form's FormShow procedure as follows. In online help, you can copy the block of code and paste it into your application. For a general explanation of how images are positioned and scaled, refer to Displaying an Image. |
void __fastcall TForm1::FormShow(TObject *Sender)
{
float HeightFactor1, WidthFactor1, HeightFactor2, WidthFactor2;
float HeightAllowed, WidthAllowed;
int ImageWidth1, ImageWidth2, ImageHeight1, ImageHeight2;
/*Disable automatic repainting of the image.*/
Lead1->AutoRepaint = False;
Lead2->AutoRepaint = False;
/*Turn off scroll bars to make sure we use the full client area.*/
Lead1->AutoScroll = False;
Lead2->AutoScroll = False;
/* Position and size the main form so that it takes up most of the screen. */
Width = Screen->Width * 0.9;
Height = Screen->Height * 0.8;
Left = (Screen->Width - Width) / 2;
Top = (Screen->Height - Height) / 2;
/*Display the form and set the mouse pointer to an hourglass.*/
Show();
Screen->Cursor = crHourGlass;
/*Load the bitmaps. These hard-coded path names may be different on your system.*/
Lead1->Load("C:\\lead\\IMAGES\\IMAGE1.CMP", 0, 0, 1);
Lead2->Load("C:\\lead\\IMAGES\\IMAGE2.CMP", 0, 0, 1);
/*Save the bitmaps to a single multipage TIFF file*/
Lead1->Save("C:\\lead\\IMAGES\\COMBINED.MPT", FILE_TIF, 24, 0, SAVE_OVERWRITE);
Lead2->Save("C:\\lead\\IMAGES\\COMBINED.MPT", FILE_TIF, 24, 0, SAVE_APPEND);
/*Get information about the images so that we can size the controls.*/
Lead1->GetFileInfo("C:\\lead\\IMAGES\\COMBINED.MPT", 1);
Lead2->GetFileInfo("C:\\lead\\IMAGES\\COMBINED.MPT", 2);
/*Clear the bitmaps from memory*/
Lead1->Bitmap = 0;
Lead2->Bitmap = 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->Visible = True;
Lead2->Visible = True;
/*Set the variables used for preserving the aspect ratio.*/
HeightFactor1 = Lead1->InfoHeight;
WidthFactor1 = Lead1->InfoWidth;
HeightFactor2 = Lead2->InfoHeight;
WidthFactor2 = Lead2->InfoWidth;
HeightAllowed = ClientHeight * 0.8;
WidthAllowed = ClientWidth * 0.45;
/*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((WidthAllowed * HeightFactor1) / WidthFactor1 < HeightAllowed)
{
Lead1->Left = (ClientWidth / 4) - (WidthAllowed / 2);
Lead1->Width = WidthAllowed;
Lead1->Height = (Lead1->Width * HeightFactor1) / WidthFactor1;
Lead1->Top = (ClientHeight - Lead1->Height) / 2;
}
else
{
Lead1->Top = (ClientHeight - HeightAllowed) / 2;
Lead1->Height = HeightAllowed;
Lead1->Width = (Lead1->Height * WidthFactor1) / HeightFactor1;
Lead1->Left = (ClientWidth / 4) - (Lead1->Width / 2) ;
}
if( (WidthAllowed * HeightFactor2) / WidthFactor2 < HeightAllowed)
{
Lead2->Left = (ClientWidth * 3/4) - (WidthAllowed / 2);
Lead2->Width = WidthAllowed;
Lead2->Height = (Lead2->Width * HeightFactor2) / WidthFactor2;
Lead2->Top = (ClientHeight - Lead2->Height) / 2;
}
else
{
Lead2->Top = (ClientHeight - HeightAllowed) / 2;
Lead2->Height = HeightAllowed;
Lead2->Width = (Lead2->Height * WidthFactor2) / HeightFactor2;
Lead2->Left = (ClientWidth * 3 / 4) - (Lead2->Width / 2);
}
/*Load the bitmaps from the multipage TIFF file*/
Lead1->Load("C:\\lead\\IMAGES\\COMBINED.MPT", 24, 1, 1);
Lead2->Load("C:\\lead\\IMAGES\\COMBINED.MPT", 24, 2, 1);
/*Set the image display sizes to match the LEAD controls*/
ImageWidth1 = Lead1->Width;
ImageHeight1 = Lead1->Height;
Lead1->SetDstRect(0, 0, ImageWidth1, ImageHeight1);
Lead1->SetDstClipRect(0, 0, ImageWidth1, ImageHeight1);
/*Set the image display sizes to match the LEAD controls*/
ImageWidth2 = Lead2->Width;
ImageHeight2 = Lead2->Height;
Lead2->SetDstRect(0, 0, ImageWidth2, ImageHeight2);
Lead2->SetDstClipRect(0, 0, ImageWidth2, ImageHeight2);
/*Display the images*/
Lead1->ForceRepaint();
Lead2->ForceRepaint();
/*Set the mouse pointer back to the default*/
Screen->Cursor = crDefault;
}
6. |
Build and run your program to test it. |