Sempre existe uma seção "cabeçalho" de um arquivo BMP com 14 bytes de tamanho, por isso é melhor começar a ler a partir do 15º byte em diante. Eu tive exatamente o mesmo problema que você há muitas luas.
Então ... use uma chamada de função como esta antes do seu fread
:
fseek ( file, 15, SEEK_SET);