プログラム(EasyJPEG.cpp)。関数 LoadBmp(...) のBITMAPINFO.BITMAPINFOHEADER に正確な情報が入らない。何か間違ってますでしょうか?。http://www.idiagdia.com/disca/files/jpegtest.zip


BITMAPFILEHEADER & BITMAPINFOHEADER

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:virus No.1

回答回数183ベストアンサー獲得回数1

ポイント30pt

http://www.hatena.ne.jp/1090185509

プログラム(EasyJPEG.cpp)。関数 LoadBmp(...) のBITMAPINFO.BITMAPINFOHEADER に正確な情報が入らない。何か間違ってますでしょうか?。http://www.idiagdia.com/disca/fi.. - 人力検索はてな

チラッとしかみてないですが、ポインターのキャスト&位置あわせを間違ってません?

多分意図されているのは

pBmi= (BITMAPINFO*) (pFileBuf + sizeof(BITMAPFILEHEADER));

pBmiImg= ((BYTE*) pBfh) + pBfh->bfOffBits;

だと思うんですが、コンパイラが意図を察して適当にオペレータの優先順位を変えてくれるなんてことはないですよ(^^ゞ

id:disca

ありがとうございます。

2004/07/19 14:22:17
id:syuzabu No.2

回答回数155ベストアンサー獲得回数2

ポイント30pt

http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_DIB.html

VC++テクニック : ディスク上のBMPファイルを表示

.NET持ってないんで確認出来できないです。申し訳ないです。

>> 65: pBmi= (BITMAPINFO*) pFileBuf + sizeof(BITMAPFILEHEADER);

コレだとBITMAPINFO型にキャストしたpFileBufとBITMAPFILEHEADER型の

サイズを足す形になってなんか変になりそうな気がします。(適当ですみません)

pBmi= (BITMAPINFO*) (pFileBuf + sizeof(BITMAPFILEHEADER));

全体をカッコで囲んで左式に代入する際にキャストしてみては如何ですか?

似非プログラマなんであんまりソース分かってませんが・・・(^-^;)

id:disca

ありがとうございます。

2004/07/19 14:22:57
id:aki73ix No.3

回答回数5224ベストアンサー獲得回数27

ポイント30pt

URLはダミー

ポインタの使い方がおかしいです

構造体のポインタにサイズを加算したらおかしくなります。

最初にアドレスを加算してから構造体のポインタにキャストしないといけません

誤:pBmi= (BITMAPINFO*) pFileBuf + sizeof(BITMAPFILEHEADER);

正:pBmi= (BITMAPINFO*)( pFileBuf + sizeof(BITMAPFILEHEADER));

id:disca

ありがとうございます。期待していた正解です。

以前にお答えていただいた方の場合では

(BITMAPINFO*)((BYTE*)pFileBuf) + sizeof(BITMAPFILEHEADER)

と何度も眠気と戦いながら試していたのですが、上手くいきませんでした。

2004/07/19 14:49:14
id:kajuyone No.4

回答回数9ベストアンサー獲得回数0

ポイント30pt

pBmi= (BITMAPINFO*) (pFileBuf + sizeof(BITMAPFILEHEADER));

ではないでしょうか?

id:disca

正解です。ありがとうございます。

訂正:

virus さん、 syszabu さんの答えも期待していた正解です。ありがとうございました。

2004/07/19 15:07:25
  • id:disca
    無事解決しました。

    おかげさまで動作いたしました。

    また、
    http://www.hatena.ne.jp/1090220688 の件ですが、
    Debug ビルド と Release ビルドの関連が問題と、
    と、CRT(Cランタイムライブラリ)とMFCのライブラリのリンク問題であったようでした。
    http://support.microsoft.com/default.aspx?scid=kb;ja;148652
    http://homepage2.nifty.com/tulip-an/soft/scrwrpprblm.html
    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません