Yes... and no... :-)
The first characters are always "BM", you are correct, but there are many more details.
You must first extract ALL headers from the file, then the Palette header (if there is one), and finally get to the storage of the image. This means you do not know where the "image" starts: you must read and understand the headers.
See details at http://www.fortunecity.com/skyscraper/windows/364/bmpffrmt.html
As if this was not enough, the colour value of each pixel can be 1bit (black/white); 4 bit (16 colors); 8 bit (256 colors); 24 bit (16.7 million colors)
Use Php to extract the header information BEFORE attempting reading the pixel colours.
Good luck!
(This is fine for bitmaps, but don't even try on Jpegs or Png: these are a totally different algorythm!)
EDIT:
There is, however, a MUCH BETTER way: use the GD library functions!
use imagecreatefromwbmp() to read your image,
then imagecolorat(x,y) to get the R,G,B values.
(Much more of that at www.php.net - enter search function "imagecreatefromwbmp" to have the list of all image functions)