Un detalle para cuando leas o escribas BMP, a parte de lo que te comenten por aquí.
Cuando comienzas a escribir los bytes, cada fila ha de ocupar un número de bytes divisible entre 4. Es decir, si hay 2 columnas, serían 6 bytes. Para ocupar los bytes que faltan, se añaden dos bytes de relleno o padding.
Para una idea menos abstracta, aquí tienes un ejemplo: https://en.wikipedia.org/wiki/BMP_file_format#Example_1