• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ビットマップ画像を読み込むプログラムがうまく行きません。困ってます…。)

ビットマップ画像を読み込むプログラムがうまく行かない!困ってます

このQ&Aのポイント
  • ビットマップ画像を読み込むプログラムがうまく行かない
  • 画像の表示と輝度値の表示を行うプログラムがうまく動作しない
  • 作成したプログラムに3つの問題が発生している

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

ビットマップファイルにはビット深度が24ビット未満の場合 このファイルで使用されるパレットが登録されています BITMAPINFOHEADER と 実際のビットイメージの間に RGBA*何色といったパレットが存在します グレースケールの8bitなら256個です 何個あるかは BITMAPINFOHEADERのbiClrUsedがそれに当ります これが0ならbiBitCountをビットシフトして求めます 1 << biBitCountが個数になります 実際のバイトデータとしては (1 << biBitCount) * sizeof(RGBQ) バイト存在します したがって BYTE* pPalette = (BYTE*)calloc( sizeof(RGBQ), (1 << biBitCount) ); とバッファを宣言して fread(&bmih,sizeof(bmih),1,fp); の後で fread( pPalette, sizeof(RGBQ), (1 << biBitCount), fp ); を実行してから 色情報を取得しましょう 書き出すときも同じように fwrite(&bmih,sizeof(bmih),1,fp); の後で fwrite( pPalette, sizeof(RGBQ), (1 << biBitCount), fp ); を実行します あと動的に確保したバッファは使い終わったら free()で開放しましょう return 0;の前に  free( pPalette );  for(i = 0; i < Y_SIZE; i++){   for(j = 0; j < X_SIZE; j++){    free(mae[i][j]);   }  }  for(i = 0; i < Y_SIZE; i++){   free(mae[i]);  }  free(mae); といった具合に 逆順に開放していきます

yo-tin
質問者

お礼

返信が大変遅くなってしまいました。申し訳ないです。 redfox63さんのアドバイスを基に改良を加えたところ、 無事にグレースケールのBMP画像を読み込むことができました。 ご意見を頂けて、大変感謝をしております。 ありがとうございました。 まだまだ知識不足ですので、また質問をすることがあると思います。 その際は、よろしくお願い致します。

その他の回答 (1)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★アドバイス >しかし、このプログラムは、他人のプログラムに改良を加えて作成したものです。 >なので、このプログラム自体、私自身が完璧に理解できていない状況です。  ↑  それなら回答者は誰一人理解できないんでしょうね。多分。 ・質問文を読んで思ったのですがグレイスケールのビットマップ画像は 256 色の  パレット・テーブルは持っているのですか?  パレット・テーブルはなさそうですよね。  だから >c)出力した画像が、”ディスクエラー”によりPhotoshopで開けない。 > (ペイントでは開ける)  ↑  となる気がします。  確かビットマップ画像で 256 色以下は必ずパレット情報を持つ必要があるはずですので  『Photoshop』ではディスクエラー(BMP形式でないエラー)となるのだと思います。  ペイントではなぜ開けるのだろ?  あまり厳しくヘッダをチェックしていないのかも? ・用意したグレースケールのビットマップ画像が正しいと保障できますか?  きちんとビットマップのヘッダを確認した方が良いですよ。  縦横ピクセル数、カラー数、その他いろいろ。 ・あと次の構造体をちゃんと理解して下さい。  http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/DirectX9_c/directx/htm/bitmapinfoheaderstructure.asp  パレット・テーブルの RGBQUAD 構造体をちゃんと読み書きすること。  http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_DIB.html ・以上。

yo-tin
質問者

お礼

返信が遅くなってしまい、申し訳ありません。 ご意見ありがとうございました。大変参考になりました。 教えて頂いたHPを拝見したところ、私には難しいようでした…。 もう少し勉強をする必要がありそうです。 また疑問が湧いたら、質問をさせて頂きます。 その際はよろしくお願い致します。

関連するQ&A