- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PBMのデータを保持するにはどの方法がいいでしょうか?)
PBMデータの保持方法について
このQ&Aのポイント
- PBMデータを保持するためには、構造体を使用するのが適切です。
- 画像データを連続した値として格納するには、一行ずつではなく、一文字ずつ読み込んで格納する必要があります。
- pbm_dataという配列を作成し、読み込んだ値をその配列に連続して格納することで、画像データを保持できます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
★一般論 ・C言語なら構造体、C++言語ならクラスなどで読み込んでデータを管理するのか 一番すっきりするでしょうね。C++言語ならばメンバ関数でやり取りを出来ます。 ・あと1行ずつ読み込むと配列に連続した値として格納できないのでは?ってどういう事? 複数の『pbm』画像データを連続して読み込んだとき、その複数の画像データの部分が 連続しているように格納したいということですか? この辺の部分をもう少し補足してくれますか? ・それから、BMP画像の読み込み、書き出しは成功しているため、『pbm』の画像データも 同じような構造体で管理するという方法はどうでしょうか。→横、縦、データ部のみ。 また、画像データ部はchar型の配列に横(24桁)×縦(7列)=168バイトに連続して格納 していき、横サイズ、縦サイズからchar型配列で1行の長さと計算させて取り出す仕組み にするのはどうでしょう。 構造体: struct pbm_t { int no; // マジックナンバー int sx; // 画像の幅 int sy; // 画像の高さ char img[ 1 ]; } pbm_t; 解説: ・上の構造体はメンバ img が可変長のデータを格納するようにするため [1] というサイズに なっています。この構造体をメモリ(malloc)で確保するとき、画像の横×画像の縦+構造体の サイズを足した容量を確保します。こうすれば、構造体 pbm_t で画像の縦と横が変動しても char 型の img 配列でデータを連続して管理できます。→BMP画像ファイルなどと考えは同じです。 ・以上。参考に!
お礼
Oh-Orange様 いつもご回答ありがとうございます。プログラムを完成させることができました。 >・あと1行ずつ読み込むと配列に連続した値として格納できないのでは?ってどういう事? >複数の『pbm』画像データを連続して読み込んだとき、その複数の画像データの部分が 連続しているように格納したいということですか? > この辺の部分をもう少し補足してくれますか? このことについては解決したので大丈夫です。 >・上の構造体はメンバ img が可変長のデータを格納するようにするため [1] というサイズに なっています。この構造体をメモリ(malloc)で確保するとき、画像の横×画像の縦+構造体の サイズを足した容量を確保します。こうすれば、構造体 pbm_t で画像の縦と横が変動しても char 型の img 配列でデータを連続して管理できます。 この方法は思いつきませんでした。次回に活かします。ありがとうございました!