function _processBitmap($bitmap)
    {
        // Open file.
        $bmp_fd = @fopen($bitmap,"rb");
        if (!$bmp_fd) {
            $this->raiseError("Couldn't import $bitmap");
        }

        // Slurp the file into a string.
        $data = fread($bmp_fd, filesize($bitmap));

        // Check that the file is big enough to be a bitmap.
        if (strlen($data) <= 0x36) {
            $this->raiseError("$bitmap doesn't contain enough data.\n");
        }

        // The first 2 bytes are used to identify the bitmap.
        $identity = unpack("A2ident", $data);
        if ($identity['ident'] != "BM") {
            $this->raiseError("$bitmap doesn't appear to be a valid bitmap image.\n");
        }

        // Remove bitmap data: ID.
        $data = substr($data, 2);

        // Read and remove the bitmap size. This is more reliable than reading
        // the data size at offset 0x22.
        //
        $size_array   = unpack("Vsa", substr($data, 0, 4));
        $size   = $size_array['sa'];
        $data   = substr($data, 4);
        $size  -= 0x36; // Subtract size of bitmap header.
        $size  += 0x0C; // Add size of BIFF header.

        // Remove bitmap data: reserved, offset, header length.
        $data = substr($data, 12);

        // Read and remove the bitmap width and height. Verify the sizes.
        $width_and_height = unpack("V2", substr($data, 0, 8));
        $width  = $width_and_height[1];
        $height = $width_and_height[2];
        $data   = substr($data, 8);
        if ($width > 0xFFFF) {
            $this->raiseError("$bitmap: largest image width supported is 65k.\n");
        }
        if ($height > 0xFFFF) {
            $this->raiseError("$bitmap: largest image height supported is 65k.\n");
        }

        // Read and remove the bitmap planes and bpp data. Verify them.
        $planes_and_bitcount = unpack("v2", substr($data, 0, 4));
        $data = substr($data, 4);
        if ($planes_and_bitcount[2] != 24) { // Bitcount
            $this->raiseError("$bitmap isn't a 24bit true color bitmap.\n");
        }
        if ($planes_and_bitcount[1] != 1) {
            $this->raiseError("$bitmap: only 1 plane supported in bitmap image.\n");
        }

        // Read and remove the bitmap compression. Verify compression.
        $compression = unpack("Vcomp", substr($data, 0, 4));
        $data = substr($data, 4);

        //$compression = 0;
        if ($compression['comp'] != 0) {
            $this->raiseError("$bitmap: compression not supported in bitmap image.\n");
        }

        // Remove bitmap data: data size, hres, vres, colours, imp. colours.
        $data = substr($data, 20);

        // Add the BITMAPCOREHEADER data
        $header  = pack("Vvvvv", 0x000c, $width, $height, 0x01, 0x18);
        $data    = $header . $data;

        return (array($width, $height, $size, $data));
    }
function _processBitmap($bitmap)
    {
        // Open file.
        $bmp_fd = @fopen($bitmap,"rb");
        if (!$bmp_fd) {
            $this->raiseError("Couldn't import $bitmap");
        }

        // Slurp the file into a string.
        $data = fread($bmp_fd, filesize($bitmap));

        // Check that the file is big enough to be a bitmap.
        if (strlen($data) <= 0x36) {
            $this->raiseError("$bitmap doesn't contain enough data.\n");
        }

        // The first 2 bytes are used to identify the bitmap.
        $identity = unpack("A2ident", $data);
        if ($identity['ident'] != "BM") {
            $this->raiseError("$bitmap doesn't appear to be a valid bitmap image.\n");
        }

        // Remove bitmap data: ID.
        $data = substr($data, 2);

        // Read and remove the bitmap size. This is more reliable than reading
        // the data size at offset 0x22.
        //
        $size_array   = unpack("Vsa", substr($data, 0, 4));
        $size   = $size_array['sa'];
        $data   = substr($data, 4);
        $size  -= 0x36; // Subtract size of bitmap header.
        $size  += 0x0C; // Add size of BIFF header.

        // Remove bitmap data: reserved, offset, header length.
        $data = substr($data, 12);

        // Read and remove the bitmap width and height. Verify the sizes.
        $width_and_height = unpack("V2", substr($data, 0, 8));
        $width  = $width_and_height[1];
        $height = $width_and_height[2];
        $data   = substr($data, 8);
        if ($width > 0xFFFF) {
            $this->raiseError("$bitmap: largest image width supported is 65k.\n");
        }
        if ($height > 0xFFFF) {
            $this->raiseError("$bitmap: largest image height supported is 65k.\n");
        }

        // Read and remove the bitmap planes and bpp data. Verify them.
        $planes_and_bitcount = unpack("v2", substr($data, 0, 4));
        $data = substr($data, 4);
        if ($planes_and_bitcount[2] != 24) { // Bitcount
            $this->raiseError("$bitmap isn't a 24bit true color bitmap.\n");
        }
        if ($planes_and_bitcount[1] != 1) {
            $this->raiseError("$bitmap: only 1 plane supported in bitmap image.\n");
        }

        // Read and remove the bitmap compression. Verify compression.
        $compression = unpack("Vcomp", substr($data, 0, 4));
        $data = substr($data, 4);

        //$compression = 0;
        if ($compression['comp'] != 0) {
            $this->raiseError("$bitmap: compression not supported in bitmap image.\n");
        }

        // Remove bitmap data: data size, hres, vres, colours, imp. colours.
        $data = substr($data, 20);

        // Add the BITMAPCOREHEADER data
        $header  = pack("Vvvvv", 0x000c, $width, $height, 0x01, 0x18);
        $data    = $header . $data;

        return (array($width, $height, $size, $data));
    }
