| 
<?php // example 01 : simple open and close
require_once( "cfile.class.php" );
 
 echo "<b>EXAMPLE 06</b>: we read some fields in the BITMAP (.BMP) header and we raster an RGB bitmap picture in a HTML table, pixel by pixel<br><br>" ;
 $CANDIDATEfile = "flowers.bmp" ;
 
 $cfile = new cfile( $CANDIDATEfile );
 $bOPEN = $cfile->open( CFILE_READ_MODE );
 $bERR = $cfile->is_error() ;
 
 if ( $bOPEN && !$bERR ) // you can check open return value or internal error for safe operation
 {
 echo "OPEN FILE <b>$CANDIDATEfile</b> : SUCCESS<br>" ;
 
 echo "FILE SIZE : ".( filesize( $CANDIDATEfile ) )." bytes <br>" ;
 
 $bBEGIN = $cfile->move_to_beginning();
 echo ( $bBEGIN ) ? "OK MOVE TO BEGINNING ...<br>" : "CAN'T MOVE TO THE BEGINNING ...<br>" ;
 
 echo "<br>READING <b>BITMAP FILE HEADER</b><br>" ;
 
 $nbytes = 2 ; // BM MARKER
 $READ = $cfile->read( $nbytes, CFILE_TEXT_MODE ) ;
 echo ( $READ === false ) ? "CAN'T READ from file ... <b>".$cfile->get_error_string()."</b><br>" : "BITMAP MARKER ($nbytes):<b>$READ</b><br>" ;
 
 $nbytes = 4 ; // SIZE OF BITMAP
 $READ = $cfile->read( $nbytes, CFILE_BINARY_INT_MODE ) ;
 echo ( $READ === false ) ? "CAN'T READ from file ... <b>".$cfile->get_error_string()."</b><br>" : "SIZE OF BITMAP ($nbytes):<b>$READ</b><br>" ;
 
 $nbytes = 2 ; // RESERVED (0)
 $READ = $cfile->read( $nbytes, CFILE_BINARY_INT_MODE ) ;
 echo ( $READ === false ) ? "CAN'T READ from file ... <b>".$cfile->get_error_string()."</b><br>" : "RESERVED ($nbytes):<b>$READ</b><br>" ;
 
 $nbytes = 2 ; // RESERVED (1)
 $READ = $cfile->read( $nbytes, CFILE_BINARY_INT_MODE ) ;
 echo ( $READ === false ) ? "CAN'T READ from file ... <b>".$cfile->get_error_string()."</b><br>" : "RESERVED ($nbytes):<b>$READ</b><br>" ;
 
 $nbytes = 4 ; // OFFSET BITS TO BITMAP DATA
 $OFFSET_BITS = $cfile->read( $nbytes, CFILE_BINARY_INT_MODE ) ;
 echo ( $OFFSET_BITS === false ) ? "CAN'T READ from file ... <b>".$cfile->get_error_string()."</b><br>" : "OFFSET BITS TO BITMAP DATA ($nbytes):<b>$OFFSET_BITS</b><br>" ;
 
 echo "<br>READING <b>BITMAP INFO HEADER</b><br>" ;
 
 $nbytes = 4 ; // size of the BITMAPINFOHEADER structure, in bytes
 $READ = $cfile->read( $nbytes, CFILE_BINARY_INT_MODE ) ;
 echo ( $READ === false ) ? "CAN'T READ from file ... <b>".$cfile->get_error_string()."</b><br>" : "size of the BITMAPINFOHEADER structure, in bytes ($nbytes):<b>$READ</b><br>" ;
 
 $nbytes = 4 ; // WIDTH
 $IMAGE_W = $cfile->read( $nbytes, CFILE_BINARY_INT_MODE ) ;
 echo ( $IMAGE_W === false ) ? "CAN'T READ from file ... <b>".$cfile->get_error_string()."</b><br>" : "IMAGE WIDTH ($nbytes):<b>$IMAGE_W</b><br>" ;
 
 $nbytes = 4 ; // HEIGHT
 $IMAGE_H = $cfile->read( $nbytes, CFILE_BINARY_INT_MODE ) ;
 echo ( $IMAGE_H === false ) ? "CAN'T READ from file ... <b>".$cfile->get_error_string()."</b><br>" : "IMAGE HEIGHT ($nbytes):<b>$IMAGE_H</b><br>" ;
 
 $nbytes = 2 ; // PLANES
 $READ = $cfile->read( $nbytes, CFILE_BINARY_INT_MODE ) ;
 $READ = strval( $READ );
 echo ( $READ === false ) ? "CAN'T READ from file ... <b>".$cfile->get_error_string()."</b><br>" : "PLANES ($nbytes):<b>$READ</b><br>" ;
 
 $nbytes = 2 ; // BITS per PIXEL
 $BITS_PER_PIXEL = $cfile->read( $nbytes, CFILE_BINARY_INT_MODE ) ;
 echo ( $BITS_PER_PIXEL === false ) ? "CAN'T READ from file ... <b>".$cfile->get_error_string()."</b><br>" : "BITS per PIXEL ($nbytes):<b>$BITS_PER_PIXEL</b><br>" ;
 
 $nbytes = 4 ; // COMPRESSION
 $READ = $cfile->read( $nbytes, CFILE_BINARY_INT_MODE ) ;
 echo ( $READ === false ) ? "CAN'T READ from file ... <b>".$cfile->get_error_string()."</b><br>" : "COMPRESSION ($nbytes):<b>$READ</b><br>" ;
 
 $nbytes = 4 * 5 ; // SKIP : SIZE IMAGE + XperMETER + YperMETER + CLRused + CLRimportant
 $READ = $cfile->read( $nbytes, CFILE_BINARY_INT_MODE ) ;
 
 $PALETTEarray = array();
 
 if ( $BITS_PER_PIXEL < 24 ) // read palette
 {
 $CLRScount = pow( 2, $BITS_PER_PIXEL );
 $nbytes = 1 ;
 $COLONNE = 16 ;
 
 echo "<br>
 <table cellpadding=0 cellspacing=0 valign=\"top\" ALIGN=\"left\">
 <tr><td HEIGHT=\"1\"></td></tr>
 <tr><td COLSPAN=\"".( $COLONNE * 2 )."\">PALETTE</td></tr>" ;
 
 for( $i = 0 ; $i < $CLRScount ; $i++ )
 {
 $PALETTE_BLUE = $cfile->read( $nbytes, CFILE_BINARY_INT_MODE ) ;
 $PALETTE_GREEN = $cfile->read( $nbytes, CFILE_BINARY_INT_MODE ) ;
 $PALETTE_RED = $cfile->read( $nbytes, CFILE_BINARY_INT_MODE ) ;
 $PALETTE_RESERVED = $cfile->read( $nbytes, CFILE_BINARY_INT_MODE ) ;
 
 $BK = "rgb( $PALETTE_RED, $PALETTE_GREEN, $PALETTE_BLUE )" ;
 
 $PALETTEarray[$i] = array( $PALETTE_RED, $PALETTE_GREEN, $PALETTE_BLUE );
 
 if ( $i % $COLONNE == 0 ) echo "<tr>" ;
 
 echo "<td WIDTH=\"14\" HEIGHT=\"14\" STYLE=\"background-color:$BK\"></td>
 <td WIDTH=\"1\"></td>" ;
 
 if ( $i % $COLONNE == ( $COLONNE - 1 ) )
 echo "</tr>
 <tr><td HEIGHT=\"1\"></td></tr>" ;
 }
 
 echo "</table>" ;
 }
 
 echo "<br>
 <table cellpadding=0 cellspacing=0 valign=\"top\">
 <tr><td HEIGHT=\"1\"></td></tr>
 <tr><td COLSPAN=\"".( $IMAGE_W )."\">PICTURE</td></tr>" ;
 
 $BYTEStoREAD = ( $BITS_PER_PIXEL < 24 ) ? 1 : 3 ;
 
 // padding the byte row in the image
 $BYTES_PER_ROW = $BYTEStoREAD * $IMAGE_W + $REMAINDER ;
 $REMAINDER = $BYTES_PER_ROW % 4 ;
 
 $OFFSET = $OFFSET_BITS ;
 
 for( $Hrunner = $IMAGE_H - 1 ; $Hrunner >= 0 ; $Hrunner-- )
 {
 $cfile->move( $OFFSET + $BYTES_PER_ROW * $Hrunner, 0 ) ;
 
 echo "<tr>" ;
 
 for( $Wrunner = 0 ; $Wrunner < $IMAGE_W ; $Wrunner++ )
 {
 $CLR = "" ;
 
 if ( $BYTEStoREAD == 3 )
 {
 $PIXEL_B = $cfile->read( 1, CFILE_BINARY_INT_MODE ) ;
 $PIXEL_G = $cfile->read( 1, CFILE_BINARY_INT_MODE ) ;
 $PIXEL_R = $cfile->read( 1, CFILE_BINARY_INT_MODE ) ;
 }
 else
 {
 $PIXEL_INDEX = $cfile->read( 1, CFILE_BINARY_INT_MODE ) ;
 $CLRtripleARRAY = $PALETTEarray[$PIXEL_INDEX] ;
 
 $PIXEL_R = $CLRtripleARRAY[0] ;
 $PIXEL_G = $CLRtripleARRAY[1] ;
 $PIXEL_B = $CLRtripleARRAY[2] ;
 }
 
 $BK = "rgb( $PIXEL_R, $PIXEL_G, $PIXEL_B )" ;
 
 echo "<td WIDTH=\"1\" HEIGHT=\"1\" STYLE=\"background-color:$BK\"></td>" ;
 }
 
 // padding the byte row in the image
 for( $i = 0 ; $i < $REMAINDER ; $i++ ) $cfile->read( 1, CFILE_BINARY_INT_MODE ) ;
 
 echo "</tr>" ;
 
 ob_flush();      flush();
 }
 
 echo "</table>" ;
 
 echo "<br>" ;
 echo ( $cfile->close() ) ? "CLOSE FILE <b>$CANDIDATEfile</b> : SUCCESS" : $cfile->get_error_string() ;
 }
 else echo $cfile->get_error_string() ;
 ?>
 |