CImageの画像表示の仕方

解決


  2005-04-16 04:32:12  No: 57038

CImageのLoadメソッドで取得した画像データを
Drawメソッドで表示したいのですが、
エラーになったしまうようでうまく表示できません。
どうしたらいいでしょうか
ソース
switch(msg) {
  case WM_DESTROY:
    PostQuitMessage(0);
    return 0;
  case WM_CREATE:
    im.Load("test.png");
    im2.Create(im.GetWidth(), im.GetHeight(),24,0);
    break;
  case WM_PAINT:
    im.Draw(im2.GetDC(),0,0,im.GetWidth(),im.GetHeight());
    break;
  }
  return DefWindowProc(hwnd , msg , wp , lp);
}

環境はWindowsXP,.Net2003です。
初心者名質問で申し訳ありませんが、どなたかご存知でしたらよろしくお願いします


シャノン  2005-04-16 06:53:48  No: 57039

うまくいかない場合は、以下の情報を明記しましょう。

・どんなエラーになるのか
  ビルドエラーなのか、実行時エラーなのか、エラーは出ないけど期待した結果にならないのか
  エラーメッセージも詳細に。
・うまく行っていない現状とは、どんなものなのか
  上記のうち、3つ目の症状である場合、失敗しているなりにも何らかの実行結果があるはず。それはどんな感じ?
・「うまくいく」とは、どういうことなのか
  同じく、3つ目の症状である場合、期待した結果はどういうものなのか。


シャノン  2005-04-16 07:00:10  No: 57040

忘れてた。

GetLastError でエラーが取得できる場合、エラーコードと FormatMessage の結果も書くべし。

で、今回の話。
致命的なポイントがひとつ、一応確認しておきたいポイントがひとつあります。

まず致命的なほう。
Draw の第一引数のデバイスコンテキストは、イメージを描画したい先を指定します。
今回、イメージを描画したい先はどこでしょう?
現在の im2.GetDC() で取得できるデバイスコンテキストでは、いったいどこに描こうとしているのでしょう?

要確認のほう。
WM_CREATE で Load した im は、WM_PAINT の時まで存在していますよね?


  2005-04-16 08:28:47  No: 57041

説明不足で申し訳ありません
エラーは実行時エラーでGetLastErrorは取得できませんでした。
要確認のほうですが、imはWM_PAINTの時まで存在しています。
今回はウィンドウに指定したpng画像が描画するのが目的です。

このような場にはあまり書き込んだりしないもので・・・・。
不手際ご容赦ください。
また、何か情報が足りなければ遠慮なくご指摘お願いいたします。


シャノン  2005-04-16 10:20:41  No: 57042

>> まず致命的なほう。
>> Draw の第一引数のデバイスコンテキストは、イメージを描画したい先を指定します。

> 今回はウィンドウに指定したpng画像が描画するのが目的です。

であれば、Draw の第一引数は、そのウィンドウのデバイスコンテキストなのでは?


瀬戸っぷ  2005-04-16 10:22:58  No: 57043

CImageってコトですが…
MFCですか?
MFCならOnPaint()とかだと思うのですが。

DC関係はシャノンさんからレスがついているので、
掲示されたプロシージャについて1つ。
WM_PAINTの後、DefWindowProc()呼んでますけど、
ソレは期待した動作ですか?
WNDCLASSで登録したhbrBackgroundで塗りつぶされると思われますが…


  2005-04-17 03:28:46  No: 57044

>>であれば、Draw の第一引数は、そのウィンドウのデバイスコンテキストなのでは?

BeginPaintでデバイスコンテキストを取得したら上手く描画できました
ありがとうございました


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加