人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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);

●質問者: harunoharuno
●カテゴリ:コンピュータ ゲーム
✍キーワード:BitBlt CX IST jpg PDC
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● SevenS
●250ポイント ベストアンサー

中途半端にしか読めていませんが、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/

◎質問者からの返答

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

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

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

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

ああぁっ

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

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

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

そして

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

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

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

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

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

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

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

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