掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ピクチャボックスに表示された画像を保存するには? (ID:54034)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
見えているウィンドウに関連づけされたデバイスコンテキスト(DC) はSelectObjectでBitmapを選択することはできません。 だからBitmapを表示させたい場合は、ウィンドウに関連付けされていない DC(いわゆる裏画面)を作成して、そこにBitmapを選択させ、BitBlt、StretchBltで 表DCに転送(コピー)します。(裏DCは自由にBitmapを選択できる) その後、表DCにいくら描画処理を行った所で元のBitmapは何も変わりません。 裏DCをメンバとして持っておいて、そこに描画処理を行いましょう。 例えば CDC m_memDC をメンバにして、そこにBitmapを選択させます。 CStaticの派生クラスを作り、その派生クラスにCDC* m_pDCをメンバを作り、 親クラスのm_memDCを渡しておきます。 void CMatchingDlg::OnButton1() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください int x0=0,y0=0,x1=350,Matrix[350][255]; int i, j,c,b,b1,d,e; int v,w,x,y,z,A,B,C,D; for(j=1;j<255;j++) { for(i=1;i<349;i++) { d = GetRValue(memDC.GetPixel(i,j)); memDC.SetPixel(i,j,RGB(0,0,d)); } } m_pict1.Invalidate() ;//派生クラスを再描画させる。 } 派生クラスのOnPaintで、 { CPaintDC dc(this) ; //数値は適当ですから直してください。 dc.BitBlt(0,0,100,100,m_pDC,0,0,SRCCOPY) ;//親クラスの裏画面を表画面に転送。 } とかすれば、描画できます。 ピクチャボックスの正体は、CStaticというコントロールクラスです。 コントロールクラスの目的は、自分に対するメッセージ(マウスが自分の上にきた とか、クリックされたとか)を親に通知する事、わずらわしい表示処理を デフォルトでやってくれる事で、それ以上の機能はありません。 (CButtonやCEditもコントロールクラスです。) ですからそれ以上の事を行う場合は、自分で処理しなければならないし、 場合によってはデフォルトの処理が、自分の実現したい機能の邪魔に なることもあります。 ビクチャボックスの場合は、SetBitmapでBitmapを管理する事がまさにそれです。 このBitmapに対して加工する事はできませんから。(差し替える事はできます。) だから自分で描画する必要があるんです。 普通はCWndの派生クラスを作るのですが、CStaticもCWnd派生ですから CStaticを派生クラスを作ればCWndのすべての機能が実現できます。 でも前述の様に邪魔になる機能も含まれてしまいます。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.