Even though the reader doesn't seem to be the most optimized it looks like it should be reading. I'd crack open a hex editor and make sure everything is order in the file you are reading.
[EDIT]
The thought just occured to me that maybe data is being misaligned. I know that I've always had trouble directly reading a bitmap file header into a struct since a struct is aligned on the 32-bit boundary and the header is 14 bytes. Look into that too.
[/EDIT]