本日のアドプロで発生した謎の水平グラデバグ.
言葉で説明するのは難しいので,画像を見ていただきたい.
これは期待通りの出力ではありません.
左側が黒,右側が白の水平グラデーションが出力されるはずでした.
この画像は256*256のpngになってますが,
実際は2048*2048のbmpです.
その辺は都合ですので,適当に解釈してください.本質じゃない.
学校ではツール類が充実してないので,細かい検証ができなかったので,
自宅に帰ってから,バイナリエディタで調査してみた.
それがこれ.
もうね.明らかにおかしいでしょ.
水平256ピクセルだから,同じ数値が3つ並ぶはずなのに,
0D0A 0D0A 0D0A
って・・・
これを見た瞬間.理解しました.
0AはLF(改行)で,0DはCR(復帰)です.
つまり,0Aを出力しようとしたので,ご丁寧にもCRLFにしてくれたんです.
もうわかりますね.
出力モードがバイナリではなく,アスキーになってるんです.
原因箇所は以下の1文.
if(0 == (fp=fopen(file_name,"w")))
これをバイナリモードに変更します.
if(0 == (fp=fopen(file_name,"wb")))
バイナリエディタで確認.
確かに,0Aが0D0Aに変換されていません.
ビュワで確認.
ktkr!
結論:
freadやfwriteを使うときは,バイナリモードに注意しよう!