Writing and Reading Multi-Page Files (Delphi 6.0)

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

1.

Start Delphi.

2.

If you didn’t install LEAD Raster View Control, install it as follows:

 

On the Component pull-down menu, use the Import ActiveX Control… and select the LEAD Raster View Control (14.5). Press Install.

3

Add 2 LEAD Raster View controls to your main form. The size and position does not matter.

4.

On the Project pull-down menu, use the Import Type library… and select the LEAD Raster IO object library (14.5). Press OK.

5.

Add 2 LEAD Raster IO controls from the ActiveX tab to your form.

6.

Add a button to your form and name it as follows:

 

Name

Caption

 

btnLoad

Load Multi-Page File

7.

Code the btnLoad Click’s procedure as the following. 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 Multi-Page TIFF file, loads them again from the TIFF file, and displays them side-by-side.

procedure TForm1.btnLoadClick(Sender: TObject); 
var
   HeightFactor1, WidthFactor1, 
   HeightFactor2, WidthFactor2, 
   HeightAllowed, WidthAllowed: Integer; 
   ImageWidth1, ImageHeight1: Integer; 
   ImageWidth2, ImageHeight2: integer; 
begin
   //Disable automatic repainting of the image. 
   LEADRasterView1.AutoRepaint := False; 
   LEADRasterView2.AutoRepaint := False; 
   //Turn off scroll bars to make sure we use the full client area. 
   LEADRasterView1.AutoScroll := False; 
   LEADRasterView2.AutoScroll := False; 
   //Position and size the main form so that it takes up most of the screen. 
   Width := Trunc(Screen.Width * 0.9) ; 
   Height:= Trunc(Screen.Height* 0.8) ; 
   Left := Trunc ((Screen.Width- Width) / 2); 
   Top := Trunc ((Screen.Height- Height)/ 2); 
   //Display the form and set the mouse pointer to an hourglass. 

   Screen.Cursor := crhourGlass; 
   //Load the bitmaps. These hard-coded path names may be different on your system. 
   LEADRasterIO1.Load ( LEADRasterView1.Raster, WideString('c:\image1.cmp'), 0, 0, 1 ) ; 
   LEADRasterIO2.Load ( LEADRasterView2.Raster, WideString('c:\image2.cmp'), 0, 0, 1 ) ; 

   //Save the bitmaps to a single multipage TIFF file
   LEADRasterIO1.Save ( LEADRasterView1.Raster, WideString('c:\combined.mpt'), FILE_TIF, 24, 0, SAVE_OVERWRITE ) ; 
   LEADRasterIO2.Save ( LEADRasterView2.Raster, WideString('c:\combined.mpt'), FILE_TIF, 24, 0, SAVE_APPEND ); 
   //Get information about the images so that we can size the controls. 
   LEADRasterIO1.GetFileInfo ( LEADRasterView1.Raster, WideString('c:\combined.mpt'), 1, 0 ) ; 
   LEADRasterIO2.GetFileInfo ( LEADRasterView2.Raster, WideString('c:\combined.mpt'), 2, 0 ); 
   //Clear the bitmaps from memory
   LEADRasterView1.Raster.Bitmap := 0; 
   LEADRasterView2.Raster.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. 
   LEADRasterView1.Visible := True; 
   LEADRasterView2.Visible := True; 
   //Set the variables used for preserving the aspect ratio. 
   HeightFactor1 := Trunc (LEADRasterIO1.InfoHeight); 
   WidthFactor1 := Trunc (LEADRasterIO1.InfoWidth); 
   HeightFactor2 := Trunc (LEADRasterIO2.InfoHeight); 
   WidthFactor2 := Trunc (LEADRasterIO2.InfoWidth); 
   HeightAllowed := Trunc (Height * 0.8); 
   WidthAllowed := Trunc (Width * 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 then
   begin
       LEADRasterView1.Left := Trunc ((Width / 4) - (WidthAllowed / 2)); 
       LEADRasterView1.Width := WidthAllowed; 
       LEADRasterView1.Height := Trunc ((LEADRasterView1.Width * HeightFactor1) / WidthFactor1); 
       LEADRasterView1.Top := Trunc ((Height - LEADRasterView1.Height) / 2); 
   end
   else
   begin
      LEADRasterView1.Top := Trunc ((Height - HeightAllowed) / 2); 
       LEADRasterView1.Height := HeightAllowed; 
       LEADRasterView1.Width := Trunc ((LEADRasterView1.Height * WidthFactor1) / HeightFactor1); 
       LEADRasterView1.Left := Trunc ((Width / 4) - (LEADRasterView1.Width / 2)); 
   end; 
   if (WidthAllowed * HeightFactor2) / WidthFactor2 < HeightAllowed then
   begin
      LEADRasterView2.Left := Trunc ((Width * 3 / 4) - (WidthAllowed / 2)); 
      LEADRasterView2.Width := WidthAllowed; 
      LEADRasterView2.Height := Trunc ((LEADRasterView2.Width * HeightFactor2) / WidthFactor2); 
      LEADRasterView2.Top := Trunc ((Height - LEADRasterView2.Height) / 2); 
   end
   else
   begin
      LEADRasterView2.Top := Trunc ((Height - HeightAllowed) / 2); 
      LEADRasterView2.Height := HeightAllowed; 
      LEADRasterView2.Width := Trunc ((LEADRasterView2.Height * WidthFactor2) / HeightFactor2); 
      LEADRasterView2.Left := Trunc ((Width * 3 / 4) - (LEADRasterView2.Width / 2)); 
   end; 
   //Load the bitmaps from the multipage TIFF file
   LEADRasterIO1.Load ( LEADRasterView1.Raster, 'c:\combined.mpt', 24, 1, 1); 
   LEADRasterIO2.Load ( LEADRasterView2.Raster, 'c:\combined.mpt', 24, 2, 1); 
   //Set the image display sizes to match the LEAD controls
   ImageWidth1 := Trunc (LEADRasterView1.ScaleWidth); 
   ImageHeight1 := Trunc (LEADRasterView1.ScaleHeight); 
   LEADRasterView1.SetDstRect ( 0, 0, ImageWidth1, ImageHeight1 ) ; 
   LEADRasterView1.SetDstClipRect ( 0, 0, ImageWidth1, ImageHeight1 ) ; 
   //Set the image display sizes to match the LEAD controls
   ImageWidth2 := Trunc (LEADRasterView2.ScaleWidth); 
   ImageHeight2 := Trunc (LEADRasterView2.ScaleHeight); 
   LEADRasterView2.SetDstRect ( 0, 0, ImageWidth2, ImageHeight2 ) ; 
   LEADRasterView2.SetDstClipRect (0, 0, ImageWidth2, ImageHeight2 ) ; 

   //Display the images
   LEADRasterView1.ForceRepaint () ; 
   LEADRasterView2.ForceRepaint () ; 
   //Set the mouse pointer back to the default
   Screen.Cursor:= crDefault; 
end; 

8.

Run your program to test it.