CDCで選択したビットマップに対する描画に関して – プログラミング – Home

CDCで選択したビットマップに対する描...
 
通知
すべてクリア

[解決済] CDCで選択したビットマップに対する描画に関して


準中級者
 準中級者
(@準中級者)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

環境はXP Home SP2、VC++ 6.0、MFCで作成しているプログラムがあります。

MDIのアプリでデータに基づいてViewに図形などを表示させています。
Viewに描画するにあたってちらつきをなくすために、OnDraw()の中で
pDCの互換のあるCDCのメモリバッファーを作成します。
メモリバッファのCDCに対して現在のモニタの大きさくらいのビットマップを作成して、
それを選択をしてメモリーバッファーに対して描画してからpDCにBitBltで一括転送して
表示を行っています。
互換のあるメモリーバッファーのに選択したビットマップのCDCに描画するに
あたって大丈夫か分からない事があり質問しました。
メモリーバッファーの選択したビットマップの大きさの範囲外に図形描画関数を
呼んでも描画しても問題はありませんでしょうか?
範囲外に描画しても不正エラーで終了する事はないのですが、状況により選択したビッ
トマップの大きさの範囲よりも外にはみ出して描画する事もあります。


引用未解決
トピックタグ
愛飢え男
 愛飢え男
(@愛飢え男)
ゲスト
結合: 17年前
投稿: 8
 

クリッピングは出来無い?


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

実際にやってみればすぐわかることですがまったく問題ありません。
マニュアルにも、DCに与えてはいけない座標値などという記述はありません。
また、そうでなければ描画対象として使い物になりません。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

描画関数的に考えると全く問題ないのは仲澤@失業者さんが書かれている通りです。

但し、パフォーマンスの面でも問題ないかは別問題だと思います。
範囲外に対する描画関数の呼び出し回数が膨大になるようなケースだと
パフォーマンスに悪影響があると思いますので全く画面に出てこないような
形状の描画は関数の呼び出しそのものをしないと言う考え方もあると思いますよ。


返信引用
準中級者
 準中級者
(@準中級者)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

回答者の皆さんありがとうございました。

念のためにマイクロソフトに問い合わせました。
結果としてはOSの方でDCにある大きさのビットマップを選択した場合に、
内部的に選択したビットマップの大きさのクリッピング領域を持っている
ために、Rectangle()で描画した四角形がビットマップの境界に重なって
描画したり領域外に描画してもクリッピングして描画しているとの解答が
得られました。不正なメモリにアクセスしている事はないようです。
これで解決いたしました。ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました