VC++6でJPGを描画する処理をつくりました。

①のように直接画面に描画する場合、正常に描画できるのですが、
②のように裏画面(cdcSubDC)に描画して最終的にメインの画面にBitBltしようとすると、
うまくいきません。
裏画面に描画する方法で間違えているところなどあるのでしょうが、いまいち解りません。
間違いを教えてくれ問題解決に導いてくれたかたに500ポイント差し上げます。
救いの手をよろしくお願いします。



CDC* cdcMainDC=wndIcon->GetDC();
   ・
   ・
  (省略)
   ・
   ・
ipi->Render(cdcMainDC->m_hDC,0,0,csz.cx,csz.cy,0,hit,wid,-hit,NULL);//描画します。


CDC cdcSubDC; //裏画面用CDC
cdcSubDC.CreateCompatibleDC(cdcMainDC);
CBitmap GraphicMap;

ipi->get_Width(&wid);//イメージのサイズを取得します。
ipi->get_Height(&hit);
CSize csz(wid,hit);
GraphicMap.CreateCompatibleBitmap(pDC ,wid,hit);//キャンバス準備
cdcSubDC.SelectObject(GraphicMap); //裏画面との関連付け
cdcSubDC.HIMETRICtoDP(&csz);
ipi->Render(pDC->m_hDC,0,0,csz.cx,csz.cy,0,hit,wid,-hit,NULL);//描画します。

ipi->Release();//イメージを解放します。
ist->Release();//ストリームを解放します。
GlobalFree(hgb);//読み込み用バッファを解放します。
cdcSubDC.SelectObject(oldBMP);

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

ベストアンサー

id:SevenS No.1

回答回数51ベストアンサー獲得回数3

ポイント250pt

中途半端にしか読めていませんが、cdcMainDC->BitBlt( 0, 0, csz.cx, csz.cy, &cdcSubDC, 0, 0, SRCCOPY );

は実行しているとのことなので。

まず気になるのは、ipi->Renderの第1引数。pDCは定義されていないので気になります。cdcSubDCのm_hDCがちゃんと指定できていますか?気になったのはこれだけです。

なげやりで申し訳ありませんが、以下、調べたほうがよさそうな点をいくつか。


Renderメソッド直前で、念のためにパラメータ(cxz.cyなど)の値を調べてみるのが最善かと思います。

また、Renderで描画する座標をわざとずらすのもありかと思います。もしかしたら、第7引数を0、第9引数をhitにするのが正しい場合もありますので。

あと、これは個人的に。ダブルバッファリングをするだけなら、「cdcSubDC.SelectObject(oldBMP)」は不要なように思います。

場合によっては、Renderの最終引数のRectをちゃんと指定しなければ表示できない場合もあるそうです。


調査不足ですみませんが。どうぞ頑張ってください。

リンクは参考までに。

http://msdn.microsoft.com/msdnmag/issues/01/10/c/

id:harunoharuno

回答ありがとうございます。

>>まず気になるのは、ipi->Renderの第1引数。pDCは定義されていないので気になります

>>。cdcSubDCのm_hDCがちゃんと指定できていますか?気になったのはこれだけです。

>>なげやりで申し訳ありませんが、以下、調べたほうがよさそうな点をいくつか。

ああぁっ

メイン画面に出力できるかテストしたときのコーディングを直していませんでした。

見苦しい失敗申し訳ありません。

Renderの第一引数はcdcSubDC.m_hDCです。

そして

変数の値や関数の意味を確認しながら、いろいろ試していたところ無事解決することができました。

今回のソースの問題点はwid,hitを

HIMETRICtoDP関数を通しピクセルの値に変換してから

CreateCompatibleBitmap(pDC ,wid,hit)とするべきところを

そうしていなかったことが原因のようです。

ピクセル値に変換する前は、widに20000とか大きい値が入っていましたが

ここを直したら正常に画像を表示することができました。

SevenSさんのコメントが力になりました。

今回はヒントという形でしたので

250ポイントになりますが、感謝の心をもって差し上げます。

ありがとーございました。

2007/01/29 21:19:20

コメントはまだありません

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

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

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

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