- PR -

画像を一部だけ消去したい

投稿者投稿内容
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-03-30 11:29
unibon です。こんにちわ。
#1か月以上前の話題です。もしよろしければどなたかお付き合いください。

引用:

Hirashigeさんの書き込み (2004-02-20 18:47) より:
引用:


現在の PC の現状では、画面に図形をドロー(draw)したりビットマップを貼り付け(blt)たりするのは、とてもすばやくできるため、これがネックになることはほとんどありません。一方、そのための図形の形状の定義(構築)やビットマップの作成などには、昔ながらのコストがかかるものです。invalidate は、前者の draw や blt の段階では効きますが、これはどっちかといえばウィンドウシステムの都合で備わっているものです。




 例えば、DrawReversibleFrameやDrawReversibleLineを使ってクライアント領域の一部をマウスドラッグで指定したり、線を引いたりする場合の様に細かく画面を書き換えなければならないような時に、マウス移動のたびに全体を描画していたのではスムースな操作は期待できなくなり、クライアント領域の大きさにもよりますが、必要最小限をInvalidateしないと大きなネックにならないでしょうか。


DrawReversibleFrame や DrawReversibleLineは、おそらく XOR で描画する API だと思いますが、いまどき XOR は、はやらないと思います。と書くとなんだか語気が荒いですが、もちろん XOR を使うのもありですが、しかし、カーソルのような表現をしたい場合 XOR だけではいろいろと限界もありますし、また、現在は PC の性能も上がっていますので、XOR を必ずしも中心に考える必要はないでしょう。
#たとえば単純に XOR を使うと灰色の部分でカーソルを表現できなくなります。理論的には XOR 以外の演算を使う手もありますが。あと、XOR だと貧乏臭く見えます。
たしかに全体の描画し直しは、単純にやればかなりコストがかかりますが、カーソルを描画する前のビットマップをキャッシュして持っておくこと等で解決できます。ビットマップのメモリがもったいないですが、せいぜい物理的な画面のサイズ以下なので、さほどのことはないでしょう。

スキルアップ/キャリアアップ(JOB@IT)