お絵かきソフトの基本的な描画方法をしりたい

解決


やまだ  2010-02-17 03:04:32  No: 71407

やまだです。ヨロシクです。

Q.お絵かきソフト(マウスをドラっグすると線を表示)
  の描画のタイミングは、一般的にどのようにするのでしょうか?
  
  mousemoveのつどおこなうのではなく、ゲームプログラミングみたいに
  一定時間ごとに描画するのかと想像しているのですが
    
ありがとうございました。


仲澤@失業者  2010-02-17 05:05:52  No: 71408

単純なストロークを描画する場合はWM_MOUSE_MOVEで直接書いている
アプリがほとんどです。このときのDCはキャッシュDCになります。
また、入力時の描画座標は保管しておいてWM_PAINT時に再現させます。

アンチエイリアシング等の、ちょっと複雑な描画が必要な場合はアプリ
の性質や、ターゲットとしているPCの処理速度に影響されていろいろです。

1.ボタンUpで再描画(InvalidateRect())するタイプ
    (遅いPC用/線画アプリ系)
2.裏のスレッドで同時処理しながら、処理済矩形の再描画も
    やっちゃってるやつ(早いPC用/ビットマップ画系)

等があります。お説のタイプはどちらかというと2.でしょうか。
このタイプを遅いPCで実行するとリアルタイムに描画しようと
がんばるのですが、処理結果の描画がやや遅れます。

1.のタイプはボタンUpまではキャッシュでリアルタイム処理は
しないか、簡略なものを行います。ボタンUp後に、きれいに描画
しなおします。


やまだ  2010-02-17 06:10:42  No: 71409

やまだです。
ご返信ありがとうございます。

私のアプリは、背景画像の上にタブレットを使って描きます。
消しゴムでフリーハンドのラインのみを消せます。
(ActiveXでWebから描けます。)

MOUSEMOVEメッセージをフックしてInvalidateしているため,
MOUSEMOVE,PAINTのメッセージの嵐でした。

MS PAINTアプリは、HITTESTメッセージが10個くらいつづき
MOUSEMOVEが1つ、PAINTメッセージが1つというサイクルを
繰り返していました。

とにかくご返信ありがとうございました。
InvalidRect処理をいれて様子をみることにいたします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加