function _processBitmap ( $ bitmap ) { // Open file.
 $ bmp_fd = @ fopen ( $ bitmap , "rb" ) ; if ( ! $ bmp_fd ) { $ this -> raiseError ( "Couldn't import $bitmap" ) ; } // Slurp the file into a string.
 $ data = fread ( $ bmp_fd , filesize ( $ bitmap ) ) ; // Check that the file is big enough to be a bitmap.
 if ( strlen ( $ data ) <= 0x36 ) { $ this -> raiseError ( "$bitmap doesn't contain enough data.\n" ) ; } // The first 2 bytes are used to identify the bitmap.
 $ identity = unpack ( "A2ident" , $ data ) ; if ( $ identity [ 'ident' ] != "BM" ) { $ this -> raiseError ( "$bitmap doesn't appear to be a valid bitmap image.\n" ) ; } // Remove bitmap data: ID.
 $ data = substr ( $ data , 2 ) ; // Read and remove the bitmap size. This is more reliable than reading
 // the data size at offset 0x22.
 //
 $ size_array = unpack ( "Vsa" , substr ( $ data , 0 , 4 ) ) ; $ size = $ size_array [ 'sa' ] ; $ data = substr ( $ data , 4 ) ; $ size -= 0x36 ; // Subtract size of bitmap header.
 $ size += 0x0C ; // Add size of BIFF header.
 // Remove bitmap data: reserved, offset, header length.
 $ data = substr ( $ data , 12 ) ; // Read and remove the bitmap width and height. Verify the sizes.
 $ width_and_height = unpack ( "V2" , substr ( $ data , 0 , 8 ) ) ; $ width = $ width_and_height [ 1 ] ; $ height = $ width_and_height [ 2 ] ; $ data = substr ( $ data , 8 ) ; if ( $ width > 0xFFFF ) { $ this -> raiseError ( "$bitmap: largest image width supported is 65k.\n" ) ; } if ( $ height > 0xFFFF ) { $ this -> raiseError ( "$bitmap: largest image height supported is 65k.\n" ) ; } // Read and remove the bitmap planes and bpp data. Verify them.
 $ planes_and_bitcount = unpack ( "v2" , substr ( $ data , 0 , 4 ) ) ; $ data = substr ( $ data , 4 ) ; if ( $ planes_and_bitcount [ 2 ] != 24 ) { // Bitcount
 $ this -> raiseError ( "$bitmap isn't a 24bit true color bitmap.\n" ) ; } if ( $ planes_and_bitcount [ 1 ] != 1 ) { $ this -> raiseError ( "$bitmap: only 1 plane supported in bitmap image.\n" ) ; } // Read and remove the bitmap compression. Verify compression.
 $ compression = unpack ( "Vcomp" , substr ( $ data , 0 , 4 ) ) ; $ data = substr ( $ data , 4 ) ; //$compression = 0;
 if ( $ compression [ 'comp' ] != 0 ) { $ this -> raiseError ( "$bitmap: compression not supported in bitmap image.\n" ) ; } // Remove bitmap data: data size, hres, vres, colours, imp. colours.
 $ data = substr ( $ data , 20 ) ; // Add the BITMAPCOREHEADER data
 $ header = pack ( "Vvvvv" , 0x000c , $ width , $ height , 0x01 , 0x18 ) ; $ data = $ header . $ data ; return ( array ( $ width , $ height , $ size , $ data ) ) ; }
Convert a 24 bit bitmap into the modified internal format used by Windows.
This is described in BITMAPCOREHEADER and BITMAPCOREINFO structures in the
MSDN library.

@access private
@param string $bitmap The bitmap to process
@return array Array with data and properties of the bitmap
Convert a 24 bit bitmap into the modified internal format used by Windows . This is described in BITMAPCOREHEADER and BITMAPCOREINFO structures in the MSDN library .