BMPが画像によって白黒反転する

問題の症状

白黒BMPを使った際にあるプログラムに対して白黒反転する画像がある。

ただ一般的なGIMP等他のプログラムで開いても特に問題がなく、しかも画像の生成元によっては反転しない物がある。

原因

自分の場合、パレットの順番を決めうちしているのが原因でした。

BMPの場合、2色の場合でもヘッダ部分にパレット情報がありその情報を元に適切に処理をしないといけません。

この辺しっかりしたプログラムならばパレットを読み取って適切に処理しますが手抜きプログラムの場合この処理を省略してたりします。

2色BMPの場合各ピクセル毎に1bitつまり、「0」または「1」の情報がありますがこれを例えば「0」を黒「1」を「白」と決めうちしてしまっているときにパレットの情報で逆に指定されている画像を読み込んだ時に反転してしまうわけです。

C#のプログラムで高速化のため1bitBMPをバイナリから直接読み取るサンプルプログラムがありますが、偶に白のビットと黒のビットのフラグを決めうちで読み取るサンプルがあったりするのでその辺注意が必要です。