- ベストアンサー
質問:pgm画像入出力プログラムで出力画像のテキストデータが文字化けする原因は?
- 画像入出力のプログラムを書いた(とあるサイトからパクった)のですが、出力画像のテキストデータが文字化けしてしまいます。原因究明お願いします。
- プログラムでは画像を2倍に変換する処理を行っていますが、それ以外の部分にも問題がありませんか?また、Windows環境での文字コードの設定も確認してください。
- プログラムの実行方法や使用しているライブラリに問題はありますか?画像の変換処理でバグがある可能性も考えられますので、プログラムの修正も検討してください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
「出力ファイルが文字化けする」という表現からすると、アスキーフォーマットなのでしょうか? ※正しく処理をしていれば、ヘッダ部分に情報があるので、判断できますが。 ヘッダの処理を別にしても、アスキーフォーマットだったら、fread() で読み込んで、単純に2倍すると、概ね文字化けします。 fread() は、バイナリ値としてデータを読みますから、それを、アスキーコードだと解釈して、その上で、2倍した値にする必要があります。 ヘッダの処理が不適切でされていなくて、ヘッダ部分も(バイナリとして)2倍しているので、フォーマットを壊しているのは、既に回答があるとおりです。
その他の回答 (2)
- s0832080
- ベストアンサー率0% (0/2)
PGMについては詳しくないですが・・・ググってみました. http://www.wdic.org/w/TECH/PGM これ見ると・・・最初の方にヘッダーのようなデータがあるみたいですが・・・. そのプログラムではそれを無視しているように見えます.
- Wr5
- ベストアンサー率53% (2173/4061)
>出力画像のテキストデータが文字化けしてしまいます。 テキストデータとして扱っていないんですから当然かと思われますが……。 # そもそもPGMフォーマットとしても扱っていないですよね? http://ja.wikipedia.org/wiki/PNM_%28%E7%94%BB%E5%83%8F%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%29#.E3.83.87.E3.83.BC.E3.82.BF.E5.BD.A2.E5.BC.8F ファイルの最初にあるマジックナンバーで、まず'P'を読み込みます。 ASCIIコードで0x50なので、 > (idat * 2 > 255) の条件により255は超えないので2倍にして0xA0で書き出します。 次の1文字が数字の'1'~'6'。PGMとのコトなので'2'か'5'でしょうか? これも上記の条件で255は超えませんから2倍して0x64か0x6Aで書き出し。 めでたくこの時点でPGMフォーマットから外れます。 さぁ、続けて改行コードを読み込んで…やはり上記の条件から255を超えませんので別の文字に変換します。 できあがったファイルがPGMフォーマットにはなっていないので減点です。
お礼
みなさん回答ありがとうございました。 みなさんのおっしゃる通り、ヘッダー処理、2倍の部分が原因ということで、解決いたしました。