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. |
|
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. |